@openbraininstitute/morphoviewer 0.30.1 → 0.31.0
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/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +13 -8
- package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +10 -0
- package/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/camera.js +9 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +34 -5
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.js +267 -8
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.d.ts +26 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.js +105 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +3 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +19 -4
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts +6 -8
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.js +2 -1
- package/dist/components/morpho-viewer-small-circuit/types.d.ts +6 -2
- package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +29 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.js +245 -5
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts +5 -0
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +43 -6
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.js +13 -8
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.module.css +10 -0
- package/dist/components/morpho-viewer-somas-only/types.d.ts +6 -2
- package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
- package/dist/components/types.d.ts +32 -0
- package/dist/components/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/package.json +2 -2
- package/dist/painters/overlay-interaction.d.ts +49 -0
- package/dist/painters/overlay-interaction.d.ts.map +1 -0
- package/dist/painters/overlay-interaction.js +432 -0
- package/dist/painters/overlay-surface.d.ts +18 -0
- package/dist/painters/overlay-surface.d.ts.map +1 -0
- package/dist/painters/overlay-surface.js +83 -0
- package/dist/painters/world-overlays.d.ts +25 -0
- package/dist/painters/world-overlays.d.ts.map +1 -0
- package/dist/painters/world-overlays.js +185 -0
- package/package.json +2 -2
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { TgdVec3, } from "@tolokoban/tgd";
|
|
2
|
+
const ROTATE_DEG_PER_PX = 0.35;
|
|
3
|
+
const PRIORITY = 10;
|
|
4
|
+
const MIN_HIT_PIXELS = 14;
|
|
5
|
+
function wantsRotate(evt) {
|
|
6
|
+
return Boolean(evt.shiftKey || evt.altKey || evt.buttonRight);
|
|
7
|
+
}
|
|
8
|
+
export class OverlayInteractionController {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
this.drag = null;
|
|
12
|
+
this.hoverId = null;
|
|
13
|
+
this.attached = false;
|
|
14
|
+
this.modifierRotate = false;
|
|
15
|
+
this.syncRaf = 0;
|
|
16
|
+
this.preventContextMenu = (evt) => {
|
|
17
|
+
evt.preventDefault();
|
|
18
|
+
};
|
|
19
|
+
this.handleKeyChange = (evt) => {
|
|
20
|
+
const next = evt.altKey || evt.shiftKey;
|
|
21
|
+
if (next === this.modifierRotate)
|
|
22
|
+
return;
|
|
23
|
+
this.modifierRotate = next;
|
|
24
|
+
if (!this.drag && this.hoverId) {
|
|
25
|
+
this.setCursor(next ? "move" : "grab");
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
this.handleHover = (evt) => {
|
|
29
|
+
var _a;
|
|
30
|
+
if (this.drag)
|
|
31
|
+
return true;
|
|
32
|
+
this.modifierRotate = wantsRotate(evt);
|
|
33
|
+
const hit = this.pickOverlay(evt.current.x, evt.current.y);
|
|
34
|
+
this.setHover((_a = hit === null || hit === void 0 ? void 0 : hit.id) !== null && _a !== void 0 ? _a : null);
|
|
35
|
+
if (hit)
|
|
36
|
+
this.setCursor(this.modifierRotate ? "move" : "grab");
|
|
37
|
+
return undefined;
|
|
38
|
+
};
|
|
39
|
+
this.handleMoveStart = (evt) => {
|
|
40
|
+
var _a, _b, _c;
|
|
41
|
+
if (evt.buttonMiddle)
|
|
42
|
+
return;
|
|
43
|
+
const rotate = wantsRotate(evt);
|
|
44
|
+
if (!rotate && !evt.buttonLeft && evt.buttons !== 0)
|
|
45
|
+
return;
|
|
46
|
+
const hit = this.pickOverlay(evt.current.x, evt.current.y);
|
|
47
|
+
if (!hit)
|
|
48
|
+
return;
|
|
49
|
+
const overlays = this.options.getOverlays();
|
|
50
|
+
const groupIndices = [];
|
|
51
|
+
for (let i = 0; i < overlays.length; i++) {
|
|
52
|
+
if (overlays[i].id === hit.id)
|
|
53
|
+
groupIndices.push(i);
|
|
54
|
+
}
|
|
55
|
+
if (groupIndices.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
const origin = readOrigin(overlays, hit.id, hit.point);
|
|
58
|
+
const rotation = readRotation(overlays, hit.id);
|
|
59
|
+
const mode = rotate ? "rotate" : "translate";
|
|
60
|
+
const planeAnchor = hit.point.clone();
|
|
61
|
+
const startGrab = intersectViewPlane(this.options.context, evt.current.x, evt.current.y, planeAnchor);
|
|
62
|
+
const startCoords = groupIndices.map((index) => ensureMutableCoords(overlays[index].coordinates));
|
|
63
|
+
const liveCoords = startCoords.map((coords) => new Float32Array(coords));
|
|
64
|
+
const localCoords = mode === "rotate"
|
|
65
|
+
? groupIndices.map((_, g) => toLocalCoords(startCoords[g], origin, rotation))
|
|
66
|
+
: [];
|
|
67
|
+
const next = overlays.slice();
|
|
68
|
+
for (let g = 0; g < groupIndices.length; g++) {
|
|
69
|
+
const index = groupIndices[g];
|
|
70
|
+
next[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: liveCoords[g], origin: [origin.x, origin.y, origin.z], rotation: Object.assign({}, rotation) });
|
|
71
|
+
}
|
|
72
|
+
this.options.setOverlays(next);
|
|
73
|
+
const orbit = this.options.getOrbit();
|
|
74
|
+
const orbitWasEnabled = (_a = orbit === null || orbit === void 0 ? void 0 : orbit.enabled) !== null && _a !== void 0 ? _a : true;
|
|
75
|
+
if (orbit)
|
|
76
|
+
orbit.enabled = false;
|
|
77
|
+
this.drag = {
|
|
78
|
+
id: hit.id,
|
|
79
|
+
mode,
|
|
80
|
+
startOrigin: origin.clone(),
|
|
81
|
+
origin: origin.clone(),
|
|
82
|
+
startRotation: Object.assign({}, rotation),
|
|
83
|
+
currentRotation: Object.assign({}, rotation),
|
|
84
|
+
startCoords,
|
|
85
|
+
liveCoords,
|
|
86
|
+
localCoords,
|
|
87
|
+
groupIndices,
|
|
88
|
+
startGrab,
|
|
89
|
+
planeAnchor,
|
|
90
|
+
startPointer: { x: evt.current.x, y: evt.current.y },
|
|
91
|
+
orbitWasEnabled,
|
|
92
|
+
};
|
|
93
|
+
this.setHover(hit.id);
|
|
94
|
+
this.setCursor(mode === "rotate" ? "move" : "grabbing");
|
|
95
|
+
(_c = (_b = this.options).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
96
|
+
return true;
|
|
97
|
+
};
|
|
98
|
+
this.handleMove = (evt) => {
|
|
99
|
+
const { drag } = this;
|
|
100
|
+
if (!drag)
|
|
101
|
+
return;
|
|
102
|
+
if (drag.mode === "translate") {
|
|
103
|
+
this.applyTranslate(evt.current.x, evt.current.y);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.applyRotate(evt.current.x, evt.current.y);
|
|
107
|
+
}
|
|
108
|
+
this.scheduleSync();
|
|
109
|
+
return true;
|
|
110
|
+
};
|
|
111
|
+
this.handleMoveEnd = () => {
|
|
112
|
+
if (!this.drag)
|
|
113
|
+
return;
|
|
114
|
+
this.flushSync();
|
|
115
|
+
this.emit("end");
|
|
116
|
+
this.finishDrag(false);
|
|
117
|
+
return true;
|
|
118
|
+
};
|
|
119
|
+
this.onTransform = options.onTransform;
|
|
120
|
+
}
|
|
121
|
+
get isDragging() {
|
|
122
|
+
return this.drag !== null;
|
|
123
|
+
}
|
|
124
|
+
setOnTransform(onTransform) {
|
|
125
|
+
this.onTransform = onTransform;
|
|
126
|
+
}
|
|
127
|
+
attach() {
|
|
128
|
+
var _a, _b;
|
|
129
|
+
if (this.attached)
|
|
130
|
+
return;
|
|
131
|
+
const { pointer } = this.options.context.inputs;
|
|
132
|
+
pointer.eventHover.addListener(this.handleHover, PRIORITY);
|
|
133
|
+
pointer.eventMoveStart.addListener(this.handleMoveStart, PRIORITY);
|
|
134
|
+
pointer.eventMove.addListener(this.handleMove, PRIORITY);
|
|
135
|
+
pointer.eventMoveEnd.addListener(this.handleMoveEnd, PRIORITY);
|
|
136
|
+
(_a = globalThis.addEventListener) === null || _a === void 0 ? void 0 : _a.call(globalThis, "keydown", this.handleKeyChange);
|
|
137
|
+
(_b = globalThis.addEventListener) === null || _b === void 0 ? void 0 : _b.call(globalThis, "keyup", this.handleKeyChange);
|
|
138
|
+
const { canvas } = this.options.context;
|
|
139
|
+
if (canvas instanceof HTMLCanvasElement) {
|
|
140
|
+
canvas.addEventListener("contextmenu", this.preventContextMenu);
|
|
141
|
+
}
|
|
142
|
+
this.attached = true;
|
|
143
|
+
}
|
|
144
|
+
detach() {
|
|
145
|
+
var _a, _b;
|
|
146
|
+
if (!this.attached)
|
|
147
|
+
return;
|
|
148
|
+
const { pointer } = this.options.context.inputs;
|
|
149
|
+
pointer.eventHover.removeListener(this.handleHover);
|
|
150
|
+
pointer.eventMoveStart.removeListener(this.handleMoveStart);
|
|
151
|
+
pointer.eventMove.removeListener(this.handleMove);
|
|
152
|
+
pointer.eventMoveEnd.removeListener(this.handleMoveEnd);
|
|
153
|
+
(_a = globalThis.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(globalThis, "keydown", this.handleKeyChange);
|
|
154
|
+
(_b = globalThis.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(globalThis, "keyup", this.handleKeyChange);
|
|
155
|
+
const { canvas } = this.options.context;
|
|
156
|
+
if (canvas instanceof HTMLCanvasElement) {
|
|
157
|
+
canvas.removeEventListener("contextmenu", this.preventContextMenu);
|
|
158
|
+
}
|
|
159
|
+
this.cancelScheduledSync();
|
|
160
|
+
this.finishDrag(false);
|
|
161
|
+
this.setHover(null);
|
|
162
|
+
this.attached = false;
|
|
163
|
+
}
|
|
164
|
+
applyTranslate(screenX, screenY) {
|
|
165
|
+
const { drag } = this;
|
|
166
|
+
if (!drag)
|
|
167
|
+
return;
|
|
168
|
+
const hit = intersectViewPlane(this.options.context, screenX, screenY, drag.planeAnchor);
|
|
169
|
+
const dx = hit.x - drag.startGrab.x;
|
|
170
|
+
const dy = hit.y - drag.startGrab.y;
|
|
171
|
+
const dz = hit.z - drag.startGrab.z;
|
|
172
|
+
const overlays = this.options.getOverlays();
|
|
173
|
+
for (let g = 0; g < drag.groupIndices.length; g++) {
|
|
174
|
+
const start = drag.startCoords[g];
|
|
175
|
+
const live = drag.liveCoords[g];
|
|
176
|
+
for (let i = 0; i < start.length; i += 3) {
|
|
177
|
+
live[i] = start[i] + dx;
|
|
178
|
+
live[i + 1] = start[i + 1] + dy;
|
|
179
|
+
live[i + 2] = start[i + 2] + dz;
|
|
180
|
+
}
|
|
181
|
+
const index = drag.groupIndices[g];
|
|
182
|
+
overlays[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: live, origin: [
|
|
183
|
+
drag.startOrigin.x + dx,
|
|
184
|
+
drag.startOrigin.y + dy,
|
|
185
|
+
drag.startOrigin.z + dz,
|
|
186
|
+
] });
|
|
187
|
+
}
|
|
188
|
+
drag.origin.x = drag.startOrigin.x + dx;
|
|
189
|
+
drag.origin.y = drag.startOrigin.y + dy;
|
|
190
|
+
drag.origin.z = drag.startOrigin.z + dz;
|
|
191
|
+
}
|
|
192
|
+
applyRotate(screenX, screenY) {
|
|
193
|
+
const { drag } = this;
|
|
194
|
+
if (!drag)
|
|
195
|
+
return;
|
|
196
|
+
const { camera } = this.options.context;
|
|
197
|
+
const width = Math.max(1, camera.screenWidth);
|
|
198
|
+
const height = Math.max(1, camera.screenHeight);
|
|
199
|
+
const dPxX = ((screenX - drag.startPointer.x) * width) / 2;
|
|
200
|
+
const dPxY = ((screenY - drag.startPointer.y) * height) / 2;
|
|
201
|
+
const rotation = {
|
|
202
|
+
x: wrapDegrees(drag.startRotation.x + dPxY * ROTATE_DEG_PER_PX),
|
|
203
|
+
y: drag.startRotation.y,
|
|
204
|
+
z: wrapDegrees(drag.startRotation.z - dPxX * ROTATE_DEG_PER_PX),
|
|
205
|
+
};
|
|
206
|
+
const mat = rotationMatrixZXY(rotation.x, rotation.y, rotation.z);
|
|
207
|
+
const overlays = this.options.getOverlays();
|
|
208
|
+
for (let g = 0; g < drag.groupIndices.length; g++) {
|
|
209
|
+
fromLocalCoordsInto(drag.localCoords[g], drag.startOrigin, mat, drag.liveCoords[g]);
|
|
210
|
+
const index = drag.groupIndices[g];
|
|
211
|
+
overlays[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: drag.liveCoords[g], rotation: Object.assign({}, rotation) });
|
|
212
|
+
}
|
|
213
|
+
drag.origin.from(drag.startOrigin);
|
|
214
|
+
drag.currentRotation = rotation;
|
|
215
|
+
}
|
|
216
|
+
scheduleSync() {
|
|
217
|
+
if (this.syncRaf)
|
|
218
|
+
return;
|
|
219
|
+
this.syncRaf = globalThis.requestAnimationFrame(() => {
|
|
220
|
+
this.syncRaf = 0;
|
|
221
|
+
this.options.syncOverlayPositions();
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
flushSync() {
|
|
225
|
+
this.cancelScheduledSync();
|
|
226
|
+
this.options.syncOverlayPositions();
|
|
227
|
+
}
|
|
228
|
+
cancelScheduledSync() {
|
|
229
|
+
if (!this.syncRaf)
|
|
230
|
+
return;
|
|
231
|
+
globalThis.cancelAnimationFrame(this.syncRaf);
|
|
232
|
+
this.syncRaf = 0;
|
|
233
|
+
}
|
|
234
|
+
emit(phase) {
|
|
235
|
+
const { drag } = this;
|
|
236
|
+
if (!drag || !this.onTransform)
|
|
237
|
+
return;
|
|
238
|
+
this.onTransform({
|
|
239
|
+
id: drag.id,
|
|
240
|
+
origin: { x: drag.origin.x, y: drag.origin.y, z: drag.origin.z },
|
|
241
|
+
rotation: Object.assign({}, drag.currentRotation),
|
|
242
|
+
phase,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
finishDrag(emit) {
|
|
246
|
+
var _a, _b;
|
|
247
|
+
if (!this.drag)
|
|
248
|
+
return;
|
|
249
|
+
const { id, orbitWasEnabled } = this.drag;
|
|
250
|
+
if (emit)
|
|
251
|
+
this.emit("end");
|
|
252
|
+
this.drag = null;
|
|
253
|
+
const orbit = this.options.getOrbit();
|
|
254
|
+
if (orbit)
|
|
255
|
+
orbit.enabled = orbitWasEnabled;
|
|
256
|
+
this.setCursor(this.hoverId ? (this.modifierRotate ? "move" : "grab") : "");
|
|
257
|
+
(_b = (_a = this.options).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, id);
|
|
258
|
+
}
|
|
259
|
+
setHover(id) {
|
|
260
|
+
if (this.hoverId === id)
|
|
261
|
+
return;
|
|
262
|
+
this.hoverId = id;
|
|
263
|
+
this.options.setHighlightedId(id);
|
|
264
|
+
if (!this.drag) {
|
|
265
|
+
this.setCursor(id ? (this.modifierRotate ? "move" : "grab") : "");
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
setCursor(cursor) {
|
|
269
|
+
const { canvas } = this.options.context;
|
|
270
|
+
if (canvas instanceof HTMLCanvasElement) {
|
|
271
|
+
canvas.style.cursor = cursor;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
pickOverlay(screenX, screenY) {
|
|
275
|
+
const { context } = this.options;
|
|
276
|
+
const overlays = this.options.getOverlays();
|
|
277
|
+
const { camera } = context;
|
|
278
|
+
const width = Math.max(1, camera.screenWidth);
|
|
279
|
+
const height = Math.max(1, camera.screenHeight);
|
|
280
|
+
const hitPixels = Math.max(MIN_HIT_PIXELS, this.options.getHitRadiusPixels());
|
|
281
|
+
const hitPixelsSq = hitPixels * hitPixels;
|
|
282
|
+
let bestDist = hitPixelsSq;
|
|
283
|
+
let bestId = null;
|
|
284
|
+
let bestPoint = null;
|
|
285
|
+
for (const overlay of overlays) {
|
|
286
|
+
if (!overlay.id || overlay.interactive === false)
|
|
287
|
+
continue;
|
|
288
|
+
const coords = overlay.coordinates;
|
|
289
|
+
for (let i = 0; i < coords.length; i += 3) {
|
|
290
|
+
const x = coords[i];
|
|
291
|
+
const y = coords[i + 1];
|
|
292
|
+
const z = coords[i + 2];
|
|
293
|
+
const clip = camera.apply([x, y, z]);
|
|
294
|
+
if (clip.w === 0)
|
|
295
|
+
continue;
|
|
296
|
+
const ndcX = clip.x / clip.w;
|
|
297
|
+
const ndcY = clip.y / clip.w;
|
|
298
|
+
const dxPx = ((ndcX - screenX) * width) / 2;
|
|
299
|
+
const dyPx = ((ndcY - screenY) * height) / 2;
|
|
300
|
+
const distSq = dxPx * dxPx + dyPx * dyPx;
|
|
301
|
+
if (distSq < bestDist) {
|
|
302
|
+
bestDist = distSq;
|
|
303
|
+
bestId = overlay.id;
|
|
304
|
+
bestPoint = new TgdVec3(x, y, z);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (!bestId || !bestPoint)
|
|
309
|
+
return null;
|
|
310
|
+
return { id: bestId, point: bestPoint };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function readOrigin(overlays, id, fallback) {
|
|
314
|
+
for (const overlay of overlays) {
|
|
315
|
+
if (overlay.id !== id)
|
|
316
|
+
continue;
|
|
317
|
+
if (overlay.origin && overlay.origin.length >= 3) {
|
|
318
|
+
return new TgdVec3(overlay.origin[0], overlay.origin[1], overlay.origin[2]);
|
|
319
|
+
}
|
|
320
|
+
if (overlay.kind === "origin" && overlay.coordinates.length >= 3) {
|
|
321
|
+
const c = overlay.coordinates;
|
|
322
|
+
return new TgdVec3(c[0], c[1], c[2]);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return fallback.clone();
|
|
326
|
+
}
|
|
327
|
+
function readRotation(overlays, id) {
|
|
328
|
+
var _a, _b, _c;
|
|
329
|
+
for (const overlay of overlays) {
|
|
330
|
+
if (overlay.id !== id || !overlay.rotation)
|
|
331
|
+
continue;
|
|
332
|
+
return {
|
|
333
|
+
x: (_a = overlay.rotation.x) !== null && _a !== void 0 ? _a : 0,
|
|
334
|
+
y: (_b = overlay.rotation.y) !== null && _b !== void 0 ? _b : 0,
|
|
335
|
+
z: (_c = overlay.rotation.z) !== null && _c !== void 0 ? _c : 0,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return { x: 0, y: 0, z: 0 };
|
|
339
|
+
}
|
|
340
|
+
function intersectViewPlane(context, screenX, screenY, planePoint) {
|
|
341
|
+
const { origin, direction } = context.camera.castRay(screenX, screenY);
|
|
342
|
+
const dir = new TgdVec3(direction);
|
|
343
|
+
const normal = new TgdVec3(context.camera.transfo.axisZ);
|
|
344
|
+
const denom = normal.dot(dir);
|
|
345
|
+
if (Math.abs(denom) < 1e-8) {
|
|
346
|
+
return new TgdVec3(origin);
|
|
347
|
+
}
|
|
348
|
+
const tmp = new TgdVec3(planePoint).subtract(origin);
|
|
349
|
+
const t = normal.dot(tmp) / denom;
|
|
350
|
+
return new TgdVec3(origin).addWithScale(dir, t);
|
|
351
|
+
}
|
|
352
|
+
function toLocalCoords(world, origin, rotation) {
|
|
353
|
+
const inv = invertRotationZXY(rotation.x, rotation.y, rotation.z);
|
|
354
|
+
const out = new Float32Array(world.length);
|
|
355
|
+
for (let i = 0; i < world.length; i += 3) {
|
|
356
|
+
const x = world[i] - origin.x;
|
|
357
|
+
const y = world[i + 1] - origin.y;
|
|
358
|
+
const z = world[i + 2] - origin.z;
|
|
359
|
+
const [lx, ly, lz] = applyMat3(inv, x, y, z);
|
|
360
|
+
out[i] = lx;
|
|
361
|
+
out[i + 1] = ly;
|
|
362
|
+
out[i + 2] = lz;
|
|
363
|
+
}
|
|
364
|
+
return out;
|
|
365
|
+
}
|
|
366
|
+
function fromLocalCoordsInto(local, origin, mat, out) {
|
|
367
|
+
const ox = origin.x;
|
|
368
|
+
const oy = origin.y;
|
|
369
|
+
const oz = origin.z;
|
|
370
|
+
const m0 = mat[0];
|
|
371
|
+
const m1 = mat[1];
|
|
372
|
+
const m2 = mat[2];
|
|
373
|
+
const m3 = mat[3];
|
|
374
|
+
const m4 = mat[4];
|
|
375
|
+
const m5 = mat[5];
|
|
376
|
+
const m6 = mat[6];
|
|
377
|
+
const m7 = mat[7];
|
|
378
|
+
const m8 = mat[8];
|
|
379
|
+
for (let i = 0; i < local.length; i += 3) {
|
|
380
|
+
const lx = local[i];
|
|
381
|
+
const ly = local[i + 1];
|
|
382
|
+
const lz = local[i + 2];
|
|
383
|
+
out[i] = m0 * lx + m1 * ly + m2 * lz + ox;
|
|
384
|
+
out[i + 1] = m3 * lx + m4 * ly + m5 * lz + oy;
|
|
385
|
+
out[i + 2] = m6 * lx + m7 * ly + m8 * lz + oz;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
function rotationMatrixZXY(xDeg, yDeg, zDeg) {
|
|
389
|
+
const x = (xDeg * Math.PI) / 180;
|
|
390
|
+
const y = (yDeg * Math.PI) / 180;
|
|
391
|
+
const z = (zDeg * Math.PI) / 180;
|
|
392
|
+
const cx = Math.cos(x);
|
|
393
|
+
const sx = Math.sin(x);
|
|
394
|
+
const cy = Math.cos(y);
|
|
395
|
+
const sy = Math.sin(y);
|
|
396
|
+
const cz = Math.cos(z);
|
|
397
|
+
const sz = Math.sin(z);
|
|
398
|
+
const rx = [1, 0, 0, 0, cx, -sx, 0, sx, cx];
|
|
399
|
+
const ry = [cy, 0, sy, 0, 1, 0, -sy, 0, cy];
|
|
400
|
+
const rz = [cz, -sz, 0, sz, cz, 0, 0, 0, 1];
|
|
401
|
+
return mulMat3(mulMat3(new Float64Array(rz), new Float64Array(rx)), new Float64Array(ry));
|
|
402
|
+
}
|
|
403
|
+
function invertRotationZXY(xDeg, yDeg, zDeg) {
|
|
404
|
+
const m = rotationMatrixZXY(xDeg, yDeg, zDeg);
|
|
405
|
+
return new Float64Array([m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]]);
|
|
406
|
+
}
|
|
407
|
+
function mulMat3(a, b) {
|
|
408
|
+
const out = new Float64Array(9);
|
|
409
|
+
for (let r = 0; r < 3; r++) {
|
|
410
|
+
for (let c = 0; c < 3; c++) {
|
|
411
|
+
out[r * 3 + c] = a[r * 3] * b[c] + a[r * 3 + 1] * b[3 + c] + a[r * 3 + 2] * b[6 + c];
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return out;
|
|
415
|
+
}
|
|
416
|
+
function applyMat3(m, x, y, z) {
|
|
417
|
+
return [
|
|
418
|
+
m[0] * x + m[1] * y + m[2] * z,
|
|
419
|
+
m[3] * x + m[4] * y + m[5] * z,
|
|
420
|
+
m[6] * x + m[7] * y + m[8] * z,
|
|
421
|
+
];
|
|
422
|
+
}
|
|
423
|
+
function wrapDegrees(value) {
|
|
424
|
+
const wrapped = value % 360;
|
|
425
|
+
return wrapped < 0 ? wrapped + 360 : wrapped;
|
|
426
|
+
}
|
|
427
|
+
function ensureMutableCoords(coords) {
|
|
428
|
+
if (coords instanceof Float32Array)
|
|
429
|
+
return new Float32Array(coords);
|
|
430
|
+
return Float32Array.from(coords);
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1pbnRlcmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWludGVycy9vdmVybGF5LWludGVyYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQThEeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFFL0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBRXBCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUcxQixTQUFTLFdBQVcsQ0FBQyxHQUlwQjtJQUNDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQWNELE1BQU0sT0FBTyw0QkFBNEI7SUFRdkMsWUFBNkIsT0FBa0M7UUFBbEMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFQdkQsU0FBSSxHQUFxQixJQUFJLENBQUM7UUFDOUIsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDOUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBMkRILHVCQUFrQixHQUFHLENBQUMsR0FBVSxFQUFFLEVBQUU7WUFDbkQsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVlLG9CQUFlLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElB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QUMsQ0FBQztJQUNwQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hELENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVB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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TgdContext } from "@tolokoban/tgd";
|
|
2
|
+
import { PainterWorldOverlays } from "./world-overlays";
|
|
3
|
+
export declare class OverlaySurface {
|
|
4
|
+
private context;
|
|
5
|
+
private painter;
|
|
6
|
+
private main;
|
|
7
|
+
private dragging;
|
|
8
|
+
private readonly onMainPaint;
|
|
9
|
+
get overlaysPainter(): PainterWorldOverlays | null;
|
|
10
|
+
get isDragging(): boolean;
|
|
11
|
+
setCanvas(canvas: HTMLCanvasElement | null, main: TgdContext | null): void;
|
|
12
|
+
beginDrag(): void;
|
|
13
|
+
endDrag(): void;
|
|
14
|
+
paint(): void;
|
|
15
|
+
delete(): void;
|
|
16
|
+
private teardown;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=overlay-surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-surface.d.ts","sourceRoot":"","sources":["../../src/painters/overlay-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAWxD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,IAAI,eAAe,IAAI,oBAAoB,GAAG,IAAI,CAEjD;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAMD,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAuCnE,SAAS;IAKT,OAAO;IAMP,KAAK;IAQL,MAAM;IAIN,OAAO,CAAC,QAAQ;CAUjB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { TgdContext, TgdPainterClear, TgdPainterState, } from "@tolokoban/tgd";
|
|
2
|
+
import { PainterWorldOverlays } from "./world-overlays";
|
|
3
|
+
export class OverlaySurface {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.context = null;
|
|
6
|
+
this.painter = null;
|
|
7
|
+
this.main = null;
|
|
8
|
+
this.dragging = false;
|
|
9
|
+
this.onMainPaint = () => {
|
|
10
|
+
if (this.dragging)
|
|
11
|
+
return;
|
|
12
|
+
this.paint();
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
get overlaysPainter() {
|
|
16
|
+
return this.painter;
|
|
17
|
+
}
|
|
18
|
+
get isDragging() {
|
|
19
|
+
return this.dragging;
|
|
20
|
+
}
|
|
21
|
+
setCanvas(canvas, main) {
|
|
22
|
+
this.teardown();
|
|
23
|
+
this.main = main;
|
|
24
|
+
if (!canvas || !main)
|
|
25
|
+
return;
|
|
26
|
+
const context = new TgdContext(canvas, {
|
|
27
|
+
antialias: true,
|
|
28
|
+
alpha: true,
|
|
29
|
+
premultipliedAlpha: true,
|
|
30
|
+
name: "OverlaySurface",
|
|
31
|
+
});
|
|
32
|
+
context.camera = main.camera;
|
|
33
|
+
context.resolution = main.resolution;
|
|
34
|
+
const painter = new PainterWorldOverlays(context);
|
|
35
|
+
this.painter = painter;
|
|
36
|
+
this.context = context;
|
|
37
|
+
const clear = new TgdPainterClear(context, {
|
|
38
|
+
name: "Clear overlay surface",
|
|
39
|
+
color: [0, 0, 0, 0],
|
|
40
|
+
depth: 1,
|
|
41
|
+
});
|
|
42
|
+
context.add(clear, new TgdPainterState(context, {
|
|
43
|
+
depth: "off",
|
|
44
|
+
blend: "off",
|
|
45
|
+
cull: "back",
|
|
46
|
+
children: [painter],
|
|
47
|
+
}));
|
|
48
|
+
main.eventPaint.addListener(this.onMainPaint);
|
|
49
|
+
context.paint();
|
|
50
|
+
}
|
|
51
|
+
beginDrag() {
|
|
52
|
+
this.dragging = true;
|
|
53
|
+
}
|
|
54
|
+
endDrag() {
|
|
55
|
+
var _a;
|
|
56
|
+
this.dragging = false;
|
|
57
|
+
(_a = this.main) === null || _a === void 0 ? void 0 : _a.paint();
|
|
58
|
+
this.paint();
|
|
59
|
+
}
|
|
60
|
+
paint() {
|
|
61
|
+
const { context, main } = this;
|
|
62
|
+
if (!context || !main)
|
|
63
|
+
return;
|
|
64
|
+
context.camera = main.camera;
|
|
65
|
+
context.resolution = main.resolution;
|
|
66
|
+
context.paint();
|
|
67
|
+
}
|
|
68
|
+
delete() {
|
|
69
|
+
this.teardown();
|
|
70
|
+
}
|
|
71
|
+
teardown() {
|
|
72
|
+
var _a;
|
|
73
|
+
if (this.main) {
|
|
74
|
+
this.main.eventPaint.removeListener(this.onMainPaint);
|
|
75
|
+
}
|
|
76
|
+
(_a = this.context) === null || _a === void 0 ? void 0 : _a.delete();
|
|
77
|
+
this.context = null;
|
|
78
|
+
this.painter = null;
|
|
79
|
+
this.main = null;
|
|
80
|
+
this.dragging = false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1zdXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhaW50ZXJzL292ZXJsYXktc3VyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFXeEQsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDVSxZQUFPLEdBQXNCLElBQUksQ0FBQztRQUNsQyxZQUFPLEdBQWdDLElBQUksQ0FBQztRQUM1QyxTQUFJLEdBQXNCLElBQUksQ0FBQztRQUMvQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ1IsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQztJQXNGSixDQUFDO0lBcEZDLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTUQsU0FBUyxDQUFDLE1BQWdDLEVBQUUsSUFBdUI7UUFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckMsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSTtZQUVYLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsSUFBSSxFQUFFLGdCQUFnQjtTQUN2QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sT0FBTyxHQUFHLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ3pDLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FDVCxLQUFLLEVBQ0wsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQzNCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUNwQixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdELFNBQVM7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBR0QsT0FBTzs7UUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM3QixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDckMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxRQUFROztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type TgdContext, TgdPainterGroup } from "@tolokoban/tgd";
|
|
2
|
+
import type { MorphoViewerWorldOverlay } from "../components/types";
|
|
3
|
+
export declare class PainterWorldOverlays extends TgdPainterGroup {
|
|
4
|
+
readonly context: TgdContext;
|
|
5
|
+
private readonly texture;
|
|
6
|
+
private _overlays;
|
|
7
|
+
private painter;
|
|
8
|
+
private dataPoint;
|
|
9
|
+
private _radius;
|
|
10
|
+
private _minRadiusInPixels;
|
|
11
|
+
private _highlightedId;
|
|
12
|
+
constructor(context: TgdContext);
|
|
13
|
+
get radius(): number;
|
|
14
|
+
set radius(radius: number);
|
|
15
|
+
get minRadiusInPixels(): number;
|
|
16
|
+
set minRadiusInPixels(minRadiusInPixels: number);
|
|
17
|
+
get highlightedId(): string | null;
|
|
18
|
+
set highlightedId(highlightedId: string | null);
|
|
19
|
+
get overlays(): MorphoViewerWorldOverlay[];
|
|
20
|
+
set overlays(overlays: MorphoViewerWorldOverlay[]);
|
|
21
|
+
syncPositions(): void;
|
|
22
|
+
private uploadPositions;
|
|
23
|
+
private rebuild;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=world-overlays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world-overlays.d.ts","sourceRoot":"","sources":["../../src/painters/world-overlays.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EAEf,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAgCpE,qBAAa,oBAAqB,SAAQ,eAAe;aAS3B,OAAO,EAAE,UAAU;IAR/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAuB;gBAEjB,OAAO,EAAE,UAAU;IAU/C,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IACD,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAS9C;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IACD,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAK7C;IAED,IAAI,QAAQ,IAAI,wBAAwB,EAAE,CAEzC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,EAAE,EAShD;IAMD,aAAa;IAeb,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,OAAO;CA6ChB"}
|