From cdc14ef7a6ca705e492d254ecb2e118c6293392f Mon Sep 17 00:00:00 2001 From: openbuilds-engineer Date: Fri, 14 Sep 2018 19:35:54 +0200 Subject: [PATCH] v1.0.92 - fix Parser to handle MPOS and WPOS to fix #12 --- app/js/viewer.js | 12 +++---- index.js | 83 +++++++++++++++++++++++++++++++++++------------- package.json | 2 +- 3 files changed, 68 insertions(+), 29 deletions(-) diff --git a/app/js/viewer.js b/app/js/viewer.js index 7f85674..c383324 100644 --- a/app/js/viewer.js +++ b/app/js/viewer.js @@ -450,30 +450,30 @@ function viewExtents(objecttosee) { // console.log("fov: ", fov); controls.object.fov = fov; var L = dist; - var camera = controls.object; + var camera2 = controls.object; var vector = controls.target.clone(); - var l = (new THREE.Vector3()).subVectors(camera.position, vector).length(); + var l = (new THREE.Vector3()).subVectors(camera2.position, vector).length(); var up = camera.up.clone(); var quaternion = new THREE.Quaternion(); // Zoom correction - camera.translateZ(L - l); + camera2.translateZ(L - l); // console.log("up:", up); up.y = 1; up.x = 0; up.z = 0; quaternion.setFromAxisAngle(up, 0); - //camera.position.applyQuaternion(quaternion); + camera2.position.applyQuaternion(quaternion); up.y = 0; up.x = 1; up.z = 0; quaternion.setFromAxisAngle(up, 0); - camera.position.applyQuaternion(quaternion); + camera2.position.applyQuaternion(quaternion); up.y = 0; up.x = 0; up.z = 1; quaternion.setFromAxisAngle(up, 0); - camera.lookAt(vector); + camera2.lookAt(vector); controls.object.updateProjectionMatrix(); } } diff --git a/index.js b/index.js index 7de9e01..d0b3ee3 100644 --- a/index.js +++ b/index.js @@ -732,7 +732,7 @@ io.on("connection", function(socket) { status.machine.firmware.date = ""; console.log("GRBL detected"); socket.emit('grbl') - addQRealtime("$10=2\n"); // force Status Report to WPOS + // addQRealtime("$10=2\n"); // force Status Report to WPOS if (jogWindow && !jogWindow.isFocused()) { appIcon.displayBalloon({ icon: nativeImage.createFromPath(iconPath), @@ -1567,6 +1567,28 @@ function parseFeedback(data) { status.comms.connectionStatus = 5; } if (status.machine.firmware.type == "grbl") { + // Extract work offset (for Grbl > 1.1 only!) + var startWCO = data.search(/wco:/i) + 4; + var wco; + if (startWCO > 4) { + wco = data.replace(">", "").substr(startWCO).split(/,|\|/, 4); + } + if (Array.isArray(wco)) { + xOffset = parseFloat(wco[0]).toFixed(config.posDecimals); + yOffset = parseFloat(wco[1]).toFixed(config.posDecimals); + zOffset = parseFloat(wco[2]).toFixed(config.posDecimals); + if (has4thAxis) { + aOffset = parseFloat(wco[3]).toFixed(config.posDecimals); + status.machine.position.offset.x = xOffset; + status.machine.position.offset.y = yOffset; + status.machine.position.offset.z = zOffset; + status.machine.position.offset.a = aOffset; + } else { + status.machine.position.offset.x = xOffset; + status.machine.position.offset.y = yOffset; + status.machine.position.offset.z = zOffset; + } + } // Extract wPos (for Grbl > 1.1 only!) var startWPos = data.search(/wpos:/i) + 5; var wPos; @@ -1574,7 +1596,15 @@ function parseFeedback(data) { var wPosLen = data.substr(startWPos).search(/>|\|/); wPos = data.substr(startWPos, wPosLen).split(/,/); } + var startMPos = data.search(/mpos:/i) + 5; + var mPos; + if (startMPos > 5) { + var mPosLen = data.substr(startMPos).search(/>|\|/); + mPos = data.substr(startMPos, mPosLen).split(/,/); + } + // If we got a WPOS if (Array.isArray(wPos)) { + // console.log('wpos') if (xPos !== parseFloat(wPos[0]).toFixed(config.posDecimals)) { xPos = parseFloat(wPos[0]).toFixed(config.posDecimals); } @@ -1600,29 +1630,37 @@ function parseFeedback(data) { status.machine.position.work.y = yPos status.machine.position.work.z = zPos } - } // END IS WPOS - // Extract work offset (for Grbl > 1.1 only!) - var startWCO = data.search(/wco:/i) + 4; - var wco; - if (startWCO > 4) { - wco = data.replace(">", "").substr(startWCO).split(/,|\|/, 4); - } - if (Array.isArray(wco)) { - xOffset = parseFloat(wco[0]).toFixed(config.posDecimals); - yOffset = parseFloat(wco[1]).toFixed(config.posDecimals); - zOffset = parseFloat(wco[2]).toFixed(config.posDecimals); - if (has4thAxis) { - aOffset = parseFloat(wco[3]).toFixed(config.posDecimals); - status.machine.position.offset.x = xOffset; - status.machine.position.offset.y = yOffset; - status.machine.position.offset.z = zOffset; - status.machine.position.offset.a = aOffset; - } else { - status.machine.position.offset.x = xOffset; - status.machine.position.offset.y = yOffset; - status.machine.position.offset.z = zOffset; + // end is WPOS + } else if (Array.isArray(mPos)) { + // console.log('mpos', mPos) + if (xPos !== parseFloat(mPos[0]).toFixed(config.posDecimals)) { + xPos = parseFloat(mPos[0]).toFixed(config.posDecimals); } + if (yPos !== parseFloat(mPos[1]).toFixed(config.posDecimals)) { + yPos = parseFloat(mPos[1]).toFixed(config.posDecimals); + } + if (zPos !== parseFloat(mPos[2]).toFixed(config.posDecimals)) { + zPos = parseFloat(mPos[2]).toFixed(config.posDecimals); + } + if (mPos.length > 3) { + if (aPos !== parseFloat(mPos[3]).toFixed(config.posDecimals)) { + aPos = parseFloat(mPos[3]).toFixed(config.posDecimals); + has4thAxis = true; + } + } + if (has4thAxis) { + status.machine.position.work.x = parseFloat(xPos - status.machine.position.offset.x).toFixed(config.posDecimals) + status.machine.position.work.y = parseFloat(yPos - status.machine.position.offset.y).toFixed(config.posDecimals) + status.machine.position.work.z = parseFloat(zPos - status.machine.position.offset.z).toFixed(config.posDecimals) + status.machine.position.work.a = parseFloat(aPos - status.machine.position.offset.a).toFixed(config.posDecimals) + } else { + status.machine.position.work.x = parseFloat(xPos - status.machine.position.offset.x).toFixed(config.posDecimals) + status.machine.position.work.y = parseFloat(yPos - status.machine.position.offset.y).toFixed(config.posDecimals) + status.machine.position.work.z = parseFloat(zPos - status.machine.position.offset.z).toFixed(config.posDecimals) + } + // end if MPOS } + } if (status.machine.firmware.type == "smoothie") { // Extract wPos (for Smoothieware only!) @@ -2037,6 +2075,7 @@ if (isElectron()) { function createJogWindow() { // Create the browser window. jogWindow = new BrowserWindow({ + // 1366 * 768 == minimum to cater for width: 850, height: 850, fullscreen: false, diff --git a/package.json b/package.json index b0076ac..a4a5328 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "OpenBuildsMachineDriver", - "version": "1.0.91", + "version": "1.0.92", "license": "AGPL-3.0", "description": "Machine Interface Driver for OpenBuilds", "author": "github.com/openbuilds ",