From eb2cf80afa993d3124ae320f2983134151072ee1 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 1 Mar 2020 19:00:36 -0500 Subject: [PATCH] add origin visualization --- js/kiri.js | 27 ++++++++++++++++--- js/license.js | 2 +- js/moto-space.js | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +-- readme.md | 6 ++--- 5 files changed, 100 insertions(+), 9 deletions(-) diff --git a/js/kiri.js b/js/kiri.js index d9343eae..09dce845 100644 --- a/js/kiri.js +++ b/js/kiri.js @@ -463,6 +463,7 @@ self.kiri.license = exports.LICENSE; view: null, zoomSpeed: 1.0, reverseZoom: true, + showOrigin: false, freeLayout: true, autoLayout: true }, @@ -2066,6 +2067,21 @@ self.kiri.license = exports.LICENSE; restoreWorkspace(null, true); } + function updateOrigin() { + if (!settings.controller.showOrigin) { + SPACE.platform.setOrigin(); + SPACE.update(); + return; + } + if (settings.process.outputOriginCenter) { + SPACE.platform.setOrigin(0,0,0); + } else { + let dev = settings.device; + SPACE.platform.setOrigin(-dev.bedWidth/2,dev.bedDepth/2,0); + } + SPACE.update(); + } + function updatePlatformSize() { var dev = settings.device, width, depth, @@ -2078,6 +2094,7 @@ self.kiri.license = exports.LICENSE; height ); SPACE.platform.setHidden(width > 500 || depth > 500); + updateOrigin(); } function restoreWorkspace(ondone, skipwidgets) { @@ -2654,6 +2671,7 @@ self.kiri.license = exports.LICENSE; ]), layout: UC.newGroup('options'), + showOrigin: UC.newBoolean("show origin", booleanSave, {title:"show device or process origin"}), autoLayout: UC.newBoolean("auto layout", booleanSave, {title:"automatically layout platform\nwhen new items added\nor when arrange clicked\nmore than once"}), freeLayout: UC.newBoolean("free layout", booleanSave, {title:"permit dragable layout"}), reverseZoom: UC.newBoolean("invert zoom", booleanSave, {title:"invert mouse wheel\nscroll zoom"}), @@ -2838,10 +2856,12 @@ self.kiri.license = exports.LICENSE; } function booleanSave() { + settings.controller.showOrigin = UI.showOrigin.checked; settings.controller.autoLayout = UI.autoLayout.checked; settings.controller.freeLayout = UI.freeLayout.checked; settings.controller.reverseZoom = UI.reverseZoom.checked; SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed); + updateOrigin(); saveSettings(); } @@ -3334,15 +3354,15 @@ self.kiri.license = exports.LICENSE; UI.setDeviceWidth.value = dev.bedWidth; UI.setDeviceDepth.value = dev.bedDepth; UI.setDeviceHeight.value = dev.maxHeight; - UI.setDeviceExtrusion.checked = dev.extrudeAbs; - UI.setDeviceOrigin.checked = proc.outputOriginCenter; UI.setDeviceRound.checked = dev.bedRound; + UI.setDeviceOrigin.checked = proc.outputOriginCenter; // FDM UI.setDeviceFan.value = dev.gcodeFan; UI.setDeviceTrack.value = dev.gcodeTrack; UI.setDeviceLayer.value = dev.gcodeLayer.join('\n'); UI.setDeviceFilament.value = dev.filamentSize; UI.setDeviceNozzle.value = dev.nozzleSize; + UI.setDeviceExtrusion.checked = dev.extrudeAbs; // CAM UI.setDeviceMaxSpindle.value = dev.spindleMax; UI.setDeviceSpindle.value = dev.gcodeSpindle.join('\n'); @@ -3389,7 +3409,7 @@ self.kiri.license = exports.LICENSE; UI.finishingSpindle, UI.drillSpindle ].forEach(function(e) { - e.parentNode.style.display = dev.spindleMax ? 'block' : 'none'; + e.parentNode.style.display = dev.spindleMax >= 0 ? 'none' : 'block'; }); UI.deviceSave.disabled = @@ -3846,6 +3866,7 @@ self.kiri.license = exports.LICENSE; SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed); SPACE.platform.setZOff(0.2); + UI.showOrigin.checked = settings.controller.showOrigin; UI.freeLayout.checked = settings.controller.freeLayout; UI.autoLayout.checked = settings.controller.autoLayout; diff --git a/js/license.js b/js/license.js index 8e019c09..99f77928 100644 --- a/js/license.js +++ b/js/license.js @@ -1,7 +1,7 @@ var exports = { COPYRIGHT:"Copyright (C) 2014-2019 Stewart Allen - All Rights Reserved", LICENSE:"See the license.md file included with the source distribution", - VERSION:"1.6.4" + VERSION:"1.6.5" }; if (!module) var module = {}; module.exports = exports; diff --git a/js/moto-space.js b/js/moto-space.js index df75b6ea..420c123c 100644 --- a/js/moto-space.js +++ b/js/moto-space.js @@ -39,6 +39,7 @@ let gs_moto_space = exports; mouseUpSelect, mouseHover, mouseDrag, + gridOrigin, gridUnitMinor, gridUnitMajor, gridView, @@ -229,6 +230,74 @@ let gs_moto_space = exports; Space.scene.add(gridView); } + function setOrigin(x, y, z) { + if (gridOrigin) { + Space.scene.remove(gridOrigin); + } + if (x === undefined) { + gridOrigin = null; + return; + } + let cmat = new THREE.MeshPhongMaterial({ + color: 0xcceeff, + specular: 0xcceeff, + shininess: 5, + transparent: true, + opacity: 0.5, + side: THREE.DoubleSide + }); + let rmat = new THREE.MeshPhongMaterial({ + color: 0x88aadd, + transparent: true, + opacity: 0.5, + side: THREE.DoubleSide + }); + let PIP = Math.PI/2; + let pi1, pi2, pi3, pi4; + gridOrigin = new THREE.Group(); + gridOrigin.add(pi1 = new THREE.Mesh( + new THREE.CircleGeometry(4.6, 50, PIP*0, PIP*1), + cmat + )); + pi1.position.x = 0.25; + pi1.position.y = 0.25; + gridOrigin.add(pi2 = new THREE.Mesh( + new THREE.CircleGeometry(4.6, 50, PIP*1, PIP*1), + cmat + )); + pi2.position.x = -0.25; + pi2.position.y = 0.25; + gridOrigin.add(pi3 = new THREE.Mesh( + new THREE.CircleGeometry(4.6, 50, PIP*2, PIP*1), + cmat + )); + pi3.position.x = -0.25; + pi3.position.y = -0.25; + gridOrigin.add(pi4 = new THREE.Mesh( + new THREE.CircleGeometry(4.6, 50, PIP*3, PIP*1), + cmat + )); + pi4.position.x = 0.25; + pi4.position.y = -0.25; + gridOrigin.add(new THREE.Mesh( + new THREE.RingGeometry(5, 5.5, 50), + rmat + )); + gridOrigin.add(new THREE.Mesh( + new THREE.PlaneGeometry(0.5, 10), + rmat + )); + gridOrigin.add(new THREE.Mesh( + new THREE.PlaneGeometry(10, 0.5), + rmat + )); + gridOrigin.rotation.x = -PI2; + gridOrigin.position.x = x; + gridOrigin.position.y = z; + gridOrigin.position.z = y; + Space.scene.add(gridOrigin); + } + function refresh() { refreshRequested = false; viewControl.update(); @@ -477,6 +546,7 @@ let gs_moto_space = exports; tweenTo: tweenPlatform, setSize: setPlatformSizeUpdateGrid, setColor: setPlatformColor, + setOrigin: setOrigin, setGrid: setGrid, add: function(o) { WORLD.add(o) }, diff --git a/package.json b/package.json index c01e8c70..0468c987 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ ], "scripts": { "start": "node js/web-server debug", - "start-web": "node js/web-server nolocal", - "update": "git pull && git submodule update --recursive --remote && npm update" + "start-secure": "node js/web-server nolocal", + "update": "git pull && npm i" }, "dependencies": { "buffer-crc32": "^0.2.13", diff --git a/readme.md b/readme.md index da133470..cddbf26e 100644 --- a/readme.md +++ b/readme.md @@ -19,7 +19,7 @@ to start a local instance of the apps. then open ### Other Start Options ``` -npm run-script start-web +npm run-script start-secure ``` serves code as obfuscated, compressed bundles. this is the mode used to run on a public web site, so you can't use "localhost" to test. to accommodate this, alias "debug" to 127.0.0.1 @@ -28,6 +28,6 @@ then access the apps from http://debug:8080/ ## More Information * [Facebook Group](https://www.facebook.com/groups/660020084206828/) -* [Wiki](https://github.com/GridSpace/KiriMoto/wiki) -* [Twitter](https://twitter.com/grid_space_3d) * [YouTube Tutorials](https://www.youtube.com/c/gridspace) +* [Twitter](https://twitter.com/grid_space_3d) +* [Wiki](https://github.com/GridSpace/grid-apps/wiki)