@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
1
|
const require_arc = require("./arc.cjs");
|
|
2
|
-
|
|
2
|
+
const require_point = require("./point.cjs");
|
|
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 : require_arc.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 : require_arc.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 require_point.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 require_point.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 = require_point.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];
|
|
@@ -416,3 +406,4 @@ var boundaryFromContour = (segments, cornerRadius, rayOrigin, toward) => {
|
|
|
416
406
|
//#endregion
|
|
417
407
|
exports.boundaryFromContour = boundaryFromContour;
|
|
418
408
|
exports.contourCommands = contourCommands;
|
|
409
|
+
exports.filletContour = filletContour;
|
|
@@ -47,7 +47,7 @@ export type ContourCommand = {
|
|
|
47
47
|
* @description tangentInPoint = 前段被裁短到此点(前段新终点);tangentOutPoint = 后段从此点起(后段新起点);
|
|
48
48
|
* filletArc 描述连接两切点的圆弧。clampedToZero=true 表示该角夹紧后 r→0,不倒角(保持尖角)。
|
|
49
49
|
*/
|
|
50
|
-
type FilletSolution = {
|
|
50
|
+
export type FilletSolution = {
|
|
51
51
|
/** 前段切点(前段新终点) */
|
|
52
52
|
tangentInPoint: Position;
|
|
53
53
|
/** 后段切点(后段新起点) */
|
|
@@ -76,13 +76,17 @@ export declare const filletContour: (segments: Array<ContourSegment>, cornerRadi
|
|
|
76
76
|
* fillet 出点」走到「本接缝的 fillet 入点」(line 缩短 / arc 裁剪角度),接缝处插 fillet 弧。
|
|
77
77
|
* 夹紧到 0 的角不插弧、按原尖角连接。
|
|
78
78
|
*/
|
|
79
|
-
export declare const contourCommands: (segments: Array<ContourSegment>, cornerRadius?: number) => Array<ContourCommand>;
|
|
79
|
+
export declare const contourCommands: (segments: Array<ContourSegment>, cornerRadius?: number, fillets?: Array<FilletSolution>) => Array<ContourCommand>;
|
|
80
|
+
/** 调整 endAngle 使「start→end」沿给定扫描方向(ccw: 递减 / 否则递增),保持裁剪后弧方向不变 */
|
|
81
|
+
export declare const alignSweep: (start: number, end: number, ccw: boolean) => {
|
|
82
|
+
start: number;
|
|
83
|
+
end: number;
|
|
84
|
+
};
|
|
80
85
|
/**
|
|
81
86
|
* 从 rayOrigin 朝 toward 射线 ∩ fillet 后轮廓全部段,返回最近正向交点
|
|
82
87
|
* @description rayOrigin 显式传(不假设中心);toward 是射线指向的目标点(方向 = toward − rayOrigin)。
|
|
83
88
|
* 遍历 fillet 后的有效段(缩短 line / 裁剪 arc / fillet arc),对每段求 ray∩段、取最小正参数命中点。
|
|
84
89
|
* cornerRadius 省略 / ≤0 → 走原尖角轮廓。无命中返回 undefined(调用方兜底)。
|
|
85
90
|
*/
|
|
86
|
-
export declare const boundaryFromContour: (segments: Array<ContourSegment>, cornerRadius: number | undefined, rayOrigin: Position, toward: Position) => Position | undefined;
|
|
87
|
-
|
|
88
|
-
//# sourceMappingURL=roundedContour.d.ts.map
|
|
91
|
+
export declare const boundaryFromContour: (segments: Array<ContourSegment>, cornerRadius: number | undefined, rayOrigin: Position, toward: Position, fillets?: Array<FilletSolution>) => Position | undefined;
|
|
92
|
+
//# sourceMappingURL=contour.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contour.d.ts","sourceRoot":"","sources":["../../../src/geometry/contour.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,SAAS,CAAC;AAkB/C,4BAA4B;AAC5B,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB;IAChB,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,gBAAgB;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAEtD,qFAAqF;AACrF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AA6BtB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB;IAClB,cAAc,EAAE,QAAQ,CAAC;IACzB,kBAAkB;IAClB,eAAe,EAAE,QAAQ,CAAC;IAC1B,gBAAgB;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAoTF;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,eAAe,MAAM,KACpB,KAAK,CAAC,cAAc,CAUtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,eAAe,MAAM,EACrB,UAAS,KAAK,CAAC,cAAc,CAAyC,KACrE,KAAK,CAAC,cAAc,CAsCtB,CAAC;AA2BF,iEAAiE;AACjE,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAUjG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,cAAc,MAAM,GAAG,SAAS,EAChC,WAAW,QAAQ,EACnB,QAAQ,QAAQ,EAChB,UAAS,KAAK,CAAC,cAAc,CAAyC,KACrE,QAAQ,GAAG,SA0Eb,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const require_edge = require("./edge.cjs");
|
|
2
|
+
const require_transform = require("./transform.cjs");
|
|
3
3
|
//#region src/geometry/diamond.ts
|
|
4
4
|
/** 每条 side 的过顶点折线三 anchor:[邻边中点, cardinal 顶点, 邻边中点](方向 north/south=西→东、east/west=北→南) */
|
|
5
5
|
var DIAMOND_EDGE = {
|
|
@@ -24,13 +24,20 @@ 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) => {
|
|
33
|
-
|
|
39
|
+
if (d.halfA === 0 || d.halfB === 0) return false;
|
|
40
|
+
const [lx, ly] = require_transform.worldToLocal(d, p);
|
|
34
41
|
return Math.abs(lx) / d.halfA + Math.abs(ly) / d.halfB <= 1.000000001;
|
|
35
42
|
},
|
|
36
43
|
/** 9 个 anchor:N/S/E/W=顶点,NE/NW/SE/SW=边中点,center=中心 */
|
|
@@ -68,23 +75,24 @@ var diamond = {
|
|
|
68
75
|
ly = d.halfB / 2;
|
|
69
76
|
break;
|
|
70
77
|
}
|
|
71
|
-
return
|
|
78
|
+
return require_transform.localToWorld(d, [lx, ly]);
|
|
72
79
|
},
|
|
73
80
|
/**
|
|
74
81
|
* 从中心向 toward 方向射线与菱形 4 边的交点
|
|
75
82
|
* @description 菱形方程 |x|/halfA + |y|/halfB = 1;沿方向 (lx,ly) 缩放 t 倍命中:t = 1 / (|lx|/halfA + |ly|/halfB)
|
|
76
83
|
*/
|
|
77
84
|
boundaryPoint: (d, toward) => {
|
|
78
|
-
|
|
85
|
+
if (d.halfA === 0 || d.halfB === 0) return [d.x, d.y];
|
|
86
|
+
const [lx, ly] = require_transform.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];
|
|
81
89
|
const t = 1 / denom;
|
|
82
|
-
return
|
|
90
|
+
return require_transform.localToWorld(d, [lx * t, ly * t]);
|
|
83
91
|
},
|
|
84
92
|
/** 边上比例点:side 过 cardinal 顶点的两段折线 t∈[0,1] 处(落真实斜边;含旋转) */
|
|
85
93
|
edgePoint: (d, side, t) => {
|
|
86
94
|
const [mid0, vertex, mid1] = DIAMOND_EDGE[side];
|
|
87
|
-
return
|
|
95
|
+
return require_edge.polylineViaVertex(diamond.anchor(d, mid0), diamond.anchor(d, vertex), diamond.anchor(d, mid1), t);
|
|
88
96
|
}
|
|
89
97
|
};
|
|
90
98
|
//#endregion
|
|
@@ -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"}
|
|
@@ -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,5 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const require_edge = require("./edge.cjs");
|
|
2
|
+
const require_transform = require("./transform.cjs");
|
|
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,7 +9,8 @@ var ellipse = {
|
|
|
9
9
|
center: (e) => [e.x, e.y],
|
|
10
10
|
/** 判断点是否在椭圆内(含边界,考虑旋转) */
|
|
11
11
|
contains: (e, p) => {
|
|
12
|
-
|
|
12
|
+
if (e.rx === 0 || e.ry === 0) return false;
|
|
13
|
+
const [lx, ly] = require_transform.worldToLocal(e, p);
|
|
13
14
|
return lx * lx / (e.rx * e.rx) + ly * ly / (e.ry * e.ry) <= 1;
|
|
14
15
|
},
|
|
15
16
|
/**
|
|
@@ -50,24 +51,25 @@ var ellipse = {
|
|
|
50
51
|
ly = e.ry * SQRT_HALF;
|
|
51
52
|
break;
|
|
52
53
|
}
|
|
53
|
-
return
|
|
54
|
+
return require_transform.localToWorld(e, [lx, ly]);
|
|
54
55
|
},
|
|
55
56
|
/**
|
|
56
57
|
* 从中心向 toward 方向射线与椭圆交点
|
|
57
58
|
* @description 椭圆方程 (x/rx)² + (y/ry)² = 1;沿 (lx,ly) 缩放 t 倍命中 t = 1 / √((lx/rx)² + (ly/ry)²)
|
|
58
59
|
*/
|
|
59
60
|
boundaryPoint: (e, toward) => {
|
|
60
|
-
|
|
61
|
+
if (e.rx === 0 || e.ry === 0) return [e.x, e.y];
|
|
62
|
+
const [lx, ly] = require_transform.worldToLocal(e, toward);
|
|
61
63
|
if (lx === 0 && ly === 0) return [e.x, e.y];
|
|
62
64
|
const a = lx / e.rx;
|
|
63
65
|
const b = ly / e.ry;
|
|
64
66
|
const t = 1 / Math.sqrt(a * a + b * b);
|
|
65
|
-
return
|
|
67
|
+
return require_transform.localToWorld(e, [lx * t, ly * t]);
|
|
66
68
|
},
|
|
67
69
|
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实椭圆周;含旋转) */
|
|
68
70
|
edgePoint: (e, side, t) => {
|
|
69
|
-
const rad =
|
|
70
|
-
return
|
|
71
|
+
const rad = require_edge.edgeAngleDeg(side, t) * DEG_TO_RAD;
|
|
72
|
+
return require_transform.localToWorld(e, [e.rx * Math.cos(rad), e.ry * Math.sin(rad)]);
|
|
71
73
|
}
|
|
72
74
|
};
|
|
73
75
|
//#endregion
|
|
@@ -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,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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_polar = require("./polar.cjs");
|
|
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]) */
|
|
@@ -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,29 +1,17 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const require_edge = require("./edge.cjs");
|
|
2
|
+
const require_transform = require("./transform.cjs");
|
|
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],
|
|
19
7
|
/** 点是否在矩形内(含边界,含旋转) */
|
|
20
8
|
contains: (r, p) => {
|
|
21
|
-
const [lx, ly] =
|
|
9
|
+
const [lx, ly] = require_transform.worldToLocal(r, p);
|
|
22
10
|
const halfW = r.width / 2;
|
|
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;
|
|
@@ -60,23 +48,23 @@ var rect = {
|
|
|
60
48
|
ly = halfH;
|
|
61
49
|
break;
|
|
62
50
|
}
|
|
63
|
-
return
|
|
51
|
+
return require_transform.localToWorld(r, [lx, ly]);
|
|
64
52
|
},
|
|
65
53
|
/** 从中心向 toward 方向射线与矩形边界交点(含旋转),Path 端点贴 Node 边界用 */
|
|
66
54
|
boundaryPoint: (r, toward) => {
|
|
67
|
-
const [localX, localY] =
|
|
55
|
+
const [localX, localY] = require_transform.worldToLocal(r, toward);
|
|
68
56
|
if (localX === 0 && localY === 0) return [r.x, r.y];
|
|
69
57
|
const halfW = r.width / 2;
|
|
70
58
|
const halfH = r.height / 2;
|
|
71
59
|
const tx = localX === 0 ? Infinity : halfW / Math.abs(localX);
|
|
72
60
|
const ty = localY === 0 ? Infinity : halfH / Math.abs(localY);
|
|
73
61
|
const t = Math.min(tx, ty);
|
|
74
|
-
return
|
|
62
|
+
return require_transform.localToWorld(r, [localX * t, localY * t]);
|
|
75
63
|
},
|
|
76
64
|
/** 边上比例点:side 直边 t∈[0,1] 处(两角 anchor 线性插值,含旋转);方向见 EDGE_ENDS */
|
|
77
65
|
edgePoint: (r, side, t) => {
|
|
78
|
-
const [a, b] =
|
|
79
|
-
return
|
|
66
|
+
const [a, b] = require_edge.EDGE_ENDS[side];
|
|
67
|
+
return require_edge.lerpPoint(rect.anchor(r, a), rect.anchor(r, b), t);
|
|
80
68
|
}
|
|
81
69
|
};
|
|
82
70
|
/**
|
|
@@ -163,6 +151,5 @@ var rectOutline = (from, to, cornerRadius) => {
|
|
|
163
151
|
];
|
|
164
152
|
};
|
|
165
153
|
//#endregion
|
|
166
|
-
exports.RECT_ANCHORS = RECT_ANCHORS;
|
|
167
154
|
exports.rect = rect;
|
|
168
155
|
exports.rectOutline = rectOutline;
|
|
@@ -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"}
|