Skip to main content

Class: PlanarFreehandROITool

PlanarFreehandROITool lets you draw annotations that define an arbitrarily drawn region. You can use the PlanarFreehandROITool in all perpendicular views (axial, sagittal, coronal), support for oblique views is possible, but not yet supported, due to the implementation of getSubPixelSpacingAndXYDirections.

The resulting annotation's data and metadata (the state of the viewport while drawing was happening) will get added to the ToolState manager and can be accessed from the ToolState by calling getAnnotations or similar methods.

PlanarFreehandROITool annotation can be smoothed on drawing completion. This is a configured based approach. The smoothing process uses b-spline algorithm and consider 4 configurations properties:

  • smoothing.smoothOnAdd: to tell whether it should be smoothed or not (for editing it is considered the property smoothOnEdit) (default: false)
  • smoothing.smoothOnEdit: to tell whether it should be smoothed or not when editing (default: false)
  • smoothing.knotsRatioPercentageOnAdd: percentage of points from Segment that are likely to be considered knots during smoothing (for editing it is considered the property knotsRatioPercentageOnEdit) ( default: 40)
  • smoothing.knotsRatioPercentageOnEdit: same as knotsRatioPercentageOnAdd but applicable only when editing the tool (default: 40)

So, with that said the smoothing might occur when:

  • drawing is done (i.e mouse is released) and smoothing.smoothOnAdd is true. smoothing algorithm uses knotsRatioPercentageOnAdd
  • edit drawing is done (i.e mouse is released) and smoothing.smoothOnEdit is true. smoothing algorithm uses knotsRatioPercentageOnEdit and its only applied to changed segment smoothing does not occur when:
  • smoothing.smoothOnAdd is false and drawing is completed
  • smoothing.smoothOnEdit is false and edit is completed
  • drawing still happening (editing or not)

The result of smoothing will be removal of some of the outliers Changing tool configuration (see below) you can fine-tune the smoothing process by changing knotsRatioPercentageOnAdd and knotsRatioPercentageOnEdit value, which smaller values produces a more agressive smoothing. A smaller value of knotsRatioPercentageOnAdd/knotsRatioPercentageOnEdit produces a more aggressive smoothing.

cornerstoneTools.addTool(PlanarFreehandROITool)

const toolGroup = ToolGroupManager.createToolGroup('toolGroupId')

toolGroup.addTool(PlanarFreehandROITool.toolName)

toolGroup.addViewport('viewportId', 'renderingEngineId')

toolGroup.setToolActive(PlanarFreehandROITool.toolName, {
bindings: [
{
mouseButton: MouseBindings.Primary, // Left Click
},
],
})

// set smoothing aggressiveness while adding new annotation (ps: this does not change if smoothing is ON or OFF)
toolGroup.setToolConfiguration(PlanarFreehandROITool.toolName, {
smoothing: { knotsRatioPercentageOnAdd: 30 },
});

// set smoothing to be ON while editing only
toolGroup.setToolConfiguration(PlanarFreehandROITool.toolName, {
smoothing: { smoothOnAdd: false, smoothOnEdit: true },
});

Read more in the Docs section of the website.

Extends

  • ContourSegmentationBaseTool

Extended by

Constructors

new PlanarFreehandROITool()

new PlanarFreehandROITool(toolProps, defaultToolProps): PlanarFreehandROITool

Parameters

toolProps: PublicToolProps = {}

defaultToolProps: SharedToolProp = ...

Returns

PlanarFreehandROITool

Overrides

ContourSegmentationBaseTool.constructor

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:176

Properties

_throttledCalculateCachedStats

_throttledCalculateCachedStats: Function

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:118


activateDraw()

protected activateDraw: (evt, annotation, viewportIdsToRender) => void

Parameters

evt: InteractionEventType

annotation: PlanarFreehandROIAnnotation

viewportIdsToRender: string[]

Returns

void

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:124


configuration

configuration: Record<string, any>

Inherited from

ContourSegmentationBaseTool.configuration

Defined in

tools/src/tools/base/BaseTool.ts:17


isDrawing

isDrawing: boolean = false

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:120


isEditingClosed

isEditingClosed: boolean = false

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:121


isEditingOpen

isEditingOpen: boolean = false

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:122


mode

mode: ToolModes

Tool Mode - Active/Passive/Enabled/Disabled/

Inherited from

ContourSegmentationBaseTool.mode

Defined in

tools/src/tools/base/BaseTool.ts:21


supportedInteractionTypes

supportedInteractionTypes: InteractionTypes[]

Supported Interaction Types - currently only Mouse

Inherited from

ContourSegmentationBaseTool.supportedInteractionTypes

Defined in

tools/src/tools/base/BaseTool.ts:15


toolGroupId

toolGroupId: string

ToolGroup ID the tool instance belongs to

Inherited from

ContourSegmentationBaseTool.toolGroupId

Defined in

tools/src/tools/base/BaseTool.ts:19


toolName

static toolName: any

Overrides

ContourSegmentationBaseTool.toolName

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:116

Methods

_calculateStatsIfActive()

_calculateStatsIfActive(annotation, targetId, viewport, renderingEngine, enabledElement): void

Parameters

annotation: PlanarFreehandROIAnnotation

targetId: string

viewport: any

renderingEngine: any

enabledElement: any

Returns

void

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:663


addAnnotation()

protected addAnnotation(annotation, element): string

Add the annotation to the annotation manager.

Parameters

annotation: Annotation

Contour annotation that is being added

element: HTMLDivElement

HTMLDivElement

Returns

string

Inherited from

ContourSegmentationBaseTool.addAnnotation

Defined in

tools/src/tools/base/ContourSegmentationBaseTool.ts:106


addNewAnnotation()

addNewAnnotation(evt): PlanarFreehandROIAnnotation

Based on the current position of the mouse and the current image, creates a PlanarFreehandROIAnnotation and stores it in the annotationManager.

Parameters

evt: InteractionEventType

EventTypes.NormalizedMouseEventType

Returns

PlanarFreehandROIAnnotation

The PlanarFreehandROIAnnotation object.

Overrides

ContourSegmentationBaseTool.addNewAnnotation

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:282


applyActiveStrategy()

applyActiveStrategy(enabledElement, operationData): any

Applies the active strategy function to the enabled element with the specified operation data.

Parameters

enabledElement: IEnabledElement

The element that is being operated on.

operationData: unknown

The data that needs to be passed to the strategy.

Returns

any

The result of the strategy.

Inherited from

ContourSegmentationBaseTool.applyActiveStrategy

Defined in

tools/src/tools/base/BaseTool.ts:62


applyActiveStrategyCallback()

applyActiveStrategyCallback(enabledElement, operationData, callbackType): any

Applies the active strategy, with a given event type being applied. The event type function is found by indexing it on the active strategy function.

Parameters

enabledElement: IEnabledElement

The element that is being operated on.

operationData: unknown

The data that needs to be passed to the strategy.

callbackType: string

the type of the callback

Returns

any

The result of the strategy.

Inherited from

ContourSegmentationBaseTool.applyActiveStrategyCallback

Defined in

tools/src/tools/base/BaseTool.ts:86


cancel()

cancel(element): void

Parameters

element: HTMLDivElement

Returns

void

Overrides

ContourSegmentationBaseTool.cancel

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:412


cancelAnnotation()

protected cancelAnnotation(annotation): void

Unregister the segmentation when the annotation is canceled

Parameters

annotation: Annotation

Contour segmentation annotation

Returns

void

Inherited from

ContourSegmentationBaseTool.cancelAnnotation

Defined in

tools/src/tools/base/ContourSegmentationBaseTool.ts:124


createAnnotation()

protected createAnnotation(evt): Annotation

Parameters

evt: InteractionEventType

Returns

Annotation

Overrides

ContourSegmentationBaseTool.createAnnotation

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:537


filterInteractableAnnotationsForElement()

filterInteractableAnnotationsForElement(element, annotations): Annotations

We need to override this method as the tool doesn't always have handles, which means filterAnnotationsForDisplay fails inside filterAnnotationsWithinSlice.

Parameters

element: HTMLDivElement

annotations: Annotations

Returns

Annotations

Overrides

ContourSegmentationBaseTool.filterInteractableAnnotationsForElement

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:431


getAnnotationStyle()

protected getAnnotationStyle(context): any

Get the annotation style that may or may not be merged with segmentation style so that it can be used by ROI and contour segmentation annotations when rendered on a canvas or svg layer.

Segmentation style shall be a combination of four different configurations from different levels (global, toolGroup, segmentation and segment) and it shall not be used when isContourSegmentationTool() is overwritten and changed by a child class to return false when that class should work only as an ROI.

Parameters

context: any

Returns

any

Overrides

ContourSegmentationBaseTool.getAnnotationStyle

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:563


getHandleNearImagePoint()

getHandleNearImagePoint(element, annotation, canvasCoords, proximity): ToolHandle

It checks if the mouse click is near TextBoxHandle or AnnotationHandle itself, and return either it. It prioritize TextBoxHandle over AnnotationHandle. If the mouse click is not near any of the handles, it does not return anything.

Parameters

element: HTMLDivElement

The element that the tool is attached to.

annotation: Annotation

The annotation object associated with the annotation

canvasCoords: Point2

The coordinates of the mouse click on canvas

proximity: number

The distance from the mouse cursor to the point that is considered "near".

Returns

ToolHandle

The handle that is closest to the cursor, or null if the cursor is not near any of the handles.

Inherited from

ContourSegmentationBaseTool.getHandleNearImagePoint

Defined in

tools/src/tools/base/AnnotationTool.ts:262


getLinkedTextBoxStyle()

getLinkedTextBoxStyle(specifications, annotation?): Record<string, unknown>

It returns the style for the text box

Parameters

specifications: StyleSpecifier

annotation?: Annotation

The annotation for the tool that is currently active.

Returns

Record<string, unknown>

An object of the style settings for the text box.

Inherited from

ContourSegmentationBaseTool.getLinkedTextBoxStyle

Defined in

tools/src/tools/base/AnnotationTool.ts:328


getPolylinePoints()

protected getPolylinePoints(annotation): Point3[]

Get polyline points in world space. Just to give a chance for child classes to override it.

Parameters

annotation: ContourAnnotation

Contour annotation

Returns

Point3[]

Polyline points in world space

Inherited from

ContourSegmentationBaseTool.getPolylinePoints

Defined in

tools/src/tools/base/ContourBaseTool.ts:245


getReferencedImageId()

protected getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp?): string

Parameters

viewport: Viewport

worldPos: Point3

viewPlaneNormal: Point3

viewUp?: Point3

Returns

string

Inherited from

ContourSegmentationBaseTool.getReferencedImageId

Defined in

tools/src/tools/base/AnnotationDisplayTool.ts:126


getStyle()

getStyle(property, specifications, annotation?): unknown

It takes the property (color, lineDash, etc.) and based on the state of the annotation (selected, highlighted etc.) it returns the appropriate value based on the central toolStyle settings for each level of specification.

Parameters

property: string

The name of the style property to get.

specifications: StyleSpecifier

annotation?: Annotation

The annotation for the tool that is currently active.

Returns

unknown

The value of the property.

Inherited from

ContourSegmentationBaseTool.getStyle

Defined in

tools/src/tools/base/AnnotationDisplayTool.ts:163


getTargetId()

protected getTargetId(viewport): string

Get the target Id for the viewport which will be used to store the cached statistics scoped to that target in the annotations. For StackViewport, targetId is the viewportId, but for the volume viewport, the targetId will be grabbed from the volumeId if particularly specified in the tool configuration, or if not, the first actorUID in the viewport.

Parameters

viewport: Viewport

viewport to get the targetId for

Returns

string

targetId

Inherited from

ContourSegmentationBaseTool.getTargetId

Defined in

tools/src/tools/base/BaseTool.ts:197


getTargetImageData()

protected getTargetImageData(targetId): IImageData | CPUIImageData

Get the image that is displayed for the targetId in the cachedStats which can be

  • imageId:<imageId>
  • volumeId:<volumeId>
  • videoId:<basePathForVideo>/frames/<frameSpecifier>

Parameters

targetId: string

annotation targetId stored in the cached stats

Returns

IImageData | CPUIImageData

The image data for the target.

Inherited from

ContourSegmentationBaseTool.getTargetImageData

Defined in

tools/src/tools/base/BaseTool.ts:140


getToolName()

getToolName(): string

Returns the name of the tool

Returns

string

The name of the tool.

Inherited from

ContourSegmentationBaseTool.getToolName

Defined in

tools/src/tools/base/BaseTool.ts:50


handleSelectedCallback()

handleSelectedCallback(evt, annotation, handle): void

Begins an edit of an open contour, when the mouse has selected a handle (end) of the open contour.

Parameters

evt: InteractionEventType

EventTypes.MouseDownEventType

annotation: PlanarFreehandROIAnnotation

PlanarFreehandROIAnnotation annotation.

handle: ToolHandle

The handle index, 0 for the start and 1 for the end.

Returns

void

Overrides

ContourSegmentationBaseTool.handleSelectedCallback

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:317


isContourSegmentationTool()

protected isContourSegmentationTool(): boolean

Allow children classes inherit from this one and disable contour segmentation behavior and children classes shall work like a normal contour instance which is useful for "hybrid" classes such as splineROI/splineSeg, livewire/livewireSeg, freehandROI/freehandSeg. When this method returns false:

  • contour segmentation data is not added to new annotations
  • annotations are not registered/unregistered as segmentations
  • annotation style shall not contain any segmentation style

Returns

boolean

True if it is a contour segmentation class or false otherwise

Overrides

ContourSegmentationBaseTool.isContourSegmentationTool

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:531


isPointNearTool()

isPointNearTool(element, annotation, canvasCoords, proximity): boolean

Returns if the canvas point is near the line of the given annotation in the provided element or not. A proximity is passed to the function to determine the proximity of the point to the annotation in number of pixels.

Parameters

element: HTMLDivElement

HTML Element

annotation: PlanarFreehandROIAnnotation

The PlanarFreehandROIAnnotation.

canvasCoords: Point2

Canvas coordinates

proximity: number

Proximity to tool to consider

Returns

boolean

Boolean, whether the canvas point is near tool

Overrides

ContourSegmentationBaseTool.isPointNearTool

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:373


isSuvScaled()

isSuvScaled(viewport, targetId, imageId?): boolean

Returns true if the viewport is scaled to SUV units

Parameters

viewport: StackViewport | VolumeViewport

The viewport

targetId: string

The annotation targetId

imageId?: string

The annotation imageId

Returns

boolean

Inherited from

ContourSegmentationBaseTool.isSuvScaled

Defined in

tools/src/tools/base/AnnotationTool.ts:374


mouseMoveCallback()

mouseMoveCallback(evt, filteredAnnotations?): boolean

Event handler for Cornerstone MOUSE_MOVE event.

Parameters

evt: MouseMoveEventType

The normalized mouse event

filteredAnnotations?: Annotations

The annotations to check for hover interactions

Returns

boolean

True if the annotation needs to be re-drawn by the annotationRenderingEngine.

Inherited from

ContourSegmentationBaseTool.mouseMoveCallback

Defined in

tools/src/tools/base/AnnotationTool.ts:197


moveAnnotation()

protected moveAnnotation(annotation, worldPosDelta): void

Move an annotation and all its child annotations in a recursive way.

That is useful when clicking on a spline contour to completely translate it to a different place. In that case all holes (child annotations) must also be translated too.

Parameters

annotation: Annotation

Annotation

worldPosDelta: Point3

Delta in world space

Returns

void

Inherited from

ContourSegmentationBaseTool.moveAnnotation

Defined in

tools/src/tools/base/ContourBaseTool.ts:192


onImageSpacingCalibrated()

onImageSpacingCalibrated(evt): void

On Image Calibration, take all the annotation from the AnnotationState manager, and invalidate them to force them to be re-rendered and their stats to be recalculated. Then use the old and new imageData (non-calibrated and calibrated) to calculate the new position for the annotations in the space of the new imageData.

Parameters

evt: ImageSpacingCalibratedEvent

The calibration event

Returns

void

Inherited from

ContourSegmentationBaseTool.onImageSpacingCalibrated

Defined in

tools/src/tools/base/AnnotationDisplayTool.ts:83


renderAnnotation()

renderAnnotation(enabledElement, svgDrawingHelper): boolean

it is used to draw the annotation in each request animation frame. It calculates the updated cached statistics if data is invalidated and cache it.

Parameters

enabledElement: IEnabledElement

The Cornerstone's enabledElement.

svgDrawingHelper: SVGDrawingHelper

The svgDrawingHelper providing the context for drawing.

Returns

boolean

Inherited from

ContourSegmentationBaseTool.renderAnnotation

Defined in

tools/src/tools/base/ContourBaseTool.ts:39


renderAnnotationInstance()

protected renderAnnotationInstance(renderContext): boolean

Parameters

renderContext: AnnotationRenderContext

Returns

boolean

Overrides

ContourSegmentationBaseTool.renderAnnotationInstance

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:569


setActiveStrategy()

setActiveStrategy(strategyName): void

Sets the active strategy for a tool. Strategies are multiple implementations of tool behavior that can be switched by tool configuration.

Parameters

strategyName: string

name of the strategy to be set as active

Returns

void

Inherited from

ContourSegmentationBaseTool.setActiveStrategy

Defined in

tools/src/tools/base/BaseTool.ts:126


setConfiguration()

setConfiguration(newConfiguration): void

merges the new configuration with the tool configuration

Parameters

newConfiguration: Record<string, any>

Returns

void

Inherited from

ContourSegmentationBaseTool.setConfiguration

Defined in

tools/src/tools/base/BaseTool.ts:112


toolSelectedCallback()

toolSelectedCallback(evt, annotation): void

Edits the open or closed contour when the line is grabbed and dragged.

Parameters

evt: InteractionEventType

annotation: PlanarFreehandROIAnnotation

Returns

void

Overrides

ContourSegmentationBaseTool.toolSelectedCallback

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:341


updateClosedCachedStats()

protected updateClosedCachedStats(__namedParameters): void

Parameters

__namedParameters

__namedParameters.cachedStats: any

__namedParameters.calibratedScale: any

__namedParameters.canvasCoordinates: any

__namedParameters.imageData: any

__namedParameters.metadata: any

__namedParameters.modalityUnit: any

__namedParameters.points: any

__namedParameters.targetId: any

__namedParameters.viewport: any

Returns

void

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:822


updateContourPolyline()

protected updateContourPolyline(annotation, polylineData, transforms, options?): void

Parameters

annotation: ContourAnnotation

polylineData

polylineData.closed?: boolean

polylineData.points: Point2[]

polylineData.targetWindingDirection?: ContourWindingDirection

transforms?

transforms.canvasToWorld?

transforms.worldToCanvas?

options?

options.updateWindingDirection?: boolean

Returns

void

Inherited from

ContourSegmentationBaseTool.updateContourPolyline

Defined in

tools/src/tools/base/ContourBaseTool.ts:213


updateOpenCachedStats()

protected updateOpenCachedStats(__namedParameters): void

Parameters

__namedParameters

__namedParameters.cachedStats: any

__namedParameters.calibratedScale: any

__namedParameters.canvasCoordinates: any

__namedParameters.metadata: any

__namedParameters.modalityUnit: any

__namedParameters.targetId: any

Returns

void

Defined in

tools/src/tools/annotation/PlanarFreehandROITool.ts:977


createAndAddAnnotation()

static createAndAddAnnotation(viewport, ...annotationBaseData): void

Creates and adds an annotation of the given type, firing the annotation modified event on the new annotation. This implicitly uses the static class when you call it on the correct base class. For example, you can call the KeyImageTool.createAnnotation method on KeyImageTool.toolName by calling KeyImageTool.createAndAddAnnotation

Parameters

viewport: any

• ...annotationBaseData: any[]

Returns

void

Inherited from

ContourSegmentationBaseTool.createAndAddAnnotation

Defined in

tools/src/tools/base/AnnotationTool.ts:97


createAnnotation()

static createAnnotation(...annotationBaseData): Annotation

Creates a base annotation object, adding in any annotation base data provided

Parameters

• ...annotationBaseData: any[]

Returns

Annotation

Inherited from

ContourSegmentationBaseTool.createAnnotation

Defined in

tools/src/tools/base/AnnotationTool.ts:45


createAnnotationForViewport()

static createAnnotationForViewport(viewport, ...annotationBaseData): Annotation

Creates a new annotation for the given viewport. This just adds the viewport reference data to the metadata, and otherwise returns the static class createAnnotation data.

Parameters

viewport: any

• ...annotationBaseData: any[]

Returns

Annotation

Inherited from

ContourSegmentationBaseTool.createAnnotationForViewport

Defined in

tools/src/tools/base/AnnotationTool.ts:82