fix cnc feedrates for imperial. update grid when changing units

This commit is contained in:
Stewart Allen 2020-06-13 11:23:52 -04:00
commit 4c23d16e66
6 changed files with 61 additions and 45 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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