Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| // namespace | |
| var SLAcer = SLAcer || {}; | |
| ;(function() { | |
| // global settings | |
| var globalSettings = { | |
| size: { | |
| width: 600, | |
| height: 400 | |
| }, | |
| color: 0x000000, | |
| antialias: true, | |
| target: document.body, | |
| camera: { | |
| fov: 45, | |
| near: 0.1, | |
| far: 10000, | |
| } | |
| }; | |
| // ------------------------------------------------------------------------- | |
| // Constructor | |
| function Viewer(settings) { | |
| // self alias | |
| var self = this; | |
| // settings settings | |
| self.settings = _.defaultsDeep({}, settings || {}, Viewer.globalSettings); | |
| // create main objects | |
| self.scene = new THREE.Scene(); | |
| self.camera = new THREE.PerspectiveCamera(); | |
| self.renderer = new THREE.WebGLRenderer({ antialias: self.settings.antialias }); | |
| // assign camera settings | |
| _.assign(self.camera, self.settings.camera); | |
| // set camera orbit around Z axis | |
| self.camera.up = new THREE.Vector3(0, 0, 1); | |
| // set camera position | |
| self.camera.position.z = 1000; | |
| // set default parameters | |
| self.setSize(self.settings.size); | |
| self.setColor(self.settings.color); | |
| // set the target for canvas | |
| self.target = self.settings.target; | |
| self.canvas = self.renderer.domElement; | |
| if (self.target) { | |
| while (self.target.firstChild) { | |
| self.target.removeChild(self.target.firstChild); | |
| } | |
| self.target.appendChild(self.canvas); | |
| } | |
| // render | |
| self.render(); | |
| } | |
| // ------------------------------------------------------------------------- | |
| Viewer.prototype.getSize = function() { | |
| return this.renderer.getSize(); | |
| }; | |
| Viewer.prototype.setSize = function(size) { | |
| _.defaults(size, this.getSize()); | |
| this.renderer.setSize(size.width, size.height); | |
| this.camera.aspect = size.width / size.height; | |
| this.camera.updateProjectionMatrix(); | |
| return size; | |
| }; | |
| Viewer.prototype.setWidth = function(width) { | |
| return this.setSize({ width: width }); | |
| }; | |
| Viewer.prototype.setHeight = function(height) { | |
| return this.setSize({ height: height }); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| Viewer.prototype.getColor = function() { | |
| return this.renderer.getClearColor(); | |
| }; | |
| Viewer.prototype.setColor = function(color) { | |
| this.renderer.setClearColor(color); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| Viewer.prototype.removeObject = function(object) { | |
| object.geometry && object.geometry.dispose(); | |
| object.material && object.material.dispose(); | |
| this.scene.remove(object); | |
| }; | |
| Viewer.prototype.addObject = function(object) { | |
| this.scene.add(object); | |
| return object; | |
| }; | |
| Viewer.prototype.replaceObject = function(oldObject, newObject) { | |
| oldObject && this.removeObject(oldObject); | |
| this.addObject(newObject); | |
| return newObject; | |
| }; | |
| // ------------------------------------------------------------------------- | |
| Viewer.prototype.render = function() { | |
| this.renderer.render(this.scene, this.camera); | |
| }; | |
| Viewer.prototype.screenshot = function(callback) { | |
| this.render(); | |
| callback(this.canvas.toDataURL()); | |
| }; | |
| // ------------------------------------------------------------------------- | |
| // global settings | |
| Viewer.globalSettings = globalSettings; | |
| // export module | |
| SLAcer.Viewer = Viewer; | |
| })(); |