Permalink
Cannot retrieve contributors at this time
Fetching contributors…

// namespace | |
var SLAcer = SLAcer || {}; | |
;(function() { | |
// global settings | |
var globalSettings = { | |
screen: { | |
width : 1680, // px | |
height : 1050, // px | |
diagonal: { size: 22, unit: 'in' } | |
}, | |
buildPlate: { | |
size: { | |
x: 100, // mm | |
y: 100 // mm | |
}, | |
unit: 'mm', | |
color: 0xff0000, | |
opacity: 0.1 | |
} | |
}; | |
// ------------------------------------------------------------------------- | |
// Constructor | |
function Viewer2D(settings) { | |
SLAcer.Viewer.call(this, settings); | |
_.defaultsDeep(this.settings, Viewer2D.globalSettings); | |
this.setScreenResolution(this.settings.screen); | |
this.setBuildPlate(this.settings.buildPlate); | |
this.setView(); | |
this.render(); | |
} | |
// extends | |
Viewer2D.prototype = Object.create(SLAcer.Viewer.prototype); | |
Viewer2D.prototype.constructor = Viewer2D; | |
// ------------------------------------------------------------------------- | |
Viewer2D.prototype.updatePixelDensity = function() { | |
var diagonalPixels = Math.sqrt(Math.pow(this.screen.width, 2) + Math.pow(this.screen.height, 2)); | |
var pixelPerCentimeter = diagonalPixels / this.screen.diagonal.size * 10; | |
if (this.screen.diagonal.unit == 'in') { | |
pixelPerCentimeter = pixelPerCentimeter / 25.4; | |
} | |
this.dotPitch = 10 / pixelPerCentimeter; | |
}; | |
Viewer2D.prototype.setScreenResolution = function(settings) { | |
this.screen = _.defaultsDeep(settings, this.screen); | |
this.updatePixelDensity(); | |
this.setSize(this.screen); | |
this.setView(); | |
}; | |
Viewer2D.prototype.setBuildPlate = function(settings) { | |
this.buildPlate = _.defaultsDeep(settings, this.buildPlate); | |
var size = this.buildPlate.size; | |
var unit = this.buildPlate.unit; | |
var color = this.buildPlate.color; | |
var opacity = this.buildPlate.opacity; | |
if (unit == 'in') { // -> mm | |
size.x *= 25.4; | |
size.y *= 25.4; | |
} | |
var geometry = new THREE.PlaneGeometry(size.x, size.y, 1); | |
var material = new THREE.MeshBasicMaterial({ | |
color: color, | |
opacity: opacity, | |
transparent: true | |
}); | |
var buildPlateObject = new THREE.Mesh(geometry, material); | |
this.replaceObject(this.buildPlateObject, buildPlateObject); | |
this.buildPlateObject = buildPlateObject; | |
if (! this.buildPlateBox) { | |
this.buildPlateBox = new THREE.BoxHelper(); | |
this.buildPlateBox.material.color.setHex(color); | |
this.scene.add(this.buildPlateBox); | |
} | |
this.buildPlateBox.update(this.buildPlateObject); | |
}; | |
Viewer2D.prototype.setView = function() { | |
var distance = this.screen.height / 2; | |
distance /= Math.tan(Math.PI * this.camera.fov / 360); | |
distance *= this.dotPitch; | |
this.camera.position.z = distance; | |
}; | |
// ------------------------------------------------------------------------- | |
// global settings | |
Viewer2D.globalSettings = globalSettings; | |
// export module | |
SLAcer.Viewer2D = Viewer2D; | |
})(); |