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