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 97 98 99 100 101 102 103 104 105 106 107 108 109 | 20x 20x 20x 20x 20x 20x 2x 2x 2x 20x 20x 3x 20x 20x 20x 20x 20x 20x 20x 20x | import { getRenderingEngine, utilities } from '@cornerstonejs/core';
import type { Types } from '@cornerstonejs/core';
import {
SegmentationRepresentationConfig,
RepresentationPublicInput,
ToolGroupSpecificRepresentation,
RepresentationPublicInputOptions,
} from '../../types/SegmentationStateTypes';
import * as SegmentationConfig from './config/segmentationConfig';
import {
addSegmentationRepresentation as addSegmentationRepresentationToState,
getNextColorLUTIndex,
addColorLUT,
} from './segmentationState';
import { getRepresentationSpecificConfig } from './helpers/getRepresentationSpecificConfig';
import CORNERSTONE_COLOR_LUT from '../../constants/COLOR_LUT';
import { getToolGroup } from '../../store/ToolGroupManager';
import { triggerAnnotationRenderForViewportIds } from '../../utilities';
import { SegmentationRepresentations } from '../../enums';
async function addSegmentationRepresentation(
toolGroupId: string,
representationInput: RepresentationPublicInput,
toolGroupSpecificConfig?: SegmentationRepresentationConfig
): Promise<string> {
const { segmentationId, options = {} as RepresentationPublicInputOptions } =
representationInput;
const segmentationRepresentationUID =
representationInput.options?.segmentationRepresentationUID ||
utilities.uuidv4();
// Todo: make segmentsHidden also an option that can get passed by
// the user
const segmentsHidden = new Set() as Set<number>;
const colorLUTIndexToUse = getColorLUTIndex(options);
const toolGroupSpecificRepresentation: ToolGroupSpecificRepresentation = {
segmentationId,
segmentationRepresentationUID,
type: representationInput.type,
segmentsHidden,
colorLUTIndex: colorLUTIndexToUse,
active: true,
segmentationRepresentationSpecificConfig: {},
segmentSpecificConfig: {},
config: getRepresentationSpecificConfig(representationInput),
polySeg: options.polySeg,
};
// Update the toolGroup specific configuration
if (toolGroupSpecificConfig) {
// Since setting configuration on toolGroup will trigger a segmentationRepresentation
// update event, we don't want to trigger the event twice, so we suppress
// the first one
const currentToolGroupConfig =
SegmentationConfig.getToolGroupSpecificConfig(toolGroupId);
const mergedConfig = utilities.deepMerge(
currentToolGroupConfig,
toolGroupSpecificConfig
);
SegmentationConfig.setToolGroupSpecificConfig(toolGroupId, {
renderInactiveSegmentations:
mergedConfig.renderInactiveSegmentations || true,
representations: {
...mergedConfig.representations,
},
});
}
addSegmentationRepresentationToState(
toolGroupId,
toolGroupSpecificRepresentation
);
if (representationInput.type === SegmentationRepresentations.Contour) {
getToolGroup(toolGroupId)
.getViewportsInfo()
.forEach(({ viewportId, renderingEngineId }) => {
const renderingEngine = getRenderingEngine(renderingEngineId);
triggerAnnotationRenderForViewportIds(renderingEngine, [viewportId]);
});
}
return segmentationRepresentationUID;
}
function getColorLUTIndex(options = {} as RepresentationPublicInputOptions) {
const colorLUTOrIndexInput = options.colorLUTOrIndex;
let colorLUTIndexToUse;
Iif (typeof colorLUTOrIndexInput === 'number') {
colorLUTIndexToUse = colorLUTOrIndexInput;
} else {
const nextIndex = getNextColorLUTIndex();
const colorLUTToAdd = Array.isArray(colorLUTOrIndexInput)
? colorLUTOrIndexInput
: CORNERSTONE_COLOR_LUT;
addColorLUT(colorLUTToAdd as Types.ColorLUT, nextIndex);
colorLUTIndexToUse = nextIndex;
}
return colorLUTIndexToUse;
}
export { addSegmentationRepresentation };
|