@cornerstonejs/core 2.6.5 → 2.7.1

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.
@@ -6,7 +6,7 @@ interface VolumeLoaderOptions {
6
6
  progressiveRendering?: boolean;
7
7
  }
8
8
  interface DerivedVolumeOptions {
9
- volumeId: string;
9
+ volumeId?: string;
10
10
  targetBuffer?: {
11
11
  type: PixelDataTypedArrayString;
12
12
  };
@@ -0,0 +1,7 @@
1
+ import type { AABB3, PixelDataTypedArrayString } from '../types';
2
+ declare function createSubVolume(referencedVolumeId: string, boundsIJK: AABB3, options?: {
3
+ targetBuffer?: {
4
+ type: PixelDataTypedArrayString;
5
+ };
6
+ }): import("..").ImageVolume;
7
+ export { createSubVolume as default, createSubVolume };
@@ -0,0 +1,60 @@
1
+ import transformWorldToIndex from './transformWorldToIndex';
2
+ import transformIndexToWorld from './transformIndexToWorld';
3
+ import uuidv4 from './uuidv4';
4
+ import { createLocalVolume } from '../loaders/volumeLoader';
5
+ import cache from '../cache/cache';
6
+ function createSubVolume(referencedVolumeId, boundsIJK, options = {}) {
7
+ const referencedVolume = cache.getVolume(referencedVolumeId);
8
+ if (!referencedVolume) {
9
+ throw new Error(`Referenced volume with id ${referencedVolumeId} does not exist.`);
10
+ }
11
+ const { metadata, spacing, direction, dimensions: refVolumeDim, } = referencedVolume;
12
+ const { minX, maxX, minY, maxY, minZ, maxZ } = boundsIJK;
13
+ const ijkTopLeft = [
14
+ Math.min(minX, maxX),
15
+ Math.min(minY, maxY),
16
+ Math.min(minZ, maxZ),
17
+ ];
18
+ const boundingBoxOriginWorld = transformIndexToWorld(referencedVolume.imageData, ijkTopLeft);
19
+ const dimensions = [
20
+ Math.abs(maxX - minX) + 1,
21
+ Math.abs(maxY - minY) + 1,
22
+ Math.abs(maxZ - minZ) + 1,
23
+ ];
24
+ const { targetBuffer } = options;
25
+ const subVolumeOptions = {
26
+ metadata,
27
+ dimensions,
28
+ spacing,
29
+ origin: boundingBoxOriginWorld,
30
+ direction,
31
+ targetBuffer,
32
+ scalarData: targetBuffer?.type === 'Float32Array'
33
+ ? new Float32Array(dimensions[0] * dimensions[1] * dimensions[2])
34
+ : undefined,
35
+ };
36
+ const subVolume = createLocalVolume(uuidv4(), subVolumeOptions);
37
+ const subVolumeData = subVolume.voxelManager.getCompleteScalarDataArray();
38
+ const subVolumeSliceSize = dimensions[0] * dimensions[1];
39
+ const refVolumeSliceSize = refVolumeDim[0] * refVolumeDim[1];
40
+ const refVolumeData = referencedVolume.voxelManager.getCompleteScalarDataArray();
41
+ for (let z = 0; z < dimensions[2]; z++) {
42
+ for (let y = 0; y < dimensions[1]; y++) {
43
+ const rowStartWorld = transformIndexToWorld(subVolume.imageData, [
44
+ 0,
45
+ y,
46
+ z,
47
+ ]);
48
+ const refVolumeRowStartIJK = transformWorldToIndex(referencedVolume.imageData, rowStartWorld);
49
+ const refVolumeRowStartOffset = refVolumeRowStartIJK[2] * refVolumeSliceSize +
50
+ refVolumeRowStartIJK[1] * refVolumeDim[0] +
51
+ refVolumeRowStartIJK[0];
52
+ const rowData = refVolumeData.slice(refVolumeRowStartOffset, refVolumeRowStartOffset + dimensions[0]);
53
+ const subVolumeLineStartOffset = z * subVolumeSliceSize + y * dimensions[0];
54
+ subVolumeData.set(rowData, subVolumeLineStartOffset);
55
+ }
56
+ }
57
+ subVolume.voxelManager.setCompleteScalarDataArray(subVolumeData);
58
+ return subVolume;
59
+ }
60
+ export { createSubVolume as default, createSubVolume };
@@ -0,0 +1,10 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ declare function getVolumeDirectionVectors(imageData: any, camera: any): {
3
+ worldVecRowDir: vec3;
4
+ worldVecColDir: vec3;
5
+ worldVecSliceDir: vec3;
6
+ ijkVecRowDir: vec3;
7
+ ijkVecColDir: vec3;
8
+ ijkVecSliceDir: vec3;
9
+ };
10
+ export { getVolumeDirectionVectors as default, getVolumeDirectionVectors };
@@ -0,0 +1,23 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ import { transformWorldToIndexContinuous } from './transformWorldToIndex';
3
+ function getVolumeDirectionVectors(imageData, camera) {
4
+ const { viewUp, viewPlaneNormal } = camera;
5
+ const ijkOrigin = transformWorldToIndexContinuous(imageData, [0, 0, 0]);
6
+ const worldVecColDir = vec3.negate(vec3.create(), viewUp);
7
+ const worldVecSliceDir = vec3.negate(vec3.create(), viewPlaneNormal);
8
+ const worldVecRowDir = vec3.cross(vec3.create(), worldVecColDir, worldVecSliceDir);
9
+ const ijkVecColDir = vec3.sub(vec3.create(), transformWorldToIndexContinuous(imageData, worldVecColDir), ijkOrigin);
10
+ const ijkVecSliceDir = vec3.sub(vec3.create(), transformWorldToIndexContinuous(imageData, worldVecSliceDir), ijkOrigin);
11
+ vec3.normalize(ijkVecColDir, ijkVecColDir);
12
+ vec3.normalize(ijkVecSliceDir, ijkVecSliceDir);
13
+ const ijkVecRowDir = vec3.cross(vec3.create(), ijkVecColDir, ijkVecSliceDir);
14
+ return {
15
+ worldVecRowDir,
16
+ worldVecColDir,
17
+ worldVecSliceDir,
18
+ ijkVecRowDir,
19
+ ijkVecColDir,
20
+ ijkVecSliceDir,
21
+ };
22
+ }
23
+ export { getVolumeDirectionVectors as default, getVolumeDirectionVectors };
@@ -20,7 +20,7 @@ import getVolumeActorCorners from './getVolumeActorCorners';
20
20
  import indexWithinDimensions from './indexWithinDimensions';
21
21
  import getVolumeViewportsContainingSameVolumes from './getVolumeViewportsContainingSameVolumes';
22
22
  import getViewportsWithVolumeId from './getViewportsWithVolumeId';
23
- import transformWorldToIndex from './transformWorldToIndex';
23
+ import transformWorldToIndex, { transformWorldToIndexContinuous } from './transformWorldToIndex';
24
24
  import transformIndexToWorld from './transformIndexToWorld';
25
25
  import loadImageToCanvas from './loadImageToCanvas';
26
26
  import * as HistoryMemo from './historyMemo';
@@ -84,5 +84,7 @@ import { deepClone } from './deepClone';
84
84
  import { jumpToSlice } from './jumpToSlice';
85
85
  import scroll from './scroll';
86
86
  import clip from './clip';
87
+ import createSubVolume from './createSubVolume';
88
+ import getVolumeDirectionVectors from './getVolumeDirectionVectors';
87
89
  declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
88
- 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, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, };
90
+ 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, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, };
@@ -20,7 +20,7 @@ import getVolumeActorCorners from './getVolumeActorCorners';
20
20
  import indexWithinDimensions from './indexWithinDimensions';
21
21
  import getVolumeViewportsContainingSameVolumes from './getVolumeViewportsContainingSameVolumes';
22
22
  import getViewportsWithVolumeId from './getViewportsWithVolumeId';
23
- import transformWorldToIndex from './transformWorldToIndex';
23
+ import transformWorldToIndex, { transformWorldToIndexContinuous, } from './transformWorldToIndex';
24
24
  import transformIndexToWorld from './transformIndexToWorld';
25
25
  import loadImageToCanvas from './loadImageToCanvas';
26
26
  import * as HistoryMemo from './historyMemo';
@@ -85,5 +85,7 @@ import { deepClone } from './deepClone';
85
85
  import { jumpToSlice } from './jumpToSlice';
86
86
  import scroll from './scroll';
87
87
  import clip from './clip';
88
+ import createSubVolume from './createSubVolume';
89
+ import getVolumeDirectionVectors from './getVolumeDirectionVectors';
88
90
  const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
89
- 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, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, };
91
+ 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, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, };
@@ -1,2 +1,3 @@
1
1
  import type Point3 from '../types/Point3';
2
2
  export default function transformWorldToIndex(imageData: any, worldPos: Point3): any;
3
+ export declare function transformWorldToIndexContinuous(imageData: any, worldPos: Point3): any;
@@ -3,3 +3,6 @@ export default function transformWorldToIndex(imageData, worldPos) {
3
3
  const index = continuousIndex.map(Math.round);
4
4
  return index;
5
5
  }
6
+ export function transformWorldToIndexContinuous(imageData, worldPos) {
7
+ return imageData.worldToIndex(worldPos);
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "2.6.5",
3
+ "version": "2.7.1",
4
4
  "description": "",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/esm/index.d.ts",
@@ -82,5 +82,5 @@
82
82
  "type": "individual",
83
83
  "url": "https://ohif.org/donate"
84
84
  },
85
- "gitHead": "5a7542df55c3b378f1fce4d56aa745c1161f5c26"
85
+ "gitHead": "bad9df9ca06d63d00d0ea9463364c355c1a57850"
86
86
  }