From 60c114b9abab3f732fbcbf267f4e93a37bfcf750 Mon Sep 17 00:00:00 2001
From: amandaghassaei <amandaghassaei@gmail.com>
Date: Sat, 14 Mar 2015 03:02:34 -0400
Subject: [PATCH] more cell separation work

---
 js/fea/DmaBeam.js           | 19 +++++++++++--------
 js/fea/DmaCell.js           |  5 ++++-
 js/menus/LatticeMenuView.js | 11 +----------
 js/models/BasePlane.js      | 14 +++++++-------
 js/models/Lattice.js        |  5 +++--
 5 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/js/fea/DmaBeam.js b/js/fea/DmaBeam.js
index 52b8ad9c..d1d1e22b 100644
--- a/js/fea/DmaBeam.js
+++ b/js/fea/DmaBeam.js
@@ -35,22 +35,25 @@ DmaBeam.prototype._buildBeamMesh = function(){
     var eulerRot = new THREE.Euler().setFromQuaternion(quaternion);
     mesh.rotation.set(eulerRot.x, eulerRot.y, eulerRot.z);
 
+    dmaGlobals.three.sceneAdd(mesh, "part");
+    return mesh;
+};
 
+DmaBeam.prototype.updateForScale = function(scale){
+    if (!this.mesh) this.mesh = this._buildBeamMesh();
     var position = this.nodes[0].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;
+    this.mesh.position.set(position.x, position.y, position.z);
+    this.mesh.scale.set(scale, scale, scale);
 };
 
 DmaBeam.prototype.setVisibility = function(visible){
-    if (visible && !this.mesh) this.mesh = this._buildBeamMesh();
+    if (visible && !this.mesh) {
+        this.mesh = this._buildBeamMesh();
+        this.updateForScale(this.parentCell.getScale());
+    }
     else if (!this.mesh) return;
     this.mesh.visible = visible;
 };
diff --git a/js/fea/DmaCell.js b/js/fea/DmaCell.js
index cf43bad9..c7139324 100644
--- a/js/fea/DmaCell.js
+++ b/js/fea/DmaCell.js
@@ -60,7 +60,10 @@ DMACell.prototype.updateForScale = function(scale, cellMode){
     if (cellMode == "part"){
         _.each(this.parts, function(part){
             if (part) part.updateForScale(scale, position);
-         });
+        });
+        _.each(this.beams, function(beam){
+            if (beam) beam.updateForScale(scale, position);
+        });
     }
 };
 
diff --git a/js/menus/LatticeMenuView.js b/js/menus/LatticeMenuView.js
index 532d9b68..81aa04a9 100644
--- a/js/menus/LatticeMenuView.js
+++ b/js/menus/LatticeMenuView.js
@@ -15,7 +15,6 @@ LatticeMenuView = Backbone.View.extend({
         "click .connectionType":                        "_changeConnectionType",
         "slide #scaleSlider":                           "_sliderDidSlide",
         "slideStop #scaleSlider":                       "_changeScaleSlider",
-        "change #preserveCells":                        "_changePreserveCells",
         "click #freeformTetraCell":                     "_setTetraCell",
         "click #freeformOctaCell":                      "_setOctaCell"
     },
@@ -89,10 +88,6 @@ LatticeMenuView = Backbone.View.extend({
         this.lattice.set("partType", partType, {silent:true});
     },
 
-    _changePreserveCells: function(e){
-        this.lattice.set("shouldPreserveCells", $(e.target).prop("checked"));
-    },
-
     _setTetraCell: function(e){
         e.preventDefault();
         this.lattice.set("freeformCellType", "tetra");
@@ -142,11 +137,7 @@ LatticeMenuView = Backbone.View.extend({
                     <li><a id="freeformTetraCell" href="#">tetra</a></li>\
                 </ul>\
             </div>\
-        <% } else { %>\
-        <label class="checkbox">\
-            <input type="checkbox" <% if (shouldPreserveCells) { %> checked="checked" <% } %> value="" id="preserveCells" data-toggle="checkbox" class="custom-checkbox"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\
-            Preserve cells on lattice change\
-        </label>\
+            <br/><br/>\
         <% } %>\
         <br/>\
         Scale:&nbsp;&nbsp;<input id="scaleSlider" data-slider-id="ex1Slider" type="text" data-slider-min="1" data-slider-max="100" data-slider-step="0.1" data-slider-value="<%= scale %>"/>\
diff --git a/js/models/BasePlane.js b/js/models/BasePlane.js
index f95c8151..7afbb712 100644
--- a/js/models/BasePlane.js
+++ b/js/models/BasePlane.js
@@ -39,6 +39,8 @@ BasePlane = Backbone.Model.extend({
         });
     },
 
+    updateXYSeparation: function(xySep) {},
+
     getOrientation: function(){
         return new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0,0,1), Math.PI);
     },
@@ -112,11 +114,9 @@ OctaBasePlane = BasePlane.extend({
                 if (j == -dimX || i == -dimY) continue;
 
                 if (Math.abs(j)%2==1){
-//                        faces.push(new THREE.Face3(currentOffset-1, currentOffset-2, currentOffset-2-2*baseDim));
                     faces.push(new THREE.Face3(3*currentOffset-4, 3*currentOffset-8-6*dimY, 3*currentOffset-6-6*dimY));//pt, base, base
                 } else {
                     faces.push(new THREE.Face3(3*currentOffset-1, 3*currentOffset-8-6*dimY, 3*currentOffset-6-6*dimY));//pt, base, base
-//                        faces.push(new THREE.Face3(currentOffset-1, currentOffset-2, currentOffset-3-2*baseDim));
                 }
 
             }
@@ -143,7 +143,7 @@ OctaBasePlane = BasePlane.extend({
         dmaGlobals.three.render();
     },
 
-    _calcOctaFaceVertices: function(colSep){
+    _calcOctaFaceVertices: function(xySep){
 
         var vertices = [];
 
@@ -153,9 +153,9 @@ OctaBasePlane = BasePlane.extend({
         var dimX = this.get("dimX");
         var dimY = this.get("dimY");
 
-        var baseVertOffset = colSep/Math.sqrt(3);
+        var baseVertOffset = xySep/Math.sqrt(3);
         var pointVertOffset = 2*baseVertOffset;
-        var horizontalOffset = colSep;
+        var horizontalOffset = xySep;
 
         for (var j=-dimX;j<=dimX;j++){
             for (var i=-dimY;i<=dimY;i++){
@@ -175,9 +175,9 @@ OctaBasePlane = BasePlane.extend({
         return vertices;
     },
 
-    updateColSeparation: function(colSep){
+    updateXYSeparation: function(xySep){
         var geometry = this.get("mesh")[0].geometry;
-        geometry.vertices = this._calcOctaFaceVertices(colSep);
+        geometry.vertices = this._calcOctaFaceVertices(xySep);
         geometry.verticesNeedUpdate = true;
     },
 
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 50cf1599..6b19e6a3 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -16,10 +16,11 @@ Lattice = Backbone.Model.extend({
         basePlane: null,//plane to build from
         scale: 20,
         highlighter: null,//highlights build-able surfaces
+        //todo this is not exposed in ui, is that useful?
         shouldPreserveCells: true,//preserve cells when changing lattice type
 
         //spacing for connectors/joints
-        cellSeparation: {xy:0.1, z:0},
+        cellSeparation: {xy:0, z:0},
 
         cellMode: "cell",//show cells vs parts
         cellType: "octa",
@@ -312,7 +313,7 @@ Lattice = Backbone.Model.extend({
         var cellSep = this.get("cellSeparation");
         var scale = this.get("scale");
         var cellMode = this.get("cellMode");
-        //this.get("basePlane").updateColSeparation(cellSep.xy);
+        this.get("basePlane").updateXYSeparation(cellSep.xy);
         this._iterCells(this.get("cells"), function(cell){
             if (cell) cell.updateForScale(scale, cellMode);
         });
-- 
GitLab