Vertex Viewer Example
by Dan Schultz
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>3D viewer with Vertex</title>
<link rel="stylesheet" href="https://unpkg.com/@vertexvis/[email protected]/dist/viewer/viewer.css"/>
<script type="module" src="https://unpkg.com/@vertexvis/[email protected]/dist/viewer/viewer.esm.js"></script>
<script nomodule src="https://unpkg.com/@vertexvis/[email protected]/dist/viewer.js"></script>
<style>
.viewer {
width: 500px;
height: 500px;
}
</style>
</head>
<body>
<vertex-viewer
id="viewer"
class="viewer"
credentials-client-id="client-id"
credentials-token="oauthtoken"
>
<vertex-viewer-toolbar class="viewer-toolbar" data-viewer="viewer"></vertex-viewer-toolbar>
</vertex-viewer>
</body>
</html>
JavaScript
window.addEventListener("DOMContentLoaded", () => {
main();
})
async function main() {
const viewer = document.querySelector('#viewer');
await loadModel(viewer);
viewer.addEventListener('tap', async (event) => {
const { point } = event.details;
const scene = await viewer.scene();
scene.raycast(point)
.clearAllHighlights()
.highlight("#ff0000")
.show()
.execute();
scene.items()
.highlight("#ff0000", s => s.hitPoint(point))
.show(s => s.hitPoint(point))
.execute();
})
// Register a pick handler on the viewer.
viewer.addEventListener('pick', async function(event) {
const scene = await viewer.scene();
if (event.detail.hitResults.length === 0) {
scene.clearAllHighlights().execute();
} else {
scene
.clearAllHighlights()
.highlight('#ff0000', s => s.withItemId(event.detail.hitResults[0].bomItem.id))
.execute();
}
});
}
async function measure(viewer) {
const date = new Date();
return new Promise((resolve, reject) => {
const listener = () => {
resolve(`${new Date() - date}ms`);
viewer.removeEventListener('frameDrawn', listener);
};
viewer.addEventListener('frameDrawn', listener);
})
}
async function loadModel(viewer) {
const newScene = await viewer.newScene();
newScene
.from('urn:vertexvis:eedc:file?externalId=mymodel')
.hide(selector =>
selector
.withMetadata('Name', 'valve_body')
.or()
.withMetadata('Name', 'cover')
)
.highlight('#ff0000', selector =>
selector.withMetadata('Name', 'arm_SOLID_SOLIDS')
)
.execute()
.then(scene => viewer.load(scene));
}