@openbraininstitute/morphoviewer 0.35.2 → 0.37.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 (81) hide show
  1. package/dist/behaviors/framing.d.ts +10 -0
  2. package/dist/behaviors/framing.d.ts.map +1 -0
  3. package/dist/behaviors/framing.js +19 -0
  4. package/dist/behaviors/index.d.ts +2 -0
  5. package/dist/behaviors/index.d.ts.map +1 -1
  6. package/dist/behaviors/index.js +3 -1
  7. package/dist/behaviors/tap-guard.d.ts +17 -0
  8. package/dist/behaviors/tap-guard.d.ts.map +1 -0
  9. package/dist/behaviors/tap-guard.js +60 -0
  10. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts +6 -0
  11. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.d.ts.map +1 -0
  12. package/dist/components/morpho-viewer-small-circuit/painter/cached-cell-loader.js +12 -0
  13. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts +3 -0
  14. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.d.ts.map +1 -0
  15. package/dist/components/morpho-viewer-small-circuit/painter/dedupe-by-id.js +14 -0
  16. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +6 -4
  17. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
  18. package/dist/components/morpho-viewer-small-circuit/painter/manager.js +156 -83
  19. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +8 -1
  20. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -1
  21. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js +57 -21
  22. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts +3 -0
  23. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts.map +1 -1
  24. package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.js +28 -6
  25. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +3 -0
  26. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -1
  27. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +42 -28
  28. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts +5 -0
  29. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.d.ts.map +1 -0
  30. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/index.js +4 -0
  31. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts +12 -0
  32. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.d.ts.map +1 -0
  33. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas-id.js +79 -0
  34. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts +19 -0
  35. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.d.ts.map +1 -0
  36. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.js +55 -0
  37. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts +9 -0
  38. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.d.ts.map +1 -0
  39. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.js +34 -0
  40. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts +3 -0
  41. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.d.ts.map +1 -0
  42. package/dist/components/morpho-viewer-small-circuit/painter/same-cell.js +15 -0
  43. package/dist/components/morpho-viewer-small-circuit/types.d.ts +1 -0
  44. package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
  45. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts +19 -4
  46. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts.map +1 -1
  47. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.js +43 -19
  48. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +26 -5
  49. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
  50. package/dist/components/morpho-viewer-somas-only/manager/manager.js +196 -49
  51. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts +15 -3
  52. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts.map +1 -1
  53. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +214 -86
  54. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts +4 -2
  55. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.d.ts.map +1 -1
  56. package/dist/components/morpho-viewer-somas-only/manager/painter-soma-cloud.js +33 -22
  57. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts +15 -0
  58. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.d.ts.map +1 -0
  59. package/dist/components/morpho-viewer-somas-only/manager/soma-picker.js +184 -0
  60. package/dist/components/morpho-viewer-somas-only/types.d.ts +8 -1
  61. package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
  62. package/dist/morphology-picking/index.d.ts +1 -0
  63. package/dist/morphology-picking/index.d.ts.map +1 -1
  64. package/dist/morphology-picking/index.js +2 -1
  65. package/dist/morphology-picking/pick-color-codec.d.ts +4 -0
  66. package/dist/morphology-picking/pick-color-codec.d.ts.map +1 -0
  67. package/dist/morphology-picking/pick-color-codec.js +14 -0
  68. package/dist/package.json +1 -1
  69. package/dist/painters/overlay-interaction.d.ts +2 -0
  70. package/dist/painters/overlay-interaction.d.ts.map +1 -1
  71. package/dist/painters/overlay-interaction.js +11 -1
  72. package/dist/utils.d.ts +0 -3
  73. package/dist/utils.d.ts.map +1 -1
  74. package/dist/utils.js +1 -19
  75. package/package.json +1 -1
  76. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts +0 -9
  77. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.d.ts.map +0 -1
  78. package/dist/components/morpho-viewer-small-circuit/painter/still-pointer.js +0 -9
  79. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts +0 -3
  80. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts.map +0 -1
  81. package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.js +0 -24
@@ -0,0 +1,79 @@
1
+ import { TgdDataset, TgdPainter, TgdProgram, TgdShaderFragment, TgdShaderVertex, TgdVertexArray, } from "@tolokoban/tgd";
2
+ import { glslEncodePickColor } from "./../../../../morphology-picking";
3
+ export const CLOUD_FIRST_INDEX = 1 << 23;
4
+ export class PainterCellSomasId extends TgdPainter {
5
+ constructor(context, dataPoint) {
6
+ super("PainterCellSomasId");
7
+ this.context = context;
8
+ this.count = dataPoint.length / 4;
9
+ const instances = new TgdDataset({ attPoint: "vec4" }, { divisor: 1 });
10
+ instances.set("attPoint", dataPoint);
11
+ const billboards = new TgdDataset({ attPointCoord: "vec2" });
12
+ billboards.set("attPointCoord", new Float32Array([-1, -1, +1, -1, +1, +1, -1, +1]));
13
+ this.program = createIdProgram(context);
14
+ this.vao = new TgdVertexArray(context.gl, this.program, [instances, billboards]);
15
+ }
16
+ paint() {
17
+ const { context, program, vao } = this;
18
+ const { gl, camera } = context;
19
+ program.use();
20
+ program.uniform2f("uniAspectRatio", context.aspectRatioInverse, 1);
21
+ program.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
22
+ program.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
23
+ vao.bind();
24
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.count);
25
+ vao.unbind();
26
+ }
27
+ delete() {
28
+ this.program.delete();
29
+ this.vao.delete();
30
+ }
31
+ }
32
+ function createIdProgram(context) {
33
+ const vert = new TgdShaderVertex({
34
+ uniforms: {
35
+ uniAspectRatio: "vec2",
36
+ uniModelViewMatrix: "mat4",
37
+ uniProjectionMatrix: "mat4",
38
+ },
39
+ attributes: {
40
+ attPoint: "vec4",
41
+ attPointCoord: "vec2",
42
+ },
43
+ varying: {
44
+ varColor: "vec4",
45
+ varPointCoord: "vec2",
46
+ varDepth: "float",
47
+ },
48
+ mainCode: [
49
+ ...glslEncodePickColor(`gl_InstanceID + ${CLOUD_FIRST_INDEX}`),
50
+ "float radius = attPoint.w;",
51
+ "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
52
+ "gl_Position = uniProjectionMatrix * point;",
53
+ "vec4 depth = point + vec4(0, 0, radius, 0);",
54
+ "vec4 screenDepth = uniProjectionMatrix * depth;",
55
+ "varDepth = (gl_Position.z - screenDepth.z) * .5;",
56
+ "vec4 shift = point + vec4(radius, radius, 0, 0);",
57
+ "vec4 screenShift = uniProjectionMatrix * shift;",
58
+ "float pointSize = abs(screenShift.y - gl_Position.y);",
59
+ "gl_Position.xy += attPointCoord * pointSize * uniAspectRatio;",
60
+ "varPointCoord = attPointCoord;",
61
+ ],
62
+ }).code;
63
+ const frag = new TgdShaderFragment({
64
+ varying: {
65
+ varColor: "vec4",
66
+ varPointCoord: "vec2",
67
+ varDepth: "float",
68
+ },
69
+ outputs: { FragColor: "vec4" },
70
+ mainCode: [
71
+ "float z2 = 1.0 - dot(varPointCoord, varPointCoord);",
72
+ "if (z2 < 0.0) discard;",
73
+ "gl_FragDepth = gl_FragCoord.z - sqrt(z2) * varDepth;",
74
+ "FragColor = varColor;",
75
+ ],
76
+ }).code;
77
+ return new TgdProgram(context.gl, { vert, frag });
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1jZWxsLXNvbWFzLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zbWFsbC1jaXJjdWl0L3BhaW50ZXIvcGFpbnRlci1jZWxsLXNvbWFzL3BhaW50ZXItY2VsbC1zb21hcy1pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVMzRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBY3pDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBS2hELFlBQ2tCLE9BQW1CLEVBRW5DLFNBQXVCO1FBRXZCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBSlosWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUtuQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM3RCxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxF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
@@ -0,0 +1,19 @@
1
+ import { TgdBoundingBox, type TgdContext, TgdPainterGroup } from "@tolokoban/tgd";
2
+ import type { SomaCloudData } from "./soma-cloud-data";
3
+ export interface PainterCellSomasOptions extends Omit<SomaCloudData, "cells"> {
4
+ opacity?: number;
5
+ }
6
+ export declare class PainterCellSomas extends TgdPainterGroup {
7
+ readonly context: TgdContext;
8
+ private readonly texture;
9
+ private readonly palette;
10
+ private readonly _bbox;
11
+ private _opacity;
12
+ constructor(context: TgdContext, options: PainterCellSomasOptions);
13
+ get bbox(): Readonly<TgdBoundingBox>;
14
+ get opacity(): number;
15
+ set opacity(opacity: number);
16
+ private loadPalette;
17
+ delete(): void;
18
+ }
19
+ //# sourceMappingURL=painter-cell-somas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"painter-cell-somas.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell-somas/painter-cell-somas.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,UAAU,EACf,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUvD,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;IAE3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAgBD,qBAAa,gBAAiB,SAAQ,eAAe;aAOjC,OAAO,EAAE,UAAU;IANrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAGP,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,uBAAuB;IAgClC,IAAI,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,CAEnC;IAUD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAK1B;IAED,OAAO,CAAC,WAAW;IASnB,MAAM,IAAI,IAAI;CAIf"}
@@ -0,0 +1,55 @@
1
+ import { TgdBoundingBox, TgdColor, TgdPainterGroup, TgdPainterPointsCloud, TgdTexture2D, tgdCanvasCreatePalette, } from "@tolokoban/tgd";
2
+ const BBOX_RADIUS_FACTOR = 5;
3
+ export class PainterCellSomas extends TgdPainterGroup {
4
+ constructor(context, options) {
5
+ var _a;
6
+ super({ name: "PainterCellSomas" });
7
+ this.context = context;
8
+ this._bbox = new TgdBoundingBox();
9
+ const { dataPoint, dataUV } = options;
10
+ this.palette = options.palette;
11
+ this._opacity = (_a = options.opacity) !== null && _a !== void 0 ? _a : 1;
12
+ this.texture = new TgdTexture2D(context, {
13
+ params: { magFilter: "NEAREST", minFilter: "NEAREST" },
14
+ });
15
+ this.loadPalette();
16
+ for (let at = 0; at < dataPoint.length; at += 4) {
17
+ const radius = dataPoint[at + 3] * BBOX_RADIUS_FACTOR;
18
+ this._bbox.addSphere(dataPoint[at], dataPoint[at + 1], dataPoint[at + 2], radius);
19
+ }
20
+ this.add(new TgdPainterPointsCloud(context, {
21
+ name: "SomaCloud",
22
+ dataPoint,
23
+ dataUV,
24
+ texture: this.texture,
25
+ fragCode: TgdPainterPointsCloud.fragCodeSphere({
26
+ depthPrecision: "high",
27
+ enableSpecular: true,
28
+ }),
29
+ }));
30
+ }
31
+ get bbox() {
32
+ return this._bbox;
33
+ }
34
+ get opacity() {
35
+ return this._opacity;
36
+ }
37
+ set opacity(opacity) {
38
+ if (opacity === this._opacity)
39
+ return;
40
+ this._opacity = opacity;
41
+ this.loadPalette();
42
+ }
43
+ loadPalette() {
44
+ const { _opacity: opacity } = this;
45
+ const colors = opacity >= 1
46
+ ? [...this.palette]
47
+ : this.palette.map((color) => TgdColor.fromString(color).alphaMul(opacity));
48
+ this.texture.loadBitmap(tgdCanvasCreatePalette(colors));
49
+ }
50
+ delete() {
51
+ super.delete();
52
+ this.texture.delete();
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci1jZWxsLXNvbWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zbWFsbC1jaXJjdWl0L3BhaW50ZXIvcGFpbnRlci1jZWxsLXNvbWFzL3BhaW50ZXItY2VsbC1zb21hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLFFBQVEsRUFFUixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixzQkFBc0IsR0FDdkIsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQXFCN0IsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFNbkQsWUFDa0IsT0FBbUIsRUFDbkMsT0FBZ0M7O1FBRWhDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFIcEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUpwQixVQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQVE1QyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFBLE9BQU8sQ0FBQyxPQUFPLG1DQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7U0FDdkQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1lBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQ04sSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUU7WUFDakMsSUFBSSxFQUFFLFdBQVc7WUFDakIsU0FBUztZQUNULE1BQU07WUFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFJckIsUUFBUSxFQUFFLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztnQkFDN0MsY0FBYyxFQUFFLE1BQU07Z0JBQ3RCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCLENBQUM7U0FDSCxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQVVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUNWLE9BQU8sSUFBSSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNO1FBQ0osS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,9 @@
1
+ import type { MorphoViewerSmallCircuitCell } from "../../types";
2
+ export interface SomaCloudData {
3
+ cells: MorphoViewerSmallCircuitCell[];
4
+ dataPoint: Float32Array;
5
+ dataUV: Float32Array;
6
+ palette: string[];
7
+ }
8
+ export declare function buildSomaCloudData(circuit: readonly MorphoViewerSmallCircuitCell[]): SomaCloudData;
9
+ //# sourceMappingURL=soma-cloud-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soma-cloud-data.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell-somas/soma-cloud-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAYhE,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAEtC,SAAS,EAAE,YAAY,CAAC;IAExB,MAAM,EAAE,YAAY,CAAC;IAErB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AASD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,4BAA4B,EAAE,GAC/C,aAAa,CAgCf"}
@@ -0,0 +1,34 @@
1
+ const DEFAULT_SOMA_COLOR = "#888";
2
+ export function buildSomaCloudData(circuit) {
3
+ const cells = circuit.filter((cell) => Boolean(cell.somaOnly));
4
+ const palette = [];
5
+ const columnByColor = new Map();
6
+ const columns = cells.map((cell) => {
7
+ const color = somaColor(cell.color);
8
+ const known = columnByColor.get(color);
9
+ if (known !== undefined)
10
+ return known;
11
+ const column = palette.length;
12
+ palette.push(color);
13
+ columnByColor.set(color, column);
14
+ return column;
15
+ });
16
+ const dataPoint = new Float32Array(cells.length * 4);
17
+ const dataUV = new Float32Array(cells.length * 2);
18
+ cells.forEach((cell, index) => {
19
+ const [x, y, z] = cell.center;
20
+ dataPoint[index * 4] = x;
21
+ dataPoint[index * 4 + 1] = y;
22
+ dataPoint[index * 4 + 2] = z;
23
+ dataPoint[index * 4 + 3] = cell.somaRadius;
24
+ dataUV[index * 2] = (columns[index] + 0.5) / palette.length;
25
+ dataUV[index * 2 + 1] = 0.5;
26
+ });
27
+ return { cells, dataPoint, dataUV, palette };
28
+ }
29
+ function somaColor(color) {
30
+ if (!color)
31
+ return DEFAULT_SOMA_COLOR;
32
+ return typeof color === "string" ? color : color.soma;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29tYS1jbG91ZC1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zbWFsbC1jaXJjdWl0L3BhaW50ZXIvcGFpbnRlci1jZWxsLXNvbWFzL3NvbWEtY2xvdWQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQXFCbEMsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFnRDtJQUtoRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNqQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sU0FBUyxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFHOUIsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTNDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM1RCxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUdELFNBQVMsU0FBUyxDQUFDLEtBQTRDO0lBQzdELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxrQkFBa0IsQ0FBQztJQUV0QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3hELENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import type { MorphoViewerSmallCircuitCell } from "../types";
2
+ export declare function isSameCell(a: MorphoViewerSmallCircuitCell, b: MorphoViewerSmallCircuitCell): boolean;
3
+ //# sourceMappingURL=same-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-small-circuit/painter/same-cell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAiB,MAAM,UAAU,CAAC;AAe5E,wBAAgB,UAAU,CACxB,CAAC,EAAE,4BAA4B,EAC/B,CAAC,EAAE,4BAA4B,GAC9B,OAAO,CAOT"}
@@ -0,0 +1,15 @@
1
+ export function isSameCell(a, b) {
2
+ return (a.somaRadius === b.somaRadius &&
3
+ a.center.every((value, index) => value === b.center[index]) &&
4
+ a.orientation.every((value, index) => value === b.orientation[index]) &&
5
+ isSameColor(a.color, b.color));
6
+ }
7
+ function isSameColor(a, b) {
8
+ if (a === b)
9
+ return true;
10
+ if (!a || !b || typeof a === "string" || typeof b === "string")
11
+ return false;
12
+ const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
13
+ return [...keys].every((key) => a[key] === b[key]);
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtZS1jZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zbWFsbC1jaXJjdWl0L3BhaW50ZXIvc2FtZS1jZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE1BQU0sVUFBVSxVQUFVLENBQ3hCLENBQStCLEVBQy9CLENBQStCO0lBRS9CLE9BQU8sQ0FDTCxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1FBQzdCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQzlCLENBQUM7QUFDSixDQUFDO0FBR0QsU0FBUyxXQUFXLENBQ2xCLENBQXdDLEVBQ3hDLENBQXdDO0lBRXhDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFN0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQTZCLENBQUM7SUFDekYsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyJ9
@@ -17,6 +17,7 @@ export interface MorphoViewerSmallCircuitCell {
17
17
  orientation: [x: number, y: number, z: number, w: number];
18
18
  somaRadius: number;
19
19
  color?: string | SectionColors;
20
+ somaOnly?: boolean;
20
21
  }
21
22
  export interface MorphoViewerMorphologyLocationPick {
22
23
  cell: MorphoViewerSmallCircuitCell;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-small-circuit/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-small-circuit/types.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  import type { ArrayNumber3 } from "@tolokoban/tgd";
2
- export declare function computeAmbientOcclusion(bbox: {
3
- min: ArrayNumber3;
4
- max: ArrayNumber3;
5
- }, radius: number, points: Float32Array, uvs: Float32Array, intensity?: number): Float32Array;
2
+ export declare class AmbientOcclusionComputation {
3
+ private readonly bbox;
4
+ private readonly radius;
5
+ private readonly points;
6
+ private readonly totals;
7
+ private maxTotal;
8
+ private cursor;
9
+ private proximity;
10
+ private readonly radiusSquare;
11
+ private accumulator;
12
+ private readonly addNeighbor;
13
+ constructor(bbox: {
14
+ min: ArrayNumber3;
15
+ max: ArrayNumber3;
16
+ }, radius: number, points: Float32Array);
17
+ get done(): boolean;
18
+ advance(count: number): boolean;
19
+ writeInto(uvs: Float32Array): void;
20
+ }
6
21
  //# sourceMappingURL=ambient-occlusion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ambient-occlusion.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,EAC9C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,SAAS,SAAM,GACd,YAAY,CA+Cd"}
1
+ {"version":3,"file":"ambient-occlusion.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkBnD,qBAAa,2BAA2B;IAgCpC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjCzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IAEtC,OAAO,CAAC,QAAQ,CAAK;IAErB,OAAO,CAAC,MAAM,CAAK;IAGnB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAUtC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAQ1B;gBAGiB,IAAI,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,EAC9C,MAAM,EAAE,MAAM,EAEd,MAAM,EAAE,YAAY;IAMvC,IAAI,IAAI,IAAI,OAAO,CAGlB;IAGD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAyB/B,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;CASnC"}
@@ -1,24 +1,48 @@
1
1
  import { Proximity } from "./proximity";
2
- export function computeAmbientOcclusion(bbox, radius, points, uvs, intensity = 0.5) {
3
- if (bbox.min[0] > bbox.max[0]) {
4
- console.log("Skip computation for empty bounding boxes.");
5
- return uvs;
2
+ export class AmbientOcclusionComputation {
3
+ constructor(bbox, radius, points) {
4
+ this.bbox = bbox;
5
+ this.radius = radius;
6
+ this.points = points;
7
+ this.maxTotal = 0;
8
+ this.cursor = 0;
9
+ this.proximity = null;
10
+ this.accumulator = 0;
11
+ this.addNeighbor = (_x, _y, _z, _r, distSquare) => {
12
+ this.accumulator += this.radiusSquare - distSquare;
13
+ };
14
+ this.totals = new Float32Array(points.length >> 2);
15
+ this.radiusSquare = radius * radius;
6
16
  }
7
- const proximity = new Proximity(points, bbox, radius);
8
- const radiusSquare = radius * radius;
9
- let indexUV = 1;
10
- let maxAO = 0;
11
- for (let pointIndex = 0; pointIndex < points.length; pointIndex += 4) {
12
- let totalAO = 0;
13
- proximity.forEachNeighbor(pointIndex, (_X, _Y, _Z, _R, distSquare) => (totalAO += radiusSquare - distSquare));
14
- uvs[indexUV] = totalAO;
15
- maxAO = Math.max(maxAO, totalAO);
16
- indexUV += 2;
17
+ get done() {
18
+ return this.cursor >= this.totals.length || this.bbox.min[0] > this.bbox.max[0];
17
19
  }
18
- const invMaxAO = 1 / maxAO;
19
- for (let i = 1; i < uvs.length; i += 2) {
20
- uvs[i] *= invMaxAO;
20
+ advance(count) {
21
+ var _a;
22
+ if (this.done)
23
+ return true;
24
+ const proximity = ((_a = this.proximity) !== null && _a !== void 0 ? _a : (this.proximity = new Proximity(this.points, this.bbox, this.radius)));
25
+ const { totals } = this;
26
+ const end = Math.min(totals.length, this.cursor + count);
27
+ for (let soma = this.cursor; soma < end; soma++) {
28
+ this.accumulator = 0;
29
+ proximity.forEachNeighbor(soma * 4, this.addNeighbor);
30
+ const total = this.accumulator;
31
+ totals[soma] = total;
32
+ if (total > this.maxTotal)
33
+ this.maxTotal = total;
34
+ }
35
+ this.cursor = end;
36
+ return this.done;
37
+ }
38
+ writeInto(uvs) {
39
+ const { totals, maxTotal } = this;
40
+ if (maxTotal <= 0)
41
+ return;
42
+ const invMax = 1 / maxTotal;
43
+ for (let soma = 0; soma < totals.length; soma++) {
44
+ uvs[soma * 2 + 1] = totals[soma] * invMax;
45
+ }
21
46
  }
22
- return uvs;
23
47
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1iaWVudC1vY2NsdXNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNvbWFzLW9ubHkvbWFuYWdlci9hbWJpZW50LW9jY2x1c2lvbi9hbWJpZW50LW9jY2x1c2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS3hDLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsSUFBOEMsRUFDOUMsTUFBYyxFQUNkLE1BQW9CLEVBQ3BCLEdBQWlCLEVBQ2pCLFNBQVMsR0FBRyxHQUFHO0lBRWYsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUU5QixPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDMUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBR0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRXJDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxLQUFLLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxlQUFlLENBQ3ZCLFVBQVUsRUFDVixDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxVQUFrQixFQUFFLEVBQUUsQ0FDckUsQ0FBQyxPQUFPLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUN6QyxDQUFDO1FBbUJGLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDdkIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUNyQixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIn0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1iaWVudC1vY2NsdXNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNvbWFzLW9ubHkvbWFuYWdlci9hbWJpZW50LW9jY2x1c2lvbi9hbWJpZW50LW9jY2x1c2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBb0J4QyxNQUFNLE9BQU8sMkJBQTJCO0lBK0J0QyxZQUNtQixJQUE4QyxFQUM5QyxNQUFjLEVBRWQsTUFBb0I7UUFIcEIsU0FBSSxHQUFKLElBQUksQ0FBMEM7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUVkLFdBQU0sR0FBTixNQUFNLENBQWM7UUEvQi9CLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFFYixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBR1gsY0FBUyxHQUFxQixJQUFJLENBQUM7UUFXbkMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDUCxnQkFBVyxHQUFHLENBQzdCLEVBQVUsRUFDVixFQUFVLEVBQ1YsRUFBVSxFQUNWLEVBQVUsRUFDVixVQUFrQixFQUNsQixFQUFFO1lBQ0YsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUNyRCxDQUFDLENBQUM7UUFRQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFFTixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUdELE9BQU8sQ0FBQyxLQUFhOztRQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFM0IsTUFBTSxTQUFTLEdBQUcsT0FBQyxJQUFJLENBQUMsU0FBUyxvQ0FBZCxJQUFJLENBQUMsU0FBUyxHQUFLLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQztRQUMxRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3pELEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBVUQsU0FBUyxDQUFDLEdBQWlCO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksUUFBUSxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRTFCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDNUIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNoRCxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
@@ -2,18 +2,30 @@ import { TgdEvent, type TgdPainterGizmoOptions } from "@tolokoban/tgd";
2
2
  import type { MorphoViewerSignalCameraResetOptions, MorphoViewerSignalSnapshotOptions } from "../../signals";
3
3
  import type { MorphoViewerOverlayTransformEvent, MorphoViewerWorldOverlay } from "../../types";
4
4
  import type { MorphoViewerSpikes } from "../../../spikes";
5
- import type { MorphoViewerCellInfo, MorphoViewerSomasOnlyProps } from "../types";
5
+ import type { MorphoViewerCellColors, MorphoViewerCellInfo, MorphoViewerSomasOnlyProps } from "../types";
6
6
  declare class PainterManager {
7
7
  readonly eventScalebar: TgdEvent<number>;
8
8
  readonly eventSpikeTime: TgdEvent<number>;
9
+ readonly eventCellClick: TgdEvent<number>;
10
+ get cellPickingEnabled(): boolean;
11
+ set cellPickingEnabled(enabled: boolean);
12
+ private readonly tapGuard;
9
13
  readonly eventSpikePlaying: TgdEvent<boolean>;
10
14
  private _canvas;
11
15
  private _overlayCanvas;
12
16
  private _cellInfos;
17
+ private _positions;
18
+ private _cellColors;
19
+ private colorsPending;
20
+ private appliedPalette;
21
+ private hiddenSomas;
22
+ private hiddenSomasFrom;
13
23
  private _backgroundColor;
14
24
  private readonly parsedBackgroundColor;
15
25
  private painterCellInfos;
16
26
  private readonly spiking;
27
+ private somaPicker;
28
+ private _cellPickingEnabled;
17
29
  private painterOverlays;
18
30
  private readonly overlaySurface;
19
31
  private overlayInteraction;
@@ -25,14 +37,13 @@ declare class PainterManager {
25
37
  private _highlightedOverlayId;
26
38
  private _pinnedOverlayOrigin;
27
39
  private _pinTimeout;
28
- private state;
29
40
  private painterClear;
30
41
  private context;
31
42
  private orbit;
32
- private bbox;
33
43
  private scalebarCleanup;
34
44
  private readonly painterGizmo;
35
45
  private readonly adaptativeResolution;
46
+ private resetAnimations;
36
47
  private _somaRadius;
37
48
  private _neuronOpacity;
38
49
  private spacePerPixel;
@@ -65,16 +76,25 @@ declare class PainterManager {
65
76
  set spikeSpeed(speed: number);
66
77
  get spikeAfterglowInSeconds(): number;
67
78
  set spikeAfterglowInSeconds(afterglowInSeconds: number);
79
+ get cellColors(): MorphoViewerCellColors | undefined;
80
+ set cellColors(cellColors: MorphoViewerCellColors | undefined);
81
+ applyPendingColors(): void;
82
+ private get cellPalette();
83
+ private get cellCount();
84
+ get positions(): Float32Array | null;
68
85
  get cellInfos(): MorphoViewerCellInfo[];
69
- set cellInfos(cellInfos: MorphoViewerCellInfo[]);
86
+ setGeometry(positions: Float32Array | null, cellInfos: MorphoViewerCellInfo[]): void;
87
+ private rebuild;
70
88
  setOverlays(overlays: MorphoViewerWorldOverlay[] | undefined, overlaysRadius: number, overlaysMinRadiusInPixels: number): void;
71
89
  setOverlayInteraction(interactive: boolean, onTransform?: (event: MorphoViewerOverlayTransformEvent) => void): void;
72
90
  get highlightedOverlayId(): string | null;
73
91
  set highlightedOverlayId(id: string | null | undefined);
74
92
  private applyOverlays;
75
93
  private recolorInPlace;
94
+ private hiddenMask;
76
95
  readonly cameraReset: (options?: MorphoViewerSignalCameraResetOptions) => void;
77
96
  readonly snapshot: (options?: MorphoViewerSignalSnapshotOptions) => Promise<HTMLImageElement | null>;
97
+ private fitToFrame;
78
98
  private applyBBoxToCamera;
79
99
  private initialize;
80
100
  private bindOverlaySurface;
@@ -83,9 +103,10 @@ declare class PainterManager {
83
103
  private pinOverlaysAfterDrag;
84
104
  private clearPinnedOverlay;
85
105
  private _cameraChangeTimeout;
106
+ private readonly handlePointerTap;
86
107
  private handleCameraChange;
87
108
  private delete;
88
109
  }
89
110
  export type { PainterManager };
90
- export declare function useManager({ cellInfos, somaRadius, gizmo, cameraType, backgroundColor, overlays, overlaysRadius, overlaysMinRadiusInPixels, overlaysInteractive, onOverlayTransform, highlightedOverlayId, neuronOpacity, signals, spikes, spikeTime, onSpikeTimeChange, spikePlaying, onSpikePlayingChange, spikeSpeed, spikeAfterglowInSeconds, }: MorphoViewerSomasOnlyProps): PainterManager;
111
+ export declare function useManager({ positions, cellInfos, cellColors, somaRadius, gizmo, cameraType, backgroundColor, overlays, overlaysRadius, overlaysMinRadiusInPixels, overlaysInteractive, onOverlayTransform, highlightedOverlayId, onCellClick, neuronOpacity, signals, spikes, spikeTime, onSpikeTimeChange, spikePlaying, onSpikePlayingChange, spikeSpeed, spikeAfterglowInSeconds, }: MorphoViewerSomasOnlyProps): PainterManager;
91
112
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/manager.ts"],"names":[],"mappings":"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"}