From 7eda6738d091b4f10cffd8afa5387c4e82dfbbd7 Mon Sep 17 00:00:00 2001 From: amandaghassaei <amandaghassaei@gmail.com> Date: Tue, 17 Mar 2015 16:42:25 -0400 Subject: [PATCH] stock simulation has a cell --- js/cam/Assembler.js | 27 +++++++++++++++++++++++---- js/cam/Machine.js | 36 +++++++++++++++++++++++++----------- js/fea/DmaCell.js | 11 ++++++++--- js/fea/DmaCellOcta.js | 16 ++++++++-------- js/fea/DmaCellOther.js | 12 ++++++------ js/fea/DmaCellTetra.js | 8 ++++---- 6 files changed, 74 insertions(+), 36 deletions(-) diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js index b5c0743d..a96832e1 100644 --- a/js/cam/Assembler.js +++ b/js/cam/Assembler.js @@ -62,6 +62,12 @@ Assembler = Backbone.Model.extend({ this.listenTo(options.lattice, "change:scale", this._setCAMScale); this.listenTo(dmaGlobals.appState, "change:stockSimulationPlaying", this._stockSimulation); + this.listenTo(options.lattice, "change:partType", this._updatePartType); + this.listenTo(options.appState, "change:cellMode", this._updateCellMode); + + + + //init origin mesh var origin = new THREE.Mesh(new THREE.SphereGeometry(1), new THREE.MeshBasicMaterial({color:0xff0000})); @@ -84,9 +90,23 @@ Assembler = Backbone.Model.extend({ }, /////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////STOCK / ORIGIN///////////////////////////////////////////////// +////////////////////////////////VISUALIZATION////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// + _isVisible: function(){ + var currentTab = dmaGlobals.appState.get("currentTab"); + return (currentTab == "cam" || currentTab == "animate" || currentTab == "send"); + }, + + _updatePartType: function(){ + if (this._isVisible()) this.get("machine").updatePartType(); + }, + + _updateCellMode: function(){ + this.get("machine").setVisibility(this._isVisible()); + dmaGlobals.three.render(); + }, + _setCAMScale: function(){ var scale = dmaGlobals.lattice.get("scale")/8; this.get("origin").scale.set(scale, scale, scale); @@ -94,11 +114,10 @@ Assembler = Backbone.Model.extend({ }, _setCAMVisibility: function(){ - var visible = false; - var currentTab = dmaGlobals.appState.get("currentTab"); - if (currentTab == "cam" || currentTab == "animate" || currentTab == "send") visible = true; + var visible = this._isVisible(); this.get("origin").visible = visible; this.get("stock").visible = visible; + this.get("machine").setVisibility(visible); dmaGlobals.three.render(); }, diff --git a/js/cam/Machine.js b/js/cam/Machine.js index 92f55857..71d9990b 100644 --- a/js/cam/Machine.js +++ b/js/cam/Machine.js @@ -4,27 +4,41 @@ function Machine() { - var mesh = new THREE.Mesh(new THREE.BoxGeometry(2,2,2));//this._makeStock(); - dmaGlobals.three.sceneAdd(mesh); - this.mesh = mesh; + + this.cell = new DMARotatedEdgeCell(null); + this.setVisibility(false); + } -Machine.prototype._makeStock = function(){ - var mesh = DMAEdgeVoxPart.prototype._makeMeshForType(); - mesh.myPart = null; - return mesh; +Machine.prototype.setVisibility = function(visible){ + if (visible){ + this.cell.draw(); + } else { + this.cell.hide(); + } +}; + +Machine.prototype.updatePartType = function(){ + this.cell.destroyParts(); + this.cell.draw(); }; -Machine.prototype.pause = function(){ + + + + +Machine.prototype.pause = function(){ }; Machine.prototype.moveTo = function(x, y, z, speed, wcs, callback){ var self = this; setTimeout( function() { - if (x != "") self.mesh.position.x = parseFloat(x)+wcs.x; - if (y != "") self.mesh.position.y = parseFloat(y)+wcs.y; - if (z != "") self.mesh.position.z = parseFloat(z)+wcs.z; + //reaching a little deep here, might want to find a better solution + if (x != "") self.cell.cellMesh.position.x = parseFloat(x)+wcs.x; + if (y != "") self.cell.cellMesh.position.y = parseFloat(y)+wcs.y; + if (z != "") self.cell.cellMesh.position.z = parseFloat(z)+wcs.z; + self.cell.updateForScale(); dmaGlobals.three.render(); return callback(); }, 500/dmaGlobals.assembler.get("simSpeed")); diff --git a/js/fea/DmaCell.js b/js/fea/DmaCell.js index a4862a97..fbf413b1 100644 --- a/js/fea/DmaCell.js +++ b/js/fea/DmaCell.js @@ -14,7 +14,10 @@ function DMACell(indices, scale, cellMode, partType) { this.cellMesh = this._buildCellMesh(); this._doMeshTransformations(this.cellMesh);//some cell types require transformations - dmaGlobals.three.sceneAdd(this.cellMesh, "cell"); + + var sceneType = "cell"; + if (!indices) sceneType = null; + dmaGlobals.three.sceneAdd(this.cellMesh,sceneType); this.nodes = this._initNodes(this.cellMesh.children[0].geometry.vertices); this.beams = this._initBeams(this.nodes, this.cellMesh.children[0].geometry.faces); @@ -99,6 +102,7 @@ DMACell.prototype.updateForScale = function(scale, cellMode, partType){ } }; + DMACell.prototype._setMeshPosition = function(mesh, position){ mesh.position.x = position.x; mesh.position.y = position.y; @@ -107,7 +111,7 @@ DMACell.prototype._setMeshPosition = function(mesh, position){ DMACell.prototype.getType = function(){ return null;//only used in freeform layout -} +}; DMACell.prototype.getScale = function(){//need for part relay return dmaGlobals.lattice.get("scale"); @@ -126,7 +130,8 @@ DMACell.prototype.getEulerRotation = function(){ }; DMACell.prototype._calcPosition = function(){//need for part relay - return dmaGlobals.lattice.getPositionForIndex(this.indices); + if (this.indices) return dmaGlobals.lattice.getPositionForIndex(this.indices); + return this.cellMesh.position;//used for cam simulation }; DMACell.prototype._setCellMeshVisibility = function(visibility){ diff --git a/js/fea/DmaCellOcta.js b/js/fea/DmaCellOcta.js index 4eb1c7e3..ad1b0489 100644 --- a/js/fea/DmaCellOcta.js +++ b/js/fea/DmaCellOcta.js @@ -12,8 +12,8 @@ var unitFaceOctaGeo = new THREE.OctahedronGeometry(1/Math.sqrt(2)); unitFaceOctaGeo.applyMatrix(new THREE.Matrix4().makeRotationZ(-3*Math.PI/12)); unitFaceOctaGeo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.asin(2/Math.sqrt(2)/Math.sqrt(3)))); -function DMAFaceOctaCell(indices, scale){ - DMACell.call(this, indices, scale); +function DMAFaceOctaCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMAFaceOctaCell.prototype = Object.create(DMACell.prototype); @@ -121,8 +121,8 @@ DMAFreeFormOctaCell.prototype.zScale = function(scale){ /////////////////////////////////////////////////////////////////////////////////////////////// -function DMAEdgeOctaCell(indices, scale){ - DMAFaceOctaCell.call(this, indices, scale); +function DMAEdgeOctaCell(indices, scale, cellMode, partType){ + DMAFaceOctaCell.call(this, indices, scale, cellMode, partType); } DMAEdgeOctaCell.prototype = Object.create(DMAFaceOctaCell.prototype); @@ -145,8 +145,8 @@ DMAEdgeOctaCell.prototype.calcHighlighterPosition = function(face){ var unitVertexOcta = new THREE.OctahedronGeometry(1/Math.sqrt(2)); -function DMARotatedEdgeCell(indices, scale){ - DMACell.call(this, indices, scale); +function DMARotatedEdgeCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMARotatedEdgeCell.prototype = Object.create(DMACell.prototype); @@ -239,8 +239,8 @@ DMARotatedEdgeCell.prototype._getGeometry = function(){ /////////////////////////////////////////////////////////////////////////////////////////////// -function DMAVertexOctaCell(indices, scale){ - DMACell.call(this, indices, scale); +function DMAVertexOctaCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMAVertexOctaCell.prototype = Object.create(DMACell.prototype); diff --git a/js/fea/DmaCellOther.js b/js/fea/DmaCellOther.js index 8241bbe2..1fd71a6b 100644 --- a/js/fea/DmaCellOther.js +++ b/js/fea/DmaCellOther.js @@ -15,8 +15,8 @@ var cellMaterial = [new THREE.MeshNormalMaterial()]; var unitCellGeo = new THREE.BoxGeometry(1,1,1); - function DMACubeCell(indices, scale){ - DMACell.call(this, indices, scale); + function DMACubeCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMACubeCell.prototype = Object.create(DMACell.prototype); @@ -111,8 +111,8 @@ var cellMaterial = [new THREE.MeshNormalMaterial()]; ]; unitCellGeo.computeFaceNormals(); - function DMATruncCubeCell(indices, scale){ - DMACell.call(this, indices, scale); + function DMATruncCubeCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMATruncCubeCell.prototype = Object.create(DMACell.prototype); @@ -254,8 +254,8 @@ var cellMaterial = [new THREE.MeshNormalMaterial()]; ]; unitCellGeo.computeFaceNormals(); - function DMATruncOctaCell(indices, scale){ - DMATruncCubeCell.call(this, indices, scale); + function DMATruncOctaCell(indices, scale, cellMode, partType){ + DMATruncCubeCell.call(this, iindices, scale, cellMode, partType); } DMATruncOctaCell.prototype = Object.create(DMATruncCubeCell.prototype); diff --git a/js/fea/DmaCellTetra.js b/js/fea/DmaCellTetra.js index 9f8b87ce..e7b4a36e 100644 --- a/js/fea/DmaCellTetra.js +++ b/js/fea/DmaCellTetra.js @@ -14,8 +14,8 @@ unitCellGeo.applyMatrix(new THREE.Matrix4().makeTranslation(0,0,Math.sqrt(3/8)-1 var unitCellGeoUpsideDown = unitCellGeo.clone(); unitCellGeoUpsideDown.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI)); -function DMATetraFaceCell(indices, scale){ - DMACell.call(this, indices, scale); +function DMATetraFaceCell(indices, scale, cellMode, partType){ + DMACell.call(this, indices, scale, cellMode, partType); } DMATetraFaceCell.prototype = Object.create(DMACell.prototype); @@ -40,8 +40,8 @@ DMATetraFaceCell.prototype._getGeometry = function(){ ////////////////////////EDGE CONNECTED OCTA//////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// -function DMATetraEdgeCell(indices, scale){ - DMATetraFaceCell.call(this, indices, scale); +function DMATetraEdgeCell(indices, scale, cellMode, partType){ + DMATetraFaceCell.call(this, indices, scale, cellMode, partType); } DMATetraEdgeCell.prototype = Object.create(DMATetraFaceCell.prototype); -- GitLab