From f052fb7517e7996a7cc38af5ed425f8a1c0d18cd Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Mon, 9 Mar 2015 11:16:59 -0400 Subject: [PATCH] basic beam for all cell types --- js/fea/DmaBeam.js | 12 ++++++++- js/fea/DmaCell.js | 66 +++++++++++++++++++++++------------------------ 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/js/fea/DmaBeam.js b/js/fea/DmaBeam.js index c1a0ecd2..52b8ad9c 100644 --- a/js/fea/DmaBeam.js +++ b/js/fea/DmaBeam.js @@ -28,13 +28,23 @@ DmaBeam.prototype.getIndex = function(){ DmaBeam.prototype._buildBeamMesh = function(){ var mesh = new THREE.Mesh(unitGeo); + var diff = this.nodes[0].getPosition(); + diff.sub(this.nodes[1].getPosition()); + + var quaternion = new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0,1,0), diff.normalize()); + var eulerRot = new THREE.Euler().setFromQuaternion(quaternion); + mesh.rotation.set(eulerRot.x, eulerRot.y, eulerRot.z); + + var position = this.nodes[0].getPosition(); - position.sub(this.nodes[1].getPosition()); + position.add(this.nodes[1].getPosition()); position.multiplyScalar(0.5); position.add(this.parentCell.getPosition()); mesh.position.set(position.x, position.y, position.z); var scale = this.parentCell.getScale(); mesh.scale.set(scale, scale, scale); + + dmaGlobals.three.sceneAdd(mesh, "part"); return mesh; }; diff --git a/js/fea/DmaCell.js b/js/fea/DmaCell.js index 556e05e1..27eab06b 100644 --- a/js/fea/DmaCell.js +++ b/js/fea/DmaCell.js @@ -31,8 +31,9 @@ DMACell.prototype.drawForMode = function(scale, cellMode, inverseMode, beamMode) _.each(this.parts, function(part){ if (part) part.setVisibility(cellMode == "part" && !beamMode); }); + var self = this; _.each(this.beams, function(beam){ - beam.setVisibility(beamMode && cellMode == "part"); + beam.setVisibility(beamMode && cellMode == "part" && inverseMode==self.isInverse); }); }; @@ -123,7 +124,37 @@ DMACell.prototype._initNodes = function(vertices){ }; DMACell.prototype._initBeams = function(nodes, faces){ - return []; + var beams = []; + var self = this; + var addBeamFunc = function(index1, index2){ + var duplicate = false; + _.each(beams, function(beam){ + var index = beam.getIndex(); + if (index[0] == index1 && index[1] == index2) duplicate = true; + }); + if (duplicate) return; + var diff = nodes[index1].getPosition(); + diff.sub(nodes[index2].getPosition()); + if (diff.length() > self.getScale()*1.01) return; + if (index2>index1) { + beams.push(new DmaBeam(nodes[index1], nodes[index2], self)); + } + }; + for (var i=0;i<nodes.length;i++){ + _.each(faces, function(face){ + if (face.a == i) { + addBeamFunc(i, face.b); + addBeamFunc(i, face.c); + } else if (face.b == i){ + addBeamFunc(i, face.a); + addBeamFunc(i, face.c); + } else if (face.c == i){ + addBeamFunc(i, face.a); + addBeamFunc(i, face.b); + } + }) + } + return beams; }; DMACell.prototype.removePart = function(index){ @@ -191,37 +222,6 @@ DMACell.prototype.toJSON = function(){ return parts; }; - DMAFaceOctaCell.prototype._initBeams = function(nodes, faces){ - var beams = []; - var self = this; - var addBeamFunc = function(index1, index2){ - var duplicate = false; - _.each(beams, function(beam){ - var index = beam.getIndex(); - if (index[0] == index1 && index[1] == index2) duplicate = true; - }); - if (duplicate) return; - if (index2>index1) { - beams.push(new DmaBeam(nodes[index1], nodes[index2], self)); - } - }; - for (var i=0;i<nodes.length;i++){ - _.each(faces, function(face){ - if (face.a == i) { - addBeamFunc(i, face.b); - addBeamFunc(i, face.c); - } else if (face.b == i){ - addBeamFunc(i, face.a); - addBeamFunc(i, face.c); - } else if (face.c == i){ - addBeamFunc(i, face.a); - addBeamFunc(i, face.b); - } - }) - } - return beams; - }; - DMAFaceOctaCell.prototype._buildCellMesh = function(){ return this._superBuildCellMesh(unitCellGeo); }; -- GitLab