From 31e3236a7e360adb7bb3067e1da5db20c9cb3f4b Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Tue, 27 Jan 2015 12:19:02 -0500
Subject: [PATCH] toggle visibility for mode

---
 dependencies/main.html                        | 128 ------------------
 js/fea/dmaCell.js                             |  34 +++--
 js/menus/LatticeMenuView.js                   |   1 -
 .../{MenuWrapper.js => MenuWrapperView.js}    |   0
 js/menus/PartMenuView.js                      |   1 +
 js/models/lattice.js                          |  14 +-
 js/threeViews/latticeView.js                  |  68 ----------
 main.html                                     |   2 +-
 8 files changed, 35 insertions(+), 213 deletions(-)
 delete mode 100644 dependencies/main.html
 rename js/menus/{MenuWrapper.js => MenuWrapperView.js} (100%)
 delete mode 100644 js/threeViews/latticeView.js

diff --git a/dependencies/main.html b/dependencies/main.html
deleted file mode 100644
index 7a901763..00000000
--- a/dependencies/main.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
-
-    <title></title>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <script src="main_files/analytics_002.js" async=""></script><script src="main_files/analytics.js"></script>
-
-    <!--UI-->
-    <script src="main_files/jquery-2.js"></script>
-    <script src="main_files/underscore.js"></script>
-
-    <!--backbone model/view framework-->
-    <script src="main_files/backbone.js"></script>
-
-    <!--flatUI bootstrap theme-->
-    <link href="main_files/bootstrap.css" rel="stylesheet"><!-- Loading Bootstrap -->
-    <link href="main_files/flat-ui.css" rel="stylesheet"><!-- Loading Flat UI -->
-    <script src="main_files/flat-ui.js"></script>
-    <!--<script src="dependencies/flatUI/js/vendor/video.js"></script>-->
-
-    <!--bootstrap slider-->
-    <link href="main_files/bootstrap-slider.css" rel="stylesheet">
-    <script src="main_files/bootstrap-slider.js"></script>
-
-    <!--threeJS-->
-    <script src="main_files/three.js"></script>
-    <script src="main_files/OrbitControls.js"></script>
-
-    <!--stl import/export-->
-    <script src="main_files/THREE2STL.js"></script>
-    <script src="main_files/STLLoader.js"></script>
-
-    <!--numerical javascript-->
-    <script src="main_files/numeric-1.js"></script>
-
-    <!--multi-threading-->
-    <script src="main_files/worker.js"></script>
-    <script src="main_files/persistentWorkers.js"></script><!--global workers-->
-
-    <!--fea stuff-->
-    <script src="main_files/dmaCell.js"></script>
-    <script src="main_files/dmaPart.js"></script>
-    <!--<script src="js/fea/dmaBeam.js"></script>-->
-    <script src="main_files/dmaNode.js"></script>
-
-    <!--models-->
-    <script src="main_files/threeModel.js"></script>
-    <script src="main_files/fillGeometry.js"></script>
-    <script src="main_files/lattice.js"></script>
-
-    <!--views-->
-    <script src="main_files/meshHandle.js"></script>
-    <script src="main_files/threeView.js"></script>
-    <script src="main_files/pushPullMeshView.js"></script>
-    <script src="main_files/importView.js"></script>
-    <script src="main_files/fillGeometryView.js"></script>
-    <script src="main_files/latticeView.js"></script>
-
-    <script src="main_files/main.js"></script>
-
-
-    <!--<script src="js/views/elementMenu.js"></script>-->
-    <script src="main_files/exportMenu.js"></script>
-    <script src="main_files/navbar.js"></script>
-    <link rel="stylesheet" type="text/css" href="main_files/main.css">
-
-</head>
-<body>
-
-<nav class="navbar navbar-inverse navbar-embossed" role="navigation">
-    <div class="navbar-header">
-      <!--<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-01">-->
-        <!--<span class="sr-only">Toggle navigation</span>-->
-      <!--</button>-->
-      <a id="mainNavLink" class="navbar-brand" href="http://cba.mit.edu/">CBA.MIT.EDU</a>
-    </div>
-    <div class="collapse navbar-collapse" id="navbar-collapse-01">
-      <ul class="nav navbar-nav navbar-left">
-        <li><a data-menu-id="importGeometry" class="menuHoverControls" href="#">Import</a></li>
-        <li><a data-menu-id="element" class="menuHoverControls" href="#">Element</a></li>
-
-        <!--<li><a data-menu-id="controls1Menu" class="menuHoverControls" href="#">Controls1</a></li>-->
-        <!--<li><a data-menu-id="controls2Menu" class="menuHoverControls" href="#">Controls2</a></li>-->
-        <!--<li><a data-menu-id="controls3Menu" class="menuHoverControls" href="#">Glyphs</a></li>-->
-        <!--<li><a data-menu-id="controls4Menu" class="menuHoverControls" href="#">Buttons</a></li>-->
-        <!--<li><a data-menu-id="controls5Menu" class="menuHoverControls" href="#">Inputs</a></li>-->
-        <li class="dropdown navDropdown">
-          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Export <b class="caret"></b></a>
-          <span class="dropdown-arrow"></span>
-          <ul class="dropdown-menu">
-            <li><a id="exportSTL" href="#">Export STL</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </li>
-        <li><a data-menu-id="about" class="menuHoverControls" href="#">About</a></li>
-       </ul>
-        <ul class="nav navbar-nav navbar-right">
-            <li><a id="clearAll" class="menuHoverControls" href="#">Clear All</a></li>
-        </ul>
-       <!--<a href="#fakelink" id="clearAll" class=" btn btn-lg btn-primary">Clear All</a>-->
-    </div><!-- /.navbar-collapse -->
-  </nav>
-<div style="display: none;" id="importGeometry" class="row navMenu">
-</div>
-<div style="display: none;" id="element" class="row navMenu">
-    <div class="row demo-row">
-        <div class="col-xs-3">
-           <a id="elementCube" href="#">Cube</a>
-        </div>
-    </div>
-</div>
-<div style="display: none;" id="about" class="row navMenu">
-    <div class="row demo-row">
-        <div class="col-xs-3">
-           Latest code available on github
-        </div>
-    </div>
-</div>
-
-<div id="threeContainer"><canvas style="width: 1145px; height: 947px;" height="947" width="1145"></canvas></div>
-
-
-</body></html>
\ No newline at end of file
diff --git a/js/fea/dmaCell.js b/js/fea/dmaCell.js
index 93e07b0f..5143e96a 100644
--- a/js/fea/dmaCell.js
+++ b/js/fea/dmaCell.js
@@ -56,26 +56,35 @@
         return mesh;
     };
 
-    Cell.prototype._draw = function(){
-        window.three.sceneAdd(this.mesh);
-    };
-
     Cell.prototype.drawForMode = function(mode, position){
-        if (this.mesh) this.remove();
-        this.mesh = null;
         position = position || this.position;
         if (mode == "cell"){
-            this.mesh = this._buildCellMesh(position);
+            if (this.cellMesh) this._setCellMeshVisibility(true);
+            else {
+                this.cellMesh = this._buildCellMesh(position);
+                window.three.sceneAdd(this.cellMesh);
+            }
         } else if (mode == "parts"){
-            this.mesh = this._buildPartsMesh();
+            if (this.cellMesh) this._setCellMeshVisibility(false);
+            else {
+//                this.parts = this._buildPartsMesh();
+//                window.three.sceneAdd(this.parts);
+            }
         } else {
             console.warn("unrecognized draw mode for cell");
         }
-        if (this.mesh) this._draw();
+    };
+
+    Cell.prototype._setCellMeshVisibility = function(visibility){
+        if (!this.cellMesh) return;
+        this.cellMesh.visible = visibility;
+//        _.each(this.cellMesh.children, function(childMesh){
+//            childMesh.visible = visibility;
+//        });
     };
 
     Cell.prototype.remove = function(){
-        window.three.sceneRemove(this.mesh);
+        if (this.cellMesh) window.three.sceneRemove(this.cellMesh);
     };
 
 
@@ -86,9 +95,8 @@
     };
 
     Cell.prototype._destroy = function(){
-        this.mesh.myCell = null;
-    }
-
+        if (this.cellMesh) this.cellMesh.myCell = null;
+    };
 
 
     self.Cell =  Cell;
diff --git a/js/menus/LatticeMenuView.js b/js/menus/LatticeMenuView.js
index e3efeaac..446ced46 100644
--- a/js/menus/LatticeMenuView.js
+++ b/js/menus/LatticeMenuView.js
@@ -46,7 +46,6 @@ LatticeMenuView = Backbone.View.extend({
         Cell Type: &nbsp;&nbsp;<%= formattedCellType %><br/>\
         Cell Connection:&nbsp;&nbsp;<%= formattedConnectionType %><br/>\
         Scale:&nbsp;&nbsp;<%= scale %><br/>\
-        Column Separation:<br/>\
         NumCells:&nbsp;&nbsp;<%= numCells %><br/>\
         Show Bounding Box:<br/><br/>\
         <a href="#" id="latticeMenuClearCells" class=" btn btn-block btn-lg btn-default">Clear All Cells</a><br/>\
diff --git a/js/menus/MenuWrapper.js b/js/menus/MenuWrapperView.js
similarity index 100%
rename from js/menus/MenuWrapper.js
rename to js/menus/MenuWrapperView.js
diff --git a/js/menus/PartMenuView.js b/js/menus/PartMenuView.js
index fd43d717..6bdbd32a 100644
--- a/js/menus/PartMenuView.js
+++ b/js/menus/PartMenuView.js
@@ -25,6 +25,7 @@ PartMenuView = Backbone.View.extend({
 
     template: _.template('\
         Part Type: &nbsp;&nbsp;<%= partType %><br/>\
+        Column Separation:<br/>\
         ')
 
 });
\ No newline at end of file
diff --git a/js/models/lattice.js b/js/models/lattice.js
index e049f664..3335c5c7 100644
--- a/js/models/lattice.js
+++ b/js/models/lattice.js
@@ -21,6 +21,7 @@ Lattice = Backbone.Model.extend({
     initialize: function(){
 
         //bind events
+        this.listenTo(this, "change:cellMode", this._cellModeDidChange);
     },
 
     addCell: function(position){
@@ -33,14 +34,15 @@ Lattice = Backbone.Model.extend({
 
     removeCell: function(object){
         var cells = this.get("cells");
-        var index = cells.indexOf(object.parent.myCell);
+        var cell = object.parent.myCell;
+        var index = cells.indexOf(cell);
         if (index == -1) {//I think this is happening when two intersection/remove calls are done on the same cell before the next render loop finished
             console.warn("problem locating cell in cell array");
             return;
         }
         cells.splice(index, 1);
+        cell.remove();
         this.set("numCells", cells.length);
-        window.three.sceneRemove(object);
         window.three.render();
     },
 
@@ -51,6 +53,14 @@ Lattice = Backbone.Model.extend({
         this.set("cells", []);
         this.set("numCells", 0);
         window.three.render();
+    },
+
+    _cellModeDidChange: function(){
+        var mode = this.get("cellMode");
+        _.each(this.get("cells"), function(cell){
+            cell.drawForMode(mode);
+        });
+        window.three.render();
     }
 
 });
\ No newline at end of file
diff --git a/js/threeViews/latticeView.js b/js/threeViews/latticeView.js
deleted file mode 100644
index 04c91590..00000000
--- a/js/threeViews/latticeView.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Created by aghassaei on 1/16/15.
- */
-
-LatticeView = Backbone.View.extend({
-
-    events: {
-    },
-
-    el: "#threeContainer",
-
-    controls: null,
-
-    initialize: function(options){
-
-        this.three = options.three;
-        this.fillGeometry = options.fillGeometry;
-
-
-        //bind events
-        this.listenTo(this.model, "change:bounds", this.updateBuildPlanes());
-
-        this.buildPlanes();
-        this.render();
-
-    },
-
-    updateBuildPlanes: function(){
-    },
-
-    buildPlanes: function(){
-        var xyPlaneGeo = new THREE.Geometry();
-        var xzPlaneGeo = new THREE.Geometry();
-        var yzPlaneGeo = new THREE.Geometry();
-
-        var size=50, step = 5;
-        for (var i=-size;i<=size;i+=step){
-            xyPlaneGeo.vertices.push(new THREE.Vector3(-size, i, -size));
-            xyPlaneGeo.vertices.push(new THREE.Vector3(size, i, -size));
-            xyPlaneGeo.vertices.push(new THREE.Vector3(i, -size, -size));
-            xyPlaneGeo.vertices.push(new THREE.Vector3(i, size, -size));
-
-            xzPlaneGeo.vertices.push(new THREE.Vector3(-size, i, -size));
-            xzPlaneGeo.vertices.push(new THREE.Vector3(-size, i, size));
-            xzPlaneGeo.vertices.push(new THREE.Vector3(-size, -size, i));
-            xzPlaneGeo.vertices.push(new THREE.Vector3(-size, size, i));
-
-            yzPlaneGeo.vertices.push(new THREE.Vector3(-size, -size, i));
-            yzPlaneGeo.vertices.push(new THREE.Vector3(size, -size, i));
-            yzPlaneGeo.vertices.push(new THREE.Vector3(i, -size, -size));
-            yzPlaneGeo.vertices.push(new THREE.Vector3(i, -size, size));
-        }
-
-        this.addPlane(xyPlaneGeo);
-//        this.addPlane(yzPlaneGeo);
-//        this.addPlane(xzPlaneGeo);
-
-    },
-
-    addPlane: function(planeGeo){
-        var plane = new THREE.Line(planeGeo, new THREE.LineBasicMaterial({color:0x000000, opacity:0.3}), THREE.LinePieces);
-        this.three.sceneAdd(plane);
-    },
-
-    render: function(){
-        this.three.render();
-    }
-});
\ No newline at end of file
diff --git a/main.html b/main.html
index 42cbf8d2..398fb3ba 100644
--- a/main.html
+++ b/main.html
@@ -52,7 +52,7 @@
     <script src="js/models/extrudeVisualizer.js"></script>
 
     <!--views-->
-    <script src="js/menus/MenuWrapper.js"></script>
+    <script src="js/menus/MenuWrapperView.js"></script>
     <script src="js/menus/Navbar.js"></script>
     <script src="js/menus/LatticeMenuView.js"></script>
     <script src="js/menus/ImportMenuView.js"></script>
-- 
GitLab