createReverseExpressionStaticDivides static method
List<NamedLine>
createReverseExpressionStaticDivides(
- Expression staticExpr,
- double count, {
- (DIRECTION_ENUM, Size, PxUnit?)? infinitySample,
- NamedLine? fromEndLine,
- NamedLine? toStartLine,
- END_POINT endPoint = END_POINT.exclude_start_end,
Implementation
static List<NamedLine> createReverseExpressionStaticDivides(Expression staticExpr, double count, {(DIRECTION_ENUM, Size, PxUnit?)? infinitySample,
NamedLine? fromEndLine,
NamedLine? toStartLine,
END_POINT endPoint = END_POINT.exclude_start_end,
}){
assert(count != double.infinity || infinitySample != null);
NamedLine fromStart = fromEndLine ?? NamedLine.percent(1.0, name: NAME_END);
NamedLine toEnd = toStartLine ?? NamedLine.percent(0.0, name: NAME_START);
if(count == double.infinity){
switch(infinitySample!.$1){
case DIRECTION_ENUM.vertical:
count = ((fromStart - toEnd) as Expression).verticalWidthMergeLiteral(infinitySample.$3 ?? PxUnit.wpc)(infinitySample.$2).$1 / staticExpr.verticalWidthMergeLiteral(infinitySample.$3 ?? PxUnit.wpc)(infinitySample.$2).$1;
break;
case DIRECTION_ENUM.horizontal:
count = ((fromStart - toEnd) as Expression).horizontalHeightMergeLiteral(infinitySample.$3 ?? PxUnit.hpc)(infinitySample.$2).$1 / staticExpr.horizontalHeightMergeLiteral(infinitySample.$3 ?? PxUnit.hpc)(infinitySample.$2).$1;
}
}
List<NamedLine> excludeStartEnd = List.generate(count.floor(), (index){
var minusExpr = fromStart - staticExpr * (index + 1);
return NamedLine.expression(minusExpr, name: '$STATIC_DIVIDES-${index+1}');
/// 反序输出确保从小到大排列
}).reversed.toList();
/// 起始点也应该反序
return [
if(endPoint == END_POINT.include_end_only || endPoint == END_POINT.include_start_end)
NamedLine.rename(rename: '$STATIC_DIVIDES-$NAME_END', copy: toEnd),
...excludeStartEnd,
if(endPoint == END_POINT.include_start_only || endPoint == END_POINT.include_start_end)
NamedLine.rename(rename: '$STATIC_DIVIDES-$NAME_START', copy: fromStart),
];
}