@cornerstonejs/tools 1.43.6 → 1.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.d.ts +3 -1
- package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js +7 -2
- package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
- package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.d.ts +2 -1
- package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.js +23 -9
- package/dist/cjs/stateManagement/segmentation/config/segmentationVisibility.js.map +1 -1
- package/dist/cjs/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +14 -1
- package/dist/cjs/stateManagement/segmentation/helpers/normalizeSegmentationInput.js.map +1 -1
- package/dist/cjs/tools/annotation/AngleTool.js +4 -3
- package/dist/cjs/tools/annotation/AngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/ArrowAnnotateTool.js +4 -3
- package/dist/cjs/tools/annotation/ArrowAnnotateTool.js.map +1 -1
- package/dist/cjs/tools/annotation/BidirectionalTool.js +4 -4
- package/dist/cjs/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/cjs/tools/annotation/CircleROITool.js +4 -3
- package/dist/cjs/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/CobbAngleTool.js +4 -3
- package/dist/cjs/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js +4 -1
- package/dist/cjs/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/EllipticalROITool.js +4 -3
- package/dist/cjs/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/KeyImageTool.js +4 -1
- package/dist/cjs/tools/annotation/KeyImageTool.js.map +1 -1
- package/dist/cjs/tools/annotation/LengthTool.js +4 -4
- package/dist/cjs/tools/annotation/LengthTool.js.map +1 -1
- package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.d.ts +6 -0
- package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js +14 -0
- package/dist/cjs/tools/annotation/LivewireContourSegmentationTool.js.map +1 -0
- package/dist/cjs/tools/annotation/LivewireContourTool.d.ts +14 -5
- package/dist/cjs/tools/annotation/LivewireContourTool.js +126 -159
- package/dist/cjs/tools/annotation/LivewireContourTool.js.map +1 -1
- package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +8 -0
- package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.js +24 -0
- package/dist/cjs/tools/annotation/PlanarFreehandContourSegmentationTool.js.map +1 -0
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.d.ts +16 -6
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js +104 -134
- package/dist/cjs/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/ProbeTool.js +1 -1
- package/dist/cjs/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/cjs/tools/annotation/RectangleROITool.js +4 -3
- package/dist/cjs/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/SplineContourSegmentationTool.d.ts +8 -0
- package/dist/cjs/tools/annotation/SplineContourSegmentationTool.js +23 -0
- package/dist/cjs/tools/annotation/SplineContourSegmentationTool.js.map +1 -0
- package/dist/cjs/tools/annotation/SplineROITool.d.ts +15 -8
- package/dist/cjs/tools/annotation/SplineROITool.js +168 -240
- package/dist/cjs/tools/annotation/SplineROITool.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +5 -5
- package/dist/cjs/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js +4 -4
- package/dist/cjs/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js +7 -7
- package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js.map +1 -1
- package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js +19 -15
- package/dist/cjs/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
- package/dist/cjs/tools/base/AnnotationTool.d.ts +15 -0
- package/dist/cjs/tools/base/AnnotationTool.js +24 -0
- package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
- package/dist/cjs/tools/base/ContourBaseTool.d.ts +19 -0
- package/dist/cjs/tools/base/ContourBaseTool.js +130 -0
- package/dist/cjs/tools/base/ContourBaseTool.js.map +1 -0
- package/dist/cjs/tools/base/ContourSegmentationBaseTool.d.ts +18 -0
- package/dist/cjs/tools/base/ContourSegmentationBaseTool.js +139 -0
- package/dist/cjs/tools/base/ContourSegmentationBaseTool.js.map +1 -0
- package/dist/cjs/tools/displayTools/Contour/contourDisplay.js +1 -0
- package/dist/cjs/tools/displayTools/Contour/contourDisplay.js.map +1 -1
- package/dist/cjs/tools/index.d.ts +4 -1
- package/dist/cjs/tools/index.js +7 -1
- package/dist/cjs/tools/index.js.map +1 -1
- package/dist/cjs/types/ContourAnnotation.d.ts +11 -0
- package/dist/cjs/types/ContourAnnotation.js +3 -0
- package/dist/cjs/types/ContourAnnotation.js.map +1 -0
- package/dist/cjs/types/ContourSegmentationAnnotation.d.ts +11 -0
- package/dist/cjs/types/ContourSegmentationAnnotation.js +3 -0
- package/dist/cjs/types/ContourSegmentationAnnotation.js.map +1 -0
- package/dist/cjs/types/ContourTypes.d.ts +4 -1
- package/dist/cjs/types/SegmentationStateTypes.d.ts +1 -1
- package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +11 -52
- package/dist/cjs/types/index.d.ts +3 -1
- package/dist/cjs/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
- package/dist/cjs/utilities/pointInSurroundingSphereCallback.d.ts +4 -0
- package/dist/cjs/utilities/pointInSurroundingSphereCallback.js +70 -0
- package/dist/cjs/utilities/pointInSurroundingSphereCallback.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +7 -2
- package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
- package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js +20 -7
- package/dist/esm/stateManagement/segmentation/config/segmentationVisibility.js.map +1 -1
- package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js +13 -1
- package/dist/esm/stateManagement/segmentation/helpers/normalizeSegmentationInput.js.map +1 -1
- package/dist/esm/tools/annotation/AngleTool.js +4 -3
- package/dist/esm/tools/annotation/AngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js +4 -3
- package/dist/esm/tools/annotation/ArrowAnnotateTool.js.map +1 -1
- package/dist/esm/tools/annotation/BidirectionalTool.js +4 -4
- package/dist/esm/tools/annotation/BidirectionalTool.js.map +1 -1
- package/dist/esm/tools/annotation/CircleROITool.js +4 -3
- package/dist/esm/tools/annotation/CircleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/CobbAngleTool.js +4 -3
- package/dist/esm/tools/annotation/CobbAngleTool.js.map +1 -1
- package/dist/esm/tools/annotation/DragProbeTool.js +4 -1
- package/dist/esm/tools/annotation/DragProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/EllipticalROITool.js +4 -3
- package/dist/esm/tools/annotation/EllipticalROITool.js.map +1 -1
- package/dist/esm/tools/annotation/KeyImageTool.js +4 -1
- package/dist/esm/tools/annotation/KeyImageTool.js.map +1 -1
- package/dist/esm/tools/annotation/LengthTool.js +4 -4
- package/dist/esm/tools/annotation/LengthTool.js.map +1 -1
- package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js +9 -0
- package/dist/esm/tools/annotation/LivewireContourSegmentationTool.js.map +1 -0
- package/dist/esm/tools/annotation/LivewireContourTool.js +123 -160
- package/dist/esm/tools/annotation/LivewireContourTool.js.map +1 -1
- package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js +19 -0
- package/dist/esm/tools/annotation/PlanarFreehandContourSegmentationTool.js.map +1 -0
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js +104 -134
- package/dist/esm/tools/annotation/PlanarFreehandROITool.js.map +1 -1
- package/dist/esm/tools/annotation/ProbeTool.js +1 -1
- package/dist/esm/tools/annotation/ProbeTool.js.map +1 -1
- package/dist/esm/tools/annotation/RectangleROITool.js +4 -3
- package/dist/esm/tools/annotation/RectangleROITool.js.map +1 -1
- package/dist/esm/tools/annotation/SplineContourSegmentationTool.js +18 -0
- package/dist/esm/tools/annotation/SplineContourSegmentationTool.js.map +1 -0
- package/dist/esm/tools/annotation/SplineROITool.js +153 -227
- package/dist/esm/tools/annotation/SplineROITool.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js +5 -5
- package/dist/esm/tools/annotation/planarFreehandROITool/closedContourEditLoop.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js +4 -4
- package/dist/esm/tools/annotation/planarFreehandROITool/drawLoop.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js +7 -7
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEditLoop.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/openContourEndEditLoop.js.map +1 -1
- package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js +19 -15
- package/dist/esm/tools/annotation/planarFreehandROITool/renderMethods.js.map +1 -1
- package/dist/esm/tools/base/AnnotationTool.js +24 -0
- package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
- package/dist/esm/tools/base/ContourBaseTool.js +122 -0
- package/dist/esm/tools/base/ContourBaseTool.js.map +1 -0
- package/dist/esm/tools/base/ContourSegmentationBaseTool.js +131 -0
- package/dist/esm/tools/base/ContourSegmentationBaseTool.js.map +1 -0
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js +1 -0
- package/dist/esm/tools/displayTools/Contour/contourDisplay.js.map +1 -1
- package/dist/esm/tools/index.js +4 -1
- package/dist/esm/tools/index.js.map +1 -1
- package/dist/esm/types/ContourAnnotation.js +2 -0
- package/dist/esm/types/ContourAnnotation.js.map +1 -0
- package/dist/esm/types/ContourSegmentationAnnotation.js +2 -0
- package/dist/esm/types/ContourSegmentationAnnotation.js.map +1 -0
- package/dist/esm/utilities/pointInSurroundingSphereCallback.js +64 -0
- package/dist/esm/utilities/pointInSurroundingSphereCallback.js.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/stateManagement/segmentation/SegmentationStateManager.d.ts +3 -1
- package/dist/types/stateManagement/segmentation/SegmentationStateManager.d.ts.map +1 -1
- package/dist/types/stateManagement/segmentation/config/segmentationVisibility.d.ts +2 -1
- package/dist/types/stateManagement/segmentation/config/segmentationVisibility.d.ts.map +1 -1
- package/dist/types/stateManagement/segmentation/helpers/normalizeSegmentationInput.d.ts.map +1 -1
- package/dist/types/tools/annotation/AngleTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/ArrowAnnotateTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/CircleROITool.d.ts.map +1 -1
- package/dist/types/tools/annotation/CobbAngleTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/DragProbeTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/EllipticalROITool.d.ts.map +1 -1
- package/dist/types/tools/annotation/KeyImageTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/LengthTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts +7 -0
- package/dist/types/tools/annotation/LivewireContourSegmentationTool.d.ts.map +1 -0
- package/dist/types/tools/annotation/LivewireContourTool.d.ts +14 -5
- package/dist/types/tools/annotation/LivewireContourTool.d.ts.map +1 -1
- package/dist/types/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts +9 -0
- package/dist/types/tools/annotation/PlanarFreehandContourSegmentationTool.d.ts.map +1 -0
- package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts +16 -6
- package/dist/types/tools/annotation/PlanarFreehandROITool.d.ts.map +1 -1
- package/dist/types/tools/annotation/RectangleROITool.d.ts.map +1 -1
- package/dist/types/tools/annotation/SplineContourSegmentationTool.d.ts +9 -0
- package/dist/types/tools/annotation/SplineContourSegmentationTool.d.ts.map +1 -0
- package/dist/types/tools/annotation/SplineROITool.d.ts +15 -8
- package/dist/types/tools/annotation/SplineROITool.d.ts.map +1 -1
- package/dist/types/tools/annotation/planarFreehandROITool/closedContourEditLoop.d.ts.map +1 -1
- package/dist/types/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.d.ts.map +1 -1
- package/dist/types/tools/annotation/planarFreehandROITool/openContourEditLoop.d.ts.map +1 -1
- package/dist/types/tools/annotation/planarFreehandROITool/openContourEndEditLoop.d.ts.map +1 -1
- package/dist/types/tools/annotation/planarFreehandROITool/renderMethods.d.ts.map +1 -1
- package/dist/types/tools/base/AnnotationTool.d.ts +15 -0
- package/dist/types/tools/base/AnnotationTool.d.ts.map +1 -1
- package/dist/types/tools/base/ContourBaseTool.d.ts +20 -0
- package/dist/types/tools/base/ContourBaseTool.d.ts.map +1 -0
- package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts +19 -0
- package/dist/types/tools/base/ContourSegmentationBaseTool.d.ts.map +1 -0
- package/dist/types/tools/displayTools/Contour/contourDisplay.d.ts.map +1 -1
- package/dist/types/tools/index.d.ts +4 -1
- package/dist/types/tools/index.d.ts.map +1 -1
- package/dist/types/types/ContourAnnotation.d.ts +12 -0
- package/dist/types/types/ContourAnnotation.d.ts.map +1 -0
- package/dist/types/types/ContourSegmentationAnnotation.d.ts +12 -0
- package/dist/types/types/ContourSegmentationAnnotation.d.ts.map +1 -0
- package/dist/types/types/ContourTypes.d.ts +4 -1
- package/dist/types/types/ContourTypes.d.ts.map +1 -1
- package/dist/types/types/SegmentationStateTypes.d.ts +1 -1
- package/dist/types/types/SegmentationStateTypes.d.ts.map +1 -1
- package/dist/types/types/ToolSpecificAnnotationTypes.d.ts +11 -52
- package/dist/types/types/ToolSpecificAnnotationTypes.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +3 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utilities/math/vec2/liangBarksyClip.d.ts +1 -1
- package/dist/types/utilities/pointInSurroundingSphereCallback.d.ts +5 -0
- package/dist/types/utilities/pointInSurroundingSphereCallback.d.ts.map +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +6 -0
- package/src/stateManagement/segmentation/SegmentationStateManager.ts +11 -2
- package/src/stateManagement/segmentation/config/segmentationVisibility.ts +52 -6
- package/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +27 -1
- package/src/tools/annotation/AngleTool.ts +4 -3
- package/src/tools/annotation/ArrowAnnotateTool.ts +4 -3
- package/src/tools/annotation/BidirectionalTool.ts +4 -4
- package/src/tools/annotation/CircleROITool.ts +4 -3
- package/src/tools/annotation/CobbAngleTool.ts +4 -3
- package/src/tools/annotation/DragProbeTool.ts +4 -1
- package/src/tools/annotation/EllipticalROITool.ts +4 -3
- package/src/tools/annotation/KeyImageTool.ts +4 -1
- package/src/tools/annotation/LengthTool.ts +4 -5
- package/src/tools/annotation/LivewireContourSegmentationTool.ts +13 -0
- package/src/tools/annotation/LivewireContourTool.ts +75 -150
- package/src/tools/annotation/PlanarFreehandContourSegmentationTool.ts +30 -0
- package/src/tools/annotation/PlanarFreehandROITool.ts +153 -187
- package/src/tools/annotation/ProbeTool.ts +1 -1
- package/src/tools/annotation/RectangleROITool.ts +4 -3
- package/src/tools/annotation/SplineContourSegmentationTool.ts +28 -0
- package/src/tools/annotation/SplineROITool.ts +172 -282
- package/src/tools/annotation/planarFreehandROITool/closedContourEditLoop.ts +7 -5
- package/src/tools/annotation/planarFreehandROITool/drawLoop.ts +4 -4
- package/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +3 -1
- package/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +12 -9
- package/src/tools/annotation/planarFreehandROITool/openContourEndEditLoop.ts +5 -2
- package/src/tools/annotation/planarFreehandROITool/renderMethods.ts +19 -14
- package/src/tools/base/AnnotationTool.ts +35 -0
- package/src/tools/base/ContourBaseTool.ts +226 -0
- package/src/tools/base/ContourSegmentationBaseTool.ts +276 -0
- package/src/tools/displayTools/Contour/contourDisplay.ts +1 -0
- package/src/tools/index.ts +6 -0
- package/src/types/ContourAnnotation.ts +13 -0
- package/src/types/ContourSegmentationAnnotation.ts +14 -0
- package/src/types/ContourTypes.ts +8 -1
- package/src/types/SegmentationStateTypes.ts +1 -1
- package/src/types/ToolSpecificAnnotationTypes.ts +17 -53
- package/src/types/index.ts +12 -0
- package/src/utilities/pointInSurroundingSphereCallback.ts +188 -0
|
@@ -15,11 +15,6 @@ import {
|
|
|
15
15
|
} from '../../utilities/getCalibratedUnits';
|
|
16
16
|
import { roundNumber } from '../../utilities';
|
|
17
17
|
import { Events } from '../../enums';
|
|
18
|
-
import { AnnotationTool } from '../base';
|
|
19
|
-
import {
|
|
20
|
-
addAnnotation,
|
|
21
|
-
getAnnotations,
|
|
22
|
-
} from '../../stateManagement/annotation/annotationState';
|
|
23
18
|
import { polyline } from '../../utilities/math';
|
|
24
19
|
import { filterAnnotationsForDisplay } from '../../utilities/planar';
|
|
25
20
|
import throttle from '../../utilities/throttle';
|
|
@@ -53,11 +48,9 @@ import { PlanarFreehandROICommonData } from '../../utilities/math/polyline/plana
|
|
|
53
48
|
import { getIntersectionCoordinatesWithPolyline } from '../../utilities/math/polyline/getIntersectionWithPolyline';
|
|
54
49
|
import pointInShapeCallback from '../../utilities/pointInShapeCallback';
|
|
55
50
|
import { isViewportPreScaled } from '../../utilities/viewport/isViewportPreScaled';
|
|
56
|
-
import {
|
|
57
|
-
ModalityUnitOptions,
|
|
58
|
-
getModalityUnit,
|
|
59
|
-
} from '../../utilities/getModalityUnit';
|
|
51
|
+
import { getModalityUnit } from '../../utilities/getModalityUnit';
|
|
60
52
|
import { BasicStatsCalculator } from '../../utilities/math/basic';
|
|
53
|
+
import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
|
|
61
54
|
|
|
62
55
|
const { pointCanProjectOnLine } = polyline;
|
|
63
56
|
const { EPSILON } = CONSTANTS;
|
|
@@ -121,10 +114,11 @@ const PARALLEL_THRESHOLD = 1 - EPSILON;
|
|
|
121
114
|
* });
|
|
122
115
|
* ```
|
|
123
116
|
*
|
|
117
|
+
*
|
|
124
118
|
* Read more in the Docs section of the website.
|
|
125
119
|
*/
|
|
126
120
|
|
|
127
|
-
class PlanarFreehandROITool extends
|
|
121
|
+
class PlanarFreehandROITool extends ContourSegmentationBaseTool {
|
|
128
122
|
static toolName;
|
|
129
123
|
|
|
130
124
|
public touchDragCallback: any;
|
|
@@ -249,63 +243,23 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
249
243
|
evt: EventTypes.InteractionEventType
|
|
250
244
|
): PlanarFreehandROIAnnotation => {
|
|
251
245
|
const eventDetail = evt.detail;
|
|
252
|
-
const {
|
|
253
|
-
const worldPos = currentPoints.world;
|
|
246
|
+
const { element } = eventDetail;
|
|
254
247
|
const enabledElement = getEnabledElement(element);
|
|
255
|
-
const {
|
|
256
|
-
|
|
257
|
-
const
|
|
248
|
+
const { renderingEngine } = enabledElement;
|
|
249
|
+
|
|
250
|
+
const annotation = this.createAnnotation(
|
|
251
|
+
evt
|
|
252
|
+
) as PlanarFreehandROIAnnotation;
|
|
253
|
+
|
|
254
|
+
this.addAnnotation(annotation, element);
|
|
258
255
|
|
|
259
|
-
const referencedImageId = this.getReferencedImageId(
|
|
260
|
-
viewport,
|
|
261
|
-
worldPos,
|
|
262
|
-
viewPlaneNormal,
|
|
263
|
-
viewUp
|
|
264
|
-
);
|
|
265
256
|
const viewportIdsToRender = getViewportIdsWithToolToRender(
|
|
266
257
|
element,
|
|
267
258
|
this.getToolName()
|
|
268
259
|
);
|
|
269
260
|
|
|
270
|
-
const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
|
|
271
|
-
|
|
272
|
-
const annotation: PlanarFreehandROIAnnotation = {
|
|
273
|
-
highlighted: true,
|
|
274
|
-
invalidated: true,
|
|
275
|
-
metadata: {
|
|
276
|
-
viewPlaneNormal: <Types.Point3>[...viewPlaneNormal],
|
|
277
|
-
viewUp: <Types.Point3>[...viewUp],
|
|
278
|
-
FrameOfReferenceUID,
|
|
279
|
-
referencedImageId,
|
|
280
|
-
toolName: this.getToolName(),
|
|
281
|
-
},
|
|
282
|
-
data: {
|
|
283
|
-
handles: {
|
|
284
|
-
points: [], // Handle points for open contours
|
|
285
|
-
activeHandleIndex: null,
|
|
286
|
-
textBox: {
|
|
287
|
-
hasMoved: false,
|
|
288
|
-
worldPosition: <Types.Point3>[0, 0, 0],
|
|
289
|
-
worldBoundingBox: {
|
|
290
|
-
topLeft: <Types.Point3>[0, 0, 0],
|
|
291
|
-
topRight: <Types.Point3>[0, 0, 0],
|
|
292
|
-
bottomLeft: <Types.Point3>[0, 0, 0],
|
|
293
|
-
bottomRight: <Types.Point3>[0, 0, 0],
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
},
|
|
297
|
-
polyline: [<Types.Point3>[...worldPos]], // Polyline coordinates
|
|
298
|
-
label: '',
|
|
299
|
-
cachedStats: {},
|
|
300
|
-
},
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
addAnnotation(annotation, element);
|
|
304
|
-
|
|
305
261
|
this.activateDraw(evt, annotation, viewportIdsToRender);
|
|
306
|
-
|
|
307
262
|
evt.preventDefault();
|
|
308
|
-
|
|
309
263
|
triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
|
|
310
264
|
|
|
311
265
|
return annotation;
|
|
@@ -356,10 +310,10 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
356
310
|
this.getToolName()
|
|
357
311
|
);
|
|
358
312
|
|
|
359
|
-
if (annotation.data.
|
|
360
|
-
this.activateOpenContourEdit(evt, annotation, viewportIdsToRender);
|
|
361
|
-
} else {
|
|
313
|
+
if (annotation.data.contour.closed) {
|
|
362
314
|
this.activateClosedContourEdit(evt, annotation, viewportIdsToRender);
|
|
315
|
+
} else {
|
|
316
|
+
this.activateOpenContourEdit(evt, annotation, viewportIdsToRender);
|
|
363
317
|
}
|
|
364
318
|
};
|
|
365
319
|
|
|
@@ -383,7 +337,7 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
383
337
|
const enabledElement = getEnabledElement(element);
|
|
384
338
|
const { viewport } = enabledElement;
|
|
385
339
|
|
|
386
|
-
const points = annotation.data.polyline;
|
|
340
|
+
const points = annotation.data.contour.polyline;
|
|
387
341
|
|
|
388
342
|
// NOTE: It is implemented this way so that we do not double calculate
|
|
389
343
|
// points when number crunching adjacent line segments.
|
|
@@ -392,17 +346,16 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
392
346
|
for (let i = 1; i < points.length; i++) {
|
|
393
347
|
const p1 = previousPoint;
|
|
394
348
|
const p2 = viewport.worldToCanvas(points[i]);
|
|
349
|
+
const canProject = pointCanProjectOnLine(canvasCoords, p1, p2, proximity);
|
|
395
350
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
if (distance === true) {
|
|
351
|
+
if (canProject) {
|
|
399
352
|
return true;
|
|
400
353
|
}
|
|
401
354
|
|
|
402
355
|
previousPoint = p2;
|
|
403
356
|
}
|
|
404
357
|
|
|
405
|
-
if (annotation.data.
|
|
358
|
+
if (!annotation.data.contour.closed) {
|
|
406
359
|
// Contour is open, don't check last point to first point.
|
|
407
360
|
return false;
|
|
408
361
|
}
|
|
@@ -411,18 +364,7 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
411
364
|
const pStart = viewport.worldToCanvas(points[0]);
|
|
412
365
|
const pEnd = viewport.worldToCanvas(points[points.length - 1]);
|
|
413
366
|
|
|
414
|
-
|
|
415
|
-
canvasCoords,
|
|
416
|
-
pStart,
|
|
417
|
-
pEnd,
|
|
418
|
-
proximity
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
if (distance === true) {
|
|
422
|
-
return true;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
return false;
|
|
367
|
+
return pointCanProjectOnLine(canvasCoords, pStart, pEnd, proximity);
|
|
426
368
|
};
|
|
427
369
|
|
|
428
370
|
cancel = (element: HTMLDivElement): void => {
|
|
@@ -534,7 +476,7 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
534
476
|
|
|
535
477
|
return annotationViewPlaneNormal && isParallel;
|
|
536
478
|
}
|
|
537
|
-
);
|
|
479
|
+
) as PlanarFreehandROIAnnotation[];
|
|
538
480
|
|
|
539
481
|
// No in plane annotations.
|
|
540
482
|
if (!annotationsWithParallelNormals.length) {
|
|
@@ -551,7 +493,7 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
551
493
|
|
|
552
494
|
for (const annotation of annotationsWithParallelNormals) {
|
|
553
495
|
const data = annotation.data;
|
|
554
|
-
const point = data.polyline[0];
|
|
496
|
+
const point = data.contour.polyline[0];
|
|
555
497
|
|
|
556
498
|
if (!annotation.isVisible) {
|
|
557
499
|
continue;
|
|
@@ -578,39 +520,46 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
578
520
|
return annotationsWithinSlice;
|
|
579
521
|
}
|
|
580
522
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
*/
|
|
587
|
-
renderAnnotation = (
|
|
588
|
-
enabledElement: Types.IEnabledElement,
|
|
589
|
-
svgDrawingHelper: SVGDrawingHelper
|
|
590
|
-
): boolean => {
|
|
591
|
-
let renderStatus = false;
|
|
592
|
-
const { viewport, renderingEngine } = enabledElement;
|
|
593
|
-
const { element } = viewport;
|
|
523
|
+
protected isContourSegmentationTool(): boolean {
|
|
524
|
+
// Disable contour segmenatation behavior because it shall be activated only
|
|
525
|
+
// for PlanarFreehandContourSegmentationTool
|
|
526
|
+
return false;
|
|
527
|
+
}
|
|
594
528
|
|
|
595
|
-
|
|
529
|
+
protected createAnnotation(evt: EventTypes.InteractionEventType): Annotation {
|
|
530
|
+
const worldPos = evt.detail.currentPoints.world;
|
|
531
|
+
const contourAnnotation = super.createAnnotation(evt);
|
|
596
532
|
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
533
|
+
return <PlanarFreehandROIAnnotation>csUtils.deepMerge(contourAnnotation, {
|
|
534
|
+
data: {
|
|
535
|
+
contour: {
|
|
536
|
+
polyline: [<Types.Point3>[...worldPos]],
|
|
537
|
+
},
|
|
538
|
+
label: '',
|
|
539
|
+
cachedStats: {},
|
|
540
|
+
},
|
|
541
|
+
});
|
|
542
|
+
}
|
|
600
543
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
544
|
+
protected getAnnotationStyle(context) {
|
|
545
|
+
// This method exists only because `super` cannot be called from
|
|
546
|
+
// _getRenderingOptions() which is in an external file.
|
|
547
|
+
return super.getAnnotationStyle(context);
|
|
548
|
+
}
|
|
605
549
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
550
|
+
protected renderAnnotationInstance(renderContext: {
|
|
551
|
+
enabledElement: Types.IEnabledElement;
|
|
552
|
+
targetId: string;
|
|
553
|
+
annotation: Annotation;
|
|
554
|
+
annotationStyle: Record<string, any>;
|
|
555
|
+
svgDrawingHelper: SVGDrawingHelper;
|
|
556
|
+
}): boolean {
|
|
557
|
+
const { enabledElement, targetId, svgDrawingHelper, annotationStyle } =
|
|
558
|
+
renderContext;
|
|
559
|
+
const annotation = renderContext.annotation as PlanarFreehandROIAnnotation;
|
|
610
560
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
}
|
|
561
|
+
let renderStatus = false;
|
|
562
|
+
const { viewport, renderingEngine } = enabledElement;
|
|
614
563
|
|
|
615
564
|
const isDrawing = this.isDrawing;
|
|
616
565
|
const isEditingOpen = this.isEditingOpen;
|
|
@@ -619,44 +568,40 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
619
568
|
if (!(isDrawing || isEditingOpen || isEditingClosed)) {
|
|
620
569
|
// No annotations are currently being modified, so we can just use the
|
|
621
570
|
// render contour method to render all of them
|
|
622
|
-
|
|
623
|
-
this.renderContour(enabledElement, svgDrawingHelper, annotation);
|
|
624
|
-
});
|
|
571
|
+
this.renderContour(enabledElement, svgDrawingHelper, annotation);
|
|
625
572
|
} else {
|
|
626
|
-
//
|
|
573
|
+
// The active annotation will need special rendering treatment. Render all
|
|
627
574
|
// other annotations not being interacted with using the standard renderContour
|
|
628
575
|
// rendering path.
|
|
629
576
|
const activeAnnotationUID = this.commonData.annotation.annotationUID;
|
|
630
577
|
|
|
631
|
-
|
|
632
|
-
if (
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
);
|
|
651
|
-
} else {
|
|
652
|
-
throw new Error(
|
|
653
|
-
`Unknown ${this.getToolName()} annotation rendering state`
|
|
654
|
-
);
|
|
655
|
-
}
|
|
578
|
+
if (annotation.annotationUID === activeAnnotationUID) {
|
|
579
|
+
if (isDrawing) {
|
|
580
|
+
this.renderContourBeingDrawn(
|
|
581
|
+
enabledElement,
|
|
582
|
+
svgDrawingHelper,
|
|
583
|
+
annotation
|
|
584
|
+
);
|
|
585
|
+
} else if (isEditingClosed) {
|
|
586
|
+
this.renderClosedContourBeingEdited(
|
|
587
|
+
enabledElement,
|
|
588
|
+
svgDrawingHelper,
|
|
589
|
+
annotation
|
|
590
|
+
);
|
|
591
|
+
} else if (isEditingOpen) {
|
|
592
|
+
this.renderOpenContourBeingEdited(
|
|
593
|
+
enabledElement,
|
|
594
|
+
svgDrawingHelper,
|
|
595
|
+
annotation
|
|
596
|
+
);
|
|
656
597
|
} else {
|
|
657
|
-
|
|
598
|
+
throw new Error(
|
|
599
|
+
`Unknown ${this.getToolName()} annotation rendering state`
|
|
600
|
+
);
|
|
658
601
|
}
|
|
659
|
-
}
|
|
602
|
+
} else {
|
|
603
|
+
this.renderContour(enabledElement, svgDrawingHelper, annotation);
|
|
604
|
+
}
|
|
660
605
|
|
|
661
606
|
// Todo: return boolean flag for each rendering route in the planar tool.
|
|
662
607
|
renderStatus = true;
|
|
@@ -666,60 +611,76 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
666
611
|
return;
|
|
667
612
|
}
|
|
668
613
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
if (!this.commonData?.movingTextBox) {
|
|
679
|
-
const { data } = annotation;
|
|
680
|
-
if (
|
|
681
|
-
!data.cachedStats[targetId] ||
|
|
682
|
-
data.cachedStats[targetId].areaUnit == null
|
|
683
|
-
) {
|
|
684
|
-
data.cachedStats[targetId] = {
|
|
685
|
-
Modality: null,
|
|
686
|
-
area: null,
|
|
687
|
-
max: null,
|
|
688
|
-
mean: null,
|
|
689
|
-
stdDev: null,
|
|
690
|
-
areaUnit: null,
|
|
691
|
-
};
|
|
692
|
-
|
|
693
|
-
this._calculateCachedStats(
|
|
694
|
-
annotation,
|
|
695
|
-
viewport,
|
|
696
|
-
renderingEngine,
|
|
697
|
-
enabledElement
|
|
698
|
-
);
|
|
699
|
-
} else if (annotation.invalidated) {
|
|
700
|
-
this._throttledCalculateCachedStats(
|
|
701
|
-
annotation,
|
|
702
|
-
viewport,
|
|
703
|
-
renderingEngine,
|
|
704
|
-
enabledElement
|
|
705
|
-
);
|
|
706
|
-
}
|
|
707
|
-
}
|
|
614
|
+
this._calculateStatsIfActive(
|
|
615
|
+
annotation,
|
|
616
|
+
targetId,
|
|
617
|
+
viewport,
|
|
618
|
+
renderingEngine,
|
|
619
|
+
enabledElement
|
|
620
|
+
);
|
|
708
621
|
|
|
709
|
-
|
|
710
|
-
});
|
|
622
|
+
this._renderStats(annotation, viewport, enabledElement, svgDrawingHelper);
|
|
711
623
|
|
|
712
624
|
return renderStatus;
|
|
713
|
-
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
_calculateStatsIfActive(
|
|
628
|
+
annotation: PlanarFreehandROIAnnotation,
|
|
629
|
+
targetId: string,
|
|
630
|
+
viewport,
|
|
631
|
+
renderingEngine,
|
|
632
|
+
enabledElement
|
|
633
|
+
) {
|
|
634
|
+
const activeAnnotationUID = this.commonData?.annotation.annotationUID;
|
|
635
|
+
|
|
636
|
+
if (
|
|
637
|
+
annotation.annotationUID === activeAnnotationUID &&
|
|
638
|
+
!this.commonData?.movingTextBox
|
|
639
|
+
) {
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
714
642
|
|
|
715
|
-
|
|
643
|
+
if (!this.commonData?.movingTextBox) {
|
|
644
|
+
const { data } = annotation;
|
|
645
|
+
if (
|
|
646
|
+
!data.cachedStats[targetId] ||
|
|
647
|
+
data.cachedStats[targetId].areaUnit == null
|
|
648
|
+
) {
|
|
649
|
+
data.cachedStats[targetId] = {
|
|
650
|
+
Modality: null,
|
|
651
|
+
area: null,
|
|
652
|
+
max: null,
|
|
653
|
+
mean: null,
|
|
654
|
+
stdDev: null,
|
|
655
|
+
areaUnit: null,
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
this._calculateCachedStats(
|
|
659
|
+
annotation,
|
|
660
|
+
viewport,
|
|
661
|
+
renderingEngine,
|
|
662
|
+
enabledElement
|
|
663
|
+
);
|
|
664
|
+
} else if (annotation.invalidated) {
|
|
665
|
+
this._throttledCalculateCachedStats(
|
|
666
|
+
annotation,
|
|
667
|
+
viewport,
|
|
668
|
+
renderingEngine,
|
|
669
|
+
enabledElement
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
private _calculateCachedStats = (
|
|
716
676
|
annotation,
|
|
717
677
|
viewport,
|
|
718
678
|
renderingEngine,
|
|
719
679
|
enabledElement
|
|
720
680
|
) => {
|
|
721
|
-
const data = annotation
|
|
722
|
-
const { cachedStats
|
|
681
|
+
const { data } = annotation;
|
|
682
|
+
const { cachedStats } = data;
|
|
683
|
+
const { polyline: points } = data.contour;
|
|
723
684
|
|
|
724
685
|
const targetIds = Object.keys(cachedStats);
|
|
725
686
|
|
|
@@ -890,8 +851,13 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
890
851
|
return cachedStats;
|
|
891
852
|
};
|
|
892
853
|
|
|
893
|
-
_renderStats = (
|
|
894
|
-
|
|
854
|
+
private _renderStats = (
|
|
855
|
+
annotation,
|
|
856
|
+
viewport,
|
|
857
|
+
enabledElement,
|
|
858
|
+
svgDrawingHelper
|
|
859
|
+
) => {
|
|
860
|
+
const { data } = <PlanarFreehandROIAnnotation>annotation;
|
|
895
861
|
const targetId = this.getTargetId(viewport);
|
|
896
862
|
|
|
897
863
|
const styleSpecifier: AnnotationStyle.StyleSpecifier = {
|
|
@@ -910,7 +876,7 @@ class PlanarFreehandROITool extends AnnotationTool {
|
|
|
910
876
|
return;
|
|
911
877
|
}
|
|
912
878
|
|
|
913
|
-
const canvasCoordinates = data.polyline.map((p) =>
|
|
879
|
+
const canvasCoordinates = data.contour.polyline.map((p) =>
|
|
914
880
|
viewport.worldToCanvas(p)
|
|
915
881
|
);
|
|
916
882
|
if (!data.handles.textBox.hasMoved) {
|
|
@@ -441,7 +441,7 @@ class ProbeTool extends AnnotationTool {
|
|
|
441
441
|
|
|
442
442
|
styleSpecifier.annotationUID = annotationUID;
|
|
443
443
|
|
|
444
|
-
const color = this.
|
|
444
|
+
const { color } = this.getAnnotationStyle({ annotation, styleSpecifier });
|
|
445
445
|
|
|
446
446
|
if (
|
|
447
447
|
!data.cachedStats[targetId] ||
|
|
@@ -652,9 +652,10 @@ class RectangleROITool extends AnnotationTool {
|
|
|
652
652
|
|
|
653
653
|
styleSpecifier.annotationUID = annotationUID;
|
|
654
654
|
|
|
655
|
-
const lineWidth = this.
|
|
656
|
-
|
|
657
|
-
|
|
655
|
+
const { color, lineWidth, lineDash } = this.getAnnotationStyle({
|
|
656
|
+
annotation,
|
|
657
|
+
styleSpecifier,
|
|
658
|
+
});
|
|
658
659
|
|
|
659
660
|
const { viewPlaneNormal, viewUp } = viewport.getCamera();
|
|
660
661
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { utilities } from '@cornerstonejs/core';
|
|
2
|
+
import { PublicToolProps } from '../../types';
|
|
3
|
+
import SplineROITool from './SplineROITool';
|
|
4
|
+
|
|
5
|
+
class SplineContourSegmentationTool extends SplineROITool {
|
|
6
|
+
static toolName;
|
|
7
|
+
|
|
8
|
+
constructor(toolProps: PublicToolProps) {
|
|
9
|
+
const initialProps = utilities.deepMerge(
|
|
10
|
+
{
|
|
11
|
+
configuration: {
|
|
12
|
+
calculateStats: false,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
toolProps
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
super(initialProps);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
protected isContourSegmentationTool(): boolean {
|
|
22
|
+
// Re-enable contour segmentation behavior disabled by SplineROITool
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
|
|
28
|
+
export default SplineContourSegmentationTool;
|