I wanted to migrate MONAI provided extension and mode to support the latest OHIF viewer version, but since MONAI in their provided extension using volume-based segmentation, which they are updating via voxel manager, but as of now OHIF viewer supports stack-based segmentation, how do I replicate this functionality?
Using OHIF Viewer: 3.11.0 beta.45
Stuck at updating/fixing the updateView function from MONAILabel/plugins/ohifv3/extensions/monai-label/src/components/MonaiLabelPanel.tsx at main · Project-MONAI/MONAILabel · GitHub
specifically in this region (line no. 334 - 374)
if (override === true) {
const { segmentationService } = this.props.servicesManager.services;
const volumeLoadObject = segmentationService.getLabelmapVolume(‘1’);
const { voxelManager } = volumeLoadObject;
const scalarData = voxelManager?.getCompleteScalarDataArray();
// console.log('Current ScalarData: ', scalarData);
const currentSegArray = new Uint8Array(scalarData.length);
currentSegArray.set(scalarData);
// get unique values to determine which organs to update, keep rest
const updateTargets = new Set(convertedData);
const numImageFrames =
this.getActiveViewportInfo().displaySet.numImageFrames;
const sliceLength = scalarData.length / numImageFrames;
const sliceBegin = sliceLength * sidx;
const sliceEnd = sliceBegin + sliceLength;
for (let i = 0; i < convertedData.length; i++) {
if (sidx >= 0 && (i < sliceBegin || i >= sliceEnd)) {
continue;
}
if (
convertedData[i] !== 255 &&
updateTargets.has(currentSegArray[i])
) {
currentSegArray[i] = convertedData[i];
}
}
convertedData = currentSegArray;
}
const { voxelManager } = volumeLoadObject;
voxelManager?.setCompleteScalarDataArray(convertedData);
triggerEvent(eventTarget, Enums.Events.SEGMENTATION_DATA_MODIFIED, {
segmentationId: '1',
});
console.log("updated the segmentation's scalar data");
} else {
console.log('TODO:: Volume Object is NOT In Cache....');
}