@cornerstonejs/core 2.0.0-beta.26 → 2.0.0-beta.28

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 (150) hide show
  1. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +5 -1
  2. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +56 -32
  3. package/dist/esm/RenderingEngine/RenderingEngine.js +7 -3
  4. package/dist/esm/RenderingEngine/StackViewport.d.ts +1 -2
  5. package/dist/esm/RenderingEngine/StackViewport.js +70 -85
  6. package/dist/esm/RenderingEngine/VideoViewport.js +50 -25
  7. package/dist/esm/RenderingEngine/Viewport.d.ts +3 -1
  8. package/dist/esm/RenderingEngine/Viewport.js +14 -8
  9. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -1
  10. package/dist/esm/RenderingEngine/VolumeViewport.js +15 -17
  11. package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +4 -1
  12. package/dist/esm/RenderingEngine/VolumeViewport3D.js +23 -3
  13. package/dist/esm/RenderingEngine/WSIViewport.d.ts +1 -1
  14. package/dist/esm/RenderingEngine/WSIViewport.js +31 -18
  15. package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +2 -0
  16. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +10 -11
  17. package/dist/esm/cache/cache.d.ts +1 -1
  18. package/dist/esm/cache/cache.js +8 -2
  19. package/dist/esm/cache/classes/StreamingDynamicImageVolume.js +2 -0
  20. package/dist/esm/enums/Events.d.ts +1 -1
  21. package/dist/esm/enums/Events.js +1 -1
  22. package/dist/esm/loaders/configuration/interleavedRetrieve.js +0 -3
  23. package/dist/esm/loaders/configuration/singleRetrieve.js +0 -3
  24. package/dist/esm/loaders/imageLoader.d.ts +9 -4
  25. package/dist/esm/loaders/imageLoader.js +55 -42
  26. package/dist/esm/loaders/index.d.ts +6 -0
  27. package/dist/esm/loaders/index.js +7 -0
  28. package/dist/esm/loaders/volumeLoader.d.ts +8 -4
  29. package/dist/esm/loaders/volumeLoader.js +26 -7
  30. package/dist/esm/types/AABB2.js +0 -1
  31. package/dist/esm/types/AABB3.js +0 -1
  32. package/dist/esm/types/ActorSliceRange.js +0 -1
  33. package/dist/esm/types/AffineMatrix.js +0 -1
  34. package/dist/esm/types/BoundsIJK.js +0 -1
  35. package/dist/esm/types/BoundsLPS.js +0 -1
  36. package/dist/esm/types/CPUFallbackColormap.js +0 -1
  37. package/dist/esm/types/CPUFallbackColormapData.js +0 -1
  38. package/dist/esm/types/CPUFallbackColormapsData.js +0 -1
  39. package/dist/esm/types/CPUFallbackEnabledElement.js +0 -1
  40. package/dist/esm/types/CPUFallbackLUT.js +0 -1
  41. package/dist/esm/types/CPUFallbackLookupTable.js +0 -1
  42. package/dist/esm/types/CPUFallbackRenderingTools.js +0 -1
  43. package/dist/esm/types/CPUFallbackTransform.js +0 -1
  44. package/dist/esm/types/CPUFallbackViewport.js +0 -1
  45. package/dist/esm/types/CPUFallbackViewportDisplayedArea.js +0 -1
  46. package/dist/esm/types/CPUIImageData.js +0 -1
  47. package/dist/esm/types/Color.js +0 -1
  48. package/dist/esm/types/Colormap.js +0 -1
  49. package/dist/esm/types/ContourData.js +0 -1
  50. package/dist/esm/types/Cornerstone3DConfig.js +0 -1
  51. package/dist/esm/types/CustomEventType.js +0 -1
  52. package/dist/esm/types/EventTypes.js +0 -1
  53. package/dist/esm/types/FlipDirection.js +0 -1
  54. package/dist/esm/types/IActor.js +0 -1
  55. package/dist/esm/types/IBaseVolumeViewport.js +0 -1
  56. package/dist/esm/types/ICache.js +0 -1
  57. package/dist/esm/types/ICachedGeometry.js +0 -1
  58. package/dist/esm/types/ICachedImage.js +0 -1
  59. package/dist/esm/types/ICachedVolume.js +0 -1
  60. package/dist/esm/types/ICamera.js +0 -1
  61. package/dist/esm/types/IContour.js +0 -1
  62. package/dist/esm/types/IContourSet.js +0 -1
  63. package/dist/esm/types/IDynamicImageVolume.js +0 -1
  64. package/dist/esm/types/IEnabledElement.js +0 -1
  65. package/dist/esm/types/IGeometry.js +0 -1
  66. package/dist/esm/types/IImage.js +0 -1
  67. package/dist/esm/types/IImageCalibration.js +0 -1
  68. package/dist/esm/types/IImageData.js +0 -1
  69. package/dist/esm/types/IImageFrame.js +0 -1
  70. package/dist/esm/types/IImageVolume.js +0 -1
  71. package/dist/esm/types/ILoadObject.js +0 -1
  72. package/dist/esm/types/IPointsManager.js +0 -1
  73. package/dist/esm/types/IRLEVoxelMap.js +0 -1
  74. package/dist/esm/types/IRegisterImageLoader.js +0 -1
  75. package/dist/esm/types/IRenderingEngine.js +0 -1
  76. package/dist/esm/types/IRetrieveConfiguration.js +0 -1
  77. package/dist/esm/types/IStackInput.js +0 -1
  78. package/dist/esm/types/IStackViewport.js +0 -1
  79. package/dist/esm/types/IStreamingImageVolume.js +0 -1
  80. package/dist/esm/types/IStreamingVolumeProperties.js +0 -1
  81. package/dist/esm/types/ISurface.js +0 -1
  82. package/dist/esm/types/ITransferFunctionNode.js +0 -1
  83. package/dist/esm/types/IVideoViewport.js +0 -1
  84. package/dist/esm/types/IViewport.js +0 -1
  85. package/dist/esm/types/IViewportId.js +0 -1
  86. package/dist/esm/types/IVolume.js +0 -1
  87. package/dist/esm/types/IVolumeInput.js +0 -1
  88. package/dist/esm/types/IVolumeViewport.js +0 -1
  89. package/dist/esm/types/IVoxelManager.js +0 -1
  90. package/dist/esm/types/IWSIViewport.js +0 -1
  91. package/dist/esm/types/ImageLoadListener.js +0 -1
  92. package/dist/esm/types/ImageLoadRequests.js +0 -1
  93. package/dist/esm/types/ImageLoaderFn.js +0 -1
  94. package/dist/esm/types/ImagePixelModule.js +0 -1
  95. package/dist/esm/types/ImagePlaneModule.js +0 -1
  96. package/dist/esm/types/ImageSliceData.js +0 -1
  97. package/dist/esm/types/ImageVolumeProps.js +0 -1
  98. package/dist/esm/types/Mat3.js +0 -1
  99. package/dist/esm/types/Metadata.js +0 -1
  100. package/dist/esm/types/MetadataModuleTypes.d.ts +4 -4
  101. package/dist/esm/types/MetadataModuleTypes.js +0 -1
  102. package/dist/esm/types/OrientationVectors.js +0 -1
  103. package/dist/esm/types/PixelDataTypedArray.js +0 -1
  104. package/dist/esm/types/Plane.js +0 -1
  105. package/dist/esm/types/Point2.js +0 -1
  106. package/dist/esm/types/Point3.js +0 -1
  107. package/dist/esm/types/Point4.js +0 -1
  108. package/dist/esm/types/RGB.js +0 -1
  109. package/dist/esm/types/ScalingParameters.js +0 -1
  110. package/dist/esm/types/StackViewportProperties.js +0 -1
  111. package/dist/esm/types/SurfaceData.js +0 -1
  112. package/dist/esm/types/TransformMatrix2D.js +0 -1
  113. package/dist/esm/types/VideoViewportProperties.js +0 -1
  114. package/dist/esm/types/VideoViewportTypes.js +0 -1
  115. package/dist/esm/types/ViewportInputOptions.js +0 -1
  116. package/dist/esm/types/ViewportPreset.js +0 -1
  117. package/dist/esm/types/ViewportProperties.d.ts +1 -0
  118. package/dist/esm/types/ViewportProperties.js +0 -1
  119. package/dist/esm/types/VolumeLoaderFn.js +0 -1
  120. package/dist/esm/types/VolumeProps.js +0 -1
  121. package/dist/esm/types/VolumeViewportProperties.js +0 -1
  122. package/dist/esm/types/WSIViewportProperties.js +0 -1
  123. package/dist/esm/types/displayArea.js +0 -1
  124. package/dist/esm/types/index.js +0 -1
  125. package/dist/esm/types/voi.js +0 -1
  126. package/dist/esm/utilities/VoxelManager.d.ts +3 -1
  127. package/dist/esm/utilities/VoxelManager.js +15 -9
  128. package/dist/esm/utilities/autoLoad.js +1 -1
  129. package/dist/esm/utilities/convertVolumeToStackViewport.js +1 -3
  130. package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +2 -1
  131. package/dist/esm/utilities/deepClone.d.ts +1 -0
  132. package/dist/esm/utilities/deepClone.js +28 -0
  133. package/dist/esm/utilities/eventListener/TargetEventListeners.js +1 -1
  134. package/dist/esm/utilities/getViewportImageIds.js +1 -3
  135. package/dist/esm/utilities/getViewportModality.js +1 -1
  136. package/dist/esm/utilities/getViewportsWithImageURI.d.ts +3 -3
  137. package/dist/esm/utilities/getViewportsWithImageURI.js +2 -9
  138. package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +1 -1
  139. package/dist/esm/utilities/getViewportsWithVolumeId.js +3 -5
  140. package/dist/esm/utilities/getViewportsWithVolumeURI.d.ts +3 -0
  141. package/dist/esm/utilities/getViewportsWithVolumeURI.js +14 -0
  142. package/dist/esm/utilities/index.d.ts +3 -1
  143. package/dist/esm/utilities/index.js +3 -1
  144. package/dist/esm/utilities/loadImageToCanvas.js +0 -4
  145. package/dist/esm/utilities/pointInShapeCallback.d.ts +24 -0
  146. package/dist/esm/utilities/pointInShapeCallback.js +92 -0
  147. package/dist/esm/webWorkerManager/webWorkerManager.d.ts +11 -4
  148. package/package.json +56 -29
  149. package/dist/umd/index.js +0 -2
  150. package/dist/umd/index.js.map +0 -1
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -7,4 +7,5 @@ export interface ViewportProperties {
7
7
  invert?: boolean;
8
8
  colormap?: ColormapPublic;
9
9
  interpolationType?: InterpolationType;
10
+ preset?: string;
10
11
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -2,7 +2,7 @@ import type { BoundsIJK, Point3, PixelDataTypedArray, IImage, RGB, CPUImageData,
2
2
  import type vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData';
3
3
  export default class VoxelManager<T> {
4
4
  modifiedSlices: Set<number>;
5
- boundsIJK: BoundsIJK;
5
+ private boundsIJK;
6
6
  map: Map<number, T> | IRLEVoxelMap<T>;
7
7
  sourceVoxelManager: IVoxelManager<T>;
8
8
  isInObject: (pointLPS: any, pointIJK: any) => boolean;
@@ -35,6 +35,7 @@ export default class VoxelManager<T> {
35
35
  toIJK(index: number): Point3;
36
36
  getMiddleSliceData: () => PixelDataTypedArray;
37
37
  toIndex(ijk: Point3): number;
38
+ getDefaultBounds(): BoundsIJK;
38
39
  getBoundsIJK(): BoundsIJK;
39
40
  forEach: (callback: (args: {
40
41
  value: unknown;
@@ -48,6 +49,7 @@ export default class VoxelManager<T> {
48
49
  imageData?: vtkImageData | CPUImageData;
49
50
  }) => any[];
50
51
  getScalarData(): PixelDataTypedArray;
52
+ setScalarData(newScalarData: PixelDataTypedArray): void;
51
53
  getScalarDataLength(): number;
52
54
  get sizeInBytes(): number;
53
55
  get bytePerVoxel(): number;
@@ -48,17 +48,17 @@ export default class VoxelManager {
48
48
  slicePlane: 2,
49
49
  });
50
50
  };
51
- this.forEach = (callback, options) => {
52
- const boundsIJK = options.boundsIJK || this.getBoundsIJK();
51
+ this.forEach = (callback, options = {}) => {
52
+ const isInObjectBoundsIJK = options.boundsIJK || this.getBoundsIJK();
53
53
  const isInObject = options.isInObject || this.isInObject || (() => true);
54
54
  const returnPoints = options.returnPoints || false;
55
55
  const useLPSTransform = options.imageData;
56
- const iMin = boundsIJK[0][0];
57
- const iMax = boundsIJK[0][1];
58
- const jMin = boundsIJK[1][0];
59
- const jMax = boundsIJK[1][1];
60
- const kMin = boundsIJK[2][0];
61
- const kMax = boundsIJK[2][1];
56
+ const iMin = Math.min(isInObjectBoundsIJK[0][0], isInObjectBoundsIJK[0][1]);
57
+ const iMax = Math.max(isInObjectBoundsIJK[0][0], isInObjectBoundsIJK[0][1]);
58
+ const jMin = Math.min(isInObjectBoundsIJK[1][0], isInObjectBoundsIJK[1][1]);
59
+ const jMax = Math.max(isInObjectBoundsIJK[1][0], isInObjectBoundsIJK[1][1]);
60
+ const kMin = Math.min(isInObjectBoundsIJK[2][0], isInObjectBoundsIJK[2][1]);
61
+ const kMax = Math.max(isInObjectBoundsIJK[2][0], isInObjectBoundsIJK[2][1]);
62
62
  const pointsInShape = [];
63
63
  if (useLPSTransform) {
64
64
  const { imageData } = options;
@@ -212,11 +212,14 @@ export default class VoxelManager {
212
212
  toIndex(ijk) {
213
213
  return ijk[0] + ijk[1] * this.width + ijk[2] * this.frameSize;
214
214
  }
215
+ getDefaultBounds() {
216
+ return this.dimensions.map((dimension) => [0, dimension - 1]);
217
+ }
215
218
  getBoundsIJK() {
216
219
  if (this.boundsIJK[0][0] < this.dimensions[0]) {
217
220
  return this.boundsIJK;
218
221
  }
219
- return this.dimensions.map((dimension) => [0, dimension - 1]);
222
+ return this.getDefaultBounds();
220
223
  }
221
224
  getScalarData() {
222
225
  if (this.scalarData) {
@@ -227,6 +230,9 @@ export default class VoxelManager {
227
230
  }
228
231
  throw new Error('No scalar data available');
229
232
  }
233
+ setScalarData(newScalarData) {
234
+ this.scalarData = newScalarData;
235
+ }
230
236
  getScalarDataLength() {
231
237
  if (this.scalarData) {
232
238
  return this.scalarData.length;
@@ -15,7 +15,7 @@ function getRenderingEngineAndViewportsContainingVolume(volumeId) {
15
15
  const renderingEnginesArray = getRenderingEngines();
16
16
  const renderingEngineAndViewportIds = [];
17
17
  renderingEnginesArray.forEach((renderingEngine) => {
18
- const viewports = getViewportsWithVolumeId(volumeId, renderingEngine.id);
18
+ const viewports = getViewportsWithVolumeId(volumeId);
19
19
  if (viewports.length) {
20
20
  renderingEngineAndViewportIds.push({
21
21
  renderingEngine,
@@ -7,9 +7,7 @@ async function convertVolumeToStackViewport({ viewport, options, }) {
7
7
  const renderingEngine = viewport.getRenderingEngine();
8
8
  const { background } = options;
9
9
  const viewportId = options.viewportId || id;
10
- const actorEntry = volumeViewport.getDefaultActor();
11
- const { uid: volumeId } = actorEntry;
12
- const volume = cache.getVolume(volumeId);
10
+ const volume = cache.getVolume(volumeViewport.getVolumeId());
13
11
  if (!(volume instanceof ImageVolume)) {
14
12
  throw new Error('Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.');
15
13
  }
@@ -1,2 +1,3 @@
1
+ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
1
2
  import type { VOIRange } from '../types/voi';
2
- export default function createSigmoidRGBTransferFunction(voiRange: VOIRange, approximationNodes?: number): unknown;
3
+ export default function createSigmoidRGBTransferFunction(voiRange: VOIRange, approximationNodes?: number): vtkColorTransferFunction;
@@ -0,0 +1 @@
1
+ export declare function deepClone(obj: unknown): unknown;
@@ -0,0 +1,28 @@
1
+ export function deepClone(obj) {
2
+ if (obj === null || typeof obj !== 'object') {
3
+ return obj;
4
+ }
5
+ if (typeof obj === 'function') {
6
+ return obj;
7
+ }
8
+ if (typeof structuredClone === 'function') {
9
+ try {
10
+ return structuredClone(obj);
11
+ }
12
+ catch (error) {
13
+ console.debug('structuredClone failed, falling back to custom implementation');
14
+ }
15
+ }
16
+ if (Array.isArray(obj)) {
17
+ return obj.map(deepClone);
18
+ }
19
+ else {
20
+ const clonedObj = {};
21
+ for (const key in obj) {
22
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
23
+ clonedObj[key] = deepClone(obj[key]);
24
+ }
25
+ }
26
+ return clonedObj;
27
+ }
28
+ }
@@ -67,7 +67,7 @@ class TargetEventListeners {
67
67
  listenersMap = new Map();
68
68
  this._eventListeners.set(type, listenersMap);
69
69
  }
70
- const useCapture = options.capture ?? false;
70
+ const useCapture = options?.capture ?? false;
71
71
  const listenerPhase = useCapture
72
72
  ? EventListenerPhases.Capture
73
73
  : EventListenerPhases.Bubble;
@@ -2,9 +2,7 @@ import { VolumeViewport } from '../RenderingEngine';
2
2
  import cache from '../cache/cache';
3
3
  function getViewportImageIds(viewport) {
4
4
  if (viewport instanceof VolumeViewport) {
5
- const defaultActor = viewport.getDefaultActor();
6
- const volumeId = defaultActor.uid;
7
- const volume = cache.getVolume(volumeId);
5
+ const volume = cache.getVolume(viewport.getVolumeId());
8
6
  return volume.imageIds;
9
7
  }
10
8
  else if (viewport.getImageIds) {
@@ -6,7 +6,7 @@ function _getViewportModality(viewport, volumeId, getVolume) {
6
6
  return viewport.modality;
7
7
  }
8
8
  if (viewport.setVolumes) {
9
- volumeId = volumeId ?? viewport.getDefaultActor().uid;
9
+ volumeId = volumeId ?? viewport.getVolumeId();
10
10
  if (!volumeId || !getVolume) {
11
11
  return;
12
12
  }
@@ -1,4 +1,4 @@
1
- import type { IStackViewport, IVolumeViewport } from '../types';
2
- type Viewport = IStackViewport | IVolumeViewport;
3
- export default function getViewportsWithImageURI(imageURI: string, renderingEngineId?: string): Viewport[];
1
+ import type { IBaseVolumeViewport, IStackViewport } from '../types';
2
+ type Viewport = IStackViewport | IBaseVolumeViewport;
3
+ export default function getViewportsWithImageURI(imageURI: string): Viewport[];
4
4
  export {};
@@ -1,13 +1,6 @@
1
- import { getRenderingEngine } from '../RenderingEngine';
2
1
  import { getRenderingEngines } from '../RenderingEngine/getRenderingEngine';
3
- export default function getViewportsWithImageURI(imageURI, renderingEngineId) {
4
- let renderingEngines;
5
- if (renderingEngineId) {
6
- renderingEngines = [getRenderingEngine(renderingEngineId)];
7
- }
8
- else {
9
- renderingEngines = getRenderingEngines();
10
- }
2
+ export default function getViewportsWithImageURI(imageURI) {
3
+ const renderingEngines = getRenderingEngines();
11
4
  const viewports = [];
12
5
  renderingEngines.forEach((renderingEngine) => {
13
6
  const viewportsForRenderingEngine = renderingEngine.getViewports();
@@ -1,3 +1,3 @@
1
1
  import type { IVolumeViewport } from '../types';
2
- declare function getViewportsWithVolumeId(volumeId: string, renderingEngineId?: string): IVolumeViewport[];
2
+ declare function getViewportsWithVolumeId(volumeId: string): IVolumeViewport[];
3
3
  export default getViewportsWithVolumeId;
@@ -1,8 +1,6 @@
1
- import { getRenderingEngines, getRenderingEngine, } from '../RenderingEngine/getRenderingEngine';
2
- function getViewportsWithVolumeId(volumeId, renderingEngineId) {
3
- const renderingEngines = renderingEngineId
4
- ? [getRenderingEngine(renderingEngineId)]
5
- : getRenderingEngines();
1
+ import { getRenderingEngines } from '../RenderingEngine/getRenderingEngine';
2
+ function getViewportsWithVolumeId(volumeId) {
3
+ const renderingEngines = getRenderingEngines();
6
4
  const targetViewports = [];
7
5
  renderingEngines.forEach((renderingEngine) => {
8
6
  const viewports = renderingEngine.getVolumeViewports();
@@ -0,0 +1,3 @@
1
+ import type { IVolumeViewport } from '../types';
2
+ declare function getViewportsWithVolumeURI(volumeURI: string, renderingEngineId?: string): IVolumeViewport[];
3
+ export default getViewportsWithVolumeURI;
@@ -0,0 +1,14 @@
1
+ import { getRenderingEngines, getRenderingEngine, } from '../RenderingEngine/getRenderingEngine';
2
+ function getViewportsWithVolumeURI(volumeURI, renderingEngineId) {
3
+ const renderingEngines = renderingEngineId
4
+ ? [getRenderingEngine(renderingEngineId)]
5
+ : getRenderingEngines();
6
+ const targetViewports = [];
7
+ renderingEngines.forEach((renderingEngine) => {
8
+ const viewports = renderingEngine.getVolumeViewports();
9
+ const filteredViewports = viewports.filter((vp) => vp.hasVolumeURI(volumeURI));
10
+ targetViewports.push(...filteredViewports);
11
+ });
12
+ return targetViewports;
13
+ }
14
+ export default getViewportsWithVolumeURI;
@@ -67,6 +67,7 @@ import getViewportImageIds from './getViewportImageIds';
67
67
  import { getRandomSampleFromArray } from './getRandomSampleFromArray';
68
68
  import { getVolumeId } from './getVolumeId';
69
69
  import { hasFloatScalingParameters } from './hasFloatScalingParameters';
70
+ import { pointInShapeCallback } from './pointInShapeCallback';
70
71
  import * as planar from './planar';
71
72
  import * as windowLevel from './windowLevel';
72
73
  import * as colormap from './colormap';
@@ -77,5 +78,6 @@ import getDynamicVolumeInfo from './getDynamicVolumeInfo';
77
78
  import autoLoad from './autoLoad';
78
79
  import scaleArray from './scaleArray';
79
80
  import splitImageIdsBy4DTags from './splitImageIdsBy4DTags';
81
+ import { deepClone } from './deepClone';
80
82
  declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
81
- export { eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isEqualAbs, isEqualNegative, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, splitImageIdsBy4DTags, };
83
+ export { eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isEqualAbs, isEqualNegative, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, };
@@ -67,6 +67,7 @@ import getViewportImageIds from './getViewportImageIds';
67
67
  import { getRandomSampleFromArray } from './getRandomSampleFromArray';
68
68
  import { getVolumeId } from './getVolumeId';
69
69
  import { hasFloatScalingParameters } from './hasFloatScalingParameters';
70
+ import { pointInShapeCallback } from './pointInShapeCallback';
70
71
  import * as planar from './planar';
71
72
  import * as windowLevel from './windowLevel';
72
73
  import * as colormap from './colormap';
@@ -78,5 +79,6 @@ import getDynamicVolumeInfo from './getDynamicVolumeInfo';
78
79
  import autoLoad from './autoLoad';
79
80
  import scaleArray from './scaleArray';
80
81
  import splitImageIdsBy4DTags from './splitImageIdsBy4DTags';
82
+ import { deepClone } from './deepClone';
81
83
  const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
82
- export { eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isEqualAbs, isEqualNegative, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, splitImageIdsBy4DTags, };
84
+ export { eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isEqualAbs, isEqualNegative, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, };
@@ -47,11 +47,7 @@ export default function loadImageToCanvas(options) {
47
47
  errorCallback.call(this, error, imageId);
48
48
  });
49
49
  }
50
- const { useNorm16Texture } = getConfiguration().rendering;
51
50
  const options = {
52
- targetBuffer: {
53
- type: useNorm16Texture ? undefined : 'Float32Array',
54
- },
55
51
  useRGBA: !!useCPURendering,
56
52
  requestType,
57
53
  };
@@ -0,0 +1,24 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ import type { vtkImageData } from '@kitware/vtk.js/Common/DataModel/ImageData';
3
+ import type BoundsIJK from '../types/BoundsIJK';
4
+ import type { CPUImageData, Point3 } from '../types';
5
+ export type PointInShape = {
6
+ value: number;
7
+ index: number;
8
+ pointIJK: vec3;
9
+ pointLPS: vec3 | number[];
10
+ };
11
+ export type PointInShapeCallback = ({ value, index, pointIJK, pointLPS, }: {
12
+ value: number;
13
+ index: number;
14
+ pointIJK: Point3;
15
+ pointLPS: Point3;
16
+ }) => void;
17
+ export type ShapeFnCriteria = (pointLPS: vec3, pointIJK: vec3) => boolean;
18
+ export interface PointInShapeOptions {
19
+ pointInShapeFn: ShapeFnCriteria;
20
+ callback?: PointInShapeCallback;
21
+ boundsIJK?: BoundsIJK;
22
+ returnPoints?: boolean;
23
+ }
24
+ export declare function pointInShapeCallback(imageData: vtkImageData | CPUImageData, options: PointInShapeOptions): Array<PointInShape> | undefined;
@@ -0,0 +1,92 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ export function pointInShapeCallback(imageData, options) {
3
+ const { pointInShapeFn, callback, boundsIJK, returnPoints = false, } = options;
4
+ let iMin, iMax, jMin, jMax, kMin, kMax;
5
+ let scalarData;
6
+ const { numComps } = imageData;
7
+ if (imageData.getScalarData) {
8
+ scalarData = imageData.getScalarData();
9
+ }
10
+ else {
11
+ scalarData = imageData
12
+ .getPointData()
13
+ .getScalars()
14
+ .getData();
15
+ }
16
+ if (!scalarData) {
17
+ console.warn('No scalar data found for imageData', imageData);
18
+ return;
19
+ }
20
+ const dimensions = imageData.getDimensions();
21
+ if (!boundsIJK) {
22
+ iMin = 0;
23
+ iMax = dimensions[0];
24
+ jMin = 0;
25
+ jMax = dimensions[1];
26
+ kMin = 0;
27
+ kMax = dimensions[2];
28
+ }
29
+ else {
30
+ [[iMin, iMax], [jMin, jMax], [kMin, kMax]] = boundsIJK;
31
+ }
32
+ const start = vec3.fromValues(iMin, jMin, kMin);
33
+ const direction = imageData.getDirection();
34
+ const rowCosines = direction.slice(0, 3);
35
+ const columnCosines = direction.slice(3, 6);
36
+ const scanAxisNormal = direction.slice(6, 9);
37
+ const spacing = imageData.getSpacing();
38
+ const [rowSpacing, columnSpacing, scanAxisSpacing] = spacing;
39
+ const worldPosStart = imageData.indexToWorld(start);
40
+ const rowStep = vec3.fromValues(rowCosines[0] * rowSpacing, rowCosines[1] * rowSpacing, rowCosines[2] * rowSpacing);
41
+ const columnStep = vec3.fromValues(columnCosines[0] * columnSpacing, columnCosines[1] * columnSpacing, columnCosines[2] * columnSpacing);
42
+ const scanAxisStep = vec3.fromValues(scanAxisNormal[0] * scanAxisSpacing, scanAxisNormal[1] * scanAxisSpacing, scanAxisNormal[2] * scanAxisSpacing);
43
+ const xMultiple = numComps ||
44
+ scalarData.length / dimensions[2] / dimensions[1] / dimensions[0];
45
+ const yMultiple = dimensions[0] * xMultiple;
46
+ const zMultiple = dimensions[1] * yMultiple;
47
+ const pointsInShape = [];
48
+ const currentPos = vec3.clone(worldPosStart);
49
+ for (let k = kMin; k <= kMax; k++) {
50
+ const startPosJ = vec3.clone(currentPos);
51
+ for (let j = jMin; j <= jMax; j++) {
52
+ const startPosI = vec3.clone(currentPos);
53
+ for (let i = iMin; i <= iMax; i++) {
54
+ const pointIJK = [i, j, k];
55
+ if (pointInShapeFn(currentPos, pointIJK)) {
56
+ const index = k * zMultiple + j * yMultiple + i * xMultiple;
57
+ let value;
58
+ if (xMultiple > 2) {
59
+ value = [
60
+ scalarData[index],
61
+ scalarData[index + 1],
62
+ scalarData[index + 2],
63
+ ];
64
+ }
65
+ else {
66
+ value = scalarData[index];
67
+ }
68
+ pointsInShape.push({
69
+ value,
70
+ index,
71
+ pointIJK,
72
+ pointLPS: currentPos.slice(),
73
+ });
74
+ if (callback) {
75
+ callback({
76
+ value,
77
+ index,
78
+ pointIJK,
79
+ pointLPS: currentPos,
80
+ });
81
+ }
82
+ }
83
+ vec3.add(currentPos, currentPos, rowStep);
84
+ }
85
+ vec3.copy(currentPos, startPosI);
86
+ vec3.add(currentPos, currentPos, columnStep);
87
+ }
88
+ vec3.copy(currentPos, startPosJ);
89
+ vec3.add(currentPos, currentPos, scanAxisStep);
90
+ }
91
+ return returnPoints ? pointsInShape : undefined;
92
+ }
@@ -2,16 +2,23 @@ export default CentralizedWorkerManager;
2
2
  declare class CentralizedWorkerManager {
3
3
  workerRegistry: {};
4
4
  workerPoolManager: RequestPoolManager;
5
- registerWorker(workerName: any, workerFn: any, options?: {}): void;
5
+ registerWorker(workerName: any, workerFn: any, options?: {
6
+ maxWorkerInstances?: number;
7
+ overwrite?: boolean;
8
+ autoTerminateOnIdle?: {
9
+ enabled?: boolean;
10
+ idleTimeThreshold?: number;
11
+ };
12
+ }): void;
6
13
  getNextWorkerAPI(workerName: any): {
7
14
  api: any;
8
15
  index: number;
9
16
  };
10
- executeTask(workerName: any, methodName: any, args?: {}, { requestType, priority, options, callbacks, }?: {
17
+ executeTask(workerName: string, methodName: string, args?: object, { requestType, priority, options, callbacks, }?: {
11
18
  requestType?: RequestType;
12
19
  priority?: number;
13
- options?: {};
14
- callbacks?: any[];
20
+ options?: object;
21
+ callbacks?: Function[];
15
22
  }): Promise<any>;
16
23
  terminateIdleWorkers(workerName: any, idleTimeThreshold: any): void;
17
24
  terminate(workerName: any): void;
package/package.json CHANGED
@@ -1,46 +1,73 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "2.0.0-beta.26",
3
+ "version": "2.0.0-beta.28",
4
4
  "description": "",
5
- "main": "dist/umd/index.js",
6
- "types": "dist/esm/index.d.ts",
7
- "module": "dist/esm/index.js",
5
+ "main": "./dist/umd/index.js",
6
+ "module": "./dist/esm/index.js",
7
+ "types": "./dist/esm/index.d.ts",
8
8
  "repository": "https://github.com/cornerstonejs/cornerstone3D",
9
9
  "files": [
10
- "dist/"
10
+ "dist/esm",
11
+ "dist/umd"
11
12
  ],
12
- "directories": {
13
- "test": "test"
14
- },
15
13
  "sideEffects": false,
16
14
  "exports": {
17
- ".": "./dist/esm/index.js",
18
- "./utilities/*": "./dist/esm/utilities/*.js",
19
- "./utilities": "./dist/esm/utilities/index.js",
20
- "./constants/*": "./dist/esm/constants/*.js",
21
- "./constants": "./dist/esm/constants/index.js",
22
- "./enums/*": "./dist/esm/enums/*.js",
23
- "./enums": "./dist/esm/enums/index.js",
24
- "./loaders/*": "./dist/esm/loaders/*.js",
25
- "./loaders": "./dist/esm/loaders/index.js",
26
- "./types/*": "./dist/esm/types/*.d.ts",
27
- "./types": "./dist/esm/types/index.d.ts"
15
+ ".": {
16
+ "import": "./dist/esm/index.js",
17
+ "types": "./dist/esm/index.d.ts"
18
+ },
19
+ "./utilities": {
20
+ "import": "./dist/esm/utilities/index.js",
21
+ "types": "./dist/esm/utilities/index.d.ts"
22
+ },
23
+ "./utilities/*": {
24
+ "import": "./dist/esm/utilities/*.js",
25
+ "types": "./dist/esm/utilities/*.d.ts"
26
+ },
27
+ "./constants": {
28
+ "import": "./dist/esm/constants/index.js",
29
+ "types": "./dist/esm/constants/index.d.ts"
30
+ },
31
+ "./constants/*": {
32
+ "import": "./dist/esm/constants/*.js",
33
+ "types": "./dist/esm/constants/*.d.ts"
34
+ },
35
+ "./enums": {
36
+ "import": "./dist/esm/enums/index.js",
37
+ "types": "./dist/esm/enums/index.d.ts"
38
+ },
39
+ "./enums/*": {
40
+ "import": "./dist/esm/enums/*.js",
41
+ "types": "./dist/esm/enums/*.d.ts"
42
+ },
43
+ "./loaders": {
44
+ "import": "./dist/esm/loaders/index.js",
45
+ "types": "./dist/esm/loaders/index.d.ts"
46
+ },
47
+ "./loaders/*": {
48
+ "import": "./dist/esm/loaders/*.js",
49
+ "types": "./dist/esm/loaders/*.d.ts"
50
+ },
51
+ "./types": {
52
+ "types": "./dist/esm/types/index.d.ts"
53
+ },
54
+ "./types/*": {
55
+ "types": "./dist/esm/types/*.d.ts"
56
+ }
28
57
  },
29
58
  "scripts": {
30
- "build:esm": "tsc --project ./tsconfig.esm.json",
31
- "build:esm:watch": "tsc --project ./tsconfig.esm.json --watch",
32
- "build:umd": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js",
33
- "build:all": "yarn run build:umd && yarn run build:esm",
59
+ "build:esm": "tsc --project ./tsconfig.json",
60
+ "build:esm:watch": "tsc --project ./tsconfig.json --watch",
34
61
  "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist",
35
62
  "clean:deep": "yarn run clean && shx rm -rf node_modules",
36
- "copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" dist/esm",
37
- "build": "yarn run build:all && yarn run copy-dts",
38
- "dev": "tsc --project ./tsconfig.esm.json --watch",
63
+ "build": "yarn run build:esm",
64
+ "build:umd": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js",
65
+ "build:all": "yarn run build:esm && yarn run build:umd",
66
+ "dev": "tsc --project ./tsconfig.json --watch",
39
67
  "format-check": "npx eslint ./src --quiet",
40
68
  "api-check": "api-extractor --debug run ",
41
69
  "build:update-api": "yarn run build:esm && api-extractor run --local",
42
- "prepublishOnly": "yarn run build",
43
- "webpack:watch": "webpack --mode development --progress --watch --config ./.webpack/webpack.dev.js"
70
+ "prepublishOnly": "yarn run build"
44
71
  },
45
72
  "dependencies": {
46
73
  "@kitware/vtk.js": "32.1.0",
@@ -58,5 +85,5 @@
58
85
  "type": "individual",
59
86
  "url": "https://ohif.org/donate"
60
87
  },
61
- "gitHead": "0057ad13cf215a53e567dbdbab71404f234969e4"
88
+ "gitHead": "f07f340e5b63d3afdda66bfe35c9cef729a5b69d"
62
89
  }