-
-
Notifications
You must be signed in to change notification settings - Fork 412
Expand file tree
/
Copy pathtestGlyph3DMapperShiftScale.js
More file actions
98 lines (81 loc) · 3.32 KB
/
testGlyph3DMapperShiftScale.js
File metadata and controls
98 lines (81 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import test from 'tape';
import testUtils from 'vtk.js/Sources/Testing/testUtils';
import 'vtk.js/Sources/Rendering/Misc/RenderingAPIs';
import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor';
import vtkCellArray from 'vtk.js/Sources/Common/Core/CellArray';
import vtkGlyph3DMapper from 'vtk.js/Sources/Rendering/Core/Glyph3DMapper';
import vtkPolyData from 'vtk.js/Sources/Common/DataModel/PolyData';
import vtkRenderWindow from 'vtk.js/Sources/Rendering/Core/RenderWindow';
import vtkRenderer from 'vtk.js/Sources/Rendering/Core/Renderer';
function makePolyDataFromPoints(coords) {
const polyData = vtkPolyData.newInstance();
polyData.getPoints().setData(Float32Array.from(coords), 3);
return polyData;
}
function updatePoints(polyData, coords) {
polyData.getPoints().setData(Float32Array.from(coords), 3);
polyData.getPoints().modified();
polyData.modified();
}
function makeLineGlyphSource() {
const source = makePolyDataFromPoints([-0.5, 0, 0, 0.5, 0, 0]);
source.setLines(
vtkCellArray.newInstance({
values: new Uint32Array([2, 0, 1]),
})
);
return source;
}
function getActivePrimitiveCABOs(openGLRenderWindow, mapper) {
const openGLMapper = openGLRenderWindow.getViewNodeFor(mapper);
const primitives = openGLMapper.getReferenceByName('primitives');
return primitives
.map((primitive) => primitive.getCABO())
.filter((cabo) => cabo.getElementCount() > 0);
}
test.onlyIfWebGL(
'Test vtkGlyph3DMapper clears source VBO shift/scale after shifted glyph centers',
(t) => {
const gc = testUtils.createGarbageCollector(t);
const container = document.querySelector('body');
const renderWindowContainer = gc.registerDOMElement(
document.createElement('div')
);
container.appendChild(renderWindowContainer);
const renderWindow = gc.registerResource(vtkRenderWindow.newInstance());
const renderer = gc.registerResource(vtkRenderer.newInstance());
renderWindow.addRenderer(renderer);
const centers = gc.registerResource(
makePolyDataFromPoints([10000000, 0, 0, 10000001, 0, 0])
);
const source = gc.registerResource(makeLineGlyphSource());
const mapper = gc.registerResource(vtkGlyph3DMapper.newInstance());
const actor = gc.registerResource(vtkActor.newInstance());
mapper.setInputData(centers, 0);
mapper.setInputData(source, 1);
mapper.setScalarVisibility(false);
actor.setMapper(mapper);
renderer.addActor(actor);
const openGLRenderWindow = gc.registerResource(
renderWindow.newAPISpecificView()
);
openGLRenderWindow.setContainer(renderWindowContainer);
renderWindow.addView(openGLRenderWindow);
openGLRenderWindow.setSize(1, 1);
renderWindow.render();
const shiftedCABOs = getActivePrimitiveCABOs(openGLRenderWindow, mapper);
t.ok(shiftedCABOs.length > 0, 'glyph source VBOs were built');
t.ok(
shiftedCABOs.some((cabo) => cabo.getCoordShiftAndScaleEnabled()),
'far glyph centers enable shift/scale on source VBOs'
);
updatePoints(centers, [-0.5, 0, 0, 0.5, 0, 0]);
renderWindow.render();
const unshiftedCABOs = getActivePrimitiveCABOs(openGLRenderWindow, mapper);
t.ok(
unshiftedCABOs.every((cabo) => !cabo.getCoordShiftAndScaleEnabled()),
'source VBO shift/scale is cleared once glyph centers no longer use it'
);
gc.releaseResources();
}
);