From e667d7d05f33e5b66134fd6125dfbd90b71e0147 Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Wed, 11 Mar 2015 15:12:27 -0400
Subject: [PATCH] beginning g code exporter

---
 js/cam/Assembler.js       | 10 +++++-
 js/cam/GCodeExporter.js   | 71 +++++++++++++++++++++++++++++++++++++++
 js/cam/ShopbotExporter.js | 50 +++++++++++++--------------
 main.html                 |  1 +
 4 files changed, 105 insertions(+), 27 deletions(-)
 create mode 100644 js/cam/GCodeExporter.js

diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index 4b35ba64..6f9a82ad 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -18,7 +18,15 @@ Assembler = Backbone.Model.extend({
     processAndSave: function(){
         var exporter;
         if (this.get("camProcess") == "shopbot") exporter = new ShopbotExporter();
-        if (exporter) exporter.processAndSave();
+        else if (this.get("camProcess") == "gcode") exporter = new GCodeExporter();
+        if (exporter) {
+            var data = "";
+            data += exporter.makeHeader();
+            data += exporter.moveZ(3);
+            data += exporter.move3(1, 4, 5);
+            data += exporter.makeFooter();
+            exporter.save(data);
+        }
         else console.warn("cam process not supported");
     },
 
diff --git a/js/cam/GCodeExporter.js b/js/cam/GCodeExporter.js
new file mode 100644
index 00000000..74c23e81
--- /dev/null
+++ b/js/cam/GCodeExporter.js
@@ -0,0 +1,71 @@
+/**
+ * Created by aghassaei on 3/10/15.
+ */
+
+function GCodeExporter() {
+}
+
+GCodeExporter.prototype.makeHeader = function(){
+    var data = "";
+    if (dmaGlobals.appState.get("units") == "inches") data += this.addLine("G20", [], "units inches");
+    else data += this.addLine("G21", [], "units mm");
+    data += this.addLine("G90", [], "absolute positioning");
+    data += this.addLine("G54", [], "work offset");
+//    data += this.addLine("G49", [], "cancel tool length comp");
+    data += this.addLine("G40", [], "cancel tool radius comp");
+    data += this.addLine("M09", [], "coolant off");
+
+
+
+    data += this.goHome();
+
+    //set rapid and feed speeds
+
+    data += "\n";
+    data += "\n";
+    return data;
+};
+
+GCodeExporter.prototype.addLine = function(command, params, comment){
+    var data = "";
+    data += command + " ";
+    _.each(params, function(param){
+        if (!param) return;
+        data += param + " ";
+    });
+    if (comment) data += "(" + comment + ")";
+    data += "\n";
+    return data;
+};
+
+GCodeExporter.prototype.rapid3 = function(x, y, z){
+    return this.move3(x,y,z);
+};
+
+GCodeExporter.prototype.move3 = function(x, y, z){
+    if (x !== null) x = "X"+x;
+    if (y !== null) y = "Y"+y;
+    if (z !== null) z = "Z"+z;
+    return this.addLine("G01", [x,y,z]);
+};
+
+GCodeExporter.prototype.goHome = function(){
+    return this.move3(0,0,0);
+};
+
+GCodeExporter.prototype.moveZ = function(z){
+    return this.move3(null, null, z);
+};
+
+GCodeExporter.prototype.makeFooter = function(){
+    var data = "";
+    data += this.goHome();
+    data += this.addLine("M30", [], "program stop");
+
+    return data;
+};
+
+GCodeExporter.prototype.save = function(data){
+    var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
+    saveAs(blob, "GCodeExport" + ".g");
+};
diff --git a/js/cam/ShopbotExporter.js b/js/cam/ShopbotExporter.js
index 8c85400c..a3d3ac1d 100644
--- a/js/cam/ShopbotExporter.js
+++ b/js/cam/ShopbotExporter.js
@@ -3,30 +3,23 @@
  */
 
 function ShopbotExporter() {
-
 }
 
-ShopbotExporter.prototype.processAndSave = function(){
-
+ShopbotExporter.prototype.makeHeader = function(){
     var data = "";
-
-    data = this.makeHeader(data);
-    data = this.moveZ(data, 3);
-    data = this.jog3(data, 1, 4, 5);
-
-    this.save(data);
-};
-
-ShopbotExporter.prototype.makeHeader = function(data){
-    data = this.addLine(data, "FG", [], "single step mode");
-    data = this.goHome(data);
-    data = this.addLine(data, "SM", [4, 1], "set to move/cut mode");
-    data = this.addLine(data, "JS", [4, 1], "jog speed- xy, z inches per sec");
-    data = this.addLine(data, "MS", [4, 1], "move speed- xy, z inches per sec");
+    data += this.addLine("FG", [], "single step mode");
+    data += this.goHome();
+    data += this.addLine("SA", [], "absolute distances");
+    data += this.addLine("SM", [4, 1], "move/cut mode (as opposed to preview mode)");
+    data += this.addLine("JS", [4, 1], "jog speed- xy, z inches per sec");
+    data += this.addLine("MS", [4, 1], "move speed- xy, z inches per sec");
+    data += "\n";
+    data += "\n";
     return data;
 };
 
-ShopbotExporter.prototype.addLine = function(data, command, params, comment){
+ShopbotExporter.prototype.addLine = function(command, params, comment){
+    var data = "";
     data += command + " ";
     _.each(params, function(param){
         data += param + ", ";
@@ -36,22 +29,27 @@ ShopbotExporter.prototype.addLine = function(data, command, params, comment){
     return data;
 };
 
-ShopbotExporter.prototype.jog3 = function(data, x, y, z){
-    return this.addLine(data, "J3", [x,y,z]);
+ShopbotExporter.prototype.rapid3 = function(x, y, z){
+    return this.addLine("J3", [x,y,z]);
 };
 
-ShopbotExporter.prototype.move3 = function(data, x, y, z){
-    return this.addLine(data, "M3", [x,y,z]);
+ShopbotExporter.prototype.move3 = function(x, y, z){
+    return this.addLine("M3", [x,y,z]);
 };
 
-ShopbotExporter.prototype.goHome = function(data){
-    return this.addLine(data, "JH", [], "go home");
+ShopbotExporter.prototype.goHome = function(){
+    return this.addLine("JH", [], "go home");
 };
 
-ShopbotExporter.prototype.moveZ = function(data, z){
-    return this.move3(data, "", "", z);
+ShopbotExporter.prototype.moveZ = function(z){
+    return this.move3("", "", z);
 };
 
+ShopbotExporter.prototype.makeFooter = function(){
+    var data = "";
+
+    return data;
+};
 
 ShopbotExporter.prototype.save = function(data){
     var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
diff --git a/main.html b/main.html
index 132c5860..1a693645 100644
--- a/main.html
+++ b/main.html
@@ -65,6 +65,7 @@
     <script src="js/models/AppState.js"></script>
     <script src="js/cam/Assembler.js"></script>
     <script src="js/cam/ShopbotExporter.js"></script>
+    <script src="js/cam/GCodeExporter.js"></script>
 
     <!--views-->
     <script src="js/menus/MenuWrapperView.js"></script>
-- 
GitLab