@openbraininstitute/morphoviewer 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/morpho-viewer-simul/painter/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-simul/painter/manager.js +2 -2
- package/dist/components/morpho-viewer-simul/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -1
- package/dist/components/morpho-viewer-simul/painter/offscreen-painter/offscreen-painter.js +2 -2
- package/dist/components/morpho-viewer-simul/types/public.d.ts +2 -1
- package/dist/components/morpho-viewer-simul/types/public.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/index.d.ts +1 -0
- package/dist/components/morpho-viewer-small-circuit/index.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/index.js +2 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +30 -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 +341 -5
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.d.ts +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.js +2 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +2 -0
- 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 +19 -5
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts +24 -0
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.js +86 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.d.ts +19 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.js +69 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.js +65 -18
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +4 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +19 -2
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/index.d.ts +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/index.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/index.js +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/painter-location-markers.d.ts +27 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/painter-location-markers.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-location-markers/painter-location-markers.js +83 -0
- package/dist/components/morpho-viewer-small-circuit/types.d.ts +40 -1
- package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.d.ts +6 -2
- package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.js +63 -31
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +1 -0
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.js +19 -9
- package/dist/morphology-picking/index.d.ts +6 -0
- package/dist/morphology-picking/index.d.ts.map +1 -0
- package/dist/morphology-picking/index.js +5 -0
- package/dist/morphology-picking/material-index.d.ts.map +1 -0
- package/dist/morphology-picking/material-index.js +14 -0
- package/dist/morphology-picking/material-segment-index.d.ts +5 -0
- package/dist/morphology-picking/material-segment-index.d.ts.map +1 -0
- package/dist/morphology-picking/material-segment-index.js +14 -0
- package/dist/morphology-picking/section-offset.d.ts +4 -0
- package/dist/morphology-picking/section-offset.d.ts.map +1 -0
- package/dist/morphology-picking/section-offset.js +33 -0
- package/dist/morphology-picking/segment-index-codec.d.ts +4 -0
- package/dist/morphology-picking/segment-index-codec.d.ts.map +1 -0
- package/dist/morphology-picking/segment-index-codec.js +22 -0
- package/dist/morphology-picking/types.d.ts +12 -0
- package/dist/morphology-picking/types.d.ts.map +1 -0
- package/dist/morphology-picking/types.js +2 -0
- package/dist/package.json +2 -2
- package/package.json +1 -1
- package/dist/components/morpho-viewer-simul/painter/math.d.ts +0 -4
- package/dist/components/morpho-viewer-simul/painter/math.d.ts.map +0 -1
- package/dist/components/morpho-viewer-simul/painter/math.js +0 -33
- package/dist/components/morpho-viewer-simul/painter/offscreen-painter/material-index.d.ts.map +0 -1
- package/dist/components/morpho-viewer-simul/painter/offscreen-painter/material-index.js +0 -14
- /package/dist/{components/morpho-viewer-simul/painter/offscreen-painter → morphology-picking}/material-index.d.ts +0 -0
package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from "./offscreen-painter";
|
|
2
|
-
|
|
2
|
+
export * from "./segment-offscreen-painter";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNtYWxsLWNpcmN1aXQvcGFpbnRlci9vZmZzY3JlZW4tcGFpbnRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUMifQ==
|
package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare class OffscreenPainter {
|
|
|
10
10
|
private readonly onscreenContext;
|
|
11
11
|
mix: number;
|
|
12
12
|
readonly context: TgdContext;
|
|
13
|
+
resolutionDivider: number;
|
|
13
14
|
private readonly offscreenCanvas;
|
|
14
15
|
private readonly offscreenContext;
|
|
15
16
|
private readonly group;
|
|
@@ -17,6 +18,7 @@ export declare class OffscreenPainter {
|
|
|
17
18
|
private isDeleted;
|
|
18
19
|
constructor(onscreenContext: TgdContext, options: OffscreenPainterOptions);
|
|
19
20
|
getItemAt(xScreen: number, yScreen: number): MorphoViewerSmallCircuitCell | undefined;
|
|
21
|
+
getItemNear(xScreen: number, yScreen: number, radiusInPixels: number): MorphoViewerSmallCircuitCell | undefined;
|
|
20
22
|
private readonly paint;
|
|
21
23
|
delete(): void;
|
|
22
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offscreen-painter.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAKX,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"offscreen-painter.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAKX,MAAM,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,4BAA4B,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;IAC3E,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC,CAAC;CACzE;AAUD,qBAAa,gBAAgB;IAoBzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAnB3B,GAAG,SAAK;IACf,SAAgB,OAAO,EAAE,UAAU,CAAC;IAS7B,iBAAiB,SAA8B;IAEtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,SAAS,CAAS;gBAGP,eAAe,EAAE,UAAU,EAC5C,OAAO,EAAE,uBAAuB;IAkClC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS;IAiBrF,WAAW,CACT,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,4BAA4B,GAAG,SAAS;IAc3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CASpB;IAEF,MAAM;CAKP"}
|
package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { TgdContext, TgdPainterClear, TgdPainterGroup, TgdPainterState, webglPresetDepth, } from "@tolokoban/tgd";
|
|
2
|
+
import { spiralPixelOffsets } from "./../../../../morphology-picking";
|
|
2
3
|
import { vec3ToInt16 } from "./../../../../utils";
|
|
3
4
|
import { PainterCellId } from "../painter-cell";
|
|
4
5
|
const FIRST_INDEX = 1;
|
|
6
|
+
const DEFAULT_RESOLUTION_DIVIDER = 4;
|
|
5
7
|
export class OffscreenPainter {
|
|
6
8
|
constructor(onscreenContext, options) {
|
|
7
9
|
this.onscreenContext = onscreenContext;
|
|
8
10
|
this.mix = 0;
|
|
11
|
+
this.resolutionDivider = DEFAULT_RESOLUTION_DIVIDER;
|
|
9
12
|
this.offscreenCanvas = new OffscreenCanvas(1, 1);
|
|
10
13
|
this.group = new TgdPainterGroup();
|
|
11
14
|
this.isDeleted = false;
|
|
@@ -15,10 +18,8 @@ export class OffscreenPainter {
|
|
|
15
18
|
const { onscreenContext, offscreenContext, offscreenCanvas } = this;
|
|
16
19
|
offscreenContext.camera = onscreenContext.camera;
|
|
17
20
|
const { canvas } = onscreenContext;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
offscreenCanvas.width = w;
|
|
21
|
-
offscreenCanvas.height = h;
|
|
21
|
+
offscreenCanvas.width = Math.ceil(canvas.width / this.resolutionDivider);
|
|
22
|
+
offscreenCanvas.height = Math.ceil(canvas.height / this.resolutionDivider);
|
|
22
23
|
offscreenContext.paint();
|
|
23
24
|
};
|
|
24
25
|
this.circuit = options.circuit;
|
|
@@ -59,10 +60,23 @@ export class OffscreenPainter {
|
|
|
59
60
|
const index = vec3ToInt16([R * divider, G * divider, B * divider]) - FIRST_INDEX;
|
|
60
61
|
return (_a = circuit[index]) !== null && _a !== void 0 ? _a : undefined;
|
|
61
62
|
}
|
|
63
|
+
getItemNear(xScreen, yScreen, radiusInPixels) {
|
|
64
|
+
if (this.isDeleted)
|
|
65
|
+
return;
|
|
66
|
+
const { offscreenCanvas } = this;
|
|
67
|
+
const stepX = 2 / Math.max(1, offscreenCanvas.width);
|
|
68
|
+
const stepY = 2 / Math.max(1, offscreenCanvas.height);
|
|
69
|
+
for (const [dx, dy] of spiralPixelOffsets(radiusInPixels)) {
|
|
70
|
+
const found = this.getItemAt(xScreen + dx * stepX, yScreen + dy * stepY);
|
|
71
|
+
if (found)
|
|
72
|
+
return found;
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
62
76
|
delete() {
|
|
63
77
|
this.onscreenContext.eventPaint.removeListener(this.paint);
|
|
64
78
|
this.offscreenContext.delete();
|
|
65
79
|
this.isDeleted = true;
|
|
66
80
|
}
|
|
67
81
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2Zmc2NyZWVuLXBhaW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNtYWxsLWNpcmN1aXQvcGFpbnRlci9vZmZzY3JlZW4tcGFpbnRlci9vZmZzY3JlZW4tcGFpbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsRUFDZixlQUFlLEVBQ2YsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBV2hELE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQU10QixNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sZ0JBQWdCO0lBbUIzQixZQUNtQixlQUEyQixFQUM1QyxPQUFnQztRQURmLG9CQUFlLEdBQWYsZUFBZSxDQUFZO1FBbkJ2QyxRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBVVIsc0JBQWlCLEdBQUcsMEJBQTBCLENBQUM7UUFFckMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUMsVUFBSyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFFdkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQXlFVCxVQUFLLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUUzQixNQUFNLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNwRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1B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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TgdContext } from "@tolokoban/tgd";
|
|
2
|
+
import type { MorphoViewerSmallCircuitCell, MorphoViewerSmallCircuitCellData } from "../../types";
|
|
3
|
+
import type { CellSectionIndex, CellSegment } from "../painter-cell/factory/section-index";
|
|
4
|
+
export interface SegmentOffscreenPainterOptions {
|
|
5
|
+
circuit: MorphoViewerSmallCircuitCell[];
|
|
6
|
+
loadCell: (id: string) => Promise<MorphoViewerSmallCircuitCellData | null>;
|
|
7
|
+
onCellLoaded?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare class SegmentOffscreenPainter {
|
|
10
|
+
private readonly onscreenContext;
|
|
11
|
+
readonly context: TgdContext;
|
|
12
|
+
private readonly offscreenCanvas;
|
|
13
|
+
private readonly offscreenContext;
|
|
14
|
+
private readonly group;
|
|
15
|
+
private readonly cellPainters;
|
|
16
|
+
private isDeleted;
|
|
17
|
+
constructor(onscreenContext: TgdContext, options: SegmentOffscreenPainterOptions);
|
|
18
|
+
getSections(cell: MorphoViewerSmallCircuitCell): CellSectionIndex | null;
|
|
19
|
+
getSegmentNear(cell: MorphoViewerSmallCircuitCell, xScreen: number, yScreen: number, radiusInPixels: number): CellSegment | undefined;
|
|
20
|
+
private getSegmentAt;
|
|
21
|
+
private readonly paint;
|
|
22
|
+
delete(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=segment-offscreen-painter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-offscreen-painter.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/offscreen-painter/segment-offscreen-painter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAKX,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,4BAA4B,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAa3F,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;IAO3E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,qBAAa,uBAAuB;IAWhC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAVlC,SAAgB,OAAO,EAAE,UAAU,CAAC;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAE/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,SAAS,CAAS;gBAGP,eAAe,EAAE,UAAU,EAC5C,OAAO,EAAE,8BAA8B;IAmCzC,WAAW,CAAC,IAAI,EAAE,4BAA4B,GAAG,gBAAgB,GAAG,IAAI;IAWxE,cAAc,CACZ,IAAI,EAAE,4BAA4B,EAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,WAAW,GAAG,SAAS;IAa1B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CASpB;IAEF,MAAM;CAUP"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { TgdContext, TgdPainterClear, TgdPainterGroup, TgdPainterState, webglPresetDepth, } from "@tolokoban/tgd";
|
|
2
|
+
import { decodeSegmentIndex, spiralPixelOffsets } from "./../../../../morphology-picking";
|
|
3
|
+
import { PainterCell } from "../painter-cell";
|
|
4
|
+
const RESOLUTION_DIVIDER = 2;
|
|
5
|
+
export class SegmentOffscreenPainter {
|
|
6
|
+
constructor(onscreenContext, options) {
|
|
7
|
+
this.onscreenContext = onscreenContext;
|
|
8
|
+
this.offscreenCanvas = new OffscreenCanvas(1, 1);
|
|
9
|
+
this.group = new TgdPainterGroup();
|
|
10
|
+
this.cellPainters = new Map();
|
|
11
|
+
this.isDeleted = false;
|
|
12
|
+
this.paint = () => {
|
|
13
|
+
if (this.isDeleted)
|
|
14
|
+
return;
|
|
15
|
+
const { onscreenContext, offscreenContext, offscreenCanvas } = this;
|
|
16
|
+
offscreenContext.camera = onscreenContext.camera;
|
|
17
|
+
const { canvas } = onscreenContext;
|
|
18
|
+
offscreenCanvas.width = Math.ceil(canvas.width / RESOLUTION_DIVIDER);
|
|
19
|
+
offscreenCanvas.height = Math.ceil(canvas.height / RESOLUTION_DIVIDER);
|
|
20
|
+
offscreenContext.paint();
|
|
21
|
+
};
|
|
22
|
+
onscreenContext.eventPaint.addListener(this.paint);
|
|
23
|
+
const context = new TgdContext(this.offscreenCanvas, {
|
|
24
|
+
preserveDrawingBuffer: true,
|
|
25
|
+
antialias: false,
|
|
26
|
+
alpha: false,
|
|
27
|
+
depth: true,
|
|
28
|
+
name: "SegmentOffscreenPainter",
|
|
29
|
+
});
|
|
30
|
+
this.context = context;
|
|
31
|
+
context.camera = onscreenContext.camera;
|
|
32
|
+
this.offscreenContext = context;
|
|
33
|
+
context.add(new TgdPainterClear(context, { color: [0, 0, 0, 0], depth: 1 }), new TgdPainterState(context, {
|
|
34
|
+
depth: webglPresetDepth.less,
|
|
35
|
+
children: [this.group],
|
|
36
|
+
}));
|
|
37
|
+
for (const cell of options.circuit) {
|
|
38
|
+
const painter = new PainterCell(context, {
|
|
39
|
+
cell,
|
|
40
|
+
loadCell: options.loadCell,
|
|
41
|
+
matrerial: "segment",
|
|
42
|
+
onCellLoaded: () => { var _a; return (_a = options.onCellLoaded) === null || _a === void 0 ? void 0 : _a.call(options); },
|
|
43
|
+
});
|
|
44
|
+
this.cellPainters.set(cell.id, painter);
|
|
45
|
+
this.group.add(painter);
|
|
46
|
+
}
|
|
47
|
+
this.paint();
|
|
48
|
+
}
|
|
49
|
+
getSections(cell) {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
return (_b = (_a = this.cellPainters.get(cell.id)) === null || _a === void 0 ? void 0 : _a.sections) !== null && _b !== void 0 ? _b : null;
|
|
52
|
+
}
|
|
53
|
+
getSegmentNear(cell, xScreen, yScreen, radiusInPixels) {
|
|
54
|
+
if (this.isDeleted)
|
|
55
|
+
return;
|
|
56
|
+
const { offscreenCanvas } = this;
|
|
57
|
+
const stepX = 2 / Math.max(1, offscreenCanvas.width);
|
|
58
|
+
const stepY = 2 / Math.max(1, offscreenCanvas.height);
|
|
59
|
+
for (const [dx, dy] of spiralPixelOffsets(radiusInPixels)) {
|
|
60
|
+
const found = this.getSegmentAt(cell, xScreen + dx * stepX, yScreen + dy * stepY);
|
|
61
|
+
if (found)
|
|
62
|
+
return found;
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
getSegmentAt(cell, xScreen, yScreen) {
|
|
67
|
+
const sections = this.getSections(cell);
|
|
68
|
+
if (!sections)
|
|
69
|
+
return;
|
|
70
|
+
const [R, G, B] = this.offscreenContext.readPixel(xScreen, yScreen);
|
|
71
|
+
const value = (R + G * 256 + B * 256 * 256) / 0xffffff;
|
|
72
|
+
const index = decodeSegmentIndex(value, sections.length);
|
|
73
|
+
if (index < 0)
|
|
74
|
+
return;
|
|
75
|
+
return sections.get(index);
|
|
76
|
+
}
|
|
77
|
+
delete() {
|
|
78
|
+
this.onscreenContext.eventPaint.removeListener(this.paint);
|
|
79
|
+
for (const painter of this.cellPainters.values())
|
|
80
|
+
painter.delete();
|
|
81
|
+
this.offscreenContext.delete();
|
|
82
|
+
this.cellPainters.clear();
|
|
83
|
+
this.isDeleted = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC1vZmZzY3JlZW4tcGFpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc21hbGwtY2lyY3VpdC9wYWludGVyL29mZnNjcmVlbi1wYWludGVyL3NlZ21lbnQtb2Zmc2NyZWVuLXBhaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixlQUFlLEVBQ2YsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsR0FDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFjOUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFjN0IsTUFBTSxPQUFPLHVCQUF1QjtJQVVsQyxZQUNtQixlQUEyQixFQUM1QyxPQUF1QztRQUR0QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQVI3QixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1QyxVQUFLLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUU5QixpQkFBWSxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQ3ZELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFvRlQsVUFBSyxHQUFHLEdBQUcsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFFM0IsTUFBTSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDcEUsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDakQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQztZQUNuQyxlQUFlLENB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
|
package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ArrayNumber3 } from "@tolokoban/tgd";
|
|
2
|
+
import type { MorphoViewerTreeItem, MorphoViewerTreeItemType } from "../../../../morpho-viewer-simul";
|
|
3
|
+
import type { PickableSegment, SectionSegmentIndex } from "../../../../../morphology-picking";
|
|
4
|
+
export interface CellSegment extends PickableSegment {
|
|
5
|
+
index: number;
|
|
6
|
+
sonataSectionId?: number;
|
|
7
|
+
sectionType: MorphoViewerTreeItemType;
|
|
8
|
+
}
|
|
9
|
+
export declare class CellSectionIndex implements SectionSegmentIndex {
|
|
10
|
+
private readonly segments;
|
|
11
|
+
private readonly bySection;
|
|
12
|
+
add(item: MorphoViewerTreeItem, start: ArrayNumber3, end: ArrayNumber3): CellSegment;
|
|
13
|
+
get length(): number;
|
|
14
|
+
get(index: number): CellSegment | undefined;
|
|
15
|
+
getSegmentsOfSection(sectionName: string): CellSegment[];
|
|
16
|
+
getSectionType(sectionName: string): MorphoViewerTreeItemType | undefined;
|
|
17
|
+
getPointAtOffset(sectionName: string, offset: number): ArrayNumber3 | null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=section-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGjF,MAAM,WAAW,WAAY,SAAQ,eAAe;IAElD,KAAK,EAAE,MAAM,CAAC;IAEd,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AASD,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAQ9D,GAAG,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,WAAW;IAuBpF,IAAI,MAAM,IAAI,MAAM,CAEnB;IAGD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI3C,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IASxD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IASzE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;CAkB3E"}
|
package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/section-index.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export class CellSectionIndex {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.segments = [];
|
|
4
|
+
this.bySection = new Map();
|
|
5
|
+
}
|
|
6
|
+
add(item, start, end) {
|
|
7
|
+
var _a;
|
|
8
|
+
const sectionName = item.sectionId;
|
|
9
|
+
const siblings = (_a = this.bySection.get(sectionName)) !== null && _a !== void 0 ? _a : [];
|
|
10
|
+
const parsed = Number.parseInt(item.segmentId, 10);
|
|
11
|
+
const segment = {
|
|
12
|
+
index: this.segments.length,
|
|
13
|
+
sectionName,
|
|
14
|
+
segmentIndex: Number.isNaN(parsed) ? siblings.length : parsed,
|
|
15
|
+
segmentLength: distance(start, end),
|
|
16
|
+
start,
|
|
17
|
+
end,
|
|
18
|
+
sonataSectionId: item.sonataSectionId,
|
|
19
|
+
sectionType: item.type,
|
|
20
|
+
};
|
|
21
|
+
this.segments.push(segment);
|
|
22
|
+
siblings.push(segment);
|
|
23
|
+
this.bySection.set(sectionName, siblings);
|
|
24
|
+
return segment;
|
|
25
|
+
}
|
|
26
|
+
get length() {
|
|
27
|
+
return this.segments.length;
|
|
28
|
+
}
|
|
29
|
+
get(index) {
|
|
30
|
+
return this.segments[index];
|
|
31
|
+
}
|
|
32
|
+
getSegmentsOfSection(sectionName) {
|
|
33
|
+
var _a;
|
|
34
|
+
return (_a = this.bySection.get(sectionName)) !== null && _a !== void 0 ? _a : [];
|
|
35
|
+
}
|
|
36
|
+
getSectionType(sectionName) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
return (_b = (_a = this.bySection.get(sectionName)) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.sectionType;
|
|
39
|
+
}
|
|
40
|
+
getPointAtOffset(sectionName, offset) {
|
|
41
|
+
const segments = this.getSegmentsOfSection(sectionName);
|
|
42
|
+
if (segments.length === 0)
|
|
43
|
+
return null;
|
|
44
|
+
const total = segments.reduce((sum, segment) => sum + segment.segmentLength, 0);
|
|
45
|
+
if (total <= 0)
|
|
46
|
+
return segments[0].start;
|
|
47
|
+
const target = Math.min(Math.max(offset, 0), 1) * total;
|
|
48
|
+
let walked = 0;
|
|
49
|
+
for (const segment of segments) {
|
|
50
|
+
if (walked + segment.segmentLength >= target) {
|
|
51
|
+
const within = segment.segmentLength > 0 ? (target - walked) / segment.segmentLength : 0;
|
|
52
|
+
return lerp(segment.start, segment.end, within);
|
|
53
|
+
}
|
|
54
|
+
walked += segment.segmentLength;
|
|
55
|
+
}
|
|
56
|
+
return segments[segments.length - 1].end;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function lerp(from, to, alpha) {
|
|
60
|
+
return [
|
|
61
|
+
from[0] + (to[0] - from[0]) * alpha,
|
|
62
|
+
from[1] + (to[1] - from[1]) * alpha,
|
|
63
|
+
from[2] + (to[2] - from[2]) * alpha,
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
function distance([x1, y1, z1], [x2, y2, z2]) {
|
|
67
|
+
return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2) + Math.pow((z1 - z2), 2));
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc21hbGwtY2lyY3VpdC9wYWludGVyL3BhaW50ZXItY2VsbC9mYWN0b3J5L3NlY3Rpb24taW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JBLE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFDbUIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsY0FBUyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBNEVoRSxDQUFDO0lBcEVDLEdBQUcsQ0FBQyxJQUEwQixFQUFFLEtBQW1CLEVBQUUsR0FBaUI7O1FBQ3BFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsbUNBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBZ0I7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUMzQixXQUFXO1lBR1gsWUFBWSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDN0QsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1lBQ25DLEtBQUs7WUFDTCxHQUFHO1lBQ0gsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSTtTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUdELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUdELEdBQUcsQ0FBQyxLQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFtQjs7UUFDdEMsT0FBTyxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxtQ0FBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQU9ELGNBQWMsQ0FBQyxXQUFtQjs7UUFDaEMsT0FBTyxNQUFBLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxXQUFXLENBQUM7SUFDM0QsQ0FBQztJQU9ELGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsTUFBYztRQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUV6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN4RCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUVELFNBQVMsSUFBSSxDQUFDLElBQWtCLEVBQUUsRUFBZ0IsRUFBRSxLQUFhO0lBQy9ELE9BQU87UUFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztLQUNwQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFlO0lBQ3RFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFBLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFJLENBQUMsQ0FBQSxHQUFHLFNBQUEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUksQ0FBQyxDQUFBLEdBQUcsU0FBQSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ3JFLENBQUMifQ==
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { TgdBoundingBox, type TgdContext, type TgdMaterial, TgdPainterNode } from "@tolokoban/tgd";
|
|
2
2
|
import { type MorphoViewerTree } from "../../../../morpho-viewer-simul";
|
|
3
|
+
import { CellSectionIndex } from "./section-index";
|
|
3
4
|
export declare function createCellFromTree(context: TgdContext, material: TgdMaterial, tree: MorphoViewerTree, forSelection: boolean): {
|
|
4
5
|
bbox: TgdBoundingBox;
|
|
5
6
|
node: TgdPainterNode;
|
|
7
|
+
sections: CellSectionIndex;
|
|
6
8
|
};
|
|
7
9
|
//# sourceMappingURL=tree.d.ts.map
|
package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAenD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,OAAO,GACpB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAgF5E"}
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
import { TgdBoundingBox, TgdPainterNode, TgdPainterSegments, TgdPainterSegmentsData, } from "@tolokoban/tgd";
|
|
2
2
|
import { MorphoViewerTreeItemType, } from "./../../../../morpho-viewer-simul";
|
|
3
|
+
import { encodeSegmentIndex } from "./../../../../../morphology-picking";
|
|
4
|
+
import { CellSectionIndex } from "./section-index";
|
|
3
5
|
export function createCellFromTree(context, material, tree, forSelection) {
|
|
6
|
+
var _a;
|
|
7
|
+
const pending = [];
|
|
8
|
+
for (const item of tree.roots) {
|
|
9
|
+
collectSegments(undefined, item, pending);
|
|
10
|
+
}
|
|
11
|
+
const sections = new CellSectionIndex();
|
|
4
12
|
const segmentsSoma = new TgdPainterSegmentsData();
|
|
5
13
|
const segmentsNeurites = new TgdPainterSegmentsData();
|
|
6
|
-
|
|
7
|
-
|
|
14
|
+
const somaSphere = fitSomaSphere(pending);
|
|
15
|
+
let somaDrawn = false;
|
|
16
|
+
for (const segment of pending) {
|
|
17
|
+
const recorded = sections.add(segment.item, segment.start, segment.end);
|
|
18
|
+
const uv0 = makeUV(segment.parentType, recorded.index, pending.length);
|
|
19
|
+
const uv1 = makeUV(segment.item.type, recorded.index, pending.length);
|
|
20
|
+
const target = segment.isSoma ? segmentsSoma : segmentsNeurites;
|
|
21
|
+
if (segment.isSoma) {
|
|
22
|
+
const radius = somaDrawn ? 0 : somaSphere.radius;
|
|
23
|
+
somaDrawn = true;
|
|
24
|
+
target.add([...somaSphere.center, radius], [...somaSphere.center, radius], uv1, uv1);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const stubOffSoma = ((_a = segment.parent) === null || _a === void 0 ? void 0 : _a.type) === MorphoViewerTreeItemType.Soma;
|
|
28
|
+
target.add([
|
|
29
|
+
...(stubOffSoma ? somaSphere.center : segment.start),
|
|
30
|
+
stubOffSoma ? Math.min(segment.radiusStart, segment.radiusEnd) : segment.radiusStart,
|
|
31
|
+
], [...segment.end, segment.radiusEnd], stubOffSoma ? uv1 : uv0, uv1);
|
|
8
32
|
}
|
|
9
33
|
const bbox = new TgdBoundingBox();
|
|
10
34
|
for (const segments of [segmentsSoma, segmentsNeurites]) {
|
|
@@ -32,32 +56,55 @@ export function createCellFromTree(context, material, tree, forSelection) {
|
|
|
32
56
|
painterNeurites.name = "painterNeurites";
|
|
33
57
|
return {
|
|
34
58
|
bbox,
|
|
59
|
+
sections,
|
|
35
60
|
node: new TgdPainterNode({
|
|
36
61
|
children: [painterSoma, painterNeurites],
|
|
37
62
|
}),
|
|
38
63
|
};
|
|
39
64
|
}
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const u0 = computeCoordU((_a = parent === null || parent === void 0 ? void 0 : parent.type) !== null && _a !== void 0 ? _a : u1);
|
|
46
|
-
const v0 = v1;
|
|
47
|
-
const uv0 = [u0, v0];
|
|
48
|
-
if (!parent) {
|
|
49
|
-
segmentsSoma.add([item.x, item.y, item.z, item.radius], [item.x, item.y, item.z, item.radius], uv1, uv1);
|
|
65
|
+
function fitSomaSphere(pending) {
|
|
66
|
+
const points = [];
|
|
67
|
+
for (const segment of pending) {
|
|
68
|
+
if (segment.isSoma)
|
|
69
|
+
points.push({ p: segment.end, r: segment.radiusEnd });
|
|
50
70
|
}
|
|
51
|
-
|
|
52
|
-
|
|
71
|
+
if (!points.length)
|
|
72
|
+
return { center: [0, 0, 0], radius: 0 };
|
|
73
|
+
const center = [0, 0, 0];
|
|
74
|
+
for (const { p } of points) {
|
|
75
|
+
center[0] += p[0] / points.length;
|
|
76
|
+
center[1] += p[1] / points.length;
|
|
77
|
+
center[2] += p[2] / points.length;
|
|
53
78
|
}
|
|
54
|
-
|
|
55
|
-
|
|
79
|
+
let meanDistance = 0;
|
|
80
|
+
let maxRadius = 0;
|
|
81
|
+
for (const { p, r } of points) {
|
|
82
|
+
meanDistance +=
|
|
83
|
+
Math.hypot(p[0] - center[0], p[1] - center[1], p[2] - center[2]) / points.length;
|
|
84
|
+
maxRadius = Math.max(maxRadius, r);
|
|
56
85
|
}
|
|
86
|
+
return { center, radius: Math.max(meanDistance, maxRadius) };
|
|
87
|
+
}
|
|
88
|
+
function collectSegments(parent, item, pending) {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
const from = parent !== null && parent !== void 0 ? parent : item;
|
|
91
|
+
pending.push({
|
|
92
|
+
item,
|
|
93
|
+
parent,
|
|
94
|
+
parentType: (_a = parent === null || parent === void 0 ? void 0 : parent.type) !== null && _a !== void 0 ? _a : item.type,
|
|
95
|
+
start: [from.x, from.y, from.z],
|
|
96
|
+
end: [item.x, item.y, item.z],
|
|
97
|
+
radiusStart: from.radius,
|
|
98
|
+
radiusEnd: item.radius,
|
|
99
|
+
isSoma: !parent || item.type === MorphoViewerTreeItemType.Soma,
|
|
100
|
+
});
|
|
57
101
|
for (const child of (_b = item.children) !== null && _b !== void 0 ? _b : []) {
|
|
58
|
-
|
|
102
|
+
collectSegments(item, child, pending);
|
|
59
103
|
}
|
|
60
104
|
}
|
|
105
|
+
function makeUV(type, segmentIndex, segmentCount) {
|
|
106
|
+
return [computeCoordU(type), encodeSegmentIndex(segmentIndex, segmentCount)];
|
|
107
|
+
}
|
|
61
108
|
function computeCoordU(type) {
|
|
62
109
|
const types = [
|
|
63
110
|
MorphoViewerTreeItemType.Soma,
|
|
@@ -69,4 +116,4 @@ function computeCoordU(type) {
|
|
|
69
116
|
];
|
|
70
117
|
return (types.indexOf(type) + 0.5) / types.length;
|
|
71
118
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc21hbGwtY2lyY3VpdC9wYWludGVyL3BhaW50ZXItY2VsbC9mYWN0b3J5L3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLGNBQWMsRUFHZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLHNCQUFzQixHQUN2QixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFHTCx3QkFBd0IsR0FDekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWVuRCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQW1CLEVBQ25CLFFBQXFCLEVBQ3JCLElBQXNCLEVBQ3RCLFlBQXFCOztJQUlyQixNQUFNLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFJRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFD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QUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRTVELE1BQU0sTUFBTSxHQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsS0FBSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlCLFlBQVk7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuRixTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixNQUF3QyxFQUN4QyxJQUEwQixFQUMxQixPQUF5Qjs7SUFFekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksSUFBSSxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDWCxJQUFJO1FBQ0osTUFBTTtRQUNOLFVBQVUsRUFBRSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLG1DQUFJLElBQUksQ0FBQyxJQUFJO1FBQ3JDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTTtRQUN4QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07UUFHdEIsTUFBTSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssd0JBQXdCLENBQUMsSUFBSTtLQUMvRCxDQUFDLENBQUM7SUFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQUEsSUFBSSxDQUFDLFFBQVEsbUNBQUksRUFBRSxFQUFFLENBQUM7UUFDeEMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztBQUNILENBQUM7QUFTRCxTQUFTLE1BQU0sQ0FDYixJQUE4QixFQUM5QixZQUFvQixFQUNwQixZQUFvQjtJQUVwQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFNRCxTQUFTLGFBQWEsQ0FBQyxJQUE4QjtJQUNuRCxNQUFNLEtBQUssR0FBK0I7UUFDeEMsd0JBQXdCLENBQUMsSUFBSTtRQUM3Qix3QkFBd0IsQ0FBQyxJQUFJO1FBQzdCLHdCQUF3QixDQUFDLGFBQWE7UUFDdEMsd0JBQXdCLENBQUMsY0FBYztRQUN2Qyx3QkFBd0IsQ0FBQyxNQUFNO1FBQy9CLHdCQUF3QixDQUFDLE9BQU87S0FDakMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsQ0FBQyJ9
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TgdBoundingBox, type TgdContext, TgdPainterGroup } from "@tolokoban/tgd";
|
|
2
2
|
import type { MorphoViewerSmallCircuitCell, MorphoViewerSmallCircuitCellData } from "../../types";
|
|
3
|
+
import type { CellSectionIndex } from "./factory/section-index";
|
|
3
4
|
export interface PainterCellOptions {
|
|
4
5
|
name?: string;
|
|
5
6
|
matrerial?: PainterCellMaterialName;
|
|
@@ -8,7 +9,7 @@ export interface PainterCellOptions {
|
|
|
8
9
|
onCellLoaded?(bbox: TgdBoundingBox | null): void;
|
|
9
10
|
opacity?: number;
|
|
10
11
|
}
|
|
11
|
-
export type PainterCellMaterialName = "full" | "flat" | number;
|
|
12
|
+
export type PainterCellMaterialName = "full" | "flat" | "segment" | number;
|
|
12
13
|
export declare class PainterCell extends TgdPainterGroup {
|
|
13
14
|
readonly context: TgdContext;
|
|
14
15
|
protected readonly options: PainterCellOptions;
|
|
@@ -19,8 +20,10 @@ export declare class PainterCell extends TgdPainterGroup {
|
|
|
19
20
|
private readonly textureBlack;
|
|
20
21
|
private _isDeleted;
|
|
21
22
|
private _bbox;
|
|
23
|
+
private _sections;
|
|
22
24
|
constructor(context: TgdContext, options: PainterCellOptions);
|
|
23
25
|
get bbox(): Readonly<TgdBoundingBox>;
|
|
26
|
+
get sections(): CellSectionIndex | null;
|
|
24
27
|
get isDeleted(): boolean;
|
|
25
28
|
private set isDeleted(value);
|
|
26
29
|
get black(): boolean;
|
package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"painter-cell.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,UAAU,EAQf,eAAe,EAOhB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"painter-cell.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,UAAU,EAQf,eAAe,EAOhB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EACV,4BAA4B,EAC5B,gCAAgC,EAEjC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,IAAI,EAAE,4BAA4B,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;IAKvE,YAAY,CAAC,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;IAEjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAO3E,qBAAa,WAAY,SAAQ,eAAe;aAY5B,OAAO,EAAE,UAAU;IACnC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAZhD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,SAAS,CAAiC;gBAGhC,OAAO,EAAE,UAAU,EAChB,OAAO,EAAE,kBAAkB;IAuDhD,IAAI,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,CAEnC;IAQD,IAAI,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAEtC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,OAAO,KAAK,SAAS,QAIpB;IAGD,IAAI,KAAK,IAGQ,OAAO,CADvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAQvB;IAED,IAAI,OAAO,IAAI,MAAM,CAMpB;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAK1B;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;YAM1B,QAAQ;IAgDtB,MAAM,IAAI,IAAI;CAKf"}
|