@openbraininstitute/morphoviewer 0.24.21 → 0.24.23
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/README.md +26 -0
- package/lib/dist/behaviors/index.d.ts +2 -0
- package/lib/dist/behaviors/index.d.ts.map +1 -0
- package/lib/dist/behaviors/index.js +2 -0
- package/lib/dist/behaviors/space-per-pixel.d.ts +3 -0
- package/lib/dist/behaviors/space-per-pixel.d.ts.map +1 -0
- package/lib/dist/behaviors/space-per-pixel.js +13 -0
- package/lib/dist/components/controls-layout/controls-layout.d.ts +9 -0
- package/lib/dist/components/controls-layout/controls-layout.d.ts.map +1 -0
- package/lib/dist/components/controls-layout/controls-layout.js +39 -0
- package/lib/dist/components/controls-layout/controls-layout.module.css +53 -0
- package/lib/dist/components/controls-layout/index.d.ts +2 -0
- package/lib/dist/components/controls-layout/index.d.ts.map +1 -0
- package/lib/dist/components/controls-layout/index.js +2 -0
- package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.js +5 -4
- package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.module.css +61 -61
- package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts +2 -2
- package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-octree/painter/camera.js +3 -5
- package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts +2 -1
- package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-octree/painter/manager.js +5 -2
- package/lib/dist/components/morpho-viewer-octree/types.d.ts +4 -4
- package/lib/dist/components/morpho-viewer-octree/types.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-scalebar/index.d.ts +2 -0
- package/lib/dist/components/morpho-viewer-scalebar/index.d.ts.map +1 -0
- package/lib/dist/components/morpho-viewer-scalebar/index.js +2 -0
- package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts +8 -0
- package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts.map +1 -0
- package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.js +37 -0
- package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.module.css +13 -0
- package/lib/dist/components/morpho-viewer-scalebar/painter.d.ts +2 -0
- package/lib/dist/components/morpho-viewer-scalebar/painter.d.ts.map +1 -0
- package/lib/dist/components/morpho-viewer-scalebar/painter.js +61 -0
- package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +26 -7
- package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +53 -53
- package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.js +6 -4
- package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +2 -1
- package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
- package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.js +9 -1
- package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts +6 -4
- package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
- package/lib/dist/components/types.d.ts +8 -0
- package/lib/dist/components/types.d.ts.map +1 -0
- package/lib/dist/components/types.js +2 -0
- package/lib/dist/package.json +11 -2
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -32,6 +32,32 @@ Copyright (c) 2025 Open Brain Institute
|
|
|
32
32
|
|
|
33
33
|
## Release notes
|
|
34
34
|
|
|
35
|
+
### v0.24.23
|
|
36
|
+
|
|
37
|
+
- Add new `MorphoViewerScalebar` component (`lib/src/components/morpho-viewer-scalebar/`) for displaying a dynamic scale bar
|
|
38
|
+
- Renders graduated tick marks with auto-scaled units (m, mm, μm, nm, pm, fm)
|
|
39
|
+
- Accepts a `spacePerPixel` event to reactively update when the camera zooms
|
|
40
|
+
- Supports custom positioning via an optional `className` prop
|
|
41
|
+
- Add optional `scalebar` prop to `MorphoViewerSmallCircuit` and `MorphoViewerOctree`
|
|
42
|
+
- Accepts `boolean` or a CSS class name string for custom styling
|
|
43
|
+
- Switch camera from perspective to orthographic projection for `MorphoViewerSmallCircuit` and `MorphoViewerOctree`
|
|
44
|
+
- Enables accurate scale bar measurements
|
|
45
|
+
- Add `space-per-pixel` behavior (`lib/src/behaviors/`) to broadcast camera zoom level changes
|
|
46
|
+
- Rename `controls-layer/` directory to `controls-layout/` for consistency
|
|
47
|
+
- Fix CSS specificity issues by scoping canvas styles to a `.webgl` class
|
|
48
|
+
|
|
49
|
+
### v0.24.22
|
|
50
|
+
|
|
51
|
+
- Add new `ControlsLayout` component (`lib/src/components/controls-layer/`) for configurable viewer header controls
|
|
52
|
+
- Supports built-in actions: `fullscreen`, `reset-camera`, `minimize`, `close`
|
|
53
|
+
- Accepts arbitrary `React.ReactNode` elements alongside named actions
|
|
54
|
+
- Groups can be nested in arrays for flex-based layout with `space-between` justification
|
|
55
|
+
- Add `controls` prop to `MorphoViewerSmallCircuit` to allow custom header control layouts
|
|
56
|
+
- Falls back to a default layout (`reset-camera`, `fullscreen`, `close`, `minimize`) when not provided
|
|
57
|
+
- Add `onMinimize` callback prop to `MorphoViewerSmallCircuit`
|
|
58
|
+
- Replace hardcoded `<header>` markup in `MorphoViewerSmallCircuit` with the new `ControlsLayout` component
|
|
59
|
+
- Update `MorphoViewerSmallCircuit` doc page to demonstrate the configurable controls
|
|
60
|
+
|
|
35
61
|
### v0.24.21
|
|
36
62
|
|
|
37
63
|
- Add optional `gizmo` prop to `MorphoViewerSmallCircuit` for displaying an axes orientation controller
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/behaviors/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-per-pixel.d.ts","sourceRoot":"","sources":["../../src/behaviors/space-per-pixel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE1D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,cAW9E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function watchSpacePerPixel(context, event) {
|
|
2
|
+
let spacePerPixel = -1;
|
|
3
|
+
const listener = () => {
|
|
4
|
+
const value = context.camera.spacePerPixel;
|
|
5
|
+
if (value === spacePerPixel)
|
|
6
|
+
return;
|
|
7
|
+
spacePerPixel = value;
|
|
8
|
+
event.dispatch(value);
|
|
9
|
+
};
|
|
10
|
+
context.eventPaint.addListener(listener);
|
|
11
|
+
return () => context.eventPaint.removeListener(listener);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtcGVyLXBpeGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JlaGF2aW9ycy9zcGFjZS1wZXItcGl4ZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQW1CLEVBQUUsS0FBdUI7SUFDM0UsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDdEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFBO1FBQzFDLElBQUksS0FBSyxLQUFLLGFBQWE7WUFBRSxPQUFNO1FBRW5DLGFBQWEsR0FBRyxLQUFLLENBQUE7UUFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDLENBQUE7SUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN4QyxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzVELENBQUMifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export type ControlAction = "fullscreen" | "reset-camera" | "minimize" | "close";
|
|
3
|
+
export interface ControlsLayoutProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
content: (ControlAction | React.ReactNode | (ControlAction | React.ReactNode)[])[];
|
|
6
|
+
onClick?(action: ControlAction): void;
|
|
7
|
+
}
|
|
8
|
+
export declare function ControlsLayout({ className, content, onClick }: ControlsLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=controls-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-layout.d.ts","sourceRoot":"","sources":["../../../src/components/controls-layout/controls-layout.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;IACnF,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CAMlF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { classNames } from "./../../utils.js";
|
|
3
|
+
import { IconCenter } from "../icons/center.js";
|
|
4
|
+
import { IconClose } from "../icons/close.js";
|
|
5
|
+
import { IconFullscreen } from "../icons/fullscreen.js";
|
|
6
|
+
import { IconMinimize } from "../icons/minimize.js";
|
|
7
|
+
import styles from "./controls-layout.module.css";
|
|
8
|
+
export function ControlsLayout({ className, content, onClick }) {
|
|
9
|
+
return (_jsx("div", { className: classNames(className, styles.controlsLayout), children: renderContent(content, onClick) }));
|
|
10
|
+
}
|
|
11
|
+
function renderContent(content, onClick) {
|
|
12
|
+
return content.map((action, index) => {
|
|
13
|
+
if (Array.isArray(action)) {
|
|
14
|
+
return (_jsx("div", { className: styles.group, children: renderContent(action, onClick) }, index));
|
|
15
|
+
}
|
|
16
|
+
switch (action) {
|
|
17
|
+
case "close":
|
|
18
|
+
case "fullscreen":
|
|
19
|
+
case "minimize":
|
|
20
|
+
case "reset-camera":
|
|
21
|
+
return renderButton(action, onClick, index);
|
|
22
|
+
default:
|
|
23
|
+
return action;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function renderButton(action, onClick, index) {
|
|
28
|
+
const Icon = ICONS[action];
|
|
29
|
+
if (!Icon)
|
|
30
|
+
return null;
|
|
31
|
+
return (_jsx("button", { className: styles.button, type: "button", "aria-label": action, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(action), children: _jsx(Icon, {}) }, index));
|
|
32
|
+
}
|
|
33
|
+
const ICONS = {
|
|
34
|
+
"reset-camera": IconCenter,
|
|
35
|
+
close: IconClose,
|
|
36
|
+
fullscreen: IconFullscreen,
|
|
37
|
+
minimize: IconMinimize,
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHMtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29udHJvbHMtbGF5b3V0L2NvbnRyb2xzLWxheW91dC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSWpELE9BQU8sTUFBTSxNQUFNLDhCQUE4QixDQUFDO0FBVWxELE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBdUI7SUFDakYsT0FBTyxDQUNMLGNBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUN6RCxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUM1QixDQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLE9BQXVDLEVBQ3ZDLE9BQXlDO0lBRXpDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQ0wsY0FBaUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLFlBQ3JDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBRHZCLEtBQUssQ0FFVCxDQUNQLENBQUM7UUFDSixDQUFDO1FBQ0QsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxjQUFjO2dCQUNqQixPQUFPLFlBQVksQ0FBQyxNQUF1QixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRDtnQkFDRSxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLE1BQXFCLEVBQ3JCLE9BQXNELEVBQ3RELEtBQWE7SUFFYixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2QixPQUFPLENBQ0wsaUJBRUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ3hCLElBQUksRUFBQyxRQUFRLGdCQUNELE1BQU0sRUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRyxNQUFNLENBQUMsWUFFaEMsS0FBQyxJQUFJLEtBQUcsSUFOSCxLQUFLLENBT0gsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sS0FBSyxHQUFvQztJQUM3QyxjQUFjLEVBQUUsVUFBVTtJQUMxQixLQUFLLEVBQUUsU0FBUztJQUNoQixVQUFVLEVBQUUsY0FBYztJQUMxQixRQUFRLEVBQUUsWUFBWTtDQUN2QixDQUFDIn0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
.controlsLayout {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0;
|
|
4
|
+
top: 0;
|
|
5
|
+
width: 100%;
|
|
6
|
+
padding: 0.5em;
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
flex-direction: row;
|
|
10
|
+
justify-content: space-between;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: 1em;
|
|
13
|
+
|
|
14
|
+
div.group {
|
|
15
|
+
padding: 0;
|
|
16
|
+
margin: 0;
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-wrap: nowrap;
|
|
19
|
+
flex-direction: row;
|
|
20
|
+
justify-content: flex-start;
|
|
21
|
+
align-items: center;
|
|
22
|
+
gap: .25em;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
button,
|
|
26
|
+
button {
|
|
27
|
+
font: inherit;
|
|
28
|
+
width: 2.5em;
|
|
29
|
+
height: 2.5em;
|
|
30
|
+
display: grid;
|
|
31
|
+
place-items: center;
|
|
32
|
+
flex: 0 0 auto;
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
color: #fff;
|
|
35
|
+
border: 2px solid #000;
|
|
36
|
+
border-radius: 2px;
|
|
37
|
+
background: #3a3a3a;
|
|
38
|
+
margin: 0;
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
transition: all 0.3s;
|
|
41
|
+
|
|
42
|
+
&:hover {
|
|
43
|
+
background-color: #adf;
|
|
44
|
+
color: #000;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&:active {
|
|
48
|
+
background-color: rgb(0, 153, 255);
|
|
49
|
+
color: #000;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/controls-layout/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./controls-layout.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb250cm9scy1sYXlvdXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morpho-viewer-octree.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/morpho-viewer-octree.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"morpho-viewer-octree.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/morpho-viewer-octree.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAgChE"}
|
|
@@ -4,8 +4,9 @@ import React from "react";
|
|
|
4
4
|
import { classNames } from "./../../utils.js";
|
|
5
5
|
import { IconCenter } from "../icons/center.js";
|
|
6
6
|
import { IconFullscreen } from "../icons/fullscreen.js";
|
|
7
|
-
import
|
|
7
|
+
import MorphoViewerScalebar from "../morpho-viewer-scalebar/index.js";
|
|
8
8
|
import { useOctreeManager } from "./painter/manager.js";
|
|
9
|
+
import styles from "./morpho-viewer-octree.module.css";
|
|
9
10
|
export function MorphoViewerOctree(props) {
|
|
10
11
|
const ref = React.useRef(null);
|
|
11
12
|
const manager = useOctreeManager(props);
|
|
@@ -18,14 +19,14 @@ export function MorphoViewerOctree(props) {
|
|
|
18
19
|
const handleResetCamera = () => {
|
|
19
20
|
manager.resetCamera();
|
|
20
21
|
};
|
|
21
|
-
return (_jsxs("div", { className: classNames(props.className, styles.morphoViewerOctree), ref: ref, children: [_jsx(Canvas, { painterManager: manager }), _jsxs("header", { children: [_jsx("button", { type: "button", onClick: handleResetCamera, children: _jsx(IconCenter, {}) }), _jsx("button", { type: "button", onClick: handleFullscreen, children: _jsx(IconFullscreen, {}) })] })] }));
|
|
22
|
+
return (_jsxs("div", { className: classNames(props.className, styles.morphoViewerOctree), ref: ref, children: [_jsx(Canvas, { painterManager: manager }), _jsxs("header", { children: [_jsx("button", { type: "button", onClick: handleResetCamera, children: _jsx(IconCenter, {}) }), _jsx("button", { type: "button", onClick: handleFullscreen, children: _jsx(IconFullscreen, {}) })] }), props.scalebar && (_jsx(MorphoViewerScalebar, { className: props.scalebar, spacePerPixelEvent: manager.eventScalebar }))] }));
|
|
22
23
|
}
|
|
23
24
|
const Canvas = React.memo(({ painterManager }) => {
|
|
24
|
-
return (_jsx("canvas", { ref: (canvas) => {
|
|
25
|
+
return (_jsx("canvas", { className: styles.webgl, ref: (canvas) => {
|
|
25
26
|
painterManager.canvas = canvas;
|
|
26
27
|
return () => {
|
|
27
28
|
painterManager.canvas = null;
|
|
28
29
|
};
|
|
29
30
|
} }, "canvas"));
|
|
30
31
|
});
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1vY3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLW9jdHJlZS9tb3JwaG8tdmlld2VyLW9jdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxvQkFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQXNCLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJekUsT0FBTyxNQUFNLE1BQU0sbUNBQW1DLENBQUM7QUFFdkQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQThCO0lBQy9ELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQXdCLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsYUFDOUUsS0FBQyxNQUFNLElBQUMsY0FBYyxFQUFFLE9BQU8sR0FBSSxFQUNuQyw2QkFDRSxpQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsWUFDOUMsS0FBQyxVQUFVLEtBQUcsR0FDUCxFQUNULGlCQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixZQUM3QyxLQUFDLGNBQWMsS0FBRyxHQUNYLElBQ0YsRUFDUixLQUFLLENBQUMsUUFBUSxJQUFJLENBQ2pCLEtBQUMsb0JBQW9CLElBQ25CLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUN6QixrQkFBa0IsRUFBRSxPQUFPLENBQUMsYUFBYSxHQUN6QyxDQUNILElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBcUMsRUFBRSxFQUFFO0lBQ2xGLE9BQU8sQ0FDTCxpQkFFRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDdkIsR0FBRyxFQUFFLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQ3hDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQy9CLE9BQU8sR0FBRyxFQUFFO2dCQUNWLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUMsQ0FBQztRQUNKLENBQUMsSUFQRyxRQUFRLENBUVosQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
.morphoViewerOctree {
|
|
2
|
-
|
|
2
|
+
position: relative;
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
>canvas.webgl {
|
|
5
|
+
position: absolute;
|
|
6
|
+
left: 0;
|
|
7
|
+
top: 0;
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
margin: 0;
|
|
11
|
+
background-color: #000;
|
|
12
|
+
}
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
>header {
|
|
15
|
+
top: 0;
|
|
16
|
+
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
>header,
|
|
19
|
+
>footer {
|
|
20
|
+
position: absolute;
|
|
21
|
+
left: 0;
|
|
22
|
+
width: 100%;
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
padding: 1em;
|
|
25
|
+
margin: 0;
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-wrap: nowrap;
|
|
28
|
+
flex-direction: row;
|
|
29
|
+
justify-content: space-between;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: 2em;
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
>div.flex {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-wrap: nowrap;
|
|
36
|
+
flex-direction: row;
|
|
37
|
+
justify-content: flex-start;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap: 0.5em;
|
|
40
|
+
}
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
42
|
+
button {
|
|
43
|
+
font: inherit;
|
|
44
|
+
width: 2.5em;
|
|
45
|
+
height: 2.5em;
|
|
46
|
+
display: grid;
|
|
47
|
+
place-items: center;
|
|
48
|
+
flex: 0 0 auto;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
color: #fff;
|
|
51
|
+
border: 2px solid #000;
|
|
52
|
+
border-radius: 2px;
|
|
53
|
+
background: #3a3a3a;
|
|
54
|
+
margin: 0;
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
transition: all 0.3s;
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
&:hover {
|
|
59
|
+
background-color: #adf;
|
|
60
|
+
color: #000;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
.zoomSlider {
|
|
65
|
+
color: #fff;
|
|
66
|
+
flex: 0 0 auto;
|
|
67
|
+
width: 240px;
|
|
68
|
+
}
|
|
68
69
|
}
|
|
69
|
-
|
|
70
|
-
}
|
|
70
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type ArrayNumber3,
|
|
1
|
+
import { type ArrayNumber3, TgdCameraOrthographic } from "@tolokoban/tgd";
|
|
2
2
|
type BBox = {
|
|
3
3
|
min: ArrayNumber3;
|
|
4
4
|
max: ArrayNumber3;
|
|
5
5
|
};
|
|
6
6
|
export declare function makeCamera(bbox: BBox): {
|
|
7
|
-
camera:
|
|
7
|
+
camera: TgdCameraOrthographic;
|
|
8
8
|
width: number;
|
|
9
9
|
height: number;
|
|
10
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-octree/painter/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-octree/painter/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,qBAAqB,EAAiC,MAAM,gBAAgB,CAAA;AAExG,KAAK,IAAI,GAAG;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAAA;AAEpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI;;;;EAoBpC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TgdCameraOrthographic, TgdVec3 } from "@tolokoban/tgd";
|
|
2
2
|
export function makeCamera(bbox) {
|
|
3
|
-
const camera = new
|
|
4
|
-
transfo: { distance: 10 },
|
|
3
|
+
const camera = new TgdCameraOrthographic({
|
|
5
4
|
far: 100,
|
|
6
5
|
near: 0.1,
|
|
7
|
-
fovy: Math.PI / 8,
|
|
8
6
|
zoom: 1,
|
|
9
7
|
});
|
|
10
8
|
const vecMin = new TgdVec3(bbox.min);
|
|
@@ -20,4 +18,4 @@ export function makeCamera(bbox) {
|
|
|
20
18
|
camera.far = camera.transfo.distance + diameter * 0.5;
|
|
21
19
|
return { camera, width, height };
|
|
22
20
|
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1vY3RyZWUvcGFpbnRlci9jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixxQkFBcUIsRUFBd0IsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFJeEcsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFVO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQXFCLENBQUM7UUFDckMsR0FBRyxFQUFFLEdBQUc7UUFDUixJQUFJLEVBQUUsR0FBRztRQUNULElBQUksRUFBRSxDQUFDO0tBQ1YsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6RCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUE7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFdEMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFBO0lBQ3RELE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQTtJQUVyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQUNwQyxDQUFDIn0=
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type TgdPainterGizmoOptions } from "@tolokoban/tgd";
|
|
1
|
+
import { TgdEvent, type TgdPainterGizmoOptions } from "@tolokoban/tgd";
|
|
2
2
|
import type { MorphoViewerOctreeProps } from "../types";
|
|
3
3
|
export declare class OctreeManager {
|
|
4
4
|
loadInfo: MorphoViewerOctreeProps["loadInfo"] | null;
|
|
5
5
|
loadBlock: MorphoViewerOctreeProps["loadBlock"] | null;
|
|
6
|
+
readonly eventScalebar: TgdEvent<number>;
|
|
6
7
|
private _meshId;
|
|
7
8
|
private _canvas;
|
|
8
9
|
private context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-octree/painter/manager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-octree/painter/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,QAAQ,EAMR,KAAK,sBAAsB,EAU9B,MAAM,gBAAgB,CAAA;AAQvB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AASvD,qBAAa,aAAa;IACf,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAQ;IAC5D,SAAS,EAAE,uBAAuB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAQ;IACrE,SAAgB,aAAa,mBAAyB;IAEtD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+C;IAC1E,OAAO,CAAC,YAAY,CAAgE;IACpF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGtB;IACH,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,kBAAkB,CAM6C;IACvE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,YAAY,CAAgC;;IAMpD,IAAI,KAAK,IAAI,KAAK,GAAG,sBAAsB,CAE1C;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG,SAAS,EAsBrE;IAED,WAAW;IAgBX,IAAI,MAAM,IAGS,MAAM,CADxB;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAMxB;IAED,IAAI,MAAM,IAAI,iBAAiB,GAAG,IAAI,CAErC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAiC1C;IAED,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA+D/B;CACL;AAoBD,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,GACR,EAAE,uBAAuB,GAAG,aAAa,CAazC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { TgdContext, TgdControllerCameraOrbit, TgdDataGlb, TgdGeometryBox, TgdMaterialDiffuse, TgdPainterClear, TgdPainterGizmo, TgdPainterGroup, TgdPainterLOD, TgdPainterMesh, TgdPainterMeshGltf, TgdPainterState, TgdQuat, TgdVec3, tgdActionCreateCameraInterpolation, tgdEasingFunctionInOutQuad, } from "@tolokoban/tgd";
|
|
2
|
+
import { TgdContext, TgdControllerCameraOrbit, TgdDataGlb, TgdEvent, TgdGeometryBox, TgdMaterialDiffuse, TgdPainterClear, TgdPainterGizmo, TgdPainterGroup, TgdPainterLOD, TgdPainterMesh, TgdPainterMeshGltf, TgdPainterState, TgdQuat, TgdVec3, tgdActionCreateCameraInterpolation, tgdEasingFunctionInOutQuad, } from "@tolokoban/tgd";
|
|
3
3
|
import React from "react";
|
|
4
|
+
import { watchSpacePerPixel } from "./../../../behaviors/index.js";
|
|
4
5
|
import { morphoViewerOctreeBlockToId } from "../tools.js";
|
|
5
6
|
import { makeCamera } from "./camera.js";
|
|
6
7
|
const DEFAULT_GIZMO_PROPS = {
|
|
@@ -13,6 +14,7 @@ export class OctreeManager {
|
|
|
13
14
|
constructor() {
|
|
14
15
|
this.loadInfo = null;
|
|
15
16
|
this.loadBlock = null;
|
|
17
|
+
this.eventScalebar = new TgdEvent();
|
|
16
18
|
this._meshId = "";
|
|
17
19
|
this._canvas = null;
|
|
18
20
|
this.context = null;
|
|
@@ -160,6 +162,7 @@ export class OctreeManager {
|
|
|
160
162
|
alpha: false,
|
|
161
163
|
depth: true,
|
|
162
164
|
});
|
|
165
|
+
watchSpacePerPixel(context, this.eventScalebar);
|
|
163
166
|
this.context = context;
|
|
164
167
|
context.add(new TgdPainterClear(context, {
|
|
165
168
|
color: [0, 0, 0, 1],
|
|
@@ -207,4 +210,4 @@ export function useOctreeManager({ meshId, loadInfo, loadBlock, gizmo, }) {
|
|
|
207
210
|
}, [meshId, loadInfo, loadBlock, gizmo]);
|
|
208
211
|
return ref.current;
|
|
209
212
|
}
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItb2N0cmVlL3BhaW50ZXIvbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdILFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLFFBQVEsRUFDUixjQUFjLEVBRWQsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixlQUFlLEVBRWYsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixPQUFPLEVBQ1AsT0FBTyxFQUNQLGtDQUFrQyxFQUNsQywwQkFBMEIsR0FDN0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFFekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRWhELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBSXJDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ2hELE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDVixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxFQUFFLEdBQUc7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNaLENBQUE7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQTRCdEI7UUEzQk8sYUFBUSxHQUErQyxJQUFJLENBQUM7UUFDNUQsY0FBUyxHQUFnRCxJQUFJLENBQUM7UUFDckQsa0JBQWEsR0FBRyxJQUFJLFFBQVEsRUFBVSxDQUFBO1FBRTlDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUE2QixJQUFJLENBQUM7UUFDekMsWUFBTyxHQUFzQixJQUFJLENBQUM7UUFDekIsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9B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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PropsForGizmo, PropsForScalebar } from "../types";
|
|
2
|
+
import type { ArrayNumber3 } from "@tolokoban/tgd";
|
|
2
3
|
export type MorphoViewerOctreeMeshType = {
|
|
3
4
|
type: "glb";
|
|
4
5
|
data: ArrayBuffer;
|
|
@@ -10,11 +11,10 @@ export interface MorphoViewerOctreeInfo {
|
|
|
10
11
|
};
|
|
11
12
|
blockIds: string[];
|
|
12
13
|
}
|
|
13
|
-
export
|
|
14
|
+
export type MorphoViewerOctreeProps = PropsForGizmo & PropsForScalebar & {
|
|
14
15
|
className?: string;
|
|
15
16
|
meshId: string;
|
|
16
17
|
loadInfo(meshId: string): Promise<MorphoViewerOctreeInfo | null>;
|
|
17
18
|
loadBlock(meshId: string, blockId: string): Promise<MorphoViewerOctreeMeshType | null>;
|
|
18
|
-
|
|
19
|
-
}
|
|
19
|
+
};
|
|
20
20
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,gBAAgB,CAAA;AAE3F,MAAM,MAAM,0BAA0B,GAAG;IACrC,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE;QACF,GAAG,EAAE,YAAY,CAAA;QACjB,GAAG,EAAE,YAAY,CAAA;KACpB,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,gBAAgB,GAAG;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAA;IAKhE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAA;CACzF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { default } from "./morpho-viewer-scalebar.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNjYWxlYmFyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQSJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TgdEvent } from "@tolokoban/tgd";
|
|
2
|
+
export interface MorphoViewerScalebarProps {
|
|
3
|
+
className?: string | boolean;
|
|
4
|
+
spacePerPixelEvent: TgdEvent<number>;
|
|
5
|
+
unit?: number;
|
|
6
|
+
}
|
|
7
|
+
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit, }: MorphoViewerScalebarProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=morpho-viewer-scalebar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morpho-viewer-scalebar.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/morpho-viewer-scalebar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAIrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,SAAS,EACT,kBAAkB,EAClB,IAAW,GACZ,EAAE,yBAAyB,2CA+B3B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { classNames } from "./../../utils.js";
|
|
4
|
+
import { paint } from "./painter.js";
|
|
5
|
+
import styles from "./morpho-viewer-scalebar.module.css";
|
|
6
|
+
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit = 1e-6, }) {
|
|
7
|
+
const spacePerPixel = useSpacePerPixel(spacePerPixelEvent);
|
|
8
|
+
const ref = React.useRef(null);
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
const canvas = ref.current;
|
|
11
|
+
if (!canvas)
|
|
12
|
+
return;
|
|
13
|
+
paint(canvas, spacePerPixel, unit);
|
|
14
|
+
}, [spacePerPixel, unit]);
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
const canvas = ref.current;
|
|
17
|
+
if (!canvas)
|
|
18
|
+
return;
|
|
19
|
+
const observer = new ResizeObserver(() => {
|
|
20
|
+
canvas.width = canvas.clientWidth;
|
|
21
|
+
canvas.height = canvas.clientHeight;
|
|
22
|
+
paint(canvas, spacePerPixel, unit);
|
|
23
|
+
});
|
|
24
|
+
observer.observe(canvas);
|
|
25
|
+
return () => observer.unobserve(canvas);
|
|
26
|
+
}, [spacePerPixel, unit]);
|
|
27
|
+
return (_jsx("canvas", { ref: ref, className: classNames(typeof className === "string" ? className : styles.defaultLayout, styles.morphoViewerScalebar) }));
|
|
28
|
+
}
|
|
29
|
+
function useSpacePerPixel(spacePerPixelEvent) {
|
|
30
|
+
const [spacePerPixel, setSpacePerPixel] = React.useState(-1);
|
|
31
|
+
React.useEffect(() => {
|
|
32
|
+
spacePerPixelEvent.addListener(setSpacePerPixel);
|
|
33
|
+
return () => spacePerPixelEvent.removeListener(setSpacePerPixel);
|
|
34
|
+
}, [spacePerPixelEvent]);
|
|
35
|
+
return spacePerPixel;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1zY2FsZWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2NhbGViYXIvbW9ycGhvLXZpZXdlci1zY2FsZWJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJbEMsT0FBTyxNQUFNLE1BQU0scUNBQXFDLENBQUM7QUFXekQsTUFBTSxDQUFDLE9BQU8sVUFBVSxvQkFBb0IsQ0FBQyxFQUMzQyxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLElBQUksR0FBRyxJQUFJLEdBQ2U7SUFDMUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUEyQixJQUFJLENBQUMsQ0FBQztJQUN6RCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNuQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNuQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUNwQyxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFCLE9BQU8sQ0FDTCxpQkFDRSxHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxVQUFVLENBQ25CLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUNoRSxNQUFNLENBQUMsb0JBQW9CLENBQzVCLEdBQ08sQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsa0JBQW9DO0lBQzVELE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDekIsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyJ9
|