@kitware/vtk.js 26.9.6 → 26.9.8
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/Common/Core/Base64.d.ts +2 -2
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager/CameraSynchronizer.js +129 -0
- package/Rendering/Misc/SynchronizableRenderWindow/BehaviorManager.js +55 -0
- package/Rendering/Misc/SynchronizableRenderWindow/ObjectManager.js +4 -1
- package/package.json +1 -1
package/Common/Core/Base64.d.ts
CHANGED
|
@@ -17,8 +17,8 @@ export function toArrayBuffer(b64Str: string): ArrayBuffer;
|
|
|
17
17
|
export function fromArrayBuffer(ab: ArrayBuffer): string;
|
|
18
18
|
|
|
19
19
|
interface Base64 {
|
|
20
|
-
toArrayBuffer,
|
|
21
|
-
fromArrayBuffer,
|
|
20
|
+
toArrayBuffer: typeof toArrayBuffer,
|
|
21
|
+
fromArrayBuffer: typeof fromArrayBuffer,
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export default Base64;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { newInstance as newInstance$1, obj, setGet, setGetArray, chain } from '../../../../macros.js';
|
|
2
|
+
import { l as normalize } from '../../../../Common/Core/Math/index.js';
|
|
3
|
+
|
|
4
|
+
var MODE_RESET_CAMERA = 'resetcamera';
|
|
5
|
+
var MODE_ORIENTATION = 'orientation';
|
|
6
|
+
var MODE_SAME = 'same';
|
|
7
|
+
var SynchronizationMode = {
|
|
8
|
+
MODE_RESET_CAMERA: MODE_RESET_CAMERA,
|
|
9
|
+
MODE_ORIENTATION: MODE_ORIENTATION,
|
|
10
|
+
MODE_SAME: MODE_SAME
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
function vtkCameraSynchronizer(publicAPI, model) {
|
|
14
|
+
model.classHierarchy.push('vtkCameraSynchronizer');
|
|
15
|
+
var cameraState = new Float64Array(9);
|
|
16
|
+
var direction = new Float64Array(3);
|
|
17
|
+
var subscriptions = [];
|
|
18
|
+
|
|
19
|
+
function updateListeners() {
|
|
20
|
+
while (subscriptions.length) {
|
|
21
|
+
subscriptions.pop().unsubscribe();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (!model.srcRenderer || !model.dstRenderer) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var srcCamera = model.srcRenderer.getActiveCamera();
|
|
29
|
+
var interactor = model.srcRenderer.getRenderWindow().getInteractor();
|
|
30
|
+
subscriptions.push(srcCamera.onModified(function () {
|
|
31
|
+
if (!interactor.isAnimating()) {
|
|
32
|
+
publicAPI.update();
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
subscriptions.push(interactor.onAnimation(publicAPI.update));
|
|
36
|
+
subscriptions.push(interactor.onEndAnimation(publicAPI.update));
|
|
37
|
+
} // Update listeners automatically
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
model._srcRendererChanged = updateListeners;
|
|
41
|
+
model._dstRendererChanged = updateListeners;
|
|
42
|
+
|
|
43
|
+
function updatePreviousValues(position, focalPoint, viewUp) {
|
|
44
|
+
if (cameraState[0] !== position[0] || cameraState[1] !== position[1] || cameraState[2] !== position[2] || cameraState[3] !== focalPoint[0] || cameraState[4] !== focalPoint[1] || cameraState[5] !== focalPoint[2] || cameraState[6] !== viewUp[0] || cameraState[7] !== viewUp[1] || cameraState[8] !== viewUp[2]) {
|
|
45
|
+
cameraState[0] = position[0];
|
|
46
|
+
cameraState[1] = position[1];
|
|
47
|
+
cameraState[2] = position[2];
|
|
48
|
+
cameraState[3] = focalPoint[0];
|
|
49
|
+
cameraState[4] = focalPoint[1];
|
|
50
|
+
cameraState[5] = focalPoint[2];
|
|
51
|
+
cameraState[6] = viewUp[0];
|
|
52
|
+
cameraState[7] = viewUp[1];
|
|
53
|
+
cameraState[8] = viewUp[2];
|
|
54
|
+
return cameraState;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
publicAPI.update = function () {
|
|
61
|
+
if (!model.active || !model.srcRenderer || !model.dstRenderer) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
var srcCamera = model.srcRenderer.getActiveCamera();
|
|
66
|
+
var dstCamera = model.dstRenderer.getActiveCamera();
|
|
67
|
+
var position = srcCamera.getReferenceByName('position');
|
|
68
|
+
var focalPoint = srcCamera.getReferenceByName('focalPoint');
|
|
69
|
+
var viewUp = srcCamera.getReferenceByName('viewUp');
|
|
70
|
+
var change = updatePreviousValues(position, focalPoint, viewUp);
|
|
71
|
+
|
|
72
|
+
if (!change) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (model.mode === MODE_ORIENTATION) {
|
|
77
|
+
direction[0] = change[0] - change[3];
|
|
78
|
+
direction[1] = change[1] - change[4];
|
|
79
|
+
direction[2] = change[2] - change[5];
|
|
80
|
+
normalize(direction);
|
|
81
|
+
dstCamera.setPosition(model.focalPoint[0] + model.distance * direction[0], model.focalPoint[1] + model.distance * direction[1], model.focalPoint[2] + model.distance * direction[2]);
|
|
82
|
+
dstCamera.setFocalPoint(model.focalPoint[0], model.focalPoint[1], model.focalPoint[2]);
|
|
83
|
+
dstCamera.setViewUp(change[6], change[7], change[8]);
|
|
84
|
+
} else {
|
|
85
|
+
dstCamera.setPosition(change[0], change[1], change[2]);
|
|
86
|
+
dstCamera.setFocalPoint(change[3], change[4], change[5]);
|
|
87
|
+
dstCamera.setViewUp(change[6], change[7], change[8]);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (model.mode === MODE_RESET_CAMERA) {
|
|
91
|
+
model.dstRenderer.resetCamera();
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
publicAPI.delete = chain(function () {
|
|
96
|
+
return publicAPI.setSrcRenderer(null);
|
|
97
|
+
}, // Will clear any listener
|
|
98
|
+
publicAPI.delete); // If src/dstRenderer provided at constructor register listeners
|
|
99
|
+
|
|
100
|
+
updateListeners();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var DEFAULT_VALUES = {
|
|
104
|
+
mode: MODE_ORIENTATION,
|
|
105
|
+
focalPoint: [0, 0, 0],
|
|
106
|
+
distance: 6.8,
|
|
107
|
+
active: true // srcRenderer: null,
|
|
108
|
+
// dstRenderer: null,
|
|
109
|
+
|
|
110
|
+
};
|
|
111
|
+
function extend(publicAPI, model) {
|
|
112
|
+
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
113
|
+
Object.assign(model, DEFAULT_VALUES, initialValues); // Build VTK API
|
|
114
|
+
|
|
115
|
+
obj(publicAPI, model);
|
|
116
|
+
setGet(publicAPI, model, ['mode', 'active', 'srcRenderer', 'dstRenderer', 'distance']);
|
|
117
|
+
setGetArray(publicAPI, model, ['focalPoint'], 3, 0); // Object methods
|
|
118
|
+
|
|
119
|
+
vtkCameraSynchronizer(publicAPI, model);
|
|
120
|
+
} // ----------------------------------------------------------------------------
|
|
121
|
+
|
|
122
|
+
var newInstance = newInstance$1(extend, 'vtkCameraSynchronizer');
|
|
123
|
+
var vtkCameraSynchronizer$1 = {
|
|
124
|
+
newInstance: newInstance,
|
|
125
|
+
extend: extend,
|
|
126
|
+
SynchronizationMode: SynchronizationMode
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export { DEFAULT_VALUES, MODE_ORIENTATION, MODE_RESET_CAMERA, MODE_SAME, SynchronizationMode, vtkCameraSynchronizer$1 as default, extend, newInstance };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import vtkCameraSynchronizer from './BehaviorManager/CameraSynchronizer.js';
|
|
2
|
+
|
|
3
|
+
var BEHAVIORS = {};
|
|
4
|
+
function applyBehaviors(renderWindow, state, context) {
|
|
5
|
+
if (!state.behaviors || !renderWindow.getSynchronizedViewId) {
|
|
6
|
+
return;
|
|
7
|
+
} // Apply auto behavior
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var rwId = renderWindow.getSynchronizedViewId();
|
|
11
|
+
|
|
12
|
+
if (!BEHAVIORS[rwId]) {
|
|
13
|
+
BEHAVIORS[rwId] = {};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var localBehaviors = BEHAVIORS[rwId];
|
|
17
|
+
|
|
18
|
+
if (state.behaviors.autoOrientation) {
|
|
19
|
+
var renderers = renderWindow.getRenderers();
|
|
20
|
+
|
|
21
|
+
if (!localBehaviors.autoOrientationAxes && renderers.length === 2) {
|
|
22
|
+
var srcRenderer = null;
|
|
23
|
+
var dstRenderer = null;
|
|
24
|
+
|
|
25
|
+
for (var i = 0; i < renderers.length; i++) {
|
|
26
|
+
var renderer = renderers[i];
|
|
27
|
+
|
|
28
|
+
if (renderer.getInteractive()) {
|
|
29
|
+
srcRenderer = renderer;
|
|
30
|
+
} else {
|
|
31
|
+
dstRenderer = renderer;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (srcRenderer && dstRenderer) {
|
|
36
|
+
localBehaviors.autoOrientationAxes = vtkCameraSynchronizer.newInstance({
|
|
37
|
+
srcRenderer: srcRenderer,
|
|
38
|
+
dstRenderer: dstRenderer
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (localBehaviors.autoOrientationAxes && renderers.length !== 2) {
|
|
44
|
+
localBehaviors.autoOrientationAxes.delete();
|
|
45
|
+
delete localBehaviors.autoOrientationAxes;
|
|
46
|
+
}
|
|
47
|
+
} // Process remaining behaviors...
|
|
48
|
+
// TODO - widgets(orientation, ...)
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
var BehaviorManager = {
|
|
52
|
+
applyBehaviors: applyBehaviors
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { applyBehaviors, BehaviorManager as default };
|
|
@@ -28,6 +28,7 @@ import vtkPiecewiseFunction from '../../../Common/DataModel/PiecewiseFunction.js
|
|
|
28
28
|
import vtkCubeAxesActor from '../../Core/CubeAxesActor.js';
|
|
29
29
|
import vtkScalarBarActor from '../../Core/ScalarBarActor.js';
|
|
30
30
|
import vtkAxesActor from '../../Core/AxesActor.js';
|
|
31
|
+
import BehaviorManager from './BehaviorManager.js';
|
|
31
32
|
|
|
32
33
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
33
34
|
|
|
@@ -424,7 +425,9 @@ function vtkRenderWindowUpdater(instance, state, context) {
|
|
|
424
425
|
|
|
425
426
|
instance.render(); // Now just do normal update process
|
|
426
427
|
|
|
427
|
-
genericUpdater(instance, state, context);
|
|
428
|
+
genericUpdater(instance, state, context); // Manage any associated behaviors
|
|
429
|
+
|
|
430
|
+
BehaviorManager.applyBehaviors(instance, state, context);
|
|
428
431
|
} // ----------------------------------------------------------------------------
|
|
429
432
|
|
|
430
433
|
|