<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/style.min.css?v=v7.*" type="text/css">
<script language="JavaScript" src="https://developer.api.autodesk.com/modelderivative/v2/viewers/viewer3D.min.js?v=v7.*"></script>
<meta name="viewport" content="width=device-width">
<style>
</style>
</head>
<body>
<div></div>
</body>
</html>
#ViewerPropertyPanel{opacity:0.5}
#ViewerPropertyPanel .docking-panel-title {opacity:0.5}
let loaded = false
const jsonGeomConfig={ "NumOfSphere": 3, "geom": [ { "dbId": "123", "color": "#FF0000", "Position": { "posX": "-5", "posY": "-1", "posZ": "2.5" } }, { "dbId": "1234", "color": "#0000FF", "Position": { "posX": "-5", "posY": "-0.8", "posZ": "1.8" } }, { "dbId": "12345", "color": "green", "Position": { "posX": "-3.5", "posY": "-1.5", "posZ": "1.8" } } ] }
Autodesk.Viewing.Initializer({env:'Local'}, ()=>{new Autodesk.Viewing.GuiViewer3D(document.body.children[0],{disableBrowserContextMenu:false}).start('https://dukedhx.github.io/Forge-Workshop/shaver/0.svf');
NOP_VIEWER.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, async ()=>{
if(!loaded)loaded=true;
else return;
var sphereMaterial = [];
const button = document.getElementById('button-geometry');
const sceneBuilder = await NOP_VIEWER.loadExtension('Autodesk.Viewing.SceneBuilder');
const modelBuilder = await sceneBuilder.addNewModel({ conserveMemory: true, modelNameOverride: 'My Custom Model' });
for (let i = 0; i < jsonGeomConfig.NumOfSphere;i++) {
addGeometry(modelBuilder, jsonGeomConfig.geom[i].dbId, i);
}
function addGeometry(modelBuilder, dbId, i) {
const sphereGeometry = new THREE.BufferGeometry().fromGeometry(new THREE.SphereGeometry(0.05, 8, 10));
console.log(jsonGeomConfig.geom[i].color)
sphereMaterial[i] = new THREE.MeshPhongMaterial({ color: jsonGeomConfig.geom[i].color });
const sphereTransform = new THREE.Matrix4().compose(
new THREE.Vector3(jsonGeomConfig.geom[i].Position.posX, jsonGeomConfig.geom[i].Position.posY, jsonGeomConfig.geom[i].Position.posZ),
new THREE.Quaternion(0, 0, 0, 1),
new THREE.Vector3(2,2,2)
);
modelBuilder.addMaterial('MyCustomMaterial'+i, sphereMaterial[i]);
const sphereGeomId = modelBuilder.addGeometry(sphereGeometry);
const sphereFragId = modelBuilder.addFragment(sphereGeomId, 'MyCustomMaterial'+i, sphereTransform);
modelBuilder.changeFragmentsDbId(sphereFragId, dbId);
}
})
})
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |