Skip to content

Instantly share code, notes, and snippets.

@pearswj
Last active March 14, 2021 12:00
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save pearswj/ae6e6483107e1a246a5deeec0e78ce89 to your computer and use it in GitHub Desktop.
Rhino + Draco round-tripping
license: mit
<!DOCTYPE html>
<html>
<body>
<script type="module">
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.126.0/build/three.module.js'
import { OrbitControls } from 'https://cdn.jsdelivr.net/npm/three@0.124.0/examples/jsm/controls/OrbitControls.js'
import rhino3dm from 'https://cdn.jsdelivr.net/npm/rhino3dm@0.15.0-beta/rhino3dm.module.js'
const data = {
mesh: '{"version":10000,"archive3dm":70,"opennurbs":-1911260795,"data":"+n8CAPkxAAAAAAAA+/8CABQAAAAAAAAA5NTXTkfp0xG/5QAQgwEi8C25G1z8/wIAwTEAAAAAAAA4NgMAABIBAADSHTOevfjl/9IdM569+OX/0h0znr345f/SHTOevfjl/9IdM569+OX/0h0znr345f/SHTOevfjl/9IdM569+OX/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAIA/AACAPwAAgL8AAIC/AACAvwAAgD8AAIA/AACAPwAAgL8AAIC/AACAvwAAgD8AAIA/AACAvwAAgL//////AAAAAAACAAAAAAACAAEAAQAEAAMABQAFAAYACAAHAAcACwAKAAkACQANAAwADgAOAA8AEQAQABAAEwAUABIAEgAXABYAFQAVABoAGAAZABkAGwAcAB0AHQAeAB8AIAAgACEAIgAjACMAJAAlACYAJgAoACcAKQApACoAKwAsACwALQAuAC8ALwAwADIAMQAxADMANAA1ADUANwA2ADgAOAA5ADoAOwA7ADwAPQA+AD4AQAA/AEEAQQBCAEMARABEAEUARgBHAEcASQBIAEoASgBLAEwATQBNAE4ATwBQAFAAUQBTAFIAUgBUAFUAVgBWAFcAWABZAFkAWgBbAFwAXABfAF0AXgBeAGAAYgBhAGEAZABjAGUAZQBmAGcAaABoAGkAagBrAGsAbQBsAG4AbgBwAG8AcQBxAHIAcwB0AHQAdQB2AHcAdwB5AHgAegB6AHwAewB9AH0AfgB/AIAAgACBAIIAgwCDAIQAhQCGAIYAhwCJAIgAiACKAIsAjACMAI0AjgCPAI8AkQCQAJIAkgCTAJUAlACUAJYAlwCYAJgAmQCaAJsAmwCdAJwAngCeAKAAnwChAKEAowCiAKQApACmAKUApwCnAKgAqQCqAKoAqwCsAK0ArQCvAK4AsACwALEAsgCzALMAtQC0ALYAtgC3ALgAuQC5ALsAugC8ALwAvgC9AL8AvwDCAMAAwQDBAMQAwwDFAMUAxgDHAMgAyADJAMoAywDLAM0AzADOAM4AzwDQANEA0QDSANQA0wDTANUA1gDXANcA2QDYANoA2gDbANwA3QDdAN4A3wDgAOAA4gDhAOMA4wDlAOQA5gDmAOcA6ADpAOkA6gDrAOwA7ADtAO4A7wDvAPEA8ADyAPIA9ADzAPUA9QD2APgA9wD3APkA+gD7APsA/QD8AP4A/gAAAf8AAQEBAQIBAwEEAQQBBQEGAQcBBwEJAQgBCgEKAQwBCwENAQ0BDgEPARABEAERARIBEwETARQBFQEWARYBGAEXARkBGQEbARoBHAEcAR0BHgEfAR8BIAEhASIBIgEjASQBJQElAScBJgEoASgBKgEpASsBKwEuAS0BLAEsAS8BMAExATEBMgEzATQBNAE1ATYBNwE3ATgBOQE6AToBOwE8AT0BPQE/AT4BQAFAAUEBQgFDAUMBRQFEAUYBRgFHAUgBSQFJAUoBSwFMAUwBTQFOAU8BTwFQAVEBUgFSAVMBVAFVAVUBVgFXAVgBWAFaAVkBWwFbAVwBXQFeAV4BXwFgAWEBYQFjAWIBZAFkAWUBZgFnAWcBaQFoAWoBagFrAWwBbQFtAW4BcAFvAW8BcgFxAXMBcwF0AXUBdgF2AXcBeAF5AXkBewF8AXoBegF9AX4BfwF/AYIBgAGBAYEBgwGEAYUBhQGGAYcBiAGIAYkBigGLAYsBjAGNAY4BjgGPAZABkQGRAZIBkwGUAZQBlQGXAZYBlgGYAZoBmQGZAZsBnQGcAZwBnwGeAaABoAGiAaEBowGjAaUBpAGmAaYBpwGpAagBqAGrAaoBrAGsAa4BrQGvAa8BsAGyAbEBsQG0AbUBswGzAbYBuAG3AbcBuQG7AboBugG9AbwBvgG+AcABvwHBAcEBwwHEAcIBwgHFAccBxgHGAckByAHKAcoBywHMAc0BzQHOAdABzwHPAdIB0QHTAdMB1QHUAdYB1gHZAdcB2AHYAdwB2gHbAdsB3QHfAd4B3gHhAeAB4gHiAeQB4wHlAeUB6AHmAecB5wHpAesB6gHqAe0B7AHuAe4B7wHxAfAB8AHzAfIB9AH0AfUB9wH2AfYB+gH4AfkB+QH7Af0B/AH8Af4BAAL/Af8BAQIDAgICAgIEAgUCBgIGAgkCBwIIAggCCwIKAgwCDAINAg8CDgIOAhACEgIRAhECEwIUAhUCFQIYAhYCFwIXAhoCGQIbAhsCHAIeAh0CHQIgAh8CIQIhAiMCIgIkAiQCJwIlAiYCJgIpAigCKgIqAisCLQIsAiwCLgIvAjACMAIzAjECMgIyAjYCNAI1AjUCOQI3AjgCOAI8AjoCOwI7Aj8CPQI+Aj4CQgJAAkECQQJEAkMCRQJFAkgCRgJHAkcCSgJJAksCSwJOAkwCTQJNAlAC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"}',
draco: 'RFJBQ08CAgEBAAAAtgaSAgKSAgAAZ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////z//ArZfAQEAAQEAA/8AAAAAAAEAAAEACQMAAAIBAQkDAAEDAQICBAACAQEBAQAPA+0GJw0X3SAtAZoB8TATDTBalHQ9CbKGGf7CNXIT6J3jAlI0CLE0bfQ2cybjoGOH0HW1K3K8dEa0ENIon2zX4GAOlWbbz9T9gFFH0hTsBwzZ1kdIDe+nwxti190F6cefB1kZ/pjA+MiHpZN3qVaBLCH3uUJUC7z2nZuCbhBLoW5sLKrvGQ5foOgd3oXqiDwFYJHKlrPBhzp77zZjDejLCVv5RdOvkzFxUp0u3NM5JB+c4p8rC7Ukf+Yac6lqusOLQzUmZoczyZ2KqaYYBrit6e2VQrGMPngS0Bd+6M1YVVvuAMs/hJwYmeV5MkpuYXyQ35Rys1aARPQjutzOC2OxHG1K7daYNcwjalISfaXBWgLWKvCP0KiVbUyq1RbCGrHjbqw+0NF4xa2AO2Z2WEAeQztKJvzyJDhYdLEPPOw3lxzEgrPJPbrjTSHgaKMuwZ6xerZy5bIZvx3ifWIVDwE/rwqWx6b86hBS2XD4pSSpAZCbqsyEQko6hCeUpEQoHpohkPGGni2OdcPOJsfM568rPwfDiy8ShNHFGYkeSZORyHW9cwJbtzsp8L+i90foGDbuNrzrmUfcwmh5sqiTjUyQEYPMWADtHHvWGdB5IDMoJZtgI3XsjdZXD+3HA6k6BesPusgc4oTGOWCNDgzyxxCoGKQsfUnOg9896/z34fPfcKMtIZep79V1efpg3UPAz6uCX5TjdrovyZE7SUp5RE5ATtRTl3sflG6RDmWb+OhO1olx/wvu5g0RtxqFyn7oM0mT0ovRwJDqyd/k5ZU7XfESy6EuhNHFGQnzNQdljCIBTfqRYvxT+yY952dOjh70Qydzyv8cLVM155NMVXROyeFdzzyCqP+/SQDXWIjWRH5CRIxq1Caw5LN1DFqP7sQ6tD4TACCcREdFil2rKWJi48I+g4/yWpyds+3JbnLdfuwot1YZRT6Dr6JGlcPk6VblcDDAIJcKEHAVFQ/+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'
}
let rhino
rhino3dm().then(async m => {
console.log('Loaded rhino3dm.')
rhino = m // global
init()
const mat = new THREE.MeshBasicMaterial({ vertexColors: true })
const mesh = rhino.CommonObject.decode(JSON.parse(data.mesh))
let threeMesh = meshToThreejs(mesh, mat)
threeMesh = threeMesh.translateX(12)
scene.add(threeMesh)
const meshDraco = rhino.DracoCompression.decompressBase64String(data.draco)
let threeMeshDraco = meshToThreejs(meshDraco, mat)
threeMeshDraco = threeMeshDraco.translateX(-12)
scene.add(threeMeshDraco)
zoomCameraToSelection(camera, controls, scene.children)
})
function meshToThreejs (mesh, material) {
const loader = new THREE.BufferGeometryLoader()
const geometry = loader.parse(mesh.toThreejsJSON())
return new THREE.Mesh(geometry, material)
}
// more globals
let scene, camera, renderer, controls
/**
* Sets up the scene, camera, renderer, lights and controls and starts the animation
*/
function init() {
// Rhino models are z-up, so set this as the default
THREE.Object3D.DefaultUp = new THREE.Vector3( 0, 0, 1 );
// create a scene and a camera
scene = new THREE.Scene()
scene.background = new THREE.Color(1, 1, 1)
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000)
camera.position.set(0, 1, 0) // like perspective view
// very light grey for background, like rhino
scene.background = new THREE.Color('whitesmoke')
// create the renderer and add it to the html
renderer = new THREE.WebGLRenderer({ antialias: true })
renderer.setPixelRatio( window.devicePixelRatio )
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
// add some controls to orbit the camera
controls = new OrbitControls(camera, renderer.domElement)
// add a directional light
const directionalLight = new THREE.DirectionalLight( 0xffffff )
directionalLight.intensity = 2
scene.add( directionalLight )
const ambientLight = new THREE.AmbientLight()
scene.add( ambientLight )
// handle changes in the window size
window.addEventListener( 'resize', onWindowResize, false )
animate()
}
/**
* The animation loop!
*/
function animate() {
requestAnimationFrame( animate )
controls.update()
renderer.render(scene, camera)
}
/**
* Helper function for window resizes (resets the camera pov and renderer size)
*/
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight
camera.updateProjectionMatrix()
renderer.setSize( window.innerWidth, window.innerHeight )
animate()
}
/**
* Helper function that behaves like rhino's "zoom to selection", but for three.js!
*/
function zoomCameraToSelection( camera, controls, selection, fitOffset = 1.2 ) {
const box = new THREE.Box3();
for( const object of selection ) {
if (object.isLight) continue
box.expandByObject( object );
}
const size = box.getSize( new THREE.Vector3() );
const center = box.getCenter( new THREE.Vector3() );
const maxSize = Math.max( size.x, size.y, size.z );
const fitHeightDistance = maxSize / ( 2 * Math.atan( Math.PI * camera.fov / 360 ) );
const fitWidthDistance = fitHeightDistance / camera.aspect;
const distance = fitOffset * Math.max( fitHeightDistance, fitWidthDistance );
const direction = controls.target.clone()
.sub( camera.position )
.normalize()
.multiplyScalar( distance );
controls.maxDistance = distance * 10;
controls.target.copy( center );
camera.near = distance / 100;
camera.far = distance * 100;
camera.updateProjectionMatrix();
camera.position.copy( controls.target ).sub(direction);
controls.update();
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment