diff --git a/packages/tools/src/stateManagement/segmentation/segmentIndex.ts b/packages/tools/src/stateManagement/segmentation/segmentIndex.ts index 8e82a3660f..6415121049 100644 --- a/packages/tools/src/stateManagement/segmentation/segmentIndex.ts +++ b/packages/tools/src/stateManagement/segmentation/segmentIndex.ts @@ -69,6 +69,9 @@ function setActiveSegmentIndex( viewportIds.forEach((viewportId) => { const toolGroup = getToolGroupForViewport(viewportId); + if (!toolGroup) { + return; + } invalidateBrushCursor(toolGroup.id); }); } diff --git a/packages/tools/src/tools/base/ContourSegmentationBaseTool.ts b/packages/tools/src/tools/base/ContourSegmentationBaseTool.ts index 7b0dacb554..3cd8c072d4 100644 --- a/packages/tools/src/tools/base/ContourSegmentationBaseTool.ts +++ b/packages/tools/src/tools/base/ContourSegmentationBaseTool.ts @@ -190,10 +190,12 @@ abstract class ContourSegmentationBaseTool extends ContourBaseTool { const viewportIds = getViewportIdsWithSegmentation(segmentationId); - const toolGroupIds = viewportIds.map((viewportId) => { - const toolGroup = getToolGroupForViewport(viewportId); - return toolGroup.id; - }); + const toolGroupIds = viewportIds + .map((viewportId) => { + const toolGroup = getToolGroupForViewport(viewportId); + return toolGroup?.id; + }) + .filter((toolGroupId): toolGroupId is string => toolGroupId != null); triggerAnnotationRenderForToolGroupIds(toolGroupIds); } diff --git a/packages/tools/src/tools/segmentation/strategies/BrushStrategy.ts b/packages/tools/src/tools/segmentation/strategies/BrushStrategy.ts index 460abf88fd..5914def035 100644 --- a/packages/tools/src/tools/segmentation/strategies/BrushStrategy.ts +++ b/packages/tools/src/tools/segmentation/strategies/BrushStrategy.ts @@ -60,7 +60,7 @@ export type InitializedOperationData = LabelmapToolOperationDataAny & { viewportIdsToRender: string[]; centerCanvas?: Array; viewport: Types.IViewport; - } + }; memo?: LabelmapMemo; modified?: boolean; }; @@ -183,18 +183,24 @@ export default class BrushStrategy { this.configurationName = name; // Ensuring backwards compatibility - always have a circular cursor if none is defined - const cursorGeometryInitializer = initializers.find(init => init.hasOwnProperty(StrategyCallbacks.CalculateCursorGeometry)) - const renderCursorInitializer = initializers.find(init => init.hasOwnProperty(StrategyCallbacks.RenderCursor)); + const cursorGeometryInitializer = initializers.find((init) => + init.hasOwnProperty(StrategyCallbacks.CalculateCursorGeometry) + ); + const renderCursorInitializer = initializers.find((init) => + init.hasOwnProperty(StrategyCallbacks.RenderCursor) + ); - if(!cursorGeometryInitializer) { + if (!cursorGeometryInitializer) { initializers.push({ - [StrategyCallbacks.CalculateCursorGeometry]: compositions.circularCursor.calculateCursorGeometry + [StrategyCallbacks.CalculateCursorGeometry]: + compositions.circularCursor.calculateCursorGeometry, }); } - if(!renderCursorInitializer) { + if (!renderCursorInitializer) { initializers.push({ - [StrategyCallbacks.RenderCursor]: compositions.circularCursor.renderCursor + [StrategyCallbacks.RenderCursor]: + compositions.circularCursor.renderCursor, }); } @@ -263,7 +269,12 @@ export default class BrushStrategy { const data = getStrategyData({ operationData, viewport, strategy: this }); - if (!data) { + if ( + !data || + !data.imageVoxelManager || + !data.segmentationVoxelManager || + !data.segmentationImageData + ) { return null; } @@ -411,7 +422,6 @@ export default class BrushStrategy { enabledElement: Types.IEnabledElement, operationData: InitializedOperationData ) => void; - } /** * Adds a list method to the set of defined methods. diff --git a/packages/tools/src/utilities/segmentation/getOrCreateSegmentationVolume.ts b/packages/tools/src/utilities/segmentation/getOrCreateSegmentationVolume.ts index b91bef92c7..98f656b30e 100644 --- a/packages/tools/src/utilities/segmentation/getOrCreateSegmentationVolume.ts +++ b/packages/tools/src/utilities/segmentation/getOrCreateSegmentationVolume.ts @@ -15,6 +15,10 @@ function getOrCreateSegmentationVolume( segmentationId: string ): Types.IImageVolume | undefined { const { representationData } = getSegmentation(segmentationId); + if (!representationData.Labelmap) { + return; + } + let { volumeId } = representationData.Labelmap as LabelmapSegmentationDataVolume;