@operato/scene-urdf 10.0.0-beta.2 → 10.0.0-beta.24

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.
Files changed (68) hide show
  1. package/README.md +22 -25
  2. package/TODO.md +58 -0
  3. package/dist/editors/index.d.ts +7 -0
  4. package/dist/editors/index.js +12 -1
  5. package/dist/editors/index.js.map +1 -1
  6. package/dist/editors/property-editor-urdf-joints.d.ts +54 -0
  7. package/dist/editors/property-editor-urdf-joints.js +246 -0
  8. package/dist/editors/property-editor-urdf-joints.js.map +1 -0
  9. package/dist/editors/property-editor-urdf-preset.d.ts +8 -0
  10. package/dist/editors/property-editor-urdf-preset.js +114 -0
  11. package/dist/editors/property-editor-urdf-preset.js.map +1 -0
  12. package/dist/index.d.ts +8 -2
  13. package/dist/index.js +22 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/joint-controller.d.ts +35 -0
  16. package/dist/joint-controller.js +34 -0
  17. package/dist/joint-controller.js.map +1 -0
  18. package/dist/real-object-urdf.d.ts +106 -0
  19. package/dist/real-object-urdf.js +527 -0
  20. package/dist/real-object-urdf.js.map +1 -0
  21. package/dist/smoothing-controller.d.ts +15 -0
  22. package/dist/smoothing-controller.js +88 -0
  23. package/dist/smoothing-controller.js.map +1 -0
  24. package/dist/templates/index.d.ts +3 -0
  25. package/dist/templates/index.js +2 -3
  26. package/dist/templates/index.js.map +1 -1
  27. package/dist/templates/{urdf-controller.d.ts → urdf.d.ts} +3 -0
  28. package/dist/templates/urdf.js +19 -0
  29. package/dist/templates/urdf.js.map +1 -0
  30. package/dist/urdf-object.d.ts +502 -0
  31. package/dist/urdf-object.js +153 -0
  32. package/dist/urdf-object.js.map +1 -0
  33. package/dist/urdf-presets.d.ts +22 -0
  34. package/dist/urdf-presets.js +176 -0
  35. package/dist/urdf-presets.js.map +1 -0
  36. package/icons/urdf.png +0 -0
  37. package/package.json +5 -4
  38. package/translations/en.json +10 -16
  39. package/translations/ja.json +10 -16
  40. package/translations/ko.json +10 -16
  41. package/translations/ms.json +10 -16
  42. package/translations/zh.json +10 -16
  43. package/dist/elements/drag-n-drop.d.ts +0 -2
  44. package/dist/elements/drag-n-drop.js +0 -126
  45. package/dist/elements/drag-n-drop.js.map +0 -1
  46. package/dist/elements/urdf-controller-element.d.ts +0 -12
  47. package/dist/elements/urdf-controller-element.js +0 -283
  48. package/dist/elements/urdf-controller-element.js.map +0 -1
  49. package/dist/elements/urdf-drag-controls.d.ts +0 -32
  50. package/dist/elements/urdf-drag-controls.js +0 -197
  51. package/dist/elements/urdf-drag-controls.js.map +0 -1
  52. package/dist/elements/urdf-manipulator-element.d.ts +0 -15
  53. package/dist/elements/urdf-manipulator-element.js +0 -112
  54. package/dist/elements/urdf-manipulator-element.js.map +0 -1
  55. package/dist/elements/urdf-viewer-element.d.ts +0 -53
  56. package/dist/elements/urdf-viewer-element.js +0 -414
  57. package/dist/elements/urdf-viewer-element.js.map +0 -1
  58. package/dist/templates/urdf-controller.js +0 -16
  59. package/dist/templates/urdf-controller.js.map +0 -1
  60. package/dist/templates/urdf-viewer.d.ts +0 -14
  61. package/dist/templates/urdf-viewer.js +0 -16
  62. package/dist/templates/urdf-viewer.js.map +0 -1
  63. package/dist/urdf-controller.d.ts +0 -15
  64. package/dist/urdf-controller.js +0 -70
  65. package/dist/urdf-controller.js.map +0 -1
  66. package/dist/urdf-viewer.d.ts +0 -16
  67. package/dist/urdf-viewer.js +0 -202
  68. package/dist/urdf-viewer.js.map +0 -1
@@ -0,0 +1,88 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ *
4
+ * Level 1 관절 스무딩 — 스크립트된 애니메이션이 아닌 "타겟 추적 감쇠".
5
+ *
6
+ * 구현: critically damped 2차 spring-damper ODE.
7
+ * acc = error × ω² - 2 × ω × vel
8
+ * vel += acc × dt
9
+ * pos += vel × dt
10
+ * 여기서 ω는 응답 주파수(rad/s). 기본 ω=10이면 시상수 ~0.1s 수준으로 빠르게
11
+ * 수렴하면서도 overshoot 없음 (ζ=1).
12
+ *
13
+ * 사용자가 state.joints를 바꾸면 setTargets로 새 목표가 전달되고, tick에서
14
+ * 매 프레임 current가 target으로 수렴한다. 바뀐 값은 joint.setJointValue로
15
+ * 직접 적용.
16
+ */
17
+ import { registerJointController } from './joint-controller.js';
18
+ export class SmoothingController {
19
+ _joints;
20
+ _current = new Map();
21
+ _target = new Map();
22
+ _velocity = new Map();
23
+ /** 응답 주파수 (rad/s). 클수록 빠른 수렴. */
24
+ omega = 10;
25
+ /** 수렴 판정 임계값. error와 velocity가 모두 이 값 미만이면 그 조인트는 skip. */
26
+ epsilon = 1e-5;
27
+ setup(ctx) {
28
+ this._joints = ctx.joints;
29
+ this._current.clear();
30
+ this._target.clear();
31
+ this._velocity.clear();
32
+ for (const [name, joint] of ctx.joints) {
33
+ const v = joint.angle ?? 0;
34
+ this._current.set(name, v);
35
+ this._target.set(name, v);
36
+ this._velocity.set(name, 0);
37
+ }
38
+ }
39
+ setTargets(targets) {
40
+ for (const [name, raw] of Object.entries(targets)) {
41
+ const v = typeof raw === 'number' ? raw : Number(raw?.value);
42
+ if (Number.isFinite(v)) {
43
+ this._target.set(name, v);
44
+ }
45
+ }
46
+ }
47
+ tick(dt) {
48
+ if (!this._joints)
49
+ return false;
50
+ // dt 보정: 0 이하거나 비정상적으로 크면 (탭 전환 후 복귀 등) 스킵/클램프
51
+ if (dt <= 0)
52
+ return false;
53
+ if (dt > 0.1)
54
+ dt = 0.016;
55
+ const w = this.omega;
56
+ const w2 = w * w;
57
+ const twoW = 2 * w;
58
+ const eps = this.epsilon;
59
+ let changed = false;
60
+ for (const [name, joint] of this._joints) {
61
+ if (joint.jointType === 'fixed')
62
+ continue;
63
+ const target = this._target.get(name) ?? 0;
64
+ const cur = this._current.get(name) ?? target;
65
+ const vel = this._velocity.get(name) ?? 0;
66
+ const error = target - cur;
67
+ if (Math.abs(error) < eps && Math.abs(vel) < eps)
68
+ continue;
69
+ const acc = error * w2 - twoW * vel;
70
+ const newVel = vel + acc * dt;
71
+ const newCur = cur + newVel * dt;
72
+ this._current.set(name, newCur);
73
+ this._velocity.set(name, newVel);
74
+ joint.setJointValue(newCur);
75
+ changed = true;
76
+ }
77
+ return changed;
78
+ }
79
+ dispose() {
80
+ this._joints = undefined;
81
+ this._current.clear();
82
+ this._target.clear();
83
+ this._velocity.clear();
84
+ }
85
+ }
86
+ // 기본 등록. 'smooth' 이름으로 state.physics에서 선택 가능.
87
+ registerJointController('smooth', () => new SmoothingController());
88
+ //# sourceMappingURL=smoothing-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoothing-controller.js","sourceRoot":"","sources":["../src/smoothing-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n *\n * Level 1 관절 스무딩 — 스크립트된 애니메이션이 아닌 \"타겟 추적 감쇠\".\n *\n * 구현: critically damped 2차 spring-damper ODE.\n * acc = error × ω² - 2 × ω × vel\n * vel += acc × dt\n * pos += vel × dt\n * 여기서 ω는 응답 주파수(rad/s). 기본 ω=10이면 시상수 ~0.1s 수준으로 빠르게\n * 수렴하면서도 overshoot 없음 (ζ=1).\n *\n * 사용자가 state.joints를 바꾸면 setTargets로 새 목표가 전달되고, tick에서\n * 매 프레임 current가 target으로 수렴한다. 바뀐 값은 joint.setJointValue로\n * 직접 적용.\n */\n\nimport type { URDFJoint } from 'urdf-loader'\nimport type { JointController, JointControllerContext } from './joint-controller.js'\nimport { registerJointController } from './joint-controller.js'\n\nexport class SmoothingController implements JointController {\n private _joints?: Map<string, URDFJoint>\n private _current = new Map<string, number>()\n private _target = new Map<string, number>()\n private _velocity = new Map<string, number>()\n\n /** 응답 주파수 (rad/s). 클수록 빠른 수렴. */\n omega: number = 10\n\n /** 수렴 판정 임계값. error와 velocity가 모두 이 값 미만이면 그 조인트는 skip. */\n epsilon: number = 1e-5\n\n setup(ctx: JointControllerContext): void {\n this._joints = ctx.joints\n this._current.clear()\n this._target.clear()\n this._velocity.clear()\n\n for (const [name, joint] of ctx.joints) {\n const v = joint.angle ?? 0\n this._current.set(name, v)\n this._target.set(name, v)\n this._velocity.set(name, 0)\n }\n }\n\n setTargets(targets: Record<string, number>): void {\n for (const [name, raw] of Object.entries(targets)) {\n const v = typeof raw === 'number' ? raw : Number((raw as { value?: number } | null)?.value)\n if (Number.isFinite(v)) {\n this._target.set(name, v)\n }\n }\n }\n\n tick(dt: number): boolean {\n if (!this._joints) return false\n // dt 보정: 0 이하거나 비정상적으로 크면 (탭 전환 후 복귀 등) 스킵/클램프\n if (dt <= 0) return false\n if (dt > 0.1) dt = 0.016\n\n const w = this.omega\n const w2 = w * w\n const twoW = 2 * w\n const eps = this.epsilon\n let changed = false\n\n for (const [name, joint] of this._joints) {\n if (joint.jointType === 'fixed') continue\n\n const target = this._target.get(name) ?? 0\n const cur = this._current.get(name) ?? target\n const vel = this._velocity.get(name) ?? 0\n const error = target - cur\n\n if (Math.abs(error) < eps && Math.abs(vel) < eps) continue\n\n const acc = error * w2 - twoW * vel\n const newVel = vel + acc * dt\n const newCur = cur + newVel * dt\n\n this._current.set(name, newCur)\n this._velocity.set(name, newVel)\n joint.setJointValue(newCur)\n changed = true\n }\n\n return changed\n }\n\n dispose(): void {\n this._joints = undefined\n this._current.clear()\n this._target.clear()\n this._velocity.clear()\n }\n}\n\n// 기본 등록. 'smooth' 이름으로 state.physics에서 선택 가능.\nregisterJointController('smooth', () => new SmoothingController())\n"]}
@@ -9,6 +9,9 @@ declare const _default: {
9
9
  top: number;
10
10
  width: number;
11
11
  height: number;
12
+ depth: number;
13
+ upAxis: string;
14
+ unitScale: number;
12
15
  };
13
16
  }[];
14
17
  export default _default;
@@ -1,4 +1,3 @@
1
- import URDFViewer from './urdf-viewer.js';
2
- import URDFController from './urdf-controller.js';
3
- export default [URDFViewer, URDFController];
1
+ import urdf from './urdf.js';
2
+ export default [urdf];
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,cAAc,MAAM,sBAAsB,CAAA;AAEjD,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA","sourcesContent":["import URDFViewer from './urdf-viewer.js'\nimport URDFController from './urdf-controller.js'\n\nexport default [URDFViewer, URDFController]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,eAAe,CAAC,IAAI,CAAC,CAAA","sourcesContent":["import urdf from './urdf.js'\n\nexport default [urdf]\n"]}
@@ -9,6 +9,9 @@ declare const _default: {
9
9
  top: number;
10
10
  width: number;
11
11
  height: number;
12
+ depth: number;
13
+ upAxis: string;
14
+ unitScale: number;
12
15
  };
13
16
  };
14
17
  export default _default;
@@ -0,0 +1,19 @@
1
+ const icon = new URL('../../icons/urdf.png', import.meta.url).href;
2
+ export default {
3
+ type: 'urdf',
4
+ description: 'urdf',
5
+ group: '3D',
6
+ /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|3D|facility|storage|conveyance|transport|form|etc */
7
+ icon,
8
+ model: {
9
+ type: 'urdf',
10
+ left: 10,
11
+ top: 10,
12
+ width: 200,
13
+ height: 200,
14
+ depth: 200,
15
+ upAxis: 'z',
16
+ unitScale: 1000
17
+ }
18
+ };
19
+ //# sourceMappingURL=urdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urdf.js","sourceRoot":"","sources":["../../src/templates/urdf.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAElE,eAAe;IACb,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,IAAI;IACX,wHAAwH;IACxH,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,IAAI;KAChB;CACF,CAAA","sourcesContent":["const icon = new URL('../../icons/urdf.png', import.meta.url).href\n\nexport default {\n type: 'urdf',\n description: 'urdf',\n group: '3D',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|3D|facility|storage|conveyance|transport|form|etc */\n icon,\n model: {\n type: 'urdf',\n left: 10,\n top: 10,\n width: 200,\n height: 200,\n depth: 200,\n upAxis: 'z',\n unitScale: 1000\n }\n}\n"]}
@@ -0,0 +1,502 @@
1
+ import { Shape, type ComponentNature, type IRealObject } from '@hatiolab/things-scene';
2
+ import type { URDFJointState, URDFJointMeta } from './real-object-urdf.js';
3
+ declare const URDFObject_base: (new (...args: any[]) => {
4
+ _topViewSnapshot?: HTMLCanvasElement;
5
+ _ratioLocking: boolean;
6
+ is3dish(): boolean;
7
+ get hasTextProperty(): boolean;
8
+ get controls(): never[];
9
+ render(ctx: CanvasRenderingContext2D): void;
10
+ ready(): Promise<void>;
11
+ onchange(after: Record<string, any>, before: Record<string, any>): void;
12
+ _ensureTopViewSnapshot(): void;
13
+ buildRealObject(): IRealObject | undefined;
14
+ get source(): string | undefined;
15
+ set source(v: string | undefined): any;
16
+ get play(): boolean;
17
+ set play(value: boolean): any;
18
+ get nodes(): Record<string, import("@hatiolab/things-scene").GLTFNodeState> | undefined;
19
+ set nodes(value: Record<string, import("@hatiolab/things-scene").GLTFNodeState> | undefined): any;
20
+ get animations(): Record<string, import("@hatiolab/things-scene").GLTFAnimationState> | undefined;
21
+ set animations(value: Record<string, import("@hatiolab/things-scene").GLTFAnimationState> | undefined): any;
22
+ get playTargets(): string[] | string | undefined;
23
+ set playTargets(value: string[] | string | undefined): any;
24
+ get fillStyleTargets(): string[] | undefined;
25
+ set fillStyleTargets(value: string[] | undefined): any;
26
+ get nodeNames(): string[];
27
+ get animationNames(): string[];
28
+ set dimension(dimension: {
29
+ width: number;
30
+ height: number;
31
+ depth: number;
32
+ }): any;
33
+ _applyRatioLock(props: any): any;
34
+ set(props: any, propval?: any): any;
35
+ setState(props: any, propval?: any): any;
36
+ _app: any;
37
+ _model: any;
38
+ _state: any;
39
+ _delta: any;
40
+ _animation: any;
41
+ _animate: any;
42
+ _parent: any;
43
+ _disposed: any;
44
+ _textHidden: any;
45
+ _text_substitutor: any;
46
+ _value_substitutor: any;
47
+ _mappings: any;
48
+ _realObject: IRealObject | undefined;
49
+ _cachedState: any;
50
+ updatedAt: any;
51
+ fontSize: any;
52
+ __cache__: any;
53
+ created(): void;
54
+ added(parent: any): void;
55
+ removed(parent: any): void;
56
+ touch(): void;
57
+ clearCache(...attrs: any[]): void;
58
+ removeSelf(completely: any): void;
59
+ resetAnimation(): void;
60
+ dispose(): void;
61
+ get nature(): ComponentNature;
62
+ get disposed(): boolean;
63
+ isLayer(): boolean;
64
+ isGroup(): boolean;
65
+ isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component.js").Container;
66
+ isLine(): boolean;
67
+ isRoot(): boolean;
68
+ isRootModel(): boolean;
69
+ get is3dMode(): boolean;
70
+ isIn3DSpace(): boolean;
71
+ isTemplate(): boolean;
72
+ isHTMLElement(): boolean;
73
+ isConnectable(): boolean;
74
+ isIdentifiable(): boolean;
75
+ isPositionable(): boolean;
76
+ replaceRefids(replaceMap: any): void;
77
+ get(property: any): any;
78
+ getState(property: any): any;
79
+ get model(): any;
80
+ get state(): any;
81
+ get hierarchy(): any;
82
+ get volatile(): never[];
83
+ _applyProps(target: any, props: any, options: any): any;
84
+ contains(x: number, y: number): boolean;
85
+ move(offset: {
86
+ x: number;
87
+ y: number;
88
+ }, ...args: boolean[]): void;
89
+ symmetryX(x?: number): void;
90
+ symmetryY(y: number): void;
91
+ adjustResize(bounds: import("@hatiolab/things-scene").BOUNDS, origin_bounds: import("@hatiolab/things-scene").BOUNDS, diagonal: boolean): {
92
+ left: any;
93
+ top: any;
94
+ width: any;
95
+ height: any;
96
+ };
97
+ adjustRotation(rotation: number, step: boolean): number;
98
+ outline(progress: number): any;
99
+ get bounds(): import("@hatiolab/things-scene").BOUNDS;
100
+ set bounds(b: import("@hatiolab/things-scene").BOUNDS): any;
101
+ get center(): import("@hatiolab/things-scene").POINT;
102
+ set center(p: import("@hatiolab/things-scene").POINT): any;
103
+ get location(): import("@hatiolab/things-scene").POINT;
104
+ set location(l: import("@hatiolab/things-scene").POINT): any;
105
+ get rotate(): import("@hatiolab/things-scene").POINT;
106
+ set rotate(r: import("@hatiolab/things-scene").POINT): any;
107
+ get path(): import("@hatiolab/things-scene").POINT[];
108
+ set path(p: import("@hatiolab/things-scene").POINT[]): any;
109
+ get drawPath(): import("@hatiolab/things-scene").POINT[];
110
+ get rotatePoint(): import("@hatiolab/things-scene").POINT;
111
+ get mutable(): boolean;
112
+ get resizable(): boolean;
113
+ get rotatable(): boolean;
114
+ get realObject(): IRealObject | undefined;
115
+ draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
116
+ prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
117
+ postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
118
+ prepare(resolve: (component: import("@hatiolab/things-scene").Component) => void, reject: (reason: any) => void): void;
119
+ prepareIf(condition: boolean): void;
120
+ drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
121
+ drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
122
+ drawFill(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
123
+ get strokeStyle(): any;
124
+ set strokeStyle(v: any): any;
125
+ get fillStyle(): any;
126
+ set fillStyle(v: any): any;
127
+ get fontColor(): string;
128
+ set fontColor(v: string): any;
129
+ get rotation(): number;
130
+ set rotation(v: number): any;
131
+ get decorators(): string[];
132
+ get decotag(): string;
133
+ get hidden(): boolean;
134
+ set hidden(v: boolean): any;
135
+ get tag(): string;
136
+ set tag(v: string): any;
137
+ get appendum(): any;
138
+ set appendum(v: any): any;
139
+ defaultTextSubstitutor(): string;
140
+ textLines(context?: import("@hatiolab/things-scene").SceneRenderContext): any[][];
141
+ get font(): string;
142
+ get lineHeight(): number;
143
+ get textSubstitutor(): () => string;
144
+ get text(): string;
145
+ set text(v: string): any;
146
+ get textBounds(): import("@hatiolab/things-scene").BOUNDS;
147
+ get textRotation(): number;
148
+ get textHidden(): boolean;
149
+ set textHidden(v: boolean): any;
150
+ animate(opts: import("@hatiolab/things-scene").AnimationConfig): any;
151
+ effect(context: import("@hatiolab/things-scene").SceneRenderContext, model: any): void;
152
+ serialize(...others: any[]): string;
153
+ trim(): void;
154
+ closeScene(data: any): void;
155
+ delta(attr?: string | object, value?: any): any;
156
+ invalidate(): void;
157
+ get value(): any;
158
+ set value(v: any): any;
159
+ get data(): any;
160
+ set data(v: any): any;
161
+ set tap(v: any): any;
162
+ get mappings(): any[];
163
+ get retention(): number;
164
+ get animation(): import("@hatiolab/things-scene").AnimationController | undefined;
165
+ get started(): boolean;
166
+ set started(v: boolean): any;
167
+ findFirst(finder: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): import("@hatiolab/things-scene").Component | undefined;
168
+ findAll(s: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): any[] | undefined;
169
+ capture(x: number, y: number, except?: (c: import("@hatiolab/things-scene").Component) => boolean): any;
170
+ findAnchor(name: string): any;
171
+ isDescendible(container: import("@hatiolab/things-scene").Component): boolean;
172
+ getContext(component?: unknown): any;
173
+ get root(): import("@hatiolab/things-scene").Component;
174
+ get rootModel(): import("@hatiolab/things-scene").Component;
175
+ get parent(): import("@hatiolab/things-scene").Component;
176
+ set parent(v: import("@hatiolab/things-scene").Component): any;
177
+ get anchors(): import("@hatiolab/things-scene").Anchor[];
178
+ get scalable(): boolean;
179
+ get stuck(): boolean;
180
+ get capturable(): boolean;
181
+ get position(): string;
182
+ get origin(): string;
183
+ get offset(): import("@hatiolab/things-scene").POINT;
184
+ get app(): import("@hatiolab/things-scene").ApplicationContext;
185
+ drawEffect(context: import("@hatiolab/things-scene").SceneRenderContext): void;
186
+ prepareFill(resolve: Function, reject: Function): void;
187
+ prepareFillIf(condition: boolean): void;
188
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
189
+ drawImage(context: import("@hatiolab/things-scene").SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
190
+ mutateBounds(logic: ((bounds: import("@hatiolab/things-scene").BOUNDS) => import("@hatiolab/things-scene").BOUNDS | void) | null, context?: any): void;
191
+ mutatePath(beforeLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, afterLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, context?: any): void;
192
+ access(accessor: string): any;
193
+ substitute(template: string, data: any): string | undefined;
194
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
195
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
196
+ buildMappings(): void;
197
+ executeMappings(force?: boolean): void;
198
+ disposeMappings(): void;
199
+ ondropfile(transfered: FileList, files: string[]): void;
200
+ transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
201
+ transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
202
+ transcoordS2T(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
203
+ transcoordT2P(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
204
+ transcoordT2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
205
+ transcoordS2TR(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
206
+ transcoordS2O(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
207
+ transcoordC2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
208
+ transcoordS2C(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
209
+ toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
210
+ fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
211
+ toScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
212
+ fromScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
213
+ toLocal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
214
+ toGlobal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
215
+ toOther(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
216
+ on(name: string | object, callback: Function, context?: any): any;
217
+ off(name?: string | object, callback?: Function, context?: any): any;
218
+ once(name: string | object, callback: Function, context?: any): any;
219
+ trigger(name: string, ...args: any[]): any;
220
+ delegate_on(delegator: any): any;
221
+ delegate_off(delegator: any): any;
222
+ calculateBounds?(): void;
223
+ oncreate_element?(element: HTMLElement): void;
224
+ removeComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
225
+ addComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
226
+ insertComponentAt(component: import("@hatiolab/things-scene").Component, index: number, ghost?: boolean): void;
227
+ getOverlay(component: import("@hatiolab/things-scene").Component): HTMLElement | undefined;
228
+ findById(id: string): import("@hatiolab/things-scene").Component | undefined;
229
+ findByRefid(ref: string | number): import("@hatiolab/things-scene").Component | undefined;
230
+ findAllById(id: string): import("@hatiolab/things-scene").Component[];
231
+ resize(): void;
232
+ fit(type?: string): void;
233
+ get components(): import("@hatiolab/things-scene").Component[] | undefined;
234
+ get layout(): any;
235
+ get auxOverlay(): HTMLElement | undefined;
236
+ get isReady(): boolean;
237
+ get unitScale(): number;
238
+ get selected(): import("@hatiolab/things-scene").Component[];
239
+ set selected(_v: import("@hatiolab/things-scene").Component[]): any;
240
+ get focused(): import("@hatiolab/things-scene").Component | null;
241
+ set focused(_v: import("@hatiolab/things-scene").Component | null): any;
242
+ get hasSameParentForAllSelected(): boolean;
243
+ set hasSameParentForAllSelected(_v: boolean): any;
244
+ get fitMode(): string | undefined;
245
+ set fitMode(_v: string | undefined): any;
246
+ get element(): HTMLElement | null;
247
+ set element(_v: HTMLElement | null): any;
248
+ }) & (new (...args: any[]) => {
249
+ contains(x: number, y: number): boolean;
250
+ get path(): {
251
+ x: any;
252
+ y: any;
253
+ }[];
254
+ set path(path: {
255
+ x: any;
256
+ y: any;
257
+ }[]): any;
258
+ get anchors(): {
259
+ name: string;
260
+ position: {
261
+ x: any;
262
+ y: any;
263
+ };
264
+ }[];
265
+ get bounds(): any;
266
+ set bounds(bounds: any): any;
267
+ render(ctx: CanvasRenderingContext2D): void;
268
+ _app: any;
269
+ _model: any;
270
+ _state: any;
271
+ _delta: any;
272
+ _animation: any;
273
+ _animate: any;
274
+ _parent: any;
275
+ _disposed: any;
276
+ _textHidden: any;
277
+ _text_substitutor: any;
278
+ _value_substitutor: any;
279
+ _mappings: any;
280
+ _realObject: import("@hatiolab/things-scene").IRealObject | undefined;
281
+ _cachedState: any;
282
+ updatedAt: any;
283
+ fontSize: any;
284
+ __cache__: any;
285
+ created(): void;
286
+ added(parent: any): void;
287
+ removed(parent: any): void;
288
+ ready(): Promise<void>;
289
+ touch(): void;
290
+ clearCache(...attrs: any[]): void;
291
+ removeSelf(completely: any): void;
292
+ resetAnimation(): void;
293
+ dispose(): void;
294
+ get nature(): import("@hatiolab/things-scene").ComponentNature;
295
+ get disposed(): boolean;
296
+ isLayer(): boolean;
297
+ isGroup(): boolean;
298
+ isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component.js").Container;
299
+ isLine(): boolean;
300
+ isRoot(): boolean;
301
+ isRootModel(): boolean;
302
+ is3dish(): boolean;
303
+ get is3dMode(): boolean;
304
+ isIn3DSpace(): boolean;
305
+ isTemplate(): boolean;
306
+ isHTMLElement(): boolean;
307
+ isConnectable(): boolean;
308
+ isIdentifiable(): boolean;
309
+ isPositionable(): boolean;
310
+ replaceRefids(replaceMap: any): void;
311
+ get(property: any): any;
312
+ set(props: any, propval?: any): any;
313
+ getState(property: any): any;
314
+ setState(props: any, propval?: any): any;
315
+ get model(): any;
316
+ get state(): any;
317
+ get hierarchy(): any;
318
+ get volatile(): never[];
319
+ _applyProps(target: any, props: any, options: any): any;
320
+ move(offset: {
321
+ x: number;
322
+ y: number;
323
+ }, ...args: boolean[]): void;
324
+ symmetryX(x?: number): void;
325
+ symmetryY(y: number): void;
326
+ adjustResize(bounds: import("@hatiolab/things-scene").BOUNDS, origin_bounds: import("@hatiolab/things-scene").BOUNDS, diagonal: boolean): {
327
+ left: any;
328
+ top: any;
329
+ width: any;
330
+ height: any;
331
+ };
332
+ adjustRotation(rotation: number, step: boolean): number;
333
+ outline(progress: number): any;
334
+ get center(): import("@hatiolab/things-scene").POINT;
335
+ set center(p: import("@hatiolab/things-scene").POINT): any;
336
+ get location(): import("@hatiolab/things-scene").POINT;
337
+ set location(l: import("@hatiolab/things-scene").POINT): any;
338
+ get rotate(): import("@hatiolab/things-scene").POINT;
339
+ set rotate(r: import("@hatiolab/things-scene").POINT): any;
340
+ get dimension(): import("@hatiolab/things-scene").DIMENSION;
341
+ set dimension(d: import("@hatiolab/things-scene").DIMENSION): any;
342
+ get drawPath(): import("@hatiolab/things-scene").POINT[];
343
+ get rotatePoint(): import("@hatiolab/things-scene").POINT;
344
+ get mutable(): boolean;
345
+ get resizable(): boolean;
346
+ get rotatable(): boolean;
347
+ buildRealObject(): import("@hatiolab/things-scene").IRealObject | undefined;
348
+ get realObject(): import("@hatiolab/things-scene").IRealObject | undefined;
349
+ draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
350
+ prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
351
+ postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
352
+ prepare(resolve: (component: import("@hatiolab/things-scene").Component) => void, reject: (reason: any) => void): void;
353
+ prepareIf(condition: boolean): void;
354
+ drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
355
+ drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
356
+ drawFill(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
357
+ get strokeStyle(): any;
358
+ set strokeStyle(v: any): any;
359
+ get fillStyle(): any;
360
+ set fillStyle(v: any): any;
361
+ get fontColor(): string;
362
+ set fontColor(v: string): any;
363
+ get rotation(): number;
364
+ set rotation(v: number): any;
365
+ get decorators(): string[];
366
+ get decotag(): string;
367
+ get hidden(): boolean;
368
+ set hidden(v: boolean): any;
369
+ get tag(): string;
370
+ set tag(v: string): any;
371
+ get appendum(): any;
372
+ set appendum(v: any): any;
373
+ defaultTextSubstitutor(): string;
374
+ textLines(context?: import("@hatiolab/things-scene").SceneRenderContext): any[][];
375
+ get font(): string;
376
+ get lineHeight(): number;
377
+ get textSubstitutor(): () => string;
378
+ get text(): string;
379
+ set text(v: string): any;
380
+ get textBounds(): import("@hatiolab/things-scene").BOUNDS;
381
+ get textRotation(): number;
382
+ get textHidden(): boolean;
383
+ set textHidden(v: boolean): any;
384
+ get hasTextProperty(): boolean;
385
+ animate(opts: import("@hatiolab/things-scene").AnimationConfig): any;
386
+ effect(context: import("@hatiolab/things-scene").SceneRenderContext, model: any): void;
387
+ serialize(...others: any[]): string;
388
+ trim(): void;
389
+ closeScene(data: any): void;
390
+ delta(attr?: string | object, value?: any): any;
391
+ invalidate(): void;
392
+ get value(): any;
393
+ set value(v: any): any;
394
+ get data(): any;
395
+ set data(v: any): any;
396
+ set tap(v: any): any;
397
+ get mappings(): any[];
398
+ get retention(): number;
399
+ get animation(): import("@hatiolab/things-scene").AnimationController | undefined;
400
+ get started(): boolean;
401
+ set started(v: boolean): any;
402
+ get controls(): import("@hatiolab/things-scene").Control[] | undefined;
403
+ findFirst(finder: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): import("@hatiolab/things-scene").Component | undefined;
404
+ findAll(s: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): any[] | undefined;
405
+ capture(x: number, y: number, except?: (c: import("@hatiolab/things-scene").Component) => boolean): any;
406
+ findAnchor(name: string): any;
407
+ isDescendible(container: import("@hatiolab/things-scene").Component): boolean;
408
+ getContext(component?: unknown): any;
409
+ get root(): import("@hatiolab/things-scene").Component;
410
+ get rootModel(): import("@hatiolab/things-scene").Component;
411
+ get parent(): import("@hatiolab/things-scene").Component;
412
+ set parent(v: import("@hatiolab/things-scene").Component): any;
413
+ get scalable(): boolean;
414
+ get stuck(): boolean;
415
+ get capturable(): boolean;
416
+ get position(): string;
417
+ get origin(): string;
418
+ get offset(): import("@hatiolab/things-scene").POINT;
419
+ get app(): import("@hatiolab/things-scene").ApplicationContext;
420
+ drawEffect(context: import("@hatiolab/things-scene").SceneRenderContext): void;
421
+ prepareFill(resolve: Function, reject: Function): void;
422
+ prepareFillIf(condition: boolean): void;
423
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
424
+ drawImage(context: import("@hatiolab/things-scene").SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
425
+ mutateBounds(logic: ((bounds: import("@hatiolab/things-scene").BOUNDS) => import("@hatiolab/things-scene").BOUNDS | void) | null, context?: any): void;
426
+ mutatePath(beforeLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, afterLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, context?: any): void;
427
+ access(accessor: string): any;
428
+ substitute(template: string, data: any): string | undefined;
429
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
430
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
431
+ buildMappings(): void;
432
+ executeMappings(force?: boolean): void;
433
+ disposeMappings(): void;
434
+ ondropfile(transfered: FileList, files: string[]): void;
435
+ transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
436
+ transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
437
+ transcoordS2T(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
438
+ transcoordT2P(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
439
+ transcoordT2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
440
+ transcoordS2TR(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
441
+ transcoordS2O(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
442
+ transcoordC2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
443
+ transcoordS2C(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
444
+ toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
445
+ fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
446
+ toScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
447
+ fromScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
448
+ toLocal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
449
+ toGlobal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
450
+ toOther(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
451
+ on(name: string | object, callback: Function, context?: any): any;
452
+ off(name?: string | object, callback?: Function, context?: any): any;
453
+ once(name: string | object, callback: Function, context?: any): any;
454
+ trigger(name: string, ...args: any[]): any;
455
+ delegate_on(delegator: any): any;
456
+ delegate_off(delegator: any): any;
457
+ onchange(after: Record<string, any>, before: Record<string, any>): void;
458
+ calculateBounds?(): void;
459
+ oncreate_element?(element: HTMLElement): void;
460
+ removeComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
461
+ addComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
462
+ insertComponentAt(component: import("@hatiolab/things-scene").Component, index: number, ghost?: boolean): void;
463
+ getOverlay(component: import("@hatiolab/things-scene").Component): HTMLElement | undefined;
464
+ findById(id: string): import("@hatiolab/things-scene").Component | undefined;
465
+ findByRefid(ref: string | number): import("@hatiolab/things-scene").Component | undefined;
466
+ findAllById(id: string): import("@hatiolab/things-scene").Component[];
467
+ resize(): void;
468
+ fit(type?: string): void;
469
+ get components(): import("@hatiolab/things-scene").Component[] | undefined;
470
+ get layout(): any;
471
+ get auxOverlay(): HTMLElement | undefined;
472
+ get isReady(): boolean;
473
+ get unitScale(): number;
474
+ get selected(): import("@hatiolab/things-scene").Component[];
475
+ set selected(_v: import("@hatiolab/things-scene").Component[]): any;
476
+ get focused(): import("@hatiolab/things-scene").Component | null;
477
+ set focused(_v: import("@hatiolab/things-scene").Component | null): any;
478
+ get hasSameParentForAllSelected(): boolean;
479
+ set hasSameParentForAllSelected(_v: boolean): any;
480
+ get fitMode(): string | undefined;
481
+ set fitMode(_v: string | undefined): any;
482
+ get element(): HTMLElement | null;
483
+ set element(_v: HTMLElement | null): any;
484
+ }) & typeof Shape;
485
+ export declare class URDFObject extends URDFObject_base {
486
+ /**
487
+ * URDF 캐시 hit 만 처리. miss 시는 RealObjectURDF.\_onLoaded 가
488
+ * 캐시를 채우고 component.\_topViewSnapshot 을 직접 세팅한다 (URDF
489
+ * 로더는 GLB 로더와 다르므로 mixin 의 디폴트 — RealObjectGLTF.loadGLTF
490
+ * 직접 호출 — 을 쓸 수 없다).
491
+ */
492
+ _ensureTopViewSnapshot(): void;
493
+ buildRealObject(): IRealObject | undefined;
494
+ get nature(): ComponentNature;
495
+ /** 조인트 상태 맵. 값은 숫자(라디안/거리) 또는 { value } 형식 허용. */
496
+ get joints(): Record<string, URDFJointState | number> | undefined;
497
+ set joints(value: Record<string, URDFJointState | number> | undefined);
498
+ /** 로드된 URDF의 조인트 메타 정보. property editor가 슬라이더 UI 생성에 사용. */
499
+ get jointMeta(): URDFJointMeta[];
500
+ get jointNames(): string[];
501
+ }
502
+ export {};