@cornerstonejs/tools 5.2.1 → 5.3.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.
@@ -0,0 +1,2 @@
1
+ declare const renderingPipelineChangedListener: (evt: CustomEvent) => void;
2
+ export default renderingPipelineChangedListener;
@@ -0,0 +1,14 @@
1
+ import { triggerSegmentationRender } from '../../stateManagement/segmentation/SegmentationRenderingEngine.js';
2
+ import { getSegmentationRepresentations } from '../../stateManagement/segmentation/getSegmentationRepresentation.js';
3
+ const renderingPipelineChangedListener = function (evt) {
4
+ const viewportId = evt.detail?.viewportId;
5
+ if (!viewportId) {
6
+ return;
7
+ }
8
+ const representations = getSegmentationRepresentations(viewportId);
9
+ if (!representations?.length) {
10
+ return;
11
+ }
12
+ triggerSegmentationRender(viewportId);
13
+ };
14
+ export default renderingPipelineChangedListener;
package/dist/esm/init.js CHANGED
@@ -10,6 +10,7 @@ import { defaultSegmentationStateManager } from './stateManagement/segmentation/
10
10
  import segmentationRepresentationModifiedListener from './eventListeners/segmentation/segmentationRepresentationModifiedListener.js';
11
11
  import { setConfig } from './config.js';
12
12
  import segmentationRemovedListener from './eventListeners/segmentation/segmentationRemovedEventListener.js';
13
+ import renderingPipelineChangedListener from './eventListeners/segmentation/renderingPipelineChangedListener.js';
13
14
  import { registerBuiltInSegmentationRepresentationDisplays } from './tools/displayTools/registerBuiltInSegmentationRepresentationDisplays.js';
14
15
  let csToolsInitialized = false;
15
16
  export function init(defaultConfiguration = {}) {
@@ -39,6 +40,7 @@ function _addCornerstoneEventListeners() {
39
40
  const elementDisabledEvent = Enums.Events.ELEMENT_DISABLED;
40
41
  eventTarget.addEventListener(elementEnabledEvent, addEnabledElement);
41
42
  eventTarget.addEventListener(elementDisabledEvent, removeEnabledElement);
43
+ eventTarget.addEventListener(Enums.Events.RENDERING_PIPELINE_CHANGED, renderingPipelineChangedListener);
42
44
  annotationInterpolationEventDispatcher.enable();
43
45
  }
44
46
  function _removeCornerstoneEventListeners() {
@@ -46,6 +48,7 @@ function _removeCornerstoneEventListeners() {
46
48
  const elementDisabledEvent = Enums.Events.ELEMENT_DISABLED;
47
49
  eventTarget.removeEventListener(elementEnabledEvent, addEnabledElement);
48
50
  eventTarget.removeEventListener(elementDisabledEvent, removeEnabledElement);
51
+ eventTarget.removeEventListener(Enums.Events.RENDERING_PIPELINE_CHANGED, renderingPipelineChangedListener);
49
52
  annotationInterpolationEventDispatcher.disable();
50
53
  }
51
54
  function _addCornerstoneToolsEventListeners() {
@@ -1,3 +1,5 @@
1
+ import type { Types } from '@cornerstonejs/core';
1
2
  import type { CreateLabelmapRenderPlanArgs, LabelmapRenderPlan } from './types.js';
2
- declare function createLabelmapRenderPlan({ isVolumeImageMapper, kind, renderMode, segmentationId, unsupportedStateKey, updateAfterMount, useSliceRendering, viewport, canRenderCurrentViewport, getExpectedRepresentationUIDs, mount, update, }: CreateLabelmapRenderPlanArgs): LabelmapRenderPlan;
3
- export { createLabelmapRenderPlan };
3
+ declare function createLabelmapRenderPlan({ isVolumeImageMapper, kind, renderMode, segmentationId, unsupportedStateKey, updateAfterMount, useSliceRendering, viewport, canRenderCurrentViewport, getExpectedRepresentationUIDs, isActorEntryCompatible, mount, update, }: CreateLabelmapRenderPlanArgs): LabelmapRenderPlan;
4
+ declare function getActorEntryRenderMode(actorEntry: Types.ActorEntry): Types.ActorRenderMode | undefined;
5
+ export { createLabelmapRenderPlan, getActorEntryRenderMode };
@@ -1,8 +1,9 @@
1
1
  import { getLabelmapActorEntries } from '../../../../stateManagement/segmentation/helpers/getSegmentationActor.js';
2
2
  import { removeLabelmapRepresentationFromViewport } from './removeLabelmapRepresentationFromViewport.js';
3
- function createLabelmapRenderPlan({ isVolumeImageMapper, kind, renderMode, segmentationId, unsupportedStateKey, updateAfterMount = true, useSliceRendering, viewport, canRenderCurrentViewport = () => kind !== 'unsupported', getExpectedRepresentationUIDs = () => [], mount = async () => undefined, update = () => undefined, }) {
3
+ function createLabelmapRenderPlan({ isVolumeImageMapper, kind, renderMode, segmentationId, unsupportedStateKey, updateAfterMount = true, useSliceRendering, viewport, canRenderCurrentViewport = () => kind !== 'unsupported', getExpectedRepresentationUIDs = () => [], isActorEntryCompatible = () => true, mount = async () => undefined, update = () => undefined, }) {
4
4
  const remove = () => removeLabelmapRepresentationFromViewport(viewport, segmentationId);
5
- const needsRemount = (actorEntries) => haveActorUIDsChanged(actorEntries, getExpectedRepresentationUIDs());
5
+ const needsRemount = (actorEntries) => haveActorUIDsChanged(actorEntries, getExpectedRepresentationUIDs()) ||
6
+ (actorEntries ?? []).some((actorEntry) => !isActorEntryCompatible(actorEntry));
6
7
  return {
7
8
  kind,
8
9
  renderMode,
@@ -35,6 +36,9 @@ function createLabelmapRenderPlan({ isVolumeImageMapper, kind, renderMode, segme
35
36
  },
36
37
  };
37
38
  }
39
+ function getActorEntryRenderMode(actorEntry) {
40
+ return actorEntry.actorMapper?.renderMode;
41
+ }
38
42
  function haveActorUIDsChanged(actorEntries, expectedRepresentationUIDs) {
39
43
  const actualUIDs = new Set((actorEntries ?? []).map((entry) => entry.representationUID));
40
44
  const expectedUIDs = new Set(expectedRepresentationUIDs);
@@ -48,4 +52,4 @@ function haveActorUIDsChanged(actorEntries, expectedRepresentationUIDs) {
48
52
  }
49
53
  return false;
50
54
  }
51
- export { createLabelmapRenderPlan };
55
+ export { createLabelmapRenderPlan, getActorEntryRenderMode };
@@ -1,9 +1,9 @@
1
- import { addVolumesToViewports, Enums, cache, volumeLoader, utilities, } from '@cornerstonejs/core';
1
+ import { ActorRenderMode, addVolumesToViewports, Enums, cache, volumeLoader, utilities, } from '@cornerstonejs/core';
2
2
  import { triggerSegmentationDataModified, triggerSegmentationModified, } from '../../../../stateManagement/segmentation/triggerSegmentationEvents.js';
3
3
  import { getLabelmaps, getOrCreateLabelmapVolume, } from '../../../../stateManagement/segmentation/helpers/labelmapSegmentationState.js';
4
4
  import { addVolumesAsIndependentComponents } from '../addVolumesAsIndependentComponents.js';
5
5
  import { createLabelmapRepresentationUID } from '../labelmapRepresentationUID.js';
6
- import { createLabelmapRenderPlan } from './createLabelmapRenderPlan.js';
6
+ import { createLabelmapRenderPlan, getActorEntryRenderMode, } from './createLabelmapRenderPlan.js';
7
7
  import { addLabelmapToPlanarGenericViewport, isPlanarNextVolumeViewport, } from './planarGenericVolumeLabelmap.js';
8
8
  const { uuidv4 } = utilities;
9
9
  function createLegacyVolumeLabelmapPlan({ config, isVolumeImageMapper, renderMode, segmentation, segmentationId, useSliceRendering, viewport, }) {
@@ -15,6 +15,7 @@ function createLegacyVolumeLabelmapPlan({ config, isVolumeImageMapper, renderMod
15
15
  useSliceRendering,
16
16
  viewport,
17
17
  getExpectedRepresentationUIDs: () => getExpectedVolumeLabelmapRepresentationUIDs(segmentation, segmentationId),
18
+ isActorEntryCompatible: (actorEntry) => !isImageMountedActorEntry(actorEntry),
18
19
  mount: ({ labelMapData }) => mountLegacyVolumeLabelmap({
19
20
  config,
20
21
  labelMapData,
@@ -24,6 +25,11 @@ function createLegacyVolumeLabelmapPlan({ config, isVolumeImageMapper, renderMod
24
25
  }),
25
26
  });
26
27
  }
28
+ function isImageMountedActorEntry(actorEntry) {
29
+ const renderMode = getActorEntryRenderMode(actorEntry);
30
+ return (renderMode === ActorRenderMode.VTK_IMAGE ||
31
+ renderMode === ActorRenderMode.CPU_IMAGE);
32
+ }
27
33
  function getExpectedVolumeLabelmapRepresentationUIDs(segmentation, segmentationId) {
28
34
  return getLabelmaps(segmentation)
29
35
  .filter(canResolveLayerAsVolume)
@@ -42,6 +42,7 @@ type CreateLabelmapRenderPlanArgs = {
42
42
  viewport: Types.IViewport;
43
43
  canRenderCurrentViewport?: () => boolean;
44
44
  getExpectedRepresentationUIDs?: () => string[];
45
+ isActorEntryCompatible?: (actorEntry: Types.ActorEntry) => boolean;
45
46
  mount?: (args: LabelmapRenderPlanMountArgs) => Promise<LabelmapRenderPlanMountResult>;
46
47
  update?: (args: LabelmapRenderPlanUpdateArgs) => void;
47
48
  };
@@ -1,4 +1,4 @@
1
- import type { Types } from '@cornerstonejs/core';
1
+ import { type Types } from '@cornerstonejs/core';
2
2
  import type { ViewportLabelmapRenderMode } from '../../../../stateManagement/segmentation/helpers/getViewportLabelmapRenderMode.js';
3
3
  import type { Segmentation } from '../../../../types/SegmentationStateTypes.js';
4
4
  import type { LabelmapRenderPlan } from './types.js';
@@ -1,6 +1,7 @@
1
+ import { ActorRenderMode } from '@cornerstonejs/core';
1
2
  import { triggerSegmentationDataModified } from '../../../../stateManagement/segmentation/triggerSegmentationEvents.js';
2
3
  import { addVolumeLabelmapImageMapperActors, getVolumeLabelmapImageMapperRepresentationUIDs, updateVolumeLabelmapImageMapperActors, } from '../volumeLabelmapImageMapper.js';
3
- import { createLabelmapRenderPlan } from './createLabelmapRenderPlan.js';
4
+ import { createLabelmapRenderPlan, getActorEntryRenderMode, } from './createLabelmapRenderPlan.js';
4
5
  function createVolumeSliceImageMapperPlan({ isVolumeImageMapper, renderMode, segmentation, segmentationId, useSliceRendering, viewport, }) {
5
6
  return createLabelmapRenderPlan({
6
7
  isVolumeImageMapper,
@@ -10,6 +11,7 @@ function createVolumeSliceImageMapperPlan({ isVolumeImageMapper, renderMode, seg
10
11
  useSliceRendering,
11
12
  viewport,
12
13
  getExpectedRepresentationUIDs: () => getVolumeLabelmapImageMapperRepresentationUIDs(viewport, segmentationId, segmentation),
14
+ isActorEntryCompatible: (actorEntry) => !isVolumeMountedActorEntry(actorEntry),
13
15
  mount: () => mountVolumeLabelmapImageMapper({
14
16
  viewport,
15
17
  segmentation,
@@ -23,6 +25,12 @@ function createVolumeSliceImageMapperPlan({ isVolumeImageMapper, renderMode, seg
23
25
  }),
24
26
  });
25
27
  }
28
+ function isVolumeMountedActorEntry(actorEntry) {
29
+ const renderMode = getActorEntryRenderMode(actorEntry);
30
+ return (renderMode === ActorRenderMode.VTK_VOLUME ||
31
+ renderMode === ActorRenderMode.VTK_VOLUME_SLICE ||
32
+ renderMode === ActorRenderMode.CPU_VOLUME);
33
+ }
26
34
  async function mountVolumeLabelmapImageMapper({ viewport, segmentation, segmentationId, }) {
27
35
  await addVolumeLabelmapImageMapperActors({
28
36
  viewport,
@@ -1 +1 @@
1
- export declare const version = "5.2.1";
1
+ export declare const version = "5.3.0";
@@ -1 +1 @@
1
- export const version = '5.2.1';
1
+ export const version = '5.3.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/tools",
3
- "version": "5.2.1",
3
+ "version": "5.3.0",
4
4
  "description": "Cornerstone3D Tools",
5
5
  "types": "./dist/esm/index.d.ts",
6
6
  "module": "./dist/esm/index.js",
@@ -126,11 +126,11 @@
126
126
  "lodash.get": "4.4.2"
127
127
  },
128
128
  "devDependencies": {
129
- "@cornerstonejs/core": "5.2.1",
129
+ "@cornerstonejs/core": "5.3.0",
130
130
  "canvas": "3.2.0"
131
131
  },
132
132
  "peerDependencies": {
133
- "@cornerstonejs/core": "5.2.1",
133
+ "@cornerstonejs/core": "5.3.0",
134
134
  "@kitware/vtk.js": "35.5.3",
135
135
  "@types/d3-array": "3.2.1",
136
136
  "@types/d3-interpolate": "3.0.4",
@@ -149,5 +149,5 @@
149
149
  "type": "individual",
150
150
  "url": "https://ohif.org/donate"
151
151
  },
152
- "gitHead": "b4c094e9246983c6ebfdfb739d1aca758687721d"
152
+ "gitHead": "6032c1e2640bcd18c7bd2bfb27181052b0e5d28e"
153
153
  }