@cornerstonejs/tools 0.13.0 → 0.14.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.
Files changed (41) hide show
  1. package/dist/cjs/enums/ToolBindings.js.map +1 -1
  2. package/dist/cjs/index.d.ts +2 -2
  3. package/dist/cjs/index.js +3 -1
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/tools/MagnifyTool.d.ts +24 -0
  6. package/dist/cjs/tools/MagnifyTool.js +169 -0
  7. package/dist/cjs/tools/MagnifyTool.js.map +1 -0
  8. package/dist/cjs/tools/annotation/AngleTool.d.ts +37 -0
  9. package/dist/cjs/tools/annotation/AngleTool.js +442 -0
  10. package/dist/cjs/tools/annotation/AngleTool.js.map +1 -0
  11. package/dist/cjs/tools/index.d.ts +3 -1
  12. package/dist/cjs/tools/index.js +5 -1
  13. package/dist/cjs/tools/index.js.map +1 -1
  14. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +24 -0
  15. package/dist/cjs/utilities/math/angle/angleBetweenLines.d.ts +4 -0
  16. package/dist/cjs/utilities/math/angle/angleBetweenLines.js +17 -0
  17. package/dist/cjs/utilities/math/angle/angleBetweenLines.js.map +1 -0
  18. package/dist/cjs/utilities/viewportFilters/filterViewportsWithToolEnabled.js +3 -0
  19. package/dist/cjs/utilities/viewportFilters/filterViewportsWithToolEnabled.js.map +1 -1
  20. package/dist/esm/enums/ToolBindings.js.map +1 -1
  21. package/dist/esm/index.d.ts +2 -2
  22. package/dist/esm/index.js +2 -2
  23. package/dist/esm/index.js.map +1 -1
  24. package/dist/esm/tools/MagnifyTool.d.ts +24 -0
  25. package/dist/esm/tools/MagnifyTool.js +163 -0
  26. package/dist/esm/tools/MagnifyTool.js.map +1 -0
  27. package/dist/esm/tools/annotation/AngleTool.d.ts +37 -0
  28. package/dist/esm/tools/annotation/AngleTool.js +417 -0
  29. package/dist/esm/tools/annotation/AngleTool.js.map +1 -0
  30. package/dist/esm/tools/index.d.ts +3 -1
  31. package/dist/esm/tools/index.js +3 -1
  32. package/dist/esm/tools/index.js.map +1 -1
  33. package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +24 -0
  34. package/dist/esm/utilities/math/angle/angleBetweenLines.d.ts +4 -0
  35. package/dist/esm/utilities/math/angle/angleBetweenLines.js +14 -0
  36. package/dist/esm/utilities/math/angle/angleBetweenLines.js.map +1 -0
  37. package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.js +3 -0
  38. package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.js.map +1 -1
  39. package/dist/umd/index.js +1 -1
  40. package/dist/umd/index.js.map +1 -1
  41. package/package.json +4 -4
@@ -0,0 +1,417 @@
1
+ import { Events } from '../../enums';
2
+ import { getEnabledElement, triggerEvent, eventTarget, } from '@cornerstonejs/core';
3
+ import { AnnotationTool } from '../base';
4
+ import throttle from '../../utilities/throttle';
5
+ import { addAnnotation, getAnnotations, removeAnnotation, } from '../../stateManagement/annotation/annotationState';
6
+ import { isAnnotationLocked } from '../../stateManagement/annotation/annotationLocking';
7
+ import * as lineSegment from '../../utilities/math/line';
8
+ import angleBetweenLines from '../../utilities/math/angle/angleBetweenLines';
9
+ import { drawHandles as drawHandlesSvg, drawLine as drawLineSvg, drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg';
10
+ import { state } from '../../store';
11
+ import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters';
12
+ import { getTextBoxCoordsCanvas } from '../../utilities/drawing';
13
+ import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds';
14
+ import { resetElementCursor, hideElementCursor, } from '../../cursors/elementCursor';
15
+ class AngleTool extends AnnotationTool {
16
+ constructor(toolProps = {}, defaultToolProps = {
17
+ supportedInteractionTypes: ['Mouse', 'Touch'],
18
+ configuration: {
19
+ shadow: true,
20
+ preventHandleOutsideImage: false,
21
+ },
22
+ }) {
23
+ super(toolProps, defaultToolProps);
24
+ this.addNewAnnotation = (evt) => {
25
+ if (this.angleStartedNotYetCompleted) {
26
+ return;
27
+ }
28
+ this.angleStartedNotYetCompleted = true;
29
+ const eventDetail = evt.detail;
30
+ const { currentPoints, element } = eventDetail;
31
+ const worldPos = currentPoints.world;
32
+ const enabledElement = getEnabledElement(element);
33
+ const { viewport, renderingEngine } = enabledElement;
34
+ hideElementCursor(element);
35
+ this.isDrawing = true;
36
+ const camera = viewport.getCamera();
37
+ const { viewPlaneNormal, viewUp } = camera;
38
+ const referencedImageId = this.getReferencedImageId(viewport, worldPos, viewPlaneNormal, viewUp);
39
+ const annotation = {
40
+ highlighted: true,
41
+ invalidated: true,
42
+ metadata: {
43
+ toolName: this.getToolName(),
44
+ viewPlaneNormal: [...viewPlaneNormal],
45
+ viewUp: [...viewUp],
46
+ FrameOfReferenceUID: viewport.getFrameOfReferenceUID(),
47
+ referencedImageId,
48
+ },
49
+ data: {
50
+ handles: {
51
+ points: [[...worldPos], [...worldPos]],
52
+ activeHandleIndex: null,
53
+ textBox: {
54
+ hasMoved: false,
55
+ worldPosition: [0, 0, 0],
56
+ worldBoundingBox: {
57
+ topLeft: [0, 0, 0],
58
+ topRight: [0, 0, 0],
59
+ bottomLeft: [0, 0, 0],
60
+ bottomRight: [0, 0, 0],
61
+ },
62
+ },
63
+ },
64
+ label: '',
65
+ cachedStats: {},
66
+ },
67
+ };
68
+ addAnnotation(element, annotation);
69
+ const viewportIdsToRender = getViewportIdsWithToolToRender(element, this.getToolName());
70
+ this.editData = {
71
+ annotation,
72
+ viewportIdsToRender,
73
+ handleIndex: 1,
74
+ movingTextBox: false,
75
+ newAnnotation: true,
76
+ hasMoved: false,
77
+ };
78
+ this._activateDraw(element);
79
+ evt.preventDefault();
80
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
81
+ return annotation;
82
+ };
83
+ this.isPointNearTool = (element, annotation, canvasCoords, proximity) => {
84
+ const enabledElement = getEnabledElement(element);
85
+ const { viewport } = enabledElement;
86
+ const { data } = annotation;
87
+ const [point1, point2, point3] = data.handles.points;
88
+ const canvasPoint1 = viewport.worldToCanvas(point1);
89
+ const canvasPoint2 = viewport.worldToCanvas(point2);
90
+ const canvasPoint3 = viewport.worldToCanvas(point3);
91
+ const line1 = {
92
+ start: {
93
+ x: canvasPoint1[0],
94
+ y: canvasPoint1[1],
95
+ },
96
+ end: {
97
+ x: canvasPoint2[0],
98
+ y: canvasPoint2[1],
99
+ },
100
+ };
101
+ const line2 = {
102
+ start: {
103
+ x: canvasPoint2[0],
104
+ y: canvasPoint2[1],
105
+ },
106
+ end: {
107
+ x: canvasPoint3[0],
108
+ y: canvasPoint3[1],
109
+ },
110
+ };
111
+ const distanceToPoint = lineSegment.distanceToPoint([line1.start.x, line1.start.y], [line1.end.x, line1.end.y], [canvasCoords[0], canvasCoords[1]]);
112
+ const distanceToPoint2 = lineSegment.distanceToPoint([line2.start.x, line2.start.y], [line2.end.x, line2.end.y], [canvasCoords[0], canvasCoords[1]]);
113
+ if (distanceToPoint <= proximity || distanceToPoint2 <= proximity) {
114
+ return true;
115
+ }
116
+ return false;
117
+ };
118
+ this.toolSelectedCallback = (evt, annotation, interactionType) => {
119
+ const eventDetail = evt.detail;
120
+ const { element } = eventDetail;
121
+ annotation.highlighted = true;
122
+ const viewportIdsToRender = getViewportIdsWithToolToRender(element, this.getToolName());
123
+ this.editData = {
124
+ annotation,
125
+ viewportIdsToRender,
126
+ movingTextBox: false,
127
+ };
128
+ this._activateModify(element);
129
+ hideElementCursor(element);
130
+ const enabledElement = getEnabledElement(element);
131
+ const { renderingEngine } = enabledElement;
132
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
133
+ evt.preventDefault();
134
+ };
135
+ this._mouseUpCallback = (evt) => {
136
+ const eventDetail = evt.detail;
137
+ const { element } = eventDetail;
138
+ const { annotation, viewportIdsToRender, newAnnotation, hasMoved } = this.editData;
139
+ const { data } = annotation;
140
+ if (newAnnotation && !hasMoved) {
141
+ return;
142
+ }
143
+ if (this.angleStartedNotYetCompleted && data.handles.points.length === 2) {
144
+ this.editData.handleIndex = 2;
145
+ return;
146
+ }
147
+ this.angleStartedNotYetCompleted = false;
148
+ annotation.highlighted = false;
149
+ data.handles.activeHandleIndex = null;
150
+ this._deactivateModify(element);
151
+ this._deactivateDraw(element);
152
+ resetElementCursor(element);
153
+ const enabledElement = getEnabledElement(element);
154
+ const { renderingEngine } = enabledElement;
155
+ if (this.isHandleOutsideImage &&
156
+ this.configuration.preventHandleOutsideImage) {
157
+ removeAnnotation(annotation.annotationUID, element);
158
+ }
159
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
160
+ if (newAnnotation) {
161
+ const eventType = Events.ANNOTATION_COMPLETED;
162
+ const eventDetail = {
163
+ annotation,
164
+ };
165
+ triggerEvent(eventTarget, eventType, eventDetail);
166
+ }
167
+ this.editData = null;
168
+ this.isDrawing = false;
169
+ };
170
+ this._mouseDragCallback = (evt) => {
171
+ this.isDrawing = true;
172
+ const eventDetail = evt.detail;
173
+ const { element } = eventDetail;
174
+ const { annotation, viewportIdsToRender, handleIndex, movingTextBox } = this.editData;
175
+ const { data } = annotation;
176
+ if (movingTextBox) {
177
+ const { deltaPoints } = eventDetail;
178
+ const worldPosDelta = deltaPoints.world;
179
+ const { textBox } = data.handles;
180
+ const { worldPosition } = textBox;
181
+ worldPosition[0] += worldPosDelta[0];
182
+ worldPosition[1] += worldPosDelta[1];
183
+ worldPosition[2] += worldPosDelta[2];
184
+ textBox.hasMoved = true;
185
+ }
186
+ else if (handleIndex === undefined) {
187
+ const { deltaPoints } = eventDetail;
188
+ const worldPosDelta = deltaPoints.world;
189
+ const points = data.handles.points;
190
+ points.forEach((point) => {
191
+ point[0] += worldPosDelta[0];
192
+ point[1] += worldPosDelta[1];
193
+ point[2] += worldPosDelta[2];
194
+ });
195
+ annotation.invalidated = true;
196
+ }
197
+ else {
198
+ const { currentPoints } = eventDetail;
199
+ const worldPos = currentPoints.world;
200
+ data.handles.points[handleIndex] = [...worldPos];
201
+ annotation.invalidated = true;
202
+ }
203
+ this.editData.hasMoved = true;
204
+ const enabledElement = getEnabledElement(element);
205
+ const { renderingEngine } = enabledElement;
206
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
207
+ };
208
+ this.cancel = (element) => {
209
+ if (this.isDrawing) {
210
+ this.isDrawing = false;
211
+ this._deactivateDraw(element);
212
+ this._deactivateModify(element);
213
+ resetElementCursor(element);
214
+ const { annotation, viewportIdsToRender, newAnnotation } = this.editData;
215
+ const { data } = annotation;
216
+ annotation.highlighted = false;
217
+ data.handles.activeHandleIndex = null;
218
+ const enabledElement = getEnabledElement(element);
219
+ const { renderingEngine } = enabledElement;
220
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
221
+ if (newAnnotation) {
222
+ const eventType = Events.ANNOTATION_COMPLETED;
223
+ const eventDetail = {
224
+ annotation,
225
+ };
226
+ triggerEvent(eventTarget, eventType, eventDetail);
227
+ }
228
+ this.editData = null;
229
+ return annotation.annotationUID;
230
+ }
231
+ };
232
+ this._activateModify = (element) => {
233
+ state.isInteractingWithTool = true;
234
+ element.addEventListener(Events.MOUSE_UP, this._mouseUpCallback);
235
+ element.addEventListener(Events.MOUSE_DRAG, this._mouseDragCallback);
236
+ element.addEventListener(Events.MOUSE_CLICK, this._mouseUpCallback);
237
+ };
238
+ this._deactivateModify = (element) => {
239
+ state.isInteractingWithTool = false;
240
+ element.removeEventListener(Events.MOUSE_UP, this._mouseUpCallback);
241
+ element.removeEventListener(Events.MOUSE_DRAG, this._mouseDragCallback);
242
+ element.removeEventListener(Events.MOUSE_CLICK, this._mouseUpCallback);
243
+ };
244
+ this._activateDraw = (element) => {
245
+ state.isInteractingWithTool = true;
246
+ element.addEventListener(Events.MOUSE_UP, this._mouseUpCallback);
247
+ element.addEventListener(Events.MOUSE_DRAG, this._mouseDragCallback);
248
+ element.addEventListener(Events.MOUSE_MOVE, this._mouseDragCallback);
249
+ element.addEventListener(Events.MOUSE_CLICK, this._mouseUpCallback);
250
+ };
251
+ this._deactivateDraw = (element) => {
252
+ state.isInteractingWithTool = false;
253
+ element.removeEventListener(Events.MOUSE_UP, this._mouseUpCallback);
254
+ element.removeEventListener(Events.MOUSE_DRAG, this._mouseDragCallback);
255
+ element.removeEventListener(Events.MOUSE_MOVE, this._mouseDragCallback);
256
+ element.removeEventListener(Events.MOUSE_CLICK, this._mouseUpCallback);
257
+ };
258
+ this.renderAnnotation = (enabledElement, svgDrawingHelper) => {
259
+ const { viewport } = enabledElement;
260
+ const { element } = viewport;
261
+ let annotations = getAnnotations(element, this.getToolName());
262
+ if (!annotations?.length) {
263
+ return;
264
+ }
265
+ annotations = this.filterInteractableAnnotationsForElement(element, annotations);
266
+ if (!annotations?.length) {
267
+ return;
268
+ }
269
+ const targetId = this.getTargetId(viewport);
270
+ const renderingEngine = viewport.getRenderingEngine();
271
+ const styleSpecifier = {
272
+ toolGroupId: this.toolGroupId,
273
+ toolName: this.getToolName(),
274
+ viewportId: enabledElement.viewport.id,
275
+ };
276
+ for (let i = 0; i < annotations.length; i++) {
277
+ const annotation = annotations[i];
278
+ const { annotationUID, data } = annotation;
279
+ const { points, activeHandleIndex } = data.handles;
280
+ styleSpecifier.annotationUID = annotationUID;
281
+ const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
282
+ const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
283
+ const color = this.getStyle('color', styleSpecifier, annotation);
284
+ const canvasCoordinates = points.map((p) => viewport.worldToCanvas(p));
285
+ if (!data.cachedStats[targetId]) {
286
+ data.cachedStats[targetId] = {
287
+ angle: null,
288
+ };
289
+ this._calculateCachedStats(annotation, renderingEngine, enabledElement);
290
+ }
291
+ else if (annotation.invalidated) {
292
+ this._throttledCalculateCachedStats(annotation, renderingEngine, enabledElement);
293
+ }
294
+ let activeHandleCanvasCoords;
295
+ if (!isAnnotationLocked(annotation) &&
296
+ !this.editData &&
297
+ activeHandleIndex !== null) {
298
+ activeHandleCanvasCoords = [canvasCoordinates[activeHandleIndex]];
299
+ }
300
+ if (activeHandleCanvasCoords) {
301
+ const handleGroupUID = '0';
302
+ drawHandlesSvg(svgDrawingHelper, annotationUID, handleGroupUID, canvasCoordinates, {
303
+ color,
304
+ lineDash,
305
+ lineWidth,
306
+ });
307
+ }
308
+ let lineUID = '1';
309
+ drawLineSvg(svgDrawingHelper, annotationUID, lineUID, canvasCoordinates[0], canvasCoordinates[1], {
310
+ color,
311
+ width: lineWidth,
312
+ lineDash,
313
+ });
314
+ if (canvasCoordinates.length !== 3) {
315
+ return;
316
+ }
317
+ lineUID = '2';
318
+ drawLineSvg(svgDrawingHelper, annotationUID, lineUID, canvasCoordinates[1], canvasCoordinates[2], {
319
+ color,
320
+ width: lineWidth,
321
+ lineDash,
322
+ });
323
+ if (!viewport.getRenderingEngine()) {
324
+ console.warn('Rendering Engine has been destroyed');
325
+ return;
326
+ }
327
+ if (!data.cachedStats[targetId]?.angle) {
328
+ continue;
329
+ }
330
+ const textLines = this._getTextLines(data, targetId);
331
+ if (!data.handles.textBox.hasMoved) {
332
+ const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates);
333
+ data.handles.textBox.worldPosition =
334
+ viewport.canvasToWorld(canvasTextBoxCoords);
335
+ }
336
+ const textBoxPosition = viewport.worldToCanvas(data.handles.textBox.worldPosition);
337
+ const textBoxUID = '1';
338
+ const boundingBox = drawLinkedTextBoxSvg(svgDrawingHelper, annotationUID, textBoxUID, textLines, textBoxPosition, canvasCoordinates, {}, this.getLinkedTextBoxStyle(styleSpecifier, annotation));
339
+ const { x: left, y: top, width, height } = boundingBox;
340
+ data.handles.textBox.worldBoundingBox = {
341
+ topLeft: viewport.canvasToWorld([left, top]),
342
+ topRight: viewport.canvasToWorld([left + width, top]),
343
+ bottomLeft: viewport.canvasToWorld([left, top + height]),
344
+ bottomRight: viewport.canvasToWorld([left + width, top + height]),
345
+ };
346
+ }
347
+ };
348
+ this._throttledCalculateCachedStats = throttle(this._calculateCachedStats, 100, { trailing: true });
349
+ }
350
+ handleSelectedCallback(evt, annotation, handle, interactionType = 'mouse') {
351
+ const eventDetail = evt.detail;
352
+ const { element } = eventDetail;
353
+ const { data } = annotation;
354
+ annotation.highlighted = true;
355
+ let movingTextBox = false;
356
+ let handleIndex;
357
+ if (handle.worldPosition) {
358
+ movingTextBox = true;
359
+ }
360
+ else {
361
+ handleIndex = data.handles.points.findIndex((p) => p === handle);
362
+ }
363
+ const viewportIdsToRender = getViewportIdsWithToolToRender(element, this.getToolName());
364
+ this.editData = {
365
+ annotation,
366
+ viewportIdsToRender,
367
+ handleIndex,
368
+ movingTextBox,
369
+ };
370
+ this._activateModify(element);
371
+ hideElementCursor(element);
372
+ const enabledElement = getEnabledElement(element);
373
+ const { renderingEngine } = enabledElement;
374
+ triggerAnnotationRenderForViewportIds(renderingEngine, viewportIdsToRender);
375
+ evt.preventDefault();
376
+ }
377
+ _getTextLines(data, targetId) {
378
+ const cachedVolumeStats = data.cachedStats[targetId];
379
+ const { angle } = cachedVolumeStats;
380
+ if (angle === undefined) {
381
+ return;
382
+ }
383
+ const textLines = [`${angle.toFixed(2)} ${String.fromCharCode(176)}`];
384
+ return textLines;
385
+ }
386
+ _calculateCachedStats(annotation, renderingEngine, enabledElement) {
387
+ const data = annotation.data;
388
+ const { viewportId, renderingEngineId } = enabledElement;
389
+ if (data.handles.points.length !== 3) {
390
+ return;
391
+ }
392
+ const worldPos1 = data.handles.points[0];
393
+ const worldPos2 = data.handles.points[1];
394
+ const worldPos3 = data.handles.points[2];
395
+ const { cachedStats } = data;
396
+ const targetIds = Object.keys(cachedStats);
397
+ for (let i = 0; i < targetIds.length; i++) {
398
+ const targetId = targetIds[i];
399
+ const angle = angleBetweenLines([worldPos1, worldPos2], [worldPos2, worldPos3]);
400
+ cachedStats[targetId] = {
401
+ angle,
402
+ };
403
+ }
404
+ annotation.invalidated = false;
405
+ const eventType = Events.ANNOTATION_MODIFIED;
406
+ const eventDetail = {
407
+ annotation,
408
+ viewportId,
409
+ renderingEngineId,
410
+ };
411
+ triggerEvent(eventTarget, eventType, eventDetail);
412
+ return cachedStats;
413
+ }
414
+ }
415
+ AngleTool.toolName = 'Angle';
416
+ export default AngleTool;
417
+ //# sourceMappingURL=AngleTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AngleTool.js","sourceRoot":"","sources":["../../../../src/tools/annotation/AngleTool.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import ZoomTool from './ZoomTool';
7
7
  import VolumeRotateMouseWheelTool from './VolumeRotateMouseWheelTool';
8
8
  import MIPJumpToClickTool from './MIPJumpToClickTool';
9
9
  import CrosshairsTool from './CrosshairsTool';
10
+ import MagnifyTool from './MagnifyTool';
10
11
  import BidirectionalTool from './annotation/BidirectionalTool';
11
12
  import LengthTool from './annotation/LengthTool';
12
13
  import ProbeTool from './annotation/ProbeTool';
@@ -15,6 +16,7 @@ import RectangleROITool from './annotation/RectangleROITool';
15
16
  import EllipticalROITool from './annotation/EllipticalROITool';
16
17
  import PlanarFreehandROITool from './annotation/PlanarFreehandROITool';
17
18
  import ArrowAnnotateTool from './annotation/ArrowAnnotateTool';
19
+ import AngleTool from './annotation/AngleTool';
18
20
  import SegmentationDisplayTool from './displayTools/SegmentationDisplayTool';
19
21
  import RectangleScissorsTool from './segmentation/RectangleScissorsTool';
20
22
  import CircleScissorsTool from './segmentation/CircleScissorsTool';
@@ -22,4 +24,4 @@ import SphereScissorsTool from './segmentation/SphereScissorsTool';
22
24
  import RectangleROIThresholdTool from './segmentation/RectangleROIThresholdTool';
23
25
  import RectangleROIStartEndThresholdTool from './segmentation/RectangleROIStartEndThresholdTool';
24
26
  import BrushTool from './segmentation/BrushTool';
25
- export { BaseTool, AnnotationTool, PanTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, };
27
+ export { BaseTool, AnnotationTool, PanTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, };
@@ -7,6 +7,7 @@ import ZoomTool from './ZoomTool';
7
7
  import VolumeRotateMouseWheelTool from './VolumeRotateMouseWheelTool';
8
8
  import MIPJumpToClickTool from './MIPJumpToClickTool';
9
9
  import CrosshairsTool from './CrosshairsTool';
10
+ import MagnifyTool from './MagnifyTool';
10
11
  import BidirectionalTool from './annotation/BidirectionalTool';
11
12
  import LengthTool from './annotation/LengthTool';
12
13
  import ProbeTool from './annotation/ProbeTool';
@@ -15,6 +16,7 @@ import RectangleROITool from './annotation/RectangleROITool';
15
16
  import EllipticalROITool from './annotation/EllipticalROITool';
16
17
  import PlanarFreehandROITool from './annotation/PlanarFreehandROITool';
17
18
  import ArrowAnnotateTool from './annotation/ArrowAnnotateTool';
19
+ import AngleTool from './annotation/AngleTool';
18
20
  import SegmentationDisplayTool from './displayTools/SegmentationDisplayTool';
19
21
  import RectangleScissorsTool from './segmentation/RectangleScissorsTool';
20
22
  import CircleScissorsTool from './segmentation/CircleScissorsTool';
@@ -22,5 +24,5 @@ import SphereScissorsTool from './segmentation/SphereScissorsTool';
22
24
  import RectangleROIThresholdTool from './segmentation/RectangleROIThresholdTool';
23
25
  import RectangleROIStartEndThresholdTool from './segmentation/RectangleROIStartEndThresholdTool';
24
26
  import BrushTool from './segmentation/BrushTool';
25
- export { BaseTool, AnnotationTool, PanTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, };
27
+ export { BaseTool, AnnotationTool, PanTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, };
26
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AACxE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAG/D,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;AAG7E,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AACjF,OAAO,iCAAiC,MAAM,kDAAkD,CAAC;AACjG,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAEL,QAAQ,EACR,cAAc,EAEd,OAAO,EACP,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAElB,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAEjB,uBAAuB,EAEvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,GACV,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AACxE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAG/C,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;AAG7E,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AACjF,OAAO,iCAAiC,MAAM,kDAAkD,CAAC;AACjG,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAEL,QAAQ,EACR,cAAc,EAEd,OAAO,EACP,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAElB,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EAET,uBAAuB,EAEvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,WAAW,GACZ,CAAC"}
@@ -215,4 +215,28 @@ export interface ArrowAnnotation extends Annotation {
215
215
  };
216
216
  };
217
217
  }
218
+ export interface AngleAnnotation extends Annotation {
219
+ data: {
220
+ handles: {
221
+ points: Types.Point3[];
222
+ activeHandleIndex: number | null;
223
+ textBox: {
224
+ hasMoved: boolean;
225
+ worldPosition: Types.Point3;
226
+ worldBoundingBox: {
227
+ topLeft: Types.Point3;
228
+ topRight: Types.Point3;
229
+ bottomLeft: Types.Point3;
230
+ bottomRight: Types.Point3;
231
+ };
232
+ };
233
+ };
234
+ label: string;
235
+ cachedStats: {
236
+ [targetId: string]: {
237
+ angle: number;
238
+ };
239
+ };
240
+ };
241
+ }
218
242
  export {};
@@ -0,0 +1,4 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ declare type Line = [Types.Point3, Types.Point3];
3
+ export default function angleBetweenLines(line1: Line, line2: Line): number;
4
+ export {};
@@ -0,0 +1,14 @@
1
+ import { vec3 } from 'gl-matrix';
2
+ export default function angleBetweenLines(line1, line2) {
3
+ const [p1, p2] = line1;
4
+ const [p3, p4] = line2;
5
+ const v1 = vec3.sub(vec3.create(), p2, p1);
6
+ const v2 = vec3.sub(vec3.create(), p3, p4);
7
+ const dot = vec3.dot(v1, v2);
8
+ const v1Length = vec3.length(v1);
9
+ const v2Length = vec3.length(v2);
10
+ const cos = dot / (v1Length * v2Length);
11
+ const radian = Math.acos(cos);
12
+ return (radian * 180) / Math.PI;
13
+ }
14
+ //# sourceMappingURL=angleBetweenLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angleBetweenLines.js","sourceRoot":"","sources":["../../../../../src/utilities/math/angle/angleBetweenLines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAW,EAAE,KAAW;IAChE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IACvB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9B,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAClC,CAAC"}
@@ -7,6 +7,9 @@ export default function filterViewportsWithToolEnabled(viewports, toolName) {
7
7
  for (let vp = 0; vp < numViewports; vp++) {
8
8
  const viewport = viewports[vp];
9
9
  const toolGroup = ToolGroupManager.getToolGroupForViewport(viewport.id, viewport.renderingEngineId);
10
+ if (!toolGroup) {
11
+ continue;
12
+ }
10
13
  const hasTool = _toolGroupHasActiveEnabledOrPassiveTool(toolGroup, toolName);
11
14
  if (hasTool) {
12
15
  viewportsWithToolEnabled.push(viewport);
@@ -1 +1 @@
1
- {"version":3,"file":"filterViewportsWithToolEnabled.js","sourceRoot":"","sources":["../../../../src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;AAU/C,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,SAA8D,EAC9D,QAAgB;IAEhB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;IAEtC,MAAM,wBAAwB,GAAG,EAAE,CAAC;IAEpC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,uBAAuB,CACxD,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;QAEF,MAAM,OAAO,GAAG,uCAAuC,CACrD,SAAS,EACT,QAAQ,CACT,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;KACF;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAWD,SAAS,uCAAuC,CAC9C,SAAqB,EACrB,QAAgB;IAEhB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"filterViewportsWithToolEnabled.js","sourceRoot":"","sources":["../../../../src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;AAU/C,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,SAA8D,EAC9D,QAAgB;IAEhB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;IAEtC,MAAM,wBAAwB,GAAG,EAAE,CAAC;IAEpC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,uBAAuB,CACxD,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE;YACd,SAAS;SACV;QAED,MAAM,OAAO,GAAG,uCAAuC,CACrD,SAAS,EACT,QAAQ,CACT,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;KACF;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAWD,SAAS,uCAAuC,CAC9C,SAAqB,EACrB,QAAgB;IAEhB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,KAAK,CAAC;KACd;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,CAAC;AAC7E,CAAC"}