copper3d 3.6.1 → 3.6.4

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 (54) hide show
  1. package/dist/Loader/copperNrrdLoader.js +1 -1
  2. package/dist/Loader/copperNrrdLoader.js.map +1 -1
  3. package/dist/Scene/copperScene.d.ts +4 -4
  4. package/dist/Scene/copperScene.js +4 -4
  5. package/dist/Scene/copperScene.js.map +1 -1
  6. package/dist/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
  7. package/dist/Utils/surfaceAnnotation/MeshGraph.js +14 -12
  8. package/dist/Utils/surfaceAnnotation/MeshGraph.js.map +1 -1
  9. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +64 -17
  10. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js +245 -35
  11. package/dist/Utils/surfaceAnnotation/SurfaceAnnotator.js.map +1 -1
  12. package/dist/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
  13. package/dist/Utils/surfaceAnnotation/annotationStore.js +4 -4
  14. package/dist/Utils/surfaceAnnotation/annotationStore.js.map +1 -1
  15. package/dist/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
  16. package/dist/Utils/surfaceAnnotation/contourRender.js +16 -11
  17. package/dist/Utils/surfaceAnnotation/contourRender.js.map +1 -1
  18. package/dist/Utils/surfaceAnnotation/geodesicContour.d.ts +18 -4
  19. package/dist/Utils/surfaceAnnotation/geodesicContour.js +47 -8
  20. package/dist/Utils/surfaceAnnotation/geodesicContour.js.map +1 -1
  21. package/dist/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
  22. package/dist/Utils/surfaceAnnotation/pointMarkers.js +6 -2
  23. package/dist/Utils/surfaceAnnotation/pointMarkers.js.map +1 -1
  24. package/dist/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
  25. package/dist/Utils/surfaceAnnotation/raycastSurface.js +71 -5
  26. package/dist/Utils/surfaceAnnotation/raycastSurface.js.map +1 -1
  27. package/dist/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
  28. package/dist/Utils/surfaceAnnotation/strokeContour.js +15 -10
  29. package/dist/Utils/surfaceAnnotation/strokeContour.js.map +1 -1
  30. package/dist/Utils/surfaceAnnotation/types.d.ts +5 -5
  31. package/dist/Utils/surfaceAnnotation/types.js +2 -2
  32. package/dist/Utils/surfaceAnnotation/types.js.map +1 -1
  33. package/dist/Utils/texture2d.js +4 -2
  34. package/dist/Utils/texture2d.js.map +1 -1
  35. package/dist/Utils/workers/reformatSaveDataWorker.js +2 -2
  36. package/dist/Utils/workers/reformatSaveDataWorker.js.map +1 -1
  37. package/dist/bundle.esm.js +438 -107
  38. package/dist/bundle.umd.js +438 -107
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/lib/three-vignette.js +8 -2
  42. package/dist/lib/three-vignette.js.map +1 -1
  43. package/dist/types/Scene/copperScene.d.ts +4 -4
  44. package/dist/types/Utils/surfaceAnnotation/MeshGraph.d.ts +12 -10
  45. package/dist/types/Utils/surfaceAnnotation/SurfaceAnnotator.d.ts +64 -17
  46. package/dist/types/Utils/surfaceAnnotation/annotationStore.d.ts +4 -4
  47. package/dist/types/Utils/surfaceAnnotation/contourRender.d.ts +1 -1
  48. package/dist/types/Utils/surfaceAnnotation/geodesicContour.d.ts +18 -4
  49. package/dist/types/Utils/surfaceAnnotation/pointMarkers.d.ts +3 -2
  50. package/dist/types/Utils/surfaceAnnotation/raycastSurface.d.ts +3 -2
  51. package/dist/types/Utils/surfaceAnnotation/strokeContour.d.ts +9 -6
  52. package/dist/types/Utils/surfaceAnnotation/types.d.ts +5 -5
  53. package/dist/types/index.d.ts +1 -1
  54. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -28,6 +28,6 @@ import { CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_
28
28
  import type { LayerId, ChannelValue } from "./Utils/segmentation/core/index";
29
29
  import type { AiPromptTool, AiPromptPoint, AiPromptPayload, AiMaskResult } from "./Utils/segmentation/tools/AiAssistTool";
30
30
  import "./css/style.css";
31
- export declare const REVISION = "v3.6.1-beta";
31
+ export declare const REVISION = "v3.6.4-beta";
32
32
  export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, NrrdTools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, throttle, removeGuiFolderChilden, CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, GaussianSmoother, SurfaceAnnotator, };
33
33
  export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, IPaintImage, exportPaintImageType, IOptVTKLoader, aligned4DSurfaceType, aligned4DOptsType, Aligned4DController, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates, NrrdState, GuiState, IGuiMeta, ToolMode, IAnnotationCallbacks, LayerId, ChannelValue, AiPromptTool, AiPromptPoint, AiPromptPayload, AiMaskResult, SurfaceAnnotatorOptions, Annotation, AnnotationMode, ExportOptions, };
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import { removeGuiFolderChilden } from "./Utils/segmentation/coreTools/gui";
22
22
  import { SurfaceAnnotator } from "./Utils/surfaceAnnotation";
23
23
  import { CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss } from "./Utils/segmentation/core/index";
24
24
  import "./css/style.css";
25
- export const REVISION = "v3.6.1-beta";
25
+ export const REVISION = "v3.6.4-beta";
26
26
  console.log(`%cCopper3D Visualisation %cBeta:${REVISION}`, "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
27
27
  export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, NrrdTools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, throttle, removeGuiFolderChilden, CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, GaussianSmoother, SurfaceAnnotator, };
28
28
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,12 @@
1
1
  import { Color, DoubleSide, Mesh, PlaneGeometry, RawShaderMaterial, Vector2, } from "three";
2
- import vert from "./three-vignette.vert";
3
- import frag from "./three-vignette.frag";
2
+ // Loaded as raw strings (?raw). The original copper3d build compiled these via
3
+ // rollup-plugin-glslify; this app has no GLSL/glslify handler, so importing them as modules
4
+ // makes Vite try to parse GLSL as JS ("Unexpected identifier 'vec3'") and the bundle dies.
5
+ // The vignette background is only built for non-alpha scenes and this app always uses
6
+ // alpha:true, so these shaders are never compiled/used — loading them as inert strings is
7
+ // enough to keep the module importable.
8
+ import vert from "./three-vignette.vert?raw";
9
+ import frag from "./three-vignette.frag?raw";
4
10
  function createBackground(opt) {
5
11
  opt = opt || {};
6
12
  let geometry = opt.geometry || new PlaneGeometry(2, 2, 1);
@@ -1 +1 @@
1
- {"version":3,"file":"three-vignette.js","sourceRoot":"","sources":["../../src/lib/three-vignette.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"three-vignette.js","sourceRoot":"","sources":["../../src/lib/three-vignette.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,UAAU,EACV,IAAI,EACJ,aAAa,EACb,iBAAiB,EACjB,OAAO,GACR,MAAM,OAAO,CAAC;AAEf,+EAA+E;AAC/E,4FAA4F;AAC5F,2FAA2F;AAC3F,sFAAsF;AACtF,0FAA0F;AAC1F,wCAAwC;AACxC,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAC7C,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAU7C,SAAS,gBAAgB,CAAC,GAAa;IACrC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,IAAI,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACnC,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YAClC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACpB,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YAC5B,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACvB,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACpC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACxC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;YACpC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;SACxC;QACD,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAE3B,MAAM,UAAU,GAAmB;QACjC,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAC;IACF,4BAA4B;IAC5B,0CAA0C;IAE1C,UAAU,CAAC,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE;QACnC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBACrC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;oBAClD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;iBACrB;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;QACD,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;SAC7C;QACD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;YACtC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;SACrD;QACD,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE;YACrC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;SACnD;QACD,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;YACtC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;SACrD;QACD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE;YACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,UAAU,GAAkB,EAAE,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aAC7B;YACD,IAAI,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,WAAW,EAAE;YAC/C,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;SAC1E;IACH,CAAC,CAAC;IACF,SAAS,SAAS,CAAC,KAAY;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACvC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,EAAE;QACP,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACvB;SAAM;QACL,UAAU,CAAC,KAAK,EAAE,CAAC;KACpB;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -24,13 +24,13 @@ export declare class copperScene extends baseScene {
24
24
  }): void;
25
25
  loadVtk(url: string): void;
26
26
  /**
27
- * 在给定模型表面创建标注器( contour / 放点 / 导出坐标)
28
- * target 可为单个 Mesh,或 Group/Object3D(自动选顶点数最多的 mesh)
29
- * 复用本 scene camera / container / controls;几何非索引时内部自动焊接索引化。
27
+ * Create an annotator on the surface of a given model (draw contours / place points / export coordinates).
28
+ * target can be a single Mesh, or a Group/Object3D (the mesh with the most vertices is chosen automatically).
29
+ * Reuses this scene's camera / container / controls; non-indexed geometry is welded and indexed automatically.
30
30
  */
31
31
  createSurfaceAnnotator(target: THREE.Mesh | THREE.Object3D, opts?: Omit<SurfaceAnnotatorOptions, "scene" | "camera" | "container" | "controls" | "mesh">): SurfaceAnnotator;
32
32
  private pickAnnotatableMesh;
33
- /** 释放本 scene 创建的所有标注器(移除事件监听与标注对象) */
33
+ /** Dispose all annotators created on this scene (removes event listeners and annotation objects). */
34
34
  disposeSurfaceAnnotators(): void;
35
35
  loadVtks(models: Array<vtkModels>): void;
36
36
  /**
@@ -1,13 +1,15 @@
1
1
  import * as THREE from "three";
2
2
  /**
3
- * BufferGeometry 的索引构建顶点邻接图,用于模式 B(测地线)的最短路径。
4
- * 顶点坐标按 local 存;传入的查询点需先转为 local(mesh.worldToLocal)。
3
+ * Build a vertex adjacency graph from a BufferGeometry's index, used for the shortest path in
4
+ * mode B (geodesic). Vertex coordinates are stored in local space; query points must be converted
5
+ * to local first (mesh.worldToLocal).
5
6
  *
6
- * 说明:几何须为已索引(indexed)。modelLoader mergeVertices 焊接重复顶点,
7
- * 保证同一表面位置共享顶点,邻接图才连通。
7
+ * Note: the geometry must be indexed. modelLoader welds duplicate vertices with mergeVertices so
8
+ * that vertices at the same surface position are shared, otherwise the adjacency graph won't be connected.
8
9
  *
9
- * 性能:O(V²) Dijkstra + O(V) 最近顶点查找。对几万顶点单次点击可接受;
10
- * 若过大可后续换二叉堆 + 空间网格加速(留作升级)。
10
+ * Performance: O(V²) Dijkstra + O(V) nearest-vertex lookup. Acceptable for a single click on tens
11
+ * of thousands of vertices; if too large it can later be sped up with a binary heap + spatial grid
12
+ * (left as a future upgrade).
11
13
  */
12
14
  export declare class MeshGraph {
13
15
  private positions;
@@ -18,16 +20,16 @@ export declare class MeshGraph {
18
20
  private px;
19
21
  private py;
20
22
  private pz;
21
- /** 最近顶点(传入 local 坐标) */
23
+ /** Nearest vertex (pass in local coordinates). */
22
24
  nearestVertex(localPoint: THREE.Vector3): number;
23
25
  /**
24
- * 两顶点间最短路径(含端点的顶点索引序列)。二叉堆 Dijkstra,O(E log V)
25
- * 不连通时返回 [start,end] 兜底。
26
+ * Shortest path between two vertices (sequence of vertex indices including endpoints).
27
+ * Binary-heap Dijkstra, O(E log V). Falls back to [start,end] when disconnected.
26
28
  */
27
29
  shortestPath(startV: number, endV: number): number[];
28
30
  vertexWorld(i: number, matrixWorld: THREE.Matrix4): THREE.Vector3;
29
31
  vertexNormalWorld(i: number, mesh: THREE.Mesh): THREE.Vector3;
30
- /** 顶点的 local 坐标 + local 法线(图几何即 local 空间) */
32
+ /** Vertex local coordinates + local normal (the graph geometry is already local space). */
31
33
  vertexLocal(i: number): {
32
34
  x: number;
33
35
  y: number;
@@ -9,26 +9,34 @@ export interface SurfaceAnnotatorOptions {
9
9
  enabled: boolean;
10
10
  };
11
11
  mesh: THREE.Mesh;
12
- /** 缺省时从 mesh 几何包围盒对角线自算。 */
12
+ /** Computed from the mesh geometry's bounding-box diagonal when omitted. */
13
13
  bboxDiagonal?: number;
14
- /** 自由手绘 contour 颜色,默认 #e5006e。 */
14
+ /**
15
+ * Outward offset of the annotation line from the surface (world units), defaults to bboxDiagonal*0.002.
16
+ * Providing it separately decouples it from the sampling spacing (minGap/maxJump, still derived from
17
+ * bboxDiagonal) — useful on bumpy/voxel surfaces where a larger offset is needed to float the line
18
+ * above the relief without also coarsening the sampling.
19
+ */
20
+ epsilon?: number;
21
+ /** Freehand contour color, defaults to #e5006e. */
15
22
  freehandColor?: string;
16
- /** 测地线 contour 颜色,默认 #ffa24e */
23
+ /** Geodesic contour color, defaults to #ffa24e. */
17
24
  geodesicColor?: string;
18
- /** 放点标记颜色,默认 #ffd166 */
25
+ /** Point-marker color, defaults to #ffd166. */
19
26
  pointColor?: string;
20
- /** 线宽(像素),默认 3 */
27
+ /** Line width (pixels), defaults to 3. */
21
28
  lineWidth?: number;
22
- /** 标记小球半径,默认 bboxDiagonal*0.006 */
29
+ /** Marker sphere radius, defaults to bboxDiagonal*0.006. */
23
30
  markerRadius?: number;
24
31
  onModeChange?: (m: AnnotationMode) => void;
25
- /** 标注列表变化回调(增删/撤销/清空) */
32
+ /** Callback when the annotation list changes (add/remove/undo/clear). */
26
33
  onChange?: (annotations: Annotation[]) => void;
27
34
  }
28
35
  /**
29
- * 表面标注主控制器(Phase 4):navigate / freehand / geodesic / point 四模式,
30
- * Enter 闭合,数据交给 AnnotationStore 管理(多条带颜色标签、撤销/删除/清空、导出)。
31
- * 渲染层据 store.list() 做场景对账(reconcile),撤销/删除自动加/移 three 对象。
36
+ * Main surface-annotation controller (Phase 4): four modes navigate / freehand / geodesic / point,
37
+ * Enter closes the loop, and data is managed by AnnotationStore (multiple color-labeled strips,
38
+ * undo/delete/clear, export).
39
+ * The render layer reconciles the scene against store.list(); undo/delete automatically add/remove three objects.
32
40
  */
33
41
  export declare class SurfaceAnnotator {
34
42
  private o;
@@ -49,8 +57,14 @@ export declare class SurfaceAnnotator {
49
57
  private lastFreehand?;
50
58
  private activeGeo?;
51
59
  private activeGeoLine?;
60
+ private activeGeoMarkers;
61
+ private geoRay;
62
+ private geoNdc;
63
+ private geoHoverBadge?;
64
+ private hoveredGeoMarker;
65
+ private _projV;
52
66
  constructor(opts: SurfaceAnnotatorOptions);
53
- /** 窗口尺寸变化时更新所有 fat line 的像素分辨率,否则线宽会失真。 */
67
+ /** Update the pixel resolution of all fat lines on window resize, otherwise line width distorts. */
54
68
  private onResize;
55
69
  private get freehandColor();
56
70
  private get geodesicColor();
@@ -58,13 +72,13 @@ export declare class SurfaceAnnotator {
58
72
  getMode(): AnnotationMode;
59
73
  setMode(m: AnnotationMode): void;
60
74
  getStore(): AnnotationStore;
61
- /** 当前标注列表快照。 */
75
+ /** Snapshot of the current annotation list. */
62
76
  getAnnotations(): Annotation[];
63
77
  undo(): void;
64
78
  clearAll(): void;
65
79
  deleteAnnotation(id: string): void;
66
80
  selectAnnotation(id: string | null): void;
67
- /** 颜色变更后重画对应 three 对象。 */
81
+ /** Redraw the corresponding three object after a color change. */
68
82
  refreshAnnotation(id: string): void;
69
83
  exportJSON(modelName: string, opts?: ExportOptions): {
70
84
  model: string;
@@ -81,21 +95,54 @@ export declare class SurfaceAnnotator {
81
95
  }[];
82
96
  };
83
97
  private applyCameraGating;
84
- /** store.list() 对账场景:补齐缺失对象、移除已删对象( dispose,留给撤销恢复) */
98
+ /** Reconcile the scene against store.list(): add missing objects, remove deleted ones (no dispose, kept for undo restore). */
85
99
  private reconcile;
86
100
  private applySelection;
87
101
  private disposeObject;
88
102
  private nextId;
89
103
  private hit;
90
- /** 事件目标是否落在标注容器内(排除面板/页面其它区域的点击)。 */
104
+ /**
105
+ * Whether the event target is the WebGL canvas inside the container.
106
+ * Only accept the canvas: panels (GUIDE / control panel / the ✕ buttons in the annotation list)
107
+ * are all children of the container, so checking contains alone would treat clicks on the panels
108
+ * as drawing on the model — which "leaks through" the delete buttons and makes ✕ hard to click.
109
+ * Responding only to pointer events on the canvas fully isolates the UI from the drawing surface.
110
+ */
91
111
  private insideContainer;
92
112
  private onPointerDown;
113
+ /**
114
+ * Pick an in-progress anchor: return the index of the nearest anchor (screen pixel distance <
115
+ * tolerance), or -1 on a miss.
116
+ *
117
+ * Uses "screen-space pixel distance" instead of ray/sphere intersection: the anchor spheres are
118
+ * tiny, so strict ray/sphere hits require pixel-perfect aiming and most clicks miss — and a miss
119
+ * falls through to the "add anchor" branch, so trying to delete a point ends up adding one. That
120
+ * was the root cause of the old "deleting a point takes several clicks, must hit the sphere dead
121
+ * center" problem. Projecting each anchor to the screen and taking the nearest within tolerance
122
+ * makes deletion stable and reliable. The tolerance is enlarged relative to the sphere's screen
123
+ * radius to make it easy to hit.
124
+ */
125
+ private pickGeoMarker;
126
+ /** Set the currently hovered anchor (-1 = none): update highlight scale, cursor, and the "✕ (cancel)" floating badge. */
127
+ private setGeoHover;
128
+ /** Lazily create the floating ✕ badge (appended inside the container, pointer-events:none so it doesn't block clicks). */
129
+ private ensureGeoBadge;
130
+ /** Position the ✕ badge at the anchor's screen projection (dead center, i.e. where the cursor hovers, to avoid ambiguity). */
131
+ private positionGeoBadge;
132
+ /** Rebuild the visible anchor spheres from the current anchors (slightly larger than placed points, so they're easy to see and click to cancel). */
133
+ private rebuildGeoMarkers;
134
+ /** Redraw the in-progress geodesic from the current anchors (not closed); remove the line when fewer than two points. */
135
+ private redrawGeoLine;
136
+ /** Discard the in-progress geodesic: remove and dispose the line and all anchors. */
137
+ private clearActiveGeo;
138
+ /** Remove all anchor spheres of the in-progress geodesic (called after committing: only the line remains). */
139
+ private removeGeoMarkers;
93
140
  private onPointerMove;
94
141
  private onPointerUp;
95
142
  private closeLastContour;
96
- /** 沿网格表面求 a→b 的测地路径(local 顶点),去掉与 a 重合的首点。a/b 已是 local */
143
+ /** Compute the geodesic path a→b along the mesh surface (local vertices), dropping the first point that coincides with a. a/b are already local. */
97
144
  private surfacePathBetween;
98
- /** 结束当前测地线:闭合成环并落定为一条 contour */
145
+ /** Finish the current geodesic: close it into a ring and commit it as one contour. */
99
146
  private finishGeodesic;
100
147
  private isTypingTarget;
101
148
  private onKeyDown;
@@ -1,9 +1,9 @@
1
1
  import * as THREE from "three";
2
2
  import type { Annotation, ExportOptions } from "./types";
3
3
  /**
4
- * 标注数据模型 + 撤销栈 + 导出。纯数据,无 three / DOM 依赖。
5
- * 撤销只记录 add / remove 两类原子操作(满足"撤销最近添加 / 恢复删除")
6
- * 通过 subscribe 通知 UI 与渲染层(后者据 list() 做场景对账)
4
+ * Annotation data model + undo stack + export. Pure data, no three / DOM dependencies.
5
+ * Undo only records two atomic operations, add / remove (enough for "undo last add / restore delete").
6
+ * Notifies the UI and render layer via subscribe (the latter reconciles the scene against list()).
7
7
  */
8
8
  export declare class AnnotationStore {
9
9
  private items;
@@ -14,7 +14,7 @@ export declare class AnnotationStore {
14
14
  add(a: Annotation): void;
15
15
  remove(id: string): Annotation | undefined;
16
16
  undo(): void;
17
- /** 清空,返回被清掉的项(供渲染层 dispose three 对象) */
17
+ /** Clear all, returning the removed items (so the render layer can dispose three objects). */
18
18
  clear(): Annotation[];
19
19
  list(): Annotation[];
20
20
  get(id: string): Annotation | undefined;
@@ -3,5 +3,5 @@ import { Line2 } from "three/examples/jsm/lines/Line2";
3
3
  import type { AnnotationVertex } from "./types";
4
4
  export declare function makeContourLine(verts: AnnotationVertex[], color: string, closed: boolean, container: HTMLElement, epsilon: number, mesh: THREE.Mesh): Line2;
5
5
  export declare function updateContourLine(line: Line2, verts: AnnotationVertex[], closed: boolean, epsilon: number, mesh: THREE.Mesh): void;
6
- /** 改变已有 contour 线的颜色。 */
6
+ /** Change the color of an existing contour line. */
7
7
  export declare function setContourColor(line: Line2, color: string): void;
@@ -2,18 +2,32 @@ import * as THREE from "three";
2
2
  import type { AnnotationVertex } from "./types";
3
3
  import { MeshGraph } from "./MeshGraph";
4
4
  /**
5
- * 模式 B(测地线)状态机:逐次点击锚点,相邻锚点之间用 MeshGraph 求最短路径,
6
- * 拼成一条贴合表面的折线。Enter 结束并可闭合(首尾再求一段)。
5
+ * State machine for mode B (geodesic): click anchors one by one, find the shortest path between
6
+ * adjacent anchors with MeshGraph, and stitch them into a polyline that hugs the surface.
7
+ * Enter finishes and can close the loop (computing one more segment between first and last).
7
8
  */
8
9
  export declare class GeodesicContour {
9
10
  private graph;
10
11
  private mesh;
11
12
  private anchors;
12
13
  private segments;
14
+ private history;
13
15
  constructor(graph: MeshGraph, mesh: THREE.Mesh);
14
- /** 传入 local 命中点,snap 到最近顶点并对上一锚点求路径。 */
16
+ /** Save a snapshot before any anchor change (the vertex-index array is tiny, so snapshot cost is negligible). */
17
+ private snapshot;
18
+ /** Given a local hit point, snap to the nearest vertex and compute the path to the previous anchor. */
15
19
  addAnchor(localHitPoint: THREE.Vector3): void;
20
+ /** Remove the anchor at the given index and recompute adjacent segments (allows canceling any middle point). */
21
+ removeAnchorAt(index: number): void;
22
+ /** Whether there is still an editable change to undo (add/remove point). */
23
+ canUndo(): boolean;
24
+ /** Undo the last anchor edit (add → remove it; remove → restore it). Returns false when no history. */
25
+ undoEdit(): boolean;
26
+ /** Recompute all adjacent-segment paths from the current anchor sequence. */
27
+ private rebuildSegments;
28
+ /** Local vertex of each anchor (used to draw visible anchor markers). */
29
+ getAnchorLocals(): AnnotationVertex[];
16
30
  get anchorCount(): number;
17
- /** 把所有路径顶点(world)+ 法线 拼成折线;closed 时补一段首尾路径。 */
31
+ /** Stitch all path vertices (world) + normals into a polyline; when closed, add one first-to-last segment. */
18
32
  buildVertices(closed: boolean): AnnotationVertex[];
19
33
  }
@@ -1,7 +1,8 @@
1
1
  import * as THREE from "three";
2
2
  import type { AnnotationVertex } from "./types";
3
3
  /**
4
- * local 顶点处生成一个标记小球(fiducial)local→world 后沿 world 法线略外移,
5
- * 避免一半埋进表面。radius 由调用方按模型 bbox 缩放传入。
4
+ * Create a marker sphere (fiducial) at a local vertex. After local→world, nudge it
5
+ * outward along the world normal so it doesn't sink halfway into the surface.
6
+ * radius is passed in by the caller, scaled to the model bbox.
6
7
  */
7
8
  export declare function makePointMarker(v: AnnotationVertex, mesh: THREE.Mesh, color: string, radius: number): THREE.Mesh;
@@ -1,7 +1,8 @@
1
1
  import * as THREE from "three";
2
2
  import type { SurfaceHit } from "./types";
3
3
  /**
4
- * 把屏幕坐标(clientX/Y)投射到 mesh 表面,返回命中点、world-space 法线与 faceIndex。
5
- * 未命中返回 null。本地实现,不依赖 Copper3D 未导出的 raycast 内部函数。
4
+ * Project screen coordinates (clientX/Y) onto the mesh surface, returning the hit point,
5
+ * world-space normal, and faceIndex. Returns null on a miss. Local implementation that does not
6
+ * depend on Copper3D's unexported raycast internals.
6
7
  */
7
8
  export declare function raycastSurface(camera: THREE.PerspectiveCamera, container: HTMLElement, mesh: THREE.Mesh, clientX: number, clientY: number): SurfaceHit | null;
@@ -1,9 +1,10 @@
1
1
  import * as THREE from "three";
2
2
  import type { AnnotationVertex, SurfaceHit } from "./types";
3
3
  /**
4
- * 模式 A(自由手绘)一笔的状态机。
5
- * pointermove 时不断 addSample;与上一采样点世界距离 < minGap 的样本丢弃,避免过密。
6
- * 顶点以 local 存(由 mesh 把世界命中点转 local)。
4
+ * State machine for one stroke in mode A (freehand).
5
+ * On pointermove it keeps calling addSample; samples whose world distance from the previous
6
+ * sample is < minGap are dropped to avoid over-density.
7
+ * Vertices are stored in local space (the mesh converts the world hit point to local).
7
8
  */
8
9
  export declare class StrokeContour {
9
10
  private minGap;
@@ -14,9 +15,11 @@ export declare class StrokeContour {
14
15
  private lastNormal;
15
16
  private has;
16
17
  /**
17
- * @param minGap 采样最小间距(世界系),去抖
18
- * @param maxJump 跳变阈值(世界系):距离 > maxJump 且法线大幅翻转时丢弃该样本,
19
- * 避免笔触掠过沟缝/轮廓边时相邻点落在不同深度、直线段横穿模型。
18
+ * @param minGap minimum sample spacing (world space), debounce
19
+ * @param maxJump jump threshold (world space): drop the sample when distance > maxJump and the
20
+ * normal flips sharply, to prevent adjacent points landing at different depths
21
+ * (and the straight segment cutting through the model) when the stroke grazes a
22
+ * groove or contour edge.
20
23
  */
21
24
  constructor(minGap: number, maxJump: number, mesh: THREE.Mesh);
22
25
  begin(): void;
@@ -5,7 +5,7 @@ export interface SurfaceHit {
5
5
  normal: THREE.Vector3;
6
6
  faceIndex: number;
7
7
  }
8
- /** 标注顶点:位置与法线均为 **模型 local 空间**(单一真源,不受相机/摆放影响) */
8
+ /** Annotation vertex: position and normal are both in **model local space** (single source of truth, unaffected by camera/placement). */
9
9
  export interface AnnotationVertex {
10
10
  x: number;
11
11
  y: number;
@@ -26,14 +26,14 @@ export interface Annotation {
26
26
  object3D: THREE.Object3D | null;
27
27
  }
28
28
  export interface ExportOptions {
29
- /** 导出坐标空间,默认 "local"(模型空间,可复现、不受相机/摆放影响) */
29
+ /** Export coordinate space, defaults to "local" (model space, reproducible and unaffected by camera/placement). */
30
30
  space?: "local" | "world";
31
- /** 是否在每个点附带法线 [x,y,z,nx,ny,nz] */
31
+ /** Whether to attach a normal to each point [x,y,z,nx,ny,nz]. */
32
32
  includeNormals?: boolean;
33
33
  }
34
- /** 世界系命中点 → local 顶点(位置 worldToLocal,法线用逆变换) */
34
+ /** World-space hit point → local vertex (position via worldToLocal, normal via inverse transform). */
35
35
  export declare function worldHitToLocalVertex(h: SurfaceHit, mesh: THREE.Mesh): AnnotationVertex;
36
- /** local 顶点 → world 位置 + world 法线(供渲染) */
36
+ /** Local vertex → world position + world normal (for rendering). */
37
37
  export declare function localVertexToWorld(v: AnnotationVertex, mesh: THREE.Mesh): {
38
38
  p: THREE.Vector3;
39
39
  n: THREE.Vector3;
@@ -28,6 +28,6 @@ import { CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_
28
28
  import type { LayerId, ChannelValue } from "./Utils/segmentation/core/index";
29
29
  import type { AiPromptTool, AiPromptPoint, AiPromptPayload, AiMaskResult } from "./Utils/segmentation/tools/AiAssistTool";
30
30
  import "./css/style.css";
31
- export declare const REVISION = "v3.6.1-beta";
31
+ export declare const REVISION = "v3.6.4-beta";
32
32
  export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, NrrdTools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, throttle, removeGuiFolderChilden, CHANNEL_COLORS, CHANNEL_HEX_COLORS, AI_MASK_CHANNEL_COLORS, AI_CHANNEL_HEX_COLORS, rgbaToHex, rgbaToCss, GaussianSmoother, SurfaceAnnotator, };
33
33
  export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, IPaintImage, exportPaintImageType, IOptVTKLoader, aligned4DSurfaceType, aligned4DOptsType, Aligned4DController, ICommXYZ, IGUIStates, IGuiParameterSettings, INrrdStates, NrrdState, GuiState, IGuiMeta, ToolMode, IAnnotationCallbacks, LayerId, ChannelValue, AiPromptTool, AiPromptPoint, AiPromptPayload, AiMaskResult, SurfaceAnnotatorOptions, Annotation, AnnotationMode, ExportOptions, };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "copper3d",
3
3
  "description": "A 3d visualisation package base on threejs provides multiple scenes and Nrrd image load funtion.",
4
- "version": "3.6.1",
4
+ "version": "3.6.4",
5
5
  "main": "dist/bundle.umd.js",
6
6
  "moudle": "dist/bundle.esm.js",
7
7
  "types": "dist/types/index.d.ts",