diff --git a/css/main.css b/css/main.css index 8dd5b1384ff478a9c958e37e22232d4a60fc2e02..e058094d4c95d468b82d33f0b411a99fd4d2ca1e 100644 --- a/css/main.css +++ b/css/main.css @@ -160,3 +160,8 @@ hr { #gcodeEditor:focus { outline-width: 0; } + +input.numberInput{ + width:22%; + display: inline; +} diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js index cbe188220935202f903ed73baf4d124d8aaf0ca1..96405d562c9584fe46d0c9beb69ecb1eac0321b7 100644 --- a/js/cam/Assembler.js +++ b/js/cam/Assembler.js @@ -14,6 +14,8 @@ Assembler = Backbone.Model.extend({ rapidHeight: 12, stockHeight: 3, + origin: null, + originPosition: new THREE.Vector3(0,0,0) }, initialize: function(){ @@ -23,7 +25,28 @@ Assembler = Backbone.Model.extend({ //bind events this.listenTo(this, "change:camProcess", this._setNeedsPostProcessing); this.listenTo(dmaGlobals.appState, "change:units", this._setNeedsPostProcessing); + this.listenTo(dmaGlobals.appState, "change:currentTab", this._setOriginVisibility); + this.listenTo(this, "change:originPosition", this._moveOrigin); + + //init origin mesh + var origin = new THREE.Mesh(new THREE.SphereGeometry(dmaGlobals.lattice.get("scale")/4), new THREE.MeshBasicMaterial({color:0xff0000})); + dmaGlobals.three.sceneAdd(origin); + this.set("origin", origin); + this._setOriginVisibility(); + }, + + _setOriginVisibility: function(){ + var visible = false; + var currentTab = dmaGlobals.appState.get("currentTab"); + if (currentTab == "cam" || currentTab == "animate" || currentTab == "send") visible = true; + this.get("origin").visible = visible; + dmaGlobals.three.render(); + }, + _moveOrigin: function(){ + var position = this.get("originPosition"); + this.get("origin").position.set(position.x, position.y, position.z); + dmaGlobals.three.render(); }, _setNeedsPostProcessing: function(){ diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js index 4edc02b2043d7fd101261633bba7ee31b332b26b..6337df5a4892d36655936314e3151d3fade0ae20 100644 --- a/js/menus/CamMenuView.js +++ b/js/menus/CamMenuView.js @@ -20,8 +20,11 @@ CamMenuView = Backbone.View.extend({ this.assembler = options.assembler; _.bindAll(this, "render"); + _.bindAll(this, "_updateOrigin"); + //bind events this.listenTo(this.assembler, "change", this.render); this.listenTo(this.model, "change:units", this.render); + $(document).bind('keyup', {state:false}, this._updateOrigin); }, _selectCamProcess: function(e){ @@ -34,6 +37,16 @@ CamMenuView = Backbone.View.extend({ this.model.set("units", $(e.target).data("type")); }, + _updateOrigin: function(e){ + if (!$(".wcs").is(":focus")) return; + e.preventDefault(); + var newPosition = parseFloat($(e.target).val()); + if (isNaN(newPosition)) return; + var origin = this.assembler.get("originPosition"); + origin[$(e.target).data("type")] = newPosition; + this.assembler.trigger("change:originPosition"); + }, + _save: function(e){ e.preventDefault(); this.assembler.save(); @@ -41,6 +54,7 @@ CamMenuView = Backbone.View.extend({ render: function(){ if (this.model.get("currentTab") != "cam") return; + if ($(".wcs").is(":focus")) return; this.$el.html(this.template(_.extend(this.model.toJSON(), this.assembler.toJSON()))); }, @@ -54,6 +68,7 @@ CamMenuView = Backbone.View.extend({ <% }); %>\ </ul>\ </div><br/><br/>\ + <a href="#" id="saveCam" class=" btn btn-block btn-lg btn-default">Process and Save</a><br/>\ Units: \ <div class="btn-group">\ <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= allUnitTypes[units] %><span class="caret"></span></button>\ @@ -63,7 +78,9 @@ CamMenuView = Backbone.View.extend({ <% }); %>\ </ul>\ </div><br/><br/>\ - <a href="#" id="saveCam" class=" btn btn-block btn-lg btn-default">Process and Save</a><br/>\ + Part Zero: <input data-type="x" value="<%= originPosition.x %>" placeholder="origin X" class="form-control numberInput wcs" type="text">\ + <input data-type="y" value="<%= originPosition.y %>" placeholder="origin Y" class="form-control numberInput wcs" type="text">\ + <input data-type="z" value="<%= originPosition.z %>" placeholder="origin Z" class="form-control numberInput wcs" type="text"><br/>\ ') }); \ No newline at end of file diff --git a/js/menus/MenuWrapperView.js b/js/menus/MenuWrapperView.js index 9d09c2542e9d4446c20c4ee3054d12d87864591c..ee51d2bef8071eba0c3dbf06bfbf45e132441052 100644 --- a/js/menus/MenuWrapperView.js +++ b/js/menus/MenuWrapperView.js @@ -92,6 +92,7 @@ MenuWrapper = Backbone.View.extend({ var self = this; this._hide(function(){ self._populateAndShow(); + self.model.trigger("change:currentTab");//this was updated silently before }, true); },