Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // namespace | |
| var SLAcer = SLAcer || {}; | |
| ;(function() { | |
| // global settings | |
| var globalSettings = { | |
| view: 'default', | |
| buildVolume: { | |
| size: { | |
| x: 100, // mm | |
| y: 100, // mm | |
| z: 100 // mm | |
| }, | |
| color: 0xff0000, | |
| opacity: 0.1 | |
| } | |
| }; | |
| // ------------------------------------------------------------------------- | |
| // Constructor | |
| function Viewer3D(settings) { | |
| // self alias | |
| var self = this; | |
| SLAcer.Viewer.call(self, settings); | |
| _.defaultsDeep(self.settings, Viewer3D.globalSettings); | |
| self.controls = new THREE.OrbitControls(self.camera, self.canvas); | |
| self.controls.addEventListener('change', function() { | |
| self.render(); | |
| }); | |
| self.controls.noKeys = true; | |
| self.light = new THREE.AmbientLight(0x000000); | |
| self.scene.add(self.light); | |
| self.setBuildVolume(self.settings.buildVolume); | |
| self.view = new SLAcer.ViewControls({ | |
| target : self.buildVolumeObject, | |
| controls: self.controls, | |
| camera : self.camera, | |
| margin : 10 | |
| }); | |
| var lights = []; | |
| lights[0] = new THREE.PointLight(0xffffff, 1, 0); | |
| lights[1] = new THREE.PointLight(0xffffff, 1, 0); | |
| lights[2] = new THREE.PointLight(0xffffff, 1, 0); | |
| lights[0].position.set(0, 2000, 0); | |
| lights[1].position.set(1000, 2000, 1000); | |
| lights[2].position.set(-1000, -2000, -1000); | |
| self.scene.add( lights[0] ); | |
| self.scene.add( lights[1] ); | |
| self.scene.add( lights[2] ); | |
| self.setView(this.settings.view); | |
| self.render(); | |
| } | |
| // extends | |
| Viewer3D.prototype = Object.create(SLAcer.Viewer.prototype); | |
| Viewer3D.prototype.constructor = Viewer3D; | |
| // ------------------------------------------------------------------------- | |
| Viewer3D.prototype.dropObject = function(object) { | |
| var volume = this.buildVolume.size; | |
| var size = object.geometry.boundingBox.size(); | |
| object.position.z = -((volume.z - size.z) / 2); | |
| }; | |
| Viewer3D.prototype.addObject = function(object) { | |
| // drop object on build plate | |
| this.dropObject(object); | |
| // call parent method | |
| SLAcer.Viewer.prototype.addObject.call(this, object); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| Viewer3D.prototype.setBuildVolume = function(settings) { | |
| this.buildVolume = _.defaultsDeep({}, settings, this.buildVolume); | |
| var size = this.buildVolume.size; | |
| var unit = this.buildVolume.unit; | |
| var color = this.buildVolume.color; | |
| var opacity = this.buildVolume.opacity; | |
| if (unit == 'in') { // -> mm | |
| size.x *= 25.4; | |
| size.y *= 25.4; | |
| size.z *= 25.4; | |
| } | |
| var geometry = new THREE.CubeGeometry(size.x, size.y, size.z); | |
| var material = new THREE.MeshBasicMaterial({ | |
| color: color, | |
| opacity: opacity, | |
| transparent: true | |
| }); | |
| var buildVolumeObject = new SLAcer.Mesh(geometry, material); | |
| this.buildVolumeObject && this.removeObject(this.buildVolumeObject); | |
| this.buildVolumeObject = buildVolumeObject; | |
| this.scene.add(this.buildVolumeObject); | |
| if (! this.buildVolumeBox) { | |
| this.buildVolumeBox = new THREE.BoxHelper(); | |
| this.buildVolumeBox.material.color.setHex(color); | |
| this.scene.add(this.buildVolumeBox); | |
| } | |
| this.buildVolumeBox.update(this.buildVolumeObject); | |
| }; | |
| Viewer3D.prototype.setView = function(view) { | |
| this.view.set(view !== undefined ? view : this.settings.view); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| // global settings | |
| Viewer3D.globalSettings = globalSettings; | |
| // export module | |
| SLAcer.Viewer3D = Viewer3D; | |
| })(); |