@cornerstonejs/core 1.32.3 → 1.34.0
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.
- package/dist/cjs/RenderingEngine/StackViewport.d.ts +24 -3
- package/dist/cjs/RenderingEngine/StackViewport.js +47 -31
- package/dist/cjs/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/helpers/addImageSlicesToViewports.d.ts +3 -0
- package/dist/cjs/RenderingEngine/helpers/addImageSlicesToViewports.js +33 -0
- package/dist/cjs/RenderingEngine/helpers/addImageSlicesToViewports.js.map +1 -0
- package/dist/cjs/RenderingEngine/helpers/index.d.ts +2 -1
- package/dist/cjs/RenderingEngine/helpers/index.js +3 -1
- package/dist/cjs/RenderingEngine/helpers/index.js.map +1 -1
- package/dist/cjs/cache/cache.d.ts +2 -1
- package/dist/cjs/cache/cache.js +11 -0
- package/dist/cjs/cache/cache.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/loaders/imageLoader.d.ts +21 -1
- package/dist/cjs/loaders/imageLoader.js +97 -1
- package/dist/cjs/loaders/imageLoader.js.map +1 -1
- package/dist/cjs/loaders/volumeLoader.d.ts +2 -2
- package/dist/cjs/loaders/volumeLoader.js +6 -28
- package/dist/cjs/loaders/volumeLoader.js.map +1 -1
- package/dist/cjs/types/IImage.d.ts +1 -0
- package/dist/cjs/types/IStackInput.d.ts +12 -0
- package/dist/cjs/types/IStackInput.js +3 -0
- package/dist/cjs/types/IStackInput.js.map +1 -0
- package/dist/cjs/types/IStackViewport.d.ts +3 -0
- package/dist/cjs/types/PixelDataTypedArray.d.ts +1 -0
- package/dist/cjs/types/index.d.ts +3 -2
- package/dist/cjs/utilities/calculateViewportsSpatialRegistration.d.ts +2 -2
- package/dist/cjs/utilities/calculateViewportsSpatialRegistration.js.map +1 -1
- package/dist/cjs/utilities/genericMetadataProvider.d.ts +6 -0
- package/dist/cjs/utilities/genericMetadataProvider.js +23 -0
- package/dist/cjs/utilities/genericMetadataProvider.js.map +1 -0
- package/dist/cjs/utilities/getBufferConfiguration.d.ts +9 -0
- package/dist/cjs/utilities/getBufferConfiguration.js +47 -0
- package/dist/cjs/utilities/getBufferConfiguration.js.map +1 -0
- package/dist/cjs/utilities/index.d.ts +7 -1
- package/dist/cjs/utilities/index.js +13 -1
- package/dist/cjs/utilities/index.js.map +1 -1
- package/dist/cjs/utilities/isValidVolume.d.ts +2 -0
- package/dist/cjs/utilities/isValidVolume.js +35 -0
- package/dist/cjs/utilities/isValidVolume.js.map +1 -0
- package/dist/cjs/utilities/makeVolumeMetadata.d.ts +2 -0
- package/dist/cjs/utilities/makeVolumeMetadata.js +55 -0
- package/dist/cjs/utilities/makeVolumeMetadata.js.map +1 -0
- package/dist/cjs/utilities/sortImageIdsAndGetSpacing.d.ts +9 -0
- package/dist/cjs/utilities/sortImageIdsAndGetSpacing.js +82 -0
- package/dist/cjs/utilities/sortImageIdsAndGetSpacing.js.map +1 -0
- package/dist/cjs/utilities/updateVTKImageDataWithCornerstoneImage.d.ts +4 -0
- package/dist/cjs/utilities/updateVTKImageDataWithCornerstoneImage.js +27 -0
- package/dist/cjs/utilities/updateVTKImageDataWithCornerstoneImage.js.map +1 -0
- package/dist/esm/RenderingEngine/StackViewport.js +46 -32
- package/dist/esm/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.js +20 -0
- package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.js.map +1 -0
- package/dist/esm/RenderingEngine/helpers/index.js +2 -1
- package/dist/esm/RenderingEngine/helpers/index.js.map +1 -1
- package/dist/esm/cache/cache.js +11 -0
- package/dist/esm/cache/cache.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loaders/imageLoader.js +94 -1
- package/dist/esm/loaders/imageLoader.js.map +1 -1
- package/dist/esm/loaders/volumeLoader.js +7 -29
- package/dist/esm/loaders/volumeLoader.js.map +1 -1
- package/dist/esm/types/IStackInput.js +2 -0
- package/dist/esm/types/IStackInput.js.map +1 -0
- package/dist/esm/utilities/calculateViewportsSpatialRegistration.js.map +1 -1
- package/dist/esm/utilities/genericMetadataProvider.js +20 -0
- package/dist/esm/utilities/genericMetadataProvider.js.map +1 -0
- package/dist/esm/utilities/getBufferConfiguration.js +44 -0
- package/dist/esm/utilities/getBufferConfiguration.js.map +1 -0
- package/dist/esm/utilities/index.js +7 -1
- package/dist/esm/utilities/index.js.map +1 -1
- package/dist/esm/utilities/isValidVolume.js +29 -0
- package/dist/esm/utilities/isValidVolume.js.map +1 -0
- package/dist/esm/utilities/makeVolumeMetadata.js +52 -0
- package/dist/esm/utilities/makeVolumeMetadata.js.map +1 -0
- package/dist/esm/utilities/sortImageIdsAndGetSpacing.js +79 -0
- package/dist/esm/utilities/sortImageIdsAndGetSpacing.js.map +1 -0
- package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.js +24 -0
- package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.js.map +1 -0
- package/dist/types/RenderingEngine/StackViewport.d.ts +24 -3
- package/dist/types/RenderingEngine/StackViewport.d.ts.map +1 -1
- package/dist/types/RenderingEngine/helpers/addImageSlicesToViewports.d.ts +4 -0
- package/dist/types/RenderingEngine/helpers/addImageSlicesToViewports.d.ts.map +1 -0
- package/dist/types/RenderingEngine/helpers/index.d.ts +2 -1
- package/dist/types/RenderingEngine/helpers/index.d.ts.map +1 -1
- package/dist/types/cache/cache.d.ts +2 -1
- package/dist/types/cache/cache.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/loaders/imageLoader.d.ts +21 -1
- package/dist/types/loaders/imageLoader.d.ts.map +1 -1
- package/dist/types/loaders/volumeLoader.d.ts +2 -2
- package/dist/types/loaders/volumeLoader.d.ts.map +1 -1
- package/dist/types/types/IImage.d.ts +1 -0
- package/dist/types/types/IImage.d.ts.map +1 -1
- package/dist/types/types/IStackInput.d.ts +13 -0
- package/dist/types/types/IStackInput.d.ts.map +1 -0
- package/dist/types/types/IStackViewport.d.ts +3 -0
- package/dist/types/types/IStackViewport.d.ts.map +1 -1
- package/dist/types/types/PixelDataTypedArray.d.ts +1 -0
- package/dist/types/types/PixelDataTypedArray.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +3 -2
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utilities/calculateViewportsSpatialRegistration.d.ts +2 -2
- package/dist/types/utilities/calculateViewportsSpatialRegistration.d.ts.map +1 -1
- package/dist/types/utilities/genericMetadataProvider.d.ts +7 -0
- package/dist/types/utilities/genericMetadataProvider.d.ts.map +1 -0
- package/dist/types/utilities/getBufferConfiguration.d.ts +10 -0
- package/dist/types/utilities/getBufferConfiguration.d.ts.map +1 -0
- package/dist/types/utilities/index.d.ts +7 -1
- package/dist/types/utilities/index.d.ts.map +1 -1
- package/dist/types/utilities/isValidVolume.d.ts +3 -0
- package/dist/types/utilities/isValidVolume.d.ts.map +1 -0
- package/dist/types/utilities/makeVolumeMetadata.d.ts +3 -0
- package/dist/types/utilities/makeVolumeMetadata.d.ts.map +1 -0
- package/dist/types/utilities/sortImageIdsAndGetSpacing.d.ts +10 -0
- package/dist/types/utilities/sortImageIdsAndGetSpacing.d.ts.map +1 -0
- package/dist/types/utilities/updateVTKImageDataWithCornerstoneImage.d.ts +5 -0
- package/dist/types/utilities/updateVTKImageDataWithCornerstoneImage.d.ts.map +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
- package/src/RenderingEngine/StackViewport.ts +77 -52
- package/src/RenderingEngine/helpers/addImageSlicesToViewports.ts +54 -0
- package/src/RenderingEngine/helpers/index.ts +2 -0
- package/src/cache/cache.ts +22 -0
- package/src/index.ts +2 -0
- package/src/loaders/imageLoader.ts +202 -2
- package/src/loaders/volumeLoader.ts +18 -27
- package/src/types/IImage.ts +2 -0
- package/src/types/IStackInput.ts +30 -0
- package/src/types/IStackViewport.ts +10 -3
- package/src/types/PixelDataTypedArray.ts +8 -0
- package/src/types/index.ts +8 -1
- package/src/utilities/calculateViewportsSpatialRegistration.ts +3 -3
- package/src/utilities/genericMetadataProvider.ts +43 -0
- package/src/utilities/getBufferConfiguration.ts +69 -0
- package/src/utilities/index.ts +12 -0
- package/src/utilities/isValidVolume.ts +59 -0
- package/src/utilities/makeVolumeMetadata.ts +87 -0
- package/src/utilities/sortImageIdsAndGetSpacing.ts +174 -0
- package/src/utilities/updateVTKImageDataWithCornerstoneImage.ts +38 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAiD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isValidVolume = void 0;
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const isEqual_1 = __importDefault(require("./isEqual"));
|
|
9
|
+
function isValidVolume(imageIds) {
|
|
10
|
+
const imageId0 = imageIds[0];
|
|
11
|
+
const { modality, seriesInstanceUID } = __1.metaData.get('generalSeriesModule', imageId0);
|
|
12
|
+
const { imageOrientationPatient, pixelSpacing, frameOfReferenceUID, columns, rows, } = __1.metaData.get('imagePlaneModule', imageId0);
|
|
13
|
+
const baseMetadata = {
|
|
14
|
+
modality,
|
|
15
|
+
imageOrientationPatient,
|
|
16
|
+
pixelSpacing,
|
|
17
|
+
frameOfReferenceUID,
|
|
18
|
+
columns,
|
|
19
|
+
rows,
|
|
20
|
+
seriesInstanceUID,
|
|
21
|
+
};
|
|
22
|
+
const validVolume = imageIds.every((imageId) => {
|
|
23
|
+
const { modality, seriesInstanceUID } = __1.metaData.get('generalSeriesModule', imageId);
|
|
24
|
+
const { imageOrientationPatient, pixelSpacing, columns, rows } = __1.metaData.get('imagePlaneModule', imageId);
|
|
25
|
+
return (seriesInstanceUID === baseMetadata.seriesInstanceUID &&
|
|
26
|
+
modality === baseMetadata.modality &&
|
|
27
|
+
columns === baseMetadata.columns &&
|
|
28
|
+
rows === baseMetadata.rows &&
|
|
29
|
+
(0, isEqual_1.default)(imageOrientationPatient, baseMetadata.imageOrientationPatient) &&
|
|
30
|
+
(0, isEqual_1.default)(pixelSpacing, baseMetadata.pixelSpacing));
|
|
31
|
+
});
|
|
32
|
+
return validVolume;
|
|
33
|
+
}
|
|
34
|
+
exports.isValidVolume = isValidVolume;
|
|
35
|
+
//# sourceMappingURL=isValidVolume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isValidVolume.js","sourceRoot":"","sources":["../../../src/utilities/isValidVolume.ts"],"names":[],"mappings":";;;;;;AAAA,0BAA8B;AAC9B,wDAAgC;AAUhC,SAAS,aAAa,CAAC,QAAkB;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE7B,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAQ,CAAC,GAAG,CAClD,qBAAqB,EACrB,QAAQ,CACT,CAAC;IAEF,MAAM,EACJ,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,IAAI,GACL,GAAG,YAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG;QACnB,QAAQ;QACR,uBAAuB;QACvB,YAAY;QACZ,mBAAmB;QACnB,OAAO;QACP,IAAI;QACJ,iBAAiB;KAClB,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7C,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAQ,CAAC,GAAG,CAClD,qBAAqB,EACrB,OAAO,CACR,CAAC;QACF,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,GAC5D,YAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAE5C,OAAO,CACL,iBAAiB,KAAK,YAAY,CAAC,iBAAiB;YACpD,QAAQ,KAAK,YAAY,CAAC,QAAQ;YAClC,OAAO,KAAK,YAAY,CAAC,OAAO;YAChC,IAAI,KAAK,YAAY,CAAC,IAAI;YAC1B,IAAA,iBAAO,EAAC,uBAAuB,EAAE,YAAY,CAAC,uBAAuB,CAAC;YACtE,IAAA,iBAAO,EAAC,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAEQ,sCAAa"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const __1 = require("../");
|
|
4
|
+
function makeVolumeMetadata(imageIds) {
|
|
5
|
+
const imageId0 = imageIds[0];
|
|
6
|
+
const { pixelRepresentation, bitsAllocated, bitsStored, highBit, photometricInterpretation, samplesPerPixel, } = __1.metaData.get('imagePixelModule', imageId0);
|
|
7
|
+
const voiLut = [];
|
|
8
|
+
const voiLutModule = __1.metaData.get('voiLutModule', imageId0);
|
|
9
|
+
let voiLUTFunction;
|
|
10
|
+
if (voiLutModule) {
|
|
11
|
+
const { windowWidth, windowCenter } = voiLutModule;
|
|
12
|
+
voiLUTFunction = voiLutModule === null || voiLutModule === void 0 ? void 0 : voiLutModule.voiLUTFunction;
|
|
13
|
+
if (Array.isArray(windowWidth)) {
|
|
14
|
+
for (let i = 0; i < windowWidth.length; i++) {
|
|
15
|
+
voiLut.push({
|
|
16
|
+
windowWidth: windowWidth[i],
|
|
17
|
+
windowCenter: windowCenter[i],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
voiLut.push({
|
|
23
|
+
windowWidth: windowWidth,
|
|
24
|
+
windowCenter: windowCenter,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
voiLut.push({
|
|
30
|
+
windowWidth: undefined,
|
|
31
|
+
windowCenter: undefined,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const { modality, seriesInstanceUID } = __1.metaData.get('generalSeriesModule', imageId0);
|
|
35
|
+
const { imageOrientationPatient, pixelSpacing, frameOfReferenceUID, columns, rows, } = __1.metaData.get('imagePlaneModule', imageId0);
|
|
36
|
+
return {
|
|
37
|
+
BitsAllocated: bitsAllocated,
|
|
38
|
+
BitsStored: bitsStored,
|
|
39
|
+
SamplesPerPixel: samplesPerPixel,
|
|
40
|
+
HighBit: highBit,
|
|
41
|
+
PhotometricInterpretation: photometricInterpretation,
|
|
42
|
+
PixelRepresentation: pixelRepresentation,
|
|
43
|
+
Modality: modality,
|
|
44
|
+
ImageOrientationPatient: imageOrientationPatient,
|
|
45
|
+
PixelSpacing: pixelSpacing,
|
|
46
|
+
FrameOfReferenceUID: frameOfReferenceUID,
|
|
47
|
+
Columns: columns,
|
|
48
|
+
Rows: rows,
|
|
49
|
+
voiLut,
|
|
50
|
+
VOILUTFunction: voiLUTFunction,
|
|
51
|
+
SeriesInstanceUID: seriesInstanceUID,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
exports.default = makeVolumeMetadata;
|
|
55
|
+
//# sourceMappingURL=makeVolumeMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeVolumeMetadata.js","sourceRoot":"","sources":["../../../src/utilities/makeVolumeMetadata.ts"],"names":[],"mappings":";;AAAA,2BAA+B;AAU/B,SAAwB,kBAAkB,CAAC,QAAuB;IAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE7B,MAAM,EACJ,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,OAAO,EACP,yBAAyB,EACzB,eAAe,GAChB,GAAG,YAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAG/C,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,MAAM,YAAY,GAAG,YAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAG5D,IAAI,cAAc,CAAC;IACnB,IAAI,YAAY,EAAE;QAChB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;QACnD,cAAc,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,cAAc,CAAC;QAE9C,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;oBAC3B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;iBAC9B,CAAC,CAAC;aACJ;SACF;aAAM;YACL,MAAM,CAAC,IAAI,CAAC;gBACV,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,YAAY;aAC3B,CAAC,CAAC;SACJ;KACF;SAAM;QACL,MAAM,CAAC,IAAI,CAAC;YACV,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,SAAS;SACxB,CAAC,CAAC;KACJ;IAED,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAQ,CAAC,GAAG,CAClD,qBAAqB,EACrB,QAAQ,CACT,CAAC;IAEF,MAAM,EACJ,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,IAAI,GACL,GAAG,YAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAI/C,OAAO;QACL,aAAa,EAAE,aAAa;QAC5B,UAAU,EAAE,UAAU;QACtB,eAAe,EAAE,eAAe;QAChC,OAAO,EAAE,OAAO;QAChB,yBAAyB,EAAE,yBAAyB;QACpD,mBAAmB,EAAE,mBAAmB;QACxC,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,uBAAuB;QAChD,YAAY,EAAE,YAAY;QAC1B,mBAAmB,EAAE,mBAAmB;QACxC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI;QAEV,MAAM;QACN,cAAc,EAAE,cAAc;QAC9B,iBAAiB,EAAE,iBAAiB;KACrC,CAAC;AACJ,CAAC;AA5ED,qCA4EC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import { Point3 } from '../types';
|
|
3
|
+
declare type SortedImageIdsItem = {
|
|
4
|
+
zSpacing: number;
|
|
5
|
+
origin: Point3;
|
|
6
|
+
sortedImageIds: Array<string>;
|
|
7
|
+
};
|
|
8
|
+
export default function sortImageIdsAndGetSpacing(imageIds: Array<string>, scanAxisNormal?: vec3): SortedImageIdsItem;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
4
|
+
const __1 = require("../");
|
|
5
|
+
function sortImageIdsAndGetSpacing(imageIds, scanAxisNormal) {
|
|
6
|
+
const { imagePositionPatient: referenceImagePositionPatient, imageOrientationPatient, } = __1.metaData.get('imagePlaneModule', imageIds[0]);
|
|
7
|
+
if (!scanAxisNormal) {
|
|
8
|
+
const rowCosineVec = gl_matrix_1.vec3.fromValues(imageOrientationPatient[0], imageOrientationPatient[1], imageOrientationPatient[2]);
|
|
9
|
+
const colCosineVec = gl_matrix_1.vec3.fromValues(imageOrientationPatient[3], imageOrientationPatient[4], imageOrientationPatient[5]);
|
|
10
|
+
scanAxisNormal = gl_matrix_1.vec3.create();
|
|
11
|
+
gl_matrix_1.vec3.cross(scanAxisNormal, rowCosineVec, colCosineVec);
|
|
12
|
+
}
|
|
13
|
+
const refIppVec = gl_matrix_1.vec3.create();
|
|
14
|
+
const usingWadoUri = imageIds[0].split(':')[0] === 'wadouri';
|
|
15
|
+
gl_matrix_1.vec3.set(refIppVec, referenceImagePositionPatient[0], referenceImagePositionPatient[1], referenceImagePositionPatient[2]);
|
|
16
|
+
let sortedImageIds;
|
|
17
|
+
let zSpacing;
|
|
18
|
+
function getDistance(imageId) {
|
|
19
|
+
const { imagePositionPatient } = __1.metaData.get('imagePlaneModule', imageId);
|
|
20
|
+
const positionVector = gl_matrix_1.vec3.create();
|
|
21
|
+
gl_matrix_1.vec3.sub(positionVector, referenceImagePositionPatient, imagePositionPatient);
|
|
22
|
+
return gl_matrix_1.vec3.dot(positionVector, scanAxisNormal);
|
|
23
|
+
}
|
|
24
|
+
if (!usingWadoUri) {
|
|
25
|
+
const distanceImagePairs = imageIds.map((imageId) => {
|
|
26
|
+
const distance = getDistance(imageId);
|
|
27
|
+
return {
|
|
28
|
+
distance,
|
|
29
|
+
imageId,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
distanceImagePairs.sort((a, b) => b.distance - a.distance);
|
|
33
|
+
sortedImageIds = distanceImagePairs.map((a) => a.imageId);
|
|
34
|
+
const numImages = distanceImagePairs.length;
|
|
35
|
+
zSpacing =
|
|
36
|
+
Math.abs(distanceImagePairs[numImages - 1].distance -
|
|
37
|
+
distanceImagePairs[0].distance) /
|
|
38
|
+
(numImages - 1);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const prefetchedImageIds = [
|
|
42
|
+
imageIds[0],
|
|
43
|
+
imageIds[Math.floor(imageIds.length / 2)],
|
|
44
|
+
];
|
|
45
|
+
sortedImageIds = imageIds;
|
|
46
|
+
const firstImageDistance = getDistance(prefetchedImageIds[0]);
|
|
47
|
+
const middleImageDistance = getDistance(prefetchedImageIds[1]);
|
|
48
|
+
if (firstImageDistance - middleImageDistance < 0) {
|
|
49
|
+
sortedImageIds.reverse();
|
|
50
|
+
}
|
|
51
|
+
const metadataForMiddleImage = __1.metaData.get('imagePlaneModule', prefetchedImageIds[1]);
|
|
52
|
+
if (!metadataForMiddleImage) {
|
|
53
|
+
throw new Error('Incomplete metadata required for volume construction.');
|
|
54
|
+
}
|
|
55
|
+
const positionVector = gl_matrix_1.vec3.create();
|
|
56
|
+
gl_matrix_1.vec3.sub(positionVector, referenceImagePositionPatient, metadataForMiddleImage.imagePositionPatient);
|
|
57
|
+
const distanceBetweenFirstAndMiddleImages = gl_matrix_1.vec3.dot(positionVector, scanAxisNormal);
|
|
58
|
+
zSpacing =
|
|
59
|
+
Math.abs(distanceBetweenFirstAndMiddleImages) /
|
|
60
|
+
Math.floor(imageIds.length / 2);
|
|
61
|
+
}
|
|
62
|
+
const { imagePositionPatient: origin, sliceThickness } = __1.metaData.get('imagePlaneModule', sortedImageIds[0]);
|
|
63
|
+
const { strictZSpacingForVolumeViewport } = (0, __1.getConfiguration)().rendering;
|
|
64
|
+
if (zSpacing === 0 && !strictZSpacingForVolumeViewport) {
|
|
65
|
+
if (sliceThickness) {
|
|
66
|
+
console.log('Could not calculate zSpacing. Using sliceThickness');
|
|
67
|
+
zSpacing = sliceThickness;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log('Could not calculate zSpacing. The VolumeViewport visualization is compromised. Setting zSpacing to 1 to render');
|
|
71
|
+
zSpacing = 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const result = {
|
|
75
|
+
zSpacing,
|
|
76
|
+
origin,
|
|
77
|
+
sortedImageIds,
|
|
78
|
+
};
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
exports.default = sortImageIdsAndGetSpacing;
|
|
82
|
+
//# sourceMappingURL=sortImageIdsAndGetSpacing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortImageIdsAndGetSpacing.js","sourceRoot":"","sources":["../../../src/utilities/sortImageIdsAndGetSpacing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateVTKImageDataWithCornerstoneImage = void 0;
|
|
4
|
+
function updateVTKImageDataWithCornerstoneImage(sourceImageData, image) {
|
|
5
|
+
const pixelData = image.getPixelData();
|
|
6
|
+
const scalarData = sourceImageData
|
|
7
|
+
.getPointData()
|
|
8
|
+
.getScalars()
|
|
9
|
+
.getData();
|
|
10
|
+
if (image.color && image.rgba) {
|
|
11
|
+
const newPixelData = new Uint8Array(image.columns * image.rows * 3);
|
|
12
|
+
for (let i = 0; i < image.columns * image.rows; i++) {
|
|
13
|
+
newPixelData[i * 3] = pixelData[i * 4];
|
|
14
|
+
newPixelData[i * 3 + 1] = pixelData[i * 4 + 1];
|
|
15
|
+
newPixelData[i * 3 + 2] = pixelData[i * 4 + 2];
|
|
16
|
+
}
|
|
17
|
+
image.rgba = false;
|
|
18
|
+
image.getPixelData = () => newPixelData;
|
|
19
|
+
scalarData.set(newPixelData);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
scalarData.set(pixelData);
|
|
23
|
+
}
|
|
24
|
+
sourceImageData.modified();
|
|
25
|
+
}
|
|
26
|
+
exports.updateVTKImageDataWithCornerstoneImage = updateVTKImageDataWithCornerstoneImage;
|
|
27
|
+
//# sourceMappingURL=updateVTKImageDataWithCornerstoneImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateVTKImageDataWithCornerstoneImage.js","sourceRoot":"","sources":["../../../src/utilities/updateVTKImageDataWithCornerstoneImage.ts"],"names":[],"mappings":";;;AAGA,SAAS,sCAAsC,CAC7C,eAA6B,EAC7B,KAAa;IAEb,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,eAAe;SAC/B,YAAY,EAAE;SACd,UAAU,EAAE;SACZ,OAAO,EAAyB,CAAC;IAKpC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;QAC7B,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACnD,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAChD;QAGD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACnB,KAAK,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;QACxC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KAC9B;SAAM;QACL,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;KAC3B;IAID,eAAe,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAEQ,wFAAsC"}
|
|
@@ -10,7 +10,7 @@ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransf
|
|
|
10
10
|
import * as metaData from '../metaData';
|
|
11
11
|
import Viewport from './Viewport';
|
|
12
12
|
import eventTarget from '../eventTarget';
|
|
13
|
-
import { triggerEvent, isEqual, invertRgbTransferFunction, createSigmoidRGBTransferFunction, windowLevel as windowLevelUtil, imageIdToURI, isImageActor, actorIsA, colormap as colormapUtils, imageRetrieveMetadataProvider, } from '../utilities';
|
|
13
|
+
import { triggerEvent, isEqual, invertRgbTransferFunction, createSigmoidRGBTransferFunction, windowLevel as windowLevelUtil, imageIdToURI, isImageActor, actorIsA, colormap as colormapUtils, updateVTKImageDataWithCornerstoneImage, imageRetrieveMetadataProvider, } from '../utilities';
|
|
14
14
|
import drawImageSync from './helpers/cpuFallback/drawImageSync';
|
|
15
15
|
import { getColormap } from './helpers/cpuFallback/colors/index';
|
|
16
16
|
import { loadAndCacheImage } from '../loaders/imageLoader';
|
|
@@ -984,7 +984,7 @@ class StackViewport extends Viewport {
|
|
|
984
984
|
}
|
|
985
985
|
return numberOfComponents;
|
|
986
986
|
}
|
|
987
|
-
|
|
987
|
+
getImageDataMetadata(image) {
|
|
988
988
|
const { imagePlaneModule, imagePixelModule } = this.buildMetadata(image);
|
|
989
989
|
let rowCosines, columnCosines;
|
|
990
990
|
rowCosines = imagePlaneModule.rowCosines;
|
|
@@ -1033,19 +1033,30 @@ class StackViewport extends Viewport {
|
|
|
1033
1033
|
viewUp: [viewUp[0], viewUp[1], viewUp[2]],
|
|
1034
1034
|
};
|
|
1035
1035
|
}
|
|
1036
|
-
|
|
1036
|
+
createVTKImageData({ origin, direction, dimensions, spacing, numComps, pixelArray, }) {
|
|
1037
1037
|
const values = new pixelArray.constructor(pixelArray.length);
|
|
1038
1038
|
const scalarArray = vtkDataArray.newInstance({
|
|
1039
1039
|
name: 'Pixels',
|
|
1040
1040
|
numberOfComponents: numComps,
|
|
1041
1041
|
values: values,
|
|
1042
1042
|
});
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1043
|
+
const imageData = vtkImageData.newInstance();
|
|
1044
|
+
imageData.setDimensions(dimensions);
|
|
1045
|
+
imageData.setSpacing(spacing);
|
|
1046
|
+
imageData.setDirection(direction);
|
|
1047
|
+
imageData.setOrigin(origin);
|
|
1048
|
+
imageData.getPointData().setScalars(scalarArray);
|
|
1049
|
+
return imageData;
|
|
1050
|
+
}
|
|
1051
|
+
_createVTKImageData({ origin, direction, dimensions, spacing, numComps, pixelArray, }) {
|
|
1052
|
+
this._imageData = this.createVTKImageData({
|
|
1053
|
+
origin,
|
|
1054
|
+
direction,
|
|
1055
|
+
dimensions,
|
|
1056
|
+
spacing,
|
|
1057
|
+
numComps,
|
|
1058
|
+
pixelArray,
|
|
1059
|
+
});
|
|
1049
1060
|
}
|
|
1050
1061
|
async setStack(imageIds, currentImageIdIndex = 0) {
|
|
1051
1062
|
this._throwIfDestroyed();
|
|
@@ -1116,27 +1127,7 @@ class StackViewport extends Viewport {
|
|
|
1116
1127
|
origin = [0, 0, 0];
|
|
1117
1128
|
}
|
|
1118
1129
|
this._imageData.setOrigin(origin);
|
|
1119
|
-
this.
|
|
1120
|
-
}
|
|
1121
|
-
_updatePixelData(image) {
|
|
1122
|
-
const pixelData = image.getPixelData();
|
|
1123
|
-
const scalars = this._imageData.getPointData().getScalars();
|
|
1124
|
-
const scalarData = scalars.getData();
|
|
1125
|
-
if (image.color && image.rgba) {
|
|
1126
|
-
const newPixelData = new Uint8Array(image.columns * image.rows * 3);
|
|
1127
|
-
for (let i = 0; i < image.columns * image.rows; i++) {
|
|
1128
|
-
newPixelData[i * 3] = pixelData[i * 4];
|
|
1129
|
-
newPixelData[i * 3 + 1] = pixelData[i * 4 + 1];
|
|
1130
|
-
newPixelData[i * 3 + 2] = pixelData[i * 4 + 2];
|
|
1131
|
-
}
|
|
1132
|
-
image.rgba = false;
|
|
1133
|
-
image.getPixelData = () => newPixelData;
|
|
1134
|
-
scalarData.set(newPixelData);
|
|
1135
|
-
}
|
|
1136
|
-
else {
|
|
1137
|
-
scalarData.set(pixelData);
|
|
1138
|
-
}
|
|
1139
|
-
this._imageData.modified();
|
|
1130
|
+
updateVTKImageDataWithCornerstoneImage(this._imageData, image);
|
|
1140
1131
|
}
|
|
1141
1132
|
_loadAndDisplayImage(imageId, imageIdIndex) {
|
|
1142
1133
|
return this.useCPURendering
|
|
@@ -1318,7 +1309,7 @@ class StackViewport extends Viewport {
|
|
|
1318
1309
|
});
|
|
1319
1310
|
}
|
|
1320
1311
|
_updateToDisplayImageCPU(image) {
|
|
1321
|
-
const metadata = this.
|
|
1312
|
+
const metadata = this.getImageDataMetadata(image);
|
|
1322
1313
|
const viewport = getDefaultViewport(this.canvas, image, this.modality, this._cpuFallbackEnabledElement.viewport.colormap);
|
|
1323
1314
|
const { windowCenter, windowWidth } = viewport.voi;
|
|
1324
1315
|
this.voiRange = windowLevelUtil.toLowHighRange(windowWidth, windowCenter);
|
|
@@ -1335,6 +1326,29 @@ class StackViewport extends Viewport {
|
|
|
1335
1326
|
this.cpuRenderingInvalidated = true;
|
|
1336
1327
|
this._cpuFallbackEnabledElement.transform = calculateTransform(this._cpuFallbackEnabledElement);
|
|
1337
1328
|
}
|
|
1329
|
+
async addImages(stackInputs) {
|
|
1330
|
+
const actors = this.getActors();
|
|
1331
|
+
stackInputs.forEach((stackInput) => {
|
|
1332
|
+
const image = cache.getImage(stackInput.imageId);
|
|
1333
|
+
const { origin, dimensions, direction, spacing, numComps } = this.getImageDataMetadata(image);
|
|
1334
|
+
const imagedata = this.createVTKImageData({
|
|
1335
|
+
origin,
|
|
1336
|
+
dimensions,
|
|
1337
|
+
direction,
|
|
1338
|
+
spacing,
|
|
1339
|
+
numComps,
|
|
1340
|
+
pixelArray: image.getPixelData(),
|
|
1341
|
+
});
|
|
1342
|
+
const imageActor = this.createActorMapper(imagedata);
|
|
1343
|
+
if (imageActor) {
|
|
1344
|
+
actors.push({ uid: stackInput.actorUID, actor: imageActor });
|
|
1345
|
+
if (stackInput.callback) {
|
|
1346
|
+
stackInput.callback({ imageActor, imageId: stackInput.imageId });
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
});
|
|
1350
|
+
this.setActors(actors);
|
|
1351
|
+
}
|
|
1338
1352
|
_updateActorToDisplayImageId(image) {
|
|
1339
1353
|
const sameImageData = this._checkVTKImageDataMatchesCornerstoneImage(image, this._imageData);
|
|
1340
1354
|
const activeCamera = this.getRenderer().getActiveCamera();
|
|
@@ -1356,7 +1370,7 @@ class StackViewport extends Viewport {
|
|
|
1356
1370
|
this._setPropertiesFromCache();
|
|
1357
1371
|
return;
|
|
1358
1372
|
}
|
|
1359
|
-
const { origin, direction, dimensions, spacing, numComps, imagePixelModule, } = this.
|
|
1373
|
+
const { origin, direction, dimensions, spacing, numComps, imagePixelModule, } = this.getImageDataMetadata(image);
|
|
1360
1374
|
this._createVTKImageData({
|
|
1361
1375
|
origin,
|
|
1362
1376
|
direction,
|