Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
135 lines (103 sloc) 3.62 KB
// 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;
})();