@kitware/vtk.js 24.7.0 → 24.9.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 (58) hide show
  1. package/Common/DataModel/ITKHelper.d.ts +54 -0
  2. package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +1 -1
  3. package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +1 -1
  4. package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +1 -1
  5. package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +1 -1
  6. package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +1 -1
  7. package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +5 -2
  8. package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +3 -1
  9. package/Interaction/Manipulators/MouseRangeManipulator.js +23 -6
  10. package/Interaction/Style/InteractorStyleManipulator.js +1 -1
  11. package/Rendering/Core/RenderWindowInteractor.js +1 -2
  12. package/Widgets/Core/StateBuilder/manipulatorMixin.js +15 -15
  13. package/Widgets/Core/WidgetManager.js +11 -2
  14. package/Widgets/Manipulators/AbstractManipulator.d.ts +221 -0
  15. package/Widgets/Manipulators/AbstractManipulator.js +57 -0
  16. package/Widgets/Manipulators/LineManipulator.d.ts +8 -74
  17. package/Widgets/Manipulators/LineManipulator.js +13 -10
  18. package/Widgets/Manipulators/PlaneManipulator.d.ts +8 -74
  19. package/Widgets/Manipulators/PlaneManipulator.js +12 -9
  20. package/Widgets/Manipulators/TrackballManipulator.d.ts +8 -44
  21. package/Widgets/Manipulators/TrackballManipulator.js +14 -11
  22. package/Widgets/Representations/ArrowHandleRepresentation.js +12 -3
  23. package/Widgets/Representations/CircleContextRepresentation.js +12 -3
  24. package/Widgets/Representations/CubeHandleRepresentation.js +13 -4
  25. package/Widgets/Representations/SphereContextRepresentation.js +12 -3
  26. package/Widgets/Representations/SphereHandleRepresentation.js +12 -3
  27. package/Widgets/Widgets3D/AngleWidget/behavior.js +7 -4
  28. package/Widgets/Widgets3D/AngleWidget/state.js +2 -2
  29. package/Widgets/Widgets3D/AngleWidget.js +19 -2
  30. package/Widgets/Widgets3D/DistanceWidget/behavior.js +7 -2
  31. package/Widgets/Widgets3D/DistanceWidget/state.js +2 -2
  32. package/Widgets/Widgets3D/DistanceWidget.js +19 -2
  33. package/Widgets/Widgets3D/EllipseWidget.js +4 -3
  34. package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +3 -4
  35. package/Widgets/Widgets3D/ImageCroppingWidget.js +42 -13
  36. package/Widgets/Widgets3D/ImplicitPlaneWidget.js +5 -5
  37. package/Widgets/Widgets3D/LabelWidget/behavior.js +6 -2
  38. package/Widgets/Widgets3D/LabelWidget/state.js +2 -2
  39. package/Widgets/Widgets3D/LabelWidget.js +18 -3
  40. package/Widgets/Widgets3D/LineWidget/behavior.js +10 -3
  41. package/Widgets/Widgets3D/LineWidget/state.js +1 -1
  42. package/Widgets/Widgets3D/LineWidget.js +18 -1
  43. package/Widgets/Widgets3D/PaintWidget/behavior.js +12 -9
  44. package/Widgets/Widgets3D/PaintWidget.js +24 -8
  45. package/Widgets/Widgets3D/PolyLineWidget/behavior.js +11 -4
  46. package/Widgets/Widgets3D/PolyLineWidget/state.js +2 -2
  47. package/Widgets/Widgets3D/PolyLineWidget.js +21 -2
  48. package/Widgets/Widgets3D/RectangleWidget.js +6 -5
  49. package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +4 -4
  50. package/Widgets/Widgets3D/ShapeWidget/behavior.js +9 -5
  51. package/Widgets/Widgets3D/ShapeWidget.js +12 -2
  52. package/Widgets/Widgets3D/SphereWidget/behavior.js +4 -3
  53. package/Widgets/Widgets3D/SphereWidget.js +23 -2
  54. package/Widgets/Widgets3D/SplineWidget/behavior.js +7 -3
  55. package/Widgets/Widgets3D/SplineWidget/state.js +2 -2
  56. package/Widgets/Widgets3D/SplineWidget.js +21 -2
  57. package/index.d.ts +3 -1
  58. package/package.json +1 -1
@@ -19,9 +19,15 @@ function widgetBehavior(publicAPI, model) {
19
19
  }
20
20
 
21
21
  function updateMoveHandle(callData) {
22
- model.manipulator.setOrigin(model._camera.getFocalPoint());
23
- model.manipulator.setNormal(model._camera.getDirectionOfProjection());
24
- var worldCoords = model.manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
22
+ var _model$activeState$ge, _model$activeState, _model$activeState$ge2;
23
+
24
+ var manipulator = (_model$activeState$ge = (_model$activeState = model.activeState) === null || _model$activeState === void 0 ? void 0 : (_model$activeState$ge2 = _model$activeState.getManipulator) === null || _model$activeState$ge2 === void 0 ? void 0 : _model$activeState$ge2.call(_model$activeState)) !== null && _model$activeState$ge !== void 0 ? _model$activeState$ge : model.manipulator;
25
+
26
+ if (!manipulator) {
27
+ return macro.VOID;
28
+ }
29
+
30
+ var worldCoords = manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
25
31
 
26
32
  if (worldCoords.length && (model.activeState === model.widgetState.getMoveHandle() || isDragging)) {
27
33
  model.activeState.setOrigin(worldCoords);
@@ -72,6 +78,7 @@ function widgetBehavior(publicAPI, model) {
72
78
  newHandle.setOrigin.apply(newHandle, _toConsumableArray(moveHandle.getOrigin()));
73
79
  newHandle.setColor(moveHandle.getColor());
74
80
  newHandle.setScale1(moveHandle.getScale1());
81
+ newHandle.setManipulator(model.manipulator);
75
82
  } else {
76
83
  isDragging = true;
77
84
 
@@ -88,7 +95,7 @@ function widgetBehavior(publicAPI, model) {
88
95
 
89
96
 
90
97
  publicAPI.handleMouseMove = function (callData) {
91
- if (model.pickable && model.dragable && model.manipulator && model.activeState && model.activeState.getActive() && !ignoreKey(callData)) {
98
+ if (model.pickable && model.dragable && model.activeState && model.activeState.getActive() && !ignoreKey(callData)) {
92
99
  if (updateMoveHandle(callData) === macro.EVENT_ABORT) {
93
100
  return macro.EVENT_ABORT;
94
101
  }
@@ -3,7 +3,7 @@ import vtkStateBuilder from '../../Core/StateBuilder.js';
3
3
  function generateState() {
4
4
  return vtkStateBuilder.createBuilder().addStateFromMixin({
5
5
  labels: ['moveHandle'],
6
- mixins: ['origin', 'color', 'scale1', 'visible'],
6
+ mixins: ['origin', 'color', 'scale1', 'visible', 'manipulator'],
7
7
  name: 'moveHandle',
8
8
  initialValues: {
9
9
  // when scaleInPixels=true, the handles have 30px height
@@ -12,7 +12,7 @@ function generateState() {
12
12
  }
13
13
  }).addDynamicMixinState({
14
14
  labels: ['handles'],
15
- mixins: ['origin', 'color', 'scale1', 'visible'],
15
+ mixins: ['origin', 'color', 'scale1', 'visible', 'manipulator'],
16
16
  name: 'handle',
17
17
  initialValues: {
18
18
  scale1: 30
@@ -1,3 +1,4 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
1
2
  import macro from '../../macros.js';
2
3
  import vtkAbstractWidgetFactory from '../Core/AbstractWidgetFactory.js';
3
4
  import vtkPlanePointManipulator from '../Manipulators/PlaneManipulator.js';
@@ -8,11 +9,17 @@ import widgetBehavior from './PolyLineWidget/behavior.js';
8
9
  import generateState from './PolyLineWidget/state.js';
9
10
  import { ViewTypes } from '../Core/WidgetManager/Constants.js';
10
11
 
12
+ 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; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
15
  // Factory
12
16
  // ----------------------------------------------------------------------------
13
17
 
14
18
  function vtkPolyLineWidget(publicAPI, model) {
15
- model.classHierarchy.push('vtkPolyLineWidget'); // --- Widget Requirement ---------------------------------------------------
19
+ model.classHierarchy.push('vtkPolyLineWidget');
20
+
21
+ var superClass = _objectSpread({}, publicAPI); // --- Widget Requirement ---------------------------------------------------
22
+
16
23
 
17
24
  model.methodsToLink = ['activeColor', 'activeScaleFactor', 'closePolyLine', 'defaultScale', 'glyphResolution', 'lineThickness', 'useActiveColor', 'scaleInPixels'];
18
25
  model.behavior = widgetBehavior;
@@ -51,6 +58,15 @@ function vtkPolyLineWidget(publicAPI, model) {
51
58
  labels: ['handles', 'moveHandle']
52
59
  }];
53
60
  }
61
+ }; // --- Public methods -------------------------------------------------------
62
+
63
+
64
+ publicAPI.setManipulator = function (manipulator) {
65
+ superClass.setManipulator(manipulator);
66
+ model.widgetState.getMoveHandle().setManipulator(manipulator);
67
+ model.widgetState.getHandleList().forEach(function (handle) {
68
+ handle.setManipulator(manipulator);
69
+ });
54
70
  }; // --------------------------------------------------------------------------
55
71
  // initialization
56
72
  // --------------------------------------------------------------------------
@@ -61,7 +77,10 @@ function vtkPolyLineWidget(publicAPI, model) {
61
77
  model.widgetState.getMoveHandle().setOrigin(center);
62
78
  }); // Default manipulator
63
79
 
64
- model.manipulator = vtkPlanePointManipulator.newInstance();
80
+ publicAPI.setManipulator(model.manipulator || vtkPlanePointManipulator.newInstance({
81
+ useCameraFocalPoint: true,
82
+ useCameraNormal: true
83
+ }));
65
84
  } // ----------------------------------------------------------------------------
66
85
 
67
86
 
@@ -50,15 +50,16 @@ function vtkRectangleWidget(publicAPI, model) {
50
50
  }; // --------------------------------------------------------------------------
51
51
  // initialization
52
52
  // --------------------------------------------------------------------------
53
- // Default manipulator
54
53
 
55
54
 
56
- model.manipulator = vtkPlanePointManipulator.newInstance();
57
55
  model.widgetState = generateState();
56
+ model.manipulator = vtkPlanePointManipulator.newInstance({
57
+ useCameraNormal: true
58
+ });
58
59
  } // ----------------------------------------------------------------------------
59
60
 
60
61
 
61
- function defaultValues(initalValues) {
62
+ function defaultValues(initialValues) {
62
63
  var _None;
63
64
 
64
65
  return _objectSpread({
@@ -67,14 +68,14 @@ function defaultValues(initalValues) {
67
68
  Shift: _defineProperty({}, BehaviorCategory.RATIO, ShapeBehavior[BehaviorCategory.RATIO].FIXED),
68
69
  Control: _defineProperty({}, BehaviorCategory.POINTS, ShapeBehavior[BehaviorCategory.POINTS].CENTER_TO_CORNER)
69
70
  }
70
- }, initalValues);
71
+ }, initialValues);
71
72
  } // ----------------------------------------------------------------------------
72
73
 
73
74
 
74
75
  function extend(publicAPI, model) {
75
76
  var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
76
77
  vtkShapeWidget.extend(publicAPI, model, defaultValues(initialValues));
77
- macro.setGet(publicAPI, model, ['manipulator', 'widgetState']);
78
+ macro.setGet(publicAPI, model, ['widgetState']);
78
79
  vtkRectangleWidget(publicAPI, model);
79
80
  } // ----------------------------------------------------------------------------
80
81
 
@@ -63,8 +63,8 @@ function widgetBehavior(publicAPI, model) {
63
63
  isDragging = true;
64
64
  var viewType = model.widgetState.getActiveViewType();
65
65
  var currentPlaneNormal = model.widgetState.getPlanes()[viewType].normal;
66
- model.planeManipulator.setOrigin(model.widgetState.getCenter());
67
- model.planeManipulator.setNormal(currentPlaneNormal);
66
+ model.planeManipulator.setWidgetOrigin(model.widgetState.getCenter());
67
+ model.planeManipulator.setWidgetNormal(currentPlaneNormal);
68
68
  publicAPI.startInteraction();
69
69
  } else if (model.widgetState.getScrollingMethod() === ScrollingMethods.LEFT_MOUSE_BUTTON) {
70
70
  publicAPI.startScrolling(callData.position);
@@ -215,7 +215,7 @@ function widgetBehavior(publicAPI, model) {
215
215
  var dot$1 = dot(currentLineVector, otherLineVector); // lines are colinear, translate along perpendicular axis from current line
216
216
 
217
217
  if (dot$1 === 1 || dot$1 === -1) {
218
- cross(currentLineVector, model.planeManipulator.getNormal(), axisTranslation);
218
+ cross(currentLineVector, model.planeManipulator.getWidgetNormal(), axisTranslation);
219
219
  }
220
220
 
221
221
  var closestPoint = [];
@@ -249,7 +249,7 @@ function widgetBehavior(publicAPI, model) {
249
249
 
250
250
  publicAPI[InteractionMethodsName.RotateLine] = function (calldata) {
251
251
  var activeLine = model.widgetState.getActiveLineState();
252
- var planeNormal = model.planeManipulator.getNormal();
252
+ var planeNormal = model.planeManipulator.getWidgetNormal();
253
253
  var worldCoords = model.planeManipulator.handleEvent(calldata, model._apiSpecificRenderWindow);
254
254
  var center = model.widgetState.getCenter();
255
255
  var previousLineDirection = subtract(activeLine.getPoint1(), activeLine.getPoint2(), []);
@@ -241,8 +241,9 @@ function widgetBehavior(publicAPI, model) {
241
241
  var _model$_apiSpecificRe, _model$_apiSpecificRe2, _model$_apiSpecificRe5;
242
242
 
243
243
  var worldMargin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
244
- var viewPlaneOrigin = model.manipulator.getOrigin();
245
- var viewPlaneNormal = model.manipulator.getNormal();
244
+ var viewPlaneOrigin = vtkBoundingBox.getCenter(worldBounds);
245
+
246
+ var viewPlaneNormal = model._renderer.getActiveCamera().getDirectionOfProjection();
246
247
 
247
248
  var viewUp = model._renderer.getActiveCamera().getViewUp();
248
249
 
@@ -345,7 +346,11 @@ function widgetBehavior(publicAPI, model) {
345
346
 
346
347
 
347
348
  publicAPI.handleMouseMove = function (callData) {
348
- if (!model.activeState || !model.activeState.getActive() || !model.pickable || !model.dragable || !model.manipulator) {
349
+ var _model$activeState$ge, _model$activeState, _model$activeState$ge2;
350
+
351
+ var manipulator = (_model$activeState$ge = (_model$activeState = model.activeState) === null || _model$activeState === void 0 ? void 0 : (_model$activeState$ge2 = _model$activeState.getManipulator) === null || _model$activeState$ge2 === void 0 ? void 0 : _model$activeState$ge2.call(_model$activeState)) !== null && _model$activeState$ge !== void 0 ? _model$activeState$ge : model.manipulator;
352
+
353
+ if (!manipulator || !model.activeState || !model.activeState.getActive() || !model.pickable || !model.dragable) {
349
354
  return macro.VOID;
350
355
  }
351
356
 
@@ -361,10 +366,9 @@ function widgetBehavior(publicAPI, model) {
361
366
  model.shapeHandle.setUp(up);
362
367
  model.shapeHandle.setRight(right);
363
368
  model.shapeHandle.setDirection(normal);
364
- model.manipulator.setNormal(normal);
365
369
  }
366
370
 
367
- var worldCoords = model.manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
371
+ var worldCoords = manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
368
372
 
369
373
  if (!worldCoords.length) {
370
374
  return macro.VOID;
@@ -9,14 +9,24 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
9
9
 
10
10
  function vtkShapeWidget(publicAPI, model) {
11
11
  model.classHierarchy.push('vtkShapeWidget');
12
+
13
+ var superClass = _objectSpread({}, publicAPI);
14
+
12
15
  model.methodsToLink = ['scaleInPixels', 'textProps', 'fontProperties'];
16
+
17
+ publicAPI.setManipulator = function (manipulator) {
18
+ superClass.setManipulator(manipulator);
19
+ model.widgetState.getStatesWithLabel('moveHandle').forEach(function (handle) {
20
+ return handle.setManipulator(manipulator);
21
+ });
22
+ };
13
23
  }
14
24
 
15
25
  function defaultValues(initialValues) {
16
26
  var _None;
17
27
 
18
28
  return _objectSpread({
19
- manipulator: null,
29
+ // manipulator: null,
20
30
  modifierBehavior: {
21
31
  None: (_None = {}, _defineProperty(_None, BehaviorCategory.PLACEMENT, ShapeBehavior[BehaviorCategory.PLACEMENT].CLICK_AND_DRAG), _defineProperty(_None, BehaviorCategory.POINTS, ShapeBehavior[BehaviorCategory.POINTS].CORNER_TO_CORNER), _defineProperty(_None, BehaviorCategory.RATIO, ShapeBehavior[BehaviorCategory.RATIO].FREE), _None)
22
32
  },
@@ -29,7 +39,7 @@ function extend(publicAPI, model) {
29
39
  var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
30
40
  Object.assign(model, defaultValues(initialValues));
31
41
  vtkAbstractWidgetFactory.extend(publicAPI, model, initialValues);
32
- macro.setGet(publicAPI, model, ['modifierBehavior', 'resetAfterPointPlacement']);
42
+ macro.setGet(publicAPI, model, ['manipulator', 'modifierBehavior', 'resetAfterPointPlacement']);
33
43
  vtkShapeWidget(publicAPI, model);
34
44
  } // ----------------------------------------------------------------------------
35
45
 
@@ -12,8 +12,6 @@ function widgetBehavior(publicAPI, model) {
12
12
  model.isDragging = false; // The last world coordinate of the mouse cursor during dragging.
13
13
 
14
14
  model.previousPosition = null;
15
- centerHandle.setManipulator(model.manipulator);
16
- borderHandle.setManipulator(model.manipulator);
17
15
  model.classHierarchy.push('vtkSphereWidgetProp');
18
16
  moveHandle.setVisible(true);
19
17
  centerHandle.setVisible(false);
@@ -55,7 +53,10 @@ function widgetBehavior(publicAPI, model) {
55
53
  }
56
54
 
57
55
  function currentWorldCoords(e) {
58
- return model.manipulator.handleEvent(e, model._apiSpecificRenderWindow);
56
+ var _model$activeState$ge, _model$activeState, _model$activeState$ge2;
57
+
58
+ var manipulator = (_model$activeState$ge = (_model$activeState = model.activeState) === null || _model$activeState === void 0 ? void 0 : (_model$activeState$ge2 = _model$activeState.getManipulator) === null || _model$activeState$ge2 === void 0 ? void 0 : _model$activeState$ge2.call(_model$activeState)) !== null && _model$activeState$ge !== void 0 ? _model$activeState$ge : model.manipulator;
59
+ return manipulator.handleEvent(e, model._apiSpecificRenderWindow);
59
60
  } // Update the sphere's center and radius. Example:
60
61
  // handle.setCenterAndRadius([1,2,3], 10);
61
62
 
@@ -1,3 +1,4 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
1
2
  import { f as distance2BetweenPoints } from '../../Common/Core/Math/index.js';
2
3
  import vtkAbstractWidgetFactory from '../Core/AbstractWidgetFactory.js';
3
4
  import vtkPlanePointManipulator from '../Manipulators/PlaneManipulator.js';
@@ -7,8 +8,15 @@ import macro from '../../macros.js';
7
8
  import widgetBehavior from './SphereWidget/behavior.js';
8
9
  import stateGenerator from './SphereWidget/state.js';
9
10
 
11
+ 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; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+
10
15
  function vtkSphereWidget(publicAPI, model) {
11
16
  model.classHierarchy.push('vtkSphereWidget');
17
+
18
+ var superClass = _objectSpread({}, publicAPI);
19
+
12
20
  model.behavior = widgetBehavior;
13
21
 
14
22
  publicAPI.getRepresentationsForViewType = function (viewType) {
@@ -34,7 +42,8 @@ function vtkSphereWidget(publicAPI, model) {
34
42
  builder: vtkSphereContextRepresentation,
35
43
  labels: ['sphereHandle']
36
44
  }];
37
- };
45
+ }; // --- Public methods -------------------------------------------------------
46
+
38
47
 
39
48
  publicAPI.getRadius = function () {
40
49
  var h1 = model.widgetState.getCenterHandle();
@@ -42,8 +51,20 @@ function vtkSphereWidget(publicAPI, model) {
42
51
  return Math.sqrt(distance2BetweenPoints(h1.getOrigin(), h2.getOrigin()));
43
52
  };
44
53
 
45
- model.manipulator = vtkPlanePointManipulator.newInstance();
54
+ publicAPI.setManipulator = function (manipulator) {
55
+ superClass.setManipulator(manipulator);
56
+ model.widgetState.getMoveHandle().setManipulator(manipulator);
57
+ model.widgetState.getCenterHandle().setManipulator(manipulator);
58
+ model.widgetState.getBorderHandle().setManipulator(manipulator);
59
+ }; // --------------------------------------------------------------------------
60
+ // initialization
61
+ // --------------------------------------------------------------------------
62
+
63
+
46
64
  model.widgetState = stateGenerator();
65
+ publicAPI.setManipulator(model.manipulator || vtkPlanePointManipulator.newInstance({
66
+ useCameraNormal: true
67
+ }));
47
68
  }
48
69
 
49
70
  function extend(publicAPI, model) {
@@ -32,6 +32,7 @@ function widgetBehavior(publicAPI, model) {
32
32
 
33
33
  model.lastHandle.setColor(model.moveHandle.getColor());
34
34
  model.lastHandle.setScale1(model.moveHandle.getScale1());
35
+ model.lastHandle.setManipulator(model.manipulator);
35
36
 
36
37
  if (!model.firstHandle) {
37
38
  model.firstHandle = model.lastHandle;
@@ -247,12 +248,15 @@ function widgetBehavior(publicAPI, model) {
247
248
 
248
249
 
249
250
  publicAPI.handleMouseMove = function (callData) {
250
- if (!model.activeState || !model.activeState.getActive() || !model.pickable || !model.manipulator) {
251
+ var _model$activeState$ge, _model$activeState, _model$activeState$ge2;
252
+
253
+ var manipulator = (_model$activeState$ge = (_model$activeState = model.activeState) === null || _model$activeState === void 0 ? void 0 : (_model$activeState$ge2 = _model$activeState.getManipulator) === null || _model$activeState$ge2 === void 0 ? void 0 : _model$activeState$ge2.call(_model$activeState)) !== null && _model$activeState$ge !== void 0 ? _model$activeState$ge : model.manipulator;
254
+
255
+ if (!manipulator || !model.activeState || !model.activeState.getActive() || !model.pickable) {
251
256
  return macro.VOID;
252
257
  }
253
258
 
254
- model.manipulator.setNormal(model._camera.getDirectionOfProjection());
255
- var worldCoords = model.manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
259
+ var worldCoords = manipulator.handleEvent(callData, model._apiSpecificRenderWindow);
256
260
  var hoveredHandle = getHoveredHandle();
257
261
 
258
262
  if (hoveredHandle) {
@@ -16,7 +16,7 @@ function generateState() {
16
16
  initialValue: 0
17
17
  }).addStateFromMixin({
18
18
  labels: ['moveHandle'],
19
- mixins: ['origin', 'color', 'scale1', 'visible'],
19
+ mixins: ['origin', 'color', 'scale1', 'visible', 'manipulator'],
20
20
  name: 'moveHandle',
21
21
  initialValues: {
22
22
  scale1: 0.05,
@@ -24,7 +24,7 @@ function generateState() {
24
24
  }
25
25
  }).addDynamicMixinState({
26
26
  labels: ['handles'],
27
- mixins: ['origin', 'color', 'scale1', 'visible'],
27
+ mixins: ['origin', 'color', 'scale1', 'visible', 'manipulator'],
28
28
  name: 'handle',
29
29
  initialValues: {
30
30
  scale1: 0.05
@@ -1,3 +1,4 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
1
2
  import macro from '../../macros.js';
2
3
  import vtkAbstractWidgetFactory from '../Core/AbstractWidgetFactory.js';
3
4
  import vtkPlanePointManipulator from '../Manipulators/PlaneManipulator.js';
@@ -7,11 +8,17 @@ import widgetBehavior from './SplineWidget/behavior.js';
7
8
  import generateState from './SplineWidget/state.js';
8
9
  import { ViewTypes } from '../Core/WidgetManager/Constants.js';
9
10
 
11
+ 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; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
14
  // Factory
11
15
  // ----------------------------------------------------------------------------
12
16
 
13
17
  function vtkSplineWidget(publicAPI, model) {
14
- model.classHierarchy.push('vtkSplineWidget'); // --- Widget Requirement ---------------------------------------------------
18
+ model.classHierarchy.push('vtkSplineWidget');
19
+
20
+ var superClass = _objectSpread({}, publicAPI); // --- Widget Requirement ---------------------------------------------------
21
+
15
22
 
16
23
  model.methodsToLink = ['outputBorder', 'fill', 'borderColor', 'errorBorderColor'];
17
24
  model.behavior = widgetBehavior;
@@ -35,17 +42,29 @@ function vtkSplineWidget(publicAPI, model) {
35
42
  labels: ['handles', 'moveHandle']
36
43
  }];
37
44
  }
45
+ }; // --- Public methods -------------------------------------------------------
46
+
47
+
48
+ publicAPI.setManipulator = function (manipulator) {
49
+ superClass.setManipulator(manipulator);
50
+ model.widgetState.getMoveHandle().setManipulator(manipulator);
51
+ model.widgetState.getHandleList().forEach(function (handle) {
52
+ handle.setManipulator(manipulator);
53
+ });
38
54
  }; // --------------------------------------------------------------------------
39
55
  // initialization
40
56
  // --------------------------------------------------------------------------
41
57
  // Default manipulator
42
58
 
43
59
 
44
- model.manipulator = vtkPlanePointManipulator.newInstance();
60
+ publicAPI.setManipulator(model.manipulator || model.manipulator || vtkPlanePointManipulator.newInstance({
61
+ useCameraNormal: true
62
+ }));
45
63
  } // ----------------------------------------------------------------------------
46
64
 
47
65
 
48
66
  var DEFAULT_VALUES = {
67
+ // manipulator: null,
49
68
  freehandMinDistance: 0.1,
50
69
  allowFreehand: true,
51
70
  resolution: 32,
package/index.d.ts CHANGED
@@ -26,6 +26,7 @@
26
26
  /// <reference path="./Common/DataModel/DataSetAttributes/FieldData.d.ts" />
27
27
  /// <reference path="./Common/DataModel/DataSetAttributes.d.ts" />
28
28
  /// <reference path="./Common/DataModel/ImageData.d.ts" />
29
+ /// <reference path="./Common/DataModel/ITKHelper.d.ts" />
29
30
  /// <reference path="./Common/DataModel/KochanekSpline1D.d.ts" />
30
31
  /// <reference path="./Common/DataModel/Line.d.ts" />
31
32
  /// <reference path="./Common/DataModel/PiecewiseFunction.d.ts" />
@@ -43,8 +44,8 @@
43
44
  /// <reference path="./Filters/General/ImageCropFilter.d.ts" />
44
45
  /// <reference path="./Filters/General/ImageOutlineFilter.d.ts" />
45
46
  /// <reference path="./Filters/General/ImageSliceFilter.d.ts" />
46
- /// <reference path="./Filters/General/LineFilter.d.ts" />
47
47
  /// <reference path="./Filters/General/ImageStreamline.d.ts" />
48
+ /// <reference path="./Filters/General/LineFilter.d.ts" />
48
49
  /// <reference path="./Filters/General/OutlineFilter.d.ts" />
49
50
  /// <reference path="./Filters/General/TriangleFilter.d.ts" />
50
51
  /// <reference path="./Filters/General/TubeFilter.d.ts" />
@@ -138,6 +139,7 @@
138
139
  /// <reference path="./Rendering/SceneGraph/RenderPass.d.ts" />
139
140
  /// <reference path="./Rendering/SceneGraph/ViewNode.d.ts" />
140
141
  /// <reference path="./Rendering/SceneGraph/ViewNodeFactory.d.ts" />
142
+ /// <reference path="./Widgets/Manipulators/AbstractManipulator.d.ts" />
141
143
  /// <reference path="./Widgets/Manipulators/LineManipulator.d.ts" />
142
144
  /// <reference path="./Widgets/Manipulators/PlaneManipulator.d.ts" />
143
145
  /// <reference path="./Widgets/Manipulators/TrackballManipulator.d.ts" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitware/vtk.js",
3
- "version": "24.7.0",
3
+ "version": "24.9.0",
4
4
  "description": "Visualization Toolkit for the Web",
5
5
  "keywords": [
6
6
  "3d",