@cornerstonejs/tools 1.43.7 → 1.44.1
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/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/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/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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const core_1 = require("@cornerstonejs/core");
|
|
7
|
+
const SplineROITool_1 = __importDefault(require("./SplineROITool"));
|
|
8
|
+
class SplineContourSegmentationTool extends SplineROITool_1.default {
|
|
9
|
+
constructor(toolProps) {
|
|
10
|
+
const initialProps = core_1.utilities.deepMerge({
|
|
11
|
+
configuration: {
|
|
12
|
+
calculateStats: false,
|
|
13
|
+
},
|
|
14
|
+
}, toolProps);
|
|
15
|
+
super(initialProps);
|
|
16
|
+
}
|
|
17
|
+
isContourSegmentationTool() {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
SplineContourSegmentationTool.toolName = 'SplineContourSegmentationTool';
|
|
22
|
+
exports.default = SplineContourSegmentationTool;
|
|
23
|
+
//# sourceMappingURL=SplineContourSegmentationTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplineContourSegmentationTool.js","sourceRoot":"","sources":["../../../../src/tools/annotation/SplineContourSegmentationTool.ts"],"names":[],"mappings":";;;;;AAAA,8CAAgD;AAEhD,oEAA4C;AAE5C,MAAM,6BAA8B,SAAQ,uBAAa;IAGvD,YAAY,SAA0B;QACpC,MAAM,YAAY,GAAG,gBAAS,CAAC,SAAS,CACtC;YACE,aAAa,EAAE;gBACb,cAAc,EAAE,KAAK;aACtB;SACF,EACD,SAAS,CACV,CAAC;QAEF,KAAK,CAAC,YAAY,CAAC,CAAC;IACtB,CAAC;IAES,yBAAyB;QAEjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,6BAA6B,CAAC,QAAQ,GAAG,+BAA+B,CAAC;AACzE,kBAAe,6BAA6B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AnnotationTool } from '../base';
|
|
2
1
|
import type { Types } from '@cornerstonejs/core';
|
|
3
|
-
import { EventTypes, ToolHandle, PublicToolProps, ToolProps, SVGDrawingHelper } from '../../types';
|
|
2
|
+
import { Annotation, EventTypes, ToolHandle, PublicToolProps, ToolProps, SVGDrawingHelper } from '../../types';
|
|
4
3
|
import { SplineROIAnnotation } from '../../types/ToolSpecificAnnotationTypes';
|
|
4
|
+
import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool';
|
|
5
5
|
declare enum SplineTypesEnum {
|
|
6
6
|
Cardinal = "CARDINAL",
|
|
7
7
|
Linear = "LINEAR",
|
|
@@ -12,7 +12,7 @@ declare enum SplineToolActions {
|
|
|
12
12
|
AddControlPoint = "addControlPoint",
|
|
13
13
|
DeleteControlPoint = "deleteControlPoint"
|
|
14
14
|
}
|
|
15
|
-
declare class SplineROITool extends
|
|
15
|
+
declare class SplineROITool extends ContourSegmentationBaseTool {
|
|
16
16
|
static toolName: any;
|
|
17
17
|
static SplineTypes: typeof SplineTypesEnum;
|
|
18
18
|
static Actions: typeof SplineToolActions;
|
|
@@ -31,7 +31,7 @@ declare class SplineROITool extends AnnotationTool {
|
|
|
31
31
|
isDrawing: boolean;
|
|
32
32
|
isHandleOutsideImage: boolean;
|
|
33
33
|
constructor(toolProps?: PublicToolProps, defaultToolProps?: ToolProps);
|
|
34
|
-
addNewAnnotation
|
|
34
|
+
addNewAnnotation(evt: EventTypes.InteractionEventType): SplineROIAnnotation;
|
|
35
35
|
isPointNearTool: (element: HTMLDivElement, annotation: SplineROIAnnotation, canvasCoords: Types.Point2, proximity: number) => boolean;
|
|
36
36
|
toolSelectedCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
|
|
37
37
|
handleSelectedCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation, handle: ToolHandle) => void;
|
|
@@ -40,19 +40,26 @@ declare class SplineROITool extends AnnotationTool {
|
|
|
40
40
|
private _mouseMoveCallback;
|
|
41
41
|
private _mouseDownCallback;
|
|
42
42
|
private _dragCallback;
|
|
43
|
-
cancel
|
|
43
|
+
cancel(element: HTMLDivElement): string;
|
|
44
44
|
triggerAnnotationModified: (annotation: SplineROIAnnotation, enabledElement: Types.IEnabledElement) => void;
|
|
45
45
|
private _activateModify;
|
|
46
46
|
private _deactivateModify;
|
|
47
47
|
private _activateDraw;
|
|
48
48
|
private _deactivateDraw;
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
protected isContourSegmentationTool(): boolean;
|
|
50
|
+
protected renderAnnotationInstance(renderContext: {
|
|
51
|
+
enabledElement: Types.IEnabledElement;
|
|
52
|
+
targetId: string;
|
|
53
|
+
annotation: Annotation;
|
|
54
|
+
annotationStyle: Record<string, any>;
|
|
55
|
+
svgDrawingHelper: SVGDrawingHelper;
|
|
56
|
+
}): boolean;
|
|
57
|
+
protected createAnnotation(evt: EventTypes.InteractionEventType): Annotation;
|
|
58
|
+
private _renderStats;
|
|
51
59
|
addControlPointCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
|
|
52
60
|
private _deleteControlPointByIndex;
|
|
53
61
|
deleteControlPointCallback: (evt: EventTypes.InteractionEventType, annotation: SplineROIAnnotation) => void;
|
|
54
62
|
private _getSplineConfig;
|
|
55
|
-
private _updateSplineScale;
|
|
56
63
|
private _updateSplineInstance;
|
|
57
64
|
private _calculateCachedStats;
|
|
58
65
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const base_1 = require("../base");
|
|
4
6
|
const core_1 = require("@cornerstonejs/core");
|
|
7
|
+
const core_2 = require("@cornerstonejs/core");
|
|
5
8
|
const gl_matrix_1 = require("gl-matrix");
|
|
6
9
|
const annotationState_1 = require("../../stateManagement/annotation/annotationState");
|
|
7
|
-
const annotationLocking_1 = require("../../stateManagement/annotation/annotationLocking");
|
|
8
|
-
const annotationVisibility_1 = require("../../stateManagement/annotation/annotationVisibility");
|
|
9
10
|
const drawingSvg_1 = require("../../drawingSvg");
|
|
10
11
|
const store_1 = require("../../store");
|
|
11
12
|
const enums_1 = require("../../enums");
|
|
@@ -17,6 +18,7 @@ const CardinalSpline_1 = require("./splines/CardinalSpline");
|
|
|
17
18
|
const LinearSpline_1 = require("./splines/LinearSpline");
|
|
18
19
|
const CatmullRomSpline_1 = require("./splines/CatmullRomSpline");
|
|
19
20
|
const BSpline_1 = require("./splines/BSpline");
|
|
21
|
+
const ContourSegmentationBaseTool_1 = __importDefault(require("../base/ContourSegmentationBaseTool"));
|
|
20
22
|
const SPLINE_MIN_POINTS = 3;
|
|
21
23
|
const SPLINE_CLICK_CLOSE_CURVE_DIST = 10;
|
|
22
24
|
const DEFAULT_SPLINE_CONFIG = {
|
|
@@ -39,7 +41,7 @@ var SplineToolActions;
|
|
|
39
41
|
SplineToolActions["AddControlPoint"] = "addControlPoint";
|
|
40
42
|
SplineToolActions["DeleteControlPoint"] = "deleteControlPoint";
|
|
41
43
|
})(SplineToolActions || (SplineToolActions = {}));
|
|
42
|
-
class SplineROITool extends
|
|
44
|
+
class SplineROITool extends ContourSegmentationBaseTool_1.default {
|
|
43
45
|
constructor(toolProps = {}, defaultToolProps = {
|
|
44
46
|
supportedInteractionTypes: ['Mouse', 'Touch'],
|
|
45
47
|
configuration: {
|
|
@@ -93,70 +95,6 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
93
95
|
}) {
|
|
94
96
|
super(toolProps, defaultToolProps);
|
|
95
97
|
this.isHandleOutsideImage = false;
|
|
96
|
-
this.addNewAnnotation = (evt) => {
|
|
97
|
-
const eventDetail = evt.detail;
|
|
98
|
-
const { currentPoints, element } = eventDetail;
|
|
99
|
-
const { world: worldPos, canvas: canvasPos } = currentPoints;
|
|
100
|
-
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
101
|
-
const { viewport, renderingEngine } = enabledElement;
|
|
102
|
-
this.isDrawing = true;
|
|
103
|
-
const camera = viewport.getCamera();
|
|
104
|
-
const { viewPlaneNormal, viewUp } = camera;
|
|
105
|
-
const { type: splineType } = this.configuration.spline;
|
|
106
|
-
const splineConfig = this._getSplineConfig(splineType);
|
|
107
|
-
const spline = new splineConfig.Class();
|
|
108
|
-
const referencedImageId = this.getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp);
|
|
109
|
-
const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
|
|
110
|
-
const annotation = {
|
|
111
|
-
highlighted: true,
|
|
112
|
-
invalidated: true,
|
|
113
|
-
metadata: {
|
|
114
|
-
toolName: this.getToolName(),
|
|
115
|
-
viewPlaneNormal: [...viewPlaneNormal],
|
|
116
|
-
viewUp: [...viewUp],
|
|
117
|
-
FrameOfReferenceUID,
|
|
118
|
-
referencedImageId,
|
|
119
|
-
},
|
|
120
|
-
data: {
|
|
121
|
-
handles: {
|
|
122
|
-
textBox: {
|
|
123
|
-
hasMoved: false,
|
|
124
|
-
worldPosition: [0, 0, 0],
|
|
125
|
-
worldBoundingBox: {
|
|
126
|
-
topLeft: [0, 0, 0],
|
|
127
|
-
topRight: [0, 0, 0],
|
|
128
|
-
bottomLeft: [0, 0, 0],
|
|
129
|
-
bottomRight: [0, 0, 0],
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
points: [[...worldPos]],
|
|
133
|
-
activeHandleIndex: null,
|
|
134
|
-
},
|
|
135
|
-
spline: {
|
|
136
|
-
type: splineConfig.type,
|
|
137
|
-
instance: spline,
|
|
138
|
-
resolution: splineConfig.resolution,
|
|
139
|
-
closed: false,
|
|
140
|
-
polyline: [],
|
|
141
|
-
},
|
|
142
|
-
cachedStats: {},
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
(0, annotationState_1.addAnnotation)(annotation, element);
|
|
146
|
-
const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
|
|
147
|
-
this.editData = {
|
|
148
|
-
annotation,
|
|
149
|
-
viewportIdsToRender,
|
|
150
|
-
movingTextBox: false,
|
|
151
|
-
newAnnotation: true,
|
|
152
|
-
hasMoved: false,
|
|
153
|
-
lastCanvasPoint: canvasPos,
|
|
154
|
-
};
|
|
155
|
-
this._activateDraw(element);
|
|
156
|
-
evt.preventDefault();
|
|
157
|
-
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
158
|
-
return annotation;
|
|
159
|
-
};
|
|
160
98
|
this.isPointNearTool = (element, annotation, canvasCoords, proximity) => {
|
|
161
99
|
const { instance: spline } = annotation.data.spline;
|
|
162
100
|
return spline.isPointNearCurve(canvasCoords, proximity);
|
|
@@ -171,7 +109,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
171
109
|
viewportIdsToRender,
|
|
172
110
|
movingTextBox: false,
|
|
173
111
|
};
|
|
174
|
-
const enabledElement = (0,
|
|
112
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
175
113
|
const { renderingEngine } = enabledElement;
|
|
176
114
|
this._activateModify(element);
|
|
177
115
|
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
@@ -199,7 +137,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
199
137
|
movingTextBox,
|
|
200
138
|
};
|
|
201
139
|
this._activateModify(element);
|
|
202
|
-
const enabledElement = (0,
|
|
140
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
203
141
|
const { renderingEngine } = enabledElement;
|
|
204
142
|
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
205
143
|
evt.preventDefault();
|
|
@@ -213,7 +151,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
213
151
|
this._deactivateModify(element);
|
|
214
152
|
this._deactivateDraw(element);
|
|
215
153
|
(0, elementCursor_1.resetElementCursor)(element);
|
|
216
|
-
const enabledElement = (0,
|
|
154
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
217
155
|
const { renderingEngine } = enabledElement;
|
|
218
156
|
if (this.isHandleOutsideImage &&
|
|
219
157
|
this.configuration.preventHandleOutsideImage) {
|
|
@@ -225,7 +163,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
225
163
|
const eventDetail = {
|
|
226
164
|
annotation,
|
|
227
165
|
};
|
|
228
|
-
(0,
|
|
166
|
+
(0, core_2.triggerEvent)(core_2.eventTarget, eventType, eventDetail);
|
|
229
167
|
}
|
|
230
168
|
this.editData = null;
|
|
231
169
|
this.isDrawing = false;
|
|
@@ -258,7 +196,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
258
196
|
return;
|
|
259
197
|
}
|
|
260
198
|
const { element } = evt.detail;
|
|
261
|
-
const { renderingEngine } = (0,
|
|
199
|
+
const { renderingEngine } = (0, core_2.getEnabledElement)(element);
|
|
262
200
|
const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
|
|
263
201
|
this.editData.lastCanvasPoint = evt.detail.currentPoints.canvas;
|
|
264
202
|
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
@@ -268,32 +206,32 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
268
206
|
const doubleClick = evt.type === enums_1.Events.MOUSE_DOUBLE_CLICK;
|
|
269
207
|
const { annotation, viewportIdsToRender } = this.editData;
|
|
270
208
|
const { data } = annotation;
|
|
271
|
-
if (data.
|
|
209
|
+
if (data.contour.closed) {
|
|
272
210
|
return;
|
|
273
211
|
}
|
|
274
212
|
const eventDetail = evt.detail;
|
|
275
213
|
const { element } = eventDetail;
|
|
276
214
|
const { currentPoints } = eventDetail;
|
|
277
215
|
const { canvas: canvasPoint, world: worldPoint } = currentPoints;
|
|
278
|
-
const enabledElement = (0,
|
|
216
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
279
217
|
const { renderingEngine } = enabledElement;
|
|
280
|
-
let
|
|
218
|
+
let closeContour = data.handles.points.length >= 2 && doubleClick;
|
|
281
219
|
let addNewPoint = true;
|
|
282
220
|
if (data.handles.points.length >= 3) {
|
|
283
221
|
const { instance: spline } = data.spline;
|
|
284
222
|
const closestControlPoint = spline.getClosestControlPointWithinDistance(canvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
|
|
285
223
|
if ((closestControlPoint === null || closestControlPoint === void 0 ? void 0 : closestControlPoint.index) === 0) {
|
|
286
224
|
addNewPoint = false;
|
|
287
|
-
|
|
225
|
+
closeContour = true;
|
|
288
226
|
}
|
|
289
227
|
}
|
|
290
228
|
if (addNewPoint) {
|
|
291
229
|
data.handles.points.push(worldPoint);
|
|
292
230
|
}
|
|
293
|
-
data.
|
|
231
|
+
data.contour.closed = data.contour.closed || closeContour;
|
|
294
232
|
annotation.invalidated = true;
|
|
295
233
|
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
296
|
-
if (data.
|
|
234
|
+
if (data.contour.closed) {
|
|
297
235
|
this._endCallback(evt);
|
|
298
236
|
}
|
|
299
237
|
evt.preventDefault();
|
|
@@ -332,27 +270,9 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
332
270
|
annotation.invalidated = true;
|
|
333
271
|
}
|
|
334
272
|
this.editData.hasMoved = true;
|
|
335
|
-
const enabledElement = (0,
|
|
336
|
-
const { renderingEngine } = enabledElement;
|
|
337
|
-
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
338
|
-
};
|
|
339
|
-
this.cancel = (element) => {
|
|
340
|
-
if (!this.isDrawing) {
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
this.isDrawing = false;
|
|
344
|
-
this._deactivateDraw(element);
|
|
345
|
-
this._deactivateModify(element);
|
|
346
|
-
(0, elementCursor_1.resetElementCursor)(element);
|
|
347
|
-
const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
|
|
348
|
-
if (newAnnotation) {
|
|
349
|
-
(0, annotationState_1.removeAnnotation)(annotation.annotationUID);
|
|
350
|
-
}
|
|
351
|
-
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
273
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
352
274
|
const { renderingEngine } = enabledElement;
|
|
353
275
|
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
354
|
-
this.editData = null;
|
|
355
|
-
return annotation.annotationUID;
|
|
356
276
|
};
|
|
357
277
|
this.triggerAnnotationModified = (annotation, enabledElement) => {
|
|
358
278
|
const { viewportId, renderingEngineId } = enabledElement;
|
|
@@ -362,7 +282,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
362
282
|
viewportId,
|
|
363
283
|
renderingEngineId,
|
|
364
284
|
};
|
|
365
|
-
(0,
|
|
285
|
+
(0, core_2.triggerEvent)(core_2.eventTarget, eventType, eventDetail);
|
|
366
286
|
};
|
|
367
287
|
this._activateModify = (element) => {
|
|
368
288
|
store_1.state.isInteractingWithTool = true;
|
|
@@ -398,129 +318,11 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
398
318
|
element.removeEventListener(enums_1.Events.MOUSE_DOUBLE_CLICK, this._mouseDownCallback);
|
|
399
319
|
element.removeEventListener(enums_1.Events.TOUCH_TAP, this._mouseDownCallback);
|
|
400
320
|
};
|
|
401
|
-
this.
|
|
402
|
-
var _a, _b;
|
|
403
|
-
let renderStatus = false;
|
|
404
|
-
const { viewport } = enabledElement;
|
|
405
|
-
const { worldToCanvas } = viewport;
|
|
406
|
-
const { element } = viewport;
|
|
407
|
-
if (!viewport.getRenderingEngine()) {
|
|
408
|
-
console.warn('Rendering Engine has been destroyed');
|
|
409
|
-
return renderStatus;
|
|
410
|
-
}
|
|
411
|
-
let annotations = (0, annotationState_1.getAnnotations)(this.getToolName(), element);
|
|
412
|
-
if (!(annotations === null || annotations === void 0 ? void 0 : annotations.length)) {
|
|
413
|
-
return renderStatus;
|
|
414
|
-
}
|
|
415
|
-
annotations = this.filterInteractableAnnotationsForElement(element, annotations);
|
|
416
|
-
if (!(annotations === null || annotations === void 0 ? void 0 : annotations.length)) {
|
|
417
|
-
return renderStatus;
|
|
418
|
-
}
|
|
419
|
-
const targetId = this.getTargetId(viewport);
|
|
420
|
-
const newAnnotation = (_a = this.editData) === null || _a === void 0 ? void 0 : _a.newAnnotation;
|
|
421
|
-
const styleSpecifier = {
|
|
422
|
-
toolGroupId: this.toolGroupId,
|
|
423
|
-
toolName: this.getToolName(),
|
|
424
|
-
viewportId: enabledElement.viewport.id,
|
|
425
|
-
};
|
|
426
|
-
for (let i = 0; i < annotations.length; i++) {
|
|
427
|
-
const annotation = annotations[i];
|
|
428
|
-
const { annotationUID, data, highlighted } = annotation;
|
|
429
|
-
const { handles } = data;
|
|
430
|
-
const { points: controlPoints, activeHandleIndex } = handles;
|
|
431
|
-
styleSpecifier.annotationUID = annotationUID;
|
|
432
|
-
const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
|
|
433
|
-
const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
|
|
434
|
-
const color = this.getStyle('color', styleSpecifier, annotation);
|
|
435
|
-
const canvasCoordinates = controlPoints.map((p) => worldToCanvas(p));
|
|
436
|
-
const { drawPreviewEnabled } = this.configuration.spline;
|
|
437
|
-
const splineType = annotation.data.spline.type;
|
|
438
|
-
const splineConfig = this._getSplineConfig(splineType);
|
|
439
|
-
const spline = this._updateSplineInstance(element, annotation);
|
|
440
|
-
const splinePolylineCanvas = spline.getPolylinePoints();
|
|
441
|
-
const splinePolylineWorld = [];
|
|
442
|
-
for (let i = 0, len = splinePolylineCanvas.length; i < len; i++) {
|
|
443
|
-
splinePolylineWorld.push(viewport.canvasToWorld(splinePolylineCanvas[i]));
|
|
444
|
-
}
|
|
445
|
-
data.spline.polyline = splinePolylineWorld;
|
|
446
|
-
if (!data.cachedStats[targetId] ||
|
|
447
|
-
data.cachedStats[targetId].areaUnit == null) {
|
|
448
|
-
data.cachedStats[targetId] = {
|
|
449
|
-
Modality: null,
|
|
450
|
-
area: null,
|
|
451
|
-
areaUnit: null,
|
|
452
|
-
};
|
|
453
|
-
this._calculateCachedStats(annotation, element);
|
|
454
|
-
}
|
|
455
|
-
else if (annotation.invalidated) {
|
|
456
|
-
this._throttledCalculateCachedStats(annotation, element);
|
|
457
|
-
}
|
|
458
|
-
let activeHandleCanvasCoords;
|
|
459
|
-
if (!(0, annotationVisibility_1.isAnnotationVisible)(annotationUID)) {
|
|
460
|
-
continue;
|
|
461
|
-
}
|
|
462
|
-
if (!(0, annotationLocking_1.isAnnotationLocked)(annotation) &&
|
|
463
|
-
!this.editData &&
|
|
464
|
-
activeHandleIndex !== null) {
|
|
465
|
-
activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
|
|
466
|
-
}
|
|
467
|
-
if (activeHandleCanvasCoords || newAnnotation || highlighted) {
|
|
468
|
-
const handleGroupUID = '0';
|
|
469
|
-
(0, drawingSvg_1.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
|
|
470
|
-
color,
|
|
471
|
-
lineDash,
|
|
472
|
-
lineWidth,
|
|
473
|
-
handleRadius: '3',
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
|
-
if (drawPreviewEnabled &&
|
|
477
|
-
spline.numControlPoints > 1 &&
|
|
478
|
-
((_b = this.editData) === null || _b === void 0 ? void 0 : _b.lastCanvasPoint) &&
|
|
479
|
-
!spline.closed) {
|
|
480
|
-
const { lastCanvasPoint } = this.editData;
|
|
481
|
-
const previewPolylinePoints = spline.getPreviewPolylinePoints(lastCanvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
|
|
482
|
-
(0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'previewSplineChange', previewPolylinePoints, {
|
|
483
|
-
color: '#9EA0CA',
|
|
484
|
-
lineDash,
|
|
485
|
-
lineWidth,
|
|
486
|
-
});
|
|
487
|
-
}
|
|
488
|
-
if (splineConfig.showControlPointsConnectors) {
|
|
489
|
-
const controlPointsConnectors = [...canvasCoordinates];
|
|
490
|
-
if (spline.closed) {
|
|
491
|
-
controlPointsConnectors.push(canvasCoordinates[0]);
|
|
492
|
-
}
|
|
493
|
-
(0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'controlPointsConnectors', controlPointsConnectors, {
|
|
494
|
-
color: 'rgba(255, 255, 255, 0.5)',
|
|
495
|
-
lineDash,
|
|
496
|
-
lineWidth,
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
|
-
(0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'lineSegments', splinePolylineCanvas, {
|
|
500
|
-
color,
|
|
501
|
-
lineDash,
|
|
502
|
-
lineWidth,
|
|
503
|
-
});
|
|
504
|
-
this._renderStats(annotation, viewport, enabledElement, svgDrawingHelper);
|
|
505
|
-
renderStatus = true;
|
|
506
|
-
annotation.invalidated = false;
|
|
507
|
-
}
|
|
508
|
-
return renderStatus;
|
|
509
|
-
};
|
|
510
|
-
this._renderStats = (annotation, viewport, enabledElement, svgDrawingHelper) => {
|
|
321
|
+
this._renderStats = (annotation, viewport, svgDrawingHelper, textboxStyle) => {
|
|
511
322
|
var _a;
|
|
512
323
|
const data = annotation.data;
|
|
513
324
|
const targetId = this.getTargetId(viewport);
|
|
514
|
-
if (!data.spline.closed) {
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
const styleSpecifier = {
|
|
518
|
-
toolGroupId: this.toolGroupId,
|
|
519
|
-
toolName: this.getToolName(),
|
|
520
|
-
viewportId: enabledElement.viewport.id,
|
|
521
|
-
};
|
|
522
|
-
const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation);
|
|
523
|
-
if (!options.visibility) {
|
|
325
|
+
if (!data.spline.closed || !textboxStyle.visibility) {
|
|
524
326
|
return;
|
|
525
327
|
}
|
|
526
328
|
const textLines = this.configuration.getTextLines(data, targetId);
|
|
@@ -535,7 +337,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
535
337
|
}
|
|
536
338
|
const textBoxPosition = viewport.worldToCanvas(data.handles.textBox.worldPosition);
|
|
537
339
|
const textBoxUID = 'textBox';
|
|
538
|
-
const boundingBox = (0, drawingSvg_1.drawLinkedTextBox)(svgDrawingHelper, (_a = annotation.annotationUID) !== null && _a !== void 0 ? _a : '', textBoxUID, textLines, textBoxPosition, canvasCoordinates, {},
|
|
340
|
+
const boundingBox = (0, drawingSvg_1.drawLinkedTextBox)(svgDrawingHelper, (_a = annotation.annotationUID) !== null && _a !== void 0 ? _a : '', textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, textboxStyle);
|
|
539
341
|
const { x: left, y: top, width, height } = boundingBox;
|
|
540
342
|
data.handles.textBox.worldBoundingBox = {
|
|
541
343
|
topLeft: viewport.canvasToWorld([left, top]),
|
|
@@ -554,7 +356,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
554
356
|
}
|
|
555
357
|
const eventDetail = evt.detail;
|
|
556
358
|
const { element } = eventDetail;
|
|
557
|
-
const enabledElement = (0,
|
|
359
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
558
360
|
const { renderingEngine, viewport } = enabledElement;
|
|
559
361
|
const { canvasToWorld } = viewport;
|
|
560
362
|
const { instance: spline } = data.spline;
|
|
@@ -591,13 +393,13 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
591
393
|
return;
|
|
592
394
|
}
|
|
593
395
|
const data = annotation.data;
|
|
594
|
-
if (!data.
|
|
396
|
+
if (!data.contour.closed) {
|
|
595
397
|
return;
|
|
596
398
|
}
|
|
597
|
-
const enabledElement = (0,
|
|
399
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
598
400
|
const { viewport, renderingEngine } = enabledElement;
|
|
599
401
|
const { cachedStats } = data;
|
|
600
|
-
const { polyline: points } = data.
|
|
402
|
+
const { polyline: points } = data.contour;
|
|
601
403
|
const targetIds = Object.keys(cachedStats);
|
|
602
404
|
for (let i = 0; i < targetIds.length; i++) {
|
|
603
405
|
const targetId = targetIds[i];
|
|
@@ -633,8 +435,147 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
633
435
|
};
|
|
634
436
|
this._throttledCalculateCachedStats = (0, utilities_1.throttle)(this._calculateCachedStats, 100, { trailing: true });
|
|
635
437
|
}
|
|
438
|
+
addNewAnnotation(evt) {
|
|
439
|
+
const eventDetail = evt.detail;
|
|
440
|
+
const { currentPoints, element } = eventDetail;
|
|
441
|
+
const { canvas: canvasPos } = currentPoints;
|
|
442
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
443
|
+
const { renderingEngine } = enabledElement;
|
|
444
|
+
const annotation = this.createAnnotation(evt);
|
|
445
|
+
this.isDrawing = true;
|
|
446
|
+
this.addAnnotation(annotation, element);
|
|
447
|
+
const viewportIdsToRender = (0, viewportFilters_1.getViewportIdsWithToolToRender)(element, this.getToolName());
|
|
448
|
+
this.editData = {
|
|
449
|
+
annotation,
|
|
450
|
+
viewportIdsToRender,
|
|
451
|
+
movingTextBox: false,
|
|
452
|
+
newAnnotation: true,
|
|
453
|
+
hasMoved: false,
|
|
454
|
+
lastCanvasPoint: canvasPos,
|
|
455
|
+
};
|
|
456
|
+
this._activateDraw(element);
|
|
457
|
+
evt.preventDefault();
|
|
458
|
+
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
459
|
+
return annotation;
|
|
460
|
+
}
|
|
461
|
+
cancel(element) {
|
|
462
|
+
if (!this.isDrawing) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
this.isDrawing = false;
|
|
466
|
+
this._deactivateDraw(element);
|
|
467
|
+
this._deactivateModify(element);
|
|
468
|
+
(0, elementCursor_1.resetElementCursor)(element);
|
|
469
|
+
const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
|
|
470
|
+
if (newAnnotation) {
|
|
471
|
+
(0, annotationState_1.removeAnnotation)(annotation.annotationUID);
|
|
472
|
+
}
|
|
473
|
+
super.cancelAnnotation(annotation);
|
|
474
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
475
|
+
const { renderingEngine } = enabledElement;
|
|
476
|
+
(0, utilities_1.triggerAnnotationRenderForViewportIds)(renderingEngine, viewportIdsToRender);
|
|
477
|
+
this.editData = null;
|
|
478
|
+
return annotation.annotationUID;
|
|
479
|
+
}
|
|
480
|
+
isContourSegmentationTool() {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
renderAnnotationInstance(renderContext) {
|
|
484
|
+
var _a, _b;
|
|
485
|
+
const { enabledElement, targetId, svgDrawingHelper, annotationStyle } = renderContext;
|
|
486
|
+
const { viewport } = enabledElement;
|
|
487
|
+
const { worldToCanvas } = viewport;
|
|
488
|
+
const { element } = viewport;
|
|
489
|
+
const annotation = renderContext.annotation;
|
|
490
|
+
const { annotationUID, data, highlighted } = annotation;
|
|
491
|
+
const { handles } = data;
|
|
492
|
+
const { points: controlPoints, activeHandleIndex } = handles;
|
|
493
|
+
const newAnnotation = (_a = this.editData) === null || _a === void 0 ? void 0 : _a.newAnnotation;
|
|
494
|
+
const { lineWidth, lineDash, color, locked: annotationLocked, } = annotationStyle;
|
|
495
|
+
const canvasCoordinates = controlPoints.map((p) => worldToCanvas(p));
|
|
496
|
+
const { drawPreviewEnabled } = this.configuration.spline;
|
|
497
|
+
const splineType = annotation.data.spline.type;
|
|
498
|
+
const splineConfig = this._getSplineConfig(splineType);
|
|
499
|
+
const spline = this._updateSplineInstance(element, annotation);
|
|
500
|
+
const splinePolylineCanvas = spline.getPolylinePoints();
|
|
501
|
+
const splinePolylineWorld = [];
|
|
502
|
+
for (let i = 0, len = splinePolylineCanvas.length; i < len; i++) {
|
|
503
|
+
splinePolylineWorld.push(viewport.canvasToWorld(splinePolylineCanvas[i]));
|
|
504
|
+
}
|
|
505
|
+
data.contour.polyline = splinePolylineWorld;
|
|
506
|
+
super.renderAnnotationInstance(renderContext);
|
|
507
|
+
if (!data.cachedStats[targetId] ||
|
|
508
|
+
data.cachedStats[targetId].areaUnit == null) {
|
|
509
|
+
data.cachedStats[targetId] = {
|
|
510
|
+
Modality: null,
|
|
511
|
+
area: null,
|
|
512
|
+
areaUnit: null,
|
|
513
|
+
};
|
|
514
|
+
this._calculateCachedStats(annotation, element);
|
|
515
|
+
}
|
|
516
|
+
else if (annotation.invalidated) {
|
|
517
|
+
this._throttledCalculateCachedStats(annotation, element);
|
|
518
|
+
}
|
|
519
|
+
let activeHandleCanvasCoords;
|
|
520
|
+
if (!annotationLocked && !this.editData && activeHandleIndex !== null) {
|
|
521
|
+
activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
|
|
522
|
+
}
|
|
523
|
+
if (activeHandleCanvasCoords || newAnnotation || highlighted) {
|
|
524
|
+
const handleGroupUID = '0';
|
|
525
|
+
(0, drawingSvg_1.drawHandles)(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
|
|
526
|
+
color,
|
|
527
|
+
lineWidth: Math.max(1, lineWidth),
|
|
528
|
+
handleRadius: '3',
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
if (drawPreviewEnabled &&
|
|
532
|
+
spline.numControlPoints > 1 &&
|
|
533
|
+
((_b = this.editData) === null || _b === void 0 ? void 0 : _b.lastCanvasPoint) &&
|
|
534
|
+
!spline.closed) {
|
|
535
|
+
const { lastCanvasPoint } = this.editData;
|
|
536
|
+
const previewPolylinePoints = spline.getPreviewPolylinePoints(lastCanvasPoint, SPLINE_CLICK_CLOSE_CURVE_DIST);
|
|
537
|
+
(0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'previewSplineChange', previewPolylinePoints, {
|
|
538
|
+
color: '#9EA0CA',
|
|
539
|
+
lineDash,
|
|
540
|
+
lineWidth: 1,
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
if (splineConfig.showControlPointsConnectors) {
|
|
544
|
+
const controlPointsConnectors = [...canvasCoordinates];
|
|
545
|
+
if (spline.closed) {
|
|
546
|
+
controlPointsConnectors.push(canvasCoordinates[0]);
|
|
547
|
+
}
|
|
548
|
+
(0, drawingSvg_1.drawPolyline)(svgDrawingHelper, annotationUID, 'controlPointsConnectors', controlPointsConnectors, {
|
|
549
|
+
color: 'rgba(255, 255, 255, 0.5)',
|
|
550
|
+
lineWidth: 1,
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
this._renderStats(annotation, viewport, svgDrawingHelper, annotationStyle.textbox);
|
|
554
|
+
annotation.invalidated = false;
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
557
|
+
createAnnotation(evt) {
|
|
558
|
+
const contourAnnotation = super.createAnnotation(evt);
|
|
559
|
+
const { world: worldPos } = evt.detail.currentPoints;
|
|
560
|
+
const { type: splineType } = this.configuration.spline;
|
|
561
|
+
const splineConfig = this._getSplineConfig(splineType);
|
|
562
|
+
const spline = new splineConfig.Class();
|
|
563
|
+
return core_1.utilities.deepMerge(contourAnnotation, {
|
|
564
|
+
data: {
|
|
565
|
+
handles: {
|
|
566
|
+
points: [[...worldPos]],
|
|
567
|
+
},
|
|
568
|
+
spline: {
|
|
569
|
+
type: splineConfig.type,
|
|
570
|
+
instance: spline,
|
|
571
|
+
resolution: splineConfig.resolution,
|
|
572
|
+
},
|
|
573
|
+
cachedStats: {},
|
|
574
|
+
},
|
|
575
|
+
});
|
|
576
|
+
}
|
|
636
577
|
_deleteControlPointByIndex(element, annotation, controlPointIndex) {
|
|
637
|
-
const enabledElement = (0,
|
|
578
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
638
579
|
const { points: controlPoints } = annotation.data.handles;
|
|
639
580
|
if (controlPoints.length === 3) {
|
|
640
581
|
(0, annotationState_1.removeAnnotation)(annotation.annotationUID);
|
|
@@ -652,21 +593,8 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
652
593
|
const splineConfigs = config.spline.configuration;
|
|
653
594
|
return Object.assign({ type }, DEFAULT_SPLINE_CONFIG, splineConfigs[type]);
|
|
654
595
|
}
|
|
655
|
-
_updateSplineScale(spline, annotation) {
|
|
656
|
-
const splineType = annotation.data.spline.type;
|
|
657
|
-
const splineConfig = this._getSplineConfig(splineType);
|
|
658
|
-
if (!(spline instanceof CardinalSpline_1.CardinalSpline) ||
|
|
659
|
-
spline.fixedScale ||
|
|
660
|
-
splineConfig.scale === undefined ||
|
|
661
|
-
spline.scale === splineConfig.scale) {
|
|
662
|
-
return;
|
|
663
|
-
}
|
|
664
|
-
spline.scale = splineConfig.scale;
|
|
665
|
-
annotation.invalidated = true;
|
|
666
|
-
}
|
|
667
596
|
_updateSplineInstance(element, annotation) {
|
|
668
|
-
|
|
669
|
-
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
597
|
+
const enabledElement = (0, core_2.getEnabledElement)(element);
|
|
670
598
|
const { viewport } = enabledElement;
|
|
671
599
|
const { worldToCanvas } = viewport;
|
|
672
600
|
const { data } = annotation;
|
|
@@ -675,7 +603,7 @@ class SplineROITool extends base_1.AnnotationTool {
|
|
|
675
603
|
const worldPoints = data.handles.points;
|
|
676
604
|
const canvasPoints = worldPoints.map(worldToCanvas);
|
|
677
605
|
spline.setControlPoints(canvasPoints);
|
|
678
|
-
spline.closed = !!
|
|
606
|
+
spline.closed = !!data.contour.closed;
|
|
679
607
|
if (spline.resolution !== splineConfig.resolution) {
|
|
680
608
|
spline.resolution = parseInt(splineConfig.resolution);
|
|
681
609
|
annotation.invalidated = true;
|