diff --git a/js/cam/assemblers/Assembler.js b/js/cam/assemblers/Assembler.js index 318ce58ad871b7034a4686fa23ebf02c3b1e5361..bc88c628b7fe5b0ef212edbf9d9ed7f2351701aa 100644 --- a/js/cam/assemblers/Assembler.js +++ b/js/cam/assemblers/Assembler.js @@ -133,23 +133,121 @@ Assembler.prototype._postReleaseStock = function(cellPosition, cell, exporter, r Assembler.prototype.updateCellMode = function(){ - this.stock.setMode(); +// this.stock.setMode();//todo fix this + _.each(this.stock.cells, function(cell){ + cell.setMode(); + }); }; Assembler.prototype.pickUpStock = function(){ - this.hasStock = true; - this.cell.draw(); + this.stock.show(); }; Assembler.prototype.releaseStock = function(index){ - this.hasStock = false; globals.lattice.showCellAtIndex(JSON.parse(index)); - this.cell.hide(); + this.stock.hide(); }; Assembler.prototype.pause = function(){ }; +Assembler.prototype.moveTo = function(x, y, z, speed, wcs, callback){ + x = this._makeAbsPosition(x, wcs.x); + y = this._makeAbsPosition(y, wcs.y); + z = this._makeAbsPosition(z, wcs.z); + this._moveTo(x, y, z, speed, wcs, callback); +}; + +Assembler.prototype._moveTo = function(x, y, z, speed, wcs, callback){ + var totalThreads = 3; + function sketchyCallback(){ + totalThreads -= 1; + if (totalThreads > 0) return; + callback(); + } + var startingPos = this.stock.getPosition(); + speed = this._normalizeSpeed(startingPos, x, y, this._reorganizeSpeed(speed)); + this._moveXAxis(startingPos.x, x, speed.x, sketchyCallback); + this._moveYAxis(startingPos.y, y, speed.y, sketchyCallback); + this._moveZAxis(startingPos.z, z, speed.z, sketchyCallback); +}; + +Assembler.prototype._moveXAxis = function(startingPos, target, speed, callback){ + this._moveAxis(startingPos, target, "x", speed, callback); +}; +Assembler.prototype._moveYAxis = function(startingPos, target, speed, callback){ + this._moveAxis(startingPos, target, "y", speed, callback); +}; +Assembler.prototype._moveZAxis = function(startingPos, target, speed, callback){ + this._moveAxis(startingPos, target, "z", speed, callback); +}; + +Assembler.prototype._moveAxis = function(startingPos, target, axis, speed, callback){ + if (target == null || target === undefined) { + callback(); + return; + } + this._animateObjects([this.stock], axis, speed, startingPos, target, callback); +}; + +Assembler.prototype._makeAbsPosition = function(target, wcs){ + if (target == "" || target == null || target === undefined) return null; + return parseFloat(target)+wcs; +}; + +Assembler.prototype._reorganizeSpeed = function(speed){ + var newSpeed = {}; + newSpeed.x = speed.xy; + newSpeed.y = speed.xy; + newSpeed.z = speed.z; + return newSpeed; +}; + +Assembler.prototype._normalizeSpeed = function(startingPos, x, y, speed){//xy moves need speed normalization + var normSpeed = {}; + if (x == "" || y == "") return speed; + var deltaX = x-startingPos.x; + var deltaY = y-startingPos.y; + var totalDistance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); + if (totalDistance == 0) return speed; + normSpeed.x = Math.abs(deltaX/totalDistance*speed.x); + normSpeed.y = Math.abs(deltaY/totalDistance*speed.y); + normSpeed.z = speed.z; + return normSpeed; +}; + +Assembler.prototype._animateObjects = function(objects, axis, speed, startingPos, target, callback){ + var increment = speed/25*globals.cam.get("simSpeed"); + if (increment == 0) { + if (callback) callback(); + return; + } + var direction = 1; + if (target-startingPos < 0) direction = -1; + increment = Math.max(increment, 0.00001)*direction;//need to put a min on the increment - other wise this stall out with floating pt tol + this._incrementalMove(objects, axis, increment, startingPos, target, direction, callback); +}; + +Assembler.prototype._incrementalMove = function(objects, axis, increment, currentPos, target, direction, callback){ + var self = this; + setTimeout(function(){ + if ((target-currentPos)*direction <= 0) { + if (callback) callback(); + return; + } + var nextPos = currentPos + increment; + if (Math.abs(target-currentPos) < Math.abs(increment)) nextPos = target;//don't overshoot + self._setPosition(objects, nextPos, axis); + self._incrementalMove(objects, axis, increment, nextPos, target, direction, callback) + }, 10); +}; + +Assembler.prototype._setPosition = function(objects, nextPos, axis){ + _.each(objects, function(object){ + object.position[axis] = nextPos; + }); +}; + diff --git a/js/cam/assemblers/StaplerAssembler.js b/js/cam/assemblers/StaplerAssembler.js index c638f5a909e393478caa81b54fd43af03541e945..b815ec6e3b263b89b83ab14e40f8c9af82bb8aa5 100644 --- a/js/cam/assemblers/StaplerAssembler.js +++ b/js/cam/assemblers/StaplerAssembler.js @@ -57,4 +57,26 @@ StaplerAssembler.prototype._loadSTls = function(doAdd){ geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, 1.8545, -1.2598)); doAdd(geometryScale(geometry), "substrate"); }); +}; + +StaplerAssembler.prototype._moveXAxis = function(startingPos, target, axis, speed, callback){ + if (target == null || target === undefined) { + callback(); + return; + } + this._animateObjects([this.xAxis], axis, speed, startingPos, target, callback); +}; +StaplerAssembler.prototype._moveYAxis = function(startingPos, target, axis, speed, callback){ + if (target == null || target === undefined) { + callback(); + return; + } + this._animateObjects([this.yAxis], axis, speed, startingPos, target, callback); +}; +StaplerAssembler.prototype._moveZAxis = function(startingPos, target, axis, speed, callback){ + if (target == null || target === undefined) { + callback(); + return; + } + this._animateObjects([this.zAxis], axis, speed, startingPos, target, callback); }; \ No newline at end of file diff --git a/js/cam/cam.js b/js/cam/cam.js index c6c25b4b260309326e86360a838f84d5000df471..3eaa46c0a57c2e5f0d9d47886cb1a590a89e4a9f 100644 --- a/js/cam/cam.js +++ b/js/cam/cam.js @@ -67,7 +67,6 @@ Cam = Backbone.Model.extend({ "change:cellType " + "change:connectionType", this._setNeedsPostProcessing); - this.listenTo(globals.lattice, "change:scale", this._setCAMScale); this.listenTo(globals.appState, "change:stockSimulationPlaying", this._stockSimulation); this.listenTo(globals.lattice, "change:partType", this._updatePartType); @@ -126,13 +125,6 @@ Cam = Backbone.Model.extend({ globals.three.render(); }, - _setCAMScale: function(){ - var scale = globals.lattice.get("scale"); - this.get("origin").scale.set(scale/8, scale/8, scale/8); - this.get("stock").scale.set(scale/8, scale/8, scale/8); - if (this.get("assembler")) this.get("assembler").setScale(scale); - }, - _tabChanged: function(){ this._setCAMVisibility(); if (globals.appState.get("currentTab") != "animate") this.resetSimulation();