@retikz/core 0.2.0-alpha.5 → 0.2.0-alpha.6
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/compile/anchor-cache.d.ts +10 -0
- package/dist/es/compile/anchor-cache.d.ts.map +1 -1
- package/dist/es/compile/anchor-cache.js +25 -1
- package/dist/es/compile/index.d.ts +0 -1
- package/dist/es/compile/index.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.js +17 -18
- package/dist/es/compile/path/index.d.ts.map +1 -1
- package/dist/es/compile/path/index.js +10 -4
- package/dist/es/geometry/_edge.d.ts +29 -0
- package/dist/es/geometry/_edge.d.ts.map +1 -0
- package/dist/es/geometry/_edge.js +35 -0
- package/dist/es/geometry/circle.d.ts +3 -0
- package/dist/es/geometry/circle.d.ts.map +1 -1
- package/dist/es/geometry/circle.js +7 -0
- package/dist/es/geometry/diamond.d.ts +3 -0
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +29 -0
- package/dist/es/geometry/ellipse.d.ts +3 -0
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +7 -0
- package/dist/es/geometry/rect.d.ts +3 -0
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +6 -0
- package/dist/es/index.d.ts +3 -3
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +5 -4
- package/dist/es/ir/coordinate.d.ts +2 -2
- package/dist/es/ir/node.d.ts +2 -2
- package/dist/es/ir/path/path.d.ts +662 -167
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/step.d.ts +930 -192
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/target.d.ts +71 -1
- package/dist/es/ir/path/target.d.ts.map +1 -1
- package/dist/es/ir/path/target.js +24 -3
- package/dist/es/ir/scope.d.ts +932 -194
- package/dist/es/ir/scope.d.ts.map +1 -1
- package/dist/es/parsers/index.d.ts +1 -0
- package/dist/es/parsers/index.d.ts.map +1 -1
- package/dist/es/parsers/parseNodeTarget.d.ts +4 -0
- package/dist/es/parsers/parseNodeTarget.d.ts.map +1 -0
- package/dist/es/parsers/parseNodeTarget.js +33 -0
- package/dist/es/parsers/parseTargetSugar.d.ts +4 -2
- package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/es/parsers/parseTargetSugar.js +6 -3
- package/dist/es/parsers/parseWay.d.ts +1 -1
- package/dist/es/parsers/parseWay.d.ts.map +1 -1
- package/dist/es/shapes/circle.d.ts.map +1 -1
- package/dist/es/shapes/circle.js +1 -0
- package/dist/es/shapes/diamond.d.ts.map +1 -1
- package/dist/es/shapes/diamond.js +1 -0
- package/dist/es/shapes/ellipse.d.ts.map +1 -1
- package/dist/es/shapes/ellipse.js +1 -0
- package/dist/es/shapes/rectangle.d.ts.map +1 -1
- package/dist/es/shapes/rectangle.js +1 -0
- package/dist/es/shapes/types.d.ts +6 -0
- package/dist/es/shapes/types.d.ts.map +1 -1
- package/dist/lib/compile/anchor-cache.cjs +25 -0
- package/dist/lib/compile/anchor-cache.d.ts +10 -0
- package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
- package/dist/lib/compile/index.d.ts +0 -1
- package/dist/lib/compile/index.d.ts.map +1 -1
- package/dist/lib/compile/path/anchor.cjs +16 -17
- package/dist/lib/compile/path/anchor.d.ts.map +1 -1
- package/dist/lib/compile/path/index.cjs +10 -4
- package/dist/lib/compile/path/index.d.ts.map +1 -1
- package/dist/lib/geometry/_edge.cjs +38 -0
- package/dist/lib/geometry/_edge.d.ts +29 -0
- package/dist/lib/geometry/_edge.d.ts.map +1 -0
- package/dist/lib/geometry/circle.cjs +7 -0
- package/dist/lib/geometry/circle.d.ts +3 -0
- package/dist/lib/geometry/circle.d.ts.map +1 -1
- package/dist/lib/geometry/diamond.cjs +29 -0
- package/dist/lib/geometry/diamond.d.ts +3 -0
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/ellipse.cjs +7 -0
- package/dist/lib/geometry/ellipse.d.ts +3 -0
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +6 -0
- package/dist/lib/geometry/rect.d.ts +3 -0
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/index.cjs +6 -2
- package/dist/lib/index.d.ts +3 -3
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/coordinate.d.ts +2 -2
- package/dist/lib/ir/node.d.ts +2 -2
- package/dist/lib/ir/path/path.d.ts +662 -167
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.d.ts +930 -192
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/path/target.cjs +25 -2
- package/dist/lib/ir/path/target.d.ts +71 -1
- package/dist/lib/ir/path/target.d.ts.map +1 -1
- package/dist/lib/ir/scope.d.ts +932 -194
- package/dist/lib/ir/scope.d.ts.map +1 -1
- package/dist/lib/parsers/index.d.ts +1 -0
- package/dist/lib/parsers/index.d.ts.map +1 -1
- package/dist/lib/parsers/parseNodeTarget.cjs +33 -0
- package/dist/lib/parsers/parseNodeTarget.d.ts +4 -0
- package/dist/lib/parsers/parseNodeTarget.d.ts.map +1 -0
- package/dist/lib/parsers/parseTargetSugar.cjs +6 -3
- package/dist/lib/parsers/parseTargetSugar.d.ts +4 -2
- package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/lib/parsers/parseWay.d.ts +1 -1
- package/dist/lib/parsers/parseWay.d.ts.map +1 -1
- package/dist/lib/shapes/circle.cjs +1 -0
- package/dist/lib/shapes/circle.d.ts.map +1 -1
- package/dist/lib/shapes/diamond.cjs +1 -0
- package/dist/lib/shapes/diamond.d.ts.map +1 -1
- package/dist/lib/shapes/ellipse.cjs +1 -0
- package/dist/lib/shapes/ellipse.d.ts.map +1 -1
- package/dist/lib/shapes/rectangle.cjs +1 -0
- package/dist/lib/shapes/rectangle.d.ts.map +1 -1
- package/dist/lib/shapes/types.d.ts +6 -0
- package/dist/lib/shapes/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/es/compile/parseTarget.d.ts +0 -20
- package/dist/es/compile/parseTarget.d.ts.map +0 -1
- package/dist/es/compile/parseTarget.js +0 -36
- package/dist/lib/compile/parseTarget.cjs +0 -36
- package/dist/lib/compile/parseTarget.d.ts +0 -20
- package/dist/lib/compile/parseTarget.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/ir/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,aAAa,CAAC;AAOhE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/ir/scope.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2GrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseNodeTarget.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseNodeTarget.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAQ1C,0CAA0C;AAC1C,eAAO,MAAM,eAAe,GAAI,GAAG,MAAM,KAAG,YAmB3C,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RECT_ANCHORS } from "../geometry/rect.js";
|
|
2
|
+
//#region src/parsers/parseNodeTarget.ts
|
|
3
|
+
/**
|
|
4
|
+
* 节点 ref 字符串 shorthand → NodeTarget 对象(单一真源)
|
|
5
|
+
* @description React DSL / Draw way 层把 `'A'` / `'A.north'` / `'A.30'` 解析成对象 IR,core ir/compile 只见对象。
|
|
6
|
+
* `'A'`→`{id:'A'}`;`'A.<name>'`→命名 anchor(center/north/.../south-west);`'A.<deg>'`→角度 anchor。
|
|
7
|
+
* 按**第一个点**切分——含 `.` 的 id 不能用 shorthand,必须写对象 `{ id: 'a.b', anchor: 'north' }`。
|
|
8
|
+
* {side,t} 边上比例点是结构化新能力、shorthand 不表达(仅对象形态)。
|
|
9
|
+
* 不命中 anchor 名抛错(避免静默吞拼写错误)。放 parser 层(非 compile)避免 adapter 反向依赖 compile。
|
|
10
|
+
*/
|
|
11
|
+
/** RECT_ANCHORS 的 9 个 anchor 名 */
|
|
12
|
+
var ANCHOR_NAMES = new Set(Object.values(RECT_ANCHORS));
|
|
13
|
+
/** 纯数字识别 `A.30` / `A.-45` / `A.180.5` */
|
|
14
|
+
var ANGLE_RE = /^-?\d+(\.\d+)?$/;
|
|
15
|
+
/** 字符串节点 ref shorthand → NodeTarget 对象 */
|
|
16
|
+
var parseNodeTarget = (s) => {
|
|
17
|
+
const dot = s.indexOf(".");
|
|
18
|
+
const id = dot < 0 ? s : s.slice(0, dot);
|
|
19
|
+
if (id.length === 0) throw new Error(`parseNodeTarget: empty node id in '${s}'`);
|
|
20
|
+
if (dot < 0) return { id };
|
|
21
|
+
const tail = s.slice(dot + 1);
|
|
22
|
+
if (ANGLE_RE.test(tail)) return {
|
|
23
|
+
id,
|
|
24
|
+
anchor: Number(tail)
|
|
25
|
+
};
|
|
26
|
+
if (!ANCHOR_NAMES.has(tail)) throw new Error(`parseNodeTarget: unknown anchor '${tail}' in '${s}' (supports: ${[...ANCHOR_NAMES].join(", ")}); for ids containing '.', use the object form { id, anchor }`);
|
|
27
|
+
return {
|
|
28
|
+
id,
|
|
29
|
+
anchor: tail
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { parseNodeTarget };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { IRTarget } from '../ir';
|
|
2
2
|
/**
|
|
3
|
-
* Sugar 字符串解析:TikZ
|
|
4
|
-
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ
|
|
3
|
+
* Sugar 字符串解析:TikZ 风格字符串 shorthand → IR 对象(React DSL 层;core IR 只见对象)
|
|
4
|
+
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);
|
|
5
|
+
* 其余字符串作节点 ref 经 `parseNodeTarget` 转 `{ id, anchor? }`(`'A'` / `'A.north'` / `'A.30'`);非字符串(笛卡尔 / 极坐标 / 已是对象)原样返回。
|
|
6
|
+
* 纯函数无 nodeIndex 依赖,react adapter 与 Draw DSL 共用。core schema 已无字符串 target 分支——eager 解析后才入 IR。
|
|
5
7
|
*/
|
|
6
8
|
export declare const parseTargetSugar: (input: unknown) => IRTarget;
|
|
7
9
|
//# sourceMappingURL=parseTargetSugar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseTargetSugar.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseTargetSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"parseTargetSugar.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseTargetSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMtC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,QAWjD,CAAC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { parseNodeTarget } from "./parseNodeTarget.js";
|
|
1
2
|
//#region src/parsers/parseTargetSugar.ts
|
|
2
3
|
/** TikZ 风格相对偏移字面量正则:捕获 `+` / `++` 前缀 + dx / dy 数值 */
|
|
3
4
|
var RELATIVE_OFFSET_RE = /^(\+{1,2})\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)$/;
|
|
4
5
|
/**
|
|
5
|
-
* Sugar 字符串解析:TikZ
|
|
6
|
-
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ
|
|
6
|
+
* Sugar 字符串解析:TikZ 风格字符串 shorthand → IR 对象(React DSL 层;core IR 只见对象)
|
|
7
|
+
* @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);
|
|
8
|
+
* 其余字符串作节点 ref 经 `parseNodeTarget` 转 `{ id, anchor? }`(`'A'` / `'A.north'` / `'A.30'`);非字符串(笛卡尔 / 极坐标 / 已是对象)原样返回。
|
|
9
|
+
* 纯函数无 nodeIndex 依赖,react adapter 与 Draw DSL 共用。core schema 已无字符串 target 分支——eager 解析后才入 IR。
|
|
7
10
|
*/
|
|
8
11
|
var parseTargetSugar = (input) => {
|
|
9
12
|
if (typeof input !== "string") return input;
|
|
10
13
|
const match = input.match(RELATIVE_OFFSET_RE);
|
|
11
|
-
if (!match) return input;
|
|
14
|
+
if (!match) return parseNodeTarget(input);
|
|
12
15
|
const plus = match[1];
|
|
13
16
|
const dx = Number(match[2]);
|
|
14
17
|
const dy = Number(match[3]);
|
|
@@ -77,7 +77,7 @@ export type WayLabelOp = {
|
|
|
77
77
|
* Sugar 层 way 数组 DSL 元素(十二种形态)
|
|
78
78
|
* @description 节点 id 字符串/笛卡尔/极坐标 → line(首项 move);`{position,type}` 相对偏移对象 → IR relative/relativeAccumulate;`-|`/`|-` 与下一项合并 fold;DrawWay.Cycle → cycle;curve/cubic/bend infix 与下一项合并;arc/circle/ellipse infix 以上一项为圆心不消耗下一项。Cycle/Relative/Accumulate 底层字符串刻意写丑避节点 id 撞结构
|
|
79
79
|
*/
|
|
80
|
-
export type WayItem = IRTarget | WayRelativeItem | WayVia | WayCycle | WayCurveOp | WayCubicOp | WayBendOp | WayArcOp | WayCircleOp | WayEllipseOp | WayLabelOp;
|
|
80
|
+
export type WayItem = IRTarget | string | WayRelativeItem | WayVia | WayCycle | WayCurveOp | WayCubicOp | WayBendOp | WayArcOp | WayCircleOp | WayEllipseOp | WayLabelOp;
|
|
81
81
|
/** way DSL 数组:sugar `<Draw way={...}>` 输入形态 */
|
|
82
82
|
export type WayDSL = Array<WayItem>;
|
|
83
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseWay.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseWay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,cAAc,EAQd,MAAM,EACN,WAAW,EACX,QAAQ,EACT,MAAM,OAAO,CAAC;AAGf;;;GAGG;AACH,eAAO,MAAM,OAAO;IAClB,oDAAoD;;IAEpD,2BAA2B;;IAE3B,2BAA2B;;IAE3B,gDAAgD;;IAEhD,kDAAkD;;CAE1C,CAAC;AAEX,oBAAoB;AACpB,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,CAAC;AAE3D,qBAAqB;AACrB,MAAM,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC;CAC3D,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAEnD,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;CAAE,CAAC;AAErE,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEzD,iDAAiD;AACjD,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE7E,0DAA0D;AAC1D,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,
|
|
1
|
+
{"version":3,"file":"parseWay.d.ts","sourceRoot":"","sources":["../../../src/parsers/parseWay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,cAAc,EAQd,MAAM,EACN,WAAW,EACX,QAAQ,EACT,MAAM,OAAO,CAAC;AAGf;;;GAGG;AACH,eAAO,MAAM,OAAO;IAClB,oDAAoD;;IAEpD,2BAA2B;;IAE3B,2BAA2B;;IAE3B,gDAAgD;;IAEhD,kDAAkD;;CAE1C,CAAC;AAEX,oBAAoB;AACpB,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,CAAC;AAE3D,qBAAqB;AACrB,MAAM,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC;CAC3D,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAEnD,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;CAAE,CAAC;AAErE,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEzD,iDAAiD;AACjD,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE7E,0DAA0D;AAC1D,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GAER,MAAM,GACN,eAAe,GACf,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,UAAU,CAAC;AAEf,+CAA+C;AAC/C,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AAqEpC;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,KAAK,CAAC,MAAM,CAmKlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/shapes/circle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/shapes/circle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,eAYpB,CAAC"}
|
package/dist/es/shapes/circle.js
CHANGED
|
@@ -27,6 +27,7 @@ var circle = {
|
|
|
27
27
|
const a = asRectAnchor(name);
|
|
28
28
|
return a ? circle$1.anchor(toCircle(r), a) : void 0;
|
|
29
29
|
},
|
|
30
|
+
edgePoint: (r, side, t) => circle$1.edgePoint(toCircle(r), side, t),
|
|
30
31
|
emit: (r, style, round) => ellipse.emit(r, style, round)
|
|
31
32
|
};
|
|
32
33
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/shapes/diamond.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAW/C;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/shapes/diamond.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAW/C;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,eAgCrB,CAAC"}
|
|
@@ -24,6 +24,7 @@ var diamond = {
|
|
|
24
24
|
const a = asRectAnchor(name);
|
|
25
25
|
return a ? diamond$1.anchor(toDiamond(r), a) : void 0;
|
|
26
26
|
},
|
|
27
|
+
edgePoint: (r, side, t) => diamond$1.edgePoint(toDiamond(r), side, t),
|
|
27
28
|
*emit(r, style, round) {
|
|
28
29
|
const d = toDiamond(r);
|
|
29
30
|
const e = diamond$1.anchor(d, "east");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/shapes/ellipse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAW/C;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/shapes/ellipse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAW/C;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,eAwBrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../../src/shapes/rectangle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../../src/shapes/rectangle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,eA2BvB,CAAC"}
|
|
@@ -38,6 +38,12 @@ export type ShapeDefinition = {
|
|
|
38
38
|
boundaryPoint: (rect: Rect, toward: Position) => Position;
|
|
39
39
|
/** 命名 anchor 世界坐标;shape 不认识的名字返回 `undefined`(调用方据此抛清晰错误)。 */
|
|
40
40
|
anchor: (rect: Rect, name: string) => Position | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* 边上比例点:side 真实边界从约定起点起 t∈[0,1] 处(轴对齐空间求出后由 layout 投回世界系)。
|
|
43
|
+
* @description 可选——内置 4 shape 必实现,不实现的 shape 收到 `{ side, t }` 时编译期(resolveEdgePoint)抛明确错。
|
|
44
|
+
* 与 `anchor` 同坐标语义:收**带 rotate 的 Rect**,自行用 worldToLocal/localToWorld 处理旋转。
|
|
45
|
+
*/
|
|
46
|
+
edgePoint?: (rect: Rect, side: 'north' | 'south' | 'east' | 'west', t: number) => Position;
|
|
41
47
|
/** 视觉 primitive,**轴对齐空间**(rotate 由编译器外层 GroupPrim 统一施加)。 */
|
|
42
48
|
emit: (rect: Rect, style: ShapeStyle, round: (n: number) => number) => Iterable<ScenePrimitive>;
|
|
43
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shapes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,YAAY,EAAE,CACZ,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,KACpB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,0CAA0C;IAC1C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC;IAC1D,6DAA6D;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC3D,4DAA4D;IAC5D,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC;CACjG,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shapes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,YAAY,EAAE,CACZ,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,KACpB;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,0CAA0C;IAC1C,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC;IAC1D,6DAA6D;IAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC3D;;;;OAIG;IACH,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EACzC,CAAC,EAAE,MAAM,KACN,QAAQ,CAAC;IACd,4DAA4D;IAC5D,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC;CACjG,CAAC"}
|
|
@@ -37,5 +37,30 @@ var resolveAnchor = (layout, anchorName) => {
|
|
|
37
37
|
layoutCache.set(anchorName, result);
|
|
38
38
|
return result;
|
|
39
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* 取节点边上比例点 `{ side, t }` 的全局坐标,带 per-layout 缓存
|
|
42
|
+
* @description 走 `layout.shapeDef.edgePoint`——shape 未实现(如自定义 shape)抛"does not support side anchors";
|
|
43
|
+
* 零尺寸 layout(Coordinate)抛错(边上比例点对一个点无意义,报错比退化中心更可诊断,见 alpha.6 ADR-01 决策细节 #10)。
|
|
44
|
+
* 缓存 key = `${side}:${t}`,与命名 anchor(`'north'` / `'30'`)共用 layout 的 Map——key 含 `:` 故命名空间不冲突。
|
|
45
|
+
* @param layout 已 Pass 1 完成的 NodeLayout(rect 已是全局坐标)
|
|
46
|
+
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
47
|
+
*/
|
|
48
|
+
var resolveEdgePoint = (layout, side, t) => {
|
|
49
|
+
const { edgePoint } = layout.shapeDef;
|
|
50
|
+
if (!edgePoint) throw new Error(`shape '${layout.shapeName}' does not support side anchors ({ side, t })`);
|
|
51
|
+
if (layout.rect.width === 0 && layout.rect.height === 0) throw new Error(`{ side, t } is not meaningful on a zero-size Coordinate (shape '${layout.shapeName}')`);
|
|
52
|
+
let layoutCache = cache.get(layout);
|
|
53
|
+
if (!layoutCache) {
|
|
54
|
+
layoutCache = /* @__PURE__ */ new Map();
|
|
55
|
+
cache.set(layout, layoutCache);
|
|
56
|
+
}
|
|
57
|
+
const key = `${side}:${t}`;
|
|
58
|
+
const cached = layoutCache.get(key);
|
|
59
|
+
if (cached !== void 0) return cached;
|
|
60
|
+
const result = positionToIR(edgePoint(layout.rect, side, t));
|
|
61
|
+
layoutCache.set(key, result);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
40
64
|
//#endregion
|
|
41
65
|
exports.resolveAnchor = resolveAnchor;
|
|
66
|
+
exports.resolveEdgePoint = resolveEdgePoint;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from '../geometry/_edge';
|
|
1
2
|
import { IRPosition } from '../ir';
|
|
2
3
|
import { NodeLayout } from './node';
|
|
3
4
|
/**
|
|
@@ -9,4 +10,13 @@ import { NodeLayout } from './node';
|
|
|
9
10
|
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
10
11
|
*/
|
|
11
12
|
export declare const resolveAnchor: (layout: NodeLayout, anchorName: string) => IRPosition;
|
|
13
|
+
/**
|
|
14
|
+
* 取节点边上比例点 `{ side, t }` 的全局坐标,带 per-layout 缓存
|
|
15
|
+
* @description 走 `layout.shapeDef.edgePoint`——shape 未实现(如自定义 shape)抛"does not support side anchors";
|
|
16
|
+
* 零尺寸 layout(Coordinate)抛错(边上比例点对一个点无意义,报错比退化中心更可诊断,见 alpha.6 ADR-01 决策细节 #10)。
|
|
17
|
+
* 缓存 key = `${side}:${t}`,与命名 anchor(`'north'` / `'30'`)共用 layout 的 Map——key 含 `:` 故命名空间不冲突。
|
|
18
|
+
* @param layout 已 Pass 1 完成的 NodeLayout(rect 已是全局坐标)
|
|
19
|
+
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
20
|
+
*/
|
|
21
|
+
export declare const resolveEdgePoint: (layout: NodeLayout, side: Side, t: number) => IRPosition;
|
|
12
22
|
//# sourceMappingURL=anchor-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-cache.d.ts","sourceRoot":"","sources":["../../../src/compile/anchor-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"anchor-cache.d.ts","sourceRoot":"","sources":["../../../src/compile/anchor-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AA4BzC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,UAAU,EAClB,YAAY,MAAM,KACjB,UAWF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,UAAU,EAClB,MAAM,IAAI,EACV,GAAG,MAAM,KACR,UAuBF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
@@ -2,8 +2,17 @@ const require_scope = require("../scope.cjs");
|
|
|
2
2
|
const require_position = require("../position.cjs");
|
|
3
3
|
const require_node = require("../node.cjs");
|
|
4
4
|
const require_anchor_cache = require("../anchor-cache.cjs");
|
|
5
|
-
const require_parseTarget = require("../parseTarget.cjs");
|
|
6
5
|
//#region src/compile/path/anchor.ts
|
|
6
|
+
/** target 是否对象形态 NodeTarget(`{ id, anchor?, offset? }`);与 Position(array) / Polar / Offset(of) / Relative 区分(独有 `id`) */
|
|
7
|
+
var isNodeTarget = (t) => typeof t === "object" && !Array.isArray(t) && "id" in t;
|
|
8
|
+
/** 解析 NodeTarget 的 anchor(非 undefined)到世界坐标:命名 / 角度走 resolveAnchor,`{ side, t }` 走 resolveEdgePoint */
|
|
9
|
+
var resolveAnchorRef = (node, anchor) => {
|
|
10
|
+
if (typeof anchor === "number") return require_anchor_cache.resolveAnchor(node, String(anchor));
|
|
11
|
+
if (typeof anchor === "string") return require_anchor_cache.resolveAnchor(node, anchor);
|
|
12
|
+
return require_anchor_cache.resolveEdgePoint(node, anchor.side, anchor.t);
|
|
13
|
+
};
|
|
14
|
+
/** anchor/边点解析后叠加世界系 offset(不随节点 rotate 旋转) */
|
|
15
|
+
var addOffset = (base, offset) => offset ? [base[0] + offset[0], base[1] + offset[1]] : base;
|
|
7
16
|
/**
|
|
8
17
|
* 求 step.to 的参考点(给 boundary clip 算方向 / 折角 corner 用)
|
|
9
18
|
* @description 三态:`'A'`(auto) 节点中心;`'A.<anchor>'`/`'A.<deg>'` 显式锚点 refPoint=endpoint 位置不随邻居变。直接坐标/极坐标解析为笛卡尔。
|
|
@@ -12,15 +21,10 @@ const require_parseTarget = require("../parseTarget.cjs");
|
|
|
12
21
|
* `applyTransformChain` 投回全局。`scopeChain=[]` 等价 v0.1(恒等)。
|
|
13
22
|
*/
|
|
14
23
|
var refPointOfTarget = (target, nameStack, scopeChain = []) => {
|
|
15
|
-
if (
|
|
16
|
-
const
|
|
17
|
-
const node = nameStack.lookup(ref.id);
|
|
24
|
+
if (isNodeTarget(target)) {
|
|
25
|
+
const node = nameStack.lookup(target.id);
|
|
18
26
|
if (!node) return null;
|
|
19
|
-
|
|
20
|
-
case "node": return [node.rect.x, node.rect.y];
|
|
21
|
-
case "anchor": return require_anchor_cache.resolveAnchor(node, ref.anchor);
|
|
22
|
-
case "angle": return require_anchor_cache.resolveAnchor(node, String(ref.angle));
|
|
23
|
-
}
|
|
27
|
+
return addOffset(target.anchor === void 0 ? [node.rect.x, node.rect.y] : resolveAnchorRef(node, target.anchor), target.offset);
|
|
24
28
|
}
|
|
25
29
|
if (typeof target === "object" && !Array.isArray(target) && ("relative" in target || "relativeAccumulate" in target)) return null;
|
|
26
30
|
const local = require_position.resolvePosition(target, nameStack, void 0, scopeChain);
|
|
@@ -36,15 +40,10 @@ var cornerOf = (prev, curr, via) => via === "-|" ? [curr[0], prev[1]] : [prev[0]
|
|
|
36
40
|
* `resolvePosition(..., scopeChain)` 拿到当前 scope 局部坐标后 `applyTransformChain` 投回全局。
|
|
37
41
|
*/
|
|
38
42
|
var clipForTarget = (target, toward, nameStack, scopeChain = []) => {
|
|
39
|
-
if (
|
|
40
|
-
const
|
|
41
|
-
const node = nameStack.lookup(ref.id);
|
|
43
|
+
if (isNodeTarget(target)) {
|
|
44
|
+
const node = nameStack.lookup(target.id);
|
|
42
45
|
if (!node) return null;
|
|
43
|
-
|
|
44
|
-
case "node": return require_node.boundaryPointOf(node, toward);
|
|
45
|
-
case "anchor": return require_anchor_cache.resolveAnchor(node, ref.anchor);
|
|
46
|
-
case "angle": return require_anchor_cache.resolveAnchor(node, String(ref.angle));
|
|
47
|
-
}
|
|
46
|
+
return addOffset(target.anchor === void 0 ? require_node.boundaryPointOf(node, toward) : resolveAnchorRef(node, target.anchor), target.offset);
|
|
48
47
|
}
|
|
49
48
|
if (typeof target === "object" && !Array.isArray(target) && ("relative" in target || "relativeAccumulate" in target)) return null;
|
|
50
49
|
const local = require_position.resolvePosition(target, nameStack, void 0, scopeChain);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAqB/C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,WAAW,SAAS,EACpB,aAAY,aAAa,CAAC,SAAS,CAAM,KACxC,UAAU,GAAG,IAkBf,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,IAkBf,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"}
|
|
@@ -9,6 +9,8 @@ const require_relative = require("./relative.cjs");
|
|
|
9
9
|
const require_shrink = require("./shrink.cjs");
|
|
10
10
|
const require_split = require("./split.cjs");
|
|
11
11
|
//#region src/compile/path/index.ts
|
|
12
|
+
/** 目标若是对象 NodeTarget(`{ id, ... }`)返回其 id,否则 undefined——给 UNRESOLVED_NODE_REFERENCE 诊断用 */
|
|
13
|
+
var nodeRefId = (t) => typeof t === "object" && !Array.isArray(t) && "id" in t ? t.id : void 0;
|
|
12
14
|
/**
|
|
13
15
|
* 语义 stroke 档位 → 数值(user units)
|
|
14
16
|
* @description 对齐 TikZ 比例(thin=0.4pt→1=默认 strokeWidth):ultraThin 0.25、veryThin 0.5、thin 1、semithick 1.5、thick 2、veryThick 3、ultraThick 4。显式 strokeWidth 覆盖 thickness。
|
|
@@ -56,7 +58,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
56
58
|
const anchors = steps.map((s, idx) => {
|
|
57
59
|
if (!hasTo(s)) return null;
|
|
58
60
|
const ref = require_anchor.refPointOfTarget(s.to, nameStack, scopeChain);
|
|
59
|
-
|
|
61
|
+
const toId = nodeRefId(s.to);
|
|
62
|
+
if (!ref && toId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Step.to references undefined node id '${toId}'; the entire path is skipped`, `children[${idx}].to`);
|
|
60
63
|
return ref;
|
|
61
64
|
});
|
|
62
65
|
/**
|
|
@@ -204,8 +207,10 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
204
207
|
const fromPt = require_anchor.refPointOfTarget(step.from, nameStack, scopeChain);
|
|
205
208
|
const toPt = require_anchor.refPointOfTarget(step.to, nameStack, scopeChain);
|
|
206
209
|
if (!fromPt || !toPt) {
|
|
207
|
-
|
|
208
|
-
|
|
210
|
+
const fromId = nodeRefId(step.from);
|
|
211
|
+
const rectToId = nodeRefId(step.to);
|
|
212
|
+
if (!fromPt && fromId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle from references undefined node id '${fromId}'; the entire path is skipped`, `children[${i}].from`);
|
|
213
|
+
if (!toPt && rectToId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle to references undefined node id '${rectToId}'; the entire path is skipped`, `children[${i}].to`);
|
|
209
214
|
return null;
|
|
210
215
|
}
|
|
211
216
|
let rectStart = null;
|
|
@@ -230,7 +235,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = require_text_metr
|
|
|
230
235
|
if (step.center !== void 0) {
|
|
231
236
|
const c = require_anchor.refPointOfTarget(step.center, nameStack, scopeChain);
|
|
232
237
|
if (!c) {
|
|
233
|
-
|
|
238
|
+
const centerId = nodeRefId(step.center);
|
|
239
|
+
if (centerId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Arc step center references undefined node id '${centerId}'; the entire path is skipped`, `children[${i}].center`);
|
|
234
240
|
return null;
|
|
235
241
|
}
|
|
236
242
|
center = c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAkCtE,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;CACvC,CAAC;AAEF;;;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,IAkhBrE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/geometry/_edge.ts
|
|
2
|
+
/**
|
|
3
|
+
* rect 四直边 t=0 / t=1 端点对应的角 anchor
|
|
4
|
+
* @description 方向约定单一真源:north/south = 西→东(t=0 在 west 端),east/west = 北→南(t=0 在 north 端)。
|
|
5
|
+
* 仅 rect 直边用两角端点;circle/ellipse 用 `edgeAngleDeg` 角度表、diamond 用过顶点折线。
|
|
6
|
+
*/
|
|
7
|
+
var EDGE_ENDS = {
|
|
8
|
+
north: ["north-west", "north-east"],
|
|
9
|
+
south: ["south-west", "south-east"],
|
|
10
|
+
east: ["north-east", "south-east"],
|
|
11
|
+
west: ["north-west", "south-west"]
|
|
12
|
+
};
|
|
13
|
+
/** 线性插值 a + (b − a)·t */
|
|
14
|
+
var lerpPoint = (a, b, t) => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];
|
|
15
|
+
/**
|
|
16
|
+
* circle / ellipse 周长弧段:side 的局部参数角 θ(t),单位度
|
|
17
|
+
* @description 约定同 geometry 既有 `(cosθ, sinθ)` + y 轴向下 ⇒ east=0° / south=90° / west=180° / north=270°,
|
|
18
|
+
* 顺时针为正。每条 side 是一段 90° 弧(等角插值);三点(t=0/0.5/1)与 9-anchor 重合。
|
|
19
|
+
*/
|
|
20
|
+
var edgeAngleDeg = (side, t) => {
|
|
21
|
+
switch (side) {
|
|
22
|
+
case "north": return 225 + 90 * t;
|
|
23
|
+
case "south": return 135 - 90 * t;
|
|
24
|
+
case "east": return -45 + 90 * t;
|
|
25
|
+
case "west": return 225 - 90 * t;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* diamond 过 cardinal 顶点的两段折线
|
|
30
|
+
* @description t∈[0,0.5] 走 p0→vertex、t∈[0.5,1] 走 vertex→p1;t=0.5 恰落 vertex。
|
|
31
|
+
* p0/p1 为相邻边中点 anchor、vertex 为 cardinal 顶点 anchor——全落真实斜边
|
|
32
|
+
*/
|
|
33
|
+
var polylineViaVertex = (p0, vertex, p1, t) => t <= .5 ? lerpPoint(p0, vertex, t * 2) : lerpPoint(vertex, p1, (t - .5) * 2);
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.EDGE_ENDS = EDGE_ENDS;
|
|
36
|
+
exports.edgeAngleDeg = edgeAngleDeg;
|
|
37
|
+
exports.lerpPoint = lerpPoint;
|
|
38
|
+
exports.polylineViaVertex = polylineViaVertex;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Position } from './point';
|
|
2
|
+
/** 边上比例点 `{ side, t }` 的四个 side(north/south/east/west) */
|
|
3
|
+
export type Side = 'north' | 'south' | 'east' | 'west';
|
|
4
|
+
/**
|
|
5
|
+
* rect 四直边 t=0 / t=1 端点对应的角 anchor
|
|
6
|
+
* @description 方向约定单一真源:north/south = 西→东(t=0 在 west 端),east/west = 北→南(t=0 在 north 端)。
|
|
7
|
+
* 仅 rect 直边用两角端点;circle/ellipse 用 `edgeAngleDeg` 角度表、diamond 用过顶点折线。
|
|
8
|
+
*/
|
|
9
|
+
export declare const EDGE_ENDS: {
|
|
10
|
+
readonly north: readonly ["north-west", "north-east"];
|
|
11
|
+
readonly south: readonly ["south-west", "south-east"];
|
|
12
|
+
readonly east: readonly ["north-east", "south-east"];
|
|
13
|
+
readonly west: readonly ["north-west", "south-west"];
|
|
14
|
+
};
|
|
15
|
+
/** 线性插值 a + (b − a)·t */
|
|
16
|
+
export declare const lerpPoint: (a: Position, b: Position, t: number) => Position;
|
|
17
|
+
/**
|
|
18
|
+
* circle / ellipse 周长弧段:side 的局部参数角 θ(t),单位度
|
|
19
|
+
* @description 约定同 geometry 既有 `(cosθ, sinθ)` + y 轴向下 ⇒ east=0° / south=90° / west=180° / north=270°,
|
|
20
|
+
* 顺时针为正。每条 side 是一段 90° 弧(等角插值);三点(t=0/0.5/1)与 9-anchor 重合。
|
|
21
|
+
*/
|
|
22
|
+
export declare const edgeAngleDeg: (side: Side, t: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* diamond 过 cardinal 顶点的两段折线
|
|
25
|
+
* @description t∈[0,0.5] 走 p0→vertex、t∈[0.5,1] 走 vertex→p1;t=0.5 恰落 vertex。
|
|
26
|
+
* p0/p1 为相邻边中点 anchor、vertex 为 cardinal 顶点 anchor——全落真实斜边
|
|
27
|
+
*/
|
|
28
|
+
export declare const polylineViaVertex: (p0: Position, vertex: Position, p1: Position, t: number) => Position;
|
|
29
|
+
//# sourceMappingURL=_edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_edge.d.ts","sourceRoot":"","sources":["../../../src/geometry/_edge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,0DAA0D;AAC1D,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;CAK8C,CAAC;AAErE,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,7 @@
|
|
|
1
1
|
const require__transform = require("./_transform.cjs");
|
|
2
|
+
const require__edge = require("./_edge.cjs");
|
|
2
3
|
//#region src/geometry/circle.ts
|
|
4
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
3
5
|
var SQRT_HALF = Math.SQRT1_2;
|
|
4
6
|
/** 圆形相关基础工具 */
|
|
5
7
|
var circle = {
|
|
@@ -55,6 +57,11 @@ var circle = {
|
|
|
55
57
|
if (len === 0) return [c.x, c.y];
|
|
56
58
|
const t = c.radius / len;
|
|
57
59
|
return require__transform.localToWorld(c, [lx * t, ly * t]);
|
|
60
|
+
},
|
|
61
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实圆周;含旋转) */
|
|
62
|
+
edgePoint: (c, side, t) => {
|
|
63
|
+
const rad = require__edge.edgeAngleDeg(side, t) * DEG_TO_RAD;
|
|
64
|
+
return require__transform.localToWorld(c, [c.radius * Math.cos(rad), c.radius * Math.sin(rad)]);
|
|
58
65
|
}
|
|
59
66
|
};
|
|
60
67
|
//#endregion
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
import { RectAnchor } from './rect';
|
|
3
4
|
/** 圆形:几何中心 + 半径,预留旋转字段保持与 Rect 同形 API */
|
|
@@ -19,5 +20,7 @@ export declare const circle: {
|
|
|
19
20
|
anchor: (c: Circle, name: RectAnchor) => Position;
|
|
20
21
|
/** 从圆心向 toward 方向射线与圆周交点(Path 端点贴 Node 边界用) */
|
|
21
22
|
boundaryPoint: (c: Circle, toward: Position) => Position;
|
|
23
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实圆周;含旋转) */
|
|
24
|
+
edgePoint: (c: Circle, side: Side, t: number) => Position;
|
|
22
25
|
};
|
|
23
26
|
//# sourceMappingURL=circle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,yCAAyC;AACzC,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,MAAM;IACjB,SAAS;gBACG,MAAM,KAAG,QAAQ;IAC7B,oBAAoB;kBACN,MAAM,KAAK,QAAQ,KAAG,OAAO;IAI3C,2BAA2B;gBACf,MAAM,QAAQ,UAAU,KAAG,QAAQ;IAsC/C,+CAA+C;uBAC5B,MAAM,UAAU,QAAQ,KAAG,QAAQ;IAOtD,oDAAoD;mBACrC,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIxD,CAAC"}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
const require__transform = require("./_transform.cjs");
|
|
2
|
+
const require__edge = require("./_edge.cjs");
|
|
2
3
|
//#region src/geometry/diamond.ts
|
|
4
|
+
/** 每条 side 的过顶点折线三 anchor:[邻边中点, cardinal 顶点, 邻边中点](方向 north/south=西→东、east/west=北→南) */
|
|
5
|
+
var DIAMOND_EDGE = {
|
|
6
|
+
north: [
|
|
7
|
+
"north-west",
|
|
8
|
+
"north",
|
|
9
|
+
"north-east"
|
|
10
|
+
],
|
|
11
|
+
south: [
|
|
12
|
+
"south-west",
|
|
13
|
+
"south",
|
|
14
|
+
"south-east"
|
|
15
|
+
],
|
|
16
|
+
east: [
|
|
17
|
+
"north-east",
|
|
18
|
+
"east",
|
|
19
|
+
"south-east"
|
|
20
|
+
],
|
|
21
|
+
west: [
|
|
22
|
+
"north-west",
|
|
23
|
+
"west",
|
|
24
|
+
"south-west"
|
|
25
|
+
]
|
|
26
|
+
};
|
|
3
27
|
/** 菱形相关基础工具 */
|
|
4
28
|
var diamond = {
|
|
5
29
|
/** 中心 */
|
|
@@ -56,6 +80,11 @@ var diamond = {
|
|
|
56
80
|
if (denom === 0) return [d.x, d.y];
|
|
57
81
|
const t = 1 / denom;
|
|
58
82
|
return require__transform.localToWorld(d, [lx * t, ly * t]);
|
|
83
|
+
},
|
|
84
|
+
/** 边上比例点:side 过 cardinal 顶点的两段折线 t∈[0,1] 处(落真实斜边;含旋转) */
|
|
85
|
+
edgePoint: (d, side, t) => {
|
|
86
|
+
const [mid0, vertex, mid1] = DIAMOND_EDGE[side];
|
|
87
|
+
return require__edge.polylineViaVertex(diamond.anchor(d, mid0), diamond.anchor(d, vertex), diamond.anchor(d, mid1), t);
|
|
59
88
|
}
|
|
60
89
|
};
|
|
61
90
|
//#endregion
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
import { RectAnchor } from './rect';
|
|
3
4
|
/** 菱形:中心 + halfA/halfB 半轴长 + 可选旋转;顶点在 (±halfA,0) 与 (0,±halfB) */
|
|
@@ -24,5 +25,7 @@ export declare const diamond: {
|
|
|
24
25
|
* @description 菱形方程 |x|/halfA + |y|/halfB = 1;沿方向 (lx,ly) 缩放 t 倍命中:t = 1 / (|lx|/halfA + |ly|/halfB)
|
|
25
26
|
*/
|
|
26
27
|
boundaryPoint: (d: Diamond, toward: Position) => Position;
|
|
28
|
+
/** 边上比例点:side 过 cardinal 顶点的两段折线 t∈[0,1] 处(落真实斜边;含旋转) */
|
|
29
|
+
edgePoint: (d: Diamond, side: Side, t: number) => Position;
|
|
27
30
|
};
|
|
28
31
|
//# sourceMappingURL=diamond.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAqB,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAUzC,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,eAAe;AACf,eAAO,MAAM,OAAO;IAClB,SAAS;gBACG,OAAO,KAAG,QAAQ;IAC9B,oDAAoD;kBACtC,OAAO,KAAK,QAAQ,KAAG,OAAO;IAI5C,sDAAsD;gBAC1C,OAAO,QAAQ,UAAU,KAAG,QAAQ;IAqClD;;;OAGG;uBACkB,OAAO,UAAU,QAAQ,KAAG,QAAQ;IAOvD,yDAAyD;mBAC1C,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CASzD,CAAC"}
|