createReverseExpressionStaticDivides static method

List<NamedLine> createReverseExpressionStaticDivides(
  1. Expression staticExpr,
  2. double count, {
  3. (DIRECTION_ENUM, Size, PxUnit?)? infinitySample,
  4. NamedLine? fromEndLine,
  5. NamedLine? toStartLine,
  6. 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),
  ];
}