@cornerstonejs/core 1.70.5 → 1.70.7
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/BaseVolumeViewport.js +12 -11
- package/dist/cjs/RenderingEngine/BaseVolumeViewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/RenderingEngine.js +1 -0
- package/dist/cjs/RenderingEngine/RenderingEngine.js.map +1 -1
- package/dist/cjs/RenderingEngine/StackViewport.d.ts +1 -0
- package/dist/cjs/RenderingEngine/StackViewport.js +3 -1
- package/dist/cjs/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/Viewport.d.ts +5 -0
- package/dist/cjs/RenderingEngine/Viewport.js +25 -0
- package/dist/cjs/RenderingEngine/Viewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/helpers/setDefaultVolumeVOI.js +1 -1
- package/dist/cjs/RenderingEngine/helpers/setDefaultVolumeVOI.js.map +1 -1
- package/dist/cjs/enums/Events.d.ts +1 -0
- package/dist/cjs/enums/Events.js +1 -0
- package/dist/cjs/enums/Events.js.map +1 -1
- package/dist/cjs/loaders/imageLoader.d.ts +1 -0
- package/dist/cjs/loaders/imageLoader.js +3 -0
- package/dist/cjs/loaders/imageLoader.js.map +1 -1
- package/dist/cjs/types/IImage.d.ts +1 -0
- package/dist/cjs/types/IStackViewport.d.ts +1 -0
- package/dist/cjs/types/IViewport.d.ts +4 -0
- package/dist/cjs/utilities/getViewportImageCornersInWorld.js +7 -3
- package/dist/cjs/utilities/getViewportImageCornersInWorld.js.map +1 -1
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +11 -11
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js.map +1 -1
- package/dist/esm/RenderingEngine/RenderingEngine.js +1 -0
- package/dist/esm/RenderingEngine/RenderingEngine.js.map +1 -1
- package/dist/esm/RenderingEngine/StackViewport.js +3 -1
- package/dist/esm/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/esm/RenderingEngine/Viewport.js +25 -0
- package/dist/esm/RenderingEngine/Viewport.js.map +1 -1
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +1 -1
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js.map +1 -1
- package/dist/esm/enums/Events.js +1 -0
- package/dist/esm/enums/Events.js.map +1 -1
- package/dist/esm/loaders/imageLoader.js +3 -0
- package/dist/esm/loaders/imageLoader.js.map +1 -1
- package/dist/esm/utilities/getViewportImageCornersInWorld.js +7 -3
- package/dist/esm/utilities/getViewportImageCornersInWorld.js.map +1 -1
- package/dist/types/RenderingEngine/BaseVolumeViewport.d.ts.map +1 -1
- package/dist/types/RenderingEngine/RenderingEngine.d.ts.map +1 -1
- package/dist/types/RenderingEngine/StackViewport.d.ts +1 -0
- package/dist/types/RenderingEngine/StackViewport.d.ts.map +1 -1
- package/dist/types/RenderingEngine/Viewport.d.ts +5 -0
- package/dist/types/RenderingEngine/Viewport.d.ts.map +1 -1
- package/dist/types/RenderingEngine/helpers/setDefaultVolumeVOI.d.ts.map +1 -1
- package/dist/types/enums/Events.d.ts +1 -0
- package/dist/types/enums/Events.d.ts.map +1 -1
- package/dist/types/loaders/imageLoader.d.ts +1 -0
- package/dist/types/loaders/imageLoader.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/IStackViewport.d.ts +1 -0
- package/dist/types/types/IStackViewport.d.ts.map +1 -1
- package/dist/types/types/IViewport.d.ts +4 -0
- package/dist/types/types/IViewport.d.ts.map +1 -1
- package/dist/types/utilities/getViewportImageCornersInWorld.d.ts.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
- package/src/RenderingEngine/BaseVolumeViewport.ts +14 -10
- package/src/RenderingEngine/RenderingEngine.ts +2 -0
- package/src/RenderingEngine/StackViewport.ts +9 -1
- package/src/RenderingEngine/Viewport.ts +30 -0
- package/src/RenderingEngine/helpers/setDefaultVolumeVOI.ts +4 -1
- package/src/enums/Events.ts +2 -1
- package/src/loaders/imageLoader.ts +5 -0
- package/src/types/IImage.ts +1 -0
- package/src/types/IStackViewport.ts +2 -0
- package/src/types/IViewport.ts +9 -0
- package/src/utilities/getViewportImageCornersInWorld.ts +10 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/core",
|
|
3
|
-
"version": "1.70.
|
|
3
|
+
"version": "1.70.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"webpack:watch": "webpack --mode development --progress --watch --config ./.webpack/webpack.dev.js"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kitware/vtk.js": "30.3.
|
|
33
|
+
"@kitware/vtk.js": "30.3.3",
|
|
34
34
|
"comlink": "^4.4.1",
|
|
35
35
|
"detect-gpu": "^5.0.22",
|
|
36
36
|
"gl-matrix": "^3.4.3",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"type": "individual",
|
|
48
48
|
"url": "https://ohif.org/donate"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "4b6774d20ea66e2fa2815edc042b57565b816959"
|
|
51
51
|
}
|
|
@@ -257,9 +257,6 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
257
257
|
|
|
258
258
|
const { volumeActor } = applicableVolumeActorInfo;
|
|
259
259
|
|
|
260
|
-
const mapper = volumeActor.getMapper();
|
|
261
|
-
mapper.setSampleDistance(1.0);
|
|
262
|
-
|
|
263
260
|
const cfun = vtkColorTransferFunction.newInstance();
|
|
264
261
|
let colormapObj = colormapUtils.getColormap(colormap.name);
|
|
265
262
|
|
|
@@ -328,6 +325,10 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
328
325
|
}
|
|
329
326
|
volumeActor.getProperty().setScalarOpacity(0, ofun);
|
|
330
327
|
|
|
328
|
+
if (!this.viewportProperties.colormap) {
|
|
329
|
+
this.viewportProperties.colormap = {};
|
|
330
|
+
}
|
|
331
|
+
|
|
331
332
|
this.viewportProperties.colormap.opacity = colormap.opacity;
|
|
332
333
|
}
|
|
333
334
|
|
|
@@ -771,6 +772,9 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
771
772
|
|
|
772
773
|
applyPreset(volumeActor, preset);
|
|
773
774
|
|
|
775
|
+
this.viewportProperties.preset = preset;
|
|
776
|
+
this.render();
|
|
777
|
+
|
|
774
778
|
if (!suppressEvents) {
|
|
775
779
|
triggerEvent(this.element, Events.PRESET_MODIFIED, {
|
|
776
780
|
viewportId: this.id,
|
|
@@ -822,6 +826,7 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
822
826
|
invert,
|
|
823
827
|
slabThickness,
|
|
824
828
|
rotation,
|
|
829
|
+
preset,
|
|
825
830
|
} = this.viewportProperties;
|
|
826
831
|
|
|
827
832
|
const voiRanges = this.getActors()
|
|
@@ -841,16 +846,14 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
841
846
|
})
|
|
842
847
|
.filter(Boolean);
|
|
843
848
|
|
|
844
|
-
const voiRange =
|
|
849
|
+
const voiRange = volumeId
|
|
850
|
+
? voiRanges.find((range) => range.volumeId === volumeId)?.voiRange
|
|
851
|
+
: voiRanges[0]?.voiRange;
|
|
845
852
|
|
|
846
853
|
const volumeColormap = this.getColormap(applicableVolumeActorInfo);
|
|
847
854
|
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
colormap = volumeColormap;
|
|
851
|
-
} else {
|
|
852
|
-
colormap = latestColormap;
|
|
853
|
-
}
|
|
855
|
+
const colormap =
|
|
856
|
+
volumeId && volumeColormap ? volumeColormap : latestColormap;
|
|
854
857
|
|
|
855
858
|
return {
|
|
856
859
|
colormap: colormap,
|
|
@@ -860,6 +863,7 @@ abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
|
|
|
860
863
|
invert: invert,
|
|
861
864
|
slabThickness: slabThickness,
|
|
862
865
|
rotation: rotation,
|
|
866
|
+
preset,
|
|
863
867
|
};
|
|
864
868
|
};
|
|
865
869
|
|
|
@@ -1295,6 +1295,8 @@ class RenderingEngine implements IRenderingEngine {
|
|
|
1295
1295
|
renderingEngineId,
|
|
1296
1296
|
};
|
|
1297
1297
|
|
|
1298
|
+
viewport.removeWidgets();
|
|
1299
|
+
|
|
1298
1300
|
// Trigger first before removing the data attributes, as we need the enabled
|
|
1299
1301
|
// element to remove tools associated with the viewport
|
|
1300
1302
|
triggerEvent(eventTarget, Events.ELEMENT_DISABLED, eventDetail);
|
|
@@ -190,6 +190,11 @@ class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
|
|
|
190
190
|
// Camera properties
|
|
191
191
|
private initialViewUp: Point3;
|
|
192
192
|
|
|
193
|
+
// this flag is used to check
|
|
194
|
+
// if the viewport used the same actor/mapper to render the image
|
|
195
|
+
// or because of the new image inconsistency, a new actor/mapper was created
|
|
196
|
+
public stackActorReInitialized: boolean;
|
|
197
|
+
|
|
193
198
|
/**
|
|
194
199
|
* Constructor for the StackViewport class
|
|
195
200
|
* @param props - ViewportInput
|
|
@@ -2012,8 +2017,8 @@ class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
|
|
|
2012
2017
|
renderingEngineId: this.renderingEngineId,
|
|
2013
2018
|
};
|
|
2014
2019
|
|
|
2015
|
-
triggerEvent(this.element, Events.STACK_NEW_IMAGE, eventDetail);
|
|
2016
2020
|
this._updateActorToDisplayImageId(image);
|
|
2021
|
+
triggerEvent(this.element, Events.STACK_NEW_IMAGE, eventDetail);
|
|
2017
2022
|
|
|
2018
2023
|
// Trigger the image to be drawn on the next animation frame
|
|
2019
2024
|
this.render();
|
|
@@ -2299,6 +2304,7 @@ class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
|
|
|
2299
2304
|
);
|
|
2300
2305
|
|
|
2301
2306
|
this._setPropertiesFromCache();
|
|
2307
|
+
this.stackActorReInitialized = false;
|
|
2302
2308
|
|
|
2303
2309
|
return;
|
|
2304
2310
|
}
|
|
@@ -2378,6 +2384,8 @@ class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
|
|
|
2378
2384
|
this.cameraFocalPointOnRender = this.getCamera().focalPoint;
|
|
2379
2385
|
this.stackInvalidated = false;
|
|
2380
2386
|
|
|
2387
|
+
this.stackActorReInitialized = true;
|
|
2388
|
+
|
|
2381
2389
|
if (this._publishCalibratedEvent) {
|
|
2382
2390
|
this.triggerCalibrationEvent();
|
|
2383
2391
|
}
|
|
@@ -175,6 +175,36 @@ class Viewport implements IViewport {
|
|
|
175
175
|
return false;
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
+
private viewportWidgets = new Map() as Map<string, any>;
|
|
179
|
+
|
|
180
|
+
public addWidget = (widgetId, widget) => {
|
|
181
|
+
this.viewportWidgets.set(widgetId, widget);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
public getWidget = (id) => {
|
|
185
|
+
return this.viewportWidgets.get(id);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
public getWidgets = () => {
|
|
189
|
+
return Array.from(this.viewportWidgets.values());
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
public removeWidgets = () => {
|
|
193
|
+
const widgets = this.getWidgets();
|
|
194
|
+
widgets.forEach((widget) => {
|
|
195
|
+
if (widget.getEnabled()) {
|
|
196
|
+
widget.setEnabled(false);
|
|
197
|
+
}
|
|
198
|
+
if (widget.getActor && widget.getRenderer) {
|
|
199
|
+
const actor = widget.getActor();
|
|
200
|
+
const renderer = widget.getRenderer();
|
|
201
|
+
if (renderer && actor) {
|
|
202
|
+
renderer.removeActor(actor);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
|
|
178
208
|
/**
|
|
179
209
|
* Indicate that the image has been rendered.
|
|
180
210
|
* This will set the viewportStatus to RENDERED if there is image data
|
|
@@ -186,7 +186,10 @@ async function getVOIFromMinMax(
|
|
|
186
186
|
let image = cache.getImage(imageId);
|
|
187
187
|
|
|
188
188
|
if (!imageVolume.referencedImageIds?.length) {
|
|
189
|
-
|
|
189
|
+
// we should ignore the cache here,
|
|
190
|
+
// since we want to load the image from with the most
|
|
191
|
+
// recent prescale settings
|
|
192
|
+
image = await loadAndCacheImage(imageId, { ...options, ignoreCache: true });
|
|
190
193
|
}
|
|
191
194
|
|
|
192
195
|
const imageScalarData = image
|
package/src/enums/Events.ts
CHANGED
|
@@ -5,6 +5,7 @@ enum Events {
|
|
|
5
5
|
/**
|
|
6
6
|
* ERROR CODES
|
|
7
7
|
*/
|
|
8
|
+
ERROR_EVENT = 'CORNERSTONE_ERROR',
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Error that is thrown when the ImageCache exceeds its max cache size.
|
|
@@ -243,7 +244,7 @@ enum Events {
|
|
|
243
244
|
* Make use of {@link EventTypes.ColormapModifiedEvent | ColormapModified Event Type } for typing your event listeners for COLORMAP_MODIFIED event,
|
|
244
245
|
* and see what event detail is included in {@link EventTypes.ColormapModifiedEventDetail | ColormapModified Event Detail }
|
|
245
246
|
*/
|
|
246
|
-
COLORMAP_MODIFIED =
|
|
247
|
+
COLORMAP_MODIFIED = 'CORNERSTONE_COLORMAP_MODIFIED',
|
|
247
248
|
}
|
|
248
249
|
|
|
249
250
|
export default Events;
|
|
@@ -26,6 +26,7 @@ export interface ImageLoaderOptions {
|
|
|
26
26
|
priority: number;
|
|
27
27
|
requestType: string;
|
|
28
28
|
additionalDetails?: Record<string, unknown>;
|
|
29
|
+
ignoreCache?: boolean;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
interface DerivedImages {
|
|
@@ -126,6 +127,10 @@ function loadImageFromCacheOrVolume(
|
|
|
126
127
|
imageId: string,
|
|
127
128
|
options: ImageLoaderOptions
|
|
128
129
|
): IImageLoadObject {
|
|
130
|
+
if (options.ignoreCache) {
|
|
131
|
+
return loadImageFromImageLoader(imageId, options);
|
|
132
|
+
}
|
|
133
|
+
|
|
129
134
|
// 1. Check inside the image cache for imageId
|
|
130
135
|
let imageLoadObject = cache.getImageLoadObject(imageId);
|
|
131
136
|
if (imageLoadObject !== undefined) {
|
package/src/types/IImage.ts
CHANGED
|
@@ -15,6 +15,8 @@ export default interface IStackViewport extends IViewport {
|
|
|
15
15
|
modality: string;
|
|
16
16
|
/** Scaling parameters */
|
|
17
17
|
scaling: Scaling;
|
|
18
|
+
|
|
19
|
+
stackActorReInitialized: boolean;
|
|
18
20
|
/**
|
|
19
21
|
* Resizes the viewport - only used in CPU fallback for StackViewport. The
|
|
20
22
|
* GPU resizing happens inside the RenderingEngine.
|
package/src/types/IViewport.ts
CHANGED
|
@@ -191,6 +191,15 @@ export type ViewPresentationSelector = {
|
|
|
191
191
|
interface IViewport {
|
|
192
192
|
/** unique identifier of the viewport */
|
|
193
193
|
id: string;
|
|
194
|
+
|
|
195
|
+
getWidget: (id: string) => any;
|
|
196
|
+
|
|
197
|
+
addWidget: (id: string, widget: any) => void;
|
|
198
|
+
|
|
199
|
+
getWidgets: () => any;
|
|
200
|
+
|
|
201
|
+
removeWidgets: () => void;
|
|
202
|
+
|
|
194
203
|
/** renderingEngineId the viewport belongs to */
|
|
195
204
|
renderingEngineId: string;
|
|
196
205
|
/** viewport type, can be ORTHOGRAPHIC or STACK for now */
|
|
@@ -21,10 +21,17 @@ export default function getViewportImageCornersInWorld(
|
|
|
21
21
|
const { imageData, dimensions } = viewport.getImageData() as IImageData;
|
|
22
22
|
const { canvas } = viewport;
|
|
23
23
|
|
|
24
|
+
// we should consider the device pixel ratio since we are
|
|
25
|
+
// working with canvas coordinates
|
|
26
|
+
const ratio = window.devicePixelRatio;
|
|
27
|
+
|
|
24
28
|
const topLeftCanvas: Point2 = [0, 0];
|
|
25
|
-
const topRightCanvas: Point2 = [canvas.width, 0];
|
|
26
|
-
const bottomRightCanvas: Point2 = [
|
|
27
|
-
|
|
29
|
+
const topRightCanvas: Point2 = [canvas.width / ratio, 0];
|
|
30
|
+
const bottomRightCanvas: Point2 = [
|
|
31
|
+
canvas.width / ratio,
|
|
32
|
+
canvas.height / ratio,
|
|
33
|
+
];
|
|
34
|
+
const bottomLeftCanvas: Point2 = [0, canvas.height / ratio];
|
|
28
35
|
|
|
29
36
|
const topLeftWorld = viewport.canvasToWorld(topLeftCanvas);
|
|
30
37
|
const topRightWorld = viewport.canvasToWorld(topRightCanvas);
|