@retikz/core 0.3.0-alpha.5 → 0.3.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/arrows/define.d.ts +9 -0
- package/dist/es/arrows/define.d.ts.map +1 -0
- package/dist/es/arrows/define.js +10 -0
- package/dist/es/arrows/index.d.ts +3 -1
- package/dist/es/arrows/index.d.ts.map +1 -1
- package/dist/es/arrows/index.js +15 -2
- package/dist/es/arrows/types.d.ts +4 -2
- package/dist/es/arrows/types.d.ts.map +1 -1
- package/dist/es/compile/anchor-cache.d.ts +3 -3
- package/dist/es/compile/anchor-cache.d.ts.map +1 -1
- package/dist/es/compile/anchor-cache.js +18 -5
- package/dist/es/compile/compile.d.ts +5 -14
- package/dist/es/compile/compile.d.ts.map +1 -1
- package/dist/es/compile/compile.js +46 -43
- package/dist/es/compile/{lowerComposites.d.ts → composite.d.ts} +9 -2
- package/dist/es/compile/composite.d.ts.map +1 -0
- package/dist/es/compile/{lowerComposites.js → composite.js} +9 -1
- package/dist/es/compile/constant.d.ts +30 -0
- package/dist/es/compile/constant.d.ts.map +1 -0
- package/dist/es/compile/constant.js +21 -0
- package/dist/es/compile/direction.d.ts +27 -0
- package/dist/es/compile/direction.d.ts.map +1 -0
- package/dist/es/compile/direction.js +30 -0
- package/dist/es/compile/index.d.ts +3 -1
- package/dist/es/compile/index.d.ts.map +1 -1
- package/dist/es/compile/name-stack.d.ts +3 -1
- package/dist/es/compile/name-stack.d.ts.map +1 -1
- package/dist/es/compile/name-stack.js +5 -1
- package/dist/es/compile/node.d.ts +19 -8
- package/dist/es/compile/node.d.ts.map +1 -1
- package/dist/es/compile/node.js +56 -70
- package/dist/es/compile/paint.js +1 -1
- package/dist/es/compile/path/anchor.d.ts +4 -3
- package/dist/es/compile/path/anchor.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.js +9 -12
- package/dist/es/compile/path/index.d.ts +6 -8
- package/dist/es/compile/path/index.d.ts.map +1 -1
- package/dist/es/compile/path/index.js +97 -44
- package/dist/es/compile/path/label.d.ts.map +1 -1
- package/dist/es/compile/path/label.js +8 -4
- package/dist/es/compile/path/relative.d.ts +1 -1
- package/dist/es/compile/path/relative.js +1 -1
- package/dist/es/compile/path/shrink.d.ts +3 -1
- package/dist/es/compile/path/shrink.d.ts.map +1 -1
- package/dist/es/compile/path/shrink.js +16 -11
- package/dist/es/compile/position.d.ts +2 -2
- package/dist/es/compile/position.d.ts.map +1 -1
- package/dist/es/compile/position.js +6 -19
- package/dist/es/compile/precision.d.ts +1 -1
- package/dist/es/compile/precision.d.ts.map +1 -1
- package/dist/es/compile/precision.js +2 -2
- package/dist/es/compile/scope.d.ts +7 -5
- package/dist/es/compile/scope.d.ts.map +1 -1
- package/dist/es/compile/scope.js +44 -16
- package/dist/es/compile/style.d.ts +2 -2
- package/dist/es/compile/style.d.ts.map +1 -1
- package/dist/es/compile/style.js +2 -2
- package/dist/es/compile/text-metrics.d.ts +1 -1
- package/dist/es/compile/text-metrics.js +2 -2
- package/dist/es/composites/define.d.ts +8 -0
- package/dist/es/composites/define.d.ts.map +1 -0
- package/dist/es/composites/{types.js → define.js} +2 -2
- package/dist/es/composites/index.d.ts +1 -1
- package/dist/es/composites/index.d.ts.map +1 -1
- package/dist/es/composites/types.d.ts +0 -6
- package/dist/es/composites/types.d.ts.map +1 -1
- package/dist/es/geometry/anchor.d.ts +33 -0
- package/dist/es/geometry/anchor.d.ts.map +1 -0
- package/dist/es/geometry/anchor.js +45 -0
- package/dist/es/geometry/bend.d.ts +1 -1
- package/dist/es/geometry/bend.js +3 -3
- package/dist/es/geometry/circle.d.ts +4 -4
- package/dist/es/geometry/circle.d.ts.map +1 -1
- package/dist/es/geometry/circle.js +3 -3
- package/dist/es/geometry/{roundedContour.d.ts → contour.d.ts} +9 -5
- package/dist/es/geometry/contour.d.ts.map +1 -0
- package/dist/es/geometry/{roundedContour.js → contour.js} +27 -37
- package/dist/es/geometry/diamond.d.ts +10 -4
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +11 -3
- package/dist/{lib/geometry/_edge.d.ts → es/geometry/edge.d.ts} +1 -1
- package/dist/es/geometry/edge.d.ts.map +1 -0
- package/dist/es/geometry/{_edge.js → edge.js} +1 -1
- package/dist/es/geometry/ellipse.d.ts +3 -3
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +4 -2
- package/dist/es/geometry/index.d.ts +6 -1
- package/dist/es/geometry/index.d.ts.map +1 -1
- package/dist/es/geometry/point.d.ts +6 -0
- package/dist/es/geometry/point.d.ts.map +1 -1
- package/dist/es/geometry/point.js +17 -0
- package/dist/es/geometry/rect.d.ts +4 -17
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +4 -16
- package/dist/es/geometry/segment.d.ts +7 -0
- package/dist/es/geometry/segment.d.ts.map +1 -1
- package/dist/es/geometry/segment.js +48 -47
- package/dist/{lib/geometry/_transform.d.ts → es/geometry/transform.d.ts} +1 -1
- package/dist/es/geometry/transform.d.ts.map +1 -0
- package/dist/es/geometry/{_transform.js → transform.js} +1 -1
- package/dist/es/index.d.ts +13 -13
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +20 -16
- package/dist/es/ir/animation.d.ts +26 -125
- package/dist/es/ir/animation.d.ts.map +1 -1
- package/dist/es/ir/animation.js +6 -6
- package/dist/es/ir/boundary.d.ts +4 -10
- package/dist/es/ir/boundary.d.ts.map +1 -1
- package/dist/es/ir/clip.d.ts +6 -46
- package/dist/es/ir/clip.d.ts.map +1 -1
- package/dist/es/ir/composite.d.ts +2 -14
- package/dist/es/ir/composite.d.ts.map +1 -1
- package/dist/es/ir/coordinate.d.ts +14 -50
- package/dist/es/ir/coordinate.d.ts.map +1 -1
- package/dist/es/ir/coordinate.js +1 -1
- package/dist/es/ir/font.d.ts +10 -13
- package/dist/es/ir/font.d.ts.map +1 -1
- package/dist/es/ir/json.d.ts +1 -1
- package/dist/es/ir/json.d.ts.map +1 -1
- package/dist/es/ir/json.js +1 -1
- package/dist/es/ir/node.d.ts +175 -821
- package/dist/es/ir/node.d.ts.map +1 -1
- package/dist/es/ir/node.js +23 -23
- package/dist/es/ir/paint.d.ts +23 -100
- package/dist/es/ir/paint.d.ts.map +1 -1
- package/dist/es/ir/paint.js +10 -10
- package/dist/es/ir/path/arrow.d.ts +19 -131
- package/dist/es/ir/path/arrow.d.ts.map +1 -1
- package/dist/es/ir/path/arrow.js +18 -16
- package/dist/es/ir/path/path.d.ts +519 -3065
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/path.js +3 -3
- package/dist/es/ir/path/step.d.ts +929 -3474
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/step.js +74 -23
- package/dist/es/ir/path/target.d.ts +40 -121
- package/dist/es/ir/path/target.d.ts.map +1 -1
- package/dist/es/ir/path/target.js +3 -3
- package/dist/es/ir/position/at-position.d.ts +20 -28
- package/dist/es/ir/position/at-position.d.ts.map +1 -1
- package/dist/es/ir/position/at-position.js +11 -11
- package/dist/es/ir/position/offset-position.d.ts +2 -8
- package/dist/es/ir/position/offset-position.d.ts.map +1 -1
- package/dist/es/ir/scene.d.ts +17 -181
- package/dist/es/ir/scene.d.ts.map +1 -1
- package/dist/es/ir/scope.d.ts +315 -7291
- package/dist/es/ir/scope.d.ts.map +1 -1
- package/dist/es/ir/scope.js +10 -7
- package/dist/es/ir/shape.d.ts +2 -8
- package/dist/es/ir/shape.d.ts.map +1 -1
- package/dist/es/ir/text.d.ts +24 -70
- package/dist/es/ir/text.d.ts.map +1 -1
- package/dist/es/ir/transform.d.ts +47 -144
- package/dist/es/ir/transform.d.ts.map +1 -1
- package/dist/es/ir/transform.js +12 -5
- package/dist/es/parsers/index.d.ts +3 -3
- package/dist/es/parsers/index.d.ts.map +1 -1
- package/dist/es/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
- package/dist/es/parsers/node-target.d.ts.map +1 -0
- package/dist/es/parsers/{parseNodeTarget.js → node-target.js} +10 -8
- package/dist/{lib/parsers/parseTargetSugar.d.ts → es/parsers/target-sugar.d.ts} +1 -1
- package/dist/es/parsers/target-sugar.d.ts.map +1 -0
- package/dist/es/parsers/{parseTargetSugar.js → target-sugar.js} +9 -4
- package/dist/{lib/parsers/parseWay.d.ts → es/parsers/way.d.ts} +2 -2
- package/dist/es/parsers/way.d.ts.map +1 -0
- package/dist/es/parsers/{parseWay.js → way.js} +10 -6
- package/dist/es/path-generators/define.d.ts.map +1 -0
- package/dist/es/{pathGenerators → path-generators}/define.js +1 -1
- package/dist/es/path-generators/index.d.ts.map +1 -0
- package/dist/es/path-generators/types.d.ts.map +1 -0
- package/dist/es/patterns/define.d.ts +9 -0
- package/dist/es/patterns/define.d.ts.map +1 -0
- package/dist/es/patterns/define.js +10 -0
- package/dist/es/patterns/index.d.ts +1 -0
- package/dist/es/patterns/index.d.ts.map +1 -1
- package/dist/es/patterns/index.js +42 -35
- package/dist/es/presets/animation.js +2 -2
- package/dist/es/primitive/marker.d.ts +7 -7
- package/dist/es/primitive/marker.d.ts.map +1 -1
- package/dist/es/primitive/paint.d.ts +1 -1
- package/dist/es/primitive/path.d.ts +1 -1
- package/dist/es/shapes/arc.d.ts.map +1 -1
- package/dist/es/shapes/arc.js +24 -5
- package/dist/{lib/shapes/_contour.d.ts → es/shapes/contour.d.ts} +6 -3
- package/dist/es/shapes/contour.d.ts.map +1 -0
- package/dist/es/shapes/{_contour.js → contour.js} +14 -2
- package/dist/es/shapes/ellipse.js +2 -2
- package/dist/es/shapes/index.d.ts +1 -1
- package/dist/es/shapes/index.d.ts.map +1 -1
- package/dist/es/shapes/index.js +1 -1
- package/dist/es/shapes/polygon.d.ts +1 -1
- package/dist/es/shapes/polygon.d.ts.map +1 -1
- package/dist/es/shapes/polygon.js +26 -21
- package/dist/es/shapes/rectangle.js +6 -6
- package/dist/es/shapes/sector.d.ts.map +1 -1
- package/dist/es/shapes/sector.js +30 -22
- package/dist/es/shapes/{_shared.d.ts → shared.d.ts} +7 -10
- package/dist/es/shapes/shared.d.ts.map +1 -0
- package/dist/es/shapes/{_shared.js → shared.js} +13 -15
- package/dist/es/shapes/star.d.ts.map +1 -1
- package/dist/es/shapes/star.js +6 -15
- package/dist/es/shapes/types.d.ts +10 -3
- package/dist/es/shapes/types.d.ts.map +1 -1
- package/dist/es/types.d.ts +1 -1
- package/dist/lib/arrows/define.cjs +10 -0
- package/dist/lib/arrows/define.d.ts +9 -0
- package/dist/lib/arrows/define.d.ts.map +1 -0
- package/dist/lib/arrows/index.cjs +15 -2
- package/dist/lib/arrows/index.d.ts +3 -1
- package/dist/lib/arrows/index.d.ts.map +1 -1
- package/dist/lib/arrows/types.d.ts +4 -2
- package/dist/lib/arrows/types.d.ts.map +1 -1
- package/dist/lib/compile/anchor-cache.cjs +17 -4
- package/dist/lib/compile/anchor-cache.d.ts +3 -3
- package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
- package/dist/lib/compile/compile.cjs +44 -41
- package/dist/lib/compile/compile.d.ts +5 -14
- package/dist/lib/compile/compile.d.ts.map +1 -1
- package/dist/lib/compile/{lowerComposites.cjs → composite.cjs} +9 -1
- package/dist/lib/compile/{lowerComposites.d.ts → composite.d.ts} +9 -2
- package/dist/lib/compile/composite.d.ts.map +1 -0
- package/dist/lib/compile/constant.cjs +22 -0
- package/dist/lib/compile/constant.d.ts +30 -0
- package/dist/lib/compile/constant.d.ts.map +1 -0
- package/dist/lib/compile/direction.cjs +31 -0
- package/dist/lib/compile/direction.d.ts +27 -0
- package/dist/lib/compile/direction.d.ts.map +1 -0
- package/dist/lib/compile/index.d.ts +3 -1
- package/dist/lib/compile/index.d.ts.map +1 -1
- package/dist/lib/compile/name-stack.cjs +5 -1
- package/dist/lib/compile/name-stack.d.ts +3 -1
- package/dist/lib/compile/name-stack.d.ts.map +1 -1
- package/dist/lib/compile/node.cjs +56 -69
- package/dist/lib/compile/node.d.ts +19 -8
- package/dist/lib/compile/node.d.ts.map +1 -1
- package/dist/lib/compile/paint.cjs +1 -1
- package/dist/lib/compile/path/anchor.cjs +10 -12
- package/dist/lib/compile/path/anchor.d.ts +4 -3
- package/dist/lib/compile/path/anchor.d.ts.map +1 -1
- package/dist/lib/compile/path/index.cjs +95 -42
- package/dist/lib/compile/path/index.d.ts +6 -8
- package/dist/lib/compile/path/index.d.ts.map +1 -1
- package/dist/lib/compile/path/label.cjs +8 -4
- package/dist/lib/compile/path/label.d.ts.map +1 -1
- package/dist/lib/compile/path/relative.cjs +1 -1
- package/dist/lib/compile/path/relative.d.ts +1 -1
- package/dist/lib/compile/path/shrink.cjs +16 -11
- package/dist/lib/compile/path/shrink.d.ts +3 -1
- package/dist/lib/compile/path/shrink.d.ts.map +1 -1
- package/dist/lib/compile/position.cjs +6 -19
- package/dist/lib/compile/position.d.ts +2 -2
- package/dist/lib/compile/position.d.ts.map +1 -1
- package/dist/lib/compile/precision.cjs +2 -2
- package/dist/lib/compile/precision.d.ts +1 -1
- package/dist/lib/compile/precision.d.ts.map +1 -1
- package/dist/lib/compile/scope.cjs +44 -16
- package/dist/lib/compile/scope.d.ts +7 -5
- package/dist/lib/compile/scope.d.ts.map +1 -1
- package/dist/lib/compile/style.cjs +2 -2
- package/dist/lib/compile/style.d.ts +2 -2
- package/dist/lib/compile/style.d.ts.map +1 -1
- package/dist/lib/compile/text-metrics.cjs +2 -2
- package/dist/lib/compile/text-metrics.d.ts +1 -1
- package/dist/lib/composites/{types.cjs → define.cjs} +2 -2
- package/dist/lib/composites/define.d.ts +8 -0
- package/dist/lib/composites/define.d.ts.map +1 -0
- package/dist/lib/composites/index.d.ts +1 -1
- package/dist/lib/composites/index.d.ts.map +1 -1
- package/dist/lib/composites/types.d.ts +0 -6
- package/dist/lib/composites/types.d.ts.map +1 -1
- package/dist/lib/geometry/anchor.cjs +47 -0
- package/dist/lib/geometry/anchor.d.ts +33 -0
- package/dist/lib/geometry/anchor.d.ts.map +1 -0
- package/dist/lib/geometry/bend.cjs +3 -3
- package/dist/lib/geometry/bend.d.ts +1 -1
- package/dist/lib/geometry/circle.cjs +9 -9
- package/dist/lib/geometry/circle.d.ts +4 -4
- package/dist/lib/geometry/circle.d.ts.map +1 -1
- package/dist/lib/geometry/{roundedContour.cjs → contour.cjs} +26 -35
- package/dist/lib/geometry/{roundedContour.d.ts → contour.d.ts} +9 -5
- package/dist/lib/geometry/contour.d.ts.map +1 -0
- package/dist/lib/geometry/diamond.cjs +16 -8
- package/dist/lib/geometry/diamond.d.ts +10 -4
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/{_edge.cjs → edge.cjs} +1 -1
- package/dist/{es/geometry/_edge.d.ts → lib/geometry/edge.d.ts} +1 -1
- package/dist/lib/geometry/edge.d.ts.map +1 -0
- package/dist/lib/geometry/ellipse.cjs +10 -8
- package/dist/lib/geometry/ellipse.d.ts +3 -3
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/index.d.ts +6 -1
- package/dist/lib/geometry/index.d.ts.map +1 -1
- package/dist/lib/geometry/point.cjs +17 -0
- package/dist/lib/geometry/point.d.ts +6 -0
- package/dist/lib/geometry/point.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +9 -22
- package/dist/lib/geometry/rect.d.ts +4 -17
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/geometry/segment.cjs +48 -46
- package/dist/lib/geometry/segment.d.ts +7 -0
- package/dist/lib/geometry/segment.d.ts.map +1 -1
- package/dist/lib/geometry/{_transform.cjs → transform.cjs} +1 -1
- package/dist/{es/geometry/_transform.d.ts → lib/geometry/transform.d.ts} +1 -1
- package/dist/lib/geometry/transform.d.ts.map +1 -0
- package/dist/lib/index.cjs +35 -22
- package/dist/lib/index.d.ts +13 -13
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/animation.cjs +6 -6
- package/dist/lib/ir/animation.d.ts +26 -125
- package/dist/lib/ir/animation.d.ts.map +1 -1
- package/dist/lib/ir/boundary.d.ts +4 -10
- package/dist/lib/ir/boundary.d.ts.map +1 -1
- package/dist/lib/ir/clip.d.ts +6 -46
- package/dist/lib/ir/clip.d.ts.map +1 -1
- package/dist/lib/ir/composite.d.ts +2 -14
- package/dist/lib/ir/composite.d.ts.map +1 -1
- package/dist/lib/ir/coordinate.cjs +1 -1
- package/dist/lib/ir/coordinate.d.ts +14 -50
- package/dist/lib/ir/coordinate.d.ts.map +1 -1
- package/dist/lib/ir/font.d.ts +10 -13
- package/dist/lib/ir/font.d.ts.map +1 -1
- package/dist/lib/ir/json.cjs +1 -1
- package/dist/lib/ir/json.d.ts +1 -1
- package/dist/lib/ir/json.d.ts.map +1 -1
- package/dist/lib/ir/node.cjs +23 -23
- package/dist/lib/ir/node.d.ts +175 -821
- package/dist/lib/ir/node.d.ts.map +1 -1
- package/dist/lib/ir/paint.cjs +10 -10
- package/dist/lib/ir/paint.d.ts +23 -100
- package/dist/lib/ir/paint.d.ts.map +1 -1
- package/dist/lib/ir/path/arrow.cjs +18 -16
- package/dist/lib/ir/path/arrow.d.ts +19 -131
- package/dist/lib/ir/path/arrow.d.ts.map +1 -1
- package/dist/lib/ir/path/path.cjs +4 -2
- package/dist/lib/ir/path/path.d.ts +519 -3065
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.cjs +74 -22
- package/dist/lib/ir/path/step.d.ts +929 -3474
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/path/target.cjs +3 -3
- package/dist/lib/ir/path/target.d.ts +40 -121
- package/dist/lib/ir/path/target.d.ts.map +1 -1
- package/dist/lib/ir/position/at-position.cjs +11 -11
- package/dist/lib/ir/position/at-position.d.ts +20 -28
- package/dist/lib/ir/position/at-position.d.ts.map +1 -1
- package/dist/lib/ir/position/offset-position.d.ts +2 -8
- package/dist/lib/ir/position/offset-position.d.ts.map +1 -1
- package/dist/lib/ir/scene.d.ts +17 -181
- package/dist/lib/ir/scene.d.ts.map +1 -1
- package/dist/lib/ir/scope.cjs +10 -7
- package/dist/lib/ir/scope.d.ts +315 -7291
- package/dist/lib/ir/scope.d.ts.map +1 -1
- package/dist/lib/ir/shape.d.ts +2 -8
- package/dist/lib/ir/shape.d.ts.map +1 -1
- package/dist/lib/ir/text.d.ts +24 -70
- package/dist/lib/ir/text.d.ts.map +1 -1
- package/dist/lib/ir/transform.cjs +11 -4
- package/dist/lib/ir/transform.d.ts +47 -144
- package/dist/lib/ir/transform.d.ts.map +1 -1
- package/dist/lib/parsers/index.d.ts +3 -3
- package/dist/lib/parsers/index.d.ts.map +1 -1
- package/dist/lib/parsers/{parseNodeTarget.cjs → node-target.cjs} +10 -8
- package/dist/lib/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
- package/dist/lib/parsers/node-target.d.ts.map +1 -0
- package/dist/lib/parsers/{parseTargetSugar.cjs → target-sugar.cjs} +9 -4
- package/dist/{es/parsers/parseTargetSugar.d.ts → lib/parsers/target-sugar.d.ts} +1 -1
- package/dist/lib/parsers/target-sugar.d.ts.map +1 -0
- package/dist/lib/parsers/{parseWay.cjs → way.cjs} +13 -9
- package/dist/{es/parsers/parseWay.d.ts → lib/parsers/way.d.ts} +2 -2
- package/dist/lib/parsers/way.d.ts.map +1 -0
- package/dist/lib/{pathGenerators → path-generators}/define.cjs +1 -1
- package/dist/lib/path-generators/define.d.ts.map +1 -0
- package/dist/lib/path-generators/index.d.ts.map +1 -0
- package/dist/lib/path-generators/types.d.ts.map +1 -0
- package/dist/lib/patterns/define.cjs +10 -0
- package/dist/lib/patterns/define.d.ts +9 -0
- package/dist/lib/patterns/define.d.ts.map +1 -0
- package/dist/lib/patterns/index.cjs +42 -35
- package/dist/lib/patterns/index.d.ts +1 -0
- package/dist/lib/patterns/index.d.ts.map +1 -1
- package/dist/lib/presets/animation.cjs +2 -2
- package/dist/lib/primitive/marker.d.ts +7 -7
- package/dist/lib/primitive/marker.d.ts.map +1 -1
- package/dist/lib/primitive/paint.d.ts +1 -1
- package/dist/lib/primitive/path.d.ts +1 -1
- package/dist/lib/shapes/arc.cjs +26 -7
- package/dist/lib/shapes/arc.d.ts.map +1 -1
- package/dist/lib/shapes/{_contour.cjs → contour.cjs} +14 -1
- package/dist/{es/shapes/_contour.d.ts → lib/shapes/contour.d.ts} +6 -3
- package/dist/lib/shapes/contour.d.ts.map +1 -0
- package/dist/lib/shapes/ellipse.cjs +2 -2
- package/dist/lib/shapes/index.cjs +1 -1
- package/dist/lib/shapes/index.d.ts +1 -1
- package/dist/lib/shapes/index.d.ts.map +1 -1
- package/dist/lib/shapes/polygon.cjs +29 -24
- package/dist/lib/shapes/polygon.d.ts +1 -1
- package/dist/lib/shapes/polygon.d.ts.map +1 -1
- package/dist/lib/shapes/rectangle.cjs +12 -12
- package/dist/lib/shapes/sector.cjs +41 -33
- package/dist/lib/shapes/sector.d.ts.map +1 -1
- package/dist/lib/shapes/{_shared.cjs → shared.cjs} +12 -15
- package/dist/lib/shapes/{_shared.d.ts → shared.d.ts} +7 -10
- package/dist/lib/shapes/shared.d.ts.map +1 -0
- package/dist/lib/shapes/star.cjs +9 -18
- package/dist/lib/shapes/star.d.ts.map +1 -1
- package/dist/lib/shapes/types.d.ts +10 -3
- package/dist/lib/shapes/types.d.ts.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/package.json +3 -4
- package/dist/es/compile/lowerComposites.d.ts.map +0 -1
- package/dist/es/geometry/_edge.d.ts.map +0 -1
- package/dist/es/geometry/_transform.d.ts.map +0 -1
- package/dist/es/geometry/roundedContour.d.ts.map +0 -1
- package/dist/es/parsers/parseNodeTarget.d.ts.map +0 -1
- package/dist/es/parsers/parseTargetSugar.d.ts.map +0 -1
- package/dist/es/parsers/parseWay.d.ts.map +0 -1
- package/dist/es/pathGenerators/define.d.ts.map +0 -1
- package/dist/es/pathGenerators/index.d.ts.map +0 -1
- package/dist/es/pathGenerators/types.d.ts.map +0 -1
- package/dist/es/shapes/_contour.d.ts.map +0 -1
- package/dist/es/shapes/_shared.d.ts.map +0 -1
- package/dist/lib/compile/lowerComposites.d.ts.map +0 -1
- package/dist/lib/geometry/_edge.d.ts.map +0 -1
- package/dist/lib/geometry/_transform.d.ts.map +0 -1
- package/dist/lib/geometry/roundedContour.d.ts.map +0 -1
- package/dist/lib/parsers/parseNodeTarget.d.ts.map +0 -1
- package/dist/lib/parsers/parseTargetSugar.d.ts.map +0 -1
- package/dist/lib/parsers/parseWay.d.ts.map +0 -1
- package/dist/lib/pathGenerators/define.d.ts.map +0 -1
- package/dist/lib/pathGenerators/index.d.ts.map +0 -1
- package/dist/lib/pathGenerators/types.d.ts.map +0 -1
- package/dist/lib/shapes/_contour.d.ts.map +0 -1
- package/dist/lib/shapes/_shared.d.ts.map +0 -1
- /package/dist/es/{pathGenerators → path-generators}/define.d.ts +0 -0
- /package/dist/es/{pathGenerators → path-generators}/index.d.ts +0 -0
- /package/dist/es/{pathGenerators → path-generators}/types.d.ts +0 -0
- /package/dist/lib/{pathGenerators → path-generators}/define.d.ts +0 -0
- /package/dist/lib/{pathGenerators → path-generators}/index.d.ts +0 -0
- /package/dist/lib/{pathGenerators → path-generators}/types.d.ts +0 -0
|
@@ -1,37 +1,25 @@
|
|
|
1
|
-
import { arcAngleInRange, rayArc } from "./arc.js";
|
|
2
|
-
|
|
1
|
+
import { arcAngleInRange, arcEndPoint, rayArc } from "./arc.js";
|
|
2
|
+
import { point } from "./point.js";
|
|
3
|
+
//#region src/geometry/contour.ts
|
|
3
4
|
var DEG_TO_RAD = Math.PI / 180;
|
|
4
5
|
var RAD_TO_DEG = 180 / Math.PI;
|
|
5
6
|
var EPSILON = 1e-9;
|
|
6
|
-
/** 向量长度 */
|
|
7
|
-
var length = (v) => Math.hypot(v[0], v[1]);
|
|
8
|
-
/** 归一化(零向量回退 [1, 0]) */
|
|
9
|
-
var normalize = (v) => {
|
|
10
|
-
const len = length(v);
|
|
11
|
-
if (len < EPSILON) return [1, 0];
|
|
12
|
-
return [v[0] / len, v[1] / len];
|
|
13
|
-
};
|
|
14
7
|
/** 二维叉积 a × b */
|
|
15
8
|
var cross = (a, b) => a[0] * b[1] - a[1] * b[0];
|
|
16
|
-
/** 点 + 角度(度)→ 圆周点 */
|
|
17
|
-
var arcPoint = (center, radius, angleDeg) => {
|
|
18
|
-
const rad = angleDeg * DEG_TO_RAD;
|
|
19
|
-
return [center[0] + Math.cos(rad) * radius, center[1] + Math.sin(rad) * radius];
|
|
20
|
-
};
|
|
21
9
|
/** 段起点 */
|
|
22
|
-
var segmentStart = (seg) => seg.kind === "line" ? seg.from :
|
|
10
|
+
var segmentStart = (seg) => seg.kind === "line" ? seg.from : arcEndPoint(seg.center, seg.radius, seg.startAngle);
|
|
23
11
|
/** 段终点 */
|
|
24
|
-
var segmentEnd = (seg) => seg.kind === "line" ? seg.to :
|
|
12
|
+
var segmentEnd = (seg) => seg.kind === "line" ? seg.to : arcEndPoint(seg.center, seg.radius, seg.endAngle);
|
|
25
13
|
/**
|
|
26
14
|
* 段在某端的「行进切线」单位向量
|
|
27
15
|
* @description atStart=true 取起点处沿行进方向的切线,否则取终点处。line 两端切线相同;
|
|
28
16
|
* arc 切线垂直于半径,方向随 counterClockwise 翻转(CW: (-sinθ, cosθ),CCW: (sinθ, -cosθ))。
|
|
29
17
|
*/
|
|
30
18
|
var tangentAt = (seg, atStart) => {
|
|
31
|
-
if (seg.kind === "line") return normalize([seg.to[0] - seg.from[0], seg.to[1] - seg.from[1]]);
|
|
19
|
+
if (seg.kind === "line") return point.normalize([seg.to[0] - seg.from[0], seg.to[1] - seg.from[1]]);
|
|
32
20
|
const rad = (atStart ? seg.startAngle : seg.endAngle) * DEG_TO_RAD;
|
|
33
21
|
const sign = seg.counterClockwise ? -1 : 1;
|
|
34
|
-
return normalize([-Math.sin(rad) * sign, Math.cos(rad) * sign]);
|
|
22
|
+
return point.normalize([-Math.sin(rad) * sign, Math.cos(rad) * sign]);
|
|
35
23
|
};
|
|
36
24
|
/** arc 段的角跨度(带符号:CW 为正递增、CCW 为负),单位度 */
|
|
37
25
|
var arcSpan = (seg) => seg.endAngle - seg.startAngle;
|
|
@@ -44,7 +32,7 @@ var fractionAlong = (seg, p, fromStart) => {
|
|
|
44
32
|
const ex = seg.to[0] - seg.from[0];
|
|
45
33
|
const ey = seg.to[1] - seg.from[1];
|
|
46
34
|
const len2 = ex * ex + ey * ey;
|
|
47
|
-
if (len2 < EPSILON) return 0;
|
|
35
|
+
if (len2 < EPSILON * EPSILON) return 0;
|
|
48
36
|
const t = ((p[0] - seg.from[0]) * ex + (p[1] - seg.from[1]) * ey) / len2;
|
|
49
37
|
return fromStart ? t : 1 - t;
|
|
50
38
|
}
|
|
@@ -167,9 +155,10 @@ var solveFillet = (segA, segB, r) => {
|
|
|
167
155
|
const tInPt = tangentPointOn(segA, cand, radius);
|
|
168
156
|
const tOutPt = tangentPointOn(segB, cand, radius);
|
|
169
157
|
if (!tInPt || !tOutPt) continue;
|
|
158
|
+
const tol = 1e-6 * Math.max(1, radius, Math.abs(corner[0]), Math.abs(corner[1]));
|
|
170
159
|
const dA = distanceToAny(segA, cand);
|
|
171
160
|
const dB = distanceToAny(segB, cand);
|
|
172
|
-
if (Math.abs(dA - radius) >
|
|
161
|
+
if (Math.abs(dA - radius) > tol || Math.abs(dB - radius) > tol) continue;
|
|
173
162
|
const inFrac = fractionAlong(segA, tInPt, false);
|
|
174
163
|
const outFrac = fractionAlong(segB, tOutPt, true);
|
|
175
164
|
if (inFrac < -1e-7 || inFrac > .5000001 || outFrac < -1e-7 || outFrac > .5000001) continue;
|
|
@@ -264,7 +253,8 @@ var tangentPointOn = (seg, filletCenter, radius) => {
|
|
|
264
253
|
best = cand;
|
|
265
254
|
}
|
|
266
255
|
}
|
|
267
|
-
|
|
256
|
+
const tol = 1e-6 * Math.max(1, radius, Math.abs(filletCenter[0]), Math.abs(filletCenter[1]));
|
|
257
|
+
return bestErr <= tol ? best : void 0;
|
|
268
258
|
};
|
|
269
259
|
/**
|
|
270
260
|
* 对闭合轮廓的每个接缝做 fillet,返回 fillet 解算列表(与接缝一一对应,下标 i = 段 i 终点接段 (i+1)%n 起点)
|
|
@@ -287,10 +277,9 @@ var filletContour = (segments, cornerRadius) => {
|
|
|
287
277
|
* fillet 出点」走到「本接缝的 fillet 入点」(line 缩短 / arc 裁剪角度),接缝处插 fillet 弧。
|
|
288
278
|
* 夹紧到 0 的角不插弧、按原尖角连接。
|
|
289
279
|
*/
|
|
290
|
-
var contourCommands = (segments, cornerRadius) => {
|
|
280
|
+
var contourCommands = (segments, cornerRadius, fillets = filletContour(segments, cornerRadius)) => {
|
|
291
281
|
const n = segments.length;
|
|
292
282
|
if (n === 0) return [];
|
|
293
|
-
const fillets = filletContour(segments, cornerRadius);
|
|
294
283
|
if (fillets.length === 0) {
|
|
295
284
|
const cmds = [];
|
|
296
285
|
segments.forEach((seg, i) => {
|
|
@@ -348,17 +337,19 @@ var emitSegmentBody = (seg, start, end, cmds) => {
|
|
|
348
337
|
};
|
|
349
338
|
/** 调整 endAngle 使「start→end」沿给定扫描方向(ccw: 递减 / 否则递增),保持裁剪后弧方向不变 */
|
|
350
339
|
var alignSweep = (start, end, ccw) => {
|
|
351
|
-
|
|
352
|
-
if (
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
340
|
+
const sweep = end - start;
|
|
341
|
+
if (sweep === 0) return {
|
|
342
|
+
start,
|
|
343
|
+
end: start
|
|
344
|
+
};
|
|
345
|
+
if (Math.abs(sweep) === 360) return {
|
|
346
|
+
start,
|
|
347
|
+
end: start + (ccw ? -360 : 360)
|
|
348
|
+
};
|
|
349
|
+
const normalized = (sweep % 360 + 360) % 360;
|
|
359
350
|
return {
|
|
360
351
|
start,
|
|
361
|
-
end:
|
|
352
|
+
end: start + (ccw ? normalized === 0 ? -360 : normalized - 360 : normalized === 0 ? 360 : normalized)
|
|
362
353
|
};
|
|
363
354
|
};
|
|
364
355
|
/**
|
|
@@ -367,13 +358,12 @@ var alignSweep = (start, end, ccw) => {
|
|
|
367
358
|
* 遍历 fillet 后的有效段(缩短 line / 裁剪 arc / fillet arc),对每段求 ray∩段、取最小正参数命中点。
|
|
368
359
|
* cornerRadius 省略 / ≤0 → 走原尖角轮廓。无命中返回 undefined(调用方兜底)。
|
|
369
360
|
*/
|
|
370
|
-
var boundaryFromContour = (segments, cornerRadius, rayOrigin, toward) => {
|
|
361
|
+
var boundaryFromContour = (segments, cornerRadius, rayOrigin, toward, fillets = filletContour(segments, cornerRadius)) => {
|
|
371
362
|
const dirRaw = [toward[0] - rayOrigin[0], toward[1] - rayOrigin[1]];
|
|
372
|
-
const dl = length(dirRaw);
|
|
363
|
+
const dl = point.length(dirRaw);
|
|
373
364
|
if (dl < 1e-12) return void 0;
|
|
374
365
|
const dir = [dirRaw[0] / dl, dirRaw[1] / dl];
|
|
375
366
|
const n = segments.length;
|
|
376
|
-
const fillets = filletContour(segments, cornerRadius);
|
|
377
367
|
let best = Infinity;
|
|
378
368
|
const considerLine = (a, b) => {
|
|
379
369
|
const ex = b[0] - a[0];
|
|
@@ -414,4 +404,4 @@ var boundaryFromContour = (segments, cornerRadius, rayOrigin, toward) => {
|
|
|
414
404
|
return [rayOrigin[0] + dir[0] * best, rayOrigin[1] + dir[1] * best];
|
|
415
405
|
};
|
|
416
406
|
//#endregion
|
|
417
|
-
export { boundaryFromContour, contourCommands };
|
|
407
|
+
export { boundaryFromContour, contourCommands, filletContour };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Side } from './
|
|
1
|
+
import { Side } from './edge';
|
|
2
|
+
import { CompassAnchorValue } from './anchor';
|
|
2
3
|
import { Position } from './point';
|
|
3
|
-
import { RectAnchor } from './rect';
|
|
4
4
|
/** 菱形:中心 + halfA/halfB 半轴长 + 可选旋转;顶点在 (±halfA,0) 与 (0,±halfB) */
|
|
5
5
|
export type Diamond = {
|
|
6
6
|
x: number;
|
|
@@ -12,14 +12,20 @@ export type Diamond = {
|
|
|
12
12
|
/** 绕中心旋转弧度 */
|
|
13
13
|
rotate?: number;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* 菱形相关基础工具(独立几何原语)
|
|
17
|
+
* @description 注意:这是一套独立的菱形几何工具,**与 Node 的 diamond shape 不是同一条路径**——
|
|
18
|
+
* 后者已被 compile 规范化为 `polygon` preset(`{ sides: 4 }`),其 compass anchor 走外接 AABB 角。
|
|
19
|
+
* 本工具的 NE/NW/SE/SW anchor 取斜边中点(落在真实菱形边上),语义与 polygon 路径不同;
|
|
20
|
+
* 作为通用几何 API 保留,勿假设它与 Node diamond shape 行为一致。
|
|
21
|
+
*/
|
|
16
22
|
export declare const diamond: {
|
|
17
23
|
/** 中心 */
|
|
18
24
|
center: (d: Diamond) => Position;
|
|
19
25
|
/** 点是否在菱形内(含边界,含旋转);方程 |x|/halfA + |y|/halfB ≤ 1 */
|
|
20
26
|
contains: (d: Diamond, p: Position) => boolean;
|
|
21
27
|
/** 9 个 anchor:N/S/E/W=顶点,NE/NW/SE/SW=边中点,center=中心 */
|
|
22
|
-
anchor: (d: Diamond, name:
|
|
28
|
+
anchor: (d: Diamond, name: CompassAnchorValue) => Position;
|
|
23
29
|
/**
|
|
24
30
|
* 从中心向 toward 方向射线与菱形 4 边的交点
|
|
25
31
|
* @description 菱形方程 |x|/halfA + |y|/halfB = 1;沿方向 (lx,ly) 缩放 t 倍命中:t = 1 / (|lx|/halfA + |ly|/halfB)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAqB,MAAM,QAAQ,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAUxC,iEAAiE;AACjE,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;IAClB,SAAS;gBACG,OAAO,KAAG,QAAQ;IAC9B,oDAAoD;kBACtC,OAAO,KAAK,QAAQ,KAAG,OAAO;IAK5C,sDAAsD;gBAC1C,OAAO,QAAQ,kBAAkB,KAAG,QAAQ;IAqC1D;;;OAGG;uBACkB,OAAO,UAAU,QAAQ,KAAG,QAAQ;IAQvD,yDAAyD;mBAC1C,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CASzD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { polylineViaVertex } from "./edge.js";
|
|
2
|
+
import { localToWorld, worldToLocal } from "./transform.js";
|
|
3
3
|
//#region src/geometry/diamond.ts
|
|
4
4
|
/** 每条 side 的过顶点折线三 anchor:[邻边中点, cardinal 顶点, 邻边中点](方向 north/south=西→东、east/west=北→南) */
|
|
5
5
|
var DIAMOND_EDGE = {
|
|
@@ -24,12 +24,19 @@ var DIAMOND_EDGE = {
|
|
|
24
24
|
"south-west"
|
|
25
25
|
]
|
|
26
26
|
};
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* 菱形相关基础工具(独立几何原语)
|
|
29
|
+
* @description 注意:这是一套独立的菱形几何工具,**与 Node 的 diamond shape 不是同一条路径**——
|
|
30
|
+
* 后者已被 compile 规范化为 `polygon` preset(`{ sides: 4 }`),其 compass anchor 走外接 AABB 角。
|
|
31
|
+
* 本工具的 NE/NW/SE/SW anchor 取斜边中点(落在真实菱形边上),语义与 polygon 路径不同;
|
|
32
|
+
* 作为通用几何 API 保留,勿假设它与 Node diamond shape 行为一致。
|
|
33
|
+
*/
|
|
28
34
|
var diamond = {
|
|
29
35
|
/** 中心 */
|
|
30
36
|
center: (d) => [d.x, d.y],
|
|
31
37
|
/** 点是否在菱形内(含边界,含旋转);方程 |x|/halfA + |y|/halfB ≤ 1 */
|
|
32
38
|
contains: (d, p) => {
|
|
39
|
+
if (d.halfA === 0 || d.halfB === 0) return false;
|
|
33
40
|
const [lx, ly] = worldToLocal(d, p);
|
|
34
41
|
return Math.abs(lx) / d.halfA + Math.abs(ly) / d.halfB <= 1.000000001;
|
|
35
42
|
},
|
|
@@ -75,6 +82,7 @@ var diamond = {
|
|
|
75
82
|
* @description 菱形方程 |x|/halfA + |y|/halfB = 1;沿方向 (lx,ly) 缩放 t 倍命中:t = 1 / (|lx|/halfA + |ly|/halfB)
|
|
76
83
|
*/
|
|
77
84
|
boundaryPoint: (d, toward) => {
|
|
85
|
+
if (d.halfA === 0 || d.halfB === 0) return [d.x, d.y];
|
|
78
86
|
const [lx, ly] = worldToLocal(d, toward);
|
|
79
87
|
const denom = Math.abs(lx) / d.halfA + Math.abs(ly) / d.halfB;
|
|
80
88
|
if (denom === 0) return [d.x, d.y];
|
|
@@ -26,4 +26,4 @@ export declare const edgeAngleDeg: (side: Side, t: number) => number;
|
|
|
26
26
|
* p0/p1 为相邻边中点 anchor、vertex 为 cardinal 顶点 anchor——全落真实斜边
|
|
27
27
|
*/
|
|
28
28
|
export declare const polylineViaVertex: (p0: Position, vertex: Position, p1: Position, t: number) => Position;
|
|
29
|
-
//# sourceMappingURL=
|
|
29
|
+
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/geometry/edge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,0DAA0D;AAC1D,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;CAK8D,CAAC;AAErF,yBAAyB;AACzB,eAAO,MAAM,SAAS,GAAI,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,KAAG,QAG/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,EAAE,GAAG,MAAM,KAAG,MAWpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,IAAI,QAAQ,EACZ,QAAQ,QAAQ,EAChB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,QAA4F,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Side } from './
|
|
1
|
+
import { Side } from './edge';
|
|
2
|
+
import { CompassAnchorValue } from './anchor';
|
|
2
3
|
import { Position } from './point';
|
|
3
|
-
import { RectAnchor } from './rect';
|
|
4
4
|
/** 椭圆:中心 + 半长轴 rx / 半短轴 ry + 可选旋转 */
|
|
5
5
|
export type Ellipse = {
|
|
6
6
|
x: number;
|
|
@@ -22,7 +22,7 @@ export declare const ellipse: {
|
|
|
22
22
|
* 9 个 anchor 的世界坐标
|
|
23
23
|
* @description 对角(NE/NW/SE/SW)取参数曲线 t=π/4 处 (rx/√2, ry/√2),与 TikZ 椭圆 anchor 参数等分约定一致
|
|
24
24
|
*/
|
|
25
|
-
anchor: (e: Ellipse, name:
|
|
25
|
+
anchor: (e: Ellipse, name: CompassAnchorValue) => Position;
|
|
26
26
|
/**
|
|
27
27
|
* 从中心向 toward 方向射线与椭圆交点
|
|
28
28
|
* @description 椭圆方程 (x/rx)² + (y/ry)² = 1;沿 (lx,ly) 缩放 t 倍命中 t = 1 / √((lx/rx)² + (ly/ry)²)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/geometry/ellipse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/geometry/ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,QAAQ,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,qCAAqC;AACrC,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,OAAO;IAClB,SAAS;gBACG,OAAO,KAAG,QAAQ;IAC9B,0BAA0B;kBACZ,OAAO,KAAK,QAAQ,KAAG,OAAO;IAK9C;;;OAGG;gBACW,OAAO,QAAQ,kBAAkB,KAAG,QAAQ;IAqC1D;;;OAGG;uBACkB,OAAO,UAAU,QAAQ,KAAG,QAAQ;IASvD,qDAAqD;mBACtC,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIzD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { edgeAngleDeg } from "./edge.js";
|
|
2
|
+
import { localToWorld, worldToLocal } from "./transform.js";
|
|
3
3
|
//#region src/geometry/ellipse.ts
|
|
4
4
|
var DEG_TO_RAD = Math.PI / 180;
|
|
5
5
|
var SQRT_HALF = Math.SQRT1_2;
|
|
@@ -9,6 +9,7 @@ var ellipse = {
|
|
|
9
9
|
center: (e) => [e.x, e.y],
|
|
10
10
|
/** 判断点是否在椭圆内(含边界,考虑旋转) */
|
|
11
11
|
contains: (e, p) => {
|
|
12
|
+
if (e.rx === 0 || e.ry === 0) return false;
|
|
12
13
|
const [lx, ly] = worldToLocal(e, p);
|
|
13
14
|
return lx * lx / (e.rx * e.rx) + ly * ly / (e.ry * e.ry) <= 1;
|
|
14
15
|
},
|
|
@@ -57,6 +58,7 @@ var ellipse = {
|
|
|
57
58
|
* @description 椭圆方程 (x/rx)² + (y/ry)² = 1;沿 (lx,ly) 缩放 t 倍命中 t = 1 / √((lx/rx)² + (ly/ry)²)
|
|
58
59
|
*/
|
|
59
60
|
boundaryPoint: (e, toward) => {
|
|
61
|
+
if (e.rx === 0 || e.ry === 0) return [e.x, e.y];
|
|
60
62
|
const [lx, ly] = worldToLocal(e, toward);
|
|
61
63
|
if (lx === 0 && ly === 0) return [e.x, e.y];
|
|
62
64
|
const a = lx / e.rx;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './point';
|
|
2
|
+
export * from './anchor';
|
|
2
3
|
export * from './rect';
|
|
3
4
|
export * from './circle';
|
|
4
5
|
export * from './ellipse';
|
|
@@ -7,5 +8,9 @@ export * from './polar';
|
|
|
7
8
|
export * from './bend';
|
|
8
9
|
export * from './arc';
|
|
9
10
|
export * from './segment';
|
|
10
|
-
export * from './
|
|
11
|
+
export * from './contour';
|
|
12
|
+
export { EDGE_ENDS, lerpPoint, edgeAngleDeg, polylineViaVertex } from './edge';
|
|
13
|
+
export type { Side } from './edge';
|
|
14
|
+
export { localToWorld, worldToLocal } from './transform';
|
|
15
|
+
export type { CenteredShape } from './transform';
|
|
11
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/geometry/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/geometry/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC/E,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -9,6 +9,12 @@ export declare const point: {
|
|
|
9
9
|
sub: (a: Position, b: Position) => Position;
|
|
10
10
|
/** 等比缩放 a * k */
|
|
11
11
|
scale: (a: Position, k: number) => Position;
|
|
12
|
+
/** 向量长度 */
|
|
13
|
+
length: (a: Position) => number;
|
|
14
|
+
/** 归一化向量;零长度 / 极短向量回退到 fallback */
|
|
15
|
+
normalize: (a: Position, fallback?: Position, epsilon?: number) => Position;
|
|
16
|
+
/** 把点 p 沿 target 方向移动 dist */
|
|
17
|
+
shiftToward: (p: Position, target: Position, dist: number) => Position;
|
|
12
18
|
/** 两点精确相等(不带容差) */
|
|
13
19
|
equal: (a: Position, b: Position) => boolean;
|
|
14
20
|
/** 笛卡尔 → 极坐标(angle ∈ (-180,180],origin 默认 [0,0]) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/geometry/point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAS,MAAM,SAAS,CAAC;AAEpD,oBAAoB;AACpB,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/geometry/point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAS,MAAM,SAAS,CAAC;AAEpD,oBAAoB;AACpB,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAKxC,wBAAwB;AACxB,eAAO,MAAM,KAAK;IAChB,gBAAgB;aACP,QAAQ,KAAK,QAAQ,KAAG,QAAQ;IACzC,gBAAgB;aACP,QAAQ,KAAK,QAAQ,KAAG,QAAQ;IACzC,iBAAiB;eACN,QAAQ,KAAK,MAAM,KAAG,QAAQ;IACzC,WAAW;gBACC,QAAQ,KAAG,MAAM;IAC7B,mCAAmC;mBAE9B,QAAQ,aACD,QAAQ,uBAEjB,QAAQ;IAKX,8BAA8B;qBACb,QAAQ,UAAU,QAAQ,QAAQ,MAAM,KAAG,QAAQ;IAOpE,mBAAmB;eACR,QAAQ,KAAK,QAAQ,KAAG,OAAO;IAC1C,oDAAoD;iBACvC,QAAQ,KAAG,aAAa;IAIrC;;;;;OAKG;oBAEE,QAAQ,GAAG,aAAa,KACxB,QAAQ,GAAG,aAAa,yBAE1B,OAAO;CASX,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { polar } from "./polar.js";
|
|
2
2
|
//#region src/geometry/point.ts
|
|
3
3
|
var RAD_TO_DEG = 180 / Math.PI;
|
|
4
|
+
var DEFAULT_EPSILON = 1e-9;
|
|
4
5
|
/** 二维向量 / 坐标的基础运算工具集 */
|
|
5
6
|
var point = {
|
|
6
7
|
/** 向量加 a + b */
|
|
@@ -9,6 +10,22 @@ var point = {
|
|
|
9
10
|
sub: (a, b) => [a[0] - b[0], a[1] - b[1]],
|
|
10
11
|
/** 等比缩放 a * k */
|
|
11
12
|
scale: (a, k) => [a[0] * k, a[1] * k],
|
|
13
|
+
/** 向量长度 */
|
|
14
|
+
length: (a) => Math.hypot(a[0], a[1]),
|
|
15
|
+
/** 归一化向量;零长度 / 极短向量回退到 fallback */
|
|
16
|
+
normalize: (a, fallback = [1, 0], epsilon = DEFAULT_EPSILON) => {
|
|
17
|
+
const len = Math.hypot(a[0], a[1]);
|
|
18
|
+
if (len < epsilon) return fallback;
|
|
19
|
+
return [a[0] / len, a[1] / len];
|
|
20
|
+
},
|
|
21
|
+
/** 把点 p 沿 target 方向移动 dist */
|
|
22
|
+
shiftToward: (p, target, dist) => {
|
|
23
|
+
if (dist === 0) return p;
|
|
24
|
+
const delta = [target[0] - p[0], target[1] - p[1]];
|
|
25
|
+
const dir = point.normalize(delta, [0, 0]);
|
|
26
|
+
if (point.equal(dir, [0, 0])) return p;
|
|
27
|
+
return [p[0] + dir[0] * dist, p[1] + dir[1] * dist];
|
|
28
|
+
},
|
|
12
29
|
/** 两点精确相等(不带容差) */
|
|
13
30
|
equal: (a, b) => a[0] === b[0] && a[1] === b[1],
|
|
14
31
|
/** 笛卡尔 → 极坐标(angle ∈ (-180,180],origin 默认 [0,0]) */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Side } from './
|
|
1
|
+
import { Side } from './edge';
|
|
2
|
+
import { CompassAnchorValue } from './anchor';
|
|
2
3
|
import { Position } from './point';
|
|
3
4
|
/** 轴对齐矩形:几何中心 + 宽高 + 可选绕中心旋转 */
|
|
4
5
|
export type Rect = {
|
|
@@ -9,27 +10,13 @@ export type Rect = {
|
|
|
9
10
|
/** 绕中心旋转弧度 */
|
|
10
11
|
rotate?: number;
|
|
11
12
|
};
|
|
12
|
-
/** 矩形 9 个标准 anchor 名常量(与 RectAnchor 配对,用 RECT_ANCHORS.NORTH 避免拼错) */
|
|
13
|
-
export declare const RECT_ANCHORS: {
|
|
14
|
-
readonly CENTER: "center";
|
|
15
|
-
readonly NORTH: "north";
|
|
16
|
-
readonly SOUTH: "south";
|
|
17
|
-
readonly EAST: "east";
|
|
18
|
-
readonly WEST: "west";
|
|
19
|
-
readonly NORTH_EAST: "north-east";
|
|
20
|
-
readonly NORTH_WEST: "north-west";
|
|
21
|
-
readonly SOUTH_EAST: "south-east";
|
|
22
|
-
readonly SOUTH_WEST: "south-west";
|
|
23
|
-
};
|
|
24
|
-
/** 矩形 anchor 名(与 TikZ 命名一致) */
|
|
25
|
-
export type RectAnchor = (typeof RECT_ANCHORS)[keyof typeof RECT_ANCHORS];
|
|
26
13
|
export declare const rect: {
|
|
27
14
|
/** 几何中心 */
|
|
28
15
|
center: (r: Rect) => Position;
|
|
29
16
|
/** 点是否在矩形内(含边界,含旋转) */
|
|
30
17
|
contains: (r: Rect, p: Position) => boolean;
|
|
31
|
-
/** 9
|
|
32
|
-
anchor: (r: Rect, name:
|
|
18
|
+
/** 9 个标准方位 anchor 之一的世界坐标(含旋转),TikZ 命名 */
|
|
19
|
+
anchor: (r: Rect, name: CompassAnchorValue) => Position;
|
|
33
20
|
/** 从中心向 toward 方向射线与矩形边界交点(含旋转),Path 端点贴 Node 边界用 */
|
|
34
21
|
boundaryPoint: (r: Rect, toward: Position) => Position;
|
|
35
22
|
/** 边上比例点:side 直边 t∈[0,1] 处(两角 anchor 线性插值,含旋转);方向见 EDGE_ENDS */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAa,MAAM,QAAQ,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,0CAA0C;gBAC9B,IAAI,QAAQ,kBAAkB,KAAG,QAAQ;IAuCrD,qDAAqD;uBAClC,IAAI,UAAU,QAAQ,KAAG,QAAQ;IAUpD,gEAAgE;mBACjD,IAAI,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAItD,CAAC;AAEF,4FAA4F;AAC5F,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,eAAe,MAAM,KACpB,KAAK,CAAC,aAAa,CAgCrB,CAAC"}
|
package/dist/es/geometry/rect.js
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EDGE_ENDS, lerpPoint } from "./edge.js";
|
|
2
|
+
import { localToWorld, worldToLocal } from "./transform.js";
|
|
3
3
|
//#region src/geometry/rect.ts
|
|
4
|
-
/** 矩形 9 个标准 anchor 名常量(与 RectAnchor 配对,用 RECT_ANCHORS.NORTH 避免拼错) */
|
|
5
|
-
var RECT_ANCHORS = {
|
|
6
|
-
CENTER: "center",
|
|
7
|
-
NORTH: "north",
|
|
8
|
-
SOUTH: "south",
|
|
9
|
-
EAST: "east",
|
|
10
|
-
WEST: "west",
|
|
11
|
-
NORTH_EAST: "north-east",
|
|
12
|
-
NORTH_WEST: "north-west",
|
|
13
|
-
SOUTH_EAST: "south-east",
|
|
14
|
-
SOUTH_WEST: "south-west"
|
|
15
|
-
};
|
|
16
4
|
var rect = {
|
|
17
5
|
/** 几何中心 */
|
|
18
6
|
center: (r) => [r.x, r.y],
|
|
@@ -23,7 +11,7 @@ var rect = {
|
|
|
23
11
|
const halfH = r.height / 2;
|
|
24
12
|
return lx >= -halfW && lx <= halfW && ly >= -halfH && ly <= halfH;
|
|
25
13
|
},
|
|
26
|
-
/** 9
|
|
14
|
+
/** 9 个标准方位 anchor 之一的世界坐标(含旋转),TikZ 命名 */
|
|
27
15
|
anchor: (r, name) => {
|
|
28
16
|
const halfW = r.width / 2;
|
|
29
17
|
const halfH = r.height / 2;
|
|
@@ -163,4 +151,4 @@ var rectOutline = (from, to, cornerRadius) => {
|
|
|
163
151
|
];
|
|
164
152
|
};
|
|
165
153
|
//#endregion
|
|
166
|
-
export {
|
|
154
|
+
export { rect, rectOutline };
|
|
@@ -34,4 +34,11 @@ export declare const ellipseArcSegmentSample: (center: Position, rx: number, ry:
|
|
|
34
34
|
export declare const circleSegmentSample: (center: Position, radius: number, t: number) => SegmentSample;
|
|
35
35
|
/** 整椭圆,参数化 (rx·cos(2πt), ry·sin(2πt)) */
|
|
36
36
|
export declare const ellipseSegmentSample: (center: Position, rx: number, ry: number, t: number) => SegmentSample;
|
|
37
|
+
/**
|
|
38
|
+
* 矩形周长段:两对角 → 闭合周长上 t∈[0,1] 的点 / 切线
|
|
39
|
+
* @description 4 条边按 rectOutline 的顺时针绕向(y-down:左上→右上→右下→左下→闭合回左上)均分参数,
|
|
40
|
+
* 每条边占 1/4 t;切线 = 该边方向。忽略 cornerRadius(采尖角折线周长),mark 落在直边上精确、
|
|
41
|
+
* 贴近圆角处略偏轮廓——对中段 marking 足够。退化(零宽 / 零高)由 lineSegmentSample 的零切线回退兜底。
|
|
42
|
+
*/
|
|
43
|
+
export declare const rectPerimeterSample: (from: Position, to: Position, t: number) => SegmentSample;
|
|
37
44
|
//# sourceMappingURL=segment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/geometry/segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/geometry/segment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAqB,MAAM,SAAS,CAAC;AAiB3D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,wBAAwB;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAqBF,oBAAoB;AACpB,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,SAAS,QAAQ,EACjB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAqBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,QAAQ,QAAQ,EAChB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,GAAG,MAAM,KACR,aAAwF,CAAC;AAE5F,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,GAClC,QAAQ,QAAQ,EAChB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,GAAG,MAAM,KACR,aAAgF,CAAC;AAEpF,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,GAAG,MAAM,KACR,aAAoE,CAAC;AAExE,yCAAyC;AACzC,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,QAAQ,EAChB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,GAAG,MAAM,KACR,aAA4D,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAkBF,CAAC"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import { point } from "./point.js";
|
|
1
2
|
//#region src/geometry/segment.ts
|
|
2
3
|
var DEG_TO_RAD = Math.PI / 180;
|
|
3
|
-
var
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
var sampleEllipseArc = (center, rx, ry, startAngleDeg, endAngleDeg, t) => {
|
|
5
|
+
const rad = (startAngleDeg + t * (endAngleDeg - startAngleDeg)) * DEG_TO_RAD;
|
|
6
|
+
const cos = Math.cos(rad);
|
|
7
|
+
const sin = Math.sin(rad);
|
|
8
|
+
const sweepSign = endAngleDeg >= startAngleDeg ? 1 : -1;
|
|
9
|
+
return {
|
|
10
|
+
point: [center[0] + rx * cos, center[1] + ry * sin],
|
|
11
|
+
tangent: point.normalize([-rx * sin * sweepSign, ry * cos * sweepSign])
|
|
12
|
+
};
|
|
7
13
|
};
|
|
8
14
|
/** 直线段 from → to */
|
|
9
15
|
var lineSegmentSample = (from, to, t) => ({
|
|
10
16
|
point: [from[0] + (to[0] - from[0]) * t, from[1] + (to[1] - from[1]) * t],
|
|
11
|
-
tangent: normalize([to[0] - from[0], to[1] - from[1]])
|
|
17
|
+
tangent: point.normalize([to[0] - from[0], to[1] - from[1]])
|
|
12
18
|
});
|
|
13
19
|
/**
|
|
14
20
|
* 二次贝塞尔 from → control → to
|
|
@@ -16,9 +22,12 @@ var lineSegmentSample = (from, to, t) => ({
|
|
|
16
22
|
*/
|
|
17
23
|
var quadSegmentSample = (from, control, to, t) => {
|
|
18
24
|
const u = 1 - t;
|
|
25
|
+
const point$1 = [u * u * from[0] + 2 * u * t * control[0] + t * t * to[0], u * u * from[1] + 2 * u * t * control[1] + t * t * to[1]];
|
|
26
|
+
const tx = 2 * u * (control[0] - from[0]) + 2 * t * (to[0] - control[0]);
|
|
27
|
+
const ty = 2 * u * (control[1] - from[1]) + 2 * t * (to[1] - control[1]);
|
|
19
28
|
return {
|
|
20
|
-
point:
|
|
21
|
-
tangent: normalize([
|
|
29
|
+
point: point$1,
|
|
30
|
+
tangent: point.normalize([tx, ty])
|
|
22
31
|
};
|
|
23
32
|
};
|
|
24
33
|
/**
|
|
@@ -27,9 +36,12 @@ var quadSegmentSample = (from, control, to, t) => {
|
|
|
27
36
|
*/
|
|
28
37
|
var cubicSegmentSample = (from, c1, c2, to, t) => {
|
|
29
38
|
const u = 1 - t;
|
|
39
|
+
const point$2 = [u * u * u * from[0] + 3 * u * u * t * c1[0] + 3 * u * t * t * c2[0] + t * t * t * to[0], u * u * u * from[1] + 3 * u * u * t * c1[1] + 3 * u * t * t * c2[1] + t * t * t * to[1]];
|
|
40
|
+
const tx = 3 * u * u * (c1[0] - from[0]) + 6 * u * t * (c2[0] - c1[0]) + 3 * t * t * (to[0] - c2[0]);
|
|
41
|
+
const ty = 3 * u * u * (c1[1] - from[1]) + 6 * u * t * (c2[1] - c1[1]) + 3 * t * t * (to[1] - c2[1]);
|
|
30
42
|
return {
|
|
31
|
-
point:
|
|
32
|
-
tangent: normalize([
|
|
43
|
+
point: point$2,
|
|
44
|
+
tangent: point.normalize([tx, ty])
|
|
33
45
|
};
|
|
34
46
|
};
|
|
35
47
|
/**
|
|
@@ -41,46 +53,35 @@ var foldSegmentSample = (from, corner, to, t) => {
|
|
|
41
53
|
return lineSegmentSample(corner, to, t * 2 - 1);
|
|
42
54
|
};
|
|
43
55
|
/** 弧段(角度度数,与 ir/path arc 同约定);切线沿扫描方向:endAngle ≥ start 取 (-sin,cos),否则反向 */
|
|
44
|
-
var arcSegmentSample = (center, radius, startAngleDeg, endAngleDeg, t) =>
|
|
45
|
-
const rad = (startAngleDeg + t * (endAngleDeg - startAngleDeg)) * DEG_TO_RAD;
|
|
46
|
-
const cos = Math.cos(rad);
|
|
47
|
-
const sin = Math.sin(rad);
|
|
48
|
-
const sweepSign = endAngleDeg >= startAngleDeg ? 1 : -1;
|
|
49
|
-
return {
|
|
50
|
-
point: [center[0] + radius * cos, center[1] + radius * sin],
|
|
51
|
-
tangent: normalize([-sin * sweepSign, cos * sweepSign])
|
|
52
|
-
};
|
|
53
|
-
};
|
|
56
|
+
var arcSegmentSample = (center, radius, startAngleDeg, endAngleDeg, t) => sampleEllipseArc(center, radius, radius, startAngleDeg, endAngleDeg, t);
|
|
54
57
|
/** 椭圆弧段(参数角度数,与 ir/path arc 同约定);点用 (rx·cos, ry·sin),切线沿扫描方向 */
|
|
55
|
-
var ellipseArcSegmentSample = (center, rx, ry, startAngleDeg, endAngleDeg, t) =>
|
|
56
|
-
const rad = (startAngleDeg + t * (endAngleDeg - startAngleDeg)) * DEG_TO_RAD;
|
|
57
|
-
const cos = Math.cos(rad);
|
|
58
|
-
const sin = Math.sin(rad);
|
|
59
|
-
const sweepSign = endAngleDeg >= startAngleDeg ? 1 : -1;
|
|
60
|
-
return {
|
|
61
|
-
point: [center[0] + rx * cos, center[1] + ry * sin],
|
|
62
|
-
tangent: normalize([-rx * sin * sweepSign, ry * cos * sweepSign])
|
|
63
|
-
};
|
|
64
|
-
};
|
|
58
|
+
var ellipseArcSegmentSample = (center, rx, ry, startAngleDeg, endAngleDeg, t) => sampleEllipseArc(center, rx, ry, startAngleDeg, endAngleDeg, t);
|
|
65
59
|
/** 整圆,从 0°(east) 开始,与 compile/path circlePath 输出方向(右→左→右,sweep=1)一致 */
|
|
66
|
-
var circleSegmentSample = (center, radius, t) =>
|
|
67
|
-
const rad = t * 360 * DEG_TO_RAD;
|
|
68
|
-
const cos = Math.cos(rad);
|
|
69
|
-
const sin = Math.sin(rad);
|
|
70
|
-
return {
|
|
71
|
-
point: [center[0] + radius * cos, center[1] + radius * sin],
|
|
72
|
-
tangent: normalize([-sin, cos])
|
|
73
|
-
};
|
|
74
|
-
};
|
|
60
|
+
var circleSegmentSample = (center, radius, t) => sampleEllipseArc(center, radius, radius, 0, 360, t);
|
|
75
61
|
/** 整椭圆,参数化 (rx·cos(2πt), ry·sin(2πt)) */
|
|
76
|
-
var ellipseSegmentSample = (center, rx, ry, t) =>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
62
|
+
var ellipseSegmentSample = (center, rx, ry, t) => sampleEllipseArc(center, rx, ry, 0, 360, t);
|
|
63
|
+
/**
|
|
64
|
+
* 矩形周长段:两对角 → 闭合周长上 t∈[0,1] 的点 / 切线
|
|
65
|
+
* @description 4 条边按 rectOutline 的顺时针绕向(y-down:左上→右上→右下→左下→闭合回左上)均分参数,
|
|
66
|
+
* 每条边占 1/4 t;切线 = 该边方向。忽略 cornerRadius(采尖角折线周长),mark 落在直边上精确、
|
|
67
|
+
* 贴近圆角处略偏轮廓——对中段 marking 足够。退化(零宽 / 零高)由 lineSegmentSample 的零切线回退兜底。
|
|
68
|
+
*/
|
|
69
|
+
var rectPerimeterSample = (from, to, t) => {
|
|
70
|
+
const x0 = Math.min(from[0], to[0]);
|
|
71
|
+
const x1 = Math.max(from[0], to[0]);
|
|
72
|
+
const y0 = Math.min(from[1], to[1]);
|
|
73
|
+
const y1 = Math.max(from[1], to[1]);
|
|
74
|
+
const corners = [
|
|
75
|
+
[x0, y0],
|
|
76
|
+
[x1, y0],
|
|
77
|
+
[x1, y1],
|
|
78
|
+
[x0, y1],
|
|
79
|
+
[x0, y0]
|
|
80
|
+
];
|
|
81
|
+
const scaled = (t <= 0 ? 0 : t >= 1 ? 1 : t) * 4;
|
|
82
|
+
const edge = Math.min(Math.floor(scaled), 3);
|
|
83
|
+
const localT = scaled - edge;
|
|
84
|
+
return lineSegmentSample(corners[edge], corners[edge + 1], localT);
|
|
84
85
|
};
|
|
85
86
|
//#endregion
|
|
86
|
-
export { arcSegmentSample, circleSegmentSample, cubicSegmentSample, ellipseArcSegmentSample, ellipseSegmentSample, foldSegmentSample, lineSegmentSample, quadSegmentSample };
|
|
87
|
+
export { arcSegmentSample, circleSegmentSample, cubicSegmentSample, ellipseArcSegmentSample, ellipseSegmentSample, foldSegmentSample, lineSegmentSample, quadSegmentSample, rectPerimeterSample };
|
|
@@ -18,4 +18,4 @@ export declare const localToWorld: (s: CenteredShape, local: Position) => Positi
|
|
|
18
18
|
* @description 先反平移到中心、再反旋转回本地基;旋转矩阵转置即逆
|
|
19
19
|
*/
|
|
20
20
|
export declare const worldToLocal: (s: CenteredShape, world: Position) => Position;
|
|
21
|
-
//# sourceMappingURL=
|
|
21
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/geometry/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,YAAY;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,aAAa,EAAE,OAAO,QAAQ,KAAG,QAShE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,aAAa,EAAE,OAAO,QAAQ,KAAG,QAQhE,CAAC"}
|