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));
}