From 81ec0369731c6dbb36b0e8cda2856f8eaa5ec5a2 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 11 Jun 2015 10:28:21 +0200 Subject: [PATCH] improved network error handling can now reconnect when connecting failed --- settings/printer_settings.json | 14 +++--- settings/user_settings.json | 2 +- src/box.js | 79 ++++++++++++++++++++++++++++------ src/gcode.js | 6 +-- src/paths.js | 38 ++++++++-------- src/printer.js | 4 +- src/slicer.js | 33 ++++++++------ src/slicerworker.js | 9 ++-- src/utils.js | 71 +++--------------------------- webworker/worker.js | 3 +- webworker_test.html | 2 +- 11 files changed, 136 insertions(+), 125 deletions(-) diff --git a/settings/printer_settings.json b/settings/printer_settings.json index 0f46a2d..a2761c1 100644 --- a/settings/printer_settings.json +++ b/settings/printer_settings.json @@ -4,14 +4,14 @@ "printer.dimensions.x": 200, "printer.dimensions.y": 200, "printer.dimensions.z": 200, - "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)", + "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", "printer.filamentThickness": 2.85, "printer.heatedbed": false, "printer.heatup.bed.temperature": 70, "printer.heatup.enabled": true, "printer.heatup.temperature": 180, "printer.nozzleDiameter": 0.4, - "printer.startcode": ";Generated with Doodle3D (default)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)", + "printer.startcode": ";Generated with Doodle3D (default)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", "printer.type": "ultimaker" }, "ultimaker2": { @@ -19,14 +19,14 @@ "printer.dimensions.x": 223, "printer.dimensions.y": 223, "printer.dimensions.z": 205, - "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)", + "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", "printer.filamentThickness": 2.85, "printer.heatedbed": true, "printer.heatup.bed.temperature": 70, "printer.heatup.enabled": true, "printer.heatup.temperature": 180, "printer.nozzleDiameter": 0.4, - "printer.startcode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)", + "printer.startcode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", "printer.type": "ultimaker2" }, "ultimaker2go": { @@ -34,14 +34,14 @@ "printer.dimensions.x": 120, "printer.dimensions.y": 120, "printer.dimensions.z": 115, - "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)", + "printer.endcode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", "printer.filamentThickness": 2.85, "printer.heatedbed": false, "printer.heatup.bed.temperature": 70, "printer.heatup.enabled": true, - "printer.heatup.temperature": 180, + "printer.heatup.temperature": 20, "printer.nozzleDiameter": 0.4, - "printer.startcode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)", + "printer.startcode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", "printer.type": "ultimaker2g0" } } \ No newline at end of file diff --git a/settings/user_settings.json b/settings/user_settings.json index 30c2156..9715865 100644 --- a/settings/user_settings.json +++ b/settings/user_settings.json @@ -15,7 +15,7 @@ "printer.temperature": 210.0, "printer.topThickness": 0.8, "printer.travelSpeed": 200.0, - "printer.support.accaptanceSize": 1.5, + "printer.support.accaptanceMargin": 1.5, "printer.support.distanceY": 0.4, "printer.support.use": true, "printer.support.gritSize": 6.0, diff --git a/src/box.js b/src/box.js index 0f407de..e53919f 100644 --- a/src/box.js +++ b/src/box.js @@ -16,6 +16,8 @@ D3D.Box = function (localIp) { "use strict"; var scope = this; + this.alive = false; + this.batchSize = 512; this.maxBufferedLines = 4096; @@ -30,16 +32,46 @@ D3D.Box = function (localIp) { this.loaded = false; - this.getConfigAll(function (data) { - scope.updateConfig(data); + this.init(); +}; +D3D.Box.prototype.init = function () { + "use strict"; + var scope = this; - scope.update(); + this.getNetworkAlive(function (error, data) { + if (error) { + scope.alive = false; + console.warn(error); + + setTimeout(function () { + scope.init(); + }, 1000); - scope.loaded = true; - if (scope.onload !== undefined) { - scope.onload(); + return; } + + scope.alive = true; + + scope.getConfigAll(function (error, data) { + if (error) { + console.warn(error); + scope.init(); + } + + scope.updateConfig(data); + + if (!scope.loaded) { + scope.loaded = true; + if (scope.onload !== undefined) { + scope.onload(); + } + } + + scope.updateLoop(); + }); }); + + return this; }; D3D.Box.prototype.updateConfig = function (config) { "use strict"; @@ -50,7 +82,7 @@ D3D.Box.prototype.updateConfig = function (config) { return this; }; -D3D.Box.prototype.update = function () { +D3D.Box.prototype.updateLoop = function () { "use strict"; var scope = this; //TODO @@ -73,14 +105,21 @@ D3D.Box.prototype.updateState = function () { "use strict"; var scope = this; - this.getInfoStatus(function (data) { + this.getInfoStatus(function (error, data) { + if (error) { + console.warn(error); + scope.init(); + + return; + } + scope.status = data; if (scope.onupdate !== undefined) { scope.onupdate(data); } - scope.update(); + scope.updateLoop(); }); }; D3D.Box.prototype.print = function (gcode) { @@ -110,7 +149,15 @@ D3D.Box.prototype.printBatch = function () { "first": ((this.currentBatch === 0) ? true : false), "gcode": gcode.join("\n"), "last": ((this.printBatches.length === 0) ? true : false) //only for debug purposes - }, function (data) { + }, function (error, data) { + if (error) { + scope.printBatches.unshift(gcode); + console.warn(error); + scope.init(); + + return; + } + console.log("batch sent: " + scope.currentBatch, data); if (scope.printBatches.length > 0) { @@ -126,13 +173,21 @@ D3D.Box.prototype.printBatch = function () { }; D3D.Box.prototype.stopPrint = function (printer) { "use strict"; + var scope = this; this.printBatches = []; this.currentBatch = 0; this.setPrinterStop({ - "gcode": printer.getEndCode().join("\n") - }, function (data) { + "gcode": printer.getEndCode() + }, function (error, data) { + if (error) { + console.warn(error); + scope.init(); + + return; + } + console.log("Printer stop command sent"); }); diff --git a/src/gcode.js b/src/gcode.js index e60a06e..3e0fc6e 100644 --- a/src/gcode.js +++ b/src/gcode.js @@ -12,7 +12,7 @@ D3D.GCode = function () { "use strict"; - this.gcode = []; + this.gcode = ""; this.current = {}; this.extruder = 0.0; @@ -38,7 +38,7 @@ D3D.GCode.prototype.addGCode = function (command) { str = str.join(" "); if (str.length > 0) { - this.gcode.push(str); + this.gcode += str + "\n"; } }; D3D.GCode.prototype.setSettings = function (printer) { @@ -180,5 +180,5 @@ D3D.GCode.prototype.retract = function () { D3D.GCode.prototype.getGCode = function () { "use strict"; - return this.settings.getStartCode().concat(this.gcode, this.settings.getEndCode()); + return this.settings.getStartCode() + this.gcode + this.settings.getEndCode(); }; \ No newline at end of file diff --git a/src/paths.js b/src/paths.js index 84cc4a1..8ed5fa0 100644 --- a/src/paths.js +++ b/src/paths.js @@ -8,7 +8,7 @@ ******************************************************/ D3D.Paths = function (paths, closed) { - "use strict"; + 'use strict'; Array.call(this); @@ -18,7 +18,7 @@ D3D.Paths = function (paths, closed) { }; D3D.Paths.prototype = Object.create(Array.prototype); D3D.Paths.prototype.setPaths = function (paths) { - "use strict"; + 'use strict'; for (var i = 0; i < paths.length; i ++) { var path = paths[i]; @@ -30,7 +30,7 @@ D3D.Paths.prototype.setPaths = function (paths) { return this; }; D3D.Paths.prototype.clip = function (path, type) { - "use strict"; + 'use strict'; var solution = new ClipperLib.Paths(); @@ -42,27 +42,27 @@ D3D.Paths.prototype.clip = function (path, type) { return new D3D.Paths(solution, this.closed); }; D3D.Paths.prototype.union = function (path) { - "use strict"; + 'use strict'; return this.clip(path, ClipperLib.ClipType.ctUnion); }; D3D.Paths.prototype.difference = function (path) { - "use strict"; + 'use strict'; return this.clip(path, ClipperLib.ClipType.ctDifference); }; D3D.Paths.prototype.intersect = function (path) { - "use strict"; + 'use strict'; return this.clip(path, ClipperLib.ClipType.ctIntersection); }; D3D.Paths.prototype.xor = function () { - "use strict"; + 'use strict'; return this.clip(path, ClipperLib.ClipType.ctXor); }; D3D.Paths.prototype.offset = function (offset) { - "use strict"; + 'use strict'; var solution = new ClipperLib.Paths(); var co = new ClipperLib.ClipperOffset(1, 1); @@ -72,28 +72,28 @@ D3D.Paths.prototype.offset = function (offset) { return new D3D.Paths(solution); }; D3D.Paths.prototype.scaleUp = function (factor) { - "use strict"; + 'use strict'; var path = ClipperLib.JS.ScaleUpPaths(this, factor); return this; }; D3D.Paths.prototype.scaleDown = function (factor) { - "use strict"; + 'use strict'; var path = ClipperLib.JS.ScaleDownPaths(this, factor); return this; }; D3D.Paths.prototype.lastPoint = function () { - "use strict"; + 'use strict'; var lastPath = this[this.length - 1]; var lastPoint = this.closed ? lastPath[0] : lastPath[lastPath.length - 1]; return new THREE.Vector2(lastPoint.X, lastPoint.Y); }; D3D.Paths.prototype.optimizePath = function (start) { - "use strict"; + 'use strict'; var optimizedPaths = new D3D.Paths([], this.closed); var donePaths = []; @@ -161,7 +161,7 @@ D3D.Paths.prototype.optimizePath = function (start) { return optimizedPaths; }; D3D.Paths.prototype.areas = function () { - "use strict"; + 'use strict'; var areas = []; @@ -176,7 +176,7 @@ D3D.Paths.prototype.areas = function () { }; D3D.Paths.prototype.tresholdArea = function (minArea) { //code not tested yet - "use strict"; + 'use strict'; for (var i = 0; i < this.length; i ++) { var shape = this[i]; @@ -192,7 +192,7 @@ D3D.Paths.prototype.tresholdArea = function (minArea) { return areas; }; D3D.Paths.prototype.join = function (path) { - "use strict"; + 'use strict'; for (var i = 0; i < path.length; i ++) { this.push(path[i]); @@ -201,17 +201,17 @@ D3D.Paths.prototype.join = function (path) { return this; }; D3D.Paths.prototype.clone = function () { - "use strict"; + 'use strict'; return new D3D.Paths(ClipperLib.JS.Clone(this), this.closed); }; D3D.Paths.prototype.bounds = function () { - "use strict"; + 'use strict'; return ClipperLib.Clipper.GetBounds(this); }; D3D.Paths.prototype.boundSize = function () { - "use strict"; + 'use strict'; var bounds = this.bounds(); @@ -221,7 +221,7 @@ D3D.Paths.prototype.boundSize = function () { return width * height; }; D3D.Paths.prototype.draw = function (context, color) { - "use strict"; + 'use strict'; context.strokeStyle = color; for (var i = 0; i < this.length; i ++) { diff --git a/src/printer.js b/src/printer.js index 818929a..efad2e6 100644 --- a/src/printer.js +++ b/src/printer.js @@ -27,7 +27,7 @@ D3D.Printer.prototype.getStartCode = function () { var gcode = this.config["printer.startcode"]; gcode = this.subsituteVariables(gcode); - return gcode.split("\n"); + return gcode; }; D3D.Printer.prototype.getEndCode = function () { "use strict"; @@ -36,7 +36,7 @@ D3D.Printer.prototype.getEndCode = function () { gcode = this.subsituteVariables(gcode); - return gcode.split("\n"); + return gcode; }; D3D.Printer.prototype.subsituteVariables = function (gcode) { "use strict"; diff --git a/src/slicer.js b/src/slicer.js index a2bd59a..41a45a3 100644 --- a/src/slicer.js +++ b/src/slicer.js @@ -24,24 +24,26 @@ D3D.Slicer.prototype.setMesh = function (geometry, matrix) { geometry = new THREE.Geometry().fromBufferGeometry(geometry); } - //apply mesh matrix on geometry; - geometry.applyMatrix(matrix); - geometry.mergeVertices(); - geometry.computeFaceNormals(); - geometry.computeBoundingBox(); - /* + geometry.computeFaceNormals(); for (var i = 0; i < geometry.faces.length; i ++) { var face = geometry.faces[i]; var normal = face.normal; if (normal.x === 0 && normal.y === 0 && normal.z === 0) { geometry.faces.splice(i, 1); + console.log("Tets"); i --; } } */ + //apply mesh matrix on geometry; + geometry.applyMatrix(matrix); + geometry.mergeVertices(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + this.geometry = geometry; //get unique lines from geometry; @@ -189,14 +191,17 @@ D3D.Slicer.prototype.slice = function (layerHeight, height) { var a = new THREE.Vector2(intersection.x, intersection.y); var b = intersections[index]; - if (a.distanceTo(b) === 0) { + var faceNormal = faceNormals[Math.floor(j/2)]; + + console.log(); + + if (a.distanceTo(b) === 0 || faceNormal.equals(new THREE.Vector2(0, 0))) { connects = connects.concat(this.lines[index].connects); faceNormals = faceNormals.concat(this.lines[index].normals); index = -1; } else { var normal = a.sub(b).normal().normalize(); - var faceNormal = faceNormals[Math.floor(j/2)]; if (normal.dot(faceNormal) >= 0) { //if (true) { @@ -290,7 +295,7 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) { var topThickness = printer.config["printer.topThickness"]; var useSupport = printer.config["printer.support.use"]; var supportGritSize = printer.config["printer.support.gritSize"] * scale; - var supportAccaptanceSize = printer.config["printer.support.accaptanceSize"] * scale; + var supportAccaptanceMargin = printer.config["printer.support.accaptanceMargin"] * scale; var supportMargin = printer.config["printer.support.margin"] * scale; var plateSize = printer.config["printer.support.plateSize"] * scale; var supportDistanceY = printer.config["printer.support.distanceY"]; @@ -441,12 +446,16 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) { var slicePart = slice[i]; var outerLayer = slicePart.outerLayer; - var overlap = supportSkin.offset(supportAccaptanceSize).intersect(outerLayer); + var overlap = supportSkin.offset(supportAccaptanceMargin).intersect(outerLayer); var overhang = outerLayer.difference(overlap); if (overlap.length === 0 || overhang.length > 0) { - var supportArea = outerLayer.difference(supportSkin.intersect(outerLayer)); - supportAreas = supportAreas.union(supportArea); + //var supportArea = outerLayer.difference(supportSkin.intersect(outerLayer)); + //supportAreas = supportAreas.union(supportArea); + + //supportAreas = supportAreas.union(overhang); + + supportAreas = supportAreas.union(overhang.offset(supportAccaptanceMargin).intersect(outerLayer)); } } } diff --git a/src/slicerworker.js b/src/slicerworker.js index c6980c1..e5a2388 100644 --- a/src/slicerworker.js +++ b/src/slicerworker.js @@ -17,9 +17,12 @@ D3D.SlicerWorker = function () { case 'GCODE': if (scope.onfinish !== undefined) { - var gcode = event.data['gcode']; - - scope.onfinish(gcode); + var reader = new FileReader(); + reader.addEventListener("loadend", function() { + var gcode = reader.result.split("\n"); + scope.onfinish(gcode); + }); + reader.readAsBinaryString(event.data['gcode']); } break; } diff --git a/src/utils.js b/src/utils.js index d35f75b..f6d4a55 100644 --- a/src/utils.js +++ b/src/utils.js @@ -14,37 +14,6 @@ var D3D = { function sendAPI (url, data, callback) { "use strict"; - /* - var form = new FormData(); - - for (var i in data) { - form.append(i, JSON.stringify(data[i])); - } - - var request = new XMLHttpRequest(); - request.open('POST', url, true); - request.send(data); - request.onreadystatechange = function () { - if (request.readyState === 4 && request.status === 200) { - var response = JSON.parse(request.responseText); - - if (response.status === "success") { - if (callback !== undefined) { - callback(response.data); - } - } - else { - console.warn(response.msg); - } - } - else { - console.log(request); - console.warn("Failed connecting to " + url); - //sendAPI(url, data, callback); - } - }; - */ - $.ajax({ url: url, type: "POST", @@ -54,44 +23,20 @@ function sendAPI (url, data, callback) { success: function (response) { if (response.status === "success") { if (callback !== undefined) { - callback(response.data); + callback(null, response.data); } } else { - console.warn(response.msg); + callback(response.msg); } } }).fail(function () { - console.warn("Failed connecting to " + url); - sendAPI(url, data, callback); + callback("Failed connecting to " + url); }); } function getAPI (url, callback) { "use strict"; - /* - var request = new XMLHttpRequest(); - request.open('GET', url, true); - request.send(); - request.onreadystatechange = function () { - if (request.readyState === 4 && request.status === 200) { - var response = JSON.parse(request.responseText); - - if (response.status === "success") { - if (callback !== undefined) { - callback(response.data); - } - } - else { - console.warn(response.msg); - } - } - else { - console.warn("Failed connecting to " + url); - sendAPI(url, callback); - } - };*/ - $.ajax({ url: url, @@ -100,18 +45,16 @@ function getAPI (url, callback) { success: function (response) { if (response.status === "success") { if (callback !== undefined) { - callback(response.data); + callback(null, response.data); } } else { - console.warn(response.msg); + callback(response.msg); } } }).fail(function () { - console.warn("Failed connecting to " + url); - getAPI(url, callback); - }); - + callback("Failed connecting to " + url); + }); } function loadSettings (url, callback) { diff --git a/webworker/worker.js b/webworker/worker.js index d603fff..798d40d 100644 --- a/webworker/worker.js +++ b/webworker/worker.js @@ -42,10 +42,11 @@ self.addEventListener("message", function (event) { case "SLICE": var gcode = slicer.getGCode(printer); + var blob = new Blob([gcode], {type: 'text/html'}); self.postMessage({ "cmd": "GCODE", - "gcode": gcode + "gcode": blob }); break; diff --git a/webworker_test.html b/webworker_test.html index f148bdd..41c65d1 100644 --- a/webworker_test.html +++ b/webworker_test.html @@ -92,7 +92,7 @@ function init () { }; var loader = new THREE.STLLoader(); - loader.load('models/robot.stl', function (geometry) { + loader.load('models/pokemon/pikachu.stl', function (geometry) { //var geometry = new THREE.TorusGeometry(20, 10, 30, 30).clone(); var material = new THREE.MeshPhongMaterial({color: 0x00ff00, wireframe: false});