Skip to content

Commit eebd1f9

Browse files
authored
Merge pull request #2560 from WesleyTheGeolien/tubeFilterFix
fix(tubeFilter): update npts and change to global func
2 parents 98e17a2 + 42cd01f commit eebd1f9

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

Sources/Filters/General/TubeFilter/index.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,10 @@ function vtkTubeFilter(publicAPI, model) {
635635
let numStrips = 0;
636636
const inLinesData = inLines.getData();
637637
let npts = inLinesData[0];
638-
const sidesShareVerticesMultiplier = model.sidesShareVertices ? 1 : 2;
639638
for (let i = 0; i < inLinesData.length; i += npts + 1) {
640-
numNewPts += sidesShareVerticesMultiplier * npts * model.numberOfSides;
641-
if (model.capping) {
642-
numNewPts += 2 * model.numberOfSides;
643-
}
644-
645639
npts = inLinesData[i];
640+
641+
numNewPts = computeOffset(numNewPts, npts);
646642
numStrips +=
647643
(2 * npts + 1) * Math.ceil(model.numberOfSides / model.onRatio);
648644
if (model.capping) {

Sources/Filters/General/TubeFilter/test/testTubeFilter.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,59 @@ test.onlyIfWebGL('Test vtkTubeFilter rendering', (t) => {
181181
});
182182
renderWindow.render();
183183
});
184+
185+
test('Test vtkTubeFilter numberOfPoints', (t) => {
186+
const numberOfSides = 3;
187+
const numberOfLines = 2;
188+
const sidesShareVertices = 1;
189+
190+
const polyData = vtkPolyData.newInstance();
191+
192+
const points = new Uint32Array([
193+
0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5,
194+
]);
195+
const lines = new Uint32Array([2, 0, 1, 4, 2, 3, 4, 5]);
196+
197+
polyData.getPoints().setData(points);
198+
polyData.getLines().setData(lines);
199+
200+
const tubeFilter = vtkTubeFilter.newInstance();
201+
tubeFilter.setCapping(false);
202+
tubeFilter.setNumberOfSides(numberOfSides);
203+
204+
tubeFilter.setInputData(polyData);
205+
206+
const tubeOutput = tubeFilter.getOutputData();
207+
208+
// Each segment should have numberOfPoints * sidesShareVertices * numberOfSides
209+
// sidesShareVertices = 1
210+
// numberOfSides = 3
211+
// 2 * 1 * 3 + 4 * 1 * 3
212+
t.ok(
213+
tubeOutput.getPoints().getNumberOfPoints() ===
214+
2 * sidesShareVertices * numberOfSides +
215+
4 * sidesShareVertices * numberOfSides,
216+
'Make sure the output number of points is correct.'
217+
);
218+
219+
tubeFilter.setCapping(true);
220+
221+
tubeFilter.setInputData(polyData);
222+
223+
const tubeOutputCapping = tubeFilter.getOutputData();
224+
225+
// Each segment should have numberOfPoints * sidesShareVertices * numberOfSides
226+
// sidesShareVertices = 1
227+
// numberOfSides = 3
228+
// 2 * 1 * 3 + 4 * 1 * 3
229+
// Caps should have numberOfSides * 2 (each end) * numberOfLines
230+
t.ok(
231+
tubeOutputCapping.getPoints().getNumberOfPoints() ===
232+
2 * sidesShareVertices * numberOfSides +
233+
4 * sidesShareVertices * numberOfSides +
234+
numberOfLines * numberOfSides * 2,
235+
'Make sure the output number of points is correct with capping.'
236+
);
237+
238+
t.end();
239+
});

0 commit comments

Comments
 (0)