@cornerstonejs/tools 5.4.16 → 5.5.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/esm/enums/Events.d.ts +7 -0
- package/dist/esm/enums/Events.js +7 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/tools/SliceIntersectionTool.d.ts +150 -0
- package/dist/esm/tools/SliceIntersectionTool.js +1065 -0
- package/dist/esm/tools/WorldCrosshairTool.d.ts +118 -0
- package/dist/esm/tools/WorldCrosshairTool.js +749 -0
- package/dist/esm/tools/annotation/LivewireContourTool.d.ts +1 -3
- package/dist/esm/tools/annotation/LivewireContourTool.js +0 -18
- package/dist/esm/tools/annotation/SplineROITool.d.ts +1 -3
- package/dist/esm/tools/annotation/SplineROITool.js +0 -18
- package/dist/esm/tools/base/AnnotationTool.d.ts +4 -0
- package/dist/esm/tools/base/AnnotationTool.js +20 -0
- package/dist/esm/tools/index.d.ts +3 -1
- package/dist/esm/tools/index.js +3 -1
- package/dist/esm/tools/worldCrosshair/WorldCrosshairLines3D.d.ts +8 -0
- package/dist/esm/tools/worldCrosshair/WorldCrosshairLines3D.js +81 -0
- package/dist/esm/utilities/genericViewportToolHelpers.d.ts +1 -0
- package/dist/esm/utilities/genericViewportToolHelpers.js +31 -0
- package/dist/esm/utilities/index.d.ts +3 -1
- package/dist/esm/utilities/index.js +3 -1
- package/dist/esm/utilities/pickIntensityPointInSlab.d.ts +7 -0
- package/dist/esm/utilities/pickIntensityPointInSlab.js +106 -0
- package/dist/esm/utilities/spatial/areViewportsSpatiallyLinked.d.ts +3 -0
- package/dist/esm/utilities/spatial/areViewportsSpatiallyLinked.js +48 -0
- package/dist/esm/utilities/spatial/clipWorldLineToViewportCanvas.d.ts +3 -0
- package/dist/esm/utilities/spatial/clipWorldLineToViewportCanvas.js +58 -0
- package/dist/esm/utilities/spatial/distancePointToPlane.d.ts +3 -0
- package/dist/esm/utilities/spatial/distancePointToPlane.js +6 -0
- package/dist/esm/utilities/spatial/getDisplayedCanvasSize.d.ts +5 -0
- package/dist/esm/utilities/spatial/getDisplayedCanvasSize.js +12 -0
- package/dist/esm/utilities/spatial/getViewportPlane.d.ts +3 -0
- package/dist/esm/utilities/spatial/getViewportPlane.js +33 -0
- package/dist/esm/utilities/spatial/index.d.ts +11 -0
- package/dist/esm/utilities/spatial/index.js +10 -0
- package/dist/esm/utilities/spatial/intersectPlanes.d.ts +2 -0
- package/dist/esm/utilities/spatial/intersectPlanes.js +30 -0
- package/dist/esm/utilities/spatial/projectPointToPlane.d.ts +3 -0
- package/dist/esm/utilities/spatial/projectPointToPlane.js +11 -0
- package/dist/esm/utilities/spatial/rotateViewportAroundWorldPoint.d.ts +2 -0
- package/dist/esm/utilities/spatial/rotateViewportAroundWorldPoint.js +34 -0
- package/dist/esm/utilities/spatial/translateViewportAlongNormal.d.ts +2 -0
- package/dist/esm/utilities/spatial/translateViewportAlongNormal.js +36 -0
- package/dist/esm/utilities/spatial/types.d.ts +19 -0
- package/dist/esm/utilities/spatial/types.js +0 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import getViewportICamera from '../getViewportICamera.js';
|
|
3
|
+
const MIN_NORMAL_LENGTH = 1e-10;
|
|
4
|
+
function isFinitePoint3(point) {
|
|
5
|
+
return (Array.isArray(point) &&
|
|
6
|
+
point.length === 3 &&
|
|
7
|
+
point.every((v) => Number.isFinite(v)));
|
|
8
|
+
}
|
|
9
|
+
export default function getViewportPlane(viewport) {
|
|
10
|
+
if (!viewport) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
let camera;
|
|
14
|
+
try {
|
|
15
|
+
camera = getViewportICamera(viewport);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const viewPlaneNormal = camera?.viewPlaneNormal;
|
|
21
|
+
const focalPoint = camera?.focalPoint;
|
|
22
|
+
if (!isFinitePoint3(viewPlaneNormal) || !isFinitePoint3(focalPoint)) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (vec3.length(viewPlaneNormal) < MIN_NORMAL_LENGTH) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const normal = vec3.normalize(vec3.create(), viewPlaneNormal);
|
|
29
|
+
return {
|
|
30
|
+
normal: [normal[0], normal[1], normal[2]],
|
|
31
|
+
point: [focalPoint[0], focalPoint[1], focalPoint[2]],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import getViewportPlane from './getViewportPlane.js';
|
|
2
|
+
import intersectPlanes from './intersectPlanes.js';
|
|
3
|
+
import projectPointToPlane from './projectPointToPlane.js';
|
|
4
|
+
import distancePointToPlane from './distancePointToPlane.js';
|
|
5
|
+
import clipWorldLineToViewportCanvas from './clipWorldLineToViewportCanvas.js';
|
|
6
|
+
import areViewportsSpatiallyLinked from './areViewportsSpatiallyLinked.js';
|
|
7
|
+
import translateViewportAlongNormal from './translateViewportAlongNormal.js';
|
|
8
|
+
import rotateViewportAroundWorldPoint from './rotateViewportAroundWorldPoint.js';
|
|
9
|
+
import getDisplayedCanvasSize from './getDisplayedCanvasSize.js';
|
|
10
|
+
export type { Mat4, Plane, WorldLine, SpatialLinkPolicy, SpatialLinkOptions, } from './types.js';
|
|
11
|
+
export { getViewportPlane, intersectPlanes, projectPointToPlane, distancePointToPlane, clipWorldLineToViewportCanvas, areViewportsSpatiallyLinked, translateViewportAlongNormal, rotateViewportAroundWorldPoint, getDisplayedCanvasSize, };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import getViewportPlane from './getViewportPlane.js';
|
|
2
|
+
import intersectPlanes from './intersectPlanes.js';
|
|
3
|
+
import projectPointToPlane from './projectPointToPlane.js';
|
|
4
|
+
import distancePointToPlane from './distancePointToPlane.js';
|
|
5
|
+
import clipWorldLineToViewportCanvas from './clipWorldLineToViewportCanvas.js';
|
|
6
|
+
import areViewportsSpatiallyLinked from './areViewportsSpatiallyLinked.js';
|
|
7
|
+
import translateViewportAlongNormal from './translateViewportAlongNormal.js';
|
|
8
|
+
import rotateViewportAroundWorldPoint from './rotateViewportAroundWorldPoint.js';
|
|
9
|
+
import getDisplayedCanvasSize from './getDisplayedCanvasSize.js';
|
|
10
|
+
export { getViewportPlane, intersectPlanes, projectPointToPlane, distancePointToPlane, clipWorldLineToViewportCanvas, areViewportsSpatiallyLinked, translateViewportAlongNormal, rotateViewportAroundWorldPoint, getDisplayedCanvasSize, };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
const PARALLEL_EPSILON = 1e-6;
|
|
3
|
+
export default function intersectPlanes(planeA, planeB) {
|
|
4
|
+
if (!planeA || !planeB) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const normalA = vec3.normalize(vec3.create(), planeA.normal);
|
|
8
|
+
const normalB = vec3.normalize(vec3.create(), planeB.normal);
|
|
9
|
+
const direction = vec3.cross(vec3.create(), normalA, normalB);
|
|
10
|
+
const directionLengthSquared = vec3.squaredLength(direction);
|
|
11
|
+
if (directionLengthSquared < PARALLEL_EPSILON * PARALLEL_EPSILON) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const dA = vec3.dot(normalA, planeA.point);
|
|
15
|
+
const dB = vec3.dot(normalB, planeB.point);
|
|
16
|
+
const nBCrossDir = vec3.cross(vec3.create(), normalB, direction);
|
|
17
|
+
const dirCrossNA = vec3.cross(vec3.create(), direction, normalA);
|
|
18
|
+
const point = vec3.create();
|
|
19
|
+
vec3.scaleAndAdd(point, point, nBCrossDir, dA);
|
|
20
|
+
vec3.scaleAndAdd(point, point, dirCrossNA, dB);
|
|
21
|
+
vec3.scale(point, point, 1 / directionLengthSquared);
|
|
22
|
+
vec3.normalize(direction, direction);
|
|
23
|
+
if (![...point, ...direction].every((component) => Number.isFinite(component))) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
point: [point[0], point[1], point[2]],
|
|
28
|
+
direction: [direction[0], direction[1], direction[2]],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import distancePointToPlane from './distancePointToPlane.js';
|
|
3
|
+
export default function projectPointToPlane(point, plane) {
|
|
4
|
+
const normal = vec3.normalize(vec3.create(), plane.normal);
|
|
5
|
+
const distance = distancePointToPlane(point, plane);
|
|
6
|
+
return [
|
|
7
|
+
point[0] - distance * normal[0],
|
|
8
|
+
point[1] - distance * normal[1],
|
|
9
|
+
point[2] - distance * normal[2],
|
|
10
|
+
];
|
|
11
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mat4, vec3 } from 'gl-matrix';
|
|
2
|
+
import { utilities as csUtils } from '@cornerstonejs/core';
|
|
3
|
+
export default function rotateViewportAroundWorldPoint(viewport, pivot, axis, angle) {
|
|
4
|
+
if (!viewport || !pivot || !axis || !Number.isFinite(angle) || angle === 0) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
if (csUtils.isGenericViewport(viewport)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const normalizedAxis = vec3.normalize(vec3.create(), axis);
|
|
11
|
+
if (vec3.length(normalizedAxis) < 1e-10) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const camera = viewport.getCamera?.();
|
|
15
|
+
const { position, focalPoint, viewUp } = camera ?? {};
|
|
16
|
+
if (!position || !focalPoint || !viewUp) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const transform = mat4.create();
|
|
20
|
+
mat4.translate(transform, transform, pivot);
|
|
21
|
+
mat4.rotate(transform, transform, angle, normalizedAxis);
|
|
22
|
+
mat4.translate(transform, transform, [-pivot[0], -pivot[1], -pivot[2]]);
|
|
23
|
+
const newPosition = vec3.transformMat4(vec3.create(), position, transform);
|
|
24
|
+
const newFocalPoint = vec3.transformMat4(vec3.create(), focalPoint, transform);
|
|
25
|
+
const viewUpPoint = vec3.add(vec3.create(), position, viewUp);
|
|
26
|
+
const newViewUpPoint = vec3.transformMat4(vec3.create(), viewUpPoint, transform);
|
|
27
|
+
const newViewUp = vec3.subtract(vec3.create(), newViewUpPoint, newPosition);
|
|
28
|
+
viewport.setCamera({
|
|
29
|
+
position: [newPosition[0], newPosition[1], newPosition[2]],
|
|
30
|
+
focalPoint: [newFocalPoint[0], newFocalPoint[1], newFocalPoint[2]],
|
|
31
|
+
viewUp: [newViewUp[0], newViewUp[1], newViewUp[2]],
|
|
32
|
+
});
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import { utilities as csUtils } from '@cornerstonejs/core';
|
|
3
|
+
import getViewportICamera from '../getViewportICamera.js';
|
|
4
|
+
import { navigatePlanarViewportToPoint } from '../genericViewportToolHelpers.js';
|
|
5
|
+
export default function translateViewportAlongNormal(viewport, distance) {
|
|
6
|
+
if (!viewport || !Number.isFinite(distance) || distance === 0) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
let camera;
|
|
10
|
+
try {
|
|
11
|
+
camera = getViewportICamera(viewport);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const viewPlaneNormal = camera?.viewPlaneNormal;
|
|
17
|
+
const focalPoint = camera?.focalPoint;
|
|
18
|
+
const position = camera?.position;
|
|
19
|
+
if (!viewPlaneNormal || !focalPoint || !position) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const newFocalPoint = vec3.scaleAndAdd(vec3.create(), focalPoint, viewPlaneNormal, distance);
|
|
23
|
+
const newPosition = vec3.scaleAndAdd(vec3.create(), position, viewPlaneNormal, distance);
|
|
24
|
+
if (csUtils.isGenericViewport(viewport)) {
|
|
25
|
+
return navigatePlanarViewportToPoint(viewport, [
|
|
26
|
+
newFocalPoint[0],
|
|
27
|
+
newFocalPoint[1],
|
|
28
|
+
newFocalPoint[2],
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
viewport.setCamera({
|
|
32
|
+
focalPoint: [newFocalPoint[0], newFocalPoint[1], newFocalPoint[2]],
|
|
33
|
+
position: [newPosition[0], newPosition[1], newPosition[2]],
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Types } from '@cornerstonejs/core';
|
|
2
|
+
export type Mat4 = number[] | Float32Array;
|
|
3
|
+
export type Plane = {
|
|
4
|
+
normal: Types.Point3;
|
|
5
|
+
point: Types.Point3;
|
|
6
|
+
};
|
|
7
|
+
export type WorldLine = {
|
|
8
|
+
point: Types.Point3;
|
|
9
|
+
direction: Types.Point3;
|
|
10
|
+
};
|
|
11
|
+
export type SpatialLinkPolicy = 'toolGroup' | 'frameOfReferenceUID' | 'explicit';
|
|
12
|
+
export type SpatialLinkOptions = {
|
|
13
|
+
policy: SpatialLinkPolicy;
|
|
14
|
+
explicitLinks?: Array<{
|
|
15
|
+
sourceViewportId: string;
|
|
16
|
+
targetViewportId: string;
|
|
17
|
+
}>;
|
|
18
|
+
registrationTransforms?: Map<string, Mat4>;
|
|
19
|
+
};
|
|
File without changes
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.5.0";
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.5.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/tools",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "Cornerstone3D Tools",
|
|
5
5
|
"types": "./dist/esm/index.d.ts",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -126,11 +126,11 @@
|
|
|
126
126
|
"lodash.get": "4.4.2"
|
|
127
127
|
},
|
|
128
128
|
"devDependencies": {
|
|
129
|
-
"@cornerstonejs/core": "5.
|
|
129
|
+
"@cornerstonejs/core": "5.5.0",
|
|
130
130
|
"canvas": "3.2.0"
|
|
131
131
|
},
|
|
132
132
|
"peerDependencies": {
|
|
133
|
-
"@cornerstonejs/core": "5.
|
|
133
|
+
"@cornerstonejs/core": "5.5.0",
|
|
134
134
|
"@kitware/vtk.js": "35.5.3",
|
|
135
135
|
"@types/d3-array": "3.2.1",
|
|
136
136
|
"@types/d3-interpolate": "3.0.4",
|
|
@@ -149,5 +149,5 @@
|
|
|
149
149
|
"type": "individual",
|
|
150
150
|
"url": "https://ohif.org/donate"
|
|
151
151
|
},
|
|
152
|
-
"gitHead": "
|
|
152
|
+
"gitHead": "9a6e9edc926a53324461f17358dd034d009e4137"
|
|
153
153
|
}
|