feat: create memo when manually adding and removing annotations (#5051)
This commit is contained in:
1 parent
9afded1720
commit
5891505c51
4 files changed
+95
-14
No files matched your search
@@ -6,6 +6,7 @@ import {
|
||||
Enums as CoreEnums,
|
||||
Types as CoreTypes,
|
||||
BaseVolumeViewport,
|
||||
getRenderingEngines,
|
||||
} from '@cornerstonejs/core';
|
||||
import {
|
||||
ToolGroupManager,
|
||||
@@ -1882,6 +1883,31 @@ function commandsModule({
|
||||
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
||||
viewportInfo.setOrientation(orientation);
|
||||
},
|
||||
triggerCreateAnnotationMemo: ({
|
||||
annotation,
|
||||
FrameOfReferenceUID,
|
||||
options,
|
||||
}: {
|
||||
annotation: ToolTypes.Annotation;
|
||||
FrameOfReferenceUID: string;
|
||||
options: { newAnnotation?: boolean; deleting?: boolean };
|
||||
}): void => {
|
||||
const { newAnnotation, deleting } = options;
|
||||
const renderingEngines = getRenderingEngines();
|
||||
const viewports = renderingEngines.flatMap(re => re.getViewports());
|
||||
const validViewport = viewports.find(
|
||||
vp => vp.getFrameOfReferenceUID() === FrameOfReferenceUID
|
||||
);
|
||||
|
||||
if (!validViewport) {
|
||||
return;
|
||||
}
|
||||
|
||||
cornerstoneTools.AnnotationTool.createAnnotationMemo(validViewport.element, annotation, {
|
||||
newAnnotation,
|
||||
deleting,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
const definitions = {
|
||||
@@ -2165,6 +2191,7 @@ function commandsModule({
|
||||
setViewportOrientation: actions.setViewportOrientation,
|
||||
hydrateSecondaryDisplaySet: actions.hydrateSecondaryDisplaySet,
|
||||
getVolumeIdForDisplaySet: actions.getVolumeIdForDisplaySet,
|
||||
triggerCreateAnnotationMemo: actions.triggerCreateAnnotationMemo,
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
@@ -179,7 +179,11 @@ export default async function init({
|
||||
initWADOImageLoader(userAuthenticationService, appConfig, extensionManager);
|
||||
|
||||
/* Measurement Service */
|
||||
this.measurementServiceSource = connectToolsToMeasurementService(servicesManager);
|
||||
this.measurementServiceSource = connectToolsToMeasurementService({
|
||||
servicesManager,
|
||||
commandsManager,
|
||||
extensionManager,
|
||||
});
|
||||
|
||||
initCineService(servicesManager);
|
||||
initStudyPrefetcherService(servicesManager);
|
||||
|
||||
@@ -188,13 +188,20 @@ const initMeasurementService = (
|
||||
return csTools3DVer1MeasurementSource;
|
||||
};
|
||||
|
||||
const connectToolsToMeasurementService = (servicesManager: AppTypes.ServicesManager) => {
|
||||
const connectToolsToMeasurementService = ({
|
||||
commandsManager,
|
||||
servicesManager,
|
||||
extensionManager,
|
||||
}: {
|
||||
commandsManager: AppTypes.CommandsManager;
|
||||
servicesManager: AppTypes.ServicesManager;
|
||||
extensionManager: AppTypes.ExtensionManager;
|
||||
}) => {
|
||||
const {
|
||||
measurementService,
|
||||
displaySetService,
|
||||
cornerstoneViewportService,
|
||||
customizationService,
|
||||
viewportGridService,
|
||||
} = servicesManager.services;
|
||||
const csTools3DVer1MeasurementSource = initMeasurementService(
|
||||
measurementService,
|
||||
@@ -202,11 +209,7 @@ const connectToolsToMeasurementService = (servicesManager: AppTypes.ServicesMana
|
||||
cornerstoneViewportService,
|
||||
customizationService
|
||||
);
|
||||
connectMeasurementServiceToTools(
|
||||
measurementService,
|
||||
cornerstoneViewportService,
|
||||
viewportGridService
|
||||
);
|
||||
connectMeasurementServiceToTools({ servicesManager, commandsManager, extensionManager });
|
||||
const { annotationToMeasurement, remove } = csTools3DVer1MeasurementSource;
|
||||
|
||||
//
|
||||
@@ -332,11 +335,13 @@ const connectToolsToMeasurementService = (servicesManager: AppTypes.ServicesMana
|
||||
return csTools3DVer1MeasurementSource;
|
||||
};
|
||||
|
||||
const connectMeasurementServiceToTools = (
|
||||
measurementService,
|
||||
cornerstoneViewportService,
|
||||
viewportGridService
|
||||
) => {
|
||||
const connectMeasurementServiceToTools = ({
|
||||
servicesManager,
|
||||
commandsManager,
|
||||
extensionManager,
|
||||
}) => {
|
||||
const { measurementService, cornerstoneViewportService, viewportGridService } =
|
||||
servicesManager.services;
|
||||
const { MEASUREMENT_REMOVED, MEASUREMENTS_CLEARED, MEASUREMENT_UPDATED, RAW_MEASUREMENT_ADDED } =
|
||||
measurementService.EVENTS;
|
||||
|
||||
@@ -350,7 +355,13 @@ const connectMeasurementServiceToTools = (
|
||||
if (source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {
|
||||
continue;
|
||||
}
|
||||
const removedAnnotation = annotation.state.getAnnotation(uid);
|
||||
removeAnnotation(uid);
|
||||
commandsManager.run('triggerCreateAnnotationMemo', {
|
||||
annotation: removedAnnotation,
|
||||
FrameOfReferenceUID: removedAnnotation.metadata.FrameOfReferenceUID,
|
||||
options: { deleting: true },
|
||||
});
|
||||
}
|
||||
|
||||
// trigger a render
|
||||
@@ -441,7 +452,7 @@ const connectMeasurementServiceToTools = (
|
||||
* This is not the read-only annotation rendered by the SR viewport.
|
||||
*/
|
||||
const annotationManager = annotation.state.getAnnotationManager();
|
||||
annotationManager.addAnnotation({
|
||||
const newAnnotation = {
|
||||
annotationUID: measurement.uid,
|
||||
highlighted: false,
|
||||
isLocked: false,
|
||||
@@ -463,6 +474,12 @@ const connectMeasurementServiceToTools = (
|
||||
label: data.annotation.data.label,
|
||||
frameNumber,
|
||||
},
|
||||
};
|
||||
annotationManager.addAnnotation(newAnnotation);
|
||||
commandsManager.run('triggerCreateAnnotationMemo', {
|
||||
annotation: newAnnotation,
|
||||
FrameOfReferenceUID: newAnnotation.metadata.FrameOfReferenceUID,
|
||||
options: { newAnnotation: true },
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -473,7 +490,13 @@ const connectMeasurementServiceToTools = (
|
||||
if (source?.name && source.name !== CORNERSTONE_3D_TOOLS_SOURCE_NAME) {
|
||||
return;
|
||||
}
|
||||
const removedAnnotation = annotation.state.getAnnotation(removedMeasurementId);
|
||||
removeAnnotation(removedMeasurementId);
|
||||
commandsManager.run('triggerCreateAnnotationMemo', {
|
||||
annotation: removedAnnotation,
|
||||
FrameOfReferenceUID: removedAnnotation.metadata.FrameOfReferenceUID,
|
||||
options: { deleting: true },
|
||||
});
|
||||
const renderingEngine = cornerstoneViewportService.getRenderingEngine();
|
||||
// Note: We could do a better job by triggering the render on the
|
||||
// viewport itself, but the removeAnnotation does not include that info...
|
||||
|
||||
Reference in new issue
Block a user