Skip to content

Commit 42800b6

Browse files
committed
perf(filter): reuse previous output in requestData
This is consistent with VTK C++ and it improves the performances because newInstance() is called less often fix #3303
1 parent e47ea64 commit 42800b6

File tree

38 files changed

+73
-65
lines changed

38 files changed

+73
-65
lines changed

Sources/Filters/Core/Cutter/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ function vtkCutter(publicAPI, model) {
314314
return;
315315
}
316316

317-
const output = vtkPolyData.newInstance();
317+
const output = outData[0] || vtkPolyData.newInstance();
318318

319319
dataSetCutter(input, output);
320320

Sources/Filters/Core/PolyDataNormals/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ function vtkPolyDataNormals(publicAPI, model) {
9898
return;
9999
}
100100

101-
const output = vtkPolyData.newInstance();
101+
const output = outData[0] || vtkPolyData.newInstance();
102102

103103
output.setPoints(input.getPoints());
104104
output.setVerts(input.getVerts());

Sources/Filters/Core/ThresholdPoints/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function vtkThresholdPoints(publicAPI, model) {
5151

5252
publicAPI.requestData = (inData, outData) => {
5353
const input = inData[0];
54-
const output = vtkPolyData.newInstance();
54+
const output = outData[0] || vtkPolyData.newInstance();
5555
outData[0] = output;
5656

5757
if (model.criterias.length === 0) {

Sources/Filters/General/AppendPolyData/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ function vtkAppendPolyData(publicAPI, model) {
4646
}
4747

4848
// Allocate output
49-
const output = vtkPolyData.newInstance();
49+
const output =
50+
outData[0] && inData[0] !== outData[0]
51+
? outData[0]
52+
: vtkPolyData.newInstance();
5053

5154
let numPts = 0;
5255
let pointType = 0;

Sources/Filters/General/Calculator/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,8 @@ function vtkCalculator(publicAPI, model) {
264264

265265
const arraySpec = model.formula.getArrays(inData);
266266

267-
const newDataSet = vtk({ vtkClass: inData[0].getClassName() });
267+
const newDataSet =
268+
outData[0] || vtk({ vtkClass: inData[0].getClassName() });
268269
newDataSet.shallowCopy(inData[0]);
269270
outData[0] = newDataSet;
270271

Sources/Filters/General/ClipClosedSurface/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ function vtkClipClosedSurface(publicAPI, model) {
622622
publicAPI.requestData = (inData, outData) => {
623623
// implement requestData
624624
const input = inData[0];
625-
const output = vtkPolyData.newInstance();
625+
const output = outData[0] || vtkPolyData.newInstance();
626626
outData[0] = output;
627627

628628
if (!input) {

Sources/Filters/General/ClosedPolyLineToSurfaceFilter/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ function vtkClosedPolyLineToSurfaceFilter(publicAPI, model) {
130130
return;
131131
}
132132

133-
const output = vtkPolyData.newInstance();
133+
const output = outData[0] || vtkPolyData.newInstance();
134134
output.shallowCopy(input);
135135

136136
// Extract faces

Sources/Filters/General/ContourTriangulator/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ function vtkContourTriangulator(publicAPI, model) {
211211
// implement requestData
212212
const input = inData[0];
213213
// FIXME: do not instantiate a new polydata each time the filter is executed.
214-
const output = vtkPolyData.newInstance();
214+
const output = outData[0] || vtkPolyData.newInstance();
215215
outData[0] = output;
216216

217217
if (!input) {

Sources/Filters/General/ImageCropFilter/index.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,11 @@ function vtkImageCropFilter(publicAPI, model) {
111111
index += slice.length;
112112
}
113113
}
114-
const outImage = vtkImageData.newInstance({
115-
extent: cropped,
116-
origin: input.getOrigin(),
117-
direction: input.getDirection(),
118-
spacing: input.getSpacing(),
119-
});
114+
const outImage = outData[0] || vtkImageData.newInstance();
115+
outImage.setExtent(cropped);
116+
outImage.setOrigin(input.getOrigin());
117+
outImage.setSpacing(input.getSpacing());
118+
outImage.setDirection(input.getDirection());
120119

121120
const croppedScalars = vtkDataArray.newInstance({
122121
name: scalars.getName(),

Sources/Filters/General/ImageMarchingCubes/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ function vtkImageMarchingCubes(publicAPI, model) {
341341
edgeLocator.initialize();
342342

343343
// Update output
344-
const polydata = vtkPolyData.newInstance();
344+
const polydata = outData[0] || vtkPolyData.newInstance();
345345
polydata.getPoints().setData(new Float32Array(pBuffer), 3);
346346
polydata.getPolys().setData(new Uint32Array(tBuffer));
347347
if (model.computeNormals) {

0 commit comments

Comments
 (0)