@kitware/vtk.js 26.9.7 → 26.9.9

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.
@@ -6,7 +6,7 @@ import vtkLookupTableProxy from './LookupTableProxy';
6
6
  import vtkPiecewiseFunctionProxy from './PiecewiseFunctionProxy';
7
7
  import { VtkProxy } from './../../macros';
8
8
 
9
- export type ProxyConfiguration = Object;
9
+ export type ProxyConfiguration = object;
10
10
 
11
11
  export interface ProxyRegistrationChangeInfo {
12
12
  action: 'register' | 'unregister';
@@ -16,6 +16,10 @@ export interface ProxyRegistrationChangeInfo {
16
16
  proxy: VtkProxy;
17
17
  }
18
18
 
19
+ export interface IProxyManagerInitialValues {
20
+ proxyConfiguration?: ProxyConfiguration;
21
+ }
22
+
19
23
  export interface vtkProxyManager extends vtkObject {
20
24
  // core //
21
25
 
@@ -78,4 +82,34 @@ export interface vtkProxyManager extends vtkObject {
78
82
  ): void;
79
83
  }
80
84
 
85
+ /**
86
+ * Decorates a given publicAPI + model with vtkProxyManager characteristics.
87
+ *
88
+ * @param publicAPI
89
+ * @param model
90
+ * @param {IProxyManagerInitialValues} [initialValues]
91
+ */
92
+ export function extend(
93
+ publicAPI: object,
94
+ model: object,
95
+ initialValues?: IProxyManagerInitialValues
96
+ ): void;
97
+
98
+ /**
99
+ * Creates a vtkProxyManager.
100
+ * @param {IProxyManagerInitialValues} [initialValues]
101
+ */
102
+ export function newInstance(
103
+ initialValues?: IProxyManagerInitialValues
104
+ ): vtkProxyManager;
105
+
106
+ /**
107
+ * vtkProxyManager is the central manager for managing proxy resources
108
+ * in vtk.js.
109
+ */
110
+ export declare const vtkProxyManager: {
111
+ newInstance: typeof newInstance;
112
+ extend: typeof extend;
113
+ };
114
+
81
115
  export default vtkProxyManager;
@@ -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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitware/vtk.js",
3
- "version": "26.9.7",
3
+ "version": "26.9.9",
4
4
  "description": "Visualization Toolkit for the Web",
5
5
  "keywords": [
6
6
  "3d",