@openbraininstitute/morphoviewer 0.24.22 → 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.
Files changed (55) hide show
  1. package/README.md +14 -0
  2. package/lib/dist/behaviors/index.d.ts +2 -0
  3. package/lib/dist/behaviors/index.d.ts.map +1 -0
  4. package/lib/dist/behaviors/index.js +2 -0
  5. package/lib/dist/behaviors/space-per-pixel.d.ts +3 -0
  6. package/lib/dist/behaviors/space-per-pixel.d.ts.map +1 -0
  7. package/lib/dist/behaviors/space-per-pixel.js +13 -0
  8. package/lib/dist/components/{controls-layer → controls-layout}/controls-layout.d.ts +2 -2
  9. package/lib/dist/components/controls-layout/controls-layout.d.ts.map +1 -0
  10. package/lib/dist/components/controls-layout/controls-layout.js +39 -0
  11. package/lib/dist/components/controls-layout/index.d.ts +2 -0
  12. package/lib/dist/components/controls-layout/index.d.ts.map +1 -0
  13. package/lib/dist/components/controls-layout/index.js +2 -0
  14. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.d.ts.map +1 -1
  15. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.js +5 -4
  16. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.module.css +61 -61
  17. package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts +2 -2
  18. package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts.map +1 -1
  19. package/lib/dist/components/morpho-viewer-octree/painter/camera.js +3 -5
  20. package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts +2 -1
  21. package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts.map +1 -1
  22. package/lib/dist/components/morpho-viewer-octree/painter/manager.js +5 -2
  23. package/lib/dist/components/morpho-viewer-octree/types.d.ts +4 -4
  24. package/lib/dist/components/morpho-viewer-octree/types.d.ts.map +1 -1
  25. package/lib/dist/components/morpho-viewer-scalebar/index.d.ts +2 -0
  26. package/lib/dist/components/morpho-viewer-scalebar/index.d.ts.map +1 -0
  27. package/lib/dist/components/morpho-viewer-scalebar/index.js +2 -0
  28. package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts +8 -0
  29. package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts.map +1 -0
  30. package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.js +37 -0
  31. package/lib/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.module.css +13 -0
  32. package/lib/dist/components/morpho-viewer-scalebar/painter.d.ts +2 -0
  33. package/lib/dist/components/morpho-viewer-scalebar/painter.d.ts.map +1 -0
  34. package/lib/dist/components/morpho-viewer-scalebar/painter.js +61 -0
  35. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.d.ts.map +1 -1
  36. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +7 -9
  37. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +53 -53
  38. package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts.map +1 -1
  39. package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.js +6 -4
  40. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +2 -1
  41. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
  42. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.js +9 -1
  43. package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts +4 -5
  44. package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
  45. package/lib/dist/components/types.d.ts +8 -0
  46. package/lib/dist/components/types.d.ts.map +1 -0
  47. package/lib/dist/components/types.js +2 -0
  48. package/lib/dist/package.json +11 -2
  49. package/package.json +2 -2
  50. package/lib/dist/components/controls-layer/controls-layout.d.ts.map +0 -1
  51. package/lib/dist/components/controls-layer/controls-layout.js +0 -39
  52. package/lib/dist/components/controls-layer/index.d.ts +0 -2
  53. package/lib/dist/components/controls-layer/index.d.ts.map +0 -1
  54. package/lib/dist/components/controls-layer/index.js +0 -2
  55. /package/lib/dist/components/{controls-layer → controls-layout}/controls-layout.module.css +0 -0
package/README.md CHANGED
@@ -32,6 +32,20 @@ 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
+
35
49
  ### v0.24.22
36
50
 
37
51
  - Add new `ControlsLayout` component (`lib/src/components/controls-layer/`) for configurable viewer header controls
@@ -0,0 +1,2 @@
1
+ export * from "./space-per-pixel";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from "./space-per-pixel.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmVoYXZpb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUEifQ==
@@ -0,0 +1,3 @@
1
+ import type { TgdContext, TgdEvent } from "@tolokoban/tgd";
2
+ export declare function watchSpacePerPixel(context: TgdContext, event: TgdEvent<number>): () => void;
3
+ //# sourceMappingURL=space-per-pixel.d.ts.map
@@ -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==
@@ -1,9 +1,9 @@
1
- import React from "react";
1
+ import type React from "react";
2
2
  export type ControlAction = "fullscreen" | "reset-camera" | "minimize" | "close";
3
3
  export interface ControlsLayoutProps {
4
4
  className?: string;
5
5
  content: (ControlAction | React.ReactNode | (ControlAction | React.ReactNode)[])[];
6
6
  onClick?(action: ControlAction): void;
7
7
  }
8
- export default function ControlsLayout({ className, content, onClick, }: ControlsLayoutProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function ControlsLayout({ className, content, onClick }: ControlsLayoutProps): import("react/jsx-runtime").JSX.Element;
9
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,2 @@
1
+ export * from "./controls-layout";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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":"AAOA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CA0BhE"}
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 styles from "./morpho-viewer-octree.module.css";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1vY3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLW9jdHJlZS9tb3JwaG8tdmlld2VyLW9jdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxNQUFNLE1BQU0sbUNBQW1DLENBQUM7QUFDdkQsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUE4QjtJQUMvRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUF3QixJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUVqQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFDRixNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtRQUM3QixPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLGFBQzlFLEtBQUMsTUFBTSxJQUFDLGNBQWMsRUFBRSxPQUFPLEdBQUksRUFDbkMsNkJBQ0UsaUJBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLFlBQzlDLEtBQUMsVUFBVSxLQUFHLEdBQ1AsRUFDVCxpQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsWUFDN0MsS0FBQyxjQUFjLEtBQUcsR0FDWCxJQUNGLElBQ0wsQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBcUMsRUFBRSxFQUFFO0lBQ2xGLE9BQU8sQ0FDTCxpQkFFRSxHQUFHLEVBQUUsQ0FBQyxNQUFnQyxFQUFFLEVBQUU7WUFDeEMsY0FBYyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDL0IsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDL0IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxJQU5HLFFBQVEsQ0FPWixDQUNILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyJ9
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1vY3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLW9jdHJlZS9tb3JwaG8tdmlld2VyLW9jdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxvQkFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQXNCLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJekUsT0FBTyxNQUFNLE1BQU0sbUNBQW1DLENBQUM7QUFFdkQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQThCO0lBQy9ELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQXdCLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsYUFDOUUsS0FBQyxNQUFNLElBQUMsY0FBYyxFQUFFLE9BQU8sR0FBSSxFQUNuQyw2QkFDRSxpQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsWUFDOUMsS0FBQyxVQUFVLEtBQUcsR0FDUCxFQUNULGlCQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixZQUM3QyxLQUFDLGNBQWMsS0FBRyxHQUNYLElBQ0YsRUFDUixLQUFLLENBQUMsUUFBUSxJQUFJLENBQ2pCLEtBQUMsb0JBQW9CLElBQ25CLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUN6QixrQkFBa0IsRUFBRSxPQUFPLENBQUMsYUFBYSxHQUN6QyxDQUNILElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBcUMsRUFBRSxFQUFFO0lBQ2xGLE9BQU8sQ0FDTCxpQkFFRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDdkIsR0FBRyxFQUFFLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQ3hDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQy9CLE9BQU8sR0FBRyxFQUFFO2dCQUNWLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUMsQ0FBQztRQUNKLENBQUMsSUFQRyxRQUFRLENBUVosQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMifQ==
@@ -1,70 +1,70 @@
1
1
  .morphoViewerOctree {
2
- position: relative;
2
+ position: relative;
3
3
 
4
- > canvas {
5
- position: absolute;
6
- left: 0;
7
- top: 0;
8
- width: 100%;
9
- height: 100%;
10
- margin: 0;
11
- background-color: #000;
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
- > header {
15
- top: 0;
16
- }
14
+ >header {
15
+ top: 0;
16
+ }
17
17
 
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;
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
- > 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
- }
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
- 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;
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
- &:hover {
59
- background-color: #adf;
60
- color: #000;
61
- }
62
- }
58
+ &:hover {
59
+ background-color: #adf;
60
+ color: #000;
61
+ }
62
+ }
63
63
 
64
- .zoomSlider {
65
- color: #fff;
66
- flex: 0 0 auto;
67
- width: 240px;
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, TgdCameraPerspective } from "@tolokoban/tgd";
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: TgdCameraPerspective;
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,oBAAoB,EAAW,MAAM,gBAAgB,CAAC;AAElF,KAAK,IAAI,GAAG;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAAC;AAErD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI;;;;EAsBpC"}
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 { TgdCameraPerspective, TgdVec3 } from "@tolokoban/tgd";
1
+ import { TgdCameraOrthographic, TgdVec3 } from "@tolokoban/tgd";
2
2
  export function makeCamera(bbox) {
3
- const camera = new TgdCameraPerspective({
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1vY3RyZWUvcGFpbnRlci9jYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixvQkFBb0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlsRixNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVU7SUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztRQUN0QyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQ3pCLEdBQUcsRUFBRSxHQUFHO1FBQ1IsSUFBSSxFQUFFLEdBQUc7UUFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ2pCLElBQUksRUFBRSxDQUFDO0tBQ1IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFdkMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUV0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuQyxDQUFDIn0=
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,EAWL,KAAK,sBAAsB,EAU5B,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AASxD,qBAAa,aAAa;IACjB,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAQ;IAC5D,SAAS,EAAE,uBAAuB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAQ;IAErE,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,EAgC1C;IAED,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA+D/B;CACH;AAoBD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,GACN,EAAE,uBAAuB,GAAG,aAAa,CAazC"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItb2N0cmVlL3BhaW50ZXIvbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLGNBQWMsRUFFZCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFFZixlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLE9BQU8sRUFDUCxPQUFPLEVBQ1Asa0NBQWtDLEVBQ2xDLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUl0QyxNQUFNLG1CQUFtQixHQUEyQjtJQUNsRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ1YsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNWLElBQUksRUFBRSxHQUFHO0lBQ1QsTUFBTSxFQUFFLENBQUM7Q0FDVixDQUFDO0FBRUYsTUFBTSxPQUFPLGFBQWE7SUEyQnhCO1FBMUJPLGFBQVEsR0FBK0MsSUFBSSxDQUFDO1FBQzVELGNBQVMsR0FBZ0QsSUFBSSxDQUFDO1FBRTdELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUE2QixJQUFJLENBQUM7UUFDekMsWUFBTyxHQUFzQixJQUFJLENBQUM7UUFDekIsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0MsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbEUs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
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItb2N0cmVlL3BhaW50ZXIvbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdILFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLFFBQVEsRUFDUixjQUFjLEVBRWQsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixlQUFlLEVBRWYsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixPQUFPLEVBQ1AsT0FBTyxFQUNQLGtDQUFrQyxFQUNsQywwQkFBMEIsR0FDN0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFFekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRWhELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBSXJDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ2hELE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDVixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxFQUFFLEdBQUc7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNaLENBQUE7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQTRCdEI7UUEzQk8sYUFBUSxHQUErQyxJQUFJLENBQUM7UUFDNUQsY0FBUyxHQUFnRCxJQUFJLENBQUM7UUFDckQsa0JBQWEsR0FBRyxJQUFJLFFBQVEsRUFBVSxDQUFBO1FBRTlDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUE2QixJQUFJLENBQUM7UUFDekMsWUFBTyxHQUFzQixJQUFJLENBQUM7UUFDekIsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0MsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbEUsaUJBQVksR0FBMkQsSUFBSSxDQUFDO1FBQ25FLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztZQUMvQyxrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM1QixDQUFDLENBQUM7UUFDSyxVQUFLLEdBQW9DLElBQUksQ0FBQztRQUM5Qyx1QkFBa0IsR0FNdEIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDL0QsZUFBVSxHQUFtQixFQUFFLENBQUM7UUFDaEMsV0FBTSxHQUFtQyxLQUFLLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsSUFBSSxDQUFDO1FBa0duQyxxQkFBZ0IsR0FBRyxHQUFTLEVBQUU7O1lBQzNDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUE7WUFDekIsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTTtZQUVyQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLE1BQU0sWUFBWSxHQUFHLE1BQUEsSUFBSSxDQUFDLFlBQVksbUNBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtZQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQ3hCLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU07WUFFcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUE7WUFDL0IsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTTtZQUVqQixNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZELE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRztnQkFDdEIsS0FBSztnQkFDTCxNQUFNO2dCQUNOLFFBQVEsRUFBRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7YUFDbEIsQ0FBQTtZQUNELE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsTUFBTSxFQUFFLENBQUE7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdCQUF3QixDQUFDLE9BQU8sRUFBRTtnQkFDL0MsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNyQixPQUFPLElBQUksQ0FBQTtnQkFDZixDQUFDO2FBQ0osQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUM1QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckMsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLFlBQVksRUFBRSxDQUFDO2dCQUNmLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxDQUFPLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEtBQWEsRUFBRSxFQUFFO29CQUM5RCxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQTtvQkFDbkMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU87d0JBQUUsT0FBTyxJQUFJLENBQUE7b0JBRXZDLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO29CQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLE9BQU8scUJBQXFCLENBQUMsQ0FBQTt3QkFDbkQsT0FBTyxJQUFJLENBQUE7b0JBQ2YsQ0FBQztvQkFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUNuRCxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksTUFBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7NEJBQ3pDLEtBQUs7NEJBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3lCQUMxQixDQUFDLENBQUE7d0JBQ0YsT0FBTyxJQUFJLENBQUE7b0JBQ2YsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQTtnQkFDZixDQUFDLENBQUE7YUFDSixDQUFDLENBQUE7WUFDRixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUVkLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNuQixDQUFDLENBQUEsQ0FBQztRQTlKRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUMxQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3RCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUE0RDtRQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSztZQUFFLE9BQU07UUFFakMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQTtRQUNyQyxDQUFDO2FBQU0sSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTSxtQ0FDSixtQkFBbUIsR0FDbkIsS0FBSyxDQUNYLENBQUE7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDdEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUNsQyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7WUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDeEIsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBRXBCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNuQyxRQUFRLEVBQUUsR0FBRztZQUNiLGNBQWMsRUFBRSwwQkFBMEI7WUFDMUMsTUFBTSxFQUFFLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZELElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUTtnQkFDMUMsV0FBVyxFQUFFLElBQUksT0FBTyxFQUFFO2FBQzdCLENBQUM7U0FDTCxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFjO1FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNO1lBQUUsT0FBTTtRQUVuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFnQzs7UUFDdkMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU07WUFBRSxPQUFNO1FBRW5DLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsTUFBTSxFQUFFLENBQUE7UUFDdEIsTUFBQSxJQUFJLENBQUMsS0FBSywwQ0FBRSxNQUFNLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQTtRQUNGLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FDUCxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUU7WUFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FBQyxFQUNGLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUN6QixLQUFLLEVBQUUsTUFBTTtZQUNiLElBQUksRUFBRSxNQUFNO1lBQ1osUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUN6QixDQUFDLEVBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQTtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUE7UUFDdEUsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0NBa0VKO0FBSUQsU0FBUyxhQUFhLENBQUMsT0FBbUIsRUFBRSxJQUFVLEVBQUUsUUFBcUI7SUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRTtRQUMvQixRQUFRLEVBQUUsSUFBSSxjQUFjLENBQUM7WUFDekIsTUFBTTtZQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsQixDQUFDO1FBQ0YsUUFBUTtLQUNYLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFDN0IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsS0FBSyxHQUNpQjtJQUN0QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUF1QixJQUFJLENBQUMsQ0FBQTtJQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87UUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUE7SUFDbkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDakIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUMzQixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU07UUFFcEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDM0IsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDN0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDdkIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxLQUFLLENBQUE7SUFDbEMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUE7QUFDdEIsQ0FBQyJ9
@@ -1,4 +1,5 @@
1
- import type { ArrayNumber3, TgdPainterGizmoOptions } from "@tolokoban/tgd";
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 interface MorphoViewerOctreeProps {
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
- gizmo?: boolean | TgdPainterGizmoOptions;
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,KAAK,EAAE,YAAY,EAAmB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE5F,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,GAAG,EAAE,YAAY,CAAC;QAClB,GAAG,EAAE,YAAY,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAKjE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IAWvF,KAAK,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CAC1C"}
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,2 @@
1
+ export { default } from "./morpho-viewer-scalebar";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -0,0 +1,13 @@
1
+ .morphoViewerScalebar {
2
+ background: transparent;
3
+ z-index: 1;
4
+ }
5
+
6
+ .defaultLayout {
7
+ position: absolute;
8
+ left: 8px;
9
+ bottom: 8px;
10
+ width: calc(100% - 16px - 128px);
11
+ height: 1.4em;
12
+ pointer-events: none;
13
+ }
@@ -0,0 +1,2 @@
1
+ export declare function paint(canvas: HTMLCanvasElement, spacePerPixel: number, unitFactor?: number): void;
2
+ //# sourceMappingURL=painter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/painter.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,SAAO,QAkCxF"}