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; | |
})(); |