Permalink
Please sign in to comment.
@@ -1,3 +1,4 @@ | ||
dist/ | ||
cache/ | ||
stl/ | ||
+_*.* |
260
js/main_.js
@@ -1,260 +0,0 @@ | ||
-// ----------------------------------------------------------------------------- | ||
-// Configuration | ||
-// ----------------------------------------------------------------------------- | ||
-var layerHeight = 0.1; | ||
- | ||
-var dropTarget = document.getElementById('viewers'); | ||
- | ||
-var buildVolume = { | ||
- x: 100, // mm | ||
- y: 100, // mm | ||
- z: 100 // mm | ||
-}; | ||
- | ||
-var viewerSize = { | ||
- width : 400, // px | ||
- height: 400 // px | ||
-}; | ||
- | ||
-var settings = { | ||
- viewer1: { | ||
- target: document.getElementById('viewer1'), | ||
- buildVolume: { size: buildVolume }, | ||
- size: viewerSize, | ||
- //view: 'front' | ||
- }, | ||
- viewer2: { | ||
- target: document.getElementById('viewer2'), | ||
- buildVolume: { size: buildVolume }, | ||
- size: viewerSize | ||
- }, | ||
- viewer3: { | ||
- target: document.getElementById('viewer3'), | ||
- screen: { | ||
- width : 600, // px | ||
- height : 400, // px | ||
- diagonal: 7.99 // in | ||
- }, | ||
- buildPlate: { size: buildVolume } | ||
- } | ||
-}; | ||
- | ||
-var logInfo = true; | ||
-var logError = true; | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// Debug | ||
-// ----------------------------------------------------------------------------- | ||
-function log(type, args) { | ||
- console[type].apply(console, args); | ||
-} | ||
- | ||
-function info() { | ||
- logInfo && log('info', Array.prototype.slice.call(arguments)); | ||
-} | ||
- | ||
-function error() { | ||
- logError && log('error', Array.prototype.slice.call(arguments)); | ||
-} | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// 3D viewer | ||
-// ----------------------------------------------------------------------------- | ||
-var viewer1 = new SLAcer.Viewer3D(settings.viewer1); | ||
-var viewer2 = new SLAcer.Viewer3D(settings.viewer2); | ||
-var viewer3 = new SLAcer.Viewer2D(settings.viewer3); | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// UI | ||
-// ----------------------------------------------------------------------------- | ||
-var $meshFacesValue = document.getElementById('mesh-faces-value'); | ||
-var $meshVolumeValue = document.getElementById('mesh-volume-value'); | ||
-var $zPositionValue = document.getElementById('z-position-value'); | ||
-var $zPositionInput = document.getElementById('z-position-input'); | ||
-var $layerHeightValue = document.getElementById('layer-height-value'); | ||
-var $layersValue = document.getElementById('layers-value'); | ||
-var $layerValue = document.getElementById('layer-value'); | ||
-var $layerInput = document.getElementById('layer-input'); | ||
- | ||
-function updateMeshInfo(mesh) { | ||
- var faces = mesh.geometry.faces.length; | ||
- var volume = parseInt(mesh.getVolume()); | ||
- | ||
- info('faces:', faces); | ||
- info('volume:', volume); | ||
- | ||
- $meshFacesValue.innerHTML = faces; | ||
- $meshVolumeValue.innerHTML = volume; | ||
-} | ||
- | ||
-function updateZPosition(position) { | ||
- // current layer | ||
- var layer = Math.round(position / layerHeight) + 1; | ||
- | ||
- $zPositionValue.innerHTML = parseFloat(position); | ||
- $zPositionInput.value = parseFloat(position); | ||
- $layerValue.innerHTML = layer; | ||
- $layerInput.value = layer; | ||
-} | ||
- | ||
-function resetZPosition(max) { | ||
- // reset z position | ||
- updateZPosition(0); | ||
- | ||
- // z position | ||
- $zPositionInput.value = '0'; | ||
- $zPositionInput.setAttribute('max', max); | ||
- $zPositionInput.setAttribute('step', layerHeight); | ||
- | ||
- // layers | ||
- var layers = Math.ceil(slicer.zHeight / layerHeight); | ||
- | ||
- $layerHeightValue.innerHTML = layerHeight; | ||
- $layersValue.innerHTML = layers; | ||
- | ||
- $layerInput.value = '1'; | ||
- $layerInput.setAttribute('max', layers); | ||
-} | ||
- | ||
-function updateScreenInfo() { | ||
- var screen = viewer3.screen; | ||
- var dotPitch = parseFloat(viewer3.dotPitch).toFixed(3); | ||
- | ||
- info('screen:', screen); | ||
- info('dotPitch:', dotPitch, 'mm'); | ||
-} | ||
- | ||
-updateScreenInfo(); | ||
- | ||
-$zPositionInput.addEventListener('input', function(e) { | ||
- slice(e.target.value); | ||
-}, false); | ||
- | ||
-$layerInput.addEventListener('input', function(e) { | ||
- slice(e.target.value * layerHeight); | ||
-}, false); | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// Slicer | ||
-// ----------------------------------------------------------------------------- | ||
-var slicer = new SLAcer.Slicer(); | ||
- | ||
-var mesh1, mesh2, shapes, plane1, plane2; | ||
- | ||
-function slice(zPosition) { | ||
- // z position | ||
- zPosition = parseFloat(zPosition || 0); | ||
- info('zPosition:', zPosition); | ||
- updateZPosition(zPosition); | ||
- | ||
- // world position | ||
- var worldPosition = slicer.zOffset + zPosition; | ||
- plane1.position.z = worldPosition; | ||
- plane2.position.z = worldPosition; | ||
- | ||
- // get slice | ||
- var slice = slicer.getFaces(zPosition); | ||
- | ||
- // log info | ||
- info('polygons:', slice.polygons.length); | ||
- info('time:', slice.time, 'ms'); | ||
- | ||
- // remove/add shapes | ||
- if (shapes && shapes.length) { | ||
- for (var i = 0, il = shapes.length; i < il; i++) { | ||
- viewer3.removeObject(shapes[i]); | ||
- } | ||
- } | ||
- shapes = slice.shapes; | ||
- for (var i = 0, il = shapes.length; i < il; i++) { | ||
- viewer3.scene.add(shapes[i]); | ||
- } | ||
- | ||
- // compute bounding box | ||
- var geometry = slice.geometry; | ||
- geometry.computeBoundingBox(); | ||
- | ||
- // remove/add mesh | ||
- mesh2 && viewer2.removeObject(mesh2); | ||
- mesh2 = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial({ | ||
- wireframe: true | ||
- })); | ||
- viewer2.addObject(mesh2); | ||
- | ||
- // render | ||
- viewer1.render(); | ||
- viewer2.render(); | ||
- viewer3.render(); | ||
-} | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// STL loader | ||
-// ----------------------------------------------------------------------------- | ||
-// Loader instance | ||
-var loader = new MeshesJS.STLLoader(dropTarget); | ||
- | ||
-// On Geometry loaded | ||
-loader.onGeometry = function(geometry) { | ||
- try { | ||
- // remove old mesh and plane | ||
- plane1 && viewer1.removeObject(plane1); | ||
- plane2 && viewer2.removeObject(plane2); | ||
- mesh1 && viewer1.removeObject(mesh1); | ||
- mesh2 && viewer2.removeObject(mesh2); | ||
- | ||
- // load new mesh in slicer | ||
- slicer.loadMesh(new SLAcer.Mesh(geometry, new THREE.MeshNormalMaterial({ | ||
- wireframe: true | ||
- }))); | ||
- | ||
- // shortcuts | ||
- mesh1 = slicer.mesh; | ||
- mesh2 = slicer.slice; | ||
- plane1 = slicer.plane; | ||
- plane2 = plane1.clone(); | ||
- | ||
- // add new mesh and render view | ||
- viewer1.addObject(plane1); | ||
- viewer1.addObject(mesh1); | ||
- viewer1.render(); | ||
- | ||
- // add new slice and render view | ||
- viewer2.addObject(plane2); | ||
- viewer2.addObject(mesh2); | ||
- viewer2.render(); | ||
- | ||
- // init z position | ||
- resetZPosition(slicer.zHeight); | ||
- | ||
- // update mesh info | ||
- info('mesh:', mesh1); | ||
- updateMeshInfo(mesh1); | ||
- | ||
- // get first slice | ||
- slice(0); | ||
- } | ||
- catch(e) { | ||
- error(e); | ||
- } | ||
-}; | ||
- | ||
-// On loading error | ||
-loader.onError = error; | ||
- | ||
-// ----------------------------------------------------------------------------- | ||
-// load example | ||
-// ----------------------------------------------------------------------------- | ||
-var xmlhttp = new XMLHttpRequest(); | ||
-//var stl = '/stl/Octocat-v2.stl'; | ||
-var stl = '/stl/StressTest.stl'; | ||
-xmlhttp.open("GET", window.location + stl); | ||
-xmlhttp.onreadystatechange = function() { | ||
- if (xmlhttp.readyState == XMLHttpRequest.DONE) { | ||
- if(xmlhttp.status == 200){ | ||
- loader.loadString(xmlhttp.responseText); | ||
- }else{ | ||
- error('xmlhttp: ' + xmlhttp.statusText); | ||
- } | ||
- } | ||
-} | ||
-xmlhttp.send(); |
0 comments on commit
8f5a174