@cornerstonejs/core 4.12.4 → 4.12.5

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.
@@ -632,8 +632,11 @@ class StackViewport extends Viewport {
632
632
  calibrateIfNecessary(imageId, imagePlaneModule) {
633
633
  const calibration = metaData.get('calibratedPixelSpacing', imageId);
634
634
  const isUpdated = this.calibration !== calibration;
635
- const { scale } = calibration || {};
636
- this.hasPixelSpacing = scale > 0 || imagePlaneModule.rowPixelSpacing > 0;
635
+ const scale = calibration?.scale;
636
+ this.hasPixelSpacing =
637
+ scale > 0 ||
638
+ (!imagePlaneModule.usingDefaultValues &&
639
+ imagePlaneModule.rowPixelSpacing > 0);
637
640
  imagePlaneModule.calibration = calibration;
638
641
  if (!isUpdated) {
639
642
  return imagePlaneModule;
@@ -1,16 +1,13 @@
1
1
  import { CalibrationTypes } from '../enums';
2
- export default function getPixelSpacingInformation(instance: any): {
2
+ export declare function getERMF(instance: any): any;
3
+ export declare function calculateRadiographicPixelSpacing(instance: any): {
3
4
  PixelSpacing: any;
4
5
  type: CalibrationTypes;
5
6
  isProjection: boolean;
6
- PixelSpacingCalibrationType?: undefined;
7
- PixelSpacingCalibrationDescription?: undefined;
8
- } | {
7
+ };
8
+ export declare function getPixelSpacingInformation(instance: any): {
9
9
  PixelSpacing: any;
10
10
  type: CalibrationTypes;
11
11
  isProjection: boolean;
12
- PixelSpacingCalibrationType: any;
13
- PixelSpacingCalibrationDescription: any;
14
- } | {
15
- PixelSpacing: number[];
16
12
  };
13
+ export default getPixelSpacingInformation;
@@ -14,50 +14,62 @@ const projectionRadiographSOPClassUIDs = new Set([
14
14
  '1.2.840.10008.5.1.4.1.1.12.2.1',
15
15
  '1.2.840.10008.5.1.4.1.1.12.3',
16
16
  ]);
17
- const alreadySeenWarn = new Set();
18
- function calculateRadiographicPixelSpacing(instance) {
19
- const { PixelSpacing, ImagerPixelSpacing, EstimatedRadiographicMagnificationFactor, PixelSpacingCalibrationType, PixelSpacingCalibrationDescription, } = instance;
20
- const isProjection = true;
21
- if (!ImagerPixelSpacing) {
22
- return {
23
- PixelSpacing,
24
- type: CalibrationTypes.UNKNOWN,
25
- isProjection,
26
- };
17
+ export function getERMF(instance) {
18
+ const { PixelSpacing, ImagerPixelSpacing, EstimatedRadiographicMagnificationFactor: ermf, DistanceSourceToDetector: sid, DistanceSourceToPatient: sod, } = instance;
19
+ if (ermf) {
20
+ return ermf;
27
21
  }
28
- if (!PixelSpacing) {
29
- if (!EstimatedRadiographicMagnificationFactor) {
30
- if (!alreadySeenWarn.has(instance.SeriesInstanceUID)) {
31
- console.warn('EstimatedRadiographicMagnificationFactor was not present on series', instance.SeriesInstanceUID, ' Unable to correct ImagerPixelSpacing.');
32
- alreadySeenWarn.add(instance.SeriesInstanceUID);
33
- }
34
- return {
35
- PixelSpacing: ImagerPixelSpacing,
36
- type: CalibrationTypes.PROJECTION,
37
- isProjection,
38
- };
22
+ if (sod < sid) {
23
+ return sid / sod;
24
+ }
25
+ if (ImagerPixelSpacing?.[0] > PixelSpacing?.[0]) {
26
+ return true;
27
+ }
28
+ }
29
+ export function calculateRadiographicPixelSpacing(instance) {
30
+ const { PixelSpacing, ImagerPixelSpacing, PixelSpacingCalibrationType } = instance;
31
+ const isProjection = true;
32
+ if (PixelSpacing && PixelSpacingCalibrationType === 'GEOMETRY') {
33
+ if (isEqual(PixelSpacing, ImagerPixelSpacing)) {
34
+ console.warn('Calibration type is geometry, but pixel spacing and imager pixel spacing identical', PixelSpacing, ImagerPixelSpacing);
39
35
  }
40
- const correctedPixelSpacing = ImagerPixelSpacing.map((pixelSpacing) => pixelSpacing / EstimatedRadiographicMagnificationFactor);
41
36
  return {
42
- PixelSpacing: correctedPixelSpacing,
37
+ PixelSpacing,
43
38
  type: CalibrationTypes.ERMF,
44
39
  isProjection,
45
40
  };
46
41
  }
47
- if (isEqual(PixelSpacing, ImagerPixelSpacing)) {
42
+ if (PixelSpacing && PixelSpacingCalibrationType === 'FIDUCIAL') {
48
43
  return {
49
44
  PixelSpacing,
50
- type: CalibrationTypes.PROJECTION,
45
+ type: CalibrationTypes.CALIBRATED,
51
46
  isProjection,
52
47
  };
53
48
  }
54
- if (PixelSpacingCalibrationType || PixelSpacingCalibrationDescription) {
49
+ if (ImagerPixelSpacing) {
50
+ const ermf = getERMF(instance);
51
+ if (ermf > 1) {
52
+ const correctedPixelSpacing = ImagerPixelSpacing.map((pixelSpacing) => pixelSpacing / ermf);
53
+ return {
54
+ PixelSpacing: correctedPixelSpacing,
55
+ type: CalibrationTypes.ERMF,
56
+ isProjection,
57
+ };
58
+ }
59
+ if (ermf === true) {
60
+ return {
61
+ PixelSpacing,
62
+ type: CalibrationTypes.ERMF,
63
+ isProjection,
64
+ };
65
+ }
66
+ if (ermf) {
67
+ console.error('Illegal ERMF value:', ermf);
68
+ }
55
69
  return {
56
- PixelSpacing,
57
- type: CalibrationTypes.CALIBRATED,
70
+ PixelSpacing: PixelSpacing || ImagerPixelSpacing,
71
+ type: CalibrationTypes.PROJECTION,
58
72
  isProjection,
59
- PixelSpacingCalibrationType,
60
- PixelSpacingCalibrationDescription,
61
73
  };
62
74
  }
63
75
  return {
@@ -66,29 +78,8 @@ function calculateRadiographicPixelSpacing(instance) {
66
78
  isProjection,
67
79
  };
68
80
  }
69
- function calculateUSPixelSpacing(instance) {
70
- const { SequenceOfUltrasoundRegions } = instance;
71
- const isArrayOfSequences = Array.isArray(SequenceOfUltrasoundRegions);
72
- if (isArrayOfSequences && SequenceOfUltrasoundRegions.length > 1) {
73
- console.warn('Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.');
74
- return;
75
- }
76
- const { PhysicalDeltaX, PhysicalDeltaY } = isArrayOfSequences
77
- ? SequenceOfUltrasoundRegions[0]
78
- : SequenceOfUltrasoundRegions;
79
- const USPixelSpacing = [
80
- Math.abs(PhysicalDeltaX) * 10,
81
- Math.abs(PhysicalDeltaY) * 10,
82
- ];
83
- return {
84
- PixelSpacing: USPixelSpacing,
85
- };
86
- }
87
- export default function getPixelSpacingInformation(instance) {
88
- const { PixelSpacing, SOPClassUID, SequenceOfUltrasoundRegions } = instance;
89
- if (SequenceOfUltrasoundRegions) {
90
- return calculateUSPixelSpacing(instance);
91
- }
81
+ export function getPixelSpacingInformation(instance) {
82
+ const { PixelSpacing, SOPClassUID } = instance;
92
83
  const isProjection = projectionRadiographSOPClassUIDs.has(SOPClassUID);
93
84
  if (isProjection) {
94
85
  return calculateRadiographicPixelSpacing(instance);
@@ -99,3 +90,4 @@ export default function getPixelSpacingInformation(instance) {
99
90
  isProjection: false,
100
91
  };
101
92
  }
93
+ export default getPixelSpacingInformation;
@@ -92,9 +92,9 @@ import getVolumeDirectionVectors from './getVolumeDirectionVectors';
92
92
  import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
93
93
  export * as logger from './logger';
94
94
  import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
95
- import getPixelSpacingInformation from './getPixelSpacingInformation';
95
+ export * from './getPixelSpacingInformation';
96
96
  import { asArray } from './asArray';
97
97
  export { updatePlaneRestriction } from './updatePlaneRestriction';
98
98
  declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
99
99
  export * from './isEqual';
100
- export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, 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, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
100
+ export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, 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, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, asArray, };
@@ -93,9 +93,9 @@ import getVolumeDirectionVectors from './getVolumeDirectionVectors';
93
93
  import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
94
94
  export * as logger from './logger';
95
95
  import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
96
- import getPixelSpacingInformation from './getPixelSpacingInformation';
96
+ export * from './getPixelSpacingInformation';
97
97
  import { asArray } from './asArray';
98
98
  export { updatePlaneRestriction } from './updatePlaneRestriction';
99
99
  const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
100
100
  export * from './isEqual';
101
- export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, 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, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
101
+ export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, 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, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, asArray, };
@@ -1 +1 @@
1
- export declare const version = "4.12.4";
1
+ export declare const version = "4.12.5";
@@ -1 +1 @@
1
- export const version = '4.12.4';
1
+ export const version = '4.12.5';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "4.12.4",
3
+ "version": "4.12.5",
4
4
  "description": "Cornerstone3D Core",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/esm/index.d.ts",
@@ -97,5 +97,5 @@
97
97
  "type": "individual",
98
98
  "url": "https://ohif.org/donate"
99
99
  },
100
- "gitHead": "709d5a61b1acccf6a2dd8f9193907f98b5ed6c4c"
100
+ "gitHead": "97cc5eed916981c859c091556e6c4e36a139b281"
101
101
  }