Newer
Older
/**
* Created by aghassaei on 1/14/15.
*/
//a part, element with a single material, handled by assembler
this.parentCell = parent;//use this reference to get position and scale
this.type = type;
}
DMAPart.prototype._draw = function(){
this.updateForScale(this.parentCell.getScale(), this.parentCell.getPosition());
dmaGlobals.three.sceneAdd(this.mesh, "part");
DMAPart.prototype.updateForScale = function(scale, position){
if (this.mesh) {
this.mesh.scale.set(scale, scale, scale);
DMAPart.prototype._setMeshPosition = function(position){
var mesh = this.mesh;
mesh.position.x = position.x;
mesh.position.y = position.y;
mesh.position.z = position.z;
};
DMAPart.prototype.setVisibility = function(visibility){
if (visibility) this._show();
else this._hide();
};
DMAPart.prototype._show = function(){
if (!this.mesh) this._draw();
this.mesh.visible = true;
};
if (this.mesh) this.mesh.visible = false;
};
DMAPart.prototype.highlight = function(){
this.mesh.material.color.setRGB(1,0,0);
};
DMAPart.prototype.unhighlight = function(){
if (this.mesh) this.mesh.material.color.setRGB(0.9619657144369509, 0.6625466032079207, 0.20799727886007258);
};
DMAPart.prototype.removeFromCell = function(){//send message back to parent cell to destroy this
if (this.parentCell) {
this.parentCell.removePart(this.type);
dmaGlobals.three.render();
} else console.warn("part has no parent cell");
};
DMAPart.prototype.destroy = function(){
if (this.mesh) {
dmaGlobals.three.sceneRemove(this.mesh, "part");
this.mesh.myPart = null;
// this.mesh.dispose();
// geometry.dispose();
// material.dispose();
this.mesh = null;
}
this.parentCell = null;
this.type = null;
};
DMAPart.prototype.toJSON = function(){
return {
}
};
//////////////////////////////////////////////////////////////
/////////////////TRIANGLE PART///////////////////////////////////
//////////////////////////////////////////////////////////////
(function () {
var unitPartGeo1, unitPartGeo2, unitPartGeo3, unitPartGeo4, unitPartGeo5,unitPartGeo6;
//import part geometry
var loader = new THREE.STLLoader();
loader.load("data/trianglePart.stl", function(geometry){
unitPartGeo1 = geometry
unitPartGeo1.dynamic = true;
unitPartGeo1.computeBoundingBox();
var unitScale = 1.2/unitPartGeo1.boundingBox.max.y;
unitPartGeo1.applyMatrix(new THREE.Matrix4().makeScale(unitScale, unitScale, unitScale));
unitPartGeo1.applyMatrix(new THREE.Matrix4().makeTranslation(0.25,-0.6, -0.45));
unitPartGeo1.applyMatrix(new THREE.Matrix4().makeRotationZ(-Math.PI/6));
unitPartGeo1.dynamic = true;
unitPartGeo2 = unitPartGeo1.clone();
unitPartGeo2.applyMatrix(new THREE.Matrix4().makeRotationZ(2*Math.PI/3));
unitPartGeo3 = unitPartGeo1.clone();
unitPartGeo3.applyMatrix(new THREE.Matrix4().makeRotationZ(-2*Math.PI/3));
unitPartGeo4 = unitPartGeo1.clone();
unitPartGeo4.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI));
unitPartGeo5 = unitPartGeo2.clone();
unitPartGeo5.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI));
unitPartGeo6 = unitPartGeo3.clone();
unitPartGeo6.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI));
});
var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THREE.FlatShading });
partMaterial.color.setRGB( 0.9619657144369509, 0.6625466032079207, 0.20799727886007258 );
function DMATrianglePart(type, parent){
DMAPart.call(this, type, parent);
}
DMATrianglePart.prototype = Object.create(DMAPart.prototype);
mesh = new THREE.Mesh(unitPartGeo1, partMaterial.clone());
mesh = new THREE.Mesh(unitPartGeo2, partMaterial.clone());
mesh = new THREE.Mesh(unitPartGeo3, partMaterial.clone());
break;
}
mesh.myPart = this;//need a ref back to this part
var rotation = this.parentCell.getEulerRotation();
mesh.rotation.set(rotation.x, rotation.y, rotation.z);
return mesh;
};
self.DMATrianglePart = DMATrianglePart;