From 2bd992890470a968141057eb4afdde7119f14f3b Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Mon, 25 May 2015 18:33:11 -0700 Subject: [PATCH] cam menu in progress --- js/cam/Assembler.js | 2 + js/menus/AssemblerMenuView.js | 12 ++- js/menus/CamMenuView.js | 153 +++++++--------------------------- js/menus/MenuWrapperView.js | 45 +++++++--- 4 files changed, 72 insertions(+), 140 deletions(-) diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js index 67bf02f9..9fb89cc7 100644 --- a/js/cam/Assembler.js +++ b/js/cam/Assembler.js @@ -166,6 +166,8 @@ Assembler = Backbone.Model.extend({ }, _updateStockPosToOrigin: function(newOrigin, lastOrigin){ + console.log(newOrigin); + console.log(lastOrigin); var newStockPosition = _.clone(this.get("stockPosition")); _.each(_.keys(newStockPosition), function(key){ newStockPosition[key] += newOrigin[key] - lastOrigin[key]; diff --git a/js/menus/AssemblerMenuView.js b/js/menus/AssemblerMenuView.js index 3eeca0c0..bb7d038b 100644 --- a/js/menus/AssemblerMenuView.js +++ b/js/menus/AssemblerMenuView.js @@ -10,12 +10,10 @@ AssemblerMenuView = Backbone.View.extend({ events: { }, - initialize: function(options){ - - this.assembler = options.assembler; + initialize: function(){ _.bindAll(this, "render", "_onKeyup"); - this.listenTo(this.assembler, "change", this.render); + this.listenTo(globals.assembler, "change", this.render); $(document).bind('keyup', {}, this._onKeyup); }, @@ -28,15 +26,15 @@ AssemblerMenuView = Backbone.View.extend({ e.preventDefault(); var newVal = $(e.target).val(); if (newVal.length<3) return;//todo this isn't quite right - this.assembler.set("placementOrder", newVal); -// this.assembler.trigger("change:placementOrder"); + globals.assembler.set("placementOrder", newVal); +// globals.assembler.trigger("change:placementOrder"); }, render: function(){ if (this.model.changedAttributes()["currentNav"]) return; if (this.model.get("currentTab") != "assembler") return; if ($("input").is(":focus")) return; - this.$el.html(this.template(_.extend(this.model.toJSON(), this.assembler.toJSON(), globals.lattice.toJSON(), globals.plist))); + this.$el.html(this.template(_.extend(this.model.toJSON(), globals.assembler.toJSON(), globals.lattice.toJSON(), globals.plist))); }, template: _.template('\ diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js index 1681162a..c5d1ccd2 100644 --- a/js/menus/CamMenuView.js +++ b/js/menus/CamMenuView.js @@ -8,108 +8,18 @@ CamMenuView = Backbone.View.extend({ el: "#menuContent", events: { - "click .camProcess": "_selectCamProcess", - "click .units": "_changeUnits", "click #saveCam": "_save", - "change input:checkbox": "_clickCheckbox", - "focusout .numberInput": "render", "click #manualSelectOrigin": "_selectOrigin" }, - initialize: function(options){ + initialize: function(){ - this.lattice = options.lattice; - this.assembler = options.assembler; - - _.bindAll(this, "render", "_onKeyup"); + _.bindAll(this, "render"); //bind events - this.listenTo(this.assembler, "change", this.render); + this.listenTo(globals.assembler, "change", this.render); this.listenTo(this.model, "change", this.render); - this.listenTo(this.lattice, "change:units", this.render); - $(document).bind('keyup', {}, this._onKeyup); - }, - - _selectCamProcess: function(e){ - e.preventDefault(); - this.assembler.set("camProcess", $(e.target).data("type")); - }, - - _changeUnits: function(e){ - e.preventDefault(); - this.lattice.set("units", $(e.target).data("type")); - }, - - _onKeyup: function(e){ - if (this.model.get("currentTab") != "cam") return; - - if ($("input").is(":focus") && e.keyCode == 13) {//enter key - $(e.target).blur(); - this.render(); - return; - } - - if ($(".wcs").is(":focus")) this._updateNumber(e, "originPosition"); - else if ($(".stockPosition").is(":focus")){ - if (!this.assembler.get("stockPositionRelative")) this._updateNumber(e, "stockPosition"); - else this._updateRelativeStockPosition(e); - } - else if ($(".rapidSpeeds").is(":focus")) this._updateNumber(e, "rapidSpeeds"); - else if ($(".feedRate").is(":focus")) this._updateNumber(e, "feedRate"); - else if ($(".safeHeight").is(":focus")) this._updateNumber(e, "safeHeight"); - else if ($(".rapidHeight").is(":focus")) { - if (this.assembler.get("rapidHeightRelative")) this._updateNumber(e, "rapidHeight"); - else this._updateAbsoluteRapidHeight(e) - } - else if ($(".stockArraySize").is(":focus")) this._updateNumber(e, "stockArraySize"); - else if ($(".stockSeparation").is(":focus")) this._updateNumber(e, "stockSeparation"); - }, - - _getNumber: function(e, dontRound){ - var newVal = parseFloat($(e.target).val()); - if (isNaN(newVal)) return null; - if (dontRound) return newVal; - newVal = parseFloat(newVal.toFixed(4)); - return newVal; - }, - - _updateNumber: function(e, property){ - e.preventDefault(); - var newVal = this._getNumber(e); - if (newVal == null) return; - var object = _.clone(this.assembler.get(property)); - if ($(e.target).data("type")) { - object[$(e.target).data("type")] = newVal; - this.assembler.set(property, object); - } - else this.assembler.set(property, newVal); - }, - - _updateRelativeStockPosition: function(e){ - e.preventDefault(); - var newVal = this._getNumber(e, true); - if (!newVal) return; - var dim = $(e.target).data("type"); - newVal = (newVal + this.assembler.get("originPosition")[dim]).toFixed(4); - this.assembler.get("stockPosition")[dim] = parseFloat(newVal); - this.assembler.trigger("change:stockPosition"); - this.assembler.trigger("change"); - }, - - _updateAbsoluteRapidHeight: function(e){ - e.preventDefault(); - var newVal = this._getNumber(e, true); - if (!newVal) return; - newVal -= this.assembler.get("originPosition").z.toFixed(4);//always store relative to origin - this.assembler.set("rapidHeight", parseFloat(newVal)); - }, - - _clickCheckbox: function(e){ - e.preventDefault(); - var $object = $(e.target); - $object.blur(); - var property = $object.data("property"); - globals.assembler.set(property, !globals.assembler.get(property)); + this.listenTo(globals.lattice, "change", this.render); }, _selectOrigin: function(e){ @@ -119,25 +29,25 @@ CamMenuView = Backbone.View.extend({ _save: function(e){ e.preventDefault(); - this.assembler.save(); + globals.assembler.save(); }, render: function(){ if (this.model.changedAttributes()["currentNav"]) return; if (this.model.get("currentTab") != "cam") return; if ($("input").is(":focus")) return; - var data = _.extend(this.model.toJSON(), this.assembler.toJSON(), this.lattice.toJSON()); - if (this.assembler.get("stockPositionRelative")){ + + var data = _.extend(this.model.toJSON(), globals.assembler.toJSON(), globals.lattice.toJSON(), globals.plist); + if (globals.assembler.get("stockPositionRelative")){ var relStockPos = {}; relStockPos.x = data.stockPosition.x - data.originPosition.x; relStockPos.y = data.stockPosition.y - data.originPosition.y; relStockPos.z = data.stockPosition.z - data.originPosition.z; data.stockPosition = relStockPos; } - if (!this.assembler.get("rapidHeightRelative")){ + if (!globals.assembler.get("rapidHeightRelative")){ data.rapidHeight = data.rapidHeight + data.originPosition.z; } - this.$el.html(this.template(data)); }, @@ -147,7 +57,7 @@ CamMenuView = Backbone.View.extend({ <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= allCamProcesses[machineName][camProcess] %><span class="caret"></span></button>\ <ul role="menu" class="dropdown-menu">\ <% _.each(_.keys(allCamProcesses[machineName]), function(key){ %>\ - <li><a class="camProcess" data-type="<%= key %>" href="#"><%= allCamProcesses[machineName][key] %></a></li>\ + <li><a class="assembler dropdownSelector" data-property="camProcess" data-value="<%= key %>" href="#"><%= allCamProcesses[machineName][key] %></a></li>\ <% }); %>\ </ul>\ </div><br/><br/>\ @@ -157,52 +67,51 @@ CamMenuView = Backbone.View.extend({ <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= allUnitTypes[units] %><span class="caret"></span></button>\ <ul role="menu" class="dropdown-menu">\ <% _.each(_.keys(allUnitTypes), function(key){ %>\ - <li><a class="units" data-type="<%= key %>" href="#"><%= allUnitTypes[key] %></a></li>\ + <li><a class="lattice dropdownSelector" data-property="units" data-value="<%= key %>" href="#"><%= allUnitTypes[key] %></a></li>\ <% }); %>\ </ul>\ </div><br/><br/>\ - Origin (xyz): <input data-type="x" value="<%= originPosition.x.toFixed(4) %>" placeholder="X" class="form-control numberInput wcs" type="text">\ - <input data-type="y" value="<%= originPosition.y.toFixed(4) %>" placeholder="Y" class="form-control numberInput wcs" type="text">\ - <input data-type="z" value="<%= originPosition.z.toFixed(4) %>" placeholder="Z" class="form-control numberInput wcs" type="text">\ + Origin (xyz): <input data-property="originPosition" data-key="x" value="<%= originPosition.x.toFixed(4) %>" placeholder="X" class="form-control floatInput assembler" type="text">\ + <input data-property="originPosition" data-key="y" value="<%= originPosition.y.toFixed(4) %>" placeholder="Y" class="form-control floatInput assembler" type="text">\ + <input data-property="originPosition" data-key="z" value="<%= originPosition.z.toFixed(4) %>" placeholder="Z" class="form-control floatInput assembler" type="text">\ <% if (!(machineName == "handOfGod")){ %>\ <br/><a id="manualSelectOrigin" class=" btn btn-lg btn-default btn-imageCustom<% if (manualSelectOrigin){ %> btn-selected<% } %>"><img src="assets/imgs/cursor.png"></a>\ <label> Manually select origin from existing cell</label><br/><br/>\ - Stock (xyz): <input data-type="x" value="<%= stockPosition.x.toFixed(4) %>" placeholder="X" class="form-control numberInput stockPosition" type="text">\ - <input data-type="y" value="<%= stockPosition.y.toFixed(4) %>" placeholder="Y" class="form-control numberInput stockPosition" type="text">\ - <input data-type="z" value="<%= stockPosition.z.toFixed(4) %>" placeholder="Z" class="form-control numberInput stockPosition" type="text"><br/>\ + Stock (xyz): <input data-property="stockPosition" data-key="x" value="<%= stockPosition.x.toFixed(4) %>" placeholder="X" class="form-control floatInput assembler" type="text">\ + <input data-property="stockPosition" data-key="y" value="<%= stockPosition.y.toFixed(4) %>" placeholder="Y" class="form-control floatInput assembler" type="text">\ + <input data-property="stockPosition" data-key="z" value="<%= stockPosition.z.toFixed(4) %>" placeholder="Z" class="form-control floatInput assembler" type="text"><br/>\ <label class="checkbox" for="stockPosRel">\ - <input id="stockPosRel" data-property="stockPositionRelative" type="checkbox" <% if (stockPositionRelative){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="custom-checkbox">\ + <input id="stockPosRel" data-property="stockPositionRelative" type="checkbox" <% if (stockPositionRelative){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="assembler custom-checkbox">\ <span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\ Stock position relative to Origin</label>\ <label class="checkbox" for="stockFixed">\ - <input id="stockFixed" data-property="stockFixed" type="checkbox" <% if (stockFixed){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="custom-checkbox">\ + <input id="stockFixed" data-property="stockFixed" type="checkbox" <% if (stockFixed){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="assembler custom-checkbox">\ <span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\ Fix stock relative to to Origin</label>\ <label class="checkbox" for="multipleStockPositions">\ - <input id="multipleStockPositions" data-property="multipleStockPositions" type="checkbox" <% if (multipleStockPositions){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="custom-checkbox">\ + <input id="multipleStockPositions" data-property="multipleStockPositions" type="checkbox" <% if (multipleStockPositions){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="assembler custom-checkbox">\ <span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\ Multiple stock positions</label>\ <% if (multipleStockPositions){ %>\ - Stock dimensions (xy): <input data-type="x" value="<%= stockArraySize.x %>" placeholder="X" class="form-control numberInput stockArraySize" type="text">\ - <input data-type="y" value="<%= stockArraySize.y %>" placeholder="Y" class="form-control numberInput stockArraySize" type="text"><br/><br/>\ - Stock separation: <input value="<%= stockSeparation %>" placeholder="X" class="form-control numberInput stockSeparation" type="text"><br/><br/>\ + Stock dimensions (xy): <input data-property="stockArraySize" data-key="x" value="<%= stockArraySize.x %>" placeholder="X" class="form-control intInput assembler" type="text">\ + <input data-property="stockArraySize" data-key="y" value="<%= stockArraySize.y %>" placeholder="Y" class="form-control intInput assembler" type="text"><br/><br/>\ + Stock separation: <input data-property="stockSeparation" value="<%= stockSeparation %>" placeholder="X" class="form-control floatInput assembler" type="text"><br/><br/>\ <% } %>\ - Clearance Height: <input value="<%= rapidHeight.toFixed(4) %>" placeholder="Z" class="form-control numberInput rapidHeight" type="text"><br/>\ + Clearance Height: <input data-property="rapidHeight" value="<%= rapidHeight.toFixed(4) %>" placeholder="Z" class="form-control floatInput assembler" type="text"><br/>\ <label class="checkbox" for="rapidPosRel">\ - <input id="rapidPosRel" data-property="rapidHeightRelative" type="checkbox" <% if (rapidHeightRelative){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="custom-checkbox">\ + <input id="rapidPosRel" data-property="rapidHeightRelative" type="checkbox" <% if (rapidHeightRelative){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="assembler custom-checkbox">\ <span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\ Clearance height relative to Origin</label>\ <% } else { %>\ - <br/><br/>Stock Height: <input data-type="z" value="<%= stockPosition.z.toFixed(4) %>" placeholder="Z" class="form-control numberInput stockPosition" type="text"><br/><br/>\ + <br/><br/>Stock Height: <input data-property="stockPosition" data-key="z" value="<%= stockPosition.z.toFixed(4) %>" placeholder="Z" class="form-control floatInput assembler" type="text"><br/><br/>\ <% } %>\ - Approach Height: <input value="<%= safeHeight %>" placeholder="Z" class="form-control numberInput safeHeight" type="text"><br/><br/>\ + Approach Height: <input data-property="safeHeight" value="<%= safeHeight %>" placeholder="Z" class="form-control floatInput assembler" type="text"><br/><br/>\ Speeds (measured in <%= units %> per second):<br/><br/>\ - Rapids (xy, z): <input data-type="xy" value="<%= rapidSpeeds.xy %>" placeholder="XY" class="form-control numberInput rapidSpeeds" type="text">\ - <input data-type="z" value="<%= rapidSpeeds.z %>" placeholder="Z" class="form-control numberInput rapidSpeeds" type="text"><br/><br/>\ - Feed Rate (xy, z): <input data-type="xy" value="<%= feedRate.xy %>" placeholder="XY" class="form-control numberInput feedRate" type="text">\ - <input data-type="z" value="<%= feedRate.z %>" placeholder="Z" class="form-control numberInput feedRate" type="text">\ + Rapids (xy, z): <input data-property="rapidSpeeds" data-key="xy" value="<%= rapidSpeeds.xy %>" placeholder="XY" class="form-control floatInput assembler" type="text">\ + <input data-property="rapidSpeeds" data-key="z" value="<%= rapidSpeeds.z %>" placeholder="Z" class="form-control floatInput assembler" type="text"><br/><br/>\ + Feed Rate (xy, z): <input data-property="feedRate" data-key="xy" value="<%= feedRate.xy %>" placeholder="XY" class="form-control floatInput assembler" type="text">\ + <input data-property="feedRate" data-key="z" value="<%= feedRate.z %>" placeholder="Z" class="form-control floatInput assembler" type="text">\ ') - }); diff --git a/js/menus/MenuWrapperView.js b/js/menus/MenuWrapperView.js index fe18e2ff..f96bad6b 100644 --- a/js/menus/MenuWrapperView.js +++ b/js/menus/MenuWrapperView.js @@ -10,7 +10,10 @@ MenuWrapper = Backbone.View.extend({ events: { "click .menuWrapperTab>a": "_tabWasSelected", "click .dropdownSelector": "_makeDropdownSelection", - "click .clearCells": "_clearCells" + "click .clearCells": "_clearCells", + "focusout .floatInput": "_renderTab",//force rounding if needed + "focusout .intInput": "_renderTab", + "change input:checkbox": "_clickCheckbox" }, initialize: function(){ @@ -21,13 +24,7 @@ MenuWrapper = Backbone.View.extend({ var lattice = globals.lattice; //init all tab view controllers - - this.physicsMenu = new PhysicsMenuView({model:this.model}); - this.materialMenu = new MaterialMenuView({model:this.model}); - this.optimizeMenu = new OptimizationMenuView({model:this.model}); - this.assemblerMenu = new AssemblerMenuView({model:this.model, assembler: globals.assembler}); this.animationMenu = new AnimationMenuView({model:this.model}); - this.camMenu = new CamMenuView({model:this.model, lattice:lattice, assembler:globals.assembler}); this.sendMenu = new SendMenuView({model:this.model}); //bind events @@ -58,6 +55,7 @@ MenuWrapper = Backbone.View.extend({ console.warn("value is not float"); return; } + newVal = parseFloat(newVal.toFixed(parseInt(4))); this._setNumber($target, newVal); }, @@ -79,6 +77,14 @@ MenuWrapper = Backbone.View.extend({ return; } var key = $target.data("key"); + + if (property == "stockPosition" && globals.assembler.get(property + "Relative")){ + if (key) newVal = parseFloat((newVal + globals.assembler.get("originPosition")[key]).toFixed(4)); + else console.warn("no key found for " + property); + } else if (property == "rapidHeight" && !globals.assembler.get(property + "Relative")){ + newVal = parseFloat((newVal - globals.assembler.get("originPosition")["z"]).toFixed(4)); + } + if (key){ if ($target.hasClass("lattice")) { globals.lattice.get(property)[key] = newVal; @@ -87,7 +93,6 @@ MenuWrapper = Backbone.View.extend({ globals.assembler.get(property)[key] = newVal; globals.assembler.trigger("change:"+property); } - return; } if ($target.hasClass("lattice")) globals.lattice.set(property, newVal); @@ -103,6 +108,19 @@ MenuWrapper = Backbone.View.extend({ else if ($target.hasClass("assembler")) globals.assembler.set(property, value); }, + _clickCheckbox: function(e){ + e.preventDefault(); + var $target = $(e.target); + $target.blur(); + var property = $target.data("property"); + if (!property) { + console.warn("no property associated with checkbox input"); + return; + } + if ($target.hasClass("lattice")) globals.lattice.set(property, !globals.lattice.get(property)); + else if ($target.hasClass("assembler")) globals.assembler.set(property, !globals.assembler.get(property)); + }, + _clearCells: function(e){ e.preventDefault(); globals.lattice.clearCells(); @@ -132,7 +150,7 @@ MenuWrapper = Backbone.View.extend({ }, _renderTab: function(tabName){ - if (!tabName) tabName = this.model.get("currentTab"); + if (!tabName || !_.isString(tabName)) tabName = this.model.get("currentTab"); if (tabName == "lattice"){ if (!this.latticeMenu) this.latticeMenu = new LatticeMenuView({model:this.model}); @@ -150,17 +168,22 @@ MenuWrapper = Backbone.View.extend({ if (!this.scriptMenu) this.scriptMenu = new ScriptMenuView({model:this.model}); this.scriptMenu.render(); } else if (tabName == "physics"){ + if (!this.physicsMenu) this.physicsMenu = new PhysicsMenuView({model:this.model}); this.physicsMenu.render(); } else if (tabName == "material"){ + if (!this.materialMenu) this.materialMenu = new MaterialMenuView({model:this.model}); this.materialMenu.render(); } else if (tabName == "optimize"){ + if (!this.optimizeMenu) this.optimizeMenu = new OptimizationMenuView({model:this.model}); this.optimizeMenu.render(); } else if (tabName == "assembler"){ + if (!this.assemblerMenu) this.assemblerMenu = new AssemblerMenuView({model:this.model}); this.assemblerMenu.render(); - } else if (tabName == "animate"){ - this.animationMenu.render(); } else if (tabName == "cam"){ + if (!this.camMenu) this.camMenu = new CamMenuView({model:this.model}); this.camMenu.render(); + } else if (tabName == "animate"){ + this.animationMenu.render(); } else if (tabName == "send"){ this.sendMenu.render(); } else { -- GitLab