Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // namespace | |
| var SLAcer = SLAcer || {}; | |
| ;(function() { | |
| // Constructor | |
| function Mesh(geometry, material) { | |
| // normalize geometry | |
| if (geometry instanceof THREE.BufferGeometry) { | |
| geometry = new THREE.Geometry().fromBufferGeometry(geometry); | |
| } | |
| // center geometry | |
| geometry.center(); | |
| // bounding box min coords | |
| //var min = geometry.boundingBox.min; | |
| // set geometry origin to [0, 0] | |
| //geometry.translate(-min.x, -min.y, -min.z); | |
| // call parent constructor | |
| THREE.Mesh.call(this, geometry, material || new THREE.MeshNormalMaterial()); | |
| // get geometry volume | |
| this.getVolume(); | |
| } | |
| // extends | |
| Mesh.prototype = Object.create(THREE.Mesh.prototype); | |
| Mesh.prototype.constructor = Mesh; | |
| // ------------------------------------------------------------------------- | |
| Mesh.prototype.getSize = function() { | |
| return this.geometry.boundingBox.size(); | |
| }; | |
| // http://stackoverflow.com/questions/23279521 | |
| Mesh.prototype.getVolume = function(update) { | |
| if (! update && this.userData.volume !== undefined) { | |
| return this.userData.volume; | |
| } | |
| var volume = 0; | |
| var faces = this.geometry.faces; | |
| var vertices = this.geometry.vertices; | |
| var face, v1, v2, v3; | |
| for (var i = 0; i < faces.length; i++) { | |
| face = faces[i]; | |
| v1 = vertices[face.a]; | |
| v2 = vertices[face.b]; | |
| v3 = vertices[face.c]; | |
| volume += ( | |
| -(v3.x * v2.y * v1.z) | |
| +(v2.x * v3.y * v1.z) | |
| +(v3.x * v1.y * v2.z) | |
| -(v1.x * v3.y * v2.z) | |
| -(v2.x * v1.y * v3.z) | |
| +(v1.x * v2.y * v3.z) | |
| ) / 6; | |
| } | |
| return (this.userData.volume = volume); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| // export module | |
| SLAcer.Mesh = Mesh; | |
| })(); |