@cornerstonejs/core 3.28.3 → 3.29.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/utilities/asArray.d.ts +1 -0
- package/dist/esm/utilities/asArray.js +6 -0
- package/dist/esm/utilities/historyMemo/index.d.ts +8 -1
- package/dist/esm/utilities/historyMemo/index.js +56 -20
- package/dist/esm/utilities/index.d.ts +2 -1
- package/dist/esm/utilities/index.js +2 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function asArray<T>(item: T | T[]): T[];
|
|
@@ -14,12 +14,19 @@ export declare class HistoryMemo {
|
|
|
14
14
|
private redoAvailable;
|
|
15
15
|
private undoAvailable;
|
|
16
16
|
private ring;
|
|
17
|
+
private isRecordingGrouped;
|
|
17
18
|
constructor(label?: string, size?: number);
|
|
18
19
|
get size(): number;
|
|
19
20
|
set size(newSize: number);
|
|
20
21
|
undo(items?: number): void;
|
|
21
|
-
undoIf(condition: (item: Memo) => boolean): boolean;
|
|
22
|
+
undoIf(condition: (item: Memo | Memo[]) => boolean): boolean;
|
|
23
|
+
private dispatchHistoryEvent;
|
|
22
24
|
redo(items?: number): void;
|
|
25
|
+
private initializeGroupItem;
|
|
26
|
+
startGroupRecording(): void;
|
|
27
|
+
private rollbackUnusedGroupItem;
|
|
28
|
+
endGroupRecording(): void;
|
|
29
|
+
private pushGrouped;
|
|
23
30
|
push(item: Memo | Memoable): Memo;
|
|
24
31
|
}
|
|
25
32
|
declare const DefaultHistoryMemo: HistoryMemo;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import eventTarget from '../../eventTarget';
|
|
2
|
+
import { asArray } from '../asArray';
|
|
2
3
|
const Events = {
|
|
3
4
|
HISTORY_UNDO: 'CORNERSTONE_TOOLS_HISTORY_UNDO',
|
|
4
5
|
HISTORY_REDO: 'CORNERSTONE_TOOLS_HISTORY_REDO',
|
|
@@ -9,6 +10,7 @@ export class HistoryMemo {
|
|
|
9
10
|
this.redoAvailable = 0;
|
|
10
11
|
this.undoAvailable = 0;
|
|
11
12
|
this.ring = new Array();
|
|
13
|
+
this.isRecordingGrouped = false;
|
|
12
14
|
this.label = label;
|
|
13
15
|
this._size = size;
|
|
14
16
|
}
|
|
@@ -25,16 +27,9 @@ export class HistoryMemo {
|
|
|
25
27
|
undo(items = 1) {
|
|
26
28
|
while (items > 0 && this.undoAvailable > 0) {
|
|
27
29
|
const item = this.ring[this.position];
|
|
28
|
-
item.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
detail: {
|
|
32
|
-
isUndo: true,
|
|
33
|
-
id: item.id,
|
|
34
|
-
operationType: item.operationType || 'annotation',
|
|
35
|
-
memo: item,
|
|
36
|
-
},
|
|
37
|
-
}));
|
|
30
|
+
for (const subitem of asArray(item).reverse()) {
|
|
31
|
+
subitem.restoreMemo(true);
|
|
32
|
+
this.dispatchHistoryEvent({ item: subitem, isUndo: true });
|
|
38
33
|
}
|
|
39
34
|
items--;
|
|
40
35
|
this.redoAvailable++;
|
|
@@ -49,20 +44,25 @@ export class HistoryMemo {
|
|
|
49
44
|
}
|
|
50
45
|
return false;
|
|
51
46
|
}
|
|
47
|
+
dispatchHistoryEvent({ item, isUndo }) {
|
|
48
|
+
if (item.id) {
|
|
49
|
+
eventTarget.dispatchEvent(new CustomEvent(isUndo ? Events.HISTORY_UNDO : Events.HISTORY_REDO, {
|
|
50
|
+
detail: {
|
|
51
|
+
isUndo,
|
|
52
|
+
id: item.id,
|
|
53
|
+
operationType: item.operationType || 'annotation',
|
|
54
|
+
memo: item,
|
|
55
|
+
},
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
52
59
|
redo(items = 1) {
|
|
53
60
|
while (items > 0 && this.redoAvailable > 0) {
|
|
54
61
|
const newPosition = (this.position + 1) % this.size;
|
|
55
62
|
const item = this.ring[newPosition];
|
|
56
|
-
item.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
detail: {
|
|
60
|
-
isUndo: false,
|
|
61
|
-
id: item.id,
|
|
62
|
-
operationType: item.operationType || 'annotation',
|
|
63
|
-
memo: item,
|
|
64
|
-
},
|
|
65
|
-
}));
|
|
63
|
+
for (const subitem of asArray(item).reverse()) {
|
|
64
|
+
subitem.restoreMemo(false);
|
|
65
|
+
this.dispatchHistoryEvent({ item: subitem, isUndo: false });
|
|
66
66
|
}
|
|
67
67
|
items--;
|
|
68
68
|
this.position = newPosition;
|
|
@@ -70,6 +70,39 @@ export class HistoryMemo {
|
|
|
70
70
|
this.redoAvailable--;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
+
initializeGroupItem() {
|
|
74
|
+
this.redoAvailable = 0;
|
|
75
|
+
if (this.undoAvailable < this._size) {
|
|
76
|
+
this.undoAvailable++;
|
|
77
|
+
}
|
|
78
|
+
this.position = (this.position + 1) % this._size;
|
|
79
|
+
this.ring[this.position] = [];
|
|
80
|
+
}
|
|
81
|
+
startGroupRecording() {
|
|
82
|
+
this.isRecordingGrouped = true;
|
|
83
|
+
this.initializeGroupItem();
|
|
84
|
+
}
|
|
85
|
+
rollbackUnusedGroupItem() {
|
|
86
|
+
this.ring[this.position] = undefined;
|
|
87
|
+
this.position = (this.position - 1) % this._size;
|
|
88
|
+
this.undoAvailable--;
|
|
89
|
+
}
|
|
90
|
+
endGroupRecording() {
|
|
91
|
+
this.isRecordingGrouped = false;
|
|
92
|
+
const lastItem = this.ring[this.position];
|
|
93
|
+
const lastItemIsEmpty = Array.isArray(lastItem) && lastItem.length === 0;
|
|
94
|
+
if (lastItemIsEmpty) {
|
|
95
|
+
this.rollbackUnusedGroupItem();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
pushGrouped(memo) {
|
|
99
|
+
const lastMemo = this.ring[this.position];
|
|
100
|
+
if (Array.isArray(lastMemo)) {
|
|
101
|
+
lastMemo.push(memo);
|
|
102
|
+
return memo;
|
|
103
|
+
}
|
|
104
|
+
throw new Error('Last item should be an array for grouped memos.');
|
|
105
|
+
}
|
|
73
106
|
push(item) {
|
|
74
107
|
if (!item) {
|
|
75
108
|
return;
|
|
@@ -80,6 +113,9 @@ export class HistoryMemo {
|
|
|
80
113
|
if (!memo) {
|
|
81
114
|
return;
|
|
82
115
|
}
|
|
116
|
+
if (this.isRecordingGrouped) {
|
|
117
|
+
return this.pushGrouped(memo);
|
|
118
|
+
}
|
|
83
119
|
this.redoAvailable = 0;
|
|
84
120
|
if (this.undoAvailable < this._size) {
|
|
85
121
|
this.undoAvailable++;
|
|
@@ -93,6 +93,7 @@ import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
|
|
|
93
93
|
export * as logger from './logger';
|
|
94
94
|
import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
|
|
95
95
|
import getPixelSpacingInformation from './getPixelSpacingInformation';
|
|
96
|
+
import { asArray } from './asArray';
|
|
96
97
|
declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
|
|
97
98
|
export * from './isEqual';
|
|
98
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, };
|
|
99
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
|
|
@@ -94,6 +94,7 @@ import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
|
|
|
94
94
|
export * as logger from './logger';
|
|
95
95
|
import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
|
|
96
96
|
import getPixelSpacingInformation from './getPixelSpacingInformation';
|
|
97
|
+
import { asArray } from './asArray';
|
|
97
98
|
const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
|
|
98
99
|
export * from './isEqual';
|
|
99
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, };
|
|
100
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "3.
|
|
1
|
+
export declare const version = "3.29.0";
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '3.
|
|
1
|
+
export const version = '3.29.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.29.0",
|
|
4
4
|
"description": "Cornerstone3D Core",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/esm/index.d.ts",
|
|
@@ -97,5 +97,5 @@
|
|
|
97
97
|
"type": "individual",
|
|
98
98
|
"url": "https://ohif.org/donate"
|
|
99
99
|
},
|
|
100
|
-
"gitHead": "
|
|
100
|
+
"gitHead": "4a25ee32eab069c6e6bbab5c9a274af38621de09"
|
|
101
101
|
}
|