diff --git a/src/kiri/init.js b/src/kiri/init.js index a002e0a1..cf0cc112 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -78,6 +78,11 @@ return false; } + function unitsSave() { + API.conf.update(); + platform.update_size(); + } + function booleanSave() { let control = settings().controller; let isDark = control.dark; @@ -1246,7 +1251,7 @@ freeLayout: UC.newBoolean(LANG.op_free_s, booleanSave, {title:LANG.op_free_l, modes:ALL}), reverseZoom: UC.newBoolean(LANG.op_invr_s, booleanSave, {title:LANG.op_invr_l, modes:ALL}), thinRender: UC.newBoolean(LANG.op_thin_s, booleanSave, {title:LANG.op_thin_l, modes:ALL}), - units: UC.newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, modes:CAM}, "units"), + units: UC.newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, modes:CAM, action:unitsSave}, "units"), prefadd: UC.checkpoint(), export: UC.newGroup(LANG.xp_menu, $('prefs-out'), {inline: true}), @@ -1674,20 +1679,7 @@ $('mode-cam').appendChild(mksvg(icons.cnc)); $('mode-laser').appendChild(mksvg(icons.laser)); - SPACE.platform.setSize( - settings().device.bedWidth, - settings().device.bedDepth, - settings().device.bedHeight - ); - - if (dark) { - SPACE.platform.setGrid(25, 5, 0x999999, 0x333333); - SPACE.platform.opacity(0.8); - DOC.body.classList.add('dark'); - } else { - SPACE.platform.setGrid(25, 5, 0x999999, 0xcccccc); - SPACE.platform.opacity(0.3); - } + API.platform.update_size(); SPACE.mouse.downSelect(function(int,event) { // lay flat with meta or ctrl clicking a selected face diff --git a/src/kiri/main.js b/src/kiri/main.js index adfd5065..edee5351 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -985,6 +985,19 @@ depth = parseInt(dev.bedDepth), height = parseFloat(dev.bedHeight) ); + let ctrl = settings.controller, + unitMM = ctrl.units === 'mm', + gridMajor = unitMM ? 25 : 25.4, + gridMinor = unitMM ? 5 : 25.4 / 4; + if (ctrl.dark) { + SPACE.platform.setGrid(gridMajor, gridMinor, 0x999999, 0x333333); + SPACE.platform.opacity(0.8); + DOC.body.classList.add('dark'); + } else { + SPACE.platform.setGrid(gridMajor, gridMinor, 0x999999, 0xcccccc); + SPACE.platform.opacity(0.3); + DOC.body.classList.remove('dark'); + } SPACE.platform.setGZOff(height/2 - 0.1); platform.update_origin(); SPACE.scene.freeze(frozen); diff --git a/src/kiri/print.js b/src/kiri/print.js index 7439aad8..f41bd89e 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -335,13 +335,15 @@ origin = settings.origin, mode = settings.mode, tools = [], - driver = KIRI.driver[mode]; + driver = KIRI.driver[mode], + mark = Date.now(); if (mode === 'FDM') { tools = settings.device.extruders || []; } driver.printRender(this, {tools, aslines:settings.controller.thinRender}); + if (KIRI.api.const.LOCAL) console.log({printRender: Date.now() - mark}); }; function pref(a,b) { diff --git a/src/kiri/widget.js b/src/kiri/widget.js index 6827a9df..0fbe6bba 100644 --- a/src/kiri/widget.js +++ b/src/kiri/widget.js @@ -713,7 +713,9 @@ * render all slice and processed data */ PRO.render = function() { + let mark = Date.now(); DRIVERS[this.settings.mode.toUpperCase()].sliceRender(this); + if (KIRI.api.const.LOCAL) console.log({sliceRender: Date.now() - mark}); }; PRO.hideSlices = function() { diff --git a/src/mode/cam/driver.js b/src/mode/cam/driver.js index 6d0411c1..b3086728 100644 --- a/src/mode/cam/driver.js +++ b/src/mode/cam/driver.js @@ -1272,8 +1272,8 @@ } lastTool = toolID; } - feedRate = feed; - plungeRate = plunge; + feedRate = feed * units; + plungeRate = plunge * units; } function emitDrills(polys) { @@ -1709,9 +1709,11 @@ cmdSpindle = gcodes.gcodeSpindle || [ "M3 S{speed}" ], cmdDwell = gcodes.gcodeDwell || [ "G4 P{time}" ], bounds = widget.getCamBounds(settings), - units = 1,//settings.controller.units === 'in' ? 25.4 : 1, - spro = settings.process, dev = settings.device, + spro = settings.process, + units = settings.controller.units === 'in' ? 25.4 : 1, + maxZd = spro.camFastFeedZ * units, + maxXYd = spro.camFastFeed * units, decimals = 4, pos = { x:null, y:null, z:null, f:null, t:null }, line, @@ -1732,10 +1734,10 @@ consts = { tool: 0, tool_name: "unknown", - top: (offset ? dev.bedDepth : dev.bedDepth/2) * units, - left: (offset ? 0 : -dev.bedWidth/2) * units, - right: (offset ? dev.bedWidth : dev.bedWidth/2) * units, - bottom: (offset ? 0 : -dev.bedDepth/2) * units, + top: (offset ? dev.bedDepth : dev.bedDepth/2), + left: (offset ? 0 : -dev.bedWidth/2), + right: (offset ? dev.bedWidth : dev.bedWidth/2), + bottom: (offset ? 0 : -dev.bedDepth/2), time_sec: 0, time_ms: 0, time: 0 @@ -1826,12 +1828,12 @@ moveTo({ tool: out.tool, point: { x: 0, y: 0, z: newpos.z }, - speed: spro.camFastFeedZ + speed: maxZd }); moveTo({ tool: out.tool, point: { x: newpos.x, y: newpos.y, z: newpos.z }, - speed: spro.camFastFeed + speed: maxXYd }); points--; return; @@ -1843,7 +1845,7 @@ dy = newpos.y - pos.y, dz = newpos.z - pos.z, dist = Math.sqrt(dx * dx + dy * dy + dz * dz), - feed = Math.min(speed || spro.camFastFeed, dz ? spro.camFastFeedZ : spro.camFastFeed); + feed = Math.min(speed || maxXYd, dz ? maxZd : maxXYd); // drop dup points (all deltas are 0) if (!(dx || dy || dz)) { @@ -1854,23 +1856,23 @@ pos.x = newpos.x; runbox.min.x = Math.min(runbox.min.x, pos.x); runbox.max.x = Math.max(runbox.max.x, pos.x); - nl.append(space).append("X").append(add0(pos.x * units)); + nl.append(space).append("X").append(add0(pos.x)); } if (newpos.y !== pos.y) { pos.y = newpos.y; runbox.min.y = Math.min(runbox.min.y, pos.y); runbox.max.y = Math.max(runbox.max.y, pos.y); - nl.append(space).append("Y").append(add0(pos.y * units)); + nl.append(space).append("Y").append(add0(pos.y)); } if (newpos.z !== pos.z) { pos.z = newpos.z; runbox.min.z = Math.min(runbox.min.z, pos.z); runbox.max.z = Math.max(runbox.max.z, pos.z); - nl.append(space).append("Z").append(add0(pos.z * units)); + nl.append(space).append("Z").append(add0(pos.z)); } if (feed && feed !== pos.f) { pos.f = feed; - nl.append(space).append("F").append(feed * units); + nl.append(space).append("F").append(feed); } // update time calculation diff --git a/src/moto/space.js b/src/moto/space.js index f6de9a90..198c9b6e 100644 --- a/src/moto/space.js +++ b/src/moto/space.js @@ -230,27 +230,32 @@ let x = platform.scale.x, y = isRound ? platform.scale.z : platform.scale.y, z = isRound ? platform.scale.y : platform.scale.z, - xr = ROUND(x / unitMajor) * unitMajor, - yr = ROUND(y / unitMajor) * unitMajor, - xo = isRound ? Math.floor(x/2) : Math.ceil(xr / 2), - yo = isRound ? Math.floor(y/2) : Math.ceil(yr / 2), + xr = Math.round(x / unitMinor) * unitMinor, + yr = Math.round(y / unitMinor) * unitMinor, + xo = isRound ? x/2 : xr/2, + yo = isRound ? y/2 : yr/2, + divs = Math.round(unitMajor / unitMinor), w = x / 2, h = y / 2, d = z / 2, zp = -d - platformZOff + gridZOff, majors = [], minors = unitMinor ? [] : null, i; - for (i = -xo; i <= xo; i++) { - if (i >= -w && i <= w) { - let oh = isRound ? Math.sqrt(1-(i/xo)*(i/xo)) * h : h; - if (i % unitMajor === 0) majors.append({x:i, y:-oh, z:zp}).append({x:i, y:oh, z:zp}); - else if (minors && i % unitMinor === 0) minors.append({x:i, y:-oh, z:zp}).append({x:i, y:oh, z:zp}); + for (i = -xo; i <= xo; i += unitMinor) { + let oh = isRound ? Math.sqrt(1-(i/xo)*(i/xo)) * h : h, + dM = Math.abs(i % unitMajor); + if (dM < 0.1 || Math.abs(unitMajor - dM) < 0.1) { + majors.append({x:i, y:-oh, z:zp}).append({x:i, y:oh, z:zp}); + } else { + minors.append({x:i, y:-oh, z:zp}).append({x:i, y:oh, z:zp}); } } - for (i = -yo; i <= yo; i++) { - if (i >= -h && i <= h) { - let ow = isRound ? Math.sqrt(1-(i/yo)*(i/yo)) * w : w; - if (i % unitMajor === 0) majors.append({x:-ow, y:i, z:zp}).append({x:ow, y:i, z:zp}); - else if (minors && i % unitMinor === 0) minors.append({x:-ow, y:i, z:zp}).append({x:ow, y:i, z:zp}); + for (i = -yo; i <= yo; i += unitMinor) { + let ow = isRound ? Math.sqrt(1-(i/yo)*(i/yo)) * w : w, + dM = Math.abs(i % unitMajor); + if (dM < 0.1 || Math.abs(unitMajor - dM) < 0.1) { + majors.append({x:-ow, y:i, z:zp}).append({x:ow, y:i, z:zp}); + } else { + minors.append({x:-ow, y:i, z:zp}).append({x:ow, y:i, z:zp}); } } gridView.add(makeLinesFromPoints(majors, gridColorMajor || 0x999999, 1));