Permalink
Browse files

Complete rewrite...

1 parent b7ee268 commit 49eab4c4d46ead3d5c74f41b6851b26e517d1f9a @lautr3k committed Mar 15, 2016
Showing with 3,194 additions and 0 deletions.
  1. +42 −0 css/main.css
  2. +38 −0 index.html
  3. +187 −0 js/loader/stl.js
  4. +323 −0 js/main.js
  5. +72 −0 js/slacer/mesh.js
  6. +234 −0 js/slacer/slicer.js
  7. +154 −0 js/slacer/viewcontrols.js
  8. +132 −0 js/slacer/viewer.js
  9. +102 −0 js/slacer/viewer2d.js
  10. +114 −0 js/slacer/viewer3d.js
  11. +106 −0 vendor/ArrowHelper.js
  12. +33 −0 vendor/AxisHelper.js
  13. +669 −0 vendor/OrbitControls.js
  14. +118 −0 vendor/lodash.min.js
  15. +870 −0 vendor/three.min.js
View
@@ -0,0 +1,42 @@
+html, body {
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+}
+
+.box {
+ margin: 5px;
+}
+
+.fl {
+ float: left;
+}
+
+#mesh ul {
+ margin: 0;
+ padding: 5px;
+ border-radius: 6px;
+ list-style-type: none;
+ background-color: #000000;
+}
+
+#mesh .label,
+#mesh .value {
+ padding: 2px;
+ display: inline-block;
+}
+
+#mesh .label {
+ width: 80px;
+ color: #eeeeee;
+}
+
+#mesh .value {
+ width: 50px;
+ float: right;
+ color: #ff0000;
+ font-size: 0.8em;
+ text-align: right;
+ border-radius: 4px;
+ background-color: #550000;
+}
View
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>SLAcer.js</title>
+ <link rel="stylesheet" type="text/css" href="css/main.css" />
+ </head>
+ <body>
+ <div id="mesh" class="box fl">
+ <ul>
+ <li><span class="label">faces</span><span class="value" id="mesh-faces-value">n/a</span></li>
+ <li><span class="label">volume</span><span class="value" id="mesh-volume-value">n/a</span></li>
+ <li><span class="label">layerHeight</span><span class="value" id="layer-height-value">n/a</span></li>
+ <li><span class="label">layers</span><span class="value"><span id="layer-value">n/a</span> / <span id="layers-value">n/a</span></span></li>
+ <li><span class="label">zPosition</span><span class="value" id="z-position-value">n/a</span></li>
+ <li><input id="z-position-input" type="range" value="0" min="0" max="1" step="1" /></li>
+ </ul>
+ </div>
+ <div id="viewers">
+ <div id="viewer1" class="box fl">loading...</div>
+ <div id="viewer2" class="box fl">loading...</div>
+ <div id="viewer3" class="box fl">loading...</div>
+ </div>
+ <script src="vendor/lodash.min.js" type="text/javascript"></script>
+ <script src="vendor/three.min.js" type="text/javascript"></script>
+ <script src="js/slacer/mesh.js" type="text/javascript"></script>
+ <script src="js/slacer/viewer.js" type="text/javascript"></script>
+ <script src="vendor/OrbitControls.js" type="text/javascript"></script>
+ <script src="js/slacer/viewcontrols.js" type="text/javascript"></script>
+ <script src="js/slacer/viewer3d.js" type="text/javascript"></script>
+ <script src="js/slacer/viewer2d.js" type="text/javascript"></script>
+ <script src="js/slacer/slicer.js" type="text/javascript"></script>
+ <script src="js/loader/stl.js" type="text/javascript"></script>
+ <script src="js/main.js" type="text/javascript"></script>
+ </body>
+</html>
View
@@ -0,0 +1,187 @@
+// namespace
+var MeshesJS = MeshesJS || {};
+
+;(function() {
+
+ // Constructor
+ function STLLoader(dropTarget) {
+ this.dropTarget = dropTarget || null;
+ this.addDropListener();
+ }
+
+ // methods
+ STLLoader.prototype.onDragLeave = function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+
+ STLLoader.prototype.onDrop = function(e) {
+ this.onDragLeave(e);
+ this.loadFile((e.target.files || e.dataTransfer.files)[0]);
+ }
+
+ STLLoader.prototype.addDropListener = function(dropTarget) {
+ var dropTarget = dropTarget || this.dropTarget;
+ if (dropTarget) {
+ var self = this;
+ dropTarget.addEventListener('drop' , function(e) { self.onDrop(e); } , false);
+ dropTarget.addEventListener('dragover' , function(e) { self.onDragLeave(e); }, false);
+ dropTarget.addEventListener('dragleave', function(e) { self.onDragLeave(e); }, false);
+ }
+ };
+
+ STLLoader.prototype.removeDropListener = function(dropTarget) {
+ var dropTarget = dropTarget || this.dropTarget;
+ if (dropTarget) {
+ var self = this;
+ dropTarget.removeEventListener('drop' , function(e) { self.onDrop(e); } , false);
+ dropTarget.removeEventListener('dragover' , function(e) { self.onDragLeave(e); }, false);
+ dropTarget.removeEventListener('dragleave', function(e) { self.onDragLeave(e); }, false);
+ }
+ };
+
+ STLLoader.prototype.onGeometry = function(geometry) {};
+ STLLoader.prototype.onError = function(error) {};
+
+ STLLoader.prototype.loadFile = function(file) {
+ // self alias
+ var self = this;
+
+ // file reader instance
+ var reader = new FileReader();
+
+ // on file loaded
+ reader.onloadend = function(event) {
+ // if error/abort
+ if (this.error) {
+ self.onError(this.error);
+ return;
+ }
+
+ // Parse ASCII STL
+ if (typeof this.result === 'string' ) {
+ self.loadString(this.result);
+ return;
+ }
+
+ // buffer reader
+ var view = new DataView(this.result);
+
+ // get faces number
+ try {
+ var faces = view.getUint32(80, true);
+ }
+ catch(error) {
+ self.onError(error);
+ return;
+ }
+
+ // is binary ?
+ var binary = view.byteLength == (80 + 4 + 50 * faces);
+
+ if (! binary) {
+ // get the file contents as string
+ // (faster than convert array buffer)
+ reader.readAsText(file);
+ return;
+ }
+
+ // parse binary STL
+ self.loadBinaryData(view, faces);
+ };
+
+ // start reading file as array buffer
+ reader.readAsArrayBuffer(file);
+ };
+
+ STLLoader.prototype.loadString = function(data) {
+ var length, normal, patternNormal, patternVertex, result, text;
+ var geometry = new THREE.Geometry();
+ var patternFace = /facet([\s\S]*?)endfacet/g;
+
+ while((result = patternFace.exec(data)) !== null) {
+ text = result[0];
+
+ patternNormal = /normal[\s]+([\-+]?[0-9]+\.?[0-9]*([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+/g;
+ patternVertex = /vertex[\s]+([\-+]?[0-9]+\.?[0-9]*([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+[\s]+([\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?)+/g;
+
+ while((result = patternNormal.exec(text)) !== null) {
+ normal = new THREE.Vector3(
+ parseFloat(result[1]),
+ parseFloat(result[3]),
+ parseFloat(result[5])
+ );
+ }
+
+ while((result = patternVertex.exec(text)) !== null) {
+ geometry.vertices.push(new THREE.Vector3(
+ parseFloat(result[1]),
+ parseFloat(result[3]),
+ parseFloat(result[5])
+ ));
+ }
+
+ length = geometry.vertices.length;
+
+ geometry.faces.push(new THREE.Face3(length-3, length-2, length-1, normal));
+ }
+
+ geometry.computeBoundingBox();
+ geometry.computeBoundingSphere();
+
+ this.onGeometry(geometry);
+ };
+
+ STLLoader.prototype.loadBinaryData = function(view, faces) {
+ if (! view instanceof DataView) {
+ var view = new DataView(view);
+ }
+
+ if (! faces) {
+ try {
+ var faces = view.getUint32(80, true);
+ }
+ catch(error) {
+ this.onError(error);
+ return;
+ }
+ }
+
+ var dataOffset = 84;
+ var faceLength = 12 * 4 + 2;
+ var offset = 0;
+ var geometry = new THREE.BufferGeometry();
+ var vertices = new Float32Array( faces * 3 * 3 );
+ var normals = new Float32Array( faces * 3 * 3 );
+
+ for ( var face = 0; face < faces; face ++ ) {
+ var start = dataOffset + face * faceLength;
+ var normalX = view.getFloat32( start, true );
+ var normalY = view.getFloat32( start + 4, true );
+ var normalZ = view.getFloat32( start + 8, true );
+
+ for (var i = 1; i <= 3; i ++) {
+ var vertexstart = start + i * 12;
+
+ normals[ offset ] = normalX;
+ normals[ offset + 1 ] = normalY;
+ normals[ offset + 2 ] = normalZ;
+
+ vertices[ offset ] = view.getFloat32( vertexstart, true );
+ vertices[ offset + 1 ] = view.getFloat32( vertexstart + 4, true );
+ vertices[ offset + 2 ] = view.getFloat32( vertexstart + 8, true );
+
+ offset += 3;
+ }
+ }
+
+ geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
+ geometry.addAttribute('normal', new THREE.BufferAttribute(normals, 3));
+
+ this.onGeometry(geometry);
+ };
+
+ // export module
+ MeshesJS.STLLoader = STLLoader;
+
+})();
Oops, something went wrong.

0 comments on commit 49eab4c

Please sign in to comment.