@kitware/vtk.js 34.11.0 → 34.11.2

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 (72) hide show
  1. package/Common/Core/DataArray.js +2 -1
  2. package/Common/Core/Points.d.ts +11 -1
  3. package/Common/Core/Points.js +33 -18
  4. package/Common/DataModel/BoundingBox.d.ts +18 -4
  5. package/Common/DataModel/BoundingBox.js +10 -3
  6. package/Common/DataModel/Cell.js +4 -34
  7. package/Common/DataModel/DataSet.d.ts +7 -0
  8. package/Common/DataModel/DataSet.js +6 -0
  9. package/Common/DataModel/DataSetAttributes/FieldData.d.ts +6 -2
  10. package/Common/DataModel/DataSetAttributes.d.ts +2 -1
  11. package/Common/DataModel/ImageData.d.ts +8 -0
  12. package/Common/DataModel/ImageData.js +14 -1
  13. package/Common/DataModel/PointSet.d.ts +6 -0
  14. package/Common/DataModel/PointSet.js +10 -0
  15. package/Common/DataModel/PolyData.d.ts +6 -0
  16. package/Common/DataModel/PolyData.js +7 -0
  17. package/Filters/Core/Cutter.js +1 -1
  18. package/Filters/Core/PolyDataNormals.js +1 -1
  19. package/Filters/Core/ThresholdPoints.js +1 -2
  20. package/Filters/General/AppendPolyData.js +1 -1
  21. package/Filters/General/Calculator.js +1 -1
  22. package/Filters/General/ClipClosedSurface.js +2 -2
  23. package/Filters/General/ClosedPolyLineToSurfaceFilter.js +1 -1
  24. package/Filters/General/ContourLoopExtraction.js +2 -4
  25. package/Filters/General/ContourTriangulator.js +1 -2
  26. package/Filters/General/ImageCropFilter.js +7 -10
  27. package/Filters/General/ImageMarchingCubes.js +1 -1
  28. package/Filters/General/ImageMarchingSquares.js +1 -1
  29. package/Filters/General/ImageOutlineFilter.js +2 -1
  30. package/Filters/General/ImageSliceFilter.js +2 -1
  31. package/Filters/General/ImageStreamline.js +1 -1
  32. package/Filters/General/LineFilter.js +1 -1
  33. package/Filters/General/MoleculeToRepresentation.js +2 -2
  34. package/Filters/General/OutlineFilter.js +1 -1
  35. package/Filters/General/ScalarToRGBA.js +2 -1
  36. package/Filters/General/ShrinkPolyData.js +1 -1
  37. package/Filters/General/TransformPolyDataFilter.js +1 -1
  38. package/Filters/General/TriangleFilter.js +1 -1
  39. package/Filters/General/TubeFilter.js +1 -2
  40. package/Filters/General/WarpScalar.js +1 -1
  41. package/Filters/General/WindowedSincPolyDataFilter.js +1 -1
  42. package/Filters/Sources/ArcSource.js +1 -1
  43. package/Filters/Sources/Arrow2DSource.js +6 -9
  44. package/Filters/Sources/ArrowSource.js +2 -8
  45. package/Filters/Sources/CircleSource.js +3 -10
  46. package/Filters/Sources/ConcentricCylinderSource.js +5 -8
  47. package/Filters/Sources/ConeSource.js +3 -10
  48. package/Filters/Sources/CubeSource.js +3 -9
  49. package/Filters/Sources/Cursor3D.js +1 -4
  50. package/Filters/Sources/CylinderSource.js +3 -10
  51. package/Filters/Sources/DiskSource.js +1 -5
  52. package/Filters/Sources/EllipseArcSource.js +1 -1
  53. package/Filters/Sources/ImageGridSource.js +0 -3
  54. package/Filters/Sources/LineSource.js +1 -4
  55. package/Filters/Sources/PlaneSource.js +1 -4
  56. package/Filters/Sources/PlatonicSolidSource.js +1 -1
  57. package/Filters/Sources/PointSource.js +1 -4
  58. package/Filters/Sources/RTAnalyticSource.js +0 -3
  59. package/Filters/Sources/SLICSource.js +1 -4
  60. package/Filters/Sources/SphereSource.js +1 -4
  61. package/Filters/Sources/ViewFinderSource.js +1 -1
  62. package/Filters/Texture/TextureMapToPlane.js +1 -4
  63. package/Filters/Texture/TextureMapToSphere.js +1 -4
  64. package/Imaging/Core/ImageReslice.js +1 -1
  65. package/Imaging/Hybrid/SampleFunction.js +1 -1
  66. package/Rendering/Core/VectorText.js +4 -3
  67. package/Rendering/Core/Viewport.d.ts +8 -3
  68. package/Widgets/Representations/ImplicitPlaneRepresentation.js +1 -1
  69. package/Widgets/Representations/RectangleContextRepresentation.js +0 -3
  70. package/Widgets/Representations/SplineContextRepresentation.js +1 -5
  71. package/macros2.js +1 -1
  72. package/package.json +2 -2
@@ -9,7 +9,7 @@ function vtkLineFilter(publicAPI, model) {
9
9
  // Set our classname
10
10
  model.classHierarchy.push('vtkLineFilter');
11
11
  publicAPI.requestData = (inData, outData) => {
12
- const dataset = vtkPolyData.newInstance();
12
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
13
13
  dataset.getPoints().setData(inData[0].getPoints().getData());
14
14
  dataset.getLines().setData(inData[0].getLines().getData());
15
15
  outData[0] = dataset;
@@ -54,8 +54,8 @@ function vtkMoleculeToRepresentation(publicAPI, model) {
54
54
  }
55
55
 
56
56
  // output
57
- const SphereData = vtkPolyData.newInstance();
58
- const StickData = vtkPolyData.newInstance();
57
+ const SphereData = outData[0]?.initialize() || vtkPolyData.newInstance();
58
+ const StickData = outData[1]?.initialize() || vtkPolyData.newInstance();
59
59
 
60
60
  // Fetch from input molecule data
61
61
  let numPts = 0;
@@ -41,7 +41,7 @@ function vtkOutlineFilter(publicAPI, model) {
41
41
  return;
42
42
  }
43
43
  const bounds = input.getBounds();
44
- const output = vtkPolyData.newInstance();
44
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
45
45
  output.getPoints().setData(Float32Array.from(BOUNDS_MAP.map(idx => bounds[idx])), 3);
46
46
  output.getLines().setData(Uint16Array.from(LINE_ARRAY));
47
47
  outData[0] = output;
@@ -52,7 +52,8 @@ function vtkScalarToRGBA(publicAPI, model) {
52
52
  values: rgbaArray
53
53
  });
54
54
  const datasetDefinition = input.get('extent', 'spacing', 'origin', 'direction');
55
- const output = vtkImageData.newInstance(datasetDefinition);
55
+ const output = outData[0]?.initialize() || vtkImageData.newInstance();
56
+ output.set(datasetDefinition);
56
57
  output.getPointData().setScalars(colorArray);
57
58
  outData[0] = output;
58
59
  };
@@ -258,7 +258,7 @@ function vtkShrinkPolyData(publicAPI, model) {
258
258
  }
259
259
  publicAPI.requestData = (inData, outData) => {
260
260
  const input = inData[0];
261
- const output = outData[0] || vtkPolyData.newInstance();
261
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
262
262
  if (!input) {
263
263
  vtkErrorMacro('No input!');
264
264
  return;
@@ -143,7 +143,7 @@ function vtkTransformPolyDataFilter(publicAPI, model) {
143
143
  }
144
144
  publicAPI.requestData = (inData, outData) => {
145
145
  const input = inData[0];
146
- const output = outData[0] || vtkPolyData.newInstance();
146
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
147
147
  if (transformPolyData(input, output)) {
148
148
  outData[0] = output;
149
149
  } else {
@@ -72,7 +72,7 @@ function vtkTriangleFilter(publicAPI, model) {
72
72
  }
73
73
  }
74
74
  }
75
- const dataset = vtkPolyData.newInstance();
75
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
76
76
  dataset.getPoints().setData(macro.newTypedArrayFrom(pointsDataType, newPoints));
77
77
  dataset.getPolys().setData(macro.newTypedArrayFrom(cellsDataType, newCells));
78
78
  outData[0] = dataset;
@@ -535,7 +535,7 @@ function vtkTubeFilter(publicAPI, model) {
535
535
  publicAPI.requestData = (inData, outData) => {
536
536
  // implement requestData
537
537
  // pass through for now
538
- const output = vtkPolyData.newInstance();
538
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
539
539
  outData[0] = output;
540
540
  const input = inData[0];
541
541
  if (!input) {
@@ -733,7 +733,6 @@ function vtkTubeFilter(publicAPI, model) {
733
733
  output.setStrips(newStrips);
734
734
  output.setPointData(outPD);
735
735
  outPD.setNormals(newNormals);
736
- outData[0] = output;
737
736
  };
738
737
  }
739
738
 
@@ -69,7 +69,7 @@ function vtkWarpScalar(publicAPI, model) {
69
69
  newPtsData[ptOffset + 1] = inPoints[ptOffset + 1] + model.scaleFactor * s * n[1];
70
70
  newPtsData[ptOffset + 2] = inPoints[ptOffset + 2] + model.scaleFactor * s * n[2];
71
71
  }
72
- const newDataSet = vtk({
72
+ const newDataSet = outData[0] && outData[0] !== inData[0] ? outData[0].initialize() : vtk({
73
73
  vtkClass: input.getClassName()
74
74
  });
75
75
  newDataSet.shallowCopy(input);
@@ -513,7 +513,7 @@ function vtkWindowedSincPolyDataFilter(publicAPI, model) {
513
513
  if (!input) {
514
514
  return;
515
515
  }
516
- const output = vtkPolyData.newInstance();
516
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
517
517
  const outputPoints = publicAPI.vtkWindowedSincPolyDataFilterExecute(input.getPoints(), input, output);
518
518
  output.setPointData(input.getPointData());
519
519
  output.setCellData(input.getCellData());
@@ -21,7 +21,7 @@ function vtkArcSource(publicAPI, model) {
21
21
  const numLines = model.resolution;
22
22
  const numPts = model.resolution + 1;
23
23
  const tc = [0.0, 0.0];
24
- const output = outData[0] || vtkPolyData.newInstance();
24
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
25
25
  let angle = 0.0;
26
26
  let radius = 0.5;
27
27
  const perpendicular = [0, 0, 0];
@@ -11,8 +11,7 @@ const {
11
11
  // vtkArrow2DSource methods
12
12
  // ----------------------------------------------------------------------------
13
13
 
14
- function vtkStarSource(publicAPI, model) {
15
- const dataset = vtkPolyData.newInstance();
14
+ function vtkStarSource(publicAPI, model, dataset) {
16
15
  const points = macro.newTypedArray(model.pointType, 10 * 3);
17
16
  const edges = new Uint32Array(11);
18
17
  edges[0] = 10;
@@ -27,8 +26,7 @@ function vtkStarSource(publicAPI, model) {
27
26
  dataset.getPolys().setData(edges, 1);
28
27
  return dataset;
29
28
  }
30
- function vtk6PointsArrow(publicAPI, model) {
31
- const dataset = vtkPolyData.newInstance();
29
+ function vtk6PointsArrow(publicAPI, model, dataset) {
32
30
  const points = macro.newTypedArray(model.pointType, 6 * 3);
33
31
  const thickOp = model.height * 0.5 * model.thickness;
34
32
  const offsetOp = model.height * 0.5 - thickOp;
@@ -58,8 +56,7 @@ function vtk6PointsArrow(publicAPI, model) {
58
56
  dataset.getPolys().setData(cells, 1);
59
57
  return dataset;
60
58
  }
61
- function vtk4PointsArrow(publicAPI, model) {
62
- const dataset = vtkPolyData.newInstance();
59
+ function vtk4PointsArrow(publicAPI, model, dataset) {
63
60
  const points = macro.newTypedArray(model.pointType, 4 * 3);
64
61
  const thickOp = model.height / 3 * model.thickness;
65
62
  const offsetOp = model.height / 3 - thickOp;
@@ -81,8 +78,7 @@ function vtk4PointsArrow(publicAPI, model) {
81
78
  dataset.getPolys().setData(cells, 1);
82
79
  return dataset;
83
80
  }
84
- function vtkTriangleSource(publicAPI, model) {
85
- const dataset = vtkPolyData.newInstance();
81
+ function vtkTriangleSource(publicAPI, model, dataset) {
86
82
  const points = macro.newTypedArray(model.pointType, 3 * 3);
87
83
  const baseOffsetOp = model.height * (1 - model.base);
88
84
  points[0] = model.width / 2 * -1;
@@ -107,7 +103,8 @@ function vtkArrow2DSource(publicAPI, model) {
107
103
  [ShapeType.ARROW_6]: vtk6PointsArrow
108
104
  };
109
105
  publicAPI.requestData = (inData, outData) => {
110
- outData[0] = shapeToSource[model.shape](publicAPI, model);
106
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
107
+ outData[0] = shapeToSource[model.shape](publicAPI, model, dataset);
111
108
  vtkMatrixBuilder.buildFromRadian().translate(...model.center).rotateFromDirections([1, 0, 0], model.direction).apply(outData[0].getPoints().getData());
112
109
  };
113
110
  }
@@ -11,10 +11,7 @@ import vtkMatrixBuilder from '../../Common/Core/MatrixBuilder.js';
11
11
  function vtkArrowSource(publicAPI, model) {
12
12
  // Set our className
13
13
  model.classHierarchy.push('vtkArrowSource');
14
- function requestData(inData, outData) {
15
- if (model.deleted) {
16
- return;
17
- }
14
+ publicAPI.requestData = (inData, outData) => {
18
15
  const cylinder = vtkCylinderSource.newInstance({
19
16
  capping: true
20
17
  });
@@ -57,10 +54,7 @@ function vtkArrowSource(publicAPI, model) {
57
54
  // Update output
58
55
  outData[0] = append.getOutputData();
59
56
  }
60
- }
61
-
62
- // Expose methods
63
- publicAPI.requestData = requestData;
57
+ };
64
58
  }
65
59
 
66
60
  // ----------------------------------------------------------------------------
@@ -10,11 +10,8 @@ import { x as multiplyScalar } from '../../Common/Core/Math/index.js';
10
10
  function vtkCircleSource(publicAPI, model) {
11
11
  // Set our classname
12
12
  model.classHierarchy.push('vtkCircleSource');
13
- function requestData(inData, outData) {
14
- if (model.deleted) {
15
- return;
16
- }
17
- let dataset = outData[0];
13
+ publicAPI.requestData = (inData, outData) => {
14
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
18
15
 
19
16
  // Points
20
17
  const points = macro.newTypedArray(model.pointType, model.resolution * 3);
@@ -36,7 +33,6 @@ function vtkCircleSource(publicAPI, model) {
36
33
 
37
34
  // connect endpoints
38
35
  edges[edges.length - 1] = edges[1];
39
- dataset = vtkPolyData.newInstance();
40
36
  dataset.getPoints().setData(points, 3);
41
37
  if (model.lines) {
42
38
  dataset.getLines().setData(edges, 1);
@@ -50,10 +46,7 @@ function vtkCircleSource(publicAPI, model) {
50
46
 
51
47
  // Update output
52
48
  outData[0] = dataset;
53
- }
54
-
55
- // Expose methods
56
- publicAPI.requestData = requestData;
49
+ };
57
50
  }
58
51
 
59
52
  // ----------------------------------------------------------------------------
@@ -64,14 +64,14 @@ function vtkConcentricCylinderSource(publicAPI, model) {
64
64
  }
65
65
  };
66
66
  publicAPI.getMaskLayer = index => index === undefined ? model.mask : model.mask[index];
67
- function requestData(inData, outData) {
68
- if (model.deleted || !model.radius.length) {
67
+ publicAPI.requestData = (inData, outData) => {
68
+ if (!model.radius.length) {
69
+ macro.vtkErrorMacro('No radius defined');
69
70
  return;
70
71
  }
71
72
 
72
73
  // Make sure we have consistency
73
74
  validateCellFields();
74
- let dataset = outData[0];
75
75
  const numLayers = model.radius.length;
76
76
  const zRef = model.height / 2.0;
77
77
 
@@ -324,7 +324,7 @@ function vtkConcentricCylinderSource(publicAPI, model) {
324
324
 
325
325
  // Apply transformation to the point coordinates
326
326
  vtkMatrixBuilder.buildFromRadian().translate(...model.center).rotateFromDirections([0, 0, 1], model.direction).apply(points);
327
- dataset = vtkPolyData.newInstance();
327
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
328
328
  dataset.getPoints().setData(points, 3);
329
329
  dataset.getPolys().setData(polys, 1);
330
330
  dataset.getCellData().setScalars(vtkDataArray.newInstance({
@@ -334,10 +334,7 @@ function vtkConcentricCylinderSource(publicAPI, model) {
334
334
 
335
335
  // Update output
336
336
  outData[0] = dataset;
337
- }
338
-
339
- // Expose methods
340
- publicAPI.requestData = requestData;
337
+ };
341
338
  }
342
339
 
343
340
  // ----------------------------------------------------------------------------
@@ -9,11 +9,7 @@ import vtkMatrixBuilder from '../../Common/Core/MatrixBuilder.js';
9
9
  function vtkConeSource(publicAPI, model) {
10
10
  // Set our className
11
11
  model.classHierarchy.push('vtkConeSource');
12
- function requestData(inData, outData) {
13
- if (model.deleted) {
14
- return;
15
- }
16
- let dataset = outData[0];
12
+ publicAPI.requestData = (inData, outData) => {
17
13
  const angle = 2 * Math.PI / model.resolution;
18
14
  const xbot = -model.height / 2.0;
19
15
  const numberOfPoints = model.resolution + 1;
@@ -60,16 +56,13 @@ function vtkConeSource(publicAPI, model) {
60
56
 
61
57
  // Apply transformation to the points coordinates
62
58
  vtkMatrixBuilder.buildFromRadian().translate(...model.center).rotateFromDirections([1, 0, 0], model.direction).apply(points);
63
- dataset = vtkPolyData.newInstance();
59
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
64
60
  dataset.getPoints().setData(points, 3);
65
61
  dataset.getPolys().setData(polys, 1);
66
62
 
67
63
  // Update output
68
64
  outData[0] = dataset;
69
- }
70
-
71
- // Expose methods
72
- publicAPI.requestData = requestData;
65
+ };
73
66
  }
74
67
 
75
68
  // ----------------------------------------------------------------------------
@@ -17,11 +17,8 @@ const POLY_ARRAY = [4, 0, 1, 3, 2, 4, 4, 6, 7, 5, 4, 8, 10, 11, 9, 4, 12, 13, 15
17
17
  function vtkCubeSource(publicAPI, model) {
18
18
  // Set our className
19
19
  model.classHierarchy.push('vtkCubeSource');
20
- function requestData(inData, outData) {
21
- if (model.deleted) {
22
- return;
23
- }
24
- const polyData = vtkPolyData.newInstance();
20
+ publicAPI.requestData = (inData, outData) => {
21
+ const polyData = outData[0]?.initialize() || vtkPolyData.newInstance();
25
22
  outData[0] = polyData;
26
23
  const numberOfPoints = 24;
27
24
 
@@ -183,7 +180,7 @@ function vtkCubeSource(publicAPI, model) {
183
180
  polyData.getLines().initialize();
184
181
  }
185
182
  polyData.modified();
186
- }
183
+ };
187
184
  publicAPI.setBounds = function () {
188
185
  let boundsArray = [];
189
186
  if (Array.isArray(arguments.length <= 0 ? undefined : arguments[0])) {
@@ -201,9 +198,6 @@ function vtkCubeSource(publicAPI, model) {
201
198
  publicAPI.setZLength(boundsArray[5] - boundsArray[4]);
202
199
  publicAPI.setCenter([(boundsArray[0] + boundsArray[1]) / 2.0, (boundsArray[2] + boundsArray[3]) / 2.0, (boundsArray[4] + boundsArray[5]) / 2.0]);
203
200
  };
204
-
205
- // Expose methods
206
- publicAPI.requestData = requestData;
207
201
  }
208
202
 
209
203
  // ----------------------------------------------------------------------------
@@ -72,9 +72,6 @@ function vtkCursor3D(publicAPI, model) {
72
72
  publicAPI.setAll(false);
73
73
  };
74
74
  publicAPI.requestData = (inData, outData) => {
75
- if (model.deleted) {
76
- return;
77
- }
78
75
  let numPts = 0;
79
76
  let numLines = 0;
80
77
  // Check bounding box and origin
@@ -112,7 +109,7 @@ function vtkCursor3D(publicAPI, model) {
112
109
  if (numPts === 0) {
113
110
  return;
114
111
  }
115
- const polyData = vtkPolyData.newInstance();
112
+ const polyData = outData[0]?.initialize() || vtkPolyData.newInstance();
116
113
  const newPts = vtkPoints.newInstance({
117
114
  size: numPts * 3
118
115
  });
@@ -10,11 +10,7 @@ import vtkMatrixBuilder from '../../Common/Core/MatrixBuilder.js';
10
10
  function vtkCylinderSource(publicAPI, model) {
11
11
  // Set our classname
12
12
  model.classHierarchy.push('vtkCylinderSource');
13
- function requestData(inData, outData) {
14
- if (model.deleted) {
15
- return;
16
- }
17
- let dataset = outData[0];
13
+ publicAPI.requestData = (inData, outData) => {
18
14
  const angle = 2.0 * Math.PI / model.resolution;
19
15
  let numberOfPoints = 2 * model.resolution;
20
16
  let numberOfPolys = 5 * model.resolution;
@@ -147,7 +143,7 @@ function vtkCylinderSource(publicAPI, model) {
147
143
 
148
144
  // Apply transformation to the points coordinates
149
145
  vtkMatrixBuilder.buildFromRadian().translate(...model.center).rotateFromDirections([0, 1, 0], model.direction).translate(...model.center.map(c => c * -1)).apply(points);
150
- dataset = vtkPolyData.newInstance();
146
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
151
147
  dataset.getPoints().setData(points, 3);
152
148
  dataset.getPolys().setData(polys, 1);
153
149
  dataset.getPointData().setNormals(normals);
@@ -155,10 +151,7 @@ function vtkCylinderSource(publicAPI, model) {
155
151
 
156
152
  // Update output
157
153
  outData[0] = dataset;
158
- }
159
-
160
- // Expose methods
161
- publicAPI.requestData = requestData;
154
+ };
162
155
  }
163
156
 
164
157
  // ----------------------------------------------------------------------------
@@ -25,10 +25,6 @@ function vtkDiskSource(publicAPI, model) {
25
25
  circumferentialResolution,
26
26
  pointType
27
27
  } = model;
28
- if (model.deleted) {
29
- return;
30
- }
31
- let dataset = outData[0];
32
28
 
33
29
  // Points
34
30
  const points = vtkPoints.newInstance({
@@ -83,7 +79,7 @@ function vtkDiskSource(publicAPI, model) {
83
79
  }
84
80
  }
85
81
  polys.setData(cellData, cellCount, 1);
86
- dataset = vtkPolyData.newInstance();
82
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
87
83
  dataset.setPoints(points);
88
84
  dataset.setPolys(polys);
89
85
 
@@ -26,7 +26,7 @@ function vtkEllipseArcSource(publicAPI, model) {
26
26
  const numLines = resolution;
27
27
  const numPts = resolution + 1;
28
28
  const tc = [0.0, 0.0];
29
- const output = outData[0] || vtkPolyData.newInstance();
29
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
30
30
 
31
31
  // Make sure the normal vector is normalized
32
32
  const normal = [...model.normal];
@@ -10,9 +10,6 @@ function vtkImageGridSource(publicAPI, model) {
10
10
  // Set our className
11
11
  model.classHierarchy.push('vtkImageGridSource');
12
12
  publicAPI.requestData = (inData, outData) => {
13
- if (model.deleted) {
14
- return;
15
- }
16
13
  const state = {};
17
14
  const dataset = {
18
15
  type: 'vtkImageData',
@@ -14,14 +14,11 @@ function vtkLineSource(publicAPI, model) {
14
14
  // Set our className
15
15
  model.classHierarchy.push('vtkLineSource');
16
16
  publicAPI.requestData = (inData, outData) => {
17
- if (model.deleted) {
18
- return;
19
- }
20
17
  const dataset = outData[0];
21
18
 
22
19
  // Check input
23
20
  const pointDataType = dataset ? dataset.getPoints().getDataType() : model.pointType;
24
- const pd = vtkPolyData.newInstance();
21
+ const pd = dataset?.initialize() || vtkPolyData.newInstance();
25
22
  const v21 = [];
26
23
  subtract(model.point2, model.point1, v21);
27
24
  if (norm(v21) <= 0.0) {
@@ -18,14 +18,11 @@ function vtkPlaneSource(publicAPI, model) {
18
18
  // Set our className
19
19
  model.classHierarchy.push('vtkPlaneSource');
20
20
  publicAPI.requestData = (inData, outData) => {
21
- if (model.deleted) {
22
- return;
23
- }
24
21
  const dataset = outData[0];
25
22
 
26
23
  // Check input
27
24
  const pointDataType = dataset ? dataset.getPoints().getDataType() : model.pointType;
28
- const pd = vtkPolyData.newInstance();
25
+ const pd = dataset?.initialize() || vtkPolyData.newInstance();
29
26
  const v10 = [];
30
27
  const v20 = [];
31
28
  subtract(model.point1, model.origin, v10);
@@ -63,7 +63,7 @@ function vtkPlatonicSolidSource(publicAPI, model) {
63
63
  // Set our className
64
64
  model.classHierarchy.push('vtkPlatonicSolidSource');
65
65
  publicAPI.requestData = (inData, outData) => {
66
- const output = outData[0] || vtkPolyData.newInstance();
66
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
67
67
  let solidData;
68
68
  switch (model.solidType) {
69
69
  case SolidType.VTK_SOLID_TETRAHEDRON:
@@ -10,14 +10,11 @@ function vtkPointSource(publicAPI, model) {
10
10
  // Set our className
11
11
  model.classHierarchy.push('vtkPointSource');
12
12
  publicAPI.requestData = (inData, outData) => {
13
- if (model.deleted) {
14
- return;
15
- }
16
13
  const dataset = outData[0];
17
14
 
18
15
  // Check input
19
16
  const pointDataType = dataset ? dataset.getPoints().getDataType() : model.pointType;
20
- const pd = vtkPolyData.newInstance();
17
+ const pd = dataset?.initialize() || vtkPolyData.newInstance();
21
18
 
22
19
  // hand create a point cloud
23
20
  const numPts = model.numberOfPoints;
@@ -8,9 +8,6 @@ function vtkRTAnalyticSource(publicAPI, model) {
8
8
  // Set our className
9
9
  model.classHierarchy.push('vtkRTAnalyticSource');
10
10
  publicAPI.requestData = (inData, outData) => {
11
- if (model.deleted) {
12
- return;
13
- }
14
11
  const state = {};
15
12
  const dataset = {
16
13
  type: 'vtkImageData',
@@ -60,11 +60,8 @@ function vtkSLICSource(publicAPI, model) {
60
60
  };
61
61
  publicAPI.getNumberOfClusters = () => model.clusters.length;
62
62
  publicAPI.requestData = (inData, outData) => {
63
- if (model.deleted) {
64
- return;
65
- }
66
63
  const dataSize = model.dimensions[0] * model.dimensions[1] * model.dimensions[2];
67
- const imageData = vtkImageData.newInstance();
64
+ const imageData = outData[0]?.initialize() || vtkImageData.newInstance();
68
65
  imageData.setSpacing(...model.spacing);
69
66
  imageData.setExtent(0, model.dimensions[0] - 1, 0, model.dimensions[1] - 1, 0, model.dimensions[2] - 1);
70
67
  imageData.setOrigin(...model.origin);
@@ -10,12 +10,9 @@ function vtkSphereSource(publicAPI, model) {
10
10
  // Set our className
11
11
  model.classHierarchy.push('vtkSphereSource');
12
12
  publicAPI.requestData = (inData, outData) => {
13
- if (model.deleted) {
14
- return;
15
- }
16
13
  let dataset = outData[0];
17
14
  const pointDataType = dataset ? dataset.getPoints().getDataType() : model.pointType;
18
- dataset = vtkPolyData.newInstance();
15
+ dataset = dataset?.initialize() || vtkPolyData.newInstance();
19
16
 
20
17
  // ----------------------------------------------------------------------
21
18
  let numPoles = 0;
@@ -4,7 +4,7 @@ import vtkPolyData from '../../Common/DataModel/PolyData.js';
4
4
 
5
5
  function vtkViewFinderSource(publicAPI, model) {
6
6
  publicAPI.requestData = (inData, outData) => {
7
- const dataset = vtkPolyData.newInstance();
7
+ const dataset = outData[0]?.initialize() || vtkPolyData.newInstance();
8
8
  const points = macro.newTypedArray(model.pointType, 3 * 16);
9
9
  points[0] = model.radius;
10
10
  points[1] = model.radius / model.width;
@@ -90,16 +90,13 @@ function vtkTextureMapToPlane(publicAPI, model) {
90
90
  model.normal[2] = -1.0;
91
91
  }
92
92
  publicAPI.requestData = (inData, outData) => {
93
- if (model.deleted) {
94
- return;
95
- }
96
93
  const input = inData[0];
97
94
  const nbPoints = input.getPoints().getNumberOfPoints();
98
95
  if (nbPoints < 3 && model.automaticPlaneGeneration) {
99
96
  vtkErrorMacro("Can't generate texture coordinates without points");
100
97
  return;
101
98
  }
102
- const output = vtkPolyData.newInstance();
99
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
103
100
  output.getPoints().setData(new Float32Array(input.getPoints().getData()), 3);
104
101
  output.getPolys().setData(new Uint32Array(input.getPolys().getData()));
105
102
  const tcoordsData = [];
@@ -15,9 +15,6 @@ function vtkTextureMapToSphere(publicAPI, model) {
15
15
  // Set our className
16
16
  model.classHierarchy.push('vtkTextureMapToSphere');
17
17
  publicAPI.requestData = (inData, outData) => {
18
- if (model.deleted) {
19
- return;
20
- }
21
18
  const input = inData[0];
22
19
  const nbPoints = input.getPoints().getNumberOfPoints();
23
20
  if (nbPoints <= 1) {
@@ -108,7 +105,7 @@ function vtkTextureMapToSphere(publicAPI, model) {
108
105
  size: nbPoints,
109
106
  values: tcoordsData
110
107
  });
111
- const output = vtkPolyData.newInstance();
108
+ const output = outData[0]?.initialize() || vtkPolyData.newInstance();
112
109
  output.getPoints().setData(new Float32Array(input.getPoints().getData()), 3);
113
110
  output.getPolys().setData(new Uint32Array(input.getPolys().getData()));
114
111
  output.getPointData().setTCoords(tCoords);
@@ -206,7 +206,7 @@ function vtkImageReslice(publicAPI, model) {
206
206
  });
207
207
 
208
208
  // Update output
209
- const output = vtkImageData.newInstance();
209
+ const output = outData[0]?.initialize() || vtkImageData.newInstance();
210
210
  output.setDimensions(outDims);
211
211
  output.setOrigin(outOrigin);
212
212
  output.setSpacing(outSpacing);
@@ -39,7 +39,7 @@ function vtkSampleFunction(publicAPI, model) {
39
39
  vtkErrorMacro('Bad volume dimensions');
40
40
  return;
41
41
  }
42
- const volume = vtkImageData.newInstance();
42
+ const volume = outData[0]?.initialize() || vtkImageData.newInstance();
43
43
  const origin = [model.modelBounds[0], model.modelBounds[2], model.modelBounds[4]];
44
44
  const spacing = [(model.modelBounds[1] - model.modelBounds[0]) / (dims[0] - 1), (model.modelBounds[3] - model.modelBounds[2]) / (dims[1] - 1), (model.modelBounds[5] - model.modelBounds[4]) / (dims[2] - 1)];
45
45
  const sliceSize = dims[0] * dims[1];
@@ -241,11 +241,10 @@ function vtkVectorText(publicAPI, model) {
241
241
  * Creates a vtkPolyData from the processed shapes
242
242
  * @returns {Object} vtkPolyData instance
243
243
  */
244
- function buildPolyData() {
244
+ function buildPolyData(polyData) {
245
245
  model.verticesArray = [];
246
246
  model.uvArray = [];
247
247
  model.colorArray = [];
248
- const polyData = vtkPolyData.newInstance();
249
248
  const cells = vtkCellArray.newInstance();
250
249
  const pointData = polyData.getPointData();
251
250
 
@@ -328,7 +327,9 @@ function vtkVectorText(publicAPI, model) {
328
327
  return;
329
328
  }
330
329
  buildShape();
331
- outData[0] = buildPolyData();
330
+ const polyData = outData[0]?.initialize() || vtkPolyData.newInstance();
331
+ buildPolyData(polyData);
332
+ outData[0] = polyData;
332
333
  };
333
334
  }
334
335
 
@@ -63,14 +63,19 @@ export interface vtkViewport extends vtkObject {
63
63
  getSize(): Size;
64
64
 
65
65
  /**
66
- *
66
+ * Viewport for the Viewport to draw in the rendering window.
67
+ * Coordinates are expressed as (xmin,ymin,xmax,ymax), where each
68
+ * coordinate is 0 <= coordinate <= 1.0.
69
+ * @returns {Number[]}
70
+ * @see getViewportByReference()
71
+ * @see setViewport()
67
72
  */
68
- getViewport(): vtkViewport;
73
+ getViewport(): [number, number, number, number];
69
74
 
70
75
  /**
71
76
  *
72
77
  */
73
- getViewportByReference(): vtkViewport;
78
+ getViewportByReference(): [number, number, number, number];
74
79
 
75
80
  /**
76
81
  *