Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import { Types, cache } from '@cornerstonejs/core';
import { getUniqueSegmentIndices } from '../../../../utilities/segmentation';
import {
getSegmentation,
getSegmentationRepresentations,
getToolGroupIdsWithSegmentation,
} from '../../segmentationState';
import { triggerSegmentationModified } from '../../triggerSegmentationEvents';
import { ToolGroupSpecificRepresentations } from '../../../../types/SegmentationStateTypes';
import { SegmentationRepresentations } from '../../../../enums';
import { computeSurfaceFromLabelmapSegmentation } from './surfaceComputationStrategies';
import { createAndCacheSurfacesFromRaw } from './createAndCacheSurfacesFromRaw';
export async function updateSurfaceData(segmentationId) {
const surfacesObj = await computeSurfaceFromLabelmapSegmentation(
segmentationId
);
if (!surfacesObj) {
return;
}
const segmentation = getSegmentation(segmentationId);
const indices = getUniqueSegmentIndices(segmentationId);
if (!indices.length) {
// means all segments were removed so we need to empty out
// the geometry data
const geometryIds = segmentation.representationData.SURFACE.geometryIds;
geometryIds.forEach((geometryId) => {
const geometry = cache.getGeometry(geometryId);
const surface = geometry.data as Types.ISurface;
surface.setPoints([]);
surface.setPolys([]);
});
triggerSegmentationModified(segmentationId);
return;
}
const promises = surfacesObj.map(({ data, segmentIndex }) => {
const geometryId = `segmentation_${segmentationId}_surface_${segmentIndex}`;
const geometry = cache.getGeometry(geometryId);
if (!geometry) {
// means it is a new segment getting added while we were
// listening to the segmentation data modified event
const toolGroupIds = getToolGroupIdsWithSegmentation(segmentationId);
return toolGroupIds.map((toolGroupId) => {
const segmentationRepresentations = getSegmentationRepresentations(
toolGroupId
) as ToolGroupSpecificRepresentations;
return segmentationRepresentations.map((segmentationRepresentation) => {
if (
segmentationRepresentation.type !==
SegmentationRepresentations.Surface
) {
return;
}
segmentation.representationData.SURFACE.geometryIds.set(
segmentIndex,
geometryId
);
return createAndCacheSurfacesFromRaw(
segmentationId,
[{ segmentIndex, data }],
{
segmentationRepresentationUID:
segmentationRepresentation.segmentationRepresentationUID,
}
);
});
});
} else if (indices.includes(segmentIndex)) {
// if the geometry already exists and the segmentIndex is
// still present, update the geometry data
const surface = geometry.data as Types.ISurface;
surface.setPoints(data.points);
surface.setPolys(data.polys);
} else {
const surface = geometry.data as Types.ISurface;
surface.setPoints([]);
surface.setPolys([]);
}
});
await Promise.all(promises);
triggerSegmentationModified(segmentationId);
}
|