diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js index 2091e02cf014b76da17291a260cef7cc0350fdc5..bc0434f2d7fe0257a91ad648987726e9d22e2f91 100644 --- a/js/cam/Assembler.js +++ b/js/cam/Assembler.js @@ -225,30 +225,7 @@ Assembler = Backbone.Model.extend({ data += exporter.addComment("begin program"); data += "\n"; - var rapidHeight = this.get("rapidHeight"); - var safeHeight = this.get("safeHeight"); - var wcs = this.get("originPosition"); - data += exporter.moveZ(rapidHeight); - data += "\n"; - - var stockPosition = this.get("stockPosition"); - var stockNum = 0;//position of stock in stock array - var multStockPositions = this.get("multipleStockPositions"); - var self = this; - dmaGlobals.lattice.rasterCells(this._getOrder(this.get("camStrategy")), function(cell){ - if (!cell) return; - var thisStockPosition = _.clone(stockPosition); - if (multStockPositions) { - var stockArraySize = self.get("stockArraySize"); - thisStockPosition.x += stockNum % stockArraySize.y * self.get("stockSeparation"); - thisStockPosition.y -= Math.floor(stockNum / stockArraySize.y) * self.get("stockSeparation"); - stockNum += 1; - if (stockNum >= stockArraySize.x * stockArraySize.y) stockNum = 0; - } - data += self._grabStock(exporter, thisStockPosition, rapidHeight, wcs, safeHeight); - data += self._placeCell(cell, exporter, rapidHeight, wcs, safeHeight); - data += "\n"; - }); + data = this.get("machine").postProcess(data, exporter); data += "\n\n"; data += exporter.addComment("end program"); @@ -287,29 +264,6 @@ Assembler = Backbone.Model.extend({ return ""; }, - _grabStock: function(exporter, stockPosition, rapidHeight, wcs, safeHeight){ - var data = ""; - data += exporter.rapidXY(stockPosition.x-wcs.x, stockPosition.y-wcs.y); - data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight); - data += exporter.moveZ(stockPosition.z-wcs.z); - data += exporter.addComment("get stock"); - data += exporter.moveZ(stockPosition.z-wcs.z+safeHeight); - data += exporter.rapidZ(rapidHeight); - return data; - }, - - _placeCell: function(cell, exporter, rapidHeight, wcs, safeHeight){ - var data = ""; - var cellPosition = cell.getPosition(); - data += exporter.rapidXY(cellPosition.x-wcs.x, cellPosition.y-wcs.y); - data += exporter.rapidZ(cellPosition.z-wcs.z+safeHeight); - data += exporter.moveZ(cellPosition.z-wcs.z); - data += exporter.addComment(JSON.stringify(cell.indices)); - data += exporter.moveZ(cellPosition.z-wcs.z+safeHeight); - data += exporter.rapidZ(rapidHeight); - return data; - }, - save: function(){ if (this.get("needsPostProcessing")){ var output = this.postProcess(); diff --git a/js/cam/Machine.js b/js/cam/Machine.js index 11dd0ab82e1e7c0b4e9706181abf3b1e2bb6a6dc..1236d933e2cdf41e4df1bf11215af8aa5ed7fb6d 100644 --- a/js/cam/Machine.js +++ b/js/cam/Machine.js @@ -126,6 +126,67 @@ Machine.prototype._incrementalMove = function(objects, axis, increment, currentP },simSpeed); }; +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////POST PROCESS////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// + +Machine.prototype.postProcess = function(data, exporter){//override in subclasses + + var rapidHeight = dmaGlobals.assembler.get("rapidHeight"); + var safeHeight = dmaGlobals.assembler.get("safeHeight"); + var wcs = dmaGlobals.assembler.get("originPosition"); + + var stockPosition = dmaGlobals.assembler.get("stockPosition"); + var stockNum = 0;//position of stock in stock array + var multStockPositions = dmaGlobals.assembler.get("multipleStockPositions"); + var stockSeparation = dmaGlobals.assembler.get("stockSeparation"); + var stockArraySize = dmaGlobals.assembler.get("stockArraySize"); + var self = this; + + dmaGlobals.lattice.rasterCells(dmaGlobals.assembler._getOrder(dmaGlobals.assembler.get("camStrategy")), function(cell){ + if (!cell) return; + var thisStockPosition = _.clone(stockPosition); + if (multStockPositions) { + thisStockPosition.x += stockNum % stockArraySize.y * stockSeparation; + thisStockPosition.y -= Math.floor(stockNum / stockArraySize.y) * stockSeparation; + stockNum += 1; + if (stockNum >= stockArraySize.x * stockArraySize.y) stockNum = 0; + } + data += self._postPickUpStock(exporter, thisStockPosition, rapidHeight, wcs, safeHeight); + data += self._postReleaseStock(cell, exporter, rapidHeight, wcs, safeHeight); + data += "\n"; + }); + return data; +}; + +Machine.prototype._postPickUpStock = function(exporter, stockPosition, rapidHeight, wcs, safeHeight){ + var data = ""; + data += exporter.rapidXY(stockPosition.x-wcs.x, stockPosition.y-wcs.y); + data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight); + data += exporter.moveZ(stockPosition.z-wcs.z); + data += exporter.addComment("get stock"); + data += exporter.moveZ(stockPosition.z-wcs.z+safeHeight); + data += exporter.rapidZ(rapidHeight); + return data; +}; + +Machine.prototype._postReleaseStock = function(cell, exporter, rapidHeight, wcs, safeHeight){ + var data = ""; + var cellPosition = cell.getPosition(); + data += exporter.rapidXY(cellPosition.x-wcs.x, cellPosition.y-wcs.y); + data += exporter.rapidZ(cellPosition.z-wcs.z+safeHeight); + data += exporter.moveZ(cellPosition.z-wcs.z); + data += exporter.addComment(JSON.stringify(cell.indices)); + data += exporter.moveZ(cellPosition.z-wcs.z+safeHeight); + data += exporter.rapidZ(rapidHeight); + return data; +}; + + +/////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////DEALLOCATE//////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// + Machine.prototype.destroy = function(){ this.cell.destroy(); _.each(_.values(this.meshes), function(mesh){