Skip to content

Commit e954c74

Browse files
authored
Merge pull request #2339 from Kitware/fix-obbtree-tests
Fix obbtree tests
2 parents b195c26 + e37815a commit e954c74

File tree

2 files changed

+49
-58
lines changed

2 files changed

+49
-58
lines changed

Sources/Filters/General/OBBTree/index.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,6 @@ function vtkOBBTree(publicAPI, model) {
157157
for (let i = 0; i < 3; i++) {
158158
for (let j = 0; j < 3; j++) {
159159
a[i][j] = a[i][j] / totMass - mean[i] * mean[j];
160-
// send to zero if close to zero
161-
if (Math.abs(a[i][j]) < 1e-12) {
162-
a[i][j] = 0;
163-
}
164160
}
165161
}
166162

Sources/Filters/General/OBBTree/test/testOBBTree.js

Lines changed: 49 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import test from 'tape-catch';
22

3-
import vtkArrowSource from 'vtk.js/Sources/Filters/Sources/ArrowSource';
43
import vtkCubeSource from 'vtk.js/Sources/Filters/Sources/CubeSource';
54
import vtkMath from 'vtk.js/Sources/Common/Core/Math';
65
import vtkOBBTree from 'vtk.js/Sources/Filters/General/OBBTree';
@@ -10,39 +9,30 @@ import vtkTriangleFilter from 'vtk.js/Sources/Filters/General/TriangleFilter';
109

1110
const epsilon = 0.0001;
1211

13-
test('Test OBB tree constructor', (t) => {
14-
const source = vtkArrowSource.newInstance();
15-
source.update();
16-
const mesh = source.getOutputData();
17-
18-
const obbTree = vtkOBBTree.newInstance();
19-
obbTree.setDataset(mesh);
20-
obbTree.setMaxLevel(2);
21-
obbTree.buildLocator();
22-
23-
const corner = [0, 0, 0];
24-
const max = [0, 0, 0];
25-
const mid = [0, 0, 0];
26-
const min = [0, 0, 0];
27-
const size = [0, 0, 0];
28-
const computedValues = [corner, max, mid, min, size];
29-
const expectedValues = [
30-
{ name: 'corner', value: [-0.325, -0.1, -0.0866] },
31-
{ name: 'max', value: [1, 0, 0] },
32-
{ name: 'mid', value: [0, 0, 0.1732] },
33-
{ name: 'min', value: [0, 0.2, 0] },
34-
{ name: 'size', value: [0.0658262, 0.00126738, 0.00126738] },
12+
function getAllCorners(startCorner, min, mid, max) {
13+
const start2min = vtkMath.add(startCorner, min, []);
14+
const start2mid = vtkMath.add(startCorner, mid, []);
15+
const start2max = vtkMath.add(startCorner, max, []);
16+
const start2min2mid = vtkMath.add(start2min, mid, []);
17+
const start2mid2max = vtkMath.add(start2mid, max, []);
18+
const start2max2min = vtkMath.add(start2max, min, []);
19+
const oppositeCorner = vtkMath.add(start2min2mid, max, []);
20+
return [
21+
[...startCorner],
22+
start2min,
23+
start2mid,
24+
start2max,
25+
start2min2mid,
26+
start2mid2max,
27+
start2max2min,
28+
oppositeCorner,
3529
];
30+
}
3631

37-
obbTree.computeOBBFromDataset(mesh, corner, max, mid, min, size);
38-
39-
computedValues.forEach((value, index) => {
40-
const expected = expectedValues[index];
41-
t.ok(vtkMath.areEquals(value, expected.value, epsilon), expected.name);
42-
});
43-
44-
t.end();
45-
});
32+
// does point exist in points, with tolerance
33+
function hasMatchingPoint(point, points, eps) {
34+
return !!points.find((pt) => vtkMath.areEquals(point, pt, eps));
35+
}
4636

4737
test('Test OBB tree transform', (t) => {
4838
const source = vtkCubeSource.newInstance();
@@ -59,39 +49,44 @@ test('Test OBB tree transform', (t) => {
5949
const mid = [0, 0, 0];
6050
const min = [0, 0, 0];
6151
const size = [0, 0, 0];
62-
const computedValues = [corner, max, mid, min, size];
63-
obbTree.computeOBBFromDataset(mesh, corner, max, mid, min, size);
6452

65-
const expectedValues = [
66-
{ name: 'corner', value: [-0.5, -0.5, -0.5] },
67-
{ name: 'max', value: [0, 0, 1] },
68-
{ name: 'mid', value: [1, 0, 0] },
69-
{ name: 'min', value: [0, 1, 0] },
70-
{ name: 'size', value: [0.13888, 0.13888, 0.13888] },
53+
const expectedSize = [0.13888, 0.13888, 0.13888];
54+
const expectedCorners = [
55+
[-0.5, -0.5, -0.5],
56+
[-0.5, -0.5, 0.5],
57+
[-0.5, 0.5, -0.5],
58+
[-0.5, 0.5, 0.5],
59+
[0.5, -0.5, -0.5],
60+
[0.5, -0.5, 0.5],
61+
[0.5, 0.5, -0.5],
62+
[0.5, 0.5, 0.5],
7163
];
72-
computedValues.forEach((value, index) => {
73-
const expected = expectedValues[index];
74-
t.ok(vtkMath.areEquals(value, expected.value, epsilon), expected.name);
64+
65+
obbTree.computeOBBFromDataset(mesh, corner, max, mid, min, size);
66+
const allCorners = getAllCorners(corner, min, mid, max);
67+
68+
allCorners.forEach((actual, index) => {
69+
t.ok(hasMatchingPoint(actual, expectedCorners, epsilon), `Corner ${index}`);
7570
});
71+
t.ok(vtkMath.areEquals(size, expectedSize, epsilon), 'size');
7672

7773
const translation = [10, 0, 0];
7874
const transform = vtkMatrixBuilder
7975
.buildFromRadian()
8076
.translate(...translation);
8177
obbTree.transform(transform);
8278
const tree = obbTree.getTree();
83-
const translatedComputedValues = [
84-
tree.getCorner(),
85-
tree.getAxes()[0],
86-
tree.getAxes()[1],
87-
tree.getAxes()[2],
88-
];
89-
expectedValues.pop();
90-
vtkMath.add(expectedValues[0].value, translation, expectedValues[0].value);
9179

92-
translatedComputedValues.forEach((value, index) => {
93-
const expected = expectedValues[index];
94-
t.ok(vtkMath.areEquals(value, expected.value, epsilon), expected.name);
80+
const translatedCorners = getAllCorners(tree.getCorner(), ...tree.getAxes());
81+
const expectedTranslatedCorners = expectedCorners.map((point) =>
82+
vtkMath.add(point, translation, [])
83+
);
84+
85+
translatedCorners.forEach((actual, index) => {
86+
t.ok(
87+
hasMatchingPoint(actual, expectedTranslatedCorners, epsilon),
88+
`Corner ${index}`
89+
);
9590
});
9691
t.end();
9792
});

0 commit comments

Comments
 (0)