feat(Calibration Tool): add a calibration tool that can manually recalibrate an image and measurements on it (#3136)
* minor bug fix - reading modalities * react error log fix - button props * react warn fix - Typography color prop * calibration tool without persistence * added toolbar button for calibration tool * icon change for calibration tool * important bug fix for calibration - length and calibration rate calculation * fix weird autocorrection * [fix] bugs after merging upstream * [refactor] conform to the new service names
This commit is contained in:
1 parent
7a36363735
commit
b15988359f
18 files changed
+288
-22
No files matched your search
@@ -1,6 +1,8 @@
|
||||
import { eventTarget } from '@cornerstonejs/core';
|
||||
import { Enums, annotation } from '@cornerstonejs/tools';
|
||||
import { DicomMetadataStore, MeasurementService } from '@ohif/core';
|
||||
import { DicomMetadataStore } from '@ohif/core';
|
||||
import { toolNames } from './initCornerstoneTools';
|
||||
import { onCompletedCalibrationLine } from './tools/CalibrationLineTool';
|
||||
|
||||
import measurementServiceMappingsFactory from './utils/measurementServiceMappings/measurementServiceMappingsFactory';
|
||||
import getSOPInstanceAttributes from './utils/measurementServiceMappings/utils/getSOPInstanceAttributes';
|
||||
@@ -102,14 +104,25 @@ const initMeasurementService = (
|
||||
PlanarFreehandROI.toMeasurement
|
||||
);
|
||||
|
||||
// On the UI side, the Calibration Line tool will work almost the same as the
|
||||
// Length tool
|
||||
measurementService.addMapping(
|
||||
csTools3DVer1MeasurementSource,
|
||||
'CalibrationLine',
|
||||
Length.matchingCriteria,
|
||||
Length.toAnnotation,
|
||||
Length.toMeasurement
|
||||
);
|
||||
|
||||
return csTools3DVer1MeasurementSource;
|
||||
};
|
||||
|
||||
const connectToolsToMeasurementService = (
|
||||
measurementService,
|
||||
displaySetService,
|
||||
cornerstoneViewportService
|
||||
) => {
|
||||
const connectToolsToMeasurementService = servicesManager => {
|
||||
const {
|
||||
measurementService,
|
||||
displaySetService,
|
||||
cornerstoneViewportService,
|
||||
} = servicesManager.services;
|
||||
const csTools3DVer1MeasurementSource = initMeasurementService(
|
||||
measurementService,
|
||||
displaySetService,
|
||||
@@ -131,15 +144,38 @@ const connectToolsToMeasurementService = (
|
||||
} = annotationAddedEventDetail;
|
||||
const { toolName } = metadata;
|
||||
|
||||
// To force the measurementUID be the same as the annotationUID
|
||||
// Todo: this should be changed when a measurement can include multiple annotations
|
||||
// in the future
|
||||
annotationAddedEventDetail.uid = annotationUID;
|
||||
annotationToMeasurement(toolName, annotationAddedEventDetail);
|
||||
if (
|
||||
csToolsEvent.type === completedEvt &&
|
||||
toolName === toolNames.CalibrationLine
|
||||
) {
|
||||
// show modal to input the measurement (mm)
|
||||
onCompletedCalibrationLine(servicesManager, csToolsEvent)
|
||||
.then(
|
||||
() => {
|
||||
console.log('calibration applied');
|
||||
},
|
||||
() => true
|
||||
)
|
||||
.finally(() => {
|
||||
// we don't need the calibration line lingering around, remove the
|
||||
// annotation from the display
|
||||
removeAnnotation(annotationUID);
|
||||
removeMeasurement(csToolsEvent);
|
||||
// this will ensure redrawing of annotations
|
||||
cornerstoneViewportService.resize();
|
||||
});
|
||||
} else {
|
||||
// To force the measurementUID be the same as the annotationUID
|
||||
// Todo: this should be changed when a measurement can include multiple annotations
|
||||
// in the future
|
||||
annotationAddedEventDetail.uid = annotationUID;
|
||||
annotationToMeasurement(toolName, annotationAddedEventDetail);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to update measurement:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function updateMeasurement(csToolsEvent) {
|
||||
try {
|
||||
const annotationModifiedEventDetail = csToolsEvent.detail;
|
||||
|
||||
Reference in new issue
Block a user