@openbraininstitute/morphoviewer 0.35.2 → 0.36.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.
Files changed (78) hide show
  1. package/dist/behaviors/index.d.ts +1 -0
  2. package/dist/behaviors/index.d.ts.map +1 -1
  3. package/dist/behaviors/index.js +2 -1
  4. package/dist/behaviors/tap-guard.d.ts +17 -0
  5. package/dist/behaviors/tap-guard.d.ts.map +1 -0
  6. package/dist/behaviors/tap-guard.js +60 -0
  7. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts +6 -0
  8. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts.map +1 -0
  9. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.js +12 -0
  10. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts +3 -0
  11. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts.map +1 -0
  12. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.js +14 -0
  13. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +4 -2
  14. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
  15. package/dist/components/morpho-viewer-small-circuit/painter/manager.js +115 -59
  16. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +8 -1
  17. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -1
  18. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js +57 -21
  19. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts +3 -0
  20. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts.map +1 -1
  21. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.js +28 -6
  22. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +3 -0
  23. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -1
  24. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +42 -28
  25. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts +5 -0
  26. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts.map +1 -0
  27. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.js +4 -0
  28. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts +12 -0
  29. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts.map +1 -0
  30. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.js +79 -0
  31. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts +19 -0
  32. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts.map +1 -0
  33. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.js +55 -0
  34. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts +9 -0
  35. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts.map +1 -0
  36. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.js +34 -0
  37. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts +3 -0
  38. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts.map +1 -0
  39. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.js +15 -0
  40. package/dist/components/morpho-viewer-small-circuit/types.d.ts +1 -0
  41. package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
  42. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts +19 -4
  43. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts.map +1 -1
  44. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.js +43 -19
  45. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +23 -4
  46. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
  47. package/dist/components/morpho-viewer-somas-only/manager/manager.js +149 -29
  48. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts +12 -3
  49. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts.map +1 -1
  50. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +168 -76
  51. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts +4 -2
  52. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts.map +1 -1
  53. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.js +33 -22
  54. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts +15 -0
  55. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts.map +1 -0
  56. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.js +184 -0
  57. package/dist/components/morpho-viewer-somas-only/types.d.ts +8 -1
  58. package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
  59. package/dist/morphology-picking/index.d.ts +1 -0
  60. package/dist/morphology-picking/index.d.ts.map +1 -1
  61. package/dist/morphology-picking/index.js +2 -1
  62. package/dist/morphology-picking/pick-color-codec.d.ts +4 -0
  63. package/dist/morphology-picking/pick-color-codec.d.ts.map +1 -0
  64. package/dist/morphology-picking/pick-color-codec.js +14 -0
  65. package/dist/package.json +1 -1
  66. package/dist/painters/overlay-interaction.d.ts +2 -0
  67. package/dist/painters/overlay-interaction.d.ts.map +1 -1
  68. package/dist/painters/overlay-interaction.js +11 -1
  69. package/dist/utils.d.ts +0 -3
  70. package/dist/utils.d.ts.map +1 -1
  71. package/dist/utils.js +1 -19
  72. package/package.json +1 -1
  73. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts +0 -9
  74. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts.map +0 -1
  75. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.js +0 -9
  76. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts +0 -3
  77. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts.map +0 -1
  78. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.js +0 -24
@@ -1,8 +1,11 @@
1
- import { TgdBoundingBox, TgdPainterGroup, TgdTexture2D, tgdCanvasCreatePalette, } from "@tolokoban/tgd";
2
- import { computeAmbientOcclusion } from "./ambient-occlusion";
1
+ import { TgdBoundingBox, TgdPainterGroup, TgdTexture2D } from "@tolokoban/tgd";
2
+ import { AmbientOcclusionComputation } from "./ambient-occlusion";
3
3
  import { PainterSomaCloud } from "./painter-soma-cloud";
4
4
  const RADIUS = 15;
5
5
  const PALETTE_AO_ROWS = 32;
6
+ const AO_CHUNK_SIZE = 10000;
7
+ const AO_MIN_BUDGET_MS = 3;
8
+ const AO_FALLBACK_SLICE_MS = 8;
6
9
  const DEFAULT_PALETTE_COLORS = [
7
10
  "hsl(200, 100%, 80%)",
8
11
  "hsl(200, 100%, 50%)",
@@ -12,8 +15,14 @@ export class PainterCellInfos extends TgdPainterGroup {
12
15
  constructor(context, options) {
13
16
  var _a, _b;
14
17
  const bbox = new TgdBoundingBox();
15
- const { paletteColors, painterPointsCloudOptions } = parseCellInfos(options.cellInfos, bbox);
16
- const opacity = clamp01((_a = options.opacity) !== null && _a !== void 0 ? _a : 1);
18
+ const dataPoint = options.positions
19
+ ? packPositions(options.positions)
20
+ : parsePositions((_a = options.cellInfos) !== null && _a !== void 0 ? _a : []);
21
+ addSomaBounds(dataPoint, bbox);
22
+ const count = dataPoint.length >> 2;
23
+ const dataUV = new Float32Array(2 * count).fill(0.5);
24
+ const paletteColors = writeColumns(dataUV, options.colors);
25
+ const opacity = clamp01((_b = options.opacity) !== null && _b !== void 0 ? _b : 1);
17
26
  const texturePalette = new TgdTexture2D(context, {
18
27
  params: {
19
28
  magFilter: "LINEAR",
@@ -23,10 +32,9 @@ export class PainterCellInfos extends TgdPainterGroup {
23
32
  wrapT: "CLAMP_TO_EDGE",
24
33
  },
25
34
  }).loadBitmap(createPaletteBitmap(paletteColors, opacity));
26
- const uvs = (_b = middleLuminance(painterPointsCloudOptions.dataUV)) !== null && _b !== void 0 ? _b : new Float32Array(2 * options.cellInfos.length);
27
35
  const painterPointsCloud = new PainterSomaCloud(context, {
28
- dataPoint: painterPointsCloudOptions.dataPoint,
29
- dataUV: computeAmbientOcclusion(bbox, 10 * RADIUS, painterPointsCloudOptions.dataPoint, uvs),
36
+ dataPoint,
37
+ dataUV,
30
38
  texture: texturePalette,
31
39
  radiusMultiplier: options.somaRadius,
32
40
  });
@@ -35,11 +43,24 @@ export class PainterCellInfos extends TgdPainterGroup {
35
43
  children: [painterPointsCloud],
36
44
  });
37
45
  this.context = context;
46
+ this.cancelAmbientOcclusion = null;
38
47
  this.painterPointsCloud = painterPointsCloud;
39
48
  this.texturePalette = texturePalette;
49
+ this.count = count;
50
+ this.dataUV = dataUV;
40
51
  this.paletteColors = paletteColors;
41
52
  this._opacity = opacity;
42
53
  this.bbox = bbox;
54
+ this.scheduleAmbientOcclusion(new AmbientOcclusionComputation(bbox, 10 * RADIUS, dataPoint));
55
+ }
56
+ recolor(colors) {
57
+ if (colors && colors.palette.length > 0 && colors.columnByCell.length !== this.count) {
58
+ return false;
59
+ }
60
+ this.paletteColors = writeColumns(this.dataUV, colors);
61
+ this.texturePalette.loadBitmap(createPaletteBitmap(this.paletteColors, this._opacity));
62
+ this.painterPointsCloud.setUV(this.dataUV);
63
+ return true;
43
64
  }
44
65
  get somaRadius() {
45
66
  return this.painterPointsCloud.radiusMultiplier;
@@ -64,34 +85,72 @@ export class PainterCellInfos extends TgdPainterGroup {
64
85
  this.texturePalette.loadBitmap(createPaletteBitmap(this.paletteColors, next));
65
86
  this.context.paint();
66
87
  }
88
+ scheduleAmbientOcclusion(computation) {
89
+ if (computation.done)
90
+ return;
91
+ const runSlice = (timeRemaining) => {
92
+ this.cancelAmbientOcclusion = null;
93
+ let done = computation.advance(AO_CHUNK_SIZE);
94
+ while (!done && timeRemaining() > AO_MIN_BUDGET_MS) {
95
+ done = computation.advance(AO_CHUNK_SIZE);
96
+ }
97
+ if (!done) {
98
+ schedule();
99
+ return;
100
+ }
101
+ computation.writeInto(this.dataUV);
102
+ this.painterPointsCloud.setUV(this.dataUV);
103
+ this.context.paint();
104
+ };
105
+ const schedule = () => {
106
+ if (typeof requestIdleCallback === "function") {
107
+ const handle = requestIdleCallback((deadline) => runSlice(() => deadline.timeRemaining()));
108
+ this.cancelAmbientOcclusion = () => cancelIdleCallback(handle);
109
+ }
110
+ else {
111
+ const handle = setTimeout(() => {
112
+ const start = performance.now();
113
+ runSlice(() => AO_FALLBACK_SLICE_MS - (performance.now() - start));
114
+ }, 0);
115
+ this.cancelAmbientOcclusion = () => clearTimeout(handle);
116
+ }
117
+ };
118
+ schedule();
119
+ }
67
120
  delete() {
121
+ var _a;
122
+ (_a = this.cancelAmbientOcclusion) === null || _a === void 0 ? void 0 : _a.call(this);
123
+ this.cancelAmbientOcclusion = null;
68
124
  this.texturePalette.delete();
69
125
  super.delete();
70
126
  }
71
127
  }
72
- const UNCOLORED_FALLBACK = "hsl(210, 100%, 50%)";
73
- function parseCellInfos(cellInfos, bbox) {
74
- var _a;
75
- const columnByColor = new Map();
76
- const paletteColors = [];
77
- let hasUncolored = false;
78
- for (const { color } of cellInfos) {
79
- if (color === undefined) {
80
- hasUncolored = true;
81
- continue;
82
- }
83
- if (columnByColor.has(color))
84
- continue;
85
- columnByColor.set(color, paletteColors.length);
86
- paletteColors.push(color);
87
- }
88
- const hasColors = paletteColors.length > 0;
89
- const uncoloredColumn = hasColors && hasUncolored ? paletteColors.length : -1;
90
- if (uncoloredColumn >= 0)
91
- paletteColors.push(UNCOLORED_FALLBACK);
92
- const columnU = (index) => (index + 0.5) / paletteColors.length;
93
- const dataPoint = [];
94
- const dataUV = [];
128
+ function packPositions(positions) {
129
+ const count = Math.floor(positions.length / 3);
130
+ const dataPoint = new Float32Array(4 * count);
131
+ for (let soma = 0; soma < count; soma++) {
132
+ dataPoint[soma * 4] = positions[soma * 3];
133
+ dataPoint[soma * 4 + 1] = positions[soma * 3 + 1];
134
+ dataPoint[soma * 4 + 2] = positions[soma * 3 + 2];
135
+ dataPoint[soma * 4 + 3] = 1;
136
+ }
137
+ return dataPoint;
138
+ }
139
+ function parsePositions(cellInfos) {
140
+ const dataPoint = new Float32Array(4 * cellInfos.length);
141
+ let index = 0;
142
+ for (const { position } of cellInfos) {
143
+ dataPoint[index++] = position[0];
144
+ dataPoint[index++] = position[1];
145
+ dataPoint[index++] = position[2];
146
+ dataPoint[index++] = 1;
147
+ }
148
+ return dataPoint;
149
+ }
150
+ function addSomaBounds(dataPoint, bbox) {
151
+ const count = dataPoint.length >> 2;
152
+ if (count === 0)
153
+ return;
95
154
  let centerX = 0;
96
155
  let centerY = 0;
97
156
  let centerZ = 0;
@@ -101,8 +160,10 @@ function parseCellInfos(cellInfos, bbox) {
101
160
  let maxX = Number.NEGATIVE_INFINITY;
102
161
  let maxY = Number.NEGATIVE_INFINITY;
103
162
  let maxZ = Number.NEGATIVE_INFINITY;
104
- for (const { position, color } of cellInfos) {
105
- const [x, y, z] = position;
163
+ for (let soma = 0; soma < count; soma++) {
164
+ const x = dataPoint[soma * 4];
165
+ const y = dataPoint[soma * 4 + 1];
166
+ const z = dataPoint[soma * 4 + 2];
106
167
  centerX += x;
107
168
  centerY += y;
108
169
  centerZ += z;
@@ -112,22 +173,8 @@ function parseCellInfos(cellInfos, bbox) {
112
173
  maxX = Math.max(maxX, x);
113
174
  maxY = Math.max(maxY, y);
114
175
  maxZ = Math.max(maxZ, z);
115
- dataPoint.push(x, y, z, 1);
116
- let u = 0.5;
117
- if (hasColors) {
118
- if (color !== undefined) {
119
- u = columnU((_a = columnByColor.get(color)) !== null && _a !== void 0 ? _a : 0);
120
- }
121
- else if (uncoloredColumn >= 0) {
122
- u = columnU(uncoloredColumn);
123
- }
124
- else {
125
- u = columnU(0);
126
- }
127
- }
128
- dataUV.push(u, 0.5);
129
176
  }
130
- const invCount = 1 / cellInfos.length;
177
+ const invCount = 1 / count;
131
178
  centerX *= invCount;
132
179
  centerY *= invCount;
133
180
  centerZ *= invCount;
@@ -136,16 +183,60 @@ function parseCellInfos(cellInfos, bbox) {
136
183
  const radiusZ = Math.max(Math.abs(maxZ - centerZ), Math.abs(centerZ - minZ));
137
184
  bbox.addSphere(centerX + radiusX, centerY + radiusY, centerZ + radiusZ, RADIUS);
138
185
  bbox.addSphere(centerX - radiusX, centerY - radiusY, centerZ - radiusZ, RADIUS);
139
- const options = {
140
- dataPoint: new Float32Array(dataPoint),
141
- dataUV: new Float32Array(dataUV),
142
- };
143
- return {
144
- paletteColors: hasColors ? paletteColors : null,
145
- painterPointsCloudOptions: options,
146
- };
147
186
  }
148
- function createCategoricalPalette(colors, rows) {
187
+ function columnForCell(colors, cell) {
188
+ const column = cell < colors.columnByCell.length ? colors.columnByCell[cell] : 0;
189
+ return Math.min(column, colors.palette.length - 1);
190
+ }
191
+ function writeColumns(dataUV, colors) {
192
+ if (!colors || colors.palette.length === 0)
193
+ return null;
194
+ const { palette } = colors;
195
+ const width = palette.length;
196
+ const count = dataUV.length >> 1;
197
+ for (let cell = 0; cell < count; cell++) {
198
+ dataUV[cell * 2] = (columnForCell(colors, cell) + 0.5) / width;
199
+ }
200
+ return palette;
201
+ }
202
+ export function hiddenSomaMask(colors, count, into) {
203
+ if (!(colors === null || colors === void 0 ? void 0 : colors.palette.includes(false)))
204
+ return null;
205
+ const { palette } = colors;
206
+ const hidden = (into === null || into === void 0 ? void 0 : into.length) === count ? into : new Float32Array(count);
207
+ for (let cell = 0; cell < count; cell++) {
208
+ hidden[cell] = palette[columnForCell(colors, cell)] === false ? 1 : 0;
209
+ }
210
+ return hidden;
211
+ }
212
+ export function cellPaletteFromCellInfos(cellInfos) {
213
+ var _a;
214
+ const columnByColor = new Map();
215
+ const palette = [];
216
+ let hasUncolored = false;
217
+ for (const { color } of cellInfos) {
218
+ if (color === undefined) {
219
+ hasUncolored = true;
220
+ continue;
221
+ }
222
+ if (columnByColor.has(color))
223
+ continue;
224
+ columnByColor.set(color, palette.length);
225
+ palette.push(color);
226
+ }
227
+ if (palette.length === 0)
228
+ return null;
229
+ const uncoloredColumn = hasUncolored ? palette.length : 0;
230
+ if (hasUncolored)
231
+ palette.push(null);
232
+ const columnByCell = new Uint16Array(cellInfos.length);
233
+ let cell = 0;
234
+ for (const { color } of cellInfos) {
235
+ columnByCell[cell++] = color === undefined ? uncoloredColumn : ((_a = columnByColor.get(color)) !== null && _a !== void 0 ? _a : 0);
236
+ }
237
+ return { palette, columnByCell };
238
+ }
239
+ function createPalette(colors, rows) {
149
240
  const width = colors.length;
150
241
  const canvas = document.createElement("canvas");
151
242
  canvas.width = width;
@@ -153,22 +244,29 @@ function createCategoricalPalette(colors, rows) {
153
244
  const ctx = canvas.getContext("2d");
154
245
  if (!ctx)
155
246
  return canvas;
156
- for (let x = 0; x < width; x++) {
157
- ctx.fillStyle = colors[x];
158
- ctx.fillRect(x, 0, 1, rows);
159
- }
160
247
  const shade = ctx.createLinearGradient(0, 0, 0, rows);
161
248
  shade.addColorStop(0, "rgba(0, 0, 0, 0)");
162
249
  shade.addColorStop(1, "rgba(0, 0, 0, 0.55)");
163
- ctx.fillStyle = shade;
164
- ctx.fillRect(0, 0, width, rows);
250
+ const ramp = ctx.createLinearGradient(0, 0, 0, rows);
251
+ const lastStop = DEFAULT_PALETTE_COLORS.length - 1;
252
+ for (let stop = 0; stop <= lastStop; stop++) {
253
+ ramp.addColorStop(stop / lastStop, DEFAULT_PALETTE_COLORS[stop]);
254
+ }
255
+ for (let x = 0; x < width; x++) {
256
+ const color = colors[x];
257
+ if (color === false)
258
+ continue;
259
+ ctx.fillStyle = color !== null && color !== void 0 ? color : ramp;
260
+ ctx.fillRect(x, 0, 1, rows);
261
+ if (color === null)
262
+ continue;
263
+ ctx.fillStyle = shade;
264
+ ctx.fillRect(x, 0, 1, rows);
265
+ }
165
266
  return canvas;
166
267
  }
167
268
  function createPaletteBitmap(paletteColors, opacity) {
168
- const canvas = paletteColors
169
- ? createCategoricalPalette(paletteColors, PALETTE_AO_ROWS)
170
- : tgdCanvasCreatePalette(DEFAULT_PALETTE_COLORS, 1);
171
- return applyCanvasOpacity(canvas, opacity);
269
+ return applyCanvasOpacity(createPalette(paletteColors !== null && paletteColors !== void 0 ? paletteColors : [null], PALETTE_AO_ROWS), opacity);
172
270
  }
173
271
  function applyCanvasOpacity(canvas, opacity) {
174
272
  if (opacity >= 1)
@@ -177,8 +275,10 @@ function applyCanvasOpacity(canvas, opacity) {
177
275
  if (!ctx)
178
276
  return canvas;
179
277
  const image = ctx.getImageData(0, 0, canvas.width, canvas.height);
180
- const alpha = Math.round(clamp01(opacity) * 255);
278
+ const alpha = Math.max(1, Math.round(clamp01(opacity) * 255));
181
279
  for (let i = 3; i < image.data.length; i += 4) {
280
+ if (image.data[i] === 0)
281
+ continue;
182
282
  image.data[i] = alpha;
183
283
  }
184
284
  ctx.putImageData(image, 0, 0);
@@ -189,12 +289,4 @@ function clamp01(value) {
189
289
  return 1;
190
290
  return Math.min(1, Math.max(0, value));
191
291
  }
192
- function middleLuminance(dataUV) {
193
- if (!dataUV)
194
- return;
195
- for (let i = 1; i < dataUV.length; i += 2) {
196
- dataUV[i] = 0.5;
197
- }
198
- return dataUV;
199
- }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1jZWxsLWluZm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zb21hcy1vbmx5L21hbmFnZXIvcGFpbnRlci1jZWxsLWluZm9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBRWQsZUFBZSxFQUNmLFlBQVksRUFDWixzQkFBc0IsR0FDdkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU14RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFJbEIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBRzNCLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixxQkFBcUI7Q0FDdEIsQ0FBQztBQVNGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBUW5ELFlBQ2tCLE9BQW1CLEVBQ25DLE9BQWdDOztRQUVoQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sRUFBRSxhQUFhLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBQSxPQUFPLENBQUMsT0FBTyxtQ0FBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7WUFDL0MsTUFBTSxFQUFFO2dCQUNOLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLEtBQUssRUFBRSxlQUFlO2dCQUN0QixL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
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1jZWxsLWluZm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zb21hcy1vbmx5L21hbmFnZXIvcGFpbnRlci1jZWxsLWluZm9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQW1CLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFJbEIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBRzNCLE1BQU0sYUFBYSxHQUFHLEtBQU0sQ0FBQztBQUU3QixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUcvQixNQUFNLHNCQUFzQixHQUFHO0lBQzdCLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIscUJBQXFCO0NBQ3RCLENBQUM7QUFpQkYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFvQm5ELFlBQ2tCLE9BQW1CLEVBQ25DLE9BQWdDOztRQUVoQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTO1lBQ2pDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNsQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQUEsT0FBTyxDQUFDLFNBQVMsbUNBQUksRUFBRSxDQUFDLENBQUM7UUFDNUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJ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QWEsQ0FBQyxTQUF1QjtJQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzlDLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN4QyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEQsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBU0QsU0FBUyxjQUFjLENBQUMsU0FBaUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNyQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FB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
@@ -1,8 +1,8 @@
1
1
  import { TgdPainter } from "@tolokoban/tgd";
2
2
  import type { TgdContext, TgdTexture2D } from "@tolokoban/tgd";
3
3
  export interface PainterSomaCloudOptions {
4
- dataPoint: Float32Array;
5
- dataUV: Float32Array;
4
+ dataPoint: Float32Array<ArrayBuffer>;
5
+ dataUV: Float32Array<ArrayBuffer>;
6
6
  texture: TgdTexture2D;
7
7
  radiusMultiplier?: number;
8
8
  glowColor?: [number, number, number];
@@ -17,9 +17,11 @@ export declare class PainterSomaCloud extends TgdPainter {
17
17
  private readonly glowSwell;
18
18
  private readonly program;
19
19
  private readonly vao;
20
+ private readonly uvBufferIndex;
20
21
  private readonly glowBufferIndex;
21
22
  private glowWarned;
22
23
  constructor(context: TgdContext, options: PainterSomaCloudOptions);
24
+ setUV(dataUV: Readonly<Float32Array>): void;
23
25
  setGlow(glow: Readonly<Float32Array>): void;
24
26
  paint(): void;
25
27
  delete(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"painter-soma-cloud.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/painter-soma-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAMX,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA+B/D,MAAM,WAAW,uBAAuB;IAEtC,SAAS,EAAE,YAAY,CAAC;IAExB,MAAM,EAAE,YAAY,CAAC;IAErB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,qBAAa,gBAAiB,SAAQ,UAAU;aAc5B,OAAO,EAAE,UAAU;IAbrC,SAAgB,KAAK,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IAErC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,UAAU,CAAS;gBAGT,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,uBAAuB;IAyClC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAwBpC,KAAK;IAcL,MAAM;CAIP"}
1
+ {"version":3,"file":"painter-soma-cloud.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/painter-soma-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAMX,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAuC/D,MAAM,WAAW,uBAAuB;IAOtC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAErC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,qBAAa,gBAAiB,SAAQ,UAAU;aAe5B,OAAO,EAAE,UAAU;IAdrC,SAAgB,KAAK,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IAErC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,UAAU,CAAS;gBAGT,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,uBAAuB;IAqDlC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC;IAgBpC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAwBpC,KAAK;IAcL,MAAM;CAIP"}
@@ -7,6 +7,7 @@ const GLOW_RIM_START = 0.9;
7
7
  const GLOW_RIM_COLOR = [0.3, 0.26, 0.2];
8
8
  const GLOW_BIAS = 0.4;
9
9
  const DEFAULT_GLOW_SWELL = 0.7;
10
+ const HIDDEN_ALPHA = 0.5 / 255;
10
11
  export class PainterSomaCloud extends TgdPainter {
11
12
  constructor(context, options) {
12
13
  var _a, _b, _c;
@@ -18,9 +19,8 @@ export class PainterSomaCloud extends TgdPainter {
18
19
  this.glowColor = (_b = options.glowColor) !== null && _b !== void 0 ? _b : DEFAULT_GLOW_COLOR;
19
20
  this.glowSwell = (_c = options.glowSwell) !== null && _c !== void 0 ? _c : DEFAULT_GLOW_SWELL;
20
21
  this.count = options.dataUV.length >> 1;
21
- const instances = new TgdDataset({ attPoint: "vec4", attUV: "vec2" }, { divisor: 1 });
22
- instances.set("attPoint", options.dataPoint);
23
- instances.set("attUV", options.dataUV);
22
+ const points = new TgdDataset({ attPoint: "vec4" }, { divisor: 1, data: options.dataPoint.buffer });
23
+ const uv = new TgdDataset({ attUV: "vec2" }, { divisor: 1, usage: "DYNAMIC_DRAW", data: options.dataUV.buffer });
24
24
  const glow = new TgdDataset({ attGlow: "float" }, {
25
25
  divisor: 1,
26
26
  usage: "DYNAMIC_DRAW",
@@ -28,11 +28,20 @@ export class PainterSomaCloud extends TgdPainter {
28
28
  });
29
29
  const billboards = new TgdDataset({ attPointCoord: "vec2" });
30
30
  billboards.set("attPointCoord", new Float32Array([-1, -1, +1, -1, +1, +1, -1, +1]));
31
- const datasets = [instances, glow, billboards];
31
+ const datasets = [points, uv, glow, billboards];
32
+ this.uvBufferIndex = datasets.indexOf(uv);
32
33
  this.glowBufferIndex = datasets.indexOf(glow);
33
34
  this.program = createProgram(context, this.glowColor, this.glowSwell);
34
35
  this.vao = new TgdVertexArray(context.gl, this.program, datasets);
35
36
  }
37
+ setUV(dataUV) {
38
+ const buffer = this.vao.getBuffer(this.uvBufferIndex);
39
+ if (!buffer)
40
+ return;
41
+ const { gl } = this.context;
42
+ buffer.bind();
43
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataUV);
44
+ }
36
45
  setGlow(glow) {
37
46
  const buffer = this.vao.getBuffer(this.glowBufferIndex);
38
47
  if (!buffer || glow.length !== this.count) {
@@ -85,19 +94,16 @@ function createProgram(context, glowColor, glowSwell) {
85
94
  varying: {
86
95
  varColor: "vec4",
87
96
  varPointCoord: "vec2",
88
- varDepth: "float",
89
97
  varGlow: "float",
90
98
  },
91
99
  mainCode: [
92
100
  "varColor = texture(uniTexture, attUV);",
101
+ `if (varColor.a < ${HIDDEN_ALPHA.toFixed(8)}) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); return; }`,
93
102
  `float glow = pow(attGlow, ${GLOW_BIAS.toFixed(6)});`,
94
103
  "varGlow = glow;",
95
104
  `float radius = attPoint.w * uniRadiusMultiplier * (1.0 + glow * ${glowSwell.toFixed(6)});`,
96
105
  "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
97
106
  "gl_Position = uniProjectionMatrix * point;",
98
- "vec4 depth = point + vec4(0, 0, radius, 0);",
99
- "vec4 screenDepth = uniProjectionMatrix * depth;",
100
- "varDepth = (gl_Position.z - screenDepth.z) * .5;",
101
107
  "vec4 shift = point + vec4(radius, radius, 0, 0);",
102
108
  "vec4 screenShift = uniProjectionMatrix * shift;",
103
109
  "float pointSize = abs(screenShift.y - gl_Position.y);",
@@ -109,23 +115,11 @@ function createProgram(context, glowColor, glowSwell) {
109
115
  varying: {
110
116
  varColor: "vec4",
111
117
  varPointCoord: "vec2",
112
- varDepth: "float",
113
118
  varGlow: "float",
114
119
  },
115
120
  outputs: { FragColor: "vec4" },
116
121
  functions: {
117
- render: [
118
- "vec4 render(vec4 color) {",
119
- TgdPainterPointsCloud.fragCodeSphere({
120
- enableSpecular: true,
121
- specularExponent: 50,
122
- specularIntensity: 0.33,
123
- shadowIntensity: 0.5,
124
- shadowThickness: 1,
125
- light: 1,
126
- }),
127
- "}",
128
- ],
122
+ render: ["vec4 render(vec4 color) {", sphereShadingWithoutDepthWrite(), "}"],
129
123
  },
130
124
  mainCode: [
131
125
  `vec3 glowColor = vec3(${red.toFixed(6)}, ${green.toFixed(6)}, ${blue.toFixed(6)});`,
@@ -140,4 +134,21 @@ function createProgram(context, glowColor, glowSwell) {
140
134
  }).code;
141
135
  return new TgdProgram(context.gl, { vert, frag });
142
136
  }
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1zb21hLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zb21hcy1vbmx5L21hbmFnZXIvcGFpbnRlci1zb21hLWNsb3VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixNQUFNLGtCQUFrQixHQUE2QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFckUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUV6QixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFFMUIsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBRTNCLE1BQU0sY0FBYyxHQUE2QixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFbEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBTXRCLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBOEIvQixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsVUFBVTtJQWE5QyxZQUNrQixPQUFtQixFQUNuQyxPQUFnQzs7UUFFaEMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFIVixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBSDdCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFPekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFBLE9BQU8sQ0FBQyxnQkFBZ0IsbUNBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBQSxPQUFPLENB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
137
+ function sphereShadingWithoutDepthWrite() {
138
+ const shading = TgdPainterPointsCloud.fragCodeSphere({
139
+ enableSpecular: true,
140
+ specularExponent: 50,
141
+ specularIntensity: 0.33,
142
+ shadowIntensity: 0.5,
143
+ shadowThickness: 1,
144
+ light: 1,
145
+ depthPrecision: "high",
146
+ });
147
+ const statements = Array.isArray(shading) ? shading : [shading];
148
+ const kept = statements.filter((statement) => typeof statement === "string" && !statement.includes("gl_FragDepth"));
149
+ if (kept.length === statements.length) {
150
+ console.error("PainterSomaCloud: no gl_FragDepth write found in tgd's fragCodeSphere — the soma cloud is now fill-rate bound. Check whether tgd gained an option to drop it.");
151
+ }
152
+ return kept;
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1zb21hLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zb21hcy1vbmx5L21hbmFnZXIvcGFpbnRlci1zb21hLWNsb3VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixNQUFNLGtCQUFrQixHQUE2QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFckUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUV6QixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFFMUIsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBRTNCLE1BQU0sY0FBYyxHQUE2QixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFbEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBTXRCLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBUS9CLE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFtQy9CLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxVQUFVO0lBYzlDLFlBQ2tCLE9BQW1CLEVBQ25DLE9BQWdDOztRQUVoQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUhWLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFIN0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQU96QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQUEsT0FBTyxDQUFDLGdCQUFnQixtQ0FBSSxDQUFDLENB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
@@ -0,0 +1,15 @@
1
+ import { TgdContext } from "@tolokoban/tgd";
2
+ export declare class SomaPicker {
3
+ private readonly onscreenContext;
4
+ private readonly offscreenCanvas;
5
+ private readonly context;
6
+ private readonly painter;
7
+ private pending;
8
+ private isDeleted;
9
+ constructor(onscreenContext: TgdContext, positions: Float32Array);
10
+ setHidden(hidden: Readonly<Float32Array> | null): void;
11
+ pick(xClip: number, yClip: number, radiusMultiplier: number, searchRadiusInPixels: number): Promise<number | null>;
12
+ private readIndexNear;
13
+ delete(): void;
14
+ }
15
+ //# sourceMappingURL=soma-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soma-picker.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/soma-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EASX,MAAM,gBAAgB,CAAC;AAoBxB,qBAAa,UAAU;IAgBnB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAflC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAS7C,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,SAAS,CAAS;gBAGP,eAAe,EAAE,UAAU,EAE5C,SAAS,EAAE,YAAY;IAyBzB,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI;IAc/C,IAAI,CACF,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4CzB,OAAO,CAAC,aAAa;IA8BrB,MAAM;CAOP"}