larvitar 4.0.0-alpha.13 → 4.0.0-alpha.15

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.
@@ -2,7 +2,7 @@
2
2
  * @desc This file provides definitions
3
3
  * for default tools
4
4
  */
5
- import type { CursorOptions, ToolConfig, ToolMouseKeys, ToolSettings, ToolStyle } from "./types";
5
+ import type { CursorOptions, ToolConfig, ToolMouseKeys, ToolSettings, ToolStyle, ToolStyle3D } from "./types";
6
6
  declare const DEFAULT_TOOLS_3D: {
7
7
  [key: string]: ToolConfig;
8
8
  };
@@ -41,30 +41,7 @@ declare const dvToolsMPR: {
41
41
  * Arial, Lucida Grande, sans-serif;
42
42
  */
43
43
  declare const DEFAULT_STYLE: ToolStyle;
44
- declare const DEFAULT_STYLE_3D: {
45
- global: {
46
- angleArcLineDash: string;
47
- color: string;
48
- colorHighlighted: string;
49
- colorLocked: string;
50
- colorSelected: string;
51
- lineDash: string;
52
- lineWidth: string;
53
- markerSize: string;
54
- shadow: boolean;
55
- textBoxBackground: string;
56
- textBoxColor: string;
57
- textBoxColorHighlighted: string;
58
- textBoxColorLocked: string;
59
- textBoxColorSelected: string;
60
- textBoxFontFamily: string;
61
- textBoxFontSize: string;
62
- textBoxLinkLineDash: string;
63
- textBoxLinkLineWidth: string;
64
- textBoxShadow: boolean;
65
- textBoxVisibility: boolean;
66
- };
67
- };
44
+ declare const DEFAULT_STYLE_3D: ToolStyle3D;
68
45
  /**
69
46
  * Tools default settings
70
47
  */
@@ -114,5 +91,5 @@ declare const registerExternalTool: (toolName: string, toolClass: any, toolVersi
114
91
  }
115
92
  };
116
93
  */
117
- export declare const registerCursor: (toolName: string, iconContent: string, cursorOptions?: CursorOptions) => void;
94
+ export declare const registerCursor: (toolName: string, iconContent: string, viewBox?: CursorOptions) => void;
118
95
  export { DEFAULT_TOOLS, DEFAULT_TOOLS_3D, DEFAULT_TOOLS_MPR, DEFAULT_STYLE, DEFAULT_STYLE_3D, DEFAULT_SETTINGS, DEFAULT_MOUSE_KEYS, dvTools, dvTools3D, dvToolsMPR, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool };
@@ -24,6 +24,30 @@ export type ToolConfig = {
24
24
  currentMode?: string;
25
25
  offset?: number;
26
26
  };
27
+ export type ToolStyle3D = {
28
+ global: {
29
+ angleArcLineDash: string;
30
+ color: string;
31
+ colorHighlighted: string;
32
+ colorLocked: string;
33
+ colorSelected: string;
34
+ lineDash: string;
35
+ lineWidth: string;
36
+ markerSize: string;
37
+ shadow: boolean;
38
+ textBoxBackground: string;
39
+ textBoxColor: string;
40
+ textBoxColorHighlighted: string;
41
+ textBoxColorLocked: string;
42
+ textBoxColorSelected: string;
43
+ textBoxFontFamily: string;
44
+ textBoxFontSize: string;
45
+ textBoxLinkLineDash: string;
46
+ textBoxLinkLineWidth: string;
47
+ textBoxShadow: boolean;
48
+ textBoxVisibility: boolean;
49
+ };
50
+ };
27
51
  export type ToolStyle = {
28
52
  width: number;
29
53
  color: string;
@@ -62,7 +62,7 @@ export declare const loadAndCacheVolume: (series: Series) => Promise<cornerstone
62
62
  * @returns
63
63
  */
64
64
  export declare const setVolumeForRenderingEngine: (volumeId: string, renderingEngineId: string) => void;
65
- export declare const renderMpr: (series: Series, renderingEngineId: string, options?: RenderProps) => Promise<unknown>;
65
+ export declare const renderMpr: (series: Series, renderingEngineId: string, options?: RenderProps) => Promise<cornerstone.RenderingEngine>;
66
66
  /**
67
67
  * Unload a MPR rendering engine
68
68
  * @instance
@@ -79,3 +79,11 @@ export declare const unloadMpr: (renderingEngineId: string) => void;
79
79
  * @returns {void}
80
80
  */
81
81
  export declare const resizeRenderingEngine: (renderingEngineId: string) => void;
82
+ /**
83
+ * Reset viewport values (contrast, pan and zoom)
84
+ * @instance
85
+ * @function resetViewports
86
+ * @param {Array} elementIds - The array of hmtl div ids
87
+ * @param {Array} keys - The array of viewport sections to resets (default is all)
88
+ */
89
+ export declare const resetViewports: (elementIds: string[], keys?: Array<"contrast" | "pan" | "zoom">) => void;
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import * as cornerstone from "@cornerstonejs/core";
6
6
  import * as cornerstoneTools from "@cornerstonejs/tools";
7
- import type { ToolConfig, ToolSettings, ToolStyle } from "../../imaging/tools/types";
7
+ import type { ToolConfig, ToolSettings, ToolStyle3D } from "../../imaging/tools/types";
8
8
  import type { RenderingEngine } from "@cornerstonejs/core";
9
9
  /**
10
10
  * Initialize cornerstone tools with default configuration (extended with custom configuration)
@@ -13,13 +13,13 @@ import type { RenderingEngine } from "@cornerstonejs/core";
13
13
  * @param {ToolStyle} style - the style object (see tools/default.js)
14
14
  * @example larvitar.initializeCSTools({showSVGCursors:false}, {color: "0000FF"});
15
15
  */
16
- export declare const initializeCSTools: (settings?: ToolSettings, style?: ToolStyle) => Promise<void>;
16
+ export declare const initializeCSTools: (settings?: ToolSettings, style?: ToolStyle3D) => Promise<void>;
17
17
  /**
18
18
  * Set cornerstone tools custom configuration (extend default configuration)
19
19
  * @function setToolsStyle
20
20
  * @param {Object} style - the style object (see tools/defaults.js)
21
21
  */
22
- export declare const setToolsStyle: (style?: ToolStyle) => void;
22
+ export declare const setToolsStyle: (style?: ToolStyle3D) => void;
23
23
  /**
24
24
  * Add a cornerstone 3D tool (grab it from original library or dvision custom 3D or MPR tools)
25
25
  * @param {String} toolName
@@ -57,6 +57,22 @@ export declare const setToolDisabled: (toolName: string, groupId?: string, reset
57
57
  * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
58
58
  */
59
59
  export declare const syncViewportsCamera: (id: string | undefined, targetViewportId: string, sourceViewportId: string) => void;
60
+ /**
61
+ * @function syncViewportsVOI
62
+ * @desc Synchronizes the contrast of two (volume) viewports
63
+ * @param id - unique id for the synchronizer @default "default"
64
+ * @param targetViewportId - the id of the target viewport where the camera will be synced
65
+ * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
66
+ */
67
+ export declare const syncViewportsVOI: (id: string | undefined, targetViewportId: string, sourceViewportId: string) => void;
68
+ /**
69
+ * @function syncViewports
70
+ * @desc Synchronizes the camera position and contrast of two (volume) viewports
71
+ * @param id - unique id for the synchronizer @default "default"
72
+ * @param targetViewportId - the id of the target viewport where the camera will be synced
73
+ * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
74
+ */
75
+ export declare const syncViewports: (id: string | undefined, targetViewportId: string, sourceViewportId: string) => void;
60
76
  /**
61
77
  * Create a tool group and add the specified viewports and tools to it.
62
78
  * @function createToolGroup
@@ -1,6 +1,6 @@
1
1
  import { Enums } from "@cornerstonejs/core";
2
2
  export type { Types, VolumeViewport, StackViewport, BaseVolumeViewport } from "@cornerstonejs/core";
3
- export type { IEnabledElement, Point2, Point3 } from "@cornerstonejs/core/dist/esm/types";
3
+ export type { IEnabledElement, Point2, Point3, ICamera } from "@cornerstonejs/core/dist/esm/types";
4
4
  export type { Annotation, CanvasCoordinates, EventTypes, InteractionTypes, PublicToolProps, SVGDrawingHelper, TextBoxHandle, ToolHandle, ToolProps } from "@cornerstonejs/tools/dist/esm/types";
5
5
  export type { Handles } from "@cornerstonejs/tools/dist/esm/types/AnnotationTypes";
6
6
  export type { ROICachedStats } from "@cornerstonejs/tools/dist/esm/types/ToolSpecificAnnotationTypes";
package/dist/index.d.ts CHANGED
@@ -45,7 +45,7 @@ import { registerStreamingImageVolume as _registerStreamingImageVolume } from ".
45
45
  import { loadAndCacheMetadata as _loadAndCacheMetadata } from "./imaging3d/imageLoading";
46
46
  import { readFiles as _readFiles } from "./imaging3d/imageParsing";
47
47
  import { convertMetadata as _convertMetadata } from "./imaging3d/imageParsing";
48
- import { renderImage as _renderImage } from "./imaging3d/imageRendering";
48
+ import { renderImage as _renderImage, resetViewports as _resetViewports } from "./imaging3d/imageRendering";
49
49
  import { initializeRenderingEngine as _initializeRenderingEngine } from "./imaging3d/imageRendering";
50
50
  import { destroyRenderingEngine as _destroyRenderingEngine } from "./imaging3d/imageRendering";
51
51
  import { initializeVolumeViewports as _initializeVolumeViewports } from "./imaging3d/imageRendering";
@@ -55,10 +55,10 @@ import { resizeRenderingEngine as _resizeRenderingEngine } from "./imaging3d/ima
55
55
  import { renderMpr as _renderMpr } from "./imaging3d/imageRendering";
56
56
  import { prefetchMetadataInformation as _prefetchMetadataInformation } from "./imaging3d/multiframe";
57
57
  import { convertMultiframeImageIds as _convertMultiframeImageIds } from "./imaging3d/multiframe";
58
- import { addDefaultTools as _addDefaultTools, initializeCSTools as _initializeCSTools, addTool as _addTool, setToolActive as _setToolActive, setToolPassive as _setToolPassive, setToolEnabled as _setToolEnabled, setToolDisabled as _setToolDisabled, syncViewportsCamera as _syncViewportsCamera, createToolGroup as _createToolGroup, destroyToolGroup as _destroyToolGroup, setSlab as _setSlab, setWWWL as _setWWWL } from "./imaging3d/tools/main";
58
+ import { addDefaultTools as _addDefaultTools, initializeCSTools as _initializeCSTools, addTool as _addTool, setToolActive as _setToolActive, setToolPassive as _setToolPassive, setToolEnabled as _setToolEnabled, setToolDisabled as _setToolDisabled, syncViewportsCamera as _syncViewportsCamera, syncViewportsVOI as _syncViewportsVOI, syncViewports as _syncViewports, createToolGroup as _createToolGroup, destroyToolGroup as _destroyToolGroup, setSlab as _setSlab, setWWWL as _setWWWL } from "./imaging3d/tools/main";
59
59
  import _CustomWWWLTool from "./imaging3d/tools/custom/exampleCustomTool";
60
60
  import { updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, getFileManager, resetFileManager, populateFileManager, getDataFromFileManager } from "./imaging/imageManagers";
61
- export { _cornerstone, _cornerstoneDICOMImageLoader, _cornerstoneTools, _initializeCSTools, _initializeImageLoader, _readFiles, _renderImage, _renderMpr, _initializeRenderingEngine, _destroyRenderingEngine, _resizeRenderingEngine, _initializeVolumeViewports, _loadAndCacheVolume, _setVolumeForRenderingEngine, _registerStreamingImageVolume, _convertMetadata, _loadAndCacheMetadata, _prefetchMetadataInformation, _convertMultiframeImageIds, _addDefaultTools, _addTool, _setToolActive, _setToolPassive, _setToolEnabled, _setToolDisabled, _syncViewportsCamera, _createToolGroup, _destroyToolGroup, _setWWWL, _setSlab, _CustomWWWLTool, VERSION, cornerstone, cornerstoneTools, parseDicom, cornerstoneFileImageLoader, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGMarker, updateECGTotalTime, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, exportImageToBase64OriginalSizes, anonymize, customizeByteArray, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerSingleFrameImageLoader, registerDsaImageLoader, updateLoadedStack, reset, readFile, readFiles, parseDataSet, clearImageParsing, convertQidoMetadata, clearImageCache, clearStandardImageCache, clearDSAImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, populateFileManager, getFileManager, resetFileManager, getDataFromFileManager, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, getImageFrame, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, setSingleFrameCache, clearSingleFrameCache, loadSingleFrameImage, populateDsaImageIds, resetFileLoader, getFileCustomImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsUpdateStack, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, registerCursor, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData, logger, setLogLevel };
61
+ export { _cornerstone, _cornerstoneDICOMImageLoader, _cornerstoneTools, _initializeCSTools, _initializeImageLoader, _readFiles, _renderImage, _resetViewports, _renderMpr, _initializeRenderingEngine, _destroyRenderingEngine, _resizeRenderingEngine, _initializeVolumeViewports, _loadAndCacheVolume, _setVolumeForRenderingEngine, _registerStreamingImageVolume, _convertMetadata, _loadAndCacheMetadata, _prefetchMetadataInformation, _convertMultiframeImageIds, _addDefaultTools, _addTool, _setToolActive, _setToolPassive, _setToolEnabled, _setToolDisabled, _syncViewportsCamera, _syncViewportsVOI, _syncViewports, _createToolGroup, _destroyToolGroup, _setWWWL, _setSlab, _CustomWWWLTool, VERSION, cornerstone, cornerstoneTools, parseDicom, cornerstoneFileImageLoader, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGMarker, updateECGTotalTime, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, exportImageToBase64OriginalSizes, anonymize, customizeByteArray, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerSingleFrameImageLoader, registerDsaImageLoader, updateLoadedStack, reset, readFile, readFiles, parseDataSet, clearImageParsing, convertQidoMetadata, clearImageCache, clearStandardImageCache, clearDSAImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, updateImageManager, populateImageManager, getImageManager, resetImageManager, removeDataFromImageManager, getDataFromImageManager, getSopInstanceUIDFromImageManager, getImageTracker, populateGSPSManager, getGSPSManager, resetGSPSManager, populateFileManager, getFileManager, resetFileManager, getDataFromFileManager, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, getImageFrame, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, setSingleFrameCache, clearSingleFrameCache, loadSingleFrameImage, populateDsaImageIds, resetFileLoader, getFileCustomImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsUpdateStack, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, registerCursor, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData, logger, setLogLevel };
62
62
  export declare const updateLarvitarManager: (...args: any) => any;
63
63
  export declare const populateLarvitarManager: (...args: any) => any;
64
64
  export declare const getLarvitarManager: (...args: any) => any;
package/dist/larvitar.js CHANGED
@@ -83625,6 +83625,7 @@ __webpack_require__.d(__webpack_exports__, {
83625
83625
  _registerStreamingImageVolume: () => (/* reexport */ index_registerStreamingImageVolume),
83626
83626
  _renderImage: () => (/* reexport */ index_imageRendering_renderImage),
83627
83627
  _renderMpr: () => (/* reexport */ index_renderMpr),
83628
+ _resetViewports: () => (/* reexport */ index_imageRendering_resetViewports),
83628
83629
  _resizeRenderingEngine: () => (/* reexport */ index_resizeRenderingEngine),
83629
83630
  _setSlab: () => (/* reexport */ index_setSlab),
83630
83631
  _setToolActive: () => (/* reexport */ index_main_setToolActive),
@@ -83633,7 +83634,9 @@ __webpack_require__.d(__webpack_exports__, {
83633
83634
  _setToolPassive: () => (/* reexport */ index_main_setToolPassive),
83634
83635
  _setVolumeForRenderingEngine: () => (/* reexport */ index_setVolumeForRenderingEngine),
83635
83636
  _setWWWL: () => (/* reexport */ index_setWWWL),
83637
+ _syncViewports: () => (/* reexport */ index_syncViewports),
83636
83638
  _syncViewportsCamera: () => (/* reexport */ index_syncViewportsCamera),
83639
+ _syncViewportsVOI: () => (/* reexport */ index_syncViewportsVOI),
83637
83640
  activatePerformanceMonitor: () => (/* reexport */ index_activatePerformanceMonitor),
83638
83641
  addColorMap: () => (/* reexport */ index_addColorMap),
83639
83642
  addContoursTool: () => (/* reexport */ index_addContoursTool),
@@ -85560,7 +85563,7 @@ __webpack_require__.d(index_tools_dist_esm_namespaceObject, {
85560
85563
  });
85561
85564
 
85562
85565
  ;// ./package.json
85563
- const index_package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"4.0.0-alpha.13","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts","imaging3d/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","format":"prettier --write \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","format:check":"prettier --check \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","postinstall":"patch-package","build":"webpack --config ./bundler/webpack.prod.debug.js","dev":"webpack --progress --config ./bundler/webpack.dev.js","docs:dev":"vuepress dev docs","docs:build":"vuepress build docs","cypress":"cypress open","cypress:run":"cypress run","cypress:run:headless":"cypress run --headless"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@cornerstonejs/core":"^3.12.1","@cornerstonejs/dicom-image-loader":"^3.12.1","@cornerstonejs/nifti-volume-loader":"^3.12.1","@cornerstonejs/tools":"^3.12.1","@hyzyla/pdfium":"^2.1.2","@icr/polyseg-wasm":"^0.4.0","consola":"^3.4.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dcmjs":"^0.34.0","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@rollup/plugin-commonjs":"^28.0.3","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","@vuepress/bundler-vite":"^2.0.0-rc.18","@vuepress/plugin-slimsearch":"^2.0.0-rc.68","@vuepress/theme-default":"^2.0.0-rc.60","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","cypress":"^14.2.0","cypress-image-snapshot":"^4.0.1","cypress-mochawesome-reporter":"^3.8.2","cypress-multi-reporters":"^2.0.5","eslint":"^9.17.0","html-loader":"^4.2.0","html-webpack-plugin":"^5.6.0","jsdom":"^26.0.0","lodash-webpack-plugin":"^0.11.6","mocha-json-reporter":"^1.0.0-1","patch-package":"^8.0.0","prettier":"^3.5.3","sass-embedded":"^1.80.7","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","vuepress":"^2.0.0-rc.18","webpack":"^5.76.3","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
85566
+ const index_package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"4.0.0-alpha.15","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts","imaging3d/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","format":"prettier --write \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","format:check":"prettier --check \\"imaging/**/*.{js,ts,json,css,md}\\" \\"imaging3d/**/*.{js,ts,json,css,md}\\" \\"docs/examples/**/*.html\\"","postinstall":"patch-package","build":"webpack --config ./bundler/webpack.prod.debug.js","dev":"webpack --progress --config ./bundler/webpack.dev.js","docs:dev":"vuepress dev docs","docs:build":"vuepress build docs","cypress":"cypress open","cypress:run":"cypress run","cypress:run:headless":"cypress run --headless"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@cornerstonejs/core":"^3.12.1","@cornerstonejs/dicom-image-loader":"^3.12.1","@cornerstonejs/nifti-volume-loader":"^3.12.1","@cornerstonejs/tools":"^3.12.1","@hyzyla/pdfium":"^2.1.2","@icr/polyseg-wasm":"^0.4.0","consola":"^3.4.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dcmjs":"^0.34.0","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@rollup/plugin-commonjs":"^28.0.3","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","@vuepress/bundler-vite":"^2.0.0-rc.18","@vuepress/plugin-slimsearch":"^2.0.0-rc.68","@vuepress/theme-default":"^2.0.0-rc.60","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","cypress":"^14.2.0","cypress-image-snapshot":"^4.0.1","cypress-mochawesome-reporter":"^3.8.2","cypress-multi-reporters":"^2.0.5","eslint":"^9.17.0","html-loader":"^4.2.0","html-webpack-plugin":"^5.6.0","jsdom":"^26.0.0","lodash-webpack-plugin":"^0.11.6","mocha-json-reporter":"^1.0.0-1","patch-package":"^8.0.0","prettier":"^3.5.3","sass-embedded":"^1.80.7","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","vuepress":"^2.0.0-rc.18","webpack":"^5.76.3","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
85564
85567
  // EXTERNAL MODULE: ./node_modules/cornerstone-core/dist/cornerstone.js
85565
85568
  var index_dist_cornerstone = __webpack_require__(1198);
85566
85569
  var index_cornerstone_default = /*#__PURE__*/__webpack_require__.n(index_dist_cornerstone);
@@ -180701,6 +180704,9 @@ const index_registerExternalTool = function (toolName, toolClass, toolVersion =
180701
180704
  index_default_registerCursor(toolName, toolCursor, cursorOptions);
180702
180705
  }
180703
180706
  };
180707
+ function index_default_extend(base, values) {
180708
+ return Object.assign(Object.create(base), Object.assign(Object.assign({}, values), { name: values.name || base.name }));
180709
+ }
180704
180710
  /**
180705
180711
  * Register a custom tool cursor
180706
180712
  * @param {String} toolName - The name of the tool
@@ -180722,13 +180728,11 @@ const index_registerExternalTool = function (toolName, toolClass, toolVersion =
180722
180728
  }
180723
180729
  };
180724
180730
  */
180725
- const index_default_registerCursor = function (toolName, iconContent, cursorOptions) {
180726
- const descriptor = Object.assign(Object.create(index_BASE_CURSOR), {
180731
+ const index_default_registerCursor = function (toolName, iconContent, viewBox) {
180732
+ index_CursorSVG[toolName] = index_default_extend(index_BASE_CURSOR, {
180727
180733
  iconContent,
180728
- cursorOptions,
180729
- name: toolName
180734
+ viewBox
180730
180735
  });
180731
- index_CursorSVG[toolName] = descriptor;
180732
180736
  };
180733
180737
 
180734
180738
 
@@ -283719,6 +283723,14 @@ const index_main_setToolPassive = function (toolName, groupId = "default", reset
283719
283723
  }
283720
283724
  toolGroup.setToolPassive(toolName);
283721
283725
  index_logger_logger.debug(`Tool ${toolName} set enabled in group:`, groupId);
283726
+ if (resetCursor) {
283727
+ toolGroup.getViewportIds().forEach(id => {
283728
+ const element = document.getElementById(id);
283729
+ if (element) {
283730
+ index_cursors_setCursorForElement(element, "default");
283731
+ }
283732
+ });
283733
+ }
283722
283734
  };
283723
283735
  const index_main_setToolEnabled = function (toolName, groupId = "default", resetCursor = true // TODO manage this
283724
283736
  ) {
@@ -283729,6 +283741,14 @@ const index_main_setToolEnabled = function (toolName, groupId = "default", reset
283729
283741
  }
283730
283742
  toolGroup.setToolEnabled(toolName);
283731
283743
  index_logger_logger.debug(`Tool ${toolName} set enabled in group:`, groupId);
283744
+ if (resetCursor) {
283745
+ toolGroup.getViewportIds().forEach(id => {
283746
+ const element = document.getElementById(id);
283747
+ if (element) {
283748
+ index_cursors_setCursorForElement(element, "default");
283749
+ }
283750
+ });
283751
+ }
283732
283752
  };
283733
283753
  const index_main_setToolDisabled = function (toolName, groupId = "default", resetCursor = true // TODO manage this
283734
283754
  ) {
@@ -283739,6 +283759,14 @@ const index_main_setToolDisabled = function (toolName, groupId = "default", rese
283739
283759
  }
283740
283760
  toolGroup.setToolDisabled(toolName);
283741
283761
  index_logger_logger.debug(`Tool ${toolName} set enabled in group:`, groupId);
283762
+ if (resetCursor) {
283763
+ toolGroup.getViewportIds().forEach(id => {
283764
+ const element = document.getElementById(id);
283765
+ if (element) {
283766
+ index_cursors_setCursorForElement(element, "default");
283767
+ }
283768
+ });
283769
+ }
283742
283770
  };
283743
283771
  /**
283744
283772
  * @function syncViewportsCamera
@@ -283798,6 +283826,75 @@ targetViewportId, sourceViewportId) {
283798
283826
  index_logger_logger.debug(`Camera sync added from ${sourceViewportId} to ${targetViewportId}`);
283799
283827
  // FIXME: how to force a refresh of the viewport?
283800
283828
  };
283829
+ /**
283830
+ * @function syncViewportsVOI
283831
+ * @desc Synchronizes the contrast of two (volume) viewports
283832
+ * @param id - unique id for the synchronizer @default "default"
283833
+ * @param targetViewportId - the id of the target viewport where the camera will be synced
283834
+ * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
283835
+ */
283836
+ const index_syncViewportsVOI = function (id = "default", // unique id for the synchronizer
283837
+ targetViewportId, sourceViewportId) {
283838
+ var _a, _b, _c, _d;
283839
+ let voiSync = index_SynchronizerManager_getSynchronizer(id);
283840
+ const options = {
283841
+ syncInvertState: true,
283842
+ syncColormap: true
283843
+ };
283844
+ if (!voiSync) {
283845
+ voiSync = index_createVOISynchronizer(id, options);
283846
+ }
283847
+ else if (voiSync) {
283848
+ // cameraSync.getSourceViewports().forEach((viewportId) => {
283849
+ // cameraSync!.removeSource(viewportId);
283850
+ // });
283851
+ index_SynchronizerManager_destroySynchronizer(id);
283852
+ voiSync = index_createVOISynchronizer(id, options);
283853
+ }
283854
+ const targetRenderingEngineId = (_a = index_getEnabledElementByViewportId(targetViewportId)) === null || _a === void 0 ? void 0 : _a.renderingEngineId;
283855
+ const sourceRenderingEngineId = (_b = index_getEnabledElementByViewportId(sourceViewportId)) === null || _b === void 0 ? void 0 : _b.renderingEngineId;
283856
+ if (!targetRenderingEngineId || !sourceRenderingEngineId) {
283857
+ index_logger_logger.error("syncViewportsCamera: no rendering engine found for one of the viewports");
283858
+ return;
283859
+ }
283860
+ const sourceViewport = (_c = index_getEnabledElementByViewportId(sourceViewportId)) === null || _c === void 0 ? void 0 : _c.viewport;
283861
+ if (!sourceViewport) {
283862
+ index_logger_logger.error("syncViewportsCamera: source viewport not found");
283863
+ return;
283864
+ }
283865
+ const sourceViewRef = sourceViewport.getViewReference();
283866
+ const targetViewport = (_d = index_getEnabledElementByViewportId(targetViewportId)) === null || _d === void 0 ? void 0 : _d.viewport;
283867
+ if (!targetViewport) {
283868
+ index_logger_logger.error("syncViewportsCamera: target viewport not found");
283869
+ return;
283870
+ }
283871
+ targetViewport.setViewReference(sourceViewRef);
283872
+ voiSync.add({
283873
+ renderingEngineId: sourceRenderingEngineId,
283874
+ viewportId: sourceViewportId
283875
+ });
283876
+ voiSync.add({
283877
+ renderingEngineId: targetRenderingEngineId,
283878
+ viewportId: targetViewportId
283879
+ });
283880
+ const targetElement = index_getEnabledElementByViewportId(targetViewportId);
283881
+ targetElement.viewport.render();
283882
+ const sourceElement = index_getEnabledElementByViewportId(sourceViewportId);
283883
+ sourceElement.viewport.render();
283884
+ index_logger_logger.debug(`Camera sync added from ${sourceViewportId} to ${targetViewportId}`);
283885
+ };
283886
+ /**
283887
+ * @function syncViewports
283888
+ * @desc Synchronizes the camera position and contrast of two (volume) viewports
283889
+ * @param id - unique id for the synchronizer @default "default"
283890
+ * @param targetViewportId - the id of the target viewport where the camera will be synced
283891
+ * @param sourceViewportId - the id of the source viewport from where the camera position will be taken
283892
+ */
283893
+ const index_syncViewports = function (id = "default", // unique id for the synchronizer
283894
+ targetViewportId, sourceViewportId) {
283895
+ index_syncViewportsCamera(id, targetViewportId, sourceViewportId);
283896
+ index_syncViewportsVOI(id, targetViewportId, sourceViewportId);
283897
+ };
283801
283898
  /**
283802
283899
  * Create a tool group and add the specified viewports and tools to it.
283803
283900
  * @function createToolGroup
@@ -284131,44 +284228,58 @@ const index_setVolumeForRenderingEngine = function (volumeId, renderingEngineId)
284131
284228
  ], renderingEngine.getVolumeViewports().map(v => v.id));
284132
284229
  };
284133
284230
  const index_renderMpr = function (series, renderingEngineId, options) {
284134
- const t0 = performance.now();
284135
- const renderingEngine = index_getRenderingEngine(renderingEngineId);
284136
- if (!renderingEngine) {
284137
- index_logger_logger.error(`Rendering engine with id ${renderingEngineId} not found. Please initialize it first.`);
284138
- return new Promise((_, reject) => reject(`Rendering engine with id ${renderingEngineId} not found.`));
284139
- }
284140
- const viewports = renderingEngine.getVolumeViewports();
284141
- if (viewports.length === 0) {
284142
- index_logger_logger.error(`No volume viewports found for rendering engine ${renderingEngineId}. Please initialize them first.`);
284143
- return new Promise((_, reject) => reject(`No volume viewports found for rendering engine ${renderingEngineId}.`));
284144
- }
284145
- // const renderOptions = options ? options : {};
284146
- // // TODO: CONTROLLA IMAGE ID NEL CASO DI MPR
284147
- // //let data: StoreViewport = getSeriesData(series, renderOptions);
284148
- const renderPromise = new Promise((resolve, _) => index_imaging3d_imageRendering_awaiter(this, void 0, void 0, function* () {
284149
- // crea o prendi il volume dalla cache
284150
- // const volume =
284151
- // cornerstone.cache.getVolume(series.uniqueUID) ||
284152
- // (await loadAndCacheVolume(series));
284153
- // console.log("volume", volume);
284154
- const volume = yield index_loadAndCacheVolume(series);
284155
- index_setVolumeForRenderingEngine(volume.volumeId, renderingEngineId);
284156
- renderingEngine.renderViewports(viewports.map(v => v.id));
284157
- const t1 = performance.now();
284158
- // TODO modificare lo store
284159
- // storeViewportData(image, element.id, storedViewport as Viewport, data);
284160
- (0,index_lodash.each)(viewports, function (viewport) {
284161
- index_imageStore_set(["ready", viewport.id, true]);
284162
- });
284163
- const t2 = performance.now();
284164
- index_logger_logger.debug(`Time to render volume: ${t2 - t1} milliseconds`);
284165
- // @ts-ignore
284166
- series = null;
284167
- // @ts-ignore
284168
- //data = null;
284169
- resolve();
284170
- }));
284171
- return renderPromise;
284231
+ return index_imaging3d_imageRendering_awaiter(this, void 0, void 0, function* () {
284232
+ const t0 = performance.now();
284233
+ const renderingEngine = index_getRenderingEngine(renderingEngineId);
284234
+ if (!renderingEngine) {
284235
+ index_logger_logger.error(`Rendering engine with id ${renderingEngineId} not found. Please initialize it first.`);
284236
+ throw new Error(`Rendering engine with id ${renderingEngineId} not found.`);
284237
+ }
284238
+ const viewports = renderingEngine.getVolumeViewports();
284239
+ if (viewports.length === 0) {
284240
+ index_logger_logger.error(`No volume viewports found for rendering engine ${renderingEngineId}. Please initialize them first.`);
284241
+ throw new Error(`No volume viewports found for rendering engine ${renderingEngineId}.`);
284242
+ }
284243
+ // const renderOptions = options ? options : {};
284244
+ // // TODO: CONTROLLA IMAGE ID NEL CASO DI MPR
284245
+ // //let data: StoreViewport = getSeriesData(series, renderOptions);
284246
+ const renderPromise = new Promise((resolve, _) => index_imaging3d_imageRendering_awaiter(this, void 0, void 0, function* () {
284247
+ // crea o prendi il volume dalla cache
284248
+ // const volume =
284249
+ // cornerstone.cache.getVolume(series.uniqueUID) ||
284250
+ // (await loadAndCacheVolume(series));
284251
+ // console.log("volume", volume);
284252
+ const volume = yield index_loadAndCacheVolume(series);
284253
+ index_setVolumeForRenderingEngine(volume.volumeId, renderingEngineId);
284254
+ renderingEngine.renderViewports(viewports.map(v => v.id));
284255
+ const t1 = performance.now();
284256
+ // TODO modificare lo store
284257
+ // storeViewportData(image, element.id, storedViewport as Viewport, data);
284258
+ (0,index_lodash.each)(viewports, function (viewport) {
284259
+ index_imageStore_set(["ready", viewport.id, true]);
284260
+ });
284261
+ const t2 = performance.now();
284262
+ index_logger_logger.debug(`Time to render volume: ${t2 - t1} milliseconds`);
284263
+ // @ts-ignore
284264
+ series = null;
284265
+ // @ts-ignore
284266
+ //data = null;
284267
+ resolve();
284268
+ }));
284269
+ // Wait for the render promise to complete
284270
+ yield renderPromise;
284271
+ // !!! setTimeout needed to et default viewport propertie to globalDefaultProperties
284272
+ setTimeout(() => {
284273
+ viewports.forEach(viewport => {
284274
+ var _a;
284275
+ const viewportElement = (_a = index_getEnabledElementByViewportId(viewport.id)) === null || _a === void 0 ? void 0 : _a.viewport;
284276
+ if (viewportElement) {
284277
+ viewportElement.setDefaultProperties(viewportElement.getProperties());
284278
+ }
284279
+ });
284280
+ }, 0);
284281
+ return renderingEngine;
284282
+ });
284172
284283
  };
284173
284284
  /**
284174
284285
  * Unload a MPR rendering engine
@@ -284202,6 +284313,30 @@ const index_resizeRenderingEngine = function (renderingEngineId) {
284202
284313
  }
284203
284314
  renderingEngine.resize(true, true); // true flags for fitToWindow and forceResize
284204
284315
  };
284316
+ /**
284317
+ * Reset viewport values (contrast, pan and zoom)
284318
+ * @instance
284319
+ * @function resetViewports
284320
+ * @param {Array} elementIds - The array of hmtl div ids
284321
+ * @param {Array} keys - The array of viewport sections to resets (default is all)
284322
+ */
284323
+ const index_imageRendering_resetViewports = function (elementIds, keys) {
284324
+ (0,index_lodash.each)(elementIds, function (elementId) {
284325
+ const viewport = index_getEnabledElementByViewportId(elementId).viewport;
284326
+ if (!keys || (keys === null || keys === void 0 ? void 0 : keys.includes("zoom"))) {
284327
+ viewport.setZoom(1);
284328
+ }
284329
+ if (!keys || (keys === null || keys === void 0 ? void 0 : keys.includes("pan"))) {
284330
+ viewport.setPan([0, 0]);
284331
+ }
284332
+ if (!keys || (keys === null || keys === void 0 ? void 0 : keys.includes("contrast"))) {
284333
+ const defaultVoiRange = viewport.getDefaultProperties(viewport.getCurrentImageId()).voiRange;
284334
+ viewport.setProperties({ voiRange: defaultVoiRange });
284335
+ }
284336
+ //TODO - add reset rotation
284337
+ viewport.render();
284338
+ });
284339
+ };
284205
284340
  // /**
284206
284341
  // * Purge the cornestone internal cache
284207
284342
  // * If seriesId is passed as argument only imageIds of the series are purged from internal cache
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "medical",
7
7
  "cornerstone"
8
8
  ],
9
- "version": "4.0.0-alpha.13",
9
+ "version": "4.0.0-alpha.15",
10
10
  "description": "typescript library for parsing, loading, rendering and interacting with DICOM images",
11
11
  "repository": {
12
12
  "url": "https://github.com/dvisionlab/Larvitar.git",