From ae26f99db1450c0da9690da9217e4b6c9b21c6ea Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Mon, 25 May 2015 13:28:55 -0700 Subject: [PATCH] import menu --- ...ngCrossection.stl => wingCrossSection.stl} | Bin js/menus/ImportMenuView.js | 83 +++++------------- js/menus/LatticeMenuView.js | 9 +- js/menus/MenuWrapperView.js | 8 +- 4 files changed, 30 insertions(+), 70 deletions(-) rename assets/stls/meshes-airbus/{wingCrossection.stl => wingCrossSection.stl} (100%) diff --git a/assets/stls/meshes-airbus/wingCrossection.stl b/assets/stls/meshes-airbus/wingCrossSection.stl similarity index 100% rename from assets/stls/meshes-airbus/wingCrossection.stl rename to assets/stls/meshes-airbus/wingCrossSection.stl diff --git a/js/menus/ImportMenuView.js b/js/menus/ImportMenuView.js index 131e5222..07405167 100644 --- a/js/menus/ImportMenuView.js +++ b/js/menus/ImportMenuView.js @@ -8,28 +8,35 @@ ImportMenuView = Backbone.View.extend({ el: "#menuContent", events: { - "change #uploadMesh": "_uploadMesh", - "click .selectMesh": "_selectMesh", + "change #importMenuUploadSTL": "_uploadSTL", + "click .importMenuSelectMesh": "_selectMesh", + "click #importMenuSelectWall": "_buildWall", "fileselect .btn-file :file": "_readDataURL", "click #removeFillGeo": "_removeMesh", - "click #selectWall": "_buildWall", + "click #doSubtractGeo": "_subtractGeo", - "click #doFillGeo": "_fillGeo", - "click .btn-clearCells": "_clearCells" + "click #doFillGeo": "_fillGeo" }, initialize: function(){ this.fillGeometry = new FillGeometry(); - this.listenTo(this.fillGeometry, "change", this.render); }, + _uploadSTL: function(e){//select a mesh to upload + e.preventDefault(); + var input = $(e.target), + numFiles = input.get(0).files ? input.get(0).files.length : 1, + label = input.val().replace(/\\/g, '/').replace(/.*\//, ''); + input.trigger('fileselect', [numFiles, label, input.get(0).files]); + input.val(""); + }, + _selectMesh: function(e){//select mesh from dropdown list e.preventDefault(); var filename = $(e.target).data("file"); - this._loadMeshFromURL('assets/stls/' + filename); - this.fillGeometry.set("filename", filename.split('/')[1]); + this._loadMeshFromURL('assets/stls/' + filename, filename.split('/')[1]); }, _buildWall: function(e){ @@ -37,15 +44,6 @@ ImportMenuView = Backbone.View.extend({ globals.lattice.addCellsInRange({min:{x:-5,y:-5,z:0}, max:{x:5,y:5,z:3}}); }, - _uploadMesh: function(e){//select a mesh to upload - e.preventDefault(); - var input = $(e.target), - numFiles = input.get(0).files ? input.get(0).files.length : 1, - label = input.val().replace(/\\/g, '/').replace(/.*\//, ''); - input.trigger('fileselect', [numFiles, label, input.get(0).files]); - input.val(""); - }, - _readDataURL: function(event, numFiles, filename, files){ if (files.length>1) console.warn("too many files selected"); var reader = new FileReader(); @@ -53,17 +51,17 @@ ImportMenuView = Backbone.View.extend({ var self = this; reader.onload = (function() { return function(e) { - self._loadMeshFromURL(e.target.result); - self.fillGeometry.set("filename", filename); + self._loadMeshFromURL(e.target.result, filename); } })(); }, - _loadMeshFromURL: function(url){ + _loadMeshFromURL: function(url, filename){ var self = this; var loader = new THREE.STLLoader(); loader.load(url, function(geometry){ self.fillGeometry.buildNewMesh(geometry); + self.fillGeometry.set("filename", filename); }); }, @@ -82,49 +80,12 @@ ImportMenuView = Backbone.View.extend({ this.fillGeometry.removeMesh(); }, - _clearCells: function(e){ - e.preventDefault(); - globals.lattice.clearCells(); - }, - render: function(){ if (this.model.changedAttributes()["currentNav"]) return; if (this.model.get("currentTab") != "import") return; this.$el.html(this.template(_.extend(this.model.toJSON(), this.fillGeometry.toJSON()))); }, -// makeDimensionString: function(){ -// var bounds = this.fillGeometry.get("boundingBoxHelper").box; -// return (bounds.max.x - bounds.min.x).toFixed(1) + " x " + -// (bounds.max.y - bounds.min.y).toFixed(1) + " x " + (bounds.max.z - bounds.min.z).toFixed(1); -// }, -// -// getScale: function(){ -// var scale = this.fillGeometry.get("scale"); -// var dimensions = {}; -// dimensions.xScale = scale[0]; -// dimensions.yScale = scale[1]; -// dimensions.zScale = scale[2]; -// dimensions.dimensions = this.makeDimensionString(); -// return dimensions; -// }, -// -// scale: function(e){ -// -// this.fillGeometry.scale([this.getDimScale($(".xScale").val()), this.getDimScale($(".yScale").val()), this.getDimScale($(".zScale").val())]); -// }, -// -// getDimScale: function(val){ -// if (val == "") return null; -// return parseFloat(val); -// }, -// -// rotate: function(e){ -// e.preventDefault(); -// var axis = $(e.target).data("axis"); -// this.fillGeometry.rotate(axis); -// }, - template: _.template('\ Filename: <%= filename %><br/><br/>\ <% if (mesh){ %>\ @@ -133,16 +94,16 @@ ImportMenuView = Backbone.View.extend({ <a href="#" id="removeFillGeo" class=" btn btn-block btn-lg btn-default">Remove Mesh</a><br/>\ <hr>\ <% } %>\ - <a href="#" class=" btn btn-block btn-lg btn-default btn-clearCells">Clear All Cells</a><br/><br/>\ + <a href="#" class=" btn btn-block btn-lg btn-default clearCells">Clear All Cells</a><br/><br/>\ <br/><span class="btn btn-default btn-lg btn-file fullWidth">\ - Upload STL<input id="uploadMesh" type="file">\ + Upload STL<input id="importMenuUploadSTL" type="file">\ </span><br/>\ <div class="text-center">OR</div>\ <div class="btn-group fullWidth">\ <button data-toggle="dropdown" class="btn btn-lg btn-default dropdown-toggle fullWidth" type="button">Select Model <span class="caret"></span></button>\ <ul role="menu" class="dropdown-menu">\ - <li><a class="selectMesh" data-file="meshes-airbus/wingCrossection.stl" href="#">Wing</a></li>\ - <li><a id="selectWall" href="#">Block</a></li>\ + <li><a class="importMenuSelectMesh" data-file="meshes-airbus/wingCrossSection.stl" href="#">Wing</a></li>\ + <li><a id="importMenuSelectWall" href="#">Block</a></li>\ </ul>\ </div><!-- /btn-group -->\ ') diff --git a/js/menus/LatticeMenuView.js b/js/menus/LatticeMenuView.js index 2a154bbf..18c8684d 100644 --- a/js/menus/LatticeMenuView.js +++ b/js/menus/LatticeMenuView.js @@ -10,8 +10,6 @@ LatticeMenuView = Backbone.View.extend({ el: "#menuContent", events: { - "click #latticeMenuClearCells": "_clearCells", - "change #latticeScale": "_changeScale", "slide #latticeMenuScaleSlider": "_sliderDidSlide", "slideStop #latticeMenuScaleSlider": "_changeScaleSlider" @@ -25,11 +23,6 @@ LatticeMenuView = Backbone.View.extend({ this.listenTo(globals.lattice, "change", this.render); }, - _clearCells: function(e){ - e.preventDefault(); - globals.lattice.clearCells(); - }, - _changeScale: function(e){ e.preventDefault(); var val = parseFloat($(e.target).val()); @@ -119,7 +112,7 @@ LatticeMenuView = Backbone.View.extend({ </div><br/><br/>\ Num Cells: <%= numCells %><br/><br/>\ <br/>\ - <a href="#" id="latticeMenuClearCells" class=" btn btn-block btn-lg btn-default">Clear All Cells</a><br/>\ + <a href="#" class="clearCells btn btn-block btn-lg btn-default">Clear All Cells</a><br/>\ ') }); diff --git a/js/menus/MenuWrapperView.js b/js/menus/MenuWrapperView.js index ebf0eca5..89527038 100644 --- a/js/menus/MenuWrapperView.js +++ b/js/menus/MenuWrapperView.js @@ -10,6 +10,7 @@ MenuWrapper = Backbone.View.extend({ events: { "click .menuWrapperTab>a": "_tabWasSelected", "click .dropdownSelector": "_makeDropdownSelection", + "click .clearCells": "_clearCells" }, initialize: function(){ @@ -20,7 +21,6 @@ MenuWrapper = Backbone.View.extend({ var lattice = globals.lattice; //init all tab view controllers - this.importMenu = new ImportMenuView({model:this.model}); this.sketchMenu = new SketchMenuView({model:lattice, appState:this.model}); this.partMenu = new PartMenuView({model:this.model, lattice:lattice}); this.scriptMenu = new ScriptMenuView({model:this.model}); @@ -98,6 +98,11 @@ MenuWrapper = Backbone.View.extend({ if ($target.hasClass("lattice")) globals.lattice.set(property, value); }, + _clearCells: function(e){ + e.preventDefault(); + globals.lattice.clearCells(); + }, + _tabWasSelected: function(e){ @@ -127,6 +132,7 @@ MenuWrapper = Backbone.View.extend({ if (!this.latticeMenu) this.latticeMenu = new LatticeMenuView({model:this.model}); this.latticeMenu.render(); } else if (tabName == "import"){ + if (!this.importMenu) this.importMenu = new ImportMenuView({model:this.model}); this.importMenu.render(); } else if (tabName == "sketch"){ this.sketchMenu.render(); -- GitLab