transformPath method

void transformPath(
  1. dynamic path,
  2. Matrix3 m
)

Implementation

void transformPath(path, Matrix3 m) {
  void transfVec2(Vector v2) {
    tempV3.setValues(v2.x, v2.y, 1).applyMatrix3(m);

    v2.setValues(tempV3.x, tempV3.y);
  }

  final isRotated = isTransformRotated(m);

  final subPaths = path.subPaths;

  for (int i = 0, n = subPaths.length; i < n; i++) {
    final subPath = subPaths[i];
    final curves = subPath.curves;

    for (int j = 0; j < curves.length; j++) {
      final curve = curves[j];

      if (curve is LineCurve) {
        transfVec2(curve.v1);
        transfVec2(curve.v2);
      }
      else if (curve.isCubicBezierCurve) {
        transfVec2(curve.v0);
        transfVec2(curve.v1);
        transfVec2(curve.v2);
        transfVec2(curve.v3);
      }
      else if (curve.isQuadraticBezierCurve) {
        transfVec2(curve.v0);
        transfVec2(curve.v1);
        transfVec2(curve.v2);
      }
      else if (curve.isEllipseCurve) {
        if (isRotated) {
          console.info('SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.');
        }

        tempV2.setValues(curve.aX, curve.aY);
        transfVec2(tempV2);
        curve.aX = tempV2.x;
        curve.aY = tempV2.y;

        curve.xRadius *= getTransformScaleX(m);
        curve.yRadius *= getTransformScaleY(m);
      }
    }
  }
}