@hatiolab/things-scene 10.0.0-beta.92 → 10.0.0-beta.94
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-types/components/component-geometry.d.ts.map +1 -1
- package/dist-types/components/mutater/path.d.ts.map +1 -1
- package/dist-types/components/outline/path-outline.d.ts.map +1 -1
- package/dist-types/components/polygon.d.ts +2 -0
- package/dist-types/components/polygon.d.ts.map +1 -1
- package/dist-types/components/polyline.d.ts.map +1 -1
- package/dist-types/components/shape.d.ts.map +1 -1
- package/dist-types/diagnostics/contract-inspector.d.ts +103 -0
- package/dist-types/diagnostics/contract-inspector.d.ts.map +1 -0
- package/dist-types/diagnostics/inspector.d.ts +44 -0
- package/dist-types/diagnostics/inspector.d.ts.map +1 -1
- package/dist-types/layer/modeler/path-handler.d.ts.map +1 -1
- package/dist-types/math/component-pose.d.ts +51 -0
- package/dist-types/math/component-pose.d.ts.map +1 -0
- package/dist-types/math/index.d.ts +3 -0
- package/dist-types/math/index.d.ts.map +1 -0
- package/dist-types/math/pose6dof.d.ts +93 -0
- package/dist-types/math/pose6dof.d.ts.map +1 -0
- package/dist-types/navigation/index.d.ts +7 -0
- package/dist-types/navigation/index.d.ts.map +1 -0
- package/dist-types/navigation/nav-graph.d.ts +55 -0
- package/dist-types/navigation/nav-graph.d.ts.map +1 -0
- package/dist-types/navigation/path-planner.d.ts +29 -0
- package/dist-types/navigation/path-planner.d.ts.map +1 -0
- package/dist-types/navigation/reservation-table.d.ts +103 -0
- package/dist-types/navigation/reservation-table.d.ts.map +1 -0
- package/dist-types/navigation/types.d.ts +145 -0
- package/dist-types/navigation/types.d.ts.map +1 -0
- package/dist-types/things-scene/index.d.ts +10 -2
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/threed/factories/polygon.d.ts +19 -0
- package/dist-types/threed/factories/polygon.d.ts.map +1 -1
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts +50 -4
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts.map +1 -1
- package/dist-types/threed/real-object-extrude.d.ts +10 -1
- package/dist-types/threed/real-object-extrude.d.ts.map +1 -1
- package/dist-types/threed/texture/fillstyle-texture.d.ts.map +1 -1
- package/dist-types/transfer/container-capacity.d.ts +72 -0
- package/dist-types/transfer/container-capacity.d.ts.map +1 -1
- package/dist-types/transfer/index.d.ts +9 -1
- package/dist-types/transfer/index.d.ts.map +1 -1
- package/dist-types/transfer/pickup-helpers.d.ts +65 -0
- package/dist-types/transfer/pickup-helpers.d.ts.map +1 -0
- package/dist-types/transfer/transfer.d.ts +168 -0
- package/dist-types/transfer/transfer.d.ts.map +1 -0
- package/dist-types/transfer/types.d.ts +104 -0
- package/dist-types/transfer/types.d.ts.map +1 -1
- package/dist-types/types/polygon-path-arc.d.ts +72 -0
- package/dist-types/types/polygon-path-arc.d.ts.map +1 -0
- package/dist-types/types/polygon-path.d.ts +153 -0
- package/dist-types/types/polygon-path.d.ts.map +1 -0
- package/package.json +1 -1
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +6 -1
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { Transferable, TransferOptions } from './types.js';
|
|
2
|
+
export type TransferPhase = 'pending' | 'planning' | 'physical' | 'handoff' | 'committed' | 'rolled-back';
|
|
3
|
+
export interface TransferTimeline {
|
|
4
|
+
initiatedAt: number;
|
|
5
|
+
planStartAt?: number;
|
|
6
|
+
planEndAt?: number;
|
|
7
|
+
physicalStartAt?: number;
|
|
8
|
+
physicalEndAt?: number;
|
|
9
|
+
handoffAt?: number;
|
|
10
|
+
committedAt?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface TransferReceipt {
|
|
13
|
+
transferId: string;
|
|
14
|
+
source: any;
|
|
15
|
+
target: any;
|
|
16
|
+
carrier: any;
|
|
17
|
+
/** Phase G7 — 직렬화 용. live refs 가 GC 되어도 보존되는 식별자. */
|
|
18
|
+
sourceId?: string;
|
|
19
|
+
targetId?: string;
|
|
20
|
+
carrierId?: string;
|
|
21
|
+
phase: TransferPhase;
|
|
22
|
+
timeline: TransferTimeline;
|
|
23
|
+
slotId?: string;
|
|
24
|
+
rejectReason?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* TransferReceipt 의 직렬화 형태 — live ref 제외, ID 만. JSON.stringify 안전.
|
|
28
|
+
* Phase G7 의 snapshot/replay 용.
|
|
29
|
+
*/
|
|
30
|
+
export interface TransferReceiptJSON {
|
|
31
|
+
transferId: string;
|
|
32
|
+
sourceId?: string;
|
|
33
|
+
targetId?: string;
|
|
34
|
+
carrierId?: string;
|
|
35
|
+
phase: TransferPhase;
|
|
36
|
+
timeline: TransferTimeline;
|
|
37
|
+
slotId?: string;
|
|
38
|
+
rejectReason?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Receipt 의 plain JSON 변환. live ref 제외, undefined 필드 omit (JSON
|
|
42
|
+
* round-trip 결정성 보장).
|
|
43
|
+
*/
|
|
44
|
+
export declare function receiptToJSON(receipt: TransferReceipt): TransferReceiptJSON;
|
|
45
|
+
/**
|
|
46
|
+
* Source 가 physical 단계에서 사용하는 운반 함수. logical-only source
|
|
47
|
+
* (Conveyor.dispatch 등) 는 noop 으로 즉시 resolve.
|
|
48
|
+
*
|
|
49
|
+
* 호출 시점: Transfer 의 physical phase 진입.
|
|
50
|
+
* 반환: physical 운반 완료 (carrier 가 target.deliveryPose 에 도달) 시 resolve.
|
|
51
|
+
*/
|
|
52
|
+
export type PhysicalRunner = () => Promise<void>;
|
|
53
|
+
export interface TransferLogStats {
|
|
54
|
+
total: number;
|
|
55
|
+
byPhase: Record<string, number>;
|
|
56
|
+
committed: number;
|
|
57
|
+
rolledBack: number;
|
|
58
|
+
rejectionRate: number;
|
|
59
|
+
avgTransferDurationMs: number;
|
|
60
|
+
}
|
|
61
|
+
export interface TransferInit {
|
|
62
|
+
source: any;
|
|
63
|
+
target: Transferable;
|
|
64
|
+
carrier: any;
|
|
65
|
+
options?: TransferOptions;
|
|
66
|
+
/** physical 운반자 (RobotArm, AGV 등). 미지정 시 즉시 통과. */
|
|
67
|
+
physical?: PhysicalRunner;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Transfer — 한 carrier 의 source → target 이동 사건.
|
|
71
|
+
*
|
|
72
|
+
* 사용:
|
|
73
|
+
* const t = new Transfer({ source, target, carrier, options })
|
|
74
|
+
* const receipt = await t.execute()
|
|
75
|
+
*
|
|
76
|
+
* 또는 Transferable.dispatch 가 내부적으로:
|
|
77
|
+
* const t = new Transfer({ source: this, target, carrier, options })
|
|
78
|
+
* await t.execute()
|
|
79
|
+
*/
|
|
80
|
+
export declare class Transfer {
|
|
81
|
+
readonly id: string;
|
|
82
|
+
readonly source: any;
|
|
83
|
+
readonly target: Transferable;
|
|
84
|
+
readonly carrier: any;
|
|
85
|
+
readonly options: TransferOptions;
|
|
86
|
+
readonly physical: PhysicalRunner | null;
|
|
87
|
+
private _phase;
|
|
88
|
+
private _timeline;
|
|
89
|
+
private _slot;
|
|
90
|
+
private _rejectReason?;
|
|
91
|
+
constructor(init: TransferInit);
|
|
92
|
+
get phase(): TransferPhase;
|
|
93
|
+
get timeline(): Readonly<TransferTimeline>;
|
|
94
|
+
/**
|
|
95
|
+
* 5-phase 실행. 각 phase 진입 시 timeline 갱신, 완료 시 receipt 반환.
|
|
96
|
+
*
|
|
97
|
+
* Negotiate / Plan 단계에서 거부 → rolled-back receipt.
|
|
98
|
+
* Physical 단계에서 throw → rolled-back receipt.
|
|
99
|
+
* Handoff 이후 throw 는 일관성 깨질 수 있으므로 그대로 propagate.
|
|
100
|
+
*/
|
|
101
|
+
execute(): Promise<TransferReceipt>;
|
|
102
|
+
/**
|
|
103
|
+
* physical / planning 도중 외부 취소. handoff 이후엔 호출 금지 (이미 commit 됨).
|
|
104
|
+
* 현재 구현은 phase 만 표시하고 carrier 의 상태는 건드리지 않음 — physical
|
|
105
|
+
* 운반자가 자체 cancel 책임.
|
|
106
|
+
*/
|
|
107
|
+
rollback(): void;
|
|
108
|
+
private _buildReceipt;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 모든 Transfer 의 receipt 를 기록하는 singleton. observability 의 기반.
|
|
112
|
+
* Phase G7 — JSON snapshot/load 지원으로 외부 도구 (Chrome extension 등) 에서
|
|
113
|
+
* 라이브 또는 저장된 로그를 동일하게 시각화할 수 있다.
|
|
114
|
+
*/
|
|
115
|
+
declare class TransferLogImpl {
|
|
116
|
+
private _entries;
|
|
117
|
+
private _maxEntries;
|
|
118
|
+
private _listeners;
|
|
119
|
+
append(receipt: TransferReceipt): void;
|
|
120
|
+
/** 모든 receipt 반환 (read-only 사본). */
|
|
121
|
+
entries(): readonly TransferReceipt[];
|
|
122
|
+
/** carrier 별 transfer 이력. live ref 매칭 우선, fallback 으로 carrierId. */
|
|
123
|
+
forCarrier(carrier: any): readonly TransferReceipt[];
|
|
124
|
+
/** carrierId 로 직접 조회 (snapshot 복원 후 등 live ref 가 없을 때). */
|
|
125
|
+
forCarrierId(carrierId: string): readonly TransferReceipt[];
|
|
126
|
+
/** sourceId 로 조회 — 특정 vehicle / source 의 transfer 이력. */
|
|
127
|
+
forSourceId(sourceId: string): readonly TransferReceipt[];
|
|
128
|
+
/** targetId 로 조회 — 특정 holder 의 receive 이력. */
|
|
129
|
+
forTargetId(targetId: string): readonly TransferReceipt[];
|
|
130
|
+
/** phase 별 필터 (e.g. 'rolled-back' 만 — 실패 진단). */
|
|
131
|
+
forPhase(phase: TransferPhase): readonly TransferReceipt[];
|
|
132
|
+
/**
|
|
133
|
+
* sim-time 범위로 필터. transfer 의 initiatedAt 이 [startSimMs, endSimMs] 안에 있는지.
|
|
134
|
+
* 'overlap' 모드 — initiatedAt..committedAt 윈도우가 query 윈도우와 겹치면 포함.
|
|
135
|
+
*/
|
|
136
|
+
inTimeRange(startSimMs: number, endSimMs: number, mode?: 'init' | 'overlap'): readonly TransferReceipt[];
|
|
137
|
+
/** rejectReason 별 그룹화 — 실패 패턴 진단. */
|
|
138
|
+
groupByRejectReason(): Map<string, readonly TransferReceipt[]>;
|
|
139
|
+
/** 통계 — 전체 / phase 별 / 거부율 / 평균 transfer 시간 등. */
|
|
140
|
+
stats(): TransferLogStats;
|
|
141
|
+
/** 새 receipt 마다 호출되는 listener 등록. */
|
|
142
|
+
subscribe(listener: (receipt: TransferReceipt) => void): () => void;
|
|
143
|
+
clear(): void;
|
|
144
|
+
setMaxEntries(n: number): void;
|
|
145
|
+
/**
|
|
146
|
+
* 모든 receipt 를 JSON 안전한 plain object 배열로. live ref 제외, ID 만 포함.
|
|
147
|
+
* JSON.stringify(transferLog.toJSON()) 안전.
|
|
148
|
+
*/
|
|
149
|
+
toJSON(): TransferReceiptJSON[];
|
|
150
|
+
/**
|
|
151
|
+
* JSON 배열에서 entries 복원 (기존 entries 대체). 외부 viewer (extension) 가
|
|
152
|
+
* 저장된 로그를 로드해서 시각화할 때 사용.
|
|
153
|
+
*
|
|
154
|
+
* 복원된 receipt 는 source/target/carrier 의 live ref 가 undefined — ID 만으로
|
|
155
|
+
* 추적 (forCarrierId, sourceId, targetId 등). listener 에는 알림 안 함 (load
|
|
156
|
+
* 는 silent).
|
|
157
|
+
*/
|
|
158
|
+
fromJSON(json: TransferReceiptJSON[]): void;
|
|
159
|
+
/**
|
|
160
|
+
* 저장된 로그를 listener 에게 순서대로 다시 발화 — extension 이 세션 시작 시
|
|
161
|
+
* 기존 entries 도 받고 싶을 때. listener 가 새 receipt 와 replayed receipt 를
|
|
162
|
+
* 구분 못 하므로 호출자가 의도적으로 사용.
|
|
163
|
+
*/
|
|
164
|
+
replayTo(listener: (receipt: TransferReceipt) => void): void;
|
|
165
|
+
}
|
|
166
|
+
export declare const transferLog: TransferLogImpl;
|
|
167
|
+
export {};
|
|
168
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/transfer/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,6 +94,79 @@ export interface CarrierAttachPoint {
|
|
|
94
94
|
rotation: Vec3;
|
|
95
95
|
slotId: string;
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Quaternion as a plain object {x, y, z, w}. THREE.Quaternion 도 이 인터페이스
|
|
99
|
+
* 만족 — 호출자는 어느 쪽이든 받을 수 있다.
|
|
100
|
+
*/
|
|
101
|
+
export interface QuatLike {
|
|
102
|
+
x: number;
|
|
103
|
+
y: number;
|
|
104
|
+
z: number;
|
|
105
|
+
w: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Pose6DOF 의 직렬화 형태 (cross-package 호환). things-scene/math 의
|
|
109
|
+
* Pose6DOF.toJSON() 결과와 같은 shape.
|
|
110
|
+
*/
|
|
111
|
+
export interface PoseSerialized {
|
|
112
|
+
position: Vec3;
|
|
113
|
+
rotation: QuatLike;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Phase H — carrier 의 진입 정책 (PickupFrame).
|
|
117
|
+
*
|
|
118
|
+
* carrier 가 "어떤 도구가 어디로 어떤 각도로 접근하면 들어올릴 수 있다" 를
|
|
119
|
+
* 선언적으로 표현. holder 측 acceptanceFrame 의 carrier 측 대칭.
|
|
120
|
+
*
|
|
121
|
+
* approach: 도구가 결합 직전 hover 자세 (world Pose6DOF).
|
|
122
|
+
* engage: 도구가 결합 시점 자세 (world Pose6DOF). 보통 carrier 의 entry
|
|
123
|
+
* surface 에 접한 위치.
|
|
124
|
+
* tolerance: trajectory planner 가 활용 — 너무 엄격하면 reroute 빈번.
|
|
125
|
+
* priority: 여러 entry 중 source 가 선택 시 hint (낮을수록 우선).
|
|
126
|
+
*
|
|
127
|
+
* 예시 — pallet 의 두 fork 진입점:
|
|
128
|
+
* { id: 'fork-west', toolType: 'forklift-fork',
|
|
129
|
+
* approach: { position: {x: -300, y: 50, z: 0}, rotation: identity },
|
|
130
|
+
* engage: { position: {x: 0, y: 50, z: 0}, rotation: identity },
|
|
131
|
+
* tolerance: { positionMm: 50, angleDeg: 5 } }
|
|
132
|
+
*/
|
|
133
|
+
export interface PickupFrame {
|
|
134
|
+
id: string;
|
|
135
|
+
toolType: string;
|
|
136
|
+
approach: PoseSerialized;
|
|
137
|
+
engage: PoseSerialized;
|
|
138
|
+
tolerance?: {
|
|
139
|
+
positionMm?: number;
|
|
140
|
+
angleDeg?: number;
|
|
141
|
+
};
|
|
142
|
+
priority?: number;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 도구의 자기 소개. carrier 가 pickupFramesFor 로 필터링할 때 활용.
|
|
146
|
+
*/
|
|
147
|
+
export interface PickupRequester {
|
|
148
|
+
toolType: string;
|
|
149
|
+
/** 도구의 footprint (forklift fork 길이, gripper 폭 등) — 호환성 검사용. */
|
|
150
|
+
size?: {
|
|
151
|
+
width: number;
|
|
152
|
+
depth: number;
|
|
153
|
+
height?: number;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Pickable — carrier 가 자기 진입 정책을 노출하는 인터페이스.
|
|
158
|
+
*
|
|
159
|
+
* 빈 배열 반환 = "들어올릴 수 없음" (예: 부착된 fixture). source 는 명시적
|
|
160
|
+
* reject 사유 ('un-pickable') 로 응답.
|
|
161
|
+
*
|
|
162
|
+
* pickupFramesFor 는 선택. 정의하면 source 가 자기 도구 type 으로 호출 →
|
|
163
|
+
* carrier 가 그 type 에 맞는 entry 만 반환. 기본 구현은 toolType 으로 단순
|
|
164
|
+
* filter (Phase H reference 구현이 제공).
|
|
165
|
+
*/
|
|
166
|
+
export interface Pickable {
|
|
167
|
+
pickupFrames(): PickupFrame[];
|
|
168
|
+
pickupFramesFor?(requester: PickupRequester): PickupFrame[];
|
|
169
|
+
}
|
|
97
170
|
/**
|
|
98
171
|
* Determines WHERE within a slot a new item should be placed, and how
|
|
99
172
|
* existing items are laid out as occupancy changes.
|
|
@@ -150,6 +223,37 @@ export interface Transferable {
|
|
|
150
223
|
rejectRoute(component: any, reason?: string): void;
|
|
151
224
|
/** Returns the 3D attach frame for a payload held in this container. */
|
|
152
225
|
attachPointFor(component: any): CarrierAttachPoint | null;
|
|
226
|
+
/**
|
|
227
|
+
* carrier 가 이 holder 안에서 가져야 할 회전 (parent-local quaternion).
|
|
228
|
+
* 기본값 identity (carrier 의 들어오는 자세 보존).
|
|
229
|
+
* 다음을 override 하는 holder 예시:
|
|
230
|
+
* - InductStation: belt 진행 방향 = sorter forward 와 일치
|
|
231
|
+
* - Sorter carrier: 슬롯의 perimeter tangent
|
|
232
|
+
* - Rack cell: grid 정렬 방향
|
|
233
|
+
*/
|
|
234
|
+
acceptanceRotation?(carrier: any, slot?: SlotDef): {
|
|
235
|
+
x: number;
|
|
236
|
+
y: number;
|
|
237
|
+
z: number;
|
|
238
|
+
w: number;
|
|
239
|
+
} | undefined;
|
|
240
|
+
/**
|
|
241
|
+
* canReceive 의 더 풍부한 버전 — 거부 사유까지 명시.
|
|
242
|
+
* 기본 구현은 findSlot 결과로 ok/reason 분기. drag-over UI 가 사유를 표시할
|
|
243
|
+
* 수 있게 함.
|
|
244
|
+
*/
|
|
245
|
+
canAccept?(carrier: any): {
|
|
246
|
+
ok: true;
|
|
247
|
+
slot: SlotDef;
|
|
248
|
+
} | {
|
|
249
|
+
ok: false;
|
|
250
|
+
reason: string;
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* receive 의 새 이름. 동일 동작 — Phase G2 의 contract 명시.
|
|
254
|
+
* 기존 receive 호출자도 작동 (alias).
|
|
255
|
+
*/
|
|
256
|
+
accept?(carrier: any, options?: TransferOptions): Promise<void> | void;
|
|
153
257
|
}
|
|
154
258
|
/**
|
|
155
259
|
* The destination a Movable navigates toward.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transfer/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transfer/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polygon path arc-length / sampling.
|
|
3
|
+
*
|
|
4
|
+
* Phase L 의 PolygonPathPoint(per-vertex radius + bulge) 를 polyline 으로 평탄화하여
|
|
5
|
+
* 전체 길이 계산과 임의 위치(s ∈ [0, L)) 의 좌표·접선각 sampling 을 제공한다.
|
|
6
|
+
*
|
|
7
|
+
* 평탄화 로직은 `PolygonExtrude.shape` 의 corner round(quadratic Bezier) + bulge arc
|
|
8
|
+
* 처리와 동일 — 시각(extruded mesh)과 시뮬(carrier 위치)이 어긋나지 않는다.
|
|
9
|
+
*
|
|
10
|
+
* 사용자(loop-conveyor 등): path 가 변하지 않는 동안 결과를 캐시하여 매 carrier sample
|
|
11
|
+
* 마다 재계산을 피한다.
|
|
12
|
+
*/
|
|
13
|
+
import { type PolygonPathPoint } from './polygon-path.js';
|
|
14
|
+
/** Path sampling 옵션. */
|
|
15
|
+
export interface PathArcOptions {
|
|
16
|
+
/** Closed loop (path[N-1] → path[0] 자동 연결, 모든 vertex 에 corner round 적용 가능). default true. */
|
|
17
|
+
closed?: boolean;
|
|
18
|
+
/** per-vertex radius 가 없을 때 fallback (state.round). default 0. */
|
|
19
|
+
round?: number;
|
|
20
|
+
/** corner round (quadratic Bezier) / bulge arc 의 segment 당 sub-division 수. default 24. */
|
|
21
|
+
divisions?: number;
|
|
22
|
+
}
|
|
23
|
+
/** Path 위 한 점의 sample. */
|
|
24
|
+
export interface PathSample {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
/** 진행 방향 접선각(라디안). atan2(dy, dx). */
|
|
28
|
+
theta: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 평탄화된 polygon path. 길이/sample 의 cache 컨테이너.
|
|
32
|
+
*
|
|
33
|
+
* `path` 가 변하면 인스턴스를 다시 만들어야 한다 (mutation 추적 X).
|
|
34
|
+
*/
|
|
35
|
+
export declare class PolygonPathPolyline {
|
|
36
|
+
/** 평탄화된 점들. closed 면 마지막 점 = 첫 점. */
|
|
37
|
+
readonly points: ReadonlyArray<{
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
}>;
|
|
41
|
+
/** points[i] 까지의 누적 arc length. cumulative[0] = 0. */
|
|
42
|
+
readonly cumulative: ReadonlyArray<number>;
|
|
43
|
+
/** 전체 arc length. closed 면 폐루프 한 바퀴 길이. */
|
|
44
|
+
readonly length: number;
|
|
45
|
+
/** closed 여부 (sample 시 wraparound 결정). */
|
|
46
|
+
readonly closed: boolean;
|
|
47
|
+
constructor(points: {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
}[], closed: boolean);
|
|
51
|
+
/**
|
|
52
|
+
* Path 위 거리 `s` 에서의 좌표 + 접선각.
|
|
53
|
+
* closed 면 s 는 자동 modulo wrap. open 이면 [0, length] 로 clamp.
|
|
54
|
+
*/
|
|
55
|
+
sample(s: number): PathSample;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Polygon path 를 polyline 으로 평탄화. PolygonExtrude.shape 와 동일 sampling 로직.
|
|
59
|
+
*
|
|
60
|
+
* - corner round: quadratic Bezier (p1, cursor, p2) 를 `divisions` 분할
|
|
61
|
+
* - bulge arc: computeArcParams 의 (cx, cy, r, startAngle, endAngle, clockwise) 를
|
|
62
|
+
* `divisions` 분할 (clockwise 부호에 맞춰 angle 진행)
|
|
63
|
+
* - closed=true: 마지막 점에서 첫 점까지 segment 로 닫음
|
|
64
|
+
* - closed=false: path[0] 와 path[N-1] 은 corner round 적용 안 함 (한쪽 변뿐)
|
|
65
|
+
*/
|
|
66
|
+
export declare function flattenPolygonPath(path: PolygonPathPoint[], options?: PathArcOptions): PolygonPathPolyline;
|
|
67
|
+
/**
|
|
68
|
+
* Polygon path 의 전체 arc length. 짧은 한 줄 helper.
|
|
69
|
+
* 반복 호출 시 `flattenPolygonPath` 결과를 캐시하라 (이 함수는 매번 평탄화한다).
|
|
70
|
+
*/
|
|
71
|
+
export declare function polygonPathLength(path: PolygonPathPoint[], options?: PathArcOptions): number;
|
|
72
|
+
//# sourceMappingURL=polygon-path-arc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-path-arc.d.ts","sourceRoot":"","sources":["../../src/types/polygon-path-arc.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAA;AAE1B,wBAAwB;AACxB,MAAM,WAAW,cAAc;IAC7B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,0BAA0B;AAC1B,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;CACd;AAQD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxD,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC1C,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;gBAEZ,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,MAAM,EAAE,OAAO;IAa/D;;;OAGG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;CAkC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,gBAAgB,EAAE,EACxB,OAAO,GAAE,cAAmB,GAC3B,mBAAmB,CAiHrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAE5F"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polygon-style path point.
|
|
3
|
+
*
|
|
4
|
+
* 폐루프(폴리곤) 모델링에서 per-vertex 코너 라운드, 호, 3D 높이까지 표현하기 위한 확장 좌표.
|
|
5
|
+
*
|
|
6
|
+
* - x, y: 평면 좌표 (2D 캔버스, 동시에 3D 의 x, z 평면)
|
|
7
|
+
* - z: 3D 에서의 높이 (component base 로부터의 Y 오프셋). 2D 코드는 무시.
|
|
8
|
+
* - radius: per-vertex 코너 라운드 반지름. 미지정 시 state.round 로 fallback.
|
|
9
|
+
* - bulge: 다음 세그먼트에 적용할 sagitta(호의 화살 높이).
|
|
10
|
+
* 부호로 볼록/오목 결정 — 양수=화면 위쪽, 음수=화면 아래쪽.
|
|
11
|
+
* 항상 작은 호로 그려진다 (큰 호 / sweep flip 없음).
|
|
12
|
+
* |bulge| < BULGE_EPSILON 이면 직선으로 자동 취급.
|
|
13
|
+
*
|
|
14
|
+
* 모든 필드가 옵셔널이므로 기존 `{ x, y }[]` path 와 100% 호환.
|
|
15
|
+
*/
|
|
16
|
+
export interface PolygonPathPoint {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
z?: number;
|
|
20
|
+
radius?: number;
|
|
21
|
+
bulge?: number;
|
|
22
|
+
}
|
|
23
|
+
export type PolygonPath = PolygonPathPoint[];
|
|
24
|
+
/**
|
|
25
|
+
* 호로 취급하는 최소 sagitta. 부동소수점 노이즈로 의도한 직선이
|
|
26
|
+
* 미세 호로 잘못 해석되는 것을 막고, 핸들 드래그에서 line ↔ arc 자동 전환의 기준이 된다.
|
|
27
|
+
*/
|
|
28
|
+
export declare const BULGE_EPSILON = 0.5;
|
|
29
|
+
/**
|
|
30
|
+
* 다음 세그먼트가 호로 그려지는지 여부 — |bulge| >= BULGE_EPSILON 일 때만 true.
|
|
31
|
+
*/
|
|
32
|
+
export declare function hasArc(point: PolygonPathPoint): boolean;
|
|
33
|
+
export interface ArcParams {
|
|
34
|
+
cx: number;
|
|
35
|
+
cy: number;
|
|
36
|
+
radius: number;
|
|
37
|
+
startAngle: number;
|
|
38
|
+
endAngle: number;
|
|
39
|
+
clockwise: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 두 점 + sagitta(=bulge) 으로부터 호 파라미터 계산.
|
|
43
|
+
* - chord = |p2 - p1|
|
|
44
|
+
* - radius r = (chord² + 4·sagitta²) / (8·|sagitta|)
|
|
45
|
+
* - 중심은 chord 중점에서 chord 에 수직 방향으로 (r - |sagitta|) 만큼 이동
|
|
46
|
+
* - bulge 부호로 수직 방향(볼록/오목) 이 결정된다 — 항상 작은 호.
|
|
47
|
+
*
|
|
48
|
+
* 컨벤션 (캔버스 좌표계, y down): perp = (uy, -ux), 핸들 = mid + perp * bulge.
|
|
49
|
+
* 호는 핸들과 같은 쪽으로 부풀고, 중심은 그 반대편.
|
|
50
|
+
*
|
|
51
|
+
* cw:
|
|
52
|
+
* - bulge>0 → 중심이 perp 반대편 → angle 증가가 작은 호 (cw=false)
|
|
53
|
+
* - bulge<0 → 중심이 perp 같은 편 → angle 감소가 작은 호 (cw=true)
|
|
54
|
+
*/
|
|
55
|
+
export declare function computeArcParams(p1: {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
}, p2: {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
}, bulge: number): ArcParams | null;
|
|
62
|
+
/**
|
|
63
|
+
* Bulge 핸들 ◇ 의 화면 위치.
|
|
64
|
+
*
|
|
65
|
+
* mid + perp * (bulge or displayMin). bulge=0 일 때도 핸들이 보이도록 displayMin 으로 보정.
|
|
66
|
+
*/
|
|
67
|
+
export declare function bulgeHandlePosition(p1: {
|
|
68
|
+
x: number;
|
|
69
|
+
y: number;
|
|
70
|
+
}, p2: {
|
|
71
|
+
x: number;
|
|
72
|
+
y: number;
|
|
73
|
+
}, bulge?: number, displayMin?: number): {
|
|
74
|
+
x: number;
|
|
75
|
+
y: number;
|
|
76
|
+
perpX: number;
|
|
77
|
+
perpY: number;
|
|
78
|
+
} | null;
|
|
79
|
+
/**
|
|
80
|
+
* 드래그 좌표 → 새 bulge 값. perp 축 투영. |proj| < BULGE_EPSILON 이면 0 (line).
|
|
81
|
+
* chord 길이를 초과하지 않도록 클램프.
|
|
82
|
+
*/
|
|
83
|
+
export declare function bulgeFromDrag(p1: {
|
|
84
|
+
x: number;
|
|
85
|
+
y: number;
|
|
86
|
+
}, p2: {
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
}, dragPoint: {
|
|
90
|
+
x: number;
|
|
91
|
+
y: number;
|
|
92
|
+
}): number;
|
|
93
|
+
/**
|
|
94
|
+
* 효과적 코너 반지름 — per-vertex `radius` 가 있으면 사용, 없으면 fallback.
|
|
95
|
+
* 음수/NaN 방어.
|
|
96
|
+
*/
|
|
97
|
+
export declare function effectiveCornerRadius(point: PolygonPathPoint, fallbackRound: number): number;
|
|
98
|
+
/**
|
|
99
|
+
* 코너 라운드 핸들의 화면 위치 계산.
|
|
100
|
+
*
|
|
101
|
+
* cursor 에서 두 변(prev→cursor, cursor→next) 의 angle bisector(내각 이등분) 방향으로
|
|
102
|
+
* `dist` 만큼 이동한 점. `dist` 는 현재 라운드 값이거나, 너무 작으면 displayMin 으로 보정
|
|
103
|
+
* (radius=0 일 때도 핸들이 보이도록).
|
|
104
|
+
*
|
|
105
|
+
* 직선(180도) 코너는 bisector 가 0 → null 반환.
|
|
106
|
+
*/
|
|
107
|
+
export declare function cornerHandlePosition(prev: {
|
|
108
|
+
x: number;
|
|
109
|
+
y: number;
|
|
110
|
+
}, cursor: {
|
|
111
|
+
x: number;
|
|
112
|
+
y: number;
|
|
113
|
+
}, next: {
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
}, effectiveR: number, displayMin?: number): {
|
|
117
|
+
x: number;
|
|
118
|
+
y: number;
|
|
119
|
+
bisectorX: number;
|
|
120
|
+
bisectorY: number;
|
|
121
|
+
} | null;
|
|
122
|
+
/**
|
|
123
|
+
* 드래그 좌표 → 새 corner radius 값 계산.
|
|
124
|
+
*
|
|
125
|
+
* 드래그 점을 angle bisector 축에 투영한 거리. 음수(반대편 방향)면 0 으로 클램프.
|
|
126
|
+
* 인접 변 길이의 절반을 초과하지 않도록 상한 적용.
|
|
127
|
+
*/
|
|
128
|
+
export declare function cornerRadiusFromDrag(prev: {
|
|
129
|
+
x: number;
|
|
130
|
+
y: number;
|
|
131
|
+
}, cursor: {
|
|
132
|
+
x: number;
|
|
133
|
+
y: number;
|
|
134
|
+
}, next: {
|
|
135
|
+
x: number;
|
|
136
|
+
y: number;
|
|
137
|
+
}, dragPoint: {
|
|
138
|
+
x: number;
|
|
139
|
+
y: number;
|
|
140
|
+
}): number;
|
|
141
|
+
/**
|
|
142
|
+
* Path 의 모든 점이 동일한 z 를 갖는지 확인.
|
|
143
|
+
*
|
|
144
|
+
* 균일 z 인 경우: 전체 폴리곤이 평면 (수평) 폐루프 — `state.zPos` 만으로 표현 가능.
|
|
145
|
+
* 비균일 z 인 경우: 램프/뱅킹/엘리베이션 — 별도 BufferGeometry 빌더 필요 (Phase L.2b).
|
|
146
|
+
*
|
|
147
|
+
* 반환:
|
|
148
|
+
* - 모든 점에 z 가 없으면 0 (기본 평면)
|
|
149
|
+
* - 모든 점이 동일 z 를 갖으면 그 z 값
|
|
150
|
+
* - 점마다 z 가 다르면 null (variable z, 향후 처리)
|
|
151
|
+
*/
|
|
152
|
+
export declare function uniformZ(path: PolygonPathPoint[]): number | null;
|
|
153
|
+
//# sourceMappingURL=polygon-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-path.d.ts","sourceRoot":"","sources":["../../src/types/polygon-path.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatiolab/things-scene",
|
|
3
|
-
"version": "10.0.0-beta.
|
|
3
|
+
"version": "10.0.0-beta.94",
|
|
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",
|