From 78bc7ef3f664d21e56f1325e2dd2e3aa94069cd0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 17 Nov 2020 18:06:30 -0500 Subject: [PATCH] add ruler imperial support. fix 'nohide' ui trigger when switching units. fix stock scale --- notes.md | 28 +++++++++++++++++++--------- src/kiri/init.js | 4 ++-- src/kiri/main.js | 17 +++++++++-------- src/kiri/ui.js | 7 ++++--- src/mode/cam/client.js | 8 +++----- src/moto/space.js | 22 ++++++++++------------ 6 files changed, 47 insertions(+), 39 deletions(-) diff --git a/notes.md b/notes.md index b1132e33..6154592a 100644 --- a/notes.md +++ b/notes.md @@ -3,17 +3,27 @@ ## 2.3 remaining * cap path ends * rulers need to follow workspace units +* rough/outline shadow needs to respect flats even when not used as slices * onshape mouse mapping option -## 2.4 -* cnc: tracing (chamfer, engrave), milling visualization -* cnc: auto feature detection (slicing), manual tabs -* cnc: add tabs to shadow and slice model (for topo) -* cnc: step down should interpolate top/bottom again -* cnc: adaptive shadow-line generation for small parts collision detection -* fdm: manual supports, continuous printing -* onshape: session token timeout bug -* all: 2d image to 3d part +## 2.4 tenative list +* cnc +* tracing (chamfer, engrave) +* milling visualization +* auto feature detection (slicing), manual tabs +* add tabs to shadow and slice model (for topo) +* step down should interpolate top/bottom again +* adaptive shadow-line generation for small parts collision detection +* fdm +* manual supports +* continuous printing (z belt systems) +* laser +* drag knife support +* onshape +* session token timeout bug +* all +* 2d image to 3d part +* circular fit/layout when no-layout to prevent collisions ## `C` cosmetic, `F` functional, `P` performance, `B` bug fix diff --git a/src/kiri/init.js b/src/kiri/init.js index 7c7989b0..241af603 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -83,7 +83,7 @@ } function unitsSave() { - API.conf.update(); + API.conf.update({controller:true}); platform.update_size(); } @@ -1421,7 +1421,7 @@ alignTop: UC.newBoolean(LANG.op_alig_s, booleanSave, {title:LANG.op_alig_l}), autoLayout: UC.newBoolean(LANG.op_auto_s, booleanSave, {title:LANG.op_auto_l}), freeLayout: UC.newBoolean(LANG.op_free_s, booleanSave, {title:LANG.op_free_l}), - units: UC.newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, action:unitsSave, modes:CAM}, "units"), + units: UC.newSelect(LANG.op_unit_s, {title: LANG.op_unit_l, action:unitsSave, modes:CAM, trace:true}, "units"), export: UC.newGroup(LANG.xp_menu, $('prefs-xpo'), {inline: true}), exportOcto: UC.newBoolean(`OctoPrint`, booleanSave), diff --git a/src/kiri/main.js b/src/kiri/main.js index 9832ccca..8b59ff00 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -961,7 +961,6 @@ function platformUpdateOrigin() { platform.update_bounds(); - // return; let dev = settings.device; let proc = settings.process; @@ -978,9 +977,6 @@ let z = 0; if (MODE === MODES.CAM && proc.camOriginTop) { z = (topZ + topZD) + 0.01; - // if (!hasStock) { - // z += proc.camZTopOffset * unitScale(); - // } } if (!center) { if (hasStock) { @@ -1001,7 +997,7 @@ y = -stockCenter.y; } settings.origin = {x, y, z}; - SPACE.platform.setRulers(ruler, ruler, center); + SPACE.platform.setRulers(ruler, ruler, center, 1/unitScale()); if (settings.controller.showOrigin && MODE !== MODES.SLA) { SPACE.platform.setOrigin(x,y,z); } else { @@ -1051,7 +1047,7 @@ SPACE.setSkyColor(0xffffff); DOC.body.classList.remove('dark'); } - SPACE.platform.setRulers(ruler, ruler, proc.outputOriginCenter); + SPACE.platform.setRulers(ruler, ruler, proc.outputOriginCenter, 1/unitScale()); SPACE.platform.setGZOff(height/2 - 0.1); platform.update_origin(); SPACE.scene.freeze(frozen); @@ -1208,7 +1204,9 @@ platform.select(widget, shift); platform.compute_max_z(); API.event.emit('widget.add', widget); - if (nolayout) return; + if (nolayout) { + return; + } if (!grouping) { platformGroupDone(); } else if (feature.drop_layout) { @@ -1452,12 +1450,15 @@ } } - function updateSettings() { + function updateSettings(opt = {}) { updateSettingsFromFields(settings.controller); switch (settings.controller.units) { case 'mm': UC.setUnits(1); break; case 'in': UC.setUnits(25.4); break; } + if (opt.controller) { + return; + } updateSettingsFromFields(settings.device); updateSettingsFromFields(settings.process); let device = settings.device; diff --git a/src/kiri/ui.js b/src/kiri/ui.js index a8486b3d..34e1241c 100644 --- a/src/kiri/ui.js +++ b/src/kiri/ui.js @@ -151,12 +151,13 @@ updateGroupShow(group); }); letMode = mode; + if (nohide) { + return; + } hasModes.forEach(function(div) { div.setMode(div._group && !groupShow[div._group] ? NOMODE : mode); }); - if (!nohide) { - hidePoppers(); - } + hidePoppers(); } function setExpert(bool) { diff --git a/src/mode/cam/client.js b/src/mode/cam/client.js index 781fd0d7..33dd044a 100644 --- a/src/mode/cam/client.js +++ b/src/mode/cam/client.js @@ -91,7 +91,6 @@ let enabled = UI.camStockOn.checked; let offset = UI.camStockOffset.checked; let stockSet = offset || (proc.camStockX && proc.camStockY && proc.camStockZ > 0); - let scale = API.view.unit_scale(); let topZ = API.platform.top_z(); let delta = 0; let csox = 0; @@ -100,10 +99,9 @@ // create/inject cam stock if stock size other than default if (enabled && stockSet && widgets.length) { - // UI.stock.style.display = offset ? 'inline-block' : 'none'; - let csx = proc.camStockX * scale; - let csy = proc.camStockY * scale; - let csz = proc.camStockZ * scale; + let csx = proc.camStockX; + let csy = proc.camStockY; + let csz = proc.camStockZ; if (offset) { let min = { x: Infinity, y: Infinity, z: 0 }; let max = { x: -Infinity, y: -Infinity, z: -Infinity }; diff --git a/src/moto/space.js b/src/moto/space.js index a615e771..628892fc 100644 --- a/src/moto/space.js +++ b/src/moto/space.js @@ -58,6 +58,7 @@ rulerX = true, rulerY = true, rulerCenter = true, + rulerFactor = 1, fontColor = '#333333', fontScale = 1.4, // computed relative to grid size rulerColor, @@ -292,14 +293,11 @@ requestRefresh(); } - function setRulers(drawX, drawY, offsetCenter) { - if (drawX === undefined) drawX = rulerX; - if (drawY === undefined) drawY = rulerY; - if (offsetCenter === undefined) offsetCenter = rulerCenter; - + function setRulers(drawX = rulerX, drawY = rulerY, offsetCenter = rulerCenter, factor = rulerFactor) { rulerX = drawX; rulerY = drawY; rulerCenter = offsetCenter; + rulerFactor = factor; let x = platform.scale.x, y = isRound ? platform.scale.z : platform.scale.y, @@ -343,11 +341,11 @@ } if (drawX) { - let xPadding = labelSize * 4; - let canvas = canvasInMesh(x + xPadding, labelSize, 'center', 'top', rulerColor); + const xPadding = labelSize * 4; + const canvas = canvasInMesh(x + xPadding, labelSize, 'center', 'top', rulerColor); for (let i = rulerXFirst; i <= rulerXLast; i += gridUnitMajor) { - let label = (offsetCenter ? i - (rulerXLast + rulerXFirst) / 2 : i).round(1); + const label = ((offsetCenter ? i - (rulerXLast + rulerXFirst) / 2 : i) * factor).round(1); canvas.ctx.fillText('' + label, i + xPadding / 2, 0); } canvas.mesh.position.set(0, - h - labelSize / 2 - 5, zp); @@ -361,12 +359,12 @@ } if (drawY) { - let yPadding = labelSize; - let canvas = canvasInMesh(labelSize * 4, y + yPadding, 'end', 'middle', rulerColor); + const yPadding = labelSize; + const canvas = canvasInMesh(labelSize * 4, y + yPadding, 'end', 'middle', rulerColor); for (let i = rulerYFirst; i <= rulerYLast; i += gridUnitMajor) { - let label = (offsetCenter ? i - (rulerYLast + rulerYFirst) / 2 : - rulerYFirst + rulerYLast - i).round(1); + const label = ((offsetCenter ? i - (rulerYLast + rulerYFirst) / 2 : + rulerYFirst + rulerYLast - i) * factor).round(1); canvas.ctx.fillText('' + label, labelSize * 4, i + yPadding / 2); } canvas.mesh.position.set(-w - labelSize * 2 - 5, 0, zp);