From 23bfbf09dbb6f047a43cd17767d67a5417ae9cc2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 30 Oct 2017 14:21:23 -0400 Subject: [PATCH] add screenshot support for grid-print --- js/kiri.js | 23 ++++++++++++++++++----- js/moto-space.js | 9 ++++++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/js/kiri.js b/js/kiri.js index 2d9066d9..a9a7b1d1 100644 --- a/js/kiri.js +++ b/js/kiri.js @@ -411,6 +411,7 @@ self.kiri.license = exports.LICENSE; STARTMODE = SETUP.sm && SETUP.sm.length === 1 ? SETUP.sm[0] : null, MODE = MODES.FDM, onEvent = {}, + screenShot = null, currentPrint = null, selectedMeshes = [], localFilterKey ='kiri-gcode-filters', @@ -804,8 +805,6 @@ self.kiri.license = exports.LICENSE; } function preparePrint(callback) { - setViewMode(VIEWS.PREVIEW); - // kick off slicing it hasn't been done already for (var i=0; i < WIDGETS.length; i++) { if (!WIDGETS[i].slices || WIDGETS[i].isModified()) { @@ -814,6 +813,8 @@ self.kiri.license = exports.LICENSE; } } + setViewMode(VIEWS.PREVIEW); + clearPrint(); saveSettings(); @@ -916,8 +917,8 @@ self.kiri.license = exports.LICENSE; KIRI.serial.setGCode(gcode, currentPrint.bounds); } - var pre = MODE === MODES.CAM ? "cnc-" : "print-", - filename = pre+(new Date().getTime().toString(36)), + var pre = MODE === MODES.CAM ? "cnc" : "print", + filename = pre,// + (new Date().getTime().toString(36)), fileext = settings.device.gcodeFExt || "gcode", octo_host, octo_apik, @@ -1025,13 +1026,20 @@ self.kiri.license = exports.LICENSE; setProgress(Math.ceil(evt.loaded/evt.total), "sending"); }); filename = $('print-filename').value; + if (screenShot) { + var post = new XMLHttpRequest(); + post.open("POST", host + "/api/image?filename=" + filename); + post.setRequestHeader("Content-Type", "text/plain"); + post.send(screenShot); + } xhtr.open("POST", host + "/api/print?" + "filename=" + filename + "&target=" + target + "&key=" + apik + "&time=" + Math.round(currentPrint.time) + - "&length=" + Math.round(currentPrint.distance) + "&length=" + Math.round(currentPrint.distance) + + "&image=" + filename ); xhtr.setRequestHeader("Content-Type", "text/plain"); xhtr.send(gcode); @@ -1127,6 +1135,11 @@ self.kiri.license = exports.LICENSE; * @param {Function} callback */ function prepareSlices(callback) { + if (viewMode == VIEWS.ARRANGE) { + screenShot = SPACE.screenshot(); + screenShot = screenShot.substring(screenShot.indexOf(",")+1); + } + setViewMode(VIEWS.SLICE); var selectSave = selectedMeshes.slice(); diff --git a/js/moto-space.js b/js/moto-space.js index f9c250e1..20343be8 100644 --- a/js/moto-space.js +++ b/js/moto-space.js @@ -519,6 +519,10 @@ var gs_moto_space = exports; return WC; }, + screenshot: function(format) { + return renderer.domElement.toDataURL(format || "image/png"); + }, + init: function(domelement, slider) { container = domelement; @@ -528,7 +532,10 @@ var gs_moto_space = exports; domelement.style.width = width(); domelement.style.height = height(); - renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer = new THREE.WebGLRenderer({ + antialias: true, + preserveDrawingBuffer: true + }); camera = perspective ? new THREE.PerspectiveCamera(perspective, aspect(), 1, 100000) : new THREE.OrthographicCamera(-100 * aspect(), 100 * aspect(), 100, -100, 0.1, 100000);