@kitware/vtk.js 34.10.0 → 34.11.1
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/DataArray.js +2 -1
- package/Common/Core/Points.d.ts +19 -1
- package/Common/Core/Points.js +35 -20
- package/Common/DataModel/AbstractPointLocator.d.ts +2 -2
- package/Common/DataModel/BoundingBox.d.ts +60 -7
- package/Common/DataModel/BoundingBox.js +190 -3
- package/Common/DataModel/Cell.js +4 -34
- package/Common/DataModel/DataSet.d.ts +7 -0
- package/Common/DataModel/DataSet.js +6 -0
- package/Common/DataModel/DataSetAttributes/FieldData.d.ts +6 -2
- package/Common/DataModel/DataSetAttributes.d.ts +2 -1
- package/Common/DataModel/ImageData.d.ts +7 -0
- package/Common/DataModel/ImageData.js +11 -0
- package/Common/DataModel/Locator.d.ts +97 -5
- package/Common/DataModel/MergePoints.d.ts +64 -0
- package/Common/DataModel/MergePoints.js +130 -0
- package/Common/DataModel/PointLocator.d.ts +217 -0
- package/Common/DataModel/PointLocator.js +751 -0
- package/Common/DataModel/PointSet.d.ts +6 -0
- package/Common/DataModel/PointSet.js +10 -0
- package/Common/DataModel/PolyData.d.ts +6 -0
- package/Common/DataModel/PolyData.js +7 -0
- package/Filters/Core/Cutter.js +1 -1
- package/Filters/Core/PolyDataNormals.js +1 -1
- package/Filters/Core/ThresholdPoints.js +1 -2
- package/Filters/General/AppendPolyData.js +1 -1
- package/Filters/General/Calculator.js +1 -1
- package/Filters/General/ClipClosedSurface.js +2 -2
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +1 -1
- package/Filters/General/ContourLoopExtraction.js +2 -4
- package/Filters/General/ContourTriangulator.js +1 -2
- package/Filters/General/ImageCropFilter.js +7 -10
- package/Filters/General/ImageMarchingCubes.js +1 -1
- package/Filters/General/ImageMarchingSquares.js +1 -1
- package/Filters/General/ImageOutlineFilter.js +2 -1
- package/Filters/General/ImageSliceFilter.js +2 -1
- package/Filters/General/ImageStreamline.js +1 -1
- package/Filters/General/LineFilter.js +1 -1
- package/Filters/General/MoleculeToRepresentation.js +2 -2
- package/Filters/General/OutlineFilter.js +1 -1
- package/Filters/General/ScalarToRGBA.js +2 -1
- package/Filters/General/ShrinkPolyData.js +1 -1
- package/Filters/General/TransformPolyDataFilter.js +1 -1
- package/Filters/General/TriangleFilter.js +1 -1
- package/Filters/General/TubeFilter.js +1 -2
- package/Filters/General/WarpScalar.js +1 -1
- package/Filters/General/WindowedSincPolyDataFilter.js +1 -1
- package/Filters/Sources/ArcSource.js +1 -1
- package/Filters/Sources/Arrow2DSource.js +6 -9
- package/Filters/Sources/ArrowSource.js +2 -8
- package/Filters/Sources/CircleSource.js +3 -10
- package/Filters/Sources/ConcentricCylinderSource.js +5 -8
- package/Filters/Sources/ConeSource.js +3 -10
- package/Filters/Sources/CubeSource.js +3 -9
- package/Filters/Sources/Cursor3D.js +1 -4
- package/Filters/Sources/CylinderSource.js +3 -10
- package/Filters/Sources/DiskSource.js +1 -5
- package/Filters/Sources/EllipseArcSource.js +1 -1
- package/Filters/Sources/FrustumSource.d.ts +111 -0
- package/Filters/Sources/FrustumSource.js +248 -0
- package/Filters/Sources/ImageGridSource.js +0 -3
- package/Filters/Sources/LineSource.js +1 -4
- package/Filters/Sources/PlaneSource.js +1 -4
- package/Filters/Sources/PlatonicSolidSource.js +1 -1
- package/Filters/Sources/PointSource.js +1 -4
- package/Filters/Sources/RTAnalyticSource.js +0 -3
- package/Filters/Sources/SLICSource.js +1 -4
- package/Filters/Sources/SphereSource.js +1 -4
- package/Filters/Sources/ViewFinderSource.js +1 -1
- package/Filters/Texture/TextureMapToPlane.js +1 -4
- package/Filters/Texture/TextureMapToSphere.js +1 -4
- package/Imaging/Core/ImageReslice.js +1 -1
- package/Imaging/Hybrid/SampleFunction.js +1 -1
- package/Rendering/Core/VectorText.js +4 -3
- package/Rendering/OpenGL/Glyph3DMapper.js +16 -0
- package/Rendering/OpenGL/glsl/vtkVolumeVS.glsl.js +1 -1
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +1 -1
- package/Widgets/Representations/RectangleContextRepresentation.js +0 -3
- package/Widgets/Representations/SplineContextRepresentation.js +1 -5
- package/index.d.ts +3 -0
- package/macros2.js +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,12 @@ import vtkDataSet, { IDataSetInitialValues } from './DataSet';
|
|
|
8
8
|
export interface IPointSetInitialValues extends IDataSetInitialValues {}
|
|
9
9
|
|
|
10
10
|
export interface vtkPointSet extends vtkDataSet {
|
|
11
|
+
/**
|
|
12
|
+
* Empty the points and initialize the data set and .
|
|
13
|
+
* @see vtkDataSet::initialize()
|
|
14
|
+
*/
|
|
15
|
+
initialize(): void;
|
|
16
|
+
|
|
11
17
|
/**
|
|
12
18
|
* Compute the (X, Y, Z) bounds of the data.
|
|
13
19
|
*/
|
|
@@ -33,6 +33,16 @@ function vtkPointSet(publicAPI, model) {
|
|
|
33
33
|
model.points = vtkPoints.newInstance();
|
|
34
34
|
model.points.shallowCopy(other.getPoints());
|
|
35
35
|
};
|
|
36
|
+
const superGetMTime = publicAPI.getMTime;
|
|
37
|
+
publicAPI.getMTime = () => {
|
|
38
|
+
const mTime = superGetMTime();
|
|
39
|
+
return Math.max(mTime, model.points?.getMTime() ?? mTime);
|
|
40
|
+
};
|
|
41
|
+
const superInitialize = publicAPI.initialize;
|
|
42
|
+
publicAPI.initialize = () => {
|
|
43
|
+
model.points?.initialize();
|
|
44
|
+
return superInitialize();
|
|
45
|
+
};
|
|
36
46
|
}
|
|
37
47
|
|
|
38
48
|
// ----------------------------------------------------------------------------
|
|
@@ -8,6 +8,12 @@ import vtkPointSet, { IPointSetInitialValues } from './PointSet';
|
|
|
8
8
|
export interface IPolyDataInitialValues extends IPointSetInitialValues {}
|
|
9
9
|
|
|
10
10
|
export interface vtkPolyData extends vtkPointSet {
|
|
11
|
+
/**
|
|
12
|
+
* Empty the cells and initialize the point set.
|
|
13
|
+
* @see vtkPointSet::initialize()
|
|
14
|
+
*/
|
|
15
|
+
initialize(): void;
|
|
16
|
+
|
|
11
17
|
/**
|
|
12
18
|
* Create data structure that allows random access of cells.
|
|
13
19
|
*/
|
|
@@ -48,6 +48,13 @@ function vtkPolyData(publicAPI, model) {
|
|
|
48
48
|
model[type].shallowCopy(other.getReferenceByName(type));
|
|
49
49
|
});
|
|
50
50
|
};
|
|
51
|
+
const superGetMTime = publicAPI.getMTime;
|
|
52
|
+
publicAPI.getMTime = () => POLYDATA_FIELDS.reduce((mTime, type) => Math.max(mTime, model[type]?.getMTime() ?? mTime), superGetMTime());
|
|
53
|
+
const superInitialize = publicAPI.initialize;
|
|
54
|
+
publicAPI.initialize = () => {
|
|
55
|
+
POLYDATA_FIELDS.forEach(type => model[type]?.initialize());
|
|
56
|
+
return superInitialize();
|
|
57
|
+
};
|
|
51
58
|
publicAPI.buildCells = () => {
|
|
52
59
|
// here are the number of cells we have
|
|
53
60
|
const nVerts = publicAPI.getNumberOfVerts();
|
package/Filters/Core/Cutter.js
CHANGED
|
@@ -287,7 +287,7 @@ function vtkCutter(publicAPI, model) {
|
|
|
287
287
|
vtkErrorMacro('Missing cut function');
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
|
-
const output = vtkPolyData.newInstance();
|
|
290
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
291
291
|
dataSetCutter(input, output);
|
|
292
292
|
outData[0] = output;
|
|
293
293
|
};
|
|
@@ -70,7 +70,7 @@ function vtkPolyDataNormals(publicAPI, model) {
|
|
|
70
70
|
if (!input) {
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
const output = vtkPolyData.newInstance();
|
|
73
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
74
74
|
output.setPoints(input.getPoints());
|
|
75
75
|
output.setVerts(input.getVerts());
|
|
76
76
|
output.setLines(input.getLines());
|
|
@@ -43,7 +43,7 @@ function vtkThresholdPoints(publicAPI, model) {
|
|
|
43
43
|
model.classHierarchy.push('vtkThresholdPoints');
|
|
44
44
|
publicAPI.requestData = (inData, outData) => {
|
|
45
45
|
const input = inData[0];
|
|
46
|
-
const output = vtkPolyData.newInstance();
|
|
46
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
47
47
|
outData[0] = output;
|
|
48
48
|
if (model.criterias.length === 0) {
|
|
49
49
|
output.shallowCopy(input);
|
|
@@ -170,7 +170,6 @@ function vtkThresholdPoints(publicAPI, model) {
|
|
|
170
170
|
dataType: input.getPolys().getDataType()
|
|
171
171
|
}));
|
|
172
172
|
});
|
|
173
|
-
outData[0] = output;
|
|
174
173
|
};
|
|
175
174
|
}
|
|
176
175
|
|
|
@@ -43,7 +43,7 @@ function vtkAppendPolyData(publicAPI, model) {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
// Allocate output
|
|
46
|
-
const output = vtkPolyData.newInstance();
|
|
46
|
+
const output = outData[0] && inData[0] !== outData[0] ? outData[0].initialize() : vtkPolyData.newInstance();
|
|
47
47
|
let numPts = 0;
|
|
48
48
|
let pointType = 0;
|
|
49
49
|
let ttype = 1;
|
|
@@ -172,7 +172,7 @@ function vtkCalculator(publicAPI, model) {
|
|
|
172
172
|
return 0;
|
|
173
173
|
}
|
|
174
174
|
const arraySpec = model.formula.getArrays(inData);
|
|
175
|
-
const newDataSet = vtk({
|
|
175
|
+
const newDataSet = outData[0]?.initialize() || vtk({
|
|
176
176
|
vtkClass: inData[0].getClassName()
|
|
177
177
|
});
|
|
178
178
|
newDataSet.shallowCopy(inData[0]);
|
|
@@ -499,7 +499,7 @@ function vtkClipClosedSurface(publicAPI, model) {
|
|
|
499
499
|
publicAPI.requestData = (inData, outData) => {
|
|
500
500
|
// implement requestData
|
|
501
501
|
const input = inData[0];
|
|
502
|
-
const output = vtkPolyData.newInstance();
|
|
502
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
503
503
|
outData[0] = output;
|
|
504
504
|
if (!input) {
|
|
505
505
|
vtkErrorMacro('Invalid or missing input');
|
|
@@ -830,8 +830,8 @@ function vtkClipClosedSurface(publicAPI, model) {
|
|
|
830
830
|
squeezeOutputPoints(output, points, pointData, inputPointsType);
|
|
831
831
|
// TODO: Check
|
|
832
832
|
// output.squeeze();
|
|
833
|
-
outData[0] = output;
|
|
834
833
|
};
|
|
834
|
+
|
|
835
835
|
Object.keys(ScalarMode).forEach(key => {
|
|
836
836
|
const name = capitalize(key.toLowerCase());
|
|
837
837
|
publicAPI[`setScalarModeTo${name}`] = () => {
|
|
@@ -125,7 +125,7 @@ function vtkClosedPolyLineToSurfaceFilter(publicAPI, model) {
|
|
|
125
125
|
vtkErrorMacro('Invalid or missing input');
|
|
126
126
|
return;
|
|
127
127
|
}
|
|
128
|
-
const output = vtkPolyData.newInstance();
|
|
128
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
129
129
|
output.shallowCopy(input);
|
|
130
130
|
|
|
131
131
|
// Extract faces
|
|
@@ -9,10 +9,8 @@ const visited = new Set();
|
|
|
9
9
|
function vtkContourLoopExtraction(publicAPI, model) {
|
|
10
10
|
publicAPI.requestData = (inData, outData) => {
|
|
11
11
|
const [input] = inData;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
const [output] = outData;
|
|
12
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
13
|
+
outData[0] = output;
|
|
16
14
|
publicAPI.extractContours(input, output);
|
|
17
15
|
output.modified();
|
|
18
16
|
};
|
|
@@ -137,8 +137,7 @@ function vtkContourTriangulator(publicAPI, model) {
|
|
|
137
137
|
publicAPI.requestData = (inData, outData) => {
|
|
138
138
|
// implement requestData
|
|
139
139
|
const input = inData[0];
|
|
140
|
-
|
|
141
|
-
const output = vtkPolyData.newInstance();
|
|
140
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
142
141
|
outData[0] = output;
|
|
143
142
|
if (!input) {
|
|
144
143
|
vtkErrorMacro('Invalid or missing input');
|
|
@@ -32,6 +32,8 @@ function vtkImageCropFilter(publicAPI, model) {
|
|
|
32
32
|
vtkErrorMacro('Invalid or missing input');
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
+
const outImage = outData[0]?.initialize() || vtkImageData.newInstance();
|
|
36
|
+
outData[0] = outImage;
|
|
35
37
|
const scalars = input.getPointData().getScalars();
|
|
36
38
|
if (!scalars) {
|
|
37
39
|
vtkErrorMacro('No scalars from input');
|
|
@@ -47,9 +49,7 @@ function vtkImageCropFilter(publicAPI, model) {
|
|
|
47
49
|
return Math.min(e, Math.round(model.croppingPlanes[i]));
|
|
48
50
|
}) : extent.slice();
|
|
49
51
|
if (cropped[0] === extent[0] && cropped[1] === extent[1] && cropped[2] === extent[2] && cropped[3] === extent[3] && cropped[4] === extent[4] && cropped[5] === extent[5]) {
|
|
50
|
-
|
|
51
|
-
sameAsInput.shallowCopy(input); // Force new mtime
|
|
52
|
-
outData[0] = sameAsInput;
|
|
52
|
+
outImage.shallowCopy(input); // Force new mtime
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -88,19 +88,16 @@ function vtkImageCropFilter(publicAPI, model) {
|
|
|
88
88
|
index += slice.length;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
spacing: input.getSpacing()
|
|
96
|
-
});
|
|
91
|
+
outImage.setExtent(cropped);
|
|
92
|
+
outImage.setOrigin(input.getOrigin());
|
|
93
|
+
outImage.setSpacing(input.getSpacing());
|
|
94
|
+
outImage.setDirection(input.getDirection());
|
|
97
95
|
const croppedScalars = vtkDataArray.newInstance({
|
|
98
96
|
name: scalars.getName(),
|
|
99
97
|
numberOfComponents,
|
|
100
98
|
values: croppedArray
|
|
101
99
|
});
|
|
102
100
|
outImage.getPointData().setScalars(croppedScalars);
|
|
103
|
-
outData[0] = outImage;
|
|
104
101
|
};
|
|
105
102
|
publicAPI.isResetAvailable = () => {
|
|
106
103
|
if (model.croppingPlanes == null || model.croppingPlanes.length === 0) {
|
|
@@ -251,7 +251,7 @@ function vtkImageMarchingCubes(publicAPI, model) {
|
|
|
251
251
|
edgeLocator.initialize();
|
|
252
252
|
|
|
253
253
|
// Update output
|
|
254
|
-
const polydata = vtkPolyData.newInstance();
|
|
254
|
+
const polydata = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
255
255
|
polydata.getPoints().setData(new Float32Array(pBuffer), 3);
|
|
256
256
|
polydata.getPolys().setData(new Uint32Array(tBuffer));
|
|
257
257
|
if (model.computeNormals) {
|
|
@@ -207,7 +207,7 @@ function vtkImageMarchingSquares(publicAPI, model) {
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
// Update output
|
|
210
|
-
const polydata = vtkPolyData.newInstance();
|
|
210
|
+
const polydata = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
211
211
|
polydata.getPoints().setData(new Float32Array(points), 3);
|
|
212
212
|
polydata.getLines().setData(new Uint32Array(lines));
|
|
213
213
|
outData[0] = polydata;
|
|
@@ -19,7 +19,8 @@ function vtkImageOutlineFilter(publicAPI, model) {
|
|
|
19
19
|
vtkErrorMacro('Invalid or missing input');
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
const output = vtkImageData.newInstance(
|
|
22
|
+
const output = outData[0]?.initialize() || vtkImageData.newInstance();
|
|
23
|
+
output.set(input.get('spacing', 'origin', 'direction'));
|
|
23
24
|
const getIndex = (point, dims) => point[0] + point[1] * dims[0] + point[2] * dims[0] * dims[1];
|
|
24
25
|
const getIJK = (index, dims) => {
|
|
25
26
|
const ijk = [0, 0, 0];
|
|
@@ -37,7 +37,8 @@ function vtkImageSliceFilter(publicAPI, model) {
|
|
|
37
37
|
numberOfComponents,
|
|
38
38
|
values: sliceRawArray
|
|
39
39
|
});
|
|
40
|
-
const output = vtkImageData.newInstance(
|
|
40
|
+
const output = outData[0]?.initialize() || vtkImageData.newInstance();
|
|
41
|
+
output.set(datasetDefinition);
|
|
41
42
|
output.getPointData().setScalars(sliceArray);
|
|
42
43
|
outData[0] = output;
|
|
43
44
|
};
|
|
@@ -210,7 +210,7 @@ function vtkImageStreamline(publicAPI, model) {
|
|
|
210
210
|
pointArray.set(data[0], offset2);
|
|
211
211
|
offset2 += data[0].length;
|
|
212
212
|
});
|
|
213
|
-
const output = vtkPolyData.newInstance();
|
|
213
|
+
const output = outData[0]?.initialize() || vtkPolyData.newInstance();
|
|
214
214
|
output.getPoints().setData(pointArray, 3);
|
|
215
215
|
output.getLines().setData(cellArray);
|
|
216
216
|
outData[0] = output;
|
|
@@ -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(
|
|
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]
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
68
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
});
|