@retikz/core 0.3.0-beta.1 → 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/index.d.ts.map +1 -1
- package/dist/es/arrows/index.js +1 -1
- package/dist/es/compile/anchor-cache.js +3 -3
- package/dist/es/compile/compile.d.ts.map +1 -1
- package/dist/es/compile/compile.js +13 -10
- package/dist/es/compile/constant.d.ts +1 -3
- package/dist/es/compile/constant.d.ts.map +1 -1
- package/dist/es/compile/constant.js +2 -4
- package/dist/es/compile/node.d.ts +3 -3
- package/dist/es/compile/node.d.ts.map +1 -1
- package/dist/es/compile/node.js +19 -9
- package/dist/es/compile/path/index.d.ts.map +1 -1
- package/dist/es/compile/path/index.js +40 -10
- package/dist/es/compile/path/label.d.ts.map +1 -1
- package/dist/es/compile/path/label.js +8 -4
- package/dist/es/compile/scope.d.ts +1 -1
- package/dist/es/compile/scope.d.ts.map +1 -1
- package/dist/es/compile/scope.js +17 -5
- package/dist/es/compile/text-metrics.d.ts +1 -1
- package/dist/es/compile/text-metrics.js +2 -2
- package/dist/es/geometry/bend.js +1 -1
- package/dist/es/geometry/contour.d.ts +5 -0
- package/dist/es/geometry/contour.d.ts.map +1 -1
- package/dist/es/geometry/contour.js +5 -3
- package/dist/es/geometry/diamond.d.ts +7 -1
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +9 -1
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +2 -0
- package/dist/es/geometry/index.d.ts +4 -0
- package/dist/es/geometry/index.d.ts.map +1 -1
- 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 +24 -1
- package/dist/es/index.d.ts +4 -4
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +4 -3
- package/dist/es/ir/animation.d.ts +20 -120
- 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 +3 -9
- 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 +6 -42
- 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 +123 -770
- package/dist/es/ir/node.d.ts.map +1 -1
- package/dist/es/ir/node.js +2 -2
- package/dist/es/ir/paint.d.ts +13 -91
- package/dist/es/ir/paint.d.ts.map +1 -1
- package/dist/es/ir/path/arrow.d.ts +4 -117
- package/dist/es/ir/path/arrow.d.ts.map +1 -1
- package/dist/es/ir/path/path.d.ts +511 -3798
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/path.js +2 -2
- package/dist/es/ir/path/step.d.ts +917 -4374
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/step.js +7 -7
- 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/position/at-position.d.ts +2 -10
- package/dist/es/ir/position/at-position.d.ts.map +1 -1
- package/dist/es/ir/position/at-position.js +1 -1
- 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 +283 -8761
- package/dist/es/ir/scope.d.ts.map +1 -1
- package/dist/es/ir/scope.js +5 -2
- 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 +23 -147
- package/dist/es/ir/transform.d.ts.map +1 -1
- package/dist/es/ir/transform.js +3 -3
- package/dist/es/parsers/way.d.ts +1 -1
- package/dist/es/parsers/way.js +1 -1
- package/dist/es/primitive/marker.d.ts +6 -6
- package/dist/es/primitive/marker.d.ts.map +1 -1
- package/dist/es/shapes/arc.d.ts.map +1 -1
- package/dist/es/shapes/arc.js +23 -4
- package/dist/es/shapes/rectangle.js +1 -1
- package/dist/es/shapes/shared.d.ts +3 -2
- package/dist/es/shapes/shared.d.ts.map +1 -1
- package/dist/es/shapes/shared.js +5 -3
- package/dist/es/shapes/star.d.ts.map +1 -1
- package/dist/es/shapes/star.js +2 -1
- 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/index.cjs +1 -1
- package/dist/lib/arrows/index.d.ts.map +1 -1
- package/dist/lib/compile/anchor-cache.cjs +3 -3
- package/dist/lib/compile/compile.cjs +13 -10
- package/dist/lib/compile/compile.d.ts.map +1 -1
- package/dist/lib/compile/constant.cjs +2 -4
- package/dist/lib/compile/constant.d.ts +1 -3
- package/dist/lib/compile/constant.d.ts.map +1 -1
- package/dist/lib/compile/node.cjs +19 -9
- package/dist/lib/compile/node.d.ts +3 -3
- package/dist/lib/compile/node.d.ts.map +1 -1
- package/dist/lib/compile/path/index.cjs +39 -9
- 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/scope.cjs +17 -5
- package/dist/lib/compile/scope.d.ts +1 -1
- package/dist/lib/compile/scope.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/geometry/bend.cjs +1 -1
- package/dist/lib/geometry/contour.cjs +5 -3
- package/dist/lib/geometry/contour.d.ts +5 -0
- package/dist/lib/geometry/contour.d.ts.map +1 -1
- package/dist/lib/geometry/diamond.cjs +9 -1
- package/dist/lib/geometry/diamond.d.ts +7 -1
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/ellipse.cjs +2 -0
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/index.d.ts +4 -0
- package/dist/lib/geometry/index.d.ts.map +1 -1
- package/dist/lib/geometry/segment.cjs +24 -0
- package/dist/lib/geometry/segment.d.ts +7 -0
- package/dist/lib/geometry/segment.d.ts.map +1 -1
- package/dist/lib/index.cjs +6 -0
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/animation.cjs +6 -6
- package/dist/lib/ir/animation.d.ts +20 -120
- package/dist/lib/ir/animation.d.ts.map +1 -1
- package/dist/lib/ir/boundary.d.ts +3 -9
- 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 +6 -42
- 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 +2 -2
- package/dist/lib/ir/node.d.ts +123 -770
- package/dist/lib/ir/node.d.ts.map +1 -1
- package/dist/lib/ir/paint.d.ts +13 -91
- package/dist/lib/ir/paint.d.ts.map +1 -1
- package/dist/lib/ir/path/arrow.d.ts +4 -117
- package/dist/lib/ir/path/arrow.d.ts.map +1 -1
- package/dist/lib/ir/path/path.cjs +3 -1
- package/dist/lib/ir/path/path.d.ts +511 -3798
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.cjs +7 -7
- package/dist/lib/ir/path/step.d.ts +917 -4374
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- 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 +1 -1
- package/dist/lib/ir/position/at-position.d.ts +2 -10
- 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 +5 -2
- package/dist/lib/ir/scope.d.ts +283 -8761
- 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 +3 -3
- package/dist/lib/ir/transform.d.ts +23 -147
- package/dist/lib/ir/transform.d.ts.map +1 -1
- package/dist/lib/parsers/way.cjs +1 -1
- package/dist/lib/parsers/way.d.ts +1 -1
- package/dist/lib/primitive/marker.d.ts +6 -6
- package/dist/lib/primitive/marker.d.ts.map +1 -1
- package/dist/lib/shapes/arc.cjs +22 -3
- package/dist/lib/shapes/arc.d.ts.map +1 -1
- package/dist/lib/shapes/rectangle.cjs +1 -1
- package/dist/lib/shapes/shared.cjs +5 -3
- package/dist/lib/shapes/shared.d.ts +3 -2
- package/dist/lib/shapes/shared.d.ts.map +1 -1
- package/dist/lib/shapes/star.cjs +2 -1
- 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 +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/arrows/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAiCjE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/arrows/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAiCjE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,eAAe,CA6DpE,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/es/arrows/index.js
CHANGED
|
@@ -122,7 +122,7 @@ var BUILTIN_ARROWS = {
|
|
|
122
122
|
cy: 5,
|
|
123
123
|
rx: 4.25,
|
|
124
124
|
ry: 4.25,
|
|
125
|
-
stroke: typeof ctx.stroke === "string" ? ctx.stroke : "
|
|
125
|
+
stroke: typeof ctx.stroke === "string" ? ctx.stroke : { kind: "contextStroke" },
|
|
126
126
|
strokeWidth: ctx.lineWidth
|
|
127
127
|
}]
|
|
128
128
|
}
|
|
@@ -9,7 +9,7 @@ import { anchorOf, angleBoundaryOf, outerRectOf } from "./node.js";
|
|
|
9
9
|
var cache = /* @__PURE__ */ new WeakMap();
|
|
10
10
|
/** 角度字符串识别:可选负号 + 数字 + 可选小数;与 parseTarget.ts 的 ANGLE_RE 同语义 */
|
|
11
11
|
var ANGLE_RE = /^-?\d+(\.\d+)?$/;
|
|
12
|
-
/** 把 layout 的 rect 换成外边界 AABB(外扩 outerSep)——border 类 anchor
|
|
12
|
+
/** 把 layout 的 rect 换成外边界 AABB(外扩 outerSep)——border 类 anchor(compass / 数字角度)在其上解析 */
|
|
13
13
|
var withOuterRect = (layout) => ({
|
|
14
14
|
...layout,
|
|
15
15
|
rect: outerRectOf(layout)
|
|
@@ -17,8 +17,8 @@ var withOuterRect = (layout) => ({
|
|
|
17
17
|
/**
|
|
18
18
|
* 把 anchorName 解析到对应 shape 的 anchor / boundaryPoint 上
|
|
19
19
|
* @description 数字字符串走 angleBoundaryOf;其余按标准方位 / shape-specific anchor 走 anchorOf;boundary 透传给两者。
|
|
20
|
-
* border 类 anchor(数字角度 + compass 方位名)按 outerSep 外推:在外扩 margin 的 rect(`outerRectOf
|
|
21
|
-
*
|
|
20
|
+
* border 类 anchor(数字角度 + compass 方位名)按 outerSep 外推:在外扩 margin 的 rect(`outerRectOf`)上解析。
|
|
21
|
+
* 形状专属命名 anchor(tip-N / apex 等)恒走视觉 rect、不外扩。`center` 在 inflate 下
|
|
22
22
|
* 中心不变,走哪条路结果一致。
|
|
23
23
|
*/
|
|
24
24
|
var computeAnchor = (layout, anchorName, boundary) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/compile/compile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/compile/compile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAA8D,MAAM,OAAO,CAAC;AAC5F,OAAO,KAAK,EAAa,KAAK,EAA6B,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,YAAY,CAAC;AAuBpB,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAGrE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoDhD,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GAAG;IAC3B,oCAAoC;IACpC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACzD;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAuLF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,EAAE,EAAE,UAAS,cAAmB,KAAG,KAqXrE,CAAC"}
|
|
@@ -128,15 +128,14 @@ var collectPlaceholderLocators = (prims, prefix = "primitives") => {
|
|
|
128
128
|
});
|
|
129
129
|
return locators;
|
|
130
130
|
};
|
|
131
|
-
/**
|
|
132
|
-
var
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
/** 据**实际解析失败**的那个 transform 的成因映射 warn code(由 lowerScopeTransforms 的 onUnresolved 回调给出) */
|
|
132
|
+
var transformWarnCode = (failed) => {
|
|
133
|
+
switch (failed?.kind) {
|
|
134
|
+
case "offset-translate": return CompileWarningCode.OffsetBaseUnresolved;
|
|
135
|
+
case "at-translate": return CompileWarningCode.AtTargetUnresolved;
|
|
136
|
+
case "polar-translate": return CompileWarningCode.PolarOriginUnresolved;
|
|
137
|
+
default: return CompileWarningCode.UnresolvedNodeReference;
|
|
138
138
|
}
|
|
139
|
-
return CompileWarningCode.UnresolvedNodeReference;
|
|
140
139
|
};
|
|
141
140
|
/** 把 DuplicateRegisterInfo 翻成 CompileWarning(含可读 message + 双 IR locator) */
|
|
142
141
|
var formatDuplicateWarning = (info) => {
|
|
@@ -298,9 +297,13 @@ var compileToScene = (ir, options = {}) => {
|
|
|
298
297
|
nameStack.register(child.id, coordLayout, `${locatorPrefix}children[${i}].coordinate.id`);
|
|
299
298
|
layoutsAccumulator.push(coordLayout);
|
|
300
299
|
} else if (child.type === "scope") {
|
|
301
|
-
const
|
|
300
|
+
const rawTransforms = child.transforms ?? [];
|
|
301
|
+
let failedTransform;
|
|
302
|
+
const loweredOwn = lowerScopeTransforms(rawTransforms, nameStack, nodeDistance, refPointOfTarget, (t) => {
|
|
303
|
+
failedTransform = t;
|
|
304
|
+
});
|
|
302
305
|
if (loweredOwn === null) onWarn({
|
|
303
|
-
code:
|
|
306
|
+
code: transformWarnCode(failedTransform),
|
|
304
307
|
message: `Cannot resolve one of scope.transforms; referent (at.of / offset.of / polar.origin / between endpoints) is undefined or defined later in the IR`,
|
|
305
308
|
path: `${locatorPrefix}children[${i}].scope.transforms`
|
|
306
309
|
});
|
|
@@ -3,12 +3,9 @@ import { ValueOf } from '../types';
|
|
|
3
3
|
export declare const CompileWarningCode: {
|
|
4
4
|
readonly UnresolvedNodeReference: "UNRESOLVED_NODE_REFERENCE";
|
|
5
5
|
readonly PathTooShort: "PATH_TOO_SHORT";
|
|
6
|
-
readonly AnchorResolutionFailed: "ANCHOR_RESOLUTION_FAILED";
|
|
7
6
|
readonly OffsetBaseUnresolved: "OFFSET_BASE_UNRESOLVED";
|
|
8
7
|
readonly PolarOriginUnresolved: "POLAR_ORIGIN_UNRESOLVED";
|
|
9
8
|
readonly AtTargetUnresolved: "AT_TARGET_UNRESOLVED";
|
|
10
|
-
readonly RelativeInitialNoPrevEnd: "RELATIVE_INITIAL_NO_PREV_END";
|
|
11
|
-
readonly BboxExtremeInput: "BBOX_EXTREME_INPUT";
|
|
12
9
|
readonly DuplicateNodeId: "DUPLICATE_NODE_ID";
|
|
13
10
|
readonly ShapeOverridesBuiltin: "SHAPE_OVERRIDES_BUILTIN";
|
|
14
11
|
readonly ArrowOverridesBuiltin: "ARROW_OVERRIDES_BUILTIN";
|
|
@@ -17,6 +14,7 @@ export declare const CompileWarningCode: {
|
|
|
17
14
|
readonly AnimationInvalidProperty: "ANIMATION_INVALID_PROPERTY";
|
|
18
15
|
readonly ArcMissingRadius: "ARC_MISSING_RADIUS";
|
|
19
16
|
readonly PartialArcNeedsBothAngles: "PARTIAL_ARC_NEEDS_BOTH_ANGLES";
|
|
17
|
+
readonly PartialArcClosedInvalid: "PARTIAL_ARC_CLOSED_INVALID";
|
|
20
18
|
};
|
|
21
19
|
export type CompileWarningCodeValue = ValueOf<typeof CompileWarningCode> | (string & {});
|
|
22
20
|
/** 编译期 warning:不影响 Scene 产物,交给调用方收集或展示。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/compile/constant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/compile/constant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAerB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAC/B,OAAO,CAAC,OAAO,kBAAkB,CAAC,GAClC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GAAG;IAC3B,yBAAyB;IACzB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,cAAc,KAAG,MACI,CAAC"}
|
|
@@ -3,12 +3,9 @@
|
|
|
3
3
|
var CompileWarningCode = {
|
|
4
4
|
UnresolvedNodeReference: "UNRESOLVED_NODE_REFERENCE",
|
|
5
5
|
PathTooShort: "PATH_TOO_SHORT",
|
|
6
|
-
AnchorResolutionFailed: "ANCHOR_RESOLUTION_FAILED",
|
|
7
6
|
OffsetBaseUnresolved: "OFFSET_BASE_UNRESOLVED",
|
|
8
7
|
PolarOriginUnresolved: "POLAR_ORIGIN_UNRESOLVED",
|
|
9
8
|
AtTargetUnresolved: "AT_TARGET_UNRESOLVED",
|
|
10
|
-
RelativeInitialNoPrevEnd: "RELATIVE_INITIAL_NO_PREV_END",
|
|
11
|
-
BboxExtremeInput: "BBOX_EXTREME_INPUT",
|
|
12
9
|
DuplicateNodeId: "DUPLICATE_NODE_ID",
|
|
13
10
|
ShapeOverridesBuiltin: "SHAPE_OVERRIDES_BUILTIN",
|
|
14
11
|
ArrowOverridesBuiltin: "ARROW_OVERRIDES_BUILTIN",
|
|
@@ -16,7 +13,8 @@ var CompileWarningCode = {
|
|
|
16
13
|
CompositeNotRegistered: "COMPOSITE_NOT_REGISTERED",
|
|
17
14
|
AnimationInvalidProperty: "ANIMATION_INVALID_PROPERTY",
|
|
18
15
|
ArcMissingRadius: "ARC_MISSING_RADIUS",
|
|
19
|
-
PartialArcNeedsBothAngles: "PARTIAL_ARC_NEEDS_BOTH_ANGLES"
|
|
16
|
+
PartialArcNeedsBothAngles: "PARTIAL_ARC_NEEDS_BOTH_ANGLES",
|
|
17
|
+
PartialArcClosedInvalid: "PARTIAL_ARC_CLOSED_INVALID"
|
|
20
18
|
};
|
|
21
19
|
var formatCompileWarning = (warning) => `[retikz] ${warning.code} at ${warning.path}: ${warning.message}`;
|
|
22
20
|
//#endregion
|
|
@@ -113,7 +113,7 @@ export type NodeLabelLayout = {
|
|
|
113
113
|
* @description = `inflateRect(layout.rect, layout.margin)`,中心不变、四向各 +margin。border 类
|
|
114
114
|
* anchor(compass / 数字角度)解析与 bbox / viewBox / 布局占位都基于这层;视觉 emit / 裁剪 /
|
|
115
115
|
* 形状专属 anchor / edgePoint / label 附着点仍读 `layout.rect`(不外扩)。单一派生量,不另存字段。
|
|
116
|
-
*
|
|
116
|
+
* (对齐 TikZ outer sep 语义。)
|
|
117
117
|
*/
|
|
118
118
|
export declare const outerRectOf: (layout: NodeLayout) => Rect;
|
|
119
119
|
/**
|
|
@@ -127,8 +127,8 @@ export declare const boundaryPointOf: (layout: NodeLayout, toward: Position, bou
|
|
|
127
127
|
* @description 纯几何:在传入的 `layout.rect` 上求点,本体**不施加 outerSep(margin)**。outerSep 的
|
|
128
128
|
* 「border 外推」由调用方决定——`anchor-cache.ts` 的 compass 解析先把 rect 外扩 margin(`outerRectOf`)
|
|
129
129
|
* 再调本函数;`labelBorderPoint` 喂视觉 rect(label 附着点不含 margin)。这样 outer sep 只作用于
|
|
130
|
-
* path / position 的 anchor 引用,不波及 label
|
|
131
|
-
* compass(9 个 rect
|
|
130
|
+
* path / position 的 anchor 引用,不波及 label。
|
|
131
|
+
* compass(9 个 rect 方位名):默认连接面先走视觉 shape 自身 compass(ellipse/circle 落真实周长、polygon/rect 落 AABB,与 TikZ 一致),shape 未实现则回退 AABB 矩形;显式 boundary 按其解析。
|
|
132
132
|
* 形状专属命名 anchor(tip-N / apex 等非 compass 名)恒走视觉形状自身,boundary 不影响。
|
|
133
133
|
* boundary 缺省 = 'shape'。
|
|
134
134
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/compile/node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/compile/node.ts"],"names":[],"mappings":"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"}
|
package/dist/es/compile/node.js
CHANGED
|
@@ -131,7 +131,7 @@ var inflateRect = (r, m) => m === 0 ? r : {
|
|
|
131
131
|
* @description = `inflateRect(layout.rect, layout.margin)`,中心不变、四向各 +margin。border 类
|
|
132
132
|
* anchor(compass / 数字角度)解析与 bbox / viewBox / 布局占位都基于这层;视觉 emit / 裁剪 /
|
|
133
133
|
* 形状专属 anchor / edgePoint / label 附着点仍读 `layout.rect`(不外扩)。单一派生量,不另存字段。
|
|
134
|
-
*
|
|
134
|
+
* (对齐 TikZ outer sep 语义。)
|
|
135
135
|
*/
|
|
136
136
|
var outerRectOf = (layout) => inflateRect(layout.rect, layout.margin);
|
|
137
137
|
/**
|
|
@@ -148,15 +148,23 @@ var boundaryPointOf = (layout, toward, boundary = "shape") => {
|
|
|
148
148
|
* @description 纯几何:在传入的 `layout.rect` 上求点,本体**不施加 outerSep(margin)**。outerSep 的
|
|
149
149
|
* 「border 外推」由调用方决定——`anchor-cache.ts` 的 compass 解析先把 rect 外扩 margin(`outerRectOf`)
|
|
150
150
|
* 再调本函数;`labelBorderPoint` 喂视觉 rect(label 附着点不含 margin)。这样 outer sep 只作用于
|
|
151
|
-
* path / position 的 anchor 引用,不波及 label
|
|
152
|
-
* compass(9 个 rect
|
|
151
|
+
* path / position 的 anchor 引用,不波及 label。
|
|
152
|
+
* compass(9 个 rect 方位名):默认连接面先走视觉 shape 自身 compass(ellipse/circle 落真实周长、polygon/rect 落 AABB,与 TikZ 一致),shape 未实现则回退 AABB 矩形;显式 boundary 按其解析。
|
|
153
153
|
* 形状专属命名 anchor(tip-N / apex 等非 compass 名)恒走视觉形状自身,boundary 不影响。
|
|
154
154
|
* boundary 缺省 = 'shape'。
|
|
155
155
|
*/
|
|
156
156
|
var anchorOf = (layout, name, boundary = "shape") => {
|
|
157
157
|
const compassAnchor = normalizeCompassAnchor(name);
|
|
158
158
|
if (compassAnchor !== void 0) {
|
|
159
|
-
|
|
159
|
+
if (boundary === "shape") {
|
|
160
|
+
const own = layout.shapeDef.anchor(layout.rect, compassAnchor, layout.shapeParams ?? EMPTY_SHAPE_PARAMS);
|
|
161
|
+
if (own !== void 0) return own;
|
|
162
|
+
const fallback = resolveBoundary("rectangle", layout.shapeDef, layout.rect, layout.shapeParams ?? EMPTY_SHAPE_PARAMS, layout.shapes);
|
|
163
|
+
const p = fallback.def.anchor(fallback.rect, compassAnchor, fallback.params);
|
|
164
|
+
if (p === void 0) throw new Error(`Unknown anchor '${name}' for shape '${layout.shapeName}'`);
|
|
165
|
+
return p;
|
|
166
|
+
}
|
|
167
|
+
const { def, rect, params } = resolveBoundary(boundary, layout.shapeDef, layout.rect, layout.shapeParams ?? EMPTY_SHAPE_PARAMS, layout.shapes);
|
|
160
168
|
const p = def.anchor(rect, compassAnchor, params);
|
|
161
169
|
if (p === void 0) throw new Error(`Unknown anchor '${name}' for shape '${layout.shapeName}'`);
|
|
162
170
|
return p;
|
|
@@ -308,11 +316,13 @@ var layoutNode = (node, measureText, nameStack, nodeDistance, scopeChain = [], l
|
|
|
308
316
|
}
|
|
309
317
|
textHeight = lines.length * lineHeight;
|
|
310
318
|
}
|
|
311
|
-
const
|
|
312
|
-
const
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
const
|
|
319
|
+
const innerHalfW = Math.max(textWidth / 2 + xSep, xSep);
|
|
320
|
+
const innerHalfH = Math.max(textHeight / 2 + ySep, ySep);
|
|
321
|
+
const circumscribed = shapeDef.circumscribe(innerHalfW, innerHalfH, shapeParams);
|
|
322
|
+
const minHalfW = (node.minimumWidth ?? node.minimumSize ?? 0) * sx / 2;
|
|
323
|
+
const minHalfH = (node.minimumHeight ?? node.minimumSize ?? 0) * sy / 2;
|
|
324
|
+
const boundsHalfW = Math.max(circumscribed.halfWidth, minHalfW);
|
|
325
|
+
const boundsHalfH = Math.max(circumscribed.halfHeight, minHalfH);
|
|
316
326
|
const rotateDeg = node.rotate ?? 0;
|
|
317
327
|
const center = resolvePosition(node.position, nameStack, nodeDistance, scopeChain, resolveBetweenGlobal);
|
|
318
328
|
if (!center) throw new Error(`Cannot resolve position for node ${node.id ?? "(unnamed)"}; polar.origin / at.of / between endpoint may reference an undefined node`);
|
|
@@ -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;
|
|
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;AAa9C,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAMV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,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;AAyGzG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,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;AAkGF;;;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,IAkyBrE,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { BUILTIN_ARROWS } from "../../arrows/index.js";
|
|
|
5
5
|
import { CompileWarningCode } from "../constant.js";
|
|
6
6
|
import { applyTransformChain } from "../scope.js";
|
|
7
7
|
import { bendControlPoints, outInControlPoints } from "../../geometry/bend.js";
|
|
8
|
-
import { arcSegmentSample, circleSegmentSample, cubicSegmentSample, ellipseArcSegmentSample, ellipseSegmentSample, foldSegmentSample, lineSegmentSample, quadSegmentSample } from "../../geometry/segment.js";
|
|
8
|
+
import { arcSegmentSample, circleSegmentSample, cubicSegmentSample, ellipseArcSegmentSample, ellipseSegmentSample, foldSegmentSample, lineSegmentSample, quadSegmentSample, rectPerimeterSample } from "../../geometry/segment.js";
|
|
9
9
|
import { fallbackMeasurer } from "../text-metrics.js";
|
|
10
10
|
import { clipForTarget, cornerOf, isAutoBoundaryTarget, refPointOfTarget, samePoint } from "./anchor.js";
|
|
11
11
|
import { emitLabelPrimitive, tForLabelPosition } from "./label.js";
|
|
@@ -14,14 +14,23 @@ import { applyArrowShrinks, endpointArrows, resolveMarkArrowSpec } from "./shrin
|
|
|
14
14
|
import { splitSubPathsForEndpointArrows } from "./split.js";
|
|
15
15
|
//#region src/compile/path/index.ts
|
|
16
16
|
/**
|
|
17
|
+
* referent(offset.of / polar.origin 的并集形态:节点 id 字符串 / `[x, y]` 字面量 / 嵌套 PolarPosition)里挖节点 id
|
|
18
|
+
* @description 裸字符串即节点 id(offset.of / polar.origin 的 string 分支语义);其余交回 nodeRefId 递归。
|
|
19
|
+
*/
|
|
20
|
+
var referentNodeId = (ref) => typeof ref === "string" ? ref : nodeRefId(ref);
|
|
21
|
+
/**
|
|
17
22
|
* 目标里的一个代表性节点 id——给 UNRESOLVED_NODE_REFERENCE 诊断用
|
|
18
23
|
* @description 对象 NodeTarget(`{ id, ... }`)直接取 id;between 比例点递归挖端点里第一个节点引用
|
|
19
|
-
* (端点未解析时整 between 失败,需照样报 unresolved
|
|
24
|
+
* (端点未解析时整 between 失败,需照样报 unresolved 而非静默);OffsetPosition(`{ of }`)/ PolarPosition
|
|
25
|
+
* (`{ origin }`)递归挖其 referent——否则引用未定义节点时 refPoint 为 null 但 toId 为 undefined,整条 path
|
|
26
|
+
* 会被静默丢弃(零诊断);直接坐标 / 极坐标无 origin 等形态返回 undefined。
|
|
20
27
|
*/
|
|
21
28
|
var nodeRefId = (t) => {
|
|
22
29
|
if (typeof t !== "object" || Array.isArray(t)) return void 0;
|
|
23
30
|
if ("id" in t) return t.id;
|
|
24
31
|
if ("between" in t) return nodeRefId(t.between[0]) ?? nodeRefId(t.between[1]);
|
|
32
|
+
if ("of" in t) return referentNodeId(t.of);
|
|
33
|
+
if ("origin" in t) return referentNodeId(t.origin);
|
|
25
34
|
};
|
|
26
35
|
/** 有限数 */
|
|
27
36
|
var isFiniteNum = (n) => typeof n === "number" && Number.isFinite(n);
|
|
@@ -130,13 +139,32 @@ var buildPathTransforms = (rotate, scale, center, round) => {
|
|
|
130
139
|
* 把已物化的 arrow marker(局部 baseSize 坐标系,尖端 +x)按路径切线定向放到采样点
|
|
131
140
|
* @description marker 局部系:viewBox `0 0 baseSize baseSize`,参考点 (refX, baseSize/2),尖端朝 +x。
|
|
132
141
|
* GroupPrim transforms 数组语义 array[0] 最外层(最后 apply),故链 = translate(point) ∘ rotate(tangentDeg)
|
|
133
|
-
* ∘ scale(markerWidth/baseSize, markerHeight/baseSize) ∘ translate(-refX, -baseSize/2)
|
|
134
|
-
*
|
|
142
|
+
* ∘ scale(markerWidth·strokeWidth/baseSize, markerHeight·strokeWidth/baseSize) ∘ translate(-refX, -baseSize/2):
|
|
143
|
+
* 先把参考点移到原点、缩放到目标尺寸、绕切线角旋转、平移到采样点。缩放含 strokeWidth 因子,与端点箭头
|
|
144
|
+
* (SVG markerUnits=strokeWidth / Canvas 同口径 ×strokeWidth)一致——中段 mark 随线宽缩放(TikZ 语义)。
|
|
145
|
+
*
|
|
146
|
+
* marker 几何拍平进 Scene 作 children:marker 窄子集结构上是 ScenePrimitive 子集,唯一差异是 fill/stroke 可为
|
|
147
|
+
* `{ kind: 'contextStroke' }`。端点箭头物化成真正的 `<marker>` 时 contextStroke 由 renderer 继承引用方描边;
|
|
148
|
+
* 但中段 mark 是独立 Scene group,已无引用上下文可继承,故在此把 contextStroke 解析成 path 的实际描边色
|
|
149
|
+
* (contextStroke 字符串单位 = path 的已解析 stroke)。
|
|
135
150
|
*/
|
|
136
|
-
var
|
|
151
|
+
var resolveMarkerContextFill = (value, contextStroke) => typeof value === "string" ? value : contextStroke;
|
|
152
|
+
/** marker 图元 → Scene 图元:结构同构,仅把 fill/stroke 的 contextStroke 解析成具体描边色(递归 group) */
|
|
153
|
+
var markerPrimToScene = (prim, contextStroke) => {
|
|
154
|
+
if (prim.type === "group") return {
|
|
155
|
+
...prim,
|
|
156
|
+
children: prim.children.map((c) => markerPrimToScene(c, contextStroke))
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
...prim,
|
|
160
|
+
...prim.fill !== void 0 && { fill: resolveMarkerContextFill(prim.fill, contextStroke) },
|
|
161
|
+
...prim.stroke !== void 0 && { stroke: resolveMarkerContextFill(prim.stroke, contextStroke) }
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
var buildMarkMarkerGroup = (spec, sample, strokeWidth, round, contextStroke) => {
|
|
137
165
|
const angleDeg = Math.atan2(sample.tangent[1], sample.tangent[0]) * 180 / Math.PI;
|
|
138
|
-
const sx = spec.markerWidth / spec.baseSize;
|
|
139
|
-
const sy = spec.markerHeight / spec.baseSize;
|
|
166
|
+
const sx = spec.markerWidth * strokeWidth / spec.baseSize;
|
|
167
|
+
const sy = spec.markerHeight * strokeWidth / spec.baseSize;
|
|
140
168
|
const refY = spec.baseSize / 2;
|
|
141
169
|
return {
|
|
142
170
|
type: "group",
|
|
@@ -161,7 +189,7 @@ var buildMarkMarkerGroup = (spec, sample, round) => {
|
|
|
161
189
|
y: round(-refY)
|
|
162
190
|
}
|
|
163
191
|
],
|
|
164
|
-
children:
|
|
192
|
+
children: spec.marker.map((p) => markerPrimToScene(p, contextStroke))
|
|
165
193
|
};
|
|
166
194
|
};
|
|
167
195
|
/**
|
|
@@ -344,7 +372,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
344
372
|
const resolvePartialClosed = (closed, idx) => {
|
|
345
373
|
if (closed === "open") return "open";
|
|
346
374
|
if (closed === "sector") return "sector";
|
|
347
|
-
if (closed === "closed") warn(
|
|
375
|
+
if (closed === "closed") warn(CompileWarningCode.PartialArcClosedInvalid, "Partial circle/ellipse (with angles) cannot use closed:'closed'; falling back to 'chord'", `children[${idx}]`);
|
|
348
376
|
return "chord";
|
|
349
377
|
};
|
|
350
378
|
for (let i = 0; i < steps.length; i++) {
|
|
@@ -435,6 +463,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
435
463
|
const fromClip = usedOverride ?? (prev ? clipForTarget(prev.step.to, moveAnchor, nameStack, scopeChain) : null);
|
|
436
464
|
const toClip = clipForTarget(moveTo, fromClip ?? prev?.anchor ?? moveAnchor, nameStack, scopeChain);
|
|
437
465
|
if (!fromClip || !toClip) return null;
|
|
466
|
+
segmentSamplers.push((t) => lineSegmentSample(fromClip, toClip, t));
|
|
438
467
|
if (samePoint(fromClip, lastEnd) && samePoint(toClip, subPathStart)) {
|
|
439
468
|
emitClose();
|
|
440
469
|
continue;
|
|
@@ -465,6 +494,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
465
494
|
const ry0 = Math.min(fromPt[1], toPt[1]);
|
|
466
495
|
const ry1 = Math.max(fromPt[1], toPt[1]);
|
|
467
496
|
points.push([rx0, ry0], [rx1, ry0], [rx1, ry1], [rx0, ry1]);
|
|
497
|
+
segmentSamplers.push((t) => rectPerimeterSample(fromPt, toPt, t));
|
|
468
498
|
if (rectStart) penOverride = rectStart;
|
|
469
499
|
continue;
|
|
470
500
|
}
|
|
@@ -646,7 +676,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
646
676
|
const localT = scaled - segIdx;
|
|
647
677
|
const sample = segmentSamplers[segIdx](pos === 1 ? 1 : localT);
|
|
648
678
|
const spec = resolveMarkArrowSpec(mark, effectiveArrows, round);
|
|
649
|
-
markPrims.push(buildMarkMarkerGroup(spec, sample, round));
|
|
679
|
+
markPrims.push(buildMarkMarkerGroup(spec, sample, strokeWidth, round, baseProps.stroke ?? "currentColor"));
|
|
650
680
|
points.push(sample.point);
|
|
651
681
|
}
|
|
652
682
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmBpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,WAAW,CAAC,UAAU,CAAC,KAAG,MAIhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,WAAW,EAClB,QAAQ,aAAa,EACrB,aAAa,YAAY,EACzB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAc,MAAM,KACnB;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAmBpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,WAAW,CAAC,UAAU,CAAC,KAAG,MAIhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,WAAW,EAClB,QAAQ,aAAa,EACrB,aAAa,YAAY,EACzB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAc,MAAM,KACnB;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAyGxD,CAAC"}
|
|
@@ -103,13 +103,17 @@ var emitLabelPrimitive = (label, sample, measureText, round, hostOpacity) => {
|
|
|
103
103
|
}
|
|
104
104
|
const halfW = measuredWidth / 2;
|
|
105
105
|
const halfH = measuredHeight / 2;
|
|
106
|
+
const left = align === "start" ? x : align === "end" ? x - measuredWidth : x - halfW;
|
|
107
|
+
const right = align === "start" ? x + measuredWidth : align === "end" ? x : x + halfW;
|
|
108
|
+
const top = baseline === "top" ? y : baseline === "bottom" ? y - measuredHeight : y - halfH;
|
|
109
|
+
const bottom = baseline === "top" ? y + measuredHeight : baseline === "bottom" ? y : y + halfH;
|
|
106
110
|
return {
|
|
107
111
|
primitive: text,
|
|
108
112
|
points: [
|
|
109
|
-
[
|
|
110
|
-
[
|
|
111
|
-
[
|
|
112
|
-
[
|
|
113
|
+
[left, top],
|
|
114
|
+
[right, top],
|
|
115
|
+
[left, bottom],
|
|
116
|
+
[right, bottom]
|
|
113
117
|
]
|
|
114
118
|
};
|
|
115
119
|
};
|
|
@@ -10,7 +10,7 @@ import { ResolveBetweenGlobal } from './position';
|
|
|
10
10
|
* 各自构造对应 Position 字面量并调用 `resolvePosition` 拿到 Cartesian (x, y),再写成 Cartesian translate;
|
|
11
11
|
* rotate / scale 直接透传。referent 未解析时返回 null(上游负责发 warn / throw)
|
|
12
12
|
*/
|
|
13
|
-
export declare const lowerScopeTransforms: (transforms: ReadonlyArray<IRTransform>, nameStack: NameStack, nodeDistance?: number, resolveBetweenGlobal?: ResolveBetweenGlobal) => Array<Transform> | null;
|
|
13
|
+
export declare const lowerScopeTransforms: (transforms: ReadonlyArray<IRTransform>, nameStack: NameStack, nodeDistance?: number, resolveBetweenGlobal?: ResolveBetweenGlobal, onUnresolved?: (failed: IRTransform) => void) => Array<Transform> | null;
|
|
14
14
|
/**
|
|
15
15
|
* 把局部坐标点 (x, y) 按 Cartesian-only transform 链 apply 到全局坐标
|
|
16
16
|
* @description 数组语义与 SVG `transform="t0 t1 t2"` / TikZ scope option 顺序一致:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,KAAK,oBAAoB,EAAmB,MAAM,YAAY,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,EACrB,uBAAuB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,KAAK,oBAAoB,EAAmB,MAAM,YAAY,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,EACrB,uBAAuB,oBAAoB,EAC3C,eAAe,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,KAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,IAoErB,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,UA+BF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UA4BF,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,IA6BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,EAC1B,SAAQ,MAAM,CAAC,MAAM,EAAE,eAAe,CAAkB,KACvD,UAiBF,CAAC"}
|
package/dist/es/compile/scope.js
CHANGED
|
@@ -9,7 +9,7 @@ import { outerRectOf } from "./node.js";
|
|
|
9
9
|
* 各自构造对应 Position 字面量并调用 `resolvePosition` 拿到 Cartesian (x, y),再写成 Cartesian translate;
|
|
10
10
|
* rotate / scale 直接透传。referent 未解析时返回 null(上游负责发 warn / throw)
|
|
11
11
|
*/
|
|
12
|
-
var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenGlobal) => {
|
|
12
|
+
var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenGlobal, onUnresolved) => {
|
|
13
13
|
const out = [];
|
|
14
14
|
for (const t of transforms) switch (t.kind) {
|
|
15
15
|
case "translate":
|
|
@@ -26,7 +26,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenG
|
|
|
26
26
|
};
|
|
27
27
|
if (t.origin !== void 0) polar.origin = t.origin;
|
|
28
28
|
const resolved = resolvePosition(polar, nameStack, nodeDistance);
|
|
29
|
-
if (!resolved)
|
|
29
|
+
if (!resolved) {
|
|
30
|
+
onUnresolved?.(t);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
30
33
|
out.push({
|
|
31
34
|
kind: "translate",
|
|
32
35
|
x: resolved[0],
|
|
@@ -41,7 +44,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenG
|
|
|
41
44
|
};
|
|
42
45
|
if (t.distance !== void 0) at.distance = t.distance;
|
|
43
46
|
const resolved = resolvePosition(at, nameStack, nodeDistance);
|
|
44
|
-
if (!resolved)
|
|
47
|
+
if (!resolved) {
|
|
48
|
+
onUnresolved?.(t);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
45
51
|
out.push({
|
|
46
52
|
kind: "translate",
|
|
47
53
|
x: resolved[0],
|
|
@@ -54,7 +60,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenG
|
|
|
54
60
|
of: t.of,
|
|
55
61
|
offset: t.offset ?? [0, 0]
|
|
56
62
|
}, nameStack, nodeDistance);
|
|
57
|
-
if (!resolved)
|
|
63
|
+
if (!resolved) {
|
|
64
|
+
onUnresolved?.(t);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
58
67
|
out.push({
|
|
59
68
|
kind: "translate",
|
|
60
69
|
x: resolved[0],
|
|
@@ -67,7 +76,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenG
|
|
|
67
76
|
between: t.between,
|
|
68
77
|
t: t.t
|
|
69
78
|
}, nameStack, nodeDistance, [], resolveBetweenGlobal);
|
|
70
|
-
if (!resolved)
|
|
79
|
+
if (!resolved) {
|
|
80
|
+
onUnresolved?.(t);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
71
83
|
out.push({
|
|
72
84
|
kind: "translate",
|
|
73
85
|
x: resolved[0],
|
|
@@ -27,7 +27,7 @@ export type TextMetrics = {
|
|
|
27
27
|
export type TextMeasurer = (text: string, font: FontSpec) => TextMetrics;
|
|
28
28
|
/**
|
|
29
29
|
* 默认 fallback 度量:基于平均字宽估算,不准但保证可运行
|
|
30
|
-
* @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size
|
|
30
|
+
* @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size 或非有限(NaN / Infinity)size → throw(非法输入早 fail,避免 NaN / Infinity 传播到 Scene)
|
|
31
31
|
*/
|
|
32
32
|
export declare const fallbackMeasurer: TextMeasurer;
|
|
33
33
|
//# sourceMappingURL=text-metrics.d.ts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
//#region src/compile/text-metrics.ts
|
|
2
2
|
/**
|
|
3
3
|
* 默认 fallback 度量:基于平均字宽估算,不准但保证可运行
|
|
4
|
-
* @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size
|
|
4
|
+
* @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size 或非有限(NaN / Infinity)size → throw(非法输入早 fail,避免 NaN / Infinity 传播到 Scene)
|
|
5
5
|
*/
|
|
6
6
|
var fallbackMeasurer = (text, font) => {
|
|
7
|
-
if (Number.
|
|
7
|
+
if (!Number.isFinite(font.size) || font.size < 0) throw new Error(`fallbackMeasurer: invalid font.size '${font.size}'; must be a non-negative finite number`);
|
|
8
8
|
return {
|
|
9
9
|
width: text.length * font.size * .55,
|
|
10
10
|
height: font.size * 1.2
|
package/dist/es/geometry/bend.js
CHANGED
|
@@ -18,7 +18,7 @@ var bendControlPoints = (from, to, direction, bendAngle) => {
|
|
|
18
18
|
var DEFAULT_LOOSENESS = 1;
|
|
19
19
|
/** self-loop(from==to)默认环大小(user units,受 looseness 缩放) */
|
|
20
20
|
var DEFAULT_LOOP_SIZE = 1;
|
|
21
|
-
/** 直边 cubic 控制点距离系数(chord
|
|
21
|
+
/** 直边 cubic 控制点距离系数(chord 的几分之一);retikz 取 1/3,TikZ 默认 looseness 对应 ≈0.3915,本库简化为 1/3 */
|
|
22
22
|
var OUTIN_DISTANCE_FACTOR = 1 / 3;
|
|
23
23
|
/** 角度(度)转单位方向向量(0°=+x,90°=+y screen-down,与 IR 角度约定一致) */
|
|
24
24
|
var dirOf = (angleDeg) => {
|
|
@@ -77,6 +77,11 @@ export declare const filletContour: (segments: Array<ContourSegment>, cornerRadi
|
|
|
77
77
|
* 夹紧到 0 的角不插弧、按原尖角连接。
|
|
78
78
|
*/
|
|
79
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)。
|
|
@@ -1 +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;
|
|
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"}
|
|
@@ -32,7 +32,7 @@ var fractionAlong = (seg, p, fromStart) => {
|
|
|
32
32
|
const ex = seg.to[0] - seg.from[0];
|
|
33
33
|
const ey = seg.to[1] - seg.from[1];
|
|
34
34
|
const len2 = ex * ex + ey * ey;
|
|
35
|
-
if (len2 < EPSILON) return 0;
|
|
35
|
+
if (len2 < EPSILON * EPSILON) return 0;
|
|
36
36
|
const t = ((p[0] - seg.from[0]) * ex + (p[1] - seg.from[1]) * ey) / len2;
|
|
37
37
|
return fromStart ? t : 1 - t;
|
|
38
38
|
}
|
|
@@ -155,9 +155,10 @@ var solveFillet = (segA, segB, r) => {
|
|
|
155
155
|
const tInPt = tangentPointOn(segA, cand, radius);
|
|
156
156
|
const tOutPt = tangentPointOn(segB, cand, radius);
|
|
157
157
|
if (!tInPt || !tOutPt) continue;
|
|
158
|
+
const tol = 1e-6 * Math.max(1, radius, Math.abs(corner[0]), Math.abs(corner[1]));
|
|
158
159
|
const dA = distanceToAny(segA, cand);
|
|
159
160
|
const dB = distanceToAny(segB, cand);
|
|
160
|
-
if (Math.abs(dA - radius) >
|
|
161
|
+
if (Math.abs(dA - radius) > tol || Math.abs(dB - radius) > tol) continue;
|
|
161
162
|
const inFrac = fractionAlong(segA, tInPt, false);
|
|
162
163
|
const outFrac = fractionAlong(segB, tOutPt, true);
|
|
163
164
|
if (inFrac < -1e-7 || inFrac > .5000001 || outFrac < -1e-7 || outFrac > .5000001) continue;
|
|
@@ -252,7 +253,8 @@ var tangentPointOn = (seg, filletCenter, radius) => {
|
|
|
252
253
|
best = cand;
|
|
253
254
|
}
|
|
254
255
|
}
|
|
255
|
-
|
|
256
|
+
const tol = 1e-6 * Math.max(1, radius, Math.abs(filletCenter[0]), Math.abs(filletCenter[1]));
|
|
257
|
+
return bestErr <= tol ? best : void 0;
|
|
256
258
|
};
|
|
257
259
|
/**
|
|
258
260
|
* 对闭合轮廓的每个接缝做 fillet,返回 fillet 解算列表(与接缝一一对应,下标 i = 段 i 终点接段 (i+1)%n 起点)
|
|
@@ -12,7 +12,13 @@ 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;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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"}
|
|
@@ -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];
|