@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.
- package/dist/behaviors/index.d.ts +1 -0
- package/dist/behaviors/index.d.ts.map +1 -1
- package/dist/behaviors/index.js +2 -1
- package/dist/behaviors/tap-guard.d.ts +17 -0
- package/dist/behaviors/tap-guard.d.ts.map +1 -0
- package/dist/behaviors/tap-guard.js +60 -0
- package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts +6 -0
- package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.js +12 -0
- package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts +3 -0
- package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.js +14 -0
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +4 -2
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.js +115 -59
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +8 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js +57 -21
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts +3 -0
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.js +28 -6
- 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 +42 -28
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts +5 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.js +4 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts +12 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.js +79 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts +19 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.js +55 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts +9 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.js +34 -0
- package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts +3 -0
- package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/same-cell.js +15 -0
- package/dist/components/morpho-viewer-small-circuit/types.d.ts +1 -0
- package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts +19 -4
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.js +43 -19
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +23 -4
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.js +149 -29
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts +12 -3
- 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 +168 -76
- package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts +4 -2
- package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.js +33 -22
- package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts +15 -0
- package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts.map +1 -0
- package/dist/components/morpho-viewer-somas-only/manager/soma-picker.js +184 -0
- package/dist/components/morpho-viewer-somas-only/types.d.ts +8 -1
- package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
- package/dist/morphology-picking/index.d.ts +1 -0
- package/dist/morphology-picking/index.d.ts.map +1 -1
- package/dist/morphology-picking/index.js +2 -1
- package/dist/morphology-picking/pick-color-codec.d.ts +4 -0
- package/dist/morphology-picking/pick-color-codec.d.ts.map +1 -0
- package/dist/morphology-picking/pick-color-codec.js +14 -0
- package/dist/package.json +1 -1
- package/dist/painters/overlay-interaction.d.ts +2 -0
- package/dist/painters/overlay-interaction.d.ts.map +1 -1
- package/dist/painters/overlay-interaction.js +11 -1
- package/dist/utils.d.ts +0 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -19
- package/package.json +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts +0 -9
- package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts.map +0 -1
- package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.js +0 -9
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts +0 -3
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts.map +0 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.js +0 -24
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { TgdBoundingBox, TgdPainterGroup, TgdTexture2D
|
|
2
|
-
import {
|
|
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
|
|
16
|
-
|
|
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
|
|
29
|
-
dataUV
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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 (
|
|
105
|
-
const
|
|
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 /
|
|
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
|
|
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.
|
|
164
|
-
|
|
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
|
-
|
|
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;
|
|
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
|
|
22
|
-
|
|
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 = [
|
|
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
|
-
|
|
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"}
|