add ruler imperial support. fix 'nohide' ui trigger when switching units. fix stock scale

This commit is contained in:
Stewart Allen 2020-11-17 18:06:30 -05:00
commit 78bc7ef3f6
6 changed files with 47 additions and 39 deletions

View file

@ -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

View file

@ -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),

View file

@ -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;

View file

@ -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) {

View file

@ -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 };

View file

@ -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);