@retikz/core 0.3.0-alpha.3 → 0.3.0-alpha.5
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/README.md +41 -41
- package/dist/es/compile/anchor-cache.d.ts +5 -3
- package/dist/es/compile/anchor-cache.d.ts.map +1 -1
- package/dist/es/compile/anchor-cache.js +14 -10
- package/dist/es/compile/boundary.d.ts +19 -0
- package/dist/es/compile/boundary.d.ts.map +1 -0
- package/dist/es/compile/boundary.js +64 -0
- package/dist/es/compile/compile.d.ts +1 -1
- package/dist/es/compile/compile.d.ts.map +1 -1
- package/dist/es/compile/compile.js +49 -5
- package/dist/es/compile/node.d.ts +26 -8
- package/dist/es/compile/node.d.ts.map +1 -1
- package/dist/es/compile/node.js +103 -16
- package/dist/es/compile/path/anchor.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.js +7 -6
- package/dist/es/compile/path/index.d.ts.map +1 -1
- package/dist/es/compile/path/index.js +7 -3
- package/dist/es/compile/path/relative.js +1 -1
- package/dist/es/compile/scope.d.ts.map +1 -1
- package/dist/es/compile/scope.js +2 -1
- package/dist/es/geometry/arc.d.ts +14 -0
- package/dist/es/geometry/arc.d.ts.map +1 -1
- package/dist/es/geometry/arc.js +65 -9
- package/dist/es/geometry/index.d.ts +1 -0
- package/dist/es/geometry/index.d.ts.map +1 -1
- package/dist/es/geometry/rect.d.ts +2 -2
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +3 -3
- package/dist/es/geometry/roundedContour.d.ts +88 -0
- package/dist/es/geometry/roundedContour.d.ts.map +1 -0
- package/dist/es/geometry/roundedContour.js +417 -0
- package/dist/es/index.d.ts +9 -5
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +11 -6
- package/dist/es/ir/animation.d.ts +218 -0
- package/dist/es/ir/animation.d.ts.map +1 -0
- package/dist/es/ir/animation.js +118 -0
- package/dist/es/ir/boundary.d.ts +25 -0
- package/dist/es/ir/boundary.d.ts.map +1 -0
- package/dist/es/ir/boundary.js +14 -0
- package/dist/es/ir/index.d.ts +3 -0
- package/dist/es/ir/index.d.ts.map +1 -1
- package/dist/es/ir/node.d.ts +219 -27
- package/dist/es/ir/node.d.ts.map +1 -1
- package/dist/es/ir/node.js +10 -3
- package/dist/es/ir/path/arrow.d.ts +36 -36
- package/dist/es/ir/path/path.d.ts +702 -203
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/path.js +4 -0
- package/dist/es/ir/path/step.d.ts +674 -154
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/step.js +2 -2
- package/dist/es/ir/path/target.d.ts +43 -8
- package/dist/es/ir/path/target.d.ts.map +1 -1
- package/dist/es/ir/path/target.js +4 -5
- package/dist/es/ir/scene.d.ts +156 -0
- package/dist/es/ir/scene.d.ts.map +1 -1
- package/dist/es/ir/scene.js +3 -1
- package/dist/es/ir/scope.d.ts +1671 -424
- package/dist/es/ir/scope.d.ts.map +1 -1
- package/dist/es/ir/scope.js +10 -2
- package/dist/es/ir/shape.d.ts +14 -0
- package/dist/es/ir/shape.d.ts.map +1 -0
- package/dist/es/ir/shape.js +9 -0
- package/dist/es/parsers/parseNodeTarget.d.ts.map +1 -1
- package/dist/es/parsers/parseNodeTarget.js +4 -2
- package/dist/es/presets/animation.d.ts +123 -0
- package/dist/es/presets/animation.d.ts.map +1 -0
- package/dist/es/presets/animation.js +272 -0
- package/dist/es/presets/index.d.ts +3 -0
- package/dist/es/presets/index.d.ts.map +1 -0
- package/dist/es/primitive/ellipse.d.ts +6 -0
- package/dist/es/primitive/ellipse.d.ts.map +1 -1
- package/dist/es/primitive/group.d.ts +6 -0
- package/dist/es/primitive/group.d.ts.map +1 -1
- package/dist/es/primitive/path.d.ts +6 -0
- package/dist/es/primitive/path.d.ts.map +1 -1
- package/dist/es/primitive/rect.d.ts +6 -0
- package/dist/es/primitive/rect.d.ts.map +1 -1
- package/dist/es/primitive/scene.d.ts +3 -0
- package/dist/es/primitive/scene.d.ts.map +1 -1
- package/dist/es/primitive/text.d.ts +6 -0
- package/dist/es/primitive/text.d.ts.map +1 -1
- package/dist/es/shapes/_contour.d.ts +19 -0
- package/dist/es/shapes/_contour.d.ts.map +1 -0
- package/dist/es/shapes/_contour.js +60 -0
- package/dist/es/shapes/_shared.d.ts +54 -0
- package/dist/es/shapes/_shared.d.ts.map +1 -1
- package/dist/es/shapes/_shared.js +68 -1
- package/dist/es/shapes/arc.d.ts +8 -0
- package/dist/es/shapes/arc.d.ts.map +1 -0
- package/dist/es/shapes/arc.js +104 -0
- package/dist/es/shapes/define.d.ts +13 -0
- package/dist/es/shapes/define.d.ts.map +1 -0
- package/dist/es/shapes/define.js +13 -0
- package/dist/es/shapes/ellipse.d.ts +5 -4
- package/dist/es/shapes/ellipse.d.ts.map +1 -1
- package/dist/es/shapes/ellipse.js +15 -7
- package/dist/es/shapes/index.d.ts +9 -6
- package/dist/es/shapes/index.d.ts.map +1 -1
- package/dist/es/shapes/index.js +10 -5
- package/dist/es/shapes/polygon.d.ts +13 -0
- package/dist/es/shapes/polygon.d.ts.map +1 -0
- package/dist/es/shapes/polygon.js +104 -0
- package/dist/es/shapes/rectangle.d.ts +7 -5
- package/dist/es/shapes/rectangle.d.ts.map +1 -1
- package/dist/es/shapes/rectangle.js +37 -8
- package/dist/es/shapes/sector.d.ts +9 -0
- package/dist/es/shapes/sector.d.ts.map +1 -0
- package/dist/es/shapes/sector.js +143 -0
- package/dist/es/shapes/star.d.ts +15 -0
- package/dist/es/shapes/star.d.ts.map +1 -0
- package/dist/es/shapes/star.js +113 -0
- package/dist/es/shapes/types.d.ts +47 -14
- package/dist/es/shapes/types.d.ts.map +1 -1
- package/dist/lib/compile/anchor-cache.cjs +14 -10
- package/dist/lib/compile/anchor-cache.d.ts +5 -3
- package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
- package/dist/lib/compile/boundary.cjs +65 -0
- package/dist/lib/compile/boundary.d.ts +19 -0
- package/dist/lib/compile/boundary.d.ts.map +1 -0
- package/dist/lib/compile/compile.cjs +49 -5
- package/dist/lib/compile/compile.d.ts +1 -1
- package/dist/lib/compile/compile.d.ts.map +1 -1
- package/dist/lib/compile/node.cjs +103 -16
- package/dist/lib/compile/node.d.ts +26 -8
- package/dist/lib/compile/node.d.ts.map +1 -1
- package/dist/lib/compile/path/anchor.cjs +7 -6
- package/dist/lib/compile/path/anchor.d.ts.map +1 -1
- package/dist/lib/compile/path/index.cjs +7 -3
- package/dist/lib/compile/path/index.d.ts.map +1 -1
- package/dist/lib/compile/path/relative.cjs +1 -1
- package/dist/lib/compile/scope.cjs +2 -1
- package/dist/lib/compile/scope.d.ts.map +1 -1
- package/dist/lib/geometry/arc.cjs +66 -8
- package/dist/lib/geometry/arc.d.ts +14 -0
- package/dist/lib/geometry/arc.d.ts.map +1 -1
- package/dist/lib/geometry/index.d.ts +1 -0
- package/dist/lib/geometry/index.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +3 -3
- package/dist/lib/geometry/rect.d.ts +2 -2
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/geometry/roundedContour.cjs +418 -0
- package/dist/lib/geometry/roundedContour.d.ts +88 -0
- package/dist/lib/geometry/roundedContour.d.ts.map +1 -0
- package/dist/lib/index.cjs +41 -7
- package/dist/lib/index.d.ts +9 -5
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/animation.cjs +127 -0
- package/dist/lib/ir/animation.d.ts +218 -0
- package/dist/lib/ir/animation.d.ts.map +1 -0
- package/dist/lib/ir/boundary.cjs +15 -0
- package/dist/lib/ir/boundary.d.ts +25 -0
- package/dist/lib/ir/boundary.d.ts.map +1 -0
- package/dist/lib/ir/index.d.ts +3 -0
- package/dist/lib/ir/index.d.ts.map +1 -1
- package/dist/lib/ir/node.cjs +10 -3
- package/dist/lib/ir/node.d.ts +219 -27
- package/dist/lib/ir/node.d.ts.map +1 -1
- package/dist/lib/ir/path/arrow.d.ts +36 -36
- package/dist/lib/ir/path/path.cjs +4 -0
- package/dist/lib/ir/path/path.d.ts +702 -203
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.cjs +2 -2
- package/dist/lib/ir/path/step.d.ts +674 -154
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/path/target.cjs +4 -5
- package/dist/lib/ir/path/target.d.ts +43 -8
- package/dist/lib/ir/path/target.d.ts.map +1 -1
- package/dist/lib/ir/scene.cjs +3 -1
- package/dist/lib/ir/scene.d.ts +156 -0
- package/dist/lib/ir/scene.d.ts.map +1 -1
- package/dist/lib/ir/scope.cjs +10 -2
- package/dist/lib/ir/scope.d.ts +1671 -424
- package/dist/lib/ir/scope.d.ts.map +1 -1
- package/dist/lib/ir/shape.cjs +9 -0
- package/dist/lib/ir/shape.d.ts +14 -0
- package/dist/lib/ir/shape.d.ts.map +1 -0
- package/dist/lib/parsers/parseNodeTarget.cjs +4 -2
- package/dist/lib/parsers/parseNodeTarget.d.ts.map +1 -1
- package/dist/lib/presets/animation.cjs +286 -0
- package/dist/lib/presets/animation.d.ts +123 -0
- package/dist/lib/presets/animation.d.ts.map +1 -0
- package/dist/lib/presets/index.d.ts +3 -0
- package/dist/lib/presets/index.d.ts.map +1 -0
- package/dist/lib/primitive/ellipse.d.ts +6 -0
- package/dist/lib/primitive/ellipse.d.ts.map +1 -1
- package/dist/lib/primitive/group.d.ts +6 -0
- package/dist/lib/primitive/group.d.ts.map +1 -1
- package/dist/lib/primitive/path.d.ts +6 -0
- package/dist/lib/primitive/path.d.ts.map +1 -1
- package/dist/lib/primitive/rect.d.ts +6 -0
- package/dist/lib/primitive/rect.d.ts.map +1 -1
- package/dist/lib/primitive/scene.d.ts +3 -0
- package/dist/lib/primitive/scene.d.ts.map +1 -1
- package/dist/lib/primitive/text.d.ts +6 -0
- package/dist/lib/primitive/text.d.ts.map +1 -1
- package/dist/lib/shapes/_contour.cjs +61 -0
- package/dist/lib/shapes/_contour.d.ts +19 -0
- package/dist/lib/shapes/_contour.d.ts.map +1 -0
- package/dist/lib/shapes/_shared.cjs +70 -0
- package/dist/lib/shapes/_shared.d.ts +54 -0
- package/dist/lib/shapes/_shared.d.ts.map +1 -1
- package/dist/lib/shapes/arc.cjs +104 -0
- package/dist/lib/shapes/arc.d.ts +8 -0
- package/dist/lib/shapes/arc.d.ts.map +1 -0
- package/dist/lib/shapes/define.cjs +13 -0
- package/dist/lib/shapes/define.d.ts +13 -0
- package/dist/lib/shapes/define.d.ts.map +1 -0
- package/dist/lib/shapes/ellipse.cjs +15 -7
- package/dist/lib/shapes/ellipse.d.ts +5 -4
- package/dist/lib/shapes/ellipse.d.ts.map +1 -1
- package/dist/lib/shapes/index.cjs +12 -6
- package/dist/lib/shapes/index.d.ts +9 -6
- package/dist/lib/shapes/index.d.ts.map +1 -1
- package/dist/lib/shapes/polygon.cjs +104 -0
- package/dist/lib/shapes/polygon.d.ts +13 -0
- package/dist/lib/shapes/polygon.d.ts.map +1 -0
- package/dist/lib/shapes/rectangle.cjs +37 -8
- package/dist/lib/shapes/rectangle.d.ts +7 -5
- package/dist/lib/shapes/rectangle.d.ts.map +1 -1
- package/dist/lib/shapes/sector.cjs +143 -0
- package/dist/lib/shapes/sector.d.ts +9 -0
- package/dist/lib/shapes/sector.d.ts.map +1 -0
- package/dist/lib/shapes/star.cjs +113 -0
- package/dist/lib/shapes/star.d.ts +15 -0
- package/dist/lib/shapes/star.d.ts.map +1 -0
- package/dist/lib/shapes/types.d.ts +47 -14
- package/dist/lib/shapes/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/es/shapes/circle.d.ts +0 -8
- package/dist/es/shapes/circle.d.ts.map +0 -1
- package/dist/es/shapes/circle.js +0 -34
- package/dist/es/shapes/diamond.d.ts +0 -8
- package/dist/es/shapes/diamond.d.ts.map +0 -1
- package/dist/es/shapes/diamond.js +0 -66
- package/dist/lib/shapes/circle.cjs +0 -34
- package/dist/lib/shapes/circle.d.ts +0 -8
- package/dist/lib/shapes/circle.d.ts.map +0 -1
- package/dist/lib/shapes/diamond.cjs +0 -66
- package/dist/lib/shapes/diamond.d.ts +0 -8
- package/dist/lib/shapes/diamond.d.ts.map +0 -1
|
@@ -8,10 +8,10 @@ const require_anchor_cache = require("../anchor-cache.cjs");
|
|
|
8
8
|
var isNodeTarget = (t) => typeof t === "object" && !Array.isArray(t) && "id" in t;
|
|
9
9
|
/** target 是否 between 比例点(`{ between, t }`);独有 `between` 字段 */
|
|
10
10
|
var isBetween = (t) => typeof t === "object" && !Array.isArray(t) && "between" in t;
|
|
11
|
-
/** 解析 NodeTarget 的 anchor(非 undefined)到世界坐标:命名 / 角度走 resolveAnchor
|
|
12
|
-
var resolveAnchorRef = (node, anchor) => {
|
|
13
|
-
if (typeof anchor === "number") return require_anchor_cache.resolveAnchor(node, String(anchor));
|
|
14
|
-
if (typeof anchor === "string") return require_anchor_cache.resolveAnchor(node, anchor);
|
|
11
|
+
/** 解析 NodeTarget 的 anchor(非 undefined)到世界坐标:命名 / 角度走 resolveAnchor(可选连接面),`{ side, t }` 恒走视觉形状(不传 boundary) */
|
|
12
|
+
var resolveAnchorRef = (node, anchor, boundary) => {
|
|
13
|
+
if (typeof anchor === "number") return require_anchor_cache.resolveAnchor(node, String(anchor), boundary);
|
|
14
|
+
if (typeof anchor === "string") return require_anchor_cache.resolveAnchor(node, anchor, boundary);
|
|
15
15
|
return require_anchor_cache.resolveEdgePoint(node, anchor.side, anchor.t);
|
|
16
16
|
};
|
|
17
17
|
/** anchor/边点解析后叠加世界系 offset(不随节点 rotate 旋转) */
|
|
@@ -27,7 +27,7 @@ var refPointOfTarget = (target, nameStack, scopeChain = []) => {
|
|
|
27
27
|
if (isNodeTarget(target)) {
|
|
28
28
|
const node = nameStack.lookup(target.id);
|
|
29
29
|
if (!node) return null;
|
|
30
|
-
return addOffset(target.anchor === void 0 ? [node.rect.x, node.rect.y] : resolveAnchorRef(node, target.anchor), target.offset);
|
|
30
|
+
return addOffset(target.anchor === void 0 ? [node.rect.x, node.rect.y] : resolveAnchorRef(node, target.anchor, target.boundary ?? node.boundary), target.offset);
|
|
31
31
|
}
|
|
32
32
|
if (isBetween(target)) {
|
|
33
33
|
const a = refPointOfTarget(target.between[0], nameStack, scopeChain);
|
|
@@ -54,7 +54,8 @@ var clipForTarget = (target, toward, nameStack, scopeChain = []) => {
|
|
|
54
54
|
if (isNodeTarget(target)) {
|
|
55
55
|
const node = nameStack.lookup(target.id);
|
|
56
56
|
if (!node) return null;
|
|
57
|
-
|
|
57
|
+
const boundary = target.boundary ?? node.boundary;
|
|
58
|
+
return addOffset(target.anchor === void 0 ? require_node.boundaryPointOf(node, toward, boundary) : resolveAnchorRef(node, target.anchor, boundary), target.offset);
|
|
58
59
|
}
|
|
59
60
|
if (isBetween(target)) return refPointOfTarget(target, nameStack, scopeChain);
|
|
60
61
|
if (typeof target === "object" && !Array.isArray(target) && ("relative" in target || "relativeAccumulate" in target)) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA6B/C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,WAAW,SAAS,EACpB,aAAY,aAAa,CAAC,SAAS,CAAM,KACxC,UAAU,GAAG,IA8Bf,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,GACnB,MAAM,UAAU,EAChB,MAAM,UAAU,EAChB,KAAK,IAAI,GAAG,IAAI,KACf,UACqD,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,QAAQ,EAChB,QAAQ,UAAU,EAClB,WAAW,SAAS,EACpB,aAAY,aAAa,CAAC,SAAS,CAAM,KACxC,UAAU,GAAG,IAuBf,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,GAAG,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,KAAG,OACzB,CAAC;AAE/C,6BAA6B;AAC7B,eAAO,MAAM,WAAW,GAAI,GAAG,UAAU,EAAE,QAAQ,UAAU,EAAE,MAAM,MAAM,KAAG,UAM7E,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_rect = require("../../geometry/rect.cjs");
|
|
2
1
|
const require_json = require("../../ir/json.cjs");
|
|
2
|
+
const require_rect = require("../../geometry/rect.cjs");
|
|
3
|
+
const require_arc = require("../../geometry/arc.cjs");
|
|
3
4
|
const require_index = require("../../arrows/index.cjs");
|
|
4
5
|
const require_scope = require("../scope.cjs");
|
|
5
|
-
const require_arc = require("../../geometry/arc.cjs");
|
|
6
6
|
const require_bend = require("../../geometry/bend.cjs");
|
|
7
7
|
const require_segment = require("../../geometry/segment.cjs");
|
|
8
8
|
const require_text_metrics = require("../text-metrics.cjs");
|
|
@@ -434,7 +434,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
434
434
|
return null;
|
|
435
435
|
}
|
|
436
436
|
let rectStart = null;
|
|
437
|
-
for (const op of require_rect.rectOutline(fromPt, toPt, step.
|
|
437
|
+
for (const op of require_rect.rectOutline(fromPt, toPt, step.cornerRadius)) if (op.kind === "move") {
|
|
438
438
|
emitMove(op.to);
|
|
439
439
|
rectStart = op.to;
|
|
440
440
|
} else if (op.kind === "line") emitLine(op.to);
|
|
@@ -647,6 +647,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
647
647
|
children: bodyPrims
|
|
648
648
|
};
|
|
649
649
|
if (path.id !== void 0) group.id = path.id;
|
|
650
|
+
if (path.meta !== void 0) group.meta = path.meta;
|
|
651
|
+
if (path.animations !== void 0) group.animations = path.animations;
|
|
650
652
|
const transformedPoints = points.map((p) => require_scope.applyTransformChain(p, transforms));
|
|
651
653
|
if (!transformedPoints.every(isFinitePoint)) throw new Error("Path rotate / scale produced a non-finite coordinate (scale too large); use a smaller scale.");
|
|
652
654
|
return {
|
|
@@ -656,6 +658,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
656
658
|
}
|
|
657
659
|
}
|
|
658
660
|
if (path.id !== void 0) primitive.id = path.id;
|
|
661
|
+
if (path.meta !== void 0) primitive.meta = path.meta;
|
|
662
|
+
if (path.animations !== void 0) primitive.animations = path.animations;
|
|
659
663
|
return {
|
|
660
664
|
primitives: bodyPrims,
|
|
661
665
|
points
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAIV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAKtE,OAAO,EAAE,KAAK,eAAe,EAA2D,MAAM,UAAU,CAAC;AA8FzG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,CAAC;IACX,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,wEAAwE;IACxE,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACnE,CAAC;AA0EF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAa,YAA+B,EAC5C,WAAU,gBAAqB,KAC9B;IAAE,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAIV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAKtE,OAAO,EAAE,KAAK,eAAe,EAA2D,MAAM,UAAU,CAAC;AA8FzG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,CAAC;IACX,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,wEAAwE;IACxE,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACnE,CAAC;AA0EF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAa,YAA+B,EAC5C,WAAU,gBAAqB,KAC9B;IAAE,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,IAsvBrE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,KACpB,KAAK,CAAC,SAAS,CAAC,GAAG,IAiDrB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAyBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAgCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAuBF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,gBAAgB,GAAG,IA2BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,KACzB,
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,KACpB,KAAK,CAAC,SAAS,CAAC,GAAG,IAiDrB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAyBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAgCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAuBF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,gBAAgB,GAAG,IA2BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,KACzB,UAiBF,CAAC"}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
//#region src/geometry/arc.ts
|
|
2
2
|
var DEG_TO_RAD = Math.PI / 180;
|
|
3
|
+
/**
|
|
4
|
+
* 在 [lo, hi] 内枚举所有 90°·k 方向角(弧轴向极值候选)
|
|
5
|
+
* @description 一圈最多 4 个轴向,合法弧 sweep ≤ 360° → 至多 5 个 90°·k;正常区间直接 for 扫。
|
|
6
|
+
* 但 lo/hi 为巨型角度(如 1e308)时 k=ceil(lo/90) 落在浮点无整数分辨率区,`k++` 满足 k+1===k →
|
|
7
|
+
* for 循环永不前进而挂死(DoS)。此时端点投影已覆盖全部 x/y 极值(巨角下弧实际是退化点 / 单端),
|
|
8
|
+
* 轴向点无新增信息 → 直接跳过枚举。守卫:仅当 kEnd−kStart 是 finite 且 ≤ 安全上界(远大于
|
|
9
|
+
* 任何合法弧的轴向点数)时才枚举,否则返回空(端点已足够定界)。
|
|
10
|
+
*/
|
|
11
|
+
var axisAngles = (lo, hi) => {
|
|
12
|
+
const kStart = Math.ceil(lo / 90);
|
|
13
|
+
const kEnd = Math.floor(hi / 90);
|
|
14
|
+
const span = kEnd - kStart;
|
|
15
|
+
if (!Number.isFinite(span) || span < 0 || span > 1e6) return [];
|
|
16
|
+
const angles = [];
|
|
17
|
+
for (let k = kStart; k <= kEnd; k++) angles.push(k * 90);
|
|
18
|
+
return angles;
|
|
19
|
+
};
|
|
3
20
|
/** 圆心、半径、角度(度,与 polar.toPosition 同约定)→ 圆周上对应点 */
|
|
4
21
|
var arcEndPoint = (center, radius, angleDeg) => {
|
|
5
22
|
const rad = angleDeg * DEG_TO_RAD;
|
|
@@ -13,15 +30,57 @@ var arcBoundingPoints = (center, radius, startAngleDeg, endAngleDeg) => {
|
|
|
13
30
|
const points = [arcEndPoint(center, radius, startAngleDeg), arcEndPoint(center, radius, endAngleDeg)];
|
|
14
31
|
const lo = Math.min(startAngleDeg, endAngleDeg);
|
|
15
32
|
const hi = Math.max(startAngleDeg, endAngleDeg);
|
|
16
|
-
const
|
|
17
|
-
const kEnd = Math.floor(hi / 90);
|
|
18
|
-
for (let k = kStart; k <= kEnd; k++) {
|
|
19
|
-
const angle = k * 90;
|
|
33
|
+
for (const angle of axisAngles(lo, hi)) {
|
|
20
34
|
if (angle === startAngleDeg || angle === endAngleDeg) continue;
|
|
21
35
|
points.push(arcEndPoint(center, radius, angle));
|
|
22
36
|
}
|
|
23
37
|
return points;
|
|
24
38
|
};
|
|
39
|
+
/** 角度(度)→ 规范化到 [0, 360) */
|
|
40
|
+
var normalizeDeg = (deg) => {
|
|
41
|
+
const m = deg % 360;
|
|
42
|
+
return m < 0 ? m + 360 : m;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* 角度 a(度)是否落在弧的角度区间 [startAngle, endAngle] 内(含端点,带容差)
|
|
46
|
+
* @description 与 ir/path arc 同约定:弧从 startAngle 扫到 endAngle,counterClockwise=false(缺省)
|
|
47
|
+
* 时角度递增(屏幕顺时针)、true 时角度递减(逆时针)。统一把扫描量化为「从 start 出发、沿扫描方向
|
|
48
|
+
* 累积的非负 sweep ∈ [0, |span|]」判定,跨 360°、负角、巨型角都正确(不死循环)。
|
|
49
|
+
*/
|
|
50
|
+
var arcAngleInRange = (startAngleDeg, endAngleDeg, angleDeg, toleranceDeg = 1e-7) => {
|
|
51
|
+
const span = endAngleDeg - startAngleDeg;
|
|
52
|
+
const total = Math.abs(span);
|
|
53
|
+
if (total >= 360 - toleranceDeg) return true;
|
|
54
|
+
const swept = normalizeDeg(span < 0 ? startAngleDeg - angleDeg : angleDeg - startAngleDeg);
|
|
55
|
+
return swept <= total + toleranceDeg || swept >= 360 - toleranceDeg;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* 射线(origin + 单位方向 dir)∩ 圆弧(center, radius, [startAngle, endAngle])
|
|
59
|
+
* @description 泛化 sector 的内联 rayCircle:先解 |origin + s·dir|² = radius² 得至多两个参数 s,
|
|
60
|
+
* 再用 arcAngleInRange 过滤掉不在弧角度区间内的交点。返回沿射线的正向参数 s(命中点 = origin + s·dir),
|
|
61
|
+
* 按 s 升序、仅含 s > tolerance 的正向交点;不在区间内的根被剔除。dir 必须为单位向量。
|
|
62
|
+
*/
|
|
63
|
+
var rayArc = (origin, dir, center, radius, startAngleDeg, endAngleDeg, tolerance = 1e-9) => {
|
|
64
|
+
const ox = origin[0] - center[0];
|
|
65
|
+
const oy = origin[1] - center[1];
|
|
66
|
+
const ux = dir[0];
|
|
67
|
+
const uy = dir[1];
|
|
68
|
+
const b = 2 * (ox * ux + oy * uy);
|
|
69
|
+
const c = ox * ox + oy * oy - radius * radius;
|
|
70
|
+
const disc = b * b - 4 * c;
|
|
71
|
+
if (disc < 0) return [];
|
|
72
|
+
const sq = Math.sqrt(disc);
|
|
73
|
+
const roots = [(-b - sq) / 2, (-b + sq) / 2];
|
|
74
|
+
const hits = [];
|
|
75
|
+
for (const s of roots) {
|
|
76
|
+
if (s <= tolerance) continue;
|
|
77
|
+
const px = ox + s * ux;
|
|
78
|
+
const py = oy + s * uy;
|
|
79
|
+
if (arcAngleInRange(startAngleDeg, endAngleDeg, Math.atan2(py, px) * (180 / Math.PI))) hits.push(s);
|
|
80
|
+
}
|
|
81
|
+
hits.sort((a, z) => a - z);
|
|
82
|
+
return hits;
|
|
83
|
+
};
|
|
25
84
|
/**
|
|
26
85
|
* 椭圆弧参数点:中心 + 半轴 rx/ry + 参数角(度)→ 椭圆周上点
|
|
27
86
|
* @description 与 arcEndPoint 同角度约定(SVG y-down);endpoint = [cx + rx·cosθ, cy + ry·sinθ]。
|
|
@@ -39,17 +98,16 @@ var ellipseArcBoundingPoints = (center, radiusX, radiusY, startAngleDeg, endAngl
|
|
|
39
98
|
const points = [ellipseArcPoint(center, radiusX, radiusY, startAngleDeg), ellipseArcPoint(center, radiusX, radiusY, endAngleDeg)];
|
|
40
99
|
const lo = Math.min(startAngleDeg, endAngleDeg);
|
|
41
100
|
const hi = Math.max(startAngleDeg, endAngleDeg);
|
|
42
|
-
const
|
|
43
|
-
const kEnd = Math.floor(hi / 90);
|
|
44
|
-
for (let k = kStart; k <= kEnd; k++) {
|
|
45
|
-
const angle = k * 90;
|
|
101
|
+
for (const angle of axisAngles(lo, hi)) {
|
|
46
102
|
if (angle === startAngleDeg || angle === endAngleDeg) continue;
|
|
47
103
|
points.push(ellipseArcPoint(center, radiusX, radiusY, angle));
|
|
48
104
|
}
|
|
49
105
|
return points;
|
|
50
106
|
};
|
|
51
107
|
//#endregion
|
|
108
|
+
exports.arcAngleInRange = arcAngleInRange;
|
|
52
109
|
exports.arcBoundingPoints = arcBoundingPoints;
|
|
53
110
|
exports.arcEndPoint = arcEndPoint;
|
|
54
111
|
exports.ellipseArcBoundingPoints = ellipseArcBoundingPoints;
|
|
55
112
|
exports.ellipseArcPoint = ellipseArcPoint;
|
|
113
|
+
exports.rayArc = rayArc;
|
|
@@ -6,6 +6,20 @@ export declare const arcEndPoint: (center: Position, radius: number, angleDeg: n
|
|
|
6
6
|
* @description 弧投影到 x/y 轴的极值只可能在弧端点或圆周轴向四点出现。endAngle < startAngle 时按 min..max 扫描;跨 360°(270→450)按数值区间正确处理;不去重——端角恰在 90°·k 上时调用方处理
|
|
7
7
|
*/
|
|
8
8
|
export declare const arcBoundingPoints: (center: Position, radius: number, startAngleDeg: number, endAngleDeg: number) => Array<Position>;
|
|
9
|
+
/**
|
|
10
|
+
* 角度 a(度)是否落在弧的角度区间 [startAngle, endAngle] 内(含端点,带容差)
|
|
11
|
+
* @description 与 ir/path arc 同约定:弧从 startAngle 扫到 endAngle,counterClockwise=false(缺省)
|
|
12
|
+
* 时角度递增(屏幕顺时针)、true 时角度递减(逆时针)。统一把扫描量化为「从 start 出发、沿扫描方向
|
|
13
|
+
* 累积的非负 sweep ∈ [0, |span|]」判定,跨 360°、负角、巨型角都正确(不死循环)。
|
|
14
|
+
*/
|
|
15
|
+
export declare const arcAngleInRange: (startAngleDeg: number, endAngleDeg: number, angleDeg: number, toleranceDeg?: number) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 射线(origin + 单位方向 dir)∩ 圆弧(center, radius, [startAngle, endAngle])
|
|
18
|
+
* @description 泛化 sector 的内联 rayCircle:先解 |origin + s·dir|² = radius² 得至多两个参数 s,
|
|
19
|
+
* 再用 arcAngleInRange 过滤掉不在弧角度区间内的交点。返回沿射线的正向参数 s(命中点 = origin + s·dir),
|
|
20
|
+
* 按 s 升序、仅含 s > tolerance 的正向交点;不在区间内的根被剔除。dir 必须为单位向量。
|
|
21
|
+
*/
|
|
22
|
+
export declare const rayArc: (origin: Position, dir: Position, center: Position, radius: number, startAngleDeg: number, endAngleDeg: number, tolerance?: number) => Array<number>;
|
|
9
23
|
/**
|
|
10
24
|
* 椭圆弧参数点:中心 + 半轴 rx/ry + 参数角(度)→ 椭圆周上点
|
|
11
25
|
* @description 与 arcEndPoint 同角度约定(SVG y-down);endpoint = [cx + rx·cosθ, cy + ry·sinθ]。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arc.d.ts","sourceRoot":"","sources":["../../../src/geometry/arc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"arc.d.ts","sourceRoot":"","sources":["../../../src/geometry/arc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA8BxC,iDAAiD;AACjD,eAAO,MAAM,WAAW,GACtB,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,QAMF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,aAAa,MAAM,KAClB,KAAK,CAAC,QAAQ,CAchB,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,UAAU,MAAM,EAChB,qBAAmB,KAClB,OASF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,QAAQ,QAAQ,EAChB,KAAK,QAAQ,EACb,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,kBAAgB,KACf,KAAK,CAAC,MAAM,CAuBd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,QAAQ,EAChB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,UAAU,MAAM,KACf,QAMF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,QAAQ,EAChB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,eAAe,MAAM,EACrB,aAAa,MAAM,KAClB,KAAK,CAAC,QAAQ,CAYhB,CAAC"}
|
|
@@ -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"}
|
|
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,kBAAkB,CAAC"}
|
|
@@ -82,15 +82,15 @@ var rect = {
|
|
|
82
82
|
/**
|
|
83
83
|
* 矩形 outline:两对角 → 顺时针 path 算子序列
|
|
84
84
|
* @description from/to 任意顺序,归一化 (x0,y0)=min、(x1,y1)=max。直角 = 4 line + close(起点左上 (x0,y0));
|
|
85
|
-
* 圆角 = 4 line + 4 quarter-arc + close(起点 (x0+r, y0))。
|
|
85
|
+
* 圆角 = 4 line + 4 quarter-arc + close(起点 (x0+r, y0))。cornerRadius clamp 到 min(w,h)/2。
|
|
86
86
|
* 角度约定同 geometry/arc(y-down:0=+x, 90=+y/下, 180=-x, 270=-y/上)。
|
|
87
87
|
*/
|
|
88
|
-
var rectOutline = (from, to,
|
|
88
|
+
var rectOutline = (from, to, cornerRadius) => {
|
|
89
89
|
const x0 = Math.min(from[0], to[0]);
|
|
90
90
|
const x1 = Math.max(from[0], to[0]);
|
|
91
91
|
const y0 = Math.min(from[1], to[1]);
|
|
92
92
|
const y1 = Math.max(from[1], to[1]);
|
|
93
|
-
const r =
|
|
93
|
+
const r = cornerRadius === void 0 ? 0 : Math.min(cornerRadius, (x1 - x0) / 2, (y1 - y0) / 2);
|
|
94
94
|
if (r <= 0) return [
|
|
95
95
|
{
|
|
96
96
|
kind: "move",
|
|
@@ -54,8 +54,8 @@ export type RectOutlineOp = {
|
|
|
54
54
|
/**
|
|
55
55
|
* 矩形 outline:两对角 → 顺时针 path 算子序列
|
|
56
56
|
* @description from/to 任意顺序,归一化 (x0,y0)=min、(x1,y1)=max。直角 = 4 line + close(起点左上 (x0,y0));
|
|
57
|
-
* 圆角 = 4 line + 4 quarter-arc + close(起点 (x0+r, y0))。
|
|
57
|
+
* 圆角 = 4 line + 4 quarter-arc + close(起点 (x0+r, y0))。cornerRadius clamp 到 min(w,h)/2。
|
|
58
58
|
* 角度约定同 geometry/arc(y-down:0=+x, 90=+y/下, 180=-x, 270=-y/上)。
|
|
59
59
|
*/
|
|
60
|
-
export declare const rectOutline: (from: Position, to: Position,
|
|
60
|
+
export declare const rectOutline: (from: Position, to: Position, cornerRadius?: number) => Array<RectOutlineOp>;
|
|
61
61
|
//# sourceMappingURL=rect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1D,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,qEAAqE;AACrE,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,sCAAsC;gBAC1B,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C,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,
|
|
1
|
+
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1D,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,qEAAqE;AACrE,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,sCAAsC;gBAC1B,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C,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"}
|