@cornerstonejs/tools 0.26.5 → 0.27.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/tools/base/AnnotationDisplayTool.d.ts +13 -0
- package/dist/cjs/tools/base/AnnotationDisplayTool.js +84 -0
- package/dist/cjs/tools/base/AnnotationDisplayTool.js.map +1 -0
- package/dist/cjs/tools/base/AnnotationTool.d.ts +3 -8
- package/dist/cjs/tools/base/AnnotationTool.js +2 -70
- package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
- package/dist/esm/tools/base/AnnotationDisplayTool.d.ts +13 -0
- package/dist/esm/tools/base/AnnotationDisplayTool.js +79 -0
- package/dist/esm/tools/base/AnnotationDisplayTool.js.map +1 -0
- package/dist/esm/tools/base/AnnotationTool.d.ts +3 -8
- package/dist/esm/tools/base/AnnotationTool.js +4 -72
- package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Types } from '@cornerstonejs/core';
|
|
2
|
+
import BaseTool from './BaseTool';
|
|
3
|
+
import { Annotation, Annotations, SVGDrawingHelper } from '../../types';
|
|
4
|
+
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
5
|
+
declare abstract class AnnotationDisplayTool extends BaseTool {
|
|
6
|
+
static toolName: any;
|
|
7
|
+
abstract renderAnnotation(enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper): any;
|
|
8
|
+
filterInteractableAnnotationsForElement(element: HTMLDivElement, annotations: Annotations): Annotations | undefined;
|
|
9
|
+
onImageSpacingCalibrated: (evt: Types.EventTypes.ImageSpacingCalibratedEvent) => void;
|
|
10
|
+
protected getReferencedImageId(viewport: Types.IStackViewport | Types.IVolumeViewport, worldPos: Types.Point3, viewPlaneNormal: Types.Point3, viewUp: Types.Point3): string;
|
|
11
|
+
getStyle(property: string, specifications: StyleSpecifier, annotation?: Annotation): unknown;
|
|
12
|
+
}
|
|
13
|
+
export default AnnotationDisplayTool;
|
|
@@ -0,0 +1,84 @@
|
|
|
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 gl_matrix_1 = require("gl-matrix");
|
|
8
|
+
const BaseTool_1 = __importDefault(require("./BaseTool"));
|
|
9
|
+
const annotationState_1 = require("../../stateManagement/annotation/annotationState");
|
|
10
|
+
const triggerAnnotationRender_1 = __importDefault(require("../../utilities/triggerAnnotationRender"));
|
|
11
|
+
const filterAnnotationsForDisplay_1 = __importDefault(require("../../utilities/planar/filterAnnotationsForDisplay"));
|
|
12
|
+
const helpers_1 = require("../../stateManagement/annotation/config/helpers");
|
|
13
|
+
const config_1 = require("../../stateManagement/annotation/config");
|
|
14
|
+
class AnnotationDisplayTool extends BaseTool_1.default {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.onImageSpacingCalibrated = (evt) => {
|
|
18
|
+
const { element, rowScale, columnScale, imageId, imageData: calibratedImageData, worldToIndex: noneCalibratedWorldToIndex, } = evt.detail;
|
|
19
|
+
const { viewport } = (0, core_1.getEnabledElement)(element);
|
|
20
|
+
if (viewport instanceof core_1.VolumeViewport) {
|
|
21
|
+
throw new Error('Cannot calibrate a volume viewport');
|
|
22
|
+
}
|
|
23
|
+
const calibratedIndexToWorld = calibratedImageData.getIndexToWorld();
|
|
24
|
+
const imageURI = core_1.utilities.imageIdToURI(imageId);
|
|
25
|
+
const stateManager = (0, annotationState_1.getViewportSpecificAnnotationManager)(element);
|
|
26
|
+
const framesOfReference = stateManager.getFramesOfReference();
|
|
27
|
+
framesOfReference.forEach((frameOfReference) => {
|
|
28
|
+
const frameOfReferenceSpecificAnnotations = stateManager.getFrameOfReferenceAnnotations(frameOfReference);
|
|
29
|
+
const toolSpecificAnnotations = frameOfReferenceSpecificAnnotations[this.getToolName()];
|
|
30
|
+
if (!toolSpecificAnnotations || !toolSpecificAnnotations.length) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
toolSpecificAnnotations.forEach((annotation) => {
|
|
34
|
+
const referencedImageURI = core_1.utilities.imageIdToURI(annotation.metadata.referencedImageId);
|
|
35
|
+
if (referencedImageURI === imageURI) {
|
|
36
|
+
annotation.invalidated = true;
|
|
37
|
+
annotation.data.cachedStats = {};
|
|
38
|
+
annotation.data.handles.points = annotation.data.handles.points.map((point) => {
|
|
39
|
+
const p = gl_matrix_1.vec4.fromValues(...point, 1);
|
|
40
|
+
const pCalibrated = gl_matrix_1.vec4.fromValues(0, 0, 0, 1);
|
|
41
|
+
const nonCalibratedIndexVec4 = gl_matrix_1.vec4.create();
|
|
42
|
+
gl_matrix_1.vec4.transformMat4(nonCalibratedIndexVec4, p, noneCalibratedWorldToIndex);
|
|
43
|
+
const calibratedIndex = [
|
|
44
|
+
columnScale * nonCalibratedIndexVec4[0],
|
|
45
|
+
rowScale * nonCalibratedIndexVec4[1],
|
|
46
|
+
nonCalibratedIndexVec4[2],
|
|
47
|
+
];
|
|
48
|
+
gl_matrix_1.vec4.transformMat4(pCalibrated, gl_matrix_1.vec4.fromValues(calibratedIndex[0], calibratedIndex[1], calibratedIndex[2], 1), calibratedIndexToWorld);
|
|
49
|
+
return pCalibrated.slice(0, 3);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
(0, triggerAnnotationRender_1.default)(element);
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
filterInteractableAnnotationsForElement(element, annotations) {
|
|
58
|
+
if (!annotations || !annotations.length) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
62
|
+
const { viewport } = enabledElement;
|
|
63
|
+
return (0, filterAnnotationsForDisplay_1.default)(viewport, annotations);
|
|
64
|
+
}
|
|
65
|
+
getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp) {
|
|
66
|
+
const targetId = this.getTargetId(viewport);
|
|
67
|
+
let referencedImageId;
|
|
68
|
+
if (viewport instanceof core_1.StackViewport) {
|
|
69
|
+
referencedImageId = targetId.split('imageId:')[1];
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const volumeId = targetId.split('volumeId:')[1];
|
|
73
|
+
const imageVolume = core_1.cache.getVolume(volumeId);
|
|
74
|
+
referencedImageId = core_1.utilities.getClosestImageId(imageVolume, worldPos, viewPlaneNormal, viewUp);
|
|
75
|
+
}
|
|
76
|
+
return referencedImageId;
|
|
77
|
+
}
|
|
78
|
+
getStyle(property, specifications, annotation) {
|
|
79
|
+
return (0, helpers_1.getStyleProperty)(property, specifications, (0, config_1.getState)(annotation), this.mode);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
AnnotationDisplayTool.toolName = 'AnnotationDisplayTool';
|
|
83
|
+
exports.default = AnnotationDisplayTool;
|
|
84
|
+
//# sourceMappingURL=AnnotationDisplayTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnnotationDisplayTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationDisplayTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
import
|
|
3
|
-
import { Annotation, Annotations, EventTypes, ToolHandle, InteractionTypes
|
|
2
|
+
import AnnotationDisplayTool from './AnnotationDisplayTool';
|
|
3
|
+
import { Annotation, Annotations, EventTypes, ToolHandle, InteractionTypes } from '../../types';
|
|
4
4
|
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
5
|
-
declare abstract class AnnotationTool extends
|
|
5
|
+
declare abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
6
6
|
static toolName: any;
|
|
7
7
|
abstract addNewAnnotation(evt: EventTypes.MouseDownActivateEventType, interactionType: InteractionTypes): Annotation;
|
|
8
|
-
abstract renderAnnotation(enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper): any;
|
|
9
8
|
abstract cancel(element: HTMLDivElement): any;
|
|
10
9
|
abstract handleSelectedCallback(evt: EventTypes.MouseDownEventType, annotation: Annotation, handle: ToolHandle, interactionType: InteractionTypes): void;
|
|
11
10
|
abstract toolSelectedCallback(evt: EventTypes.MouseDownEventType, annotation: Annotation, interactionType: InteractionTypes): void;
|
|
12
11
|
abstract isPointNearTool(element: HTMLDivElement, annotation: Annotation, canvasCoords: Types.Point2, proximity: number, interactionType: string): boolean;
|
|
13
|
-
filterInteractableAnnotationsForElement(element: HTMLDivElement, annotations: Annotations): Annotations | undefined;
|
|
14
12
|
mouseMoveCallback: (evt: EventTypes.MouseMoveEventType, filteredAnnotations?: Annotations) => boolean;
|
|
15
|
-
onImageSpacingCalibrated: (evt: Types.EventTypes.ImageSpacingCalibratedEvent) => void;
|
|
16
13
|
getHandleNearImagePoint(element: HTMLDivElement, annotation: Annotation, canvasCoords: Types.Point2, proximity: number): ToolHandle | undefined;
|
|
17
|
-
protected getReferencedImageId(viewport: Types.IStackViewport | Types.IVolumeViewport, worldPos: Types.Point3, viewPlaneNormal: Types.Point3, viewUp: Types.Point3): string;
|
|
18
|
-
getStyle(property: string, specifications: StyleSpecifier, annotation?: Annotation): unknown;
|
|
19
14
|
getLinkedTextBoxStyle(specifications: StyleSpecifier, annotation?: Annotation): Record<string, unknown>;
|
|
20
15
|
private _imagePointNearToolOrHandle;
|
|
21
16
|
}
|
|
@@ -5,15 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const core_1 = require("@cornerstonejs/core");
|
|
7
7
|
const gl_matrix_1 = require("gl-matrix");
|
|
8
|
-
const
|
|
8
|
+
const AnnotationDisplayTool_1 = __importDefault(require("./AnnotationDisplayTool"));
|
|
9
9
|
const annotationLocking_1 = require("../../stateManagement/annotation/annotationLocking");
|
|
10
10
|
const annotationVisibility_1 = require("../../stateManagement/annotation/annotationVisibility");
|
|
11
|
-
|
|
12
|
-
const triggerAnnotationRender_1 = __importDefault(require("../../utilities/triggerAnnotationRender"));
|
|
13
|
-
const filterAnnotationsForDisplay_1 = __importDefault(require("../../utilities/planar/filterAnnotationsForDisplay"));
|
|
14
|
-
const helpers_1 = require("../../stateManagement/annotation/config/helpers");
|
|
15
|
-
const config_1 = require("../../stateManagement/annotation/config");
|
|
16
|
-
class AnnotationTool extends BaseTool_1.default {
|
|
11
|
+
class AnnotationTool extends AnnotationDisplayTool_1.default {
|
|
17
12
|
constructor() {
|
|
18
13
|
super(...arguments);
|
|
19
14
|
this.mouseMoveCallback = (evt, filteredAnnotations) => {
|
|
@@ -46,53 +41,6 @@ class AnnotationTool extends BaseTool_1.default {
|
|
|
46
41
|
}
|
|
47
42
|
return annotationsNeedToBeRedrawn;
|
|
48
43
|
};
|
|
49
|
-
this.onImageSpacingCalibrated = (evt) => {
|
|
50
|
-
const { element, rowScale, columnScale, imageId, imageData: calibratedImageData, worldToIndex: noneCalibratedWorldToIndex, } = evt.detail;
|
|
51
|
-
const { viewport } = (0, core_1.getEnabledElement)(element);
|
|
52
|
-
if (viewport instanceof core_1.VolumeViewport) {
|
|
53
|
-
throw new Error('Cannot calibrate a volume viewport');
|
|
54
|
-
}
|
|
55
|
-
const calibratedIndexToWorld = calibratedImageData.getIndexToWorld();
|
|
56
|
-
const imageURI = core_1.utilities.imageIdToURI(imageId);
|
|
57
|
-
const stateManager = (0, annotationState_1.getViewportSpecificAnnotationManager)(element);
|
|
58
|
-
const framesOfReference = stateManager.getFramesOfReference();
|
|
59
|
-
framesOfReference.forEach((frameOfReference) => {
|
|
60
|
-
const frameOfReferenceSpecificAnnotations = stateManager.getFrameOfReferenceAnnotations(frameOfReference);
|
|
61
|
-
const toolSpecificAnnotations = frameOfReferenceSpecificAnnotations[this.getToolName()];
|
|
62
|
-
if (!toolSpecificAnnotations || !toolSpecificAnnotations.length) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
toolSpecificAnnotations.forEach((annotation) => {
|
|
66
|
-
const referencedImageURI = core_1.utilities.imageIdToURI(annotation.metadata.referencedImageId);
|
|
67
|
-
if (referencedImageURI === imageURI) {
|
|
68
|
-
annotation.invalidated = true;
|
|
69
|
-
annotation.data.cachedStats = {};
|
|
70
|
-
annotation.data.handles.points = annotation.data.handles.points.map((point) => {
|
|
71
|
-
const p = gl_matrix_1.vec4.fromValues(...point, 1);
|
|
72
|
-
const pCalibrated = gl_matrix_1.vec4.fromValues(0, 0, 0, 1);
|
|
73
|
-
const nonCalibratedIndexVec4 = gl_matrix_1.vec4.create();
|
|
74
|
-
gl_matrix_1.vec4.transformMat4(nonCalibratedIndexVec4, p, noneCalibratedWorldToIndex);
|
|
75
|
-
const calibratedIndex = [
|
|
76
|
-
columnScale * nonCalibratedIndexVec4[0],
|
|
77
|
-
rowScale * nonCalibratedIndexVec4[1],
|
|
78
|
-
nonCalibratedIndexVec4[2],
|
|
79
|
-
];
|
|
80
|
-
gl_matrix_1.vec4.transformMat4(pCalibrated, gl_matrix_1.vec4.fromValues(calibratedIndex[0], calibratedIndex[1], calibratedIndex[2], 1), calibratedIndexToWorld);
|
|
81
|
-
return pCalibrated.slice(0, 3);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
(0, triggerAnnotationRender_1.default)(element);
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
filterInteractableAnnotationsForElement(element, annotations) {
|
|
90
|
-
if (!annotations || !annotations.length) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
94
|
-
const { viewport } = enabledElement;
|
|
95
|
-
return (0, filterAnnotationsForDisplay_1.default)(viewport, annotations);
|
|
96
44
|
}
|
|
97
45
|
getHandleNearImagePoint(element, annotation, canvasCoords, proximity) {
|
|
98
46
|
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
@@ -126,22 +74,6 @@ class AnnotationTool extends BaseTool_1.default {
|
|
|
126
74
|
}
|
|
127
75
|
data.handles.activeHandleIndex = null;
|
|
128
76
|
}
|
|
129
|
-
getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp) {
|
|
130
|
-
const targetId = this.getTargetId(viewport);
|
|
131
|
-
let referencedImageId;
|
|
132
|
-
if (viewport instanceof core_1.StackViewport) {
|
|
133
|
-
referencedImageId = targetId.split('imageId:')[1];
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
const volumeId = targetId.split('volumeId:')[1];
|
|
137
|
-
const imageVolume = core_1.cache.getVolume(volumeId);
|
|
138
|
-
referencedImageId = core_1.utilities.getClosestImageId(imageVolume, worldPos, viewPlaneNormal, viewUp);
|
|
139
|
-
}
|
|
140
|
-
return referencedImageId;
|
|
141
|
-
}
|
|
142
|
-
getStyle(property, specifications, annotation) {
|
|
143
|
-
return (0, helpers_1.getStyleProperty)(property, specifications, (0, config_1.getState)(annotation), this.mode);
|
|
144
|
-
}
|
|
145
77
|
getLinkedTextBoxStyle(specifications, annotation) {
|
|
146
78
|
return {
|
|
147
79
|
fontFamily: this.getStyle('textBoxFontFamily', specifications, annotation),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationTool.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"AnnotationTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Types } from '@cornerstonejs/core';
|
|
2
|
+
import BaseTool from './BaseTool';
|
|
3
|
+
import { Annotation, Annotations, SVGDrawingHelper } from '../../types';
|
|
4
|
+
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
5
|
+
declare abstract class AnnotationDisplayTool extends BaseTool {
|
|
6
|
+
static toolName: any;
|
|
7
|
+
abstract renderAnnotation(enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper): any;
|
|
8
|
+
filterInteractableAnnotationsForElement(element: HTMLDivElement, annotations: Annotations): Annotations | undefined;
|
|
9
|
+
onImageSpacingCalibrated: (evt: Types.EventTypes.ImageSpacingCalibratedEvent) => void;
|
|
10
|
+
protected getReferencedImageId(viewport: Types.IStackViewport | Types.IVolumeViewport, worldPos: Types.Point3, viewPlaneNormal: Types.Point3, viewUp: Types.Point3): string;
|
|
11
|
+
getStyle(property: string, specifications: StyleSpecifier, annotation?: Annotation): unknown;
|
|
12
|
+
}
|
|
13
|
+
export default AnnotationDisplayTool;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { utilities, getEnabledElement, VolumeViewport, StackViewport, cache, } from '@cornerstonejs/core';
|
|
2
|
+
import { vec4 } from 'gl-matrix';
|
|
3
|
+
import BaseTool from './BaseTool';
|
|
4
|
+
import { getViewportSpecificAnnotationManager } from '../../stateManagement/annotation/annotationState';
|
|
5
|
+
import triggerAnnotationRender from '../../utilities/triggerAnnotationRender';
|
|
6
|
+
import filterAnnotationsForDisplay from '../../utilities/planar/filterAnnotationsForDisplay';
|
|
7
|
+
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
8
|
+
import { getState } from '../../stateManagement/annotation/config';
|
|
9
|
+
class AnnotationDisplayTool extends BaseTool {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.onImageSpacingCalibrated = (evt) => {
|
|
13
|
+
const { element, rowScale, columnScale, imageId, imageData: calibratedImageData, worldToIndex: noneCalibratedWorldToIndex, } = evt.detail;
|
|
14
|
+
const { viewport } = getEnabledElement(element);
|
|
15
|
+
if (viewport instanceof VolumeViewport) {
|
|
16
|
+
throw new Error('Cannot calibrate a volume viewport');
|
|
17
|
+
}
|
|
18
|
+
const calibratedIndexToWorld = calibratedImageData.getIndexToWorld();
|
|
19
|
+
const imageURI = utilities.imageIdToURI(imageId);
|
|
20
|
+
const stateManager = getViewportSpecificAnnotationManager(element);
|
|
21
|
+
const framesOfReference = stateManager.getFramesOfReference();
|
|
22
|
+
framesOfReference.forEach((frameOfReference) => {
|
|
23
|
+
const frameOfReferenceSpecificAnnotations = stateManager.getFrameOfReferenceAnnotations(frameOfReference);
|
|
24
|
+
const toolSpecificAnnotations = frameOfReferenceSpecificAnnotations[this.getToolName()];
|
|
25
|
+
if (!toolSpecificAnnotations || !toolSpecificAnnotations.length) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
toolSpecificAnnotations.forEach((annotation) => {
|
|
29
|
+
const referencedImageURI = utilities.imageIdToURI(annotation.metadata.referencedImageId);
|
|
30
|
+
if (referencedImageURI === imageURI) {
|
|
31
|
+
annotation.invalidated = true;
|
|
32
|
+
annotation.data.cachedStats = {};
|
|
33
|
+
annotation.data.handles.points = annotation.data.handles.points.map((point) => {
|
|
34
|
+
const p = vec4.fromValues(...point, 1);
|
|
35
|
+
const pCalibrated = vec4.fromValues(0, 0, 0, 1);
|
|
36
|
+
const nonCalibratedIndexVec4 = vec4.create();
|
|
37
|
+
vec4.transformMat4(nonCalibratedIndexVec4, p, noneCalibratedWorldToIndex);
|
|
38
|
+
const calibratedIndex = [
|
|
39
|
+
columnScale * nonCalibratedIndexVec4[0],
|
|
40
|
+
rowScale * nonCalibratedIndexVec4[1],
|
|
41
|
+
nonCalibratedIndexVec4[2],
|
|
42
|
+
];
|
|
43
|
+
vec4.transformMat4(pCalibrated, vec4.fromValues(calibratedIndex[0], calibratedIndex[1], calibratedIndex[2], 1), calibratedIndexToWorld);
|
|
44
|
+
return pCalibrated.slice(0, 3);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
triggerAnnotationRender(element);
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
filterInteractableAnnotationsForElement(element, annotations) {
|
|
53
|
+
if (!annotations || !annotations.length) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const enabledElement = getEnabledElement(element);
|
|
57
|
+
const { viewport } = enabledElement;
|
|
58
|
+
return filterAnnotationsForDisplay(viewport, annotations);
|
|
59
|
+
}
|
|
60
|
+
getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp) {
|
|
61
|
+
const targetId = this.getTargetId(viewport);
|
|
62
|
+
let referencedImageId;
|
|
63
|
+
if (viewport instanceof StackViewport) {
|
|
64
|
+
referencedImageId = targetId.split('imageId:')[1];
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const volumeId = targetId.split('volumeId:')[1];
|
|
68
|
+
const imageVolume = cache.getVolume(volumeId);
|
|
69
|
+
referencedImageId = utilities.getClosestImageId(imageVolume, worldPos, viewPlaneNormal, viewUp);
|
|
70
|
+
}
|
|
71
|
+
return referencedImageId;
|
|
72
|
+
}
|
|
73
|
+
getStyle(property, specifications, annotation) {
|
|
74
|
+
return getStyleProperty(property, specifications, getState(annotation), this.mode);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
AnnotationDisplayTool.toolName = 'AnnotationDisplayTool';
|
|
78
|
+
export default AnnotationDisplayTool;
|
|
79
|
+
//# sourceMappingURL=AnnotationDisplayTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnnotationDisplayTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationDisplayTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import type { Types } from '@cornerstonejs/core';
|
|
2
|
-
import
|
|
3
|
-
import { Annotation, Annotations, EventTypes, ToolHandle, InteractionTypes
|
|
2
|
+
import AnnotationDisplayTool from './AnnotationDisplayTool';
|
|
3
|
+
import { Annotation, Annotations, EventTypes, ToolHandle, InteractionTypes } from '../../types';
|
|
4
4
|
import { StyleSpecifier } from '../../types/AnnotationStyle';
|
|
5
|
-
declare abstract class AnnotationTool extends
|
|
5
|
+
declare abstract class AnnotationTool extends AnnotationDisplayTool {
|
|
6
6
|
static toolName: any;
|
|
7
7
|
abstract addNewAnnotation(evt: EventTypes.MouseDownActivateEventType, interactionType: InteractionTypes): Annotation;
|
|
8
|
-
abstract renderAnnotation(enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper): any;
|
|
9
8
|
abstract cancel(element: HTMLDivElement): any;
|
|
10
9
|
abstract handleSelectedCallback(evt: EventTypes.MouseDownEventType, annotation: Annotation, handle: ToolHandle, interactionType: InteractionTypes): void;
|
|
11
10
|
abstract toolSelectedCallback(evt: EventTypes.MouseDownEventType, annotation: Annotation, interactionType: InteractionTypes): void;
|
|
12
11
|
abstract isPointNearTool(element: HTMLDivElement, annotation: Annotation, canvasCoords: Types.Point2, proximity: number, interactionType: string): boolean;
|
|
13
|
-
filterInteractableAnnotationsForElement(element: HTMLDivElement, annotations: Annotations): Annotations | undefined;
|
|
14
12
|
mouseMoveCallback: (evt: EventTypes.MouseMoveEventType, filteredAnnotations?: Annotations) => boolean;
|
|
15
|
-
onImageSpacingCalibrated: (evt: Types.EventTypes.ImageSpacingCalibratedEvent) => void;
|
|
16
13
|
getHandleNearImagePoint(element: HTMLDivElement, annotation: Annotation, canvasCoords: Types.Point2, proximity: number): ToolHandle | undefined;
|
|
17
|
-
protected getReferencedImageId(viewport: Types.IStackViewport | Types.IVolumeViewport, worldPos: Types.Point3, viewPlaneNormal: Types.Point3, viewUp: Types.Point3): string;
|
|
18
|
-
getStyle(property: string, specifications: StyleSpecifier, annotation?: Annotation): unknown;
|
|
19
14
|
getLinkedTextBoxStyle(specifications: StyleSpecifier, annotation?: Annotation): Record<string, unknown>;
|
|
20
15
|
private _imagePointNearToolOrHandle;
|
|
21
16
|
}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { getEnabledElement } from '@cornerstonejs/core';
|
|
2
|
+
import { vec2 } from 'gl-matrix';
|
|
3
|
+
import AnnotationDisplayTool from './AnnotationDisplayTool';
|
|
4
4
|
import { isAnnotationLocked } from '../../stateManagement/annotation/annotationLocking';
|
|
5
5
|
import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility';
|
|
6
|
-
|
|
7
|
-
import triggerAnnotationRender from '../../utilities/triggerAnnotationRender';
|
|
8
|
-
import filterAnnotationsForDisplay from '../../utilities/planar/filterAnnotationsForDisplay';
|
|
9
|
-
import { getStyleProperty } from '../../stateManagement/annotation/config/helpers';
|
|
10
|
-
import { getState } from '../../stateManagement/annotation/config';
|
|
11
|
-
class AnnotationTool extends BaseTool {
|
|
6
|
+
class AnnotationTool extends AnnotationDisplayTool {
|
|
12
7
|
constructor() {
|
|
13
8
|
super(...arguments);
|
|
14
9
|
this.mouseMoveCallback = (evt, filteredAnnotations) => {
|
|
@@ -41,53 +36,6 @@ class AnnotationTool extends BaseTool {
|
|
|
41
36
|
}
|
|
42
37
|
return annotationsNeedToBeRedrawn;
|
|
43
38
|
};
|
|
44
|
-
this.onImageSpacingCalibrated = (evt) => {
|
|
45
|
-
const { element, rowScale, columnScale, imageId, imageData: calibratedImageData, worldToIndex: noneCalibratedWorldToIndex, } = evt.detail;
|
|
46
|
-
const { viewport } = getEnabledElement(element);
|
|
47
|
-
if (viewport instanceof VolumeViewport) {
|
|
48
|
-
throw new Error('Cannot calibrate a volume viewport');
|
|
49
|
-
}
|
|
50
|
-
const calibratedIndexToWorld = calibratedImageData.getIndexToWorld();
|
|
51
|
-
const imageURI = utilities.imageIdToURI(imageId);
|
|
52
|
-
const stateManager = getViewportSpecificAnnotationManager(element);
|
|
53
|
-
const framesOfReference = stateManager.getFramesOfReference();
|
|
54
|
-
framesOfReference.forEach((frameOfReference) => {
|
|
55
|
-
const frameOfReferenceSpecificAnnotations = stateManager.getFrameOfReferenceAnnotations(frameOfReference);
|
|
56
|
-
const toolSpecificAnnotations = frameOfReferenceSpecificAnnotations[this.getToolName()];
|
|
57
|
-
if (!toolSpecificAnnotations || !toolSpecificAnnotations.length) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
toolSpecificAnnotations.forEach((annotation) => {
|
|
61
|
-
const referencedImageURI = utilities.imageIdToURI(annotation.metadata.referencedImageId);
|
|
62
|
-
if (referencedImageURI === imageURI) {
|
|
63
|
-
annotation.invalidated = true;
|
|
64
|
-
annotation.data.cachedStats = {};
|
|
65
|
-
annotation.data.handles.points = annotation.data.handles.points.map((point) => {
|
|
66
|
-
const p = vec4.fromValues(...point, 1);
|
|
67
|
-
const pCalibrated = vec4.fromValues(0, 0, 0, 1);
|
|
68
|
-
const nonCalibratedIndexVec4 = vec4.create();
|
|
69
|
-
vec4.transformMat4(nonCalibratedIndexVec4, p, noneCalibratedWorldToIndex);
|
|
70
|
-
const calibratedIndex = [
|
|
71
|
-
columnScale * nonCalibratedIndexVec4[0],
|
|
72
|
-
rowScale * nonCalibratedIndexVec4[1],
|
|
73
|
-
nonCalibratedIndexVec4[2],
|
|
74
|
-
];
|
|
75
|
-
vec4.transformMat4(pCalibrated, vec4.fromValues(calibratedIndex[0], calibratedIndex[1], calibratedIndex[2], 1), calibratedIndexToWorld);
|
|
76
|
-
return pCalibrated.slice(0, 3);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
triggerAnnotationRender(element);
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
filterInteractableAnnotationsForElement(element, annotations) {
|
|
85
|
-
if (!annotations || !annotations.length) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const enabledElement = getEnabledElement(element);
|
|
89
|
-
const { viewport } = enabledElement;
|
|
90
|
-
return filterAnnotationsForDisplay(viewport, annotations);
|
|
91
39
|
}
|
|
92
40
|
getHandleNearImagePoint(element, annotation, canvasCoords, proximity) {
|
|
93
41
|
const enabledElement = getEnabledElement(element);
|
|
@@ -121,22 +69,6 @@ class AnnotationTool extends BaseTool {
|
|
|
121
69
|
}
|
|
122
70
|
data.handles.activeHandleIndex = null;
|
|
123
71
|
}
|
|
124
|
-
getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp) {
|
|
125
|
-
const targetId = this.getTargetId(viewport);
|
|
126
|
-
let referencedImageId;
|
|
127
|
-
if (viewport instanceof StackViewport) {
|
|
128
|
-
referencedImageId = targetId.split('imageId:')[1];
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
const volumeId = targetId.split('volumeId:')[1];
|
|
132
|
-
const imageVolume = cache.getVolume(volumeId);
|
|
133
|
-
referencedImageId = utilities.getClosestImageId(imageVolume, worldPos, viewPlaneNormal, viewUp);
|
|
134
|
-
}
|
|
135
|
-
return referencedImageId;
|
|
136
|
-
}
|
|
137
|
-
getStyle(property, specifications, annotation) {
|
|
138
|
-
return getStyleProperty(property, specifications, getState(annotation), this.mode);
|
|
139
|
-
}
|
|
140
72
|
getLinkedTextBoxStyle(specifications, annotation) {
|
|
141
73
|
return {
|
|
142
74
|
fontFamily: this.getStyle('textBoxFontFamily', specifications, annotation),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotationTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationTool.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AnnotationTool.js","sourceRoot":"","sources":["../../../../src/tools/base/AnnotationTool.ts"],"names":[],"mappings":"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"}
|