* fix: #3077 update seg tolerance popup and update seg thumbnail warning * jump to first segment item image * Shows warning message only once on onChange
This commit is contained in:
1 parent
cb9aa6a765
commit
24bbf2b190
5 files changed
+157
-25
No files matched your search
@@ -0,0 +1,100 @@
|
||||
import csTools from 'cornerstone-tools';
|
||||
import cs from 'cornerstone-core';
|
||||
import OHIF from '@ohif/core';
|
||||
|
||||
import DICOMSegTempCrosshairsTool from './tools/DICOMSegTempCrosshairsTool';
|
||||
import refreshViewports from './utils/refreshViewports';
|
||||
|
||||
const { studyMetadataManager } = OHIF.utils;
|
||||
|
||||
const commandsModule = ({ commandsManager }) => {
|
||||
const actions = {
|
||||
jumpToFirstSegment: ({ viewports }) => {
|
||||
try {
|
||||
const { activeViewportIndex, viewportSpecificData } = viewports;
|
||||
const viewport = viewportSpecificData[activeViewportIndex];
|
||||
const { StudyInstanceUID, displaySetInstanceUID } = viewport;
|
||||
const studyMetadata = studyMetadataManager.get(StudyInstanceUID);
|
||||
const firstImageId = studyMetadata.getFirstImageId(
|
||||
displaySetInstanceUID
|
||||
);
|
||||
|
||||
const module = csTools.getModule('segmentation');
|
||||
const brushStackState = module.state.series[firstImageId];
|
||||
const { labelmaps3D, activeLabelmapIndex } = brushStackState;
|
||||
const { labelmaps2D } = labelmaps3D[activeLabelmapIndex];
|
||||
|
||||
const firstLabelMap2D = labelmaps2D.find(value => !!value);
|
||||
const firstSegment = firstLabelMap2D.segmentsOnLabelmap[0];
|
||||
const segmentNumber = firstSegment;
|
||||
|
||||
const validIndexList = [];
|
||||
labelmaps2D.forEach((labelMap2D, index) => {
|
||||
if (labelMap2D.segmentsOnLabelmap.includes(segmentNumber)) {
|
||||
validIndexList.push(index);
|
||||
}
|
||||
});
|
||||
|
||||
const avg = array => array.reduce((a, b) => a + b) / array.length;
|
||||
const average = avg(validIndexList);
|
||||
const closest = validIndexList.reduce((prev, curr) => {
|
||||
return Math.abs(curr - average) < Math.abs(prev - average)
|
||||
? curr
|
||||
: prev;
|
||||
});
|
||||
|
||||
const enabledElements = cs.getEnabledElements();
|
||||
const element = enabledElements[activeViewportIndex].element;
|
||||
|
||||
const toolState = csTools.getToolState(element, 'stack');
|
||||
if (!toolState) return;
|
||||
|
||||
const imageIds = toolState.data[0].imageIds;
|
||||
const imageId = imageIds[closest];
|
||||
const frameIndex = imageIds.indexOf(imageId);
|
||||
const SOPInstanceUID = cs.metaData.get('SOPInstanceUID', imageId);
|
||||
|
||||
cs.getEnabledElements().forEach(enabledElement => {
|
||||
cs.updateImage(enabledElement.element);
|
||||
});
|
||||
|
||||
DICOMSegTempCrosshairsTool.addCrosshair(
|
||||
element,
|
||||
imageId,
|
||||
segmentNumber
|
||||
);
|
||||
|
||||
cs.getEnabledElements().forEach(enabledElement => {
|
||||
cs.updateImage(enabledElement.element);
|
||||
});
|
||||
|
||||
const refreshViewports = false;
|
||||
|
||||
commandsManager.runCommand('jumpToImage', {
|
||||
StudyInstanceUID,
|
||||
SOPInstanceUID,
|
||||
frameIndex,
|
||||
activeViewportIndex,
|
||||
refreshViewports,
|
||||
});
|
||||
} catch (error) {
|
||||
console.log('Error in moving to the first segment slice');
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
const definitions = {
|
||||
jumpToFirstSegment: {
|
||||
commandFn: actions.jumpToFirstSegment,
|
||||
storeContexts: ['viewports'],
|
||||
options: {},
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
definitions,
|
||||
defaultContext: 'VIEWER',
|
||||
};
|
||||
};
|
||||
|
||||
export default commandsModule;
|
||||
Reference in new issue
Block a user