@hatiolab/things-scene 10.1.9 → 10.1.10

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.
@@ -28,7 +28,7 @@
28
28
  * `depth` 가 높이다. 환산은 `figure-real-object.ts` 의 `updateDimension` 한 곳에서만
29
29
  * 한다 — 그 밖에서는 청사진의 축을 그대로 three 에 넘긴다(three 도 y 가 위다).
30
30
  */
31
- import type { AnchorRule, AnimationChannel, AnimationClip, ChannelPath, ClipDrive, BlueprintGroup, BlueprintLabel, BlueprintMember, BlueprintClip, EmissiveSpec, FigureBlueprint as Blueprint, MaterialSlot, PartAnchor, PartMaterial, PartShape, PartTransform, PrimitiveKind, SizingRule, Vec3 } from '@hatiolab/figure-model';
31
+ import type { AnchorRule, AnimationChannel, AnimationClip, ChannelPath, ClipDrive, BlueprintGroup, BlueprintLabel, BlueprintAnchor, BlueprintMember, BlueprintClip, EmissiveSpec, FigureBlueprint as Blueprint, MaterialSlot, PartAnchor, PartMaterial, PartShape, PartTransform, PrimitiveKind, SizingRule, Vec3 } from '@hatiolab/figure-model';
32
32
  export type FigurePrimitiveKind = PrimitiveKind;
33
33
  export type FigureMaterialSlot = MaterialSlot;
34
34
  export type FigureSizingRule = SizingRule;
@@ -44,6 +44,7 @@ export type FigureEmissiveSpec = EmissiveSpec;
44
44
  export type FigurePartMaterial = PartMaterial;
45
45
  export type FigurePartShape = PartShape;
46
46
  export type FigureBlueprintMember = BlueprintMember;
47
+ export type FigureBlueprintAnchor = BlueprintAnchor;
47
48
  export type FigureBlueprintGroup = BlueprintGroup;
48
49
  export type FigureBlueprintClip = BlueprintClip;
49
50
  export type FigureBlueprintLabel = BlueprintLabel;
@@ -1 +1 @@
1
- {"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,IAAI,SAAS,EAC5B,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,UAAU,EACV,IAAI,EACL,MAAM,wBAAwB,CAAA;AAM/B,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAA;AACrD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAC3C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,IAAI,CAAA;AAC7B,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AACvC,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAA;AACnD,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAA;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AAOvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,IAAI,SAAS,EAC5B,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,UAAU,EACV,IAAI,EACL,MAAM,wBAAwB,CAAA;AAM/B,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAA;AACzC,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAA;AACrD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAC3C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,IAAI,CAAA;AAC7B,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAC7C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AACvC,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAA;AACnD,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAA;AACnD,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA;AAC/C,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAA;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAA;AAOvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,47 @@
1
+ import type { SlotDef } from '../transfer/types.js';
2
+ import type { Port } from '../flow/flow-node.js';
3
+ import type { FigureBlueprintAnchor } from './figure-blueprint.js';
4
+ import { type InstanceScale } from './figure-sizing.js';
5
+ /**
6
+ * 저작이 고를 수 있는 능력.
7
+ *
8
+ * **씬이 실제로 조립할 수 있는 것만 있다.** `PlacementSurface`·`CarrierLine` 같은 이름은
9
+ * 씬에 metadata 는 있어도 mixin factory 가 없다 — 구현이 있어야 성립하는 계약이라, 저작이
10
+ * 이름만 적어서 지게 하면 「선언은 있는데 동작이 없는」 것이 된다.
11
+ */
12
+ export declare const FIGURE_CAPABILITIES: readonly ["Capacity", "Holdable", "Transferable", "FlowNode"];
13
+ export type FigureCapabilityName = (typeof FIGURE_CAPABILITIES)[number];
14
+ /** 저작 화면이 사다리를 그릴 때 쓰는 설명. 모델러의 「능력」 탭이 읽는다. */
15
+ export declare const FIGURE_CAPABILITY_NOTES: Readonly<Record<FigureCapabilityName, string>>;
16
+ /**
17
+ * 청사진의 자리를 씬의 `SlotDef` 로.
18
+ *
19
+ * **`localPosition` 을 적지 않는다.** 그 칸이 뜻하는 좌표계는 「물건의 모서리를 홀더의
20
+ * 모서리 기준으로」이고(`ArrangementStrategy` 규약), 「이 점에 물건의 **중심**을 앉힌다」를
21
+ * 적을 방법이 지금 없다. 값을 지어 넣으면 물건이 반 칸 어긋난 자리에 조용히 앉는다.
22
+ * 지금은 손으로 쓴 컴포넌트들과 똑같이 — 자리의 **정체와 용량**만 선언하고, 앉는 높이는
23
+ * `receivingSurfaceY` 가 정한다. 좌표 규약은 아키텍트에게 올려 두었다.
24
+ */
25
+ export declare function slotsFromAnchors(anchors: readonly FigureBlueprintAnchor[], scale: InstanceScale, base: {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ }): SlotDef[];
30
+ /**
31
+ * 청사진의 문을 씬의 `Port` 로. 자리와 달리 위치가 곧 뜻이므로 그대로 옮긴다.
32
+ *
33
+ * **한 부품이 자리와 문을 함께 맡을 수 있다.** AGV 의 상판이 그렇고, 그때 같은 이름이 자리
34
+ * 목록과 문 목록에 함께 나온다. 씬의 `SlotDef.id` 와 `Port.id` 는 서로 다른 이름 공간이므로
35
+ * 겹쳐도 문제가 없다.
36
+ */
37
+ export declare function portsFromAnchors(anchors: readonly FigureBlueprintAnchor[], role: 'port-in' | 'port-out'): Port[];
38
+ /**
39
+ * 선언한 능력으로 클래스를 조립한다. 같은 조합이면 같은 클래스를 돌려준다.
40
+ *
41
+ * 모르는 이름이면 **던진다.** 오타 하나가 「능력이 있는 줄 알았는데 없는」 도형을 만들고,
42
+ * 그것은 물건을 넘기려는 순간에야 드러난다.
43
+ */
44
+ export declare function figureClassFor(base: unknown, capabilities?: readonly string[]): unknown;
45
+ /** 시험을 위해 조립한 클래스를 버린다. */
46
+ export declare function resetFigureClasses(): void;
47
+ //# sourceMappingURL=figure-capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure-capability.d.ts","sourceRoot":"","sources":["../../src/figure/figure-capability.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAInE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,+DAAgE,CAAA;AAEhG,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAKjF,CAAA;AA4BF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,EAAE,CAaX;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,EAAE,CAIhH;AAuCD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,CAmB3F;AAmBD,2BAA2B;AAC3B,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -3,6 +3,7 @@ import Shape from '../components/shape.js';
3
3
  import type { SceneRenderContext } from '../interfaces/rendering.js';
4
4
  import type { IRealObject } from '../interfaces/real-object.js';
5
5
  import type { ComponentNature } from '../interfaces/types.js';
6
+ import { type InstanceScale } from './figure-sizing.js';
6
7
  declare const FigureInstance_base: {
7
8
  new (...args: any[]): {
8
9
  contains(x: number, y: number): boolean;
@@ -256,7 +257,14 @@ export declare class FigureInstance extends FigureInstance_base {
256
257
  * 청사진 등록과 컴포넌트 타입 등록이 늘 함께 일어나야, 보드가 `type` 만 적고도
257
258
  * 세워진다.
258
259
  */
259
- static registerType(type: string): void;
260
+ static registerType(type: string, capabilities?: readonly string[]): void;
261
+ /**
262
+ * 이 인스턴스가 청사진을 얼마로 늘려 놓고 있나.
263
+ *
264
+ * **한 벌이어야 한다.** 2D 가 칠하는 자리, 3D 가 세우는 자리, 자리(slot)의 칸 수가 다
265
+ * 이 값을 본다. 갈리면 화면에 롤러가 여섯인데 실을 자리는 넷인 일이 생긴다.
266
+ */
267
+ get instanceScale(): InstanceScale;
260
268
  get hasTextProperty(): boolean;
261
269
  is3dish(): boolean;
262
270
  get nature(): ComponentNature;
@@ -1 +1 @@
1
- {"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkF7D,qBAAa,cAAe,SAAQ,mBAAe;IACjD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,0CAA0C;IAC1C,IAAI,MAAM,yDAET;IAED,MAAM,CAAC,GAAG,EAAE,kBAAkB;IAoC9B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,SAAS;IAuDjB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IA2ChB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAgFlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACM,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAGvD;AAMD,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAO7D,OAAO,EAAyD,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4E9G,qBAAa,cAAe,SAAQ,mBAAe;IACjD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,IAAI;IAS7E;;;;;OAKG;IACH,IAAI,aAAa,IAAI,aAAa,CAUjC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,0CAA0C;IAC1C,IAAI,MAAM,yDAET;IAED,MAAM,CAAC,GAAG,EAAE,kBAAkB;IAoC9B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,SAAS;IAuDjB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IA2ChB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAgFlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACM,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAGvD;AAMD,eAAe,cAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"figure-registry.d.ts","sourceRoot":"","sources":["../../src/figure/figure-registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAI9B;;;;;;;;;;;GAWG;AAEH,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,KAAK,EAAE,oBAAoB,CAAA;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,eAAe,CAAA;IAC1B;;;;;;;;OAQG;IACH,UAAU,EAAE,YAAY,EAAE,CAAA;IAC1B,wBAAwB;IACxB,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAUD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEvD;AA4BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,cAAc,CAiBzE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAW7D;AAED,yBAAyB;AACzB,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,qBAAqB;AACrB,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
1
+ {"version":3,"file":"figure-registry.d.ts","sourceRoot":"","sources":["../../src/figure/figure-registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAI9B;;;;;;;;;;;GAWG;AAEH,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,KAAK,EAAE,oBAAoB,CAAA;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,eAAe,CAAA;IAC1B;;;;;;;;OAQG;IACH,UAAU,EAAE,YAAY,EAAE,CAAA;IAC1B,wBAAwB;IACxB,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAUD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEvD;AA4BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG,cAAc,CAuBzE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAW7D;AAED,yBAAyB;AACzB,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,qBAAqB;AACrB,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -1,179 +1,3 @@
1
- import type { FigureAnchorRule, FigureBlueprintMember, FigureVec3 } from './figure-blueprint.js';
2
- /**
3
- * 인스턴스 크기가 바뀔 때 부품이 어떻게 반응하나.
4
- *
5
- * ## 왜 따로 떼어 두나
6
- *
7
- * 같은 답을 세 곳이 낸다 — 3D(`figure-real-object`), 2D 톱뷰(`figure-instance`),
8
- * 그리고 속성 편집기. 저마다 계산하면 화면마다 다른 모양이 나오고, 그때는 어느 쪽이
9
- * 맞는지 알 방법이 없다.
10
- *
11
- * ## 규칙 넷
12
- *
13
- * scale 비례 확대. 인스턴스 배율을 그대로 받는다 — 아무것도 하지 않아도 된다
14
- * fixed 크기는 그대로. **붙잡은 자리에서 잰 거리**를 지킨다
15
- * stretch 가장 길게 뻗은 축이 **양쪽 면 사이를 채운다**
16
- * repeat 크기는 그대로 두고 **개수**가 늘어난다
17
- *
18
- * ## 자리도 규칙의 일부다
19
- *
20
- * 한동안 이 파일은 **크기**만 다뤘고 자리는 언제나 비례였다. 그래서 시그널 타워를
21
- * 3 배로 세우면 기둥은 늘어나는데 램프들은 기둥 위 공중으로 흩어졌다.
22
- *
23
- * 1× foot 0..90 · pole 85..705 · bracket 703..747 · cap 1037..1087
24
- * 3× foot 90..180 · pole 255..2115 · bracket 2153..2197 · cap 3161..3211
25
- *
26
- * 램프는 상자 안 어디쯤이 아니라 **기둥 꼭대기**에 붙어 있다. 그 말을 하는 것이
27
- * 앵커다 — 부품이 어느 면에서 잰 거리를 지키는가.
28
- *
29
- * 세 가지가 한 규칙의 세 경우다. 축마다
30
- *
31
- * 아무 데도 안 붙잡는다 비례로 따라간다 `scale`
32
- * 한 자리를 붙잡는다 거기서 잰 거리 유지 `fixed` · `repeat` 의 옆 축
33
- * 두 면을 다 붙잡는다 가운데가 늘어나 채운다 `stretch` 의 긴 축
34
- *
35
- * 붙잡는 자리는 아래 면(`min`) · 가운데(`center`) · 위 면(`max`) 셋이다. 셋이 같은
36
- * 규칙이다 — 기준이 어디냐만 다르다. 한동안 `center` 만 「비례로 밀린다」였는데, 그러면
37
- * 가운데 가까이 저작한 것이 상자가 커질 때마다 밖으로 밀려 이웃과 갈라진다. 크레들의
38
- * V 홈 패드 둘이 ±80 에서 ±240 으로 벌어져 축을 놓친 것이 그것이었다.
39
- *
40
- * 3D 도구의 나인슬라이스가 하는 일과 같고, 여기서는 그것이 세 축으로 있다.
41
- *
42
- * ## 어떻게 되돌리나
43
- *
44
- * 부모(`object3d`)가 인스턴스 배율 `S` 를 이미 걸고 있다. 그래서 크기를 그대로 두려면
45
- * 자식이 `1/S` 로 되돌리면 된다. 자리는 부모의 배율을 그대로 받으므로 따라간다.
46
- *
47
- * 월드 = S · (자리 + (1/S) ⊙ 형상) = S·자리 + 형상
48
- *
49
- * 회전은 **형상에 미리 구워** 둔다. 그래야 위 식이 정확히 성립한다 — 회전을 mesh 에
50
- * 걸면 비균등 배율이 회전 뒤에 곱해져 형상이 기울어진다.
51
- *
52
- * 이 방식의 값은 **geometry 를 그대로 나눠 쓴다**는 것이다. 인스턴스가 몇이든 정점
53
- * 버퍼는 늘지 않는다. 대신 합칠 수 없어 draw call 이 부품 수만큼 는다 — 그 비용은
54
- * 청사진의 묶음 수에 그대로 잡히고 성숙도가 잰다.
55
- */
56
- /**
57
- * 이 축에서 이 부품이 어떻게 서나. **크기와 자리를 함께 정하는 한 값이다.**
58
- *
59
- * 저작자가 적었으면 그것이 이기고, 없으면 `sizing` 이 정한다.
60
- *
61
- * fixed 가까운 면
62
- * stretch 가장 긴 축은 `span`, 나머지는 가까운 면
63
- * repeat 늘어나는 축은 `center`(줄이 제자리에 남는다), 나머지는 가까운 면
64
- *
65
- * **가까운 면**은 상자의 위 절반에 저작한 것은 위를, 아래 절반은 아래를 붙잡는 것이다.
66
- * 사람이 램프를 꼭대기 근처에 놓을 때 뜻하는 것이 그것이다. 정확히 가운데면 `center` 이고,
67
- * 그때는 비례로 따라가는 것이 맞다 — 어느 쪽도 더 가깝지 않기 때문이다.
68
- *
69
- * 세는 것은 **부품의 면에서 상자의 면까지**이지 중심에서가 아니다. 중심으로 재면
70
- * 굵은 부품과 얇은 부품이 같은 자리에서 다른 답을 낸다.
71
- */
72
- export declare function anchorOf(member: FigureBlueprintMember, base: FigureVec3, axis: FigureAxis): FigureAnchorRule;
73
- /** 인스턴스 배율. `bounds ÷ base` 다. */
74
- export interface InstanceScale {
75
- x: number;
76
- y: number;
77
- z: number;
78
- }
79
- export type FigureAxis = 'x' | 'y' | 'z';
80
- /**
81
- * 되돌릴 것이 있는 부품인가.
82
- *
83
- * `scale` 은 부모 배율을 그대로 받으면 되므로 합쳐 둔 채로 그린다. 나머지 셋은 따로
84
- * 세운다.
85
- *
86
- * **곡면은 `scale` 이어도 따로 선다.** 합친 형상은 변환을 하나만 받는데, 인스턴스가
87
- * 축마다 다른 배율이면 그 하나가 원기둥을 타원 기둥으로 만든다. 원기둥이라고 적어
88
- * 놓고 원기둥이 아닌 것을 그리게 된다.
89
- *
90
- * 값이 있는 만큼 값을 치른다 — 곡면 부품 하나가 draw call 하나다. figure-model 의
91
- * `standsAlone` 이 **같은 답**을 내야 한다. 갈리면 성숙도가 세는 수와 화면이 그리는
92
- * 수가 달라진다.
93
- */
94
- export declare function needsOwnMesh(member: FigureBlueprintMember): boolean;
95
- /**
96
- * 회전까지 반영한 부품의 축별 크기.
97
- *
98
- * 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
99
- * `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. `memberGeometry` 가 같은
100
- * 순서로 돌리므로 여기만 다르면 답이 갈린다.
101
- *
102
- * figure-model 의 `rotatedExtentOf` 와 같은 식이다. 그쪽이 정본이고 여기는 읽는 쪽의
103
- * 사본이다 — 이 패키지는 figure-model 에 의존하지 않는다(`figure-blueprint.ts` 참고).
104
- */
105
- export declare function rotatedExtent(member: FigureBlueprintMember): FigureVec3;
106
- /**
107
- * `stretch` 일 때 늘어나는 축 — **가장 길게 뻗은 축**이다.
108
- *
109
- * 형식에 축을 적는 자리가 없어서 크기에서 읽는다. 프레임 · 벨트 · 레일이 전부 "길어서
110
- * 그 물건인 것"이라 이 규칙과 맞는다. 같으면 x → z → y 순으로 정한다.
111
- */
112
- export declare function stretchAxis(member: FigureBlueprintMember): FigureAxis;
113
- /**
114
- * 부품 mesh 에 걸 배율 — 부모가 건 인스턴스 배율을 **어디까지 되돌릴까**.
115
- *
116
- * `1` 은 인스턴스를 그대로 따라간다는 뜻이고, `1/S` 는 저작한 크기를 지킨다는 뜻이다.
117
- *
118
- * `repeat` 는 부품 자체의 크기를 지킨다 — 늘어나는 것은 개수다.
119
- */
120
- export declare function sizingScale(member: FigureBlueprintMember, scale: InstanceScale, base: FigureVec3): FigureVec3;
121
- /**
122
- * 부품을 놓을 자리 — **부모가 배율을 걸기 전의 자리**다.
123
- *
124
- * 부모(`object3d`)가 인스턴스 배율 `S` 를 걸므로, 월드에서 원하는 자리를 `S` 로 나눠
125
- * 돌려준다. 그래서 `S = 1` 이면 언제나 저작한 자리 그대로다 — 저작 화면에서 보던 것이
126
- * 인스턴스 배율 1 에서 그대로 선다.
127
- *
128
- * center 저작한 자리. 상자와 함께 비례로 밀린다
129
- * min 아래 면에서 잰 거리를 지킨다
130
- * max 위 면에서 잰 거리를 지킨다
131
- * stretch 양쪽을 다 지키므로 자리는 두 끝의 가운데다
132
- */
133
- export declare function sizingPosition(member: FigureBlueprintMember, scale: InstanceScale, base: FigureVec3): FigureVec3;
134
- /**
135
- * `repeat` 를 몇 개로 펼치나.
136
- *
137
- * **기준 상자를 한 칸씩 채운다.** 저작자는 **단위 하나**를 그리고, 런타임이 그 축의
138
- * 길이를 채운다. 3D 도구의 배열 변형이 "길이에 맞추기" 로 하는 일과 같다.
139
- *
140
- * 개수 = floor(기준 상자의 그 축 길이 × 인스턴스 배율 ÷ 한 칸)
141
- *
142
- * ## 한 칸은 **중심에서 다음 중심까지**다
143
- *
144
- * 부품 크기와 무관하다. 전에는 `부품 크기 + 틈` 으로 셌는데, 그러면 부품을 굵게 하거나
145
- * 돌릴 때마다 줄 전체가 다시 깔린다. 롤러를 30° 기울였더니 축 방향 경계상자가 96 에서
146
- * 343 으로 늘어 개수가 16 에서 6 으로 무너졌다. 기울어진 롤러 둘은 빗살처럼 나란히
147
- * 놓이므로 그렇게 벌릴 이유가 없는데도 그랬다.
148
- *
149
- * 이제 기울여도 개수가 그대로다. **기울인 채로 바짝 붙여 까는 것**이 표현된다.
150
- *
151
- * ## 왜 부품 크기가 아니라 기준 상자를 채우나
152
- *
153
- * 전에는 "그 부품이 `scale` 이었다면 차지했을 만큼" 을 채웠다. 지름 96 짜리 롤러는
154
- * 컨베이어를 3 배로 늘려도 288 밖에 안 되어 롤러가 한두 개 나온다. 2400 짜리 컨베이어에
155
- * 롤러 하나는 컨베이어가 아니다.
156
- *
157
- * 롤러는 일정한 간격으로 전 구간에 깔린다. 길이가 두 배면 롤러도 두 배다.
158
- */
159
- export declare function repeatPlan(member: FigureBlueprintMember, scale: InstanceScale, base: FigureVec3): {
160
- axis: FigureAxis;
161
- count: number;
162
- pitch: number;
163
- } | null;
164
- /**
165
- * 한 부품이 펼쳐질 수 있는 최대 개수.
166
- *
167
- * 복제본 하나가 draw call 하나다. 인스턴스를 아주 크게 늘리면 개수가 끝없이 늘어 한
168
- * 자산이 프레임을 다 먹는다. 그 지점에서는 이미 낱개를 셀 수 없으므로 더 늘려도 보이는
169
- * 것이 달라지지 않는다.
170
- */
171
- export declare const REPEAT_LIMIT = 100;
172
- /**
173
- * 복제본 하나의 자리 — 저작한 자리를 가운데 두고 양쪽으로 벌린다.
174
- *
175
- * 한쪽으로만 늘어놓으면 부품이 커질 때마다 한 방향으로 밀려서, 저작할 때 맞춰 둔 자리가
176
- * 어긋난다. 가운데를 지키면 대칭으로 놓은 것들이 계속 대칭이다.
177
- */
178
- export declare function repeatOffset(index: number, count: number, pitch: number): number;
1
+ export { anchorOf, REPEAT_LIMIT, needsOwnMesh, repeatOffset, repeatPlan, rotatedExtent, sizingPosition, sizingScale, stretchAxis, type InstanceScale } from '@hatiolab/figure-model';
2
+ export type { SizingAxis as FigureAxis } from '@hatiolab/figure-model';
179
3
  //# sourceMappingURL=figure-sizing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"figure-sizing.d.ts","sourceRoot":"","sources":["../../src/figure/figure-sizing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,GACf,gBAAgB,CAYlB;AAuCD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAExC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAEnE;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU,CAsBvE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU,CAKrE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,UAAU,GACf,UAAU,CAwCZ;AAiHD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,UAAU,GACf,UAAU,CAsCZ;AASD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,UAAU,GACf;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwB3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF"}
1
+ {"version":3,"file":"figure-sizing.d.ts","sourceRoot":"","sources":["../../src/figure/figure-sizing.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EAAE,UAAU,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAA"}
@@ -7,6 +7,7 @@
7
7
  export * from './figure-instance.js';
8
8
  export * from './figure-part-component.js';
9
9
  export * from './figure-blueprint.js';
10
+ export * from './figure-capability.js';
10
11
  export * from './figure-palette.js';
11
12
  export * from './figure-registry.js';
12
13
  export * from './figure-real-object.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;AAKpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AASvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;AAKpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AAMrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AASvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatiolab/things-scene",
3
- "version": "10.1.9",
3
+ "version": "10.1.10",
4
4
  "description": "A high-performance 2D/3D scene graph library for building interactive visual editors, combining HTML5 Canvas and Three.js to enable facility visualization, data-driven animations, and real-time monitoring dashboards",
5
5
  "main": "things-scene-min.js",
6
6
  "module": "things-scene.mjs",
@@ -90,7 +90,7 @@
90
90
  },
91
91
  "homepage": "https://github.com/hatiolab/things-scene#readme",
92
92
  "dependencies": {
93
- "@hatiolab/figure-model": "^0.1.12",
93
+ "@hatiolab/figure-model": "^0.1.15",
94
94
  "@wizpanda/super-gif": "^0.0.6",
95
95
  "dompurify": "^3.3.1",
96
96
  "jsonata": "^1.8.6",