fix arc parsing (clockwise). clean up label preference restoration and apply to parsed gcode

This commit is contained in:
Stewart Allen 2021-02-07 21:53:58 -05:00
commit f988912f6b
3 changed files with 42 additions and 30 deletions

View file

@ -936,10 +936,7 @@
updateSliderMax(true);
setVisibleLayer(-1, 0);
if (scale === 1) {
for (let label of STACKS.getLabels()) {
let check = `${mode}-${viewMode}-${label}`;
STACKS.setVisible(label, settings.labels[check] !== false);
}
updateStackLabelState();
}
});
if (scale === 1) {
@ -1076,12 +1073,7 @@
updateSliderMax(true);
setVisibleLayer(-1, 0);
updateSpeeds(maxSpeed);
// maatch label checkboxes to preference
for (let label of STACKS.getLabels()) {
let check = `${settings.mode}-${viewMode}-${label}`;
STACKS.setVisible(label, settings.labels[check] !== false);
}
updateStackLabelState();
// mark preview complete for export
complete.preview = true;
@ -1104,6 +1096,14 @@
KIRI.export(...argsave);
}
function updateStackLabelState() {
// match label checkboxes to preference
for (let label of STACKS.getLabels()) {
let check = `${settings.mode}-${viewMode}-${label}`;
STACKS.setVisible(label, settings.labels[check] !== false);
}
}
function loadCode(code, type) {
setViewMode(VIEWS.PREVIEW);
setOpacity(0);
@ -1119,6 +1119,7 @@
updateSliderMax(true);
updateSpeeds(maxSpeed);
showSlices();
updateStackLabelState();
SPACE.update();
API.event.emit("code.loaded", {code, type});
});

View file

@ -133,7 +133,8 @@
maxf = 0,
seq = [],
autolayer = true,
newlayer = false;
newlayer = false,
arcdivs = Math.PI / 12;
const output = scope.output = [ seq ];
const beltaxis = { X: "X", Y: "Z", Z: "Y", E: "E", F: "F" };
@ -156,14 +157,24 @@
center.x = pos.X + rec.I;
center.y = pos.Y + rec.J;
//center.r = TODO
console.log("G[2,3] IJ not supported");
} else if (rec.R !== undefined) {
let pr2 = BASE.util.center2pr({
x: pos.X,
y: pos.Y
}, {
x: rec.X,
y: rec.Y
}, rec.R)[g2 ? 1 : 0];
let pd = { x: rec.X - pos.X, y: rec.Y - pos.Y };
let dst = Math.sqrt(pd.x * pd.x + pd.y * pd.y) / 2;
let pr2;
if (Math.abs(dst - rec.R) < 0.001) {
// center point radius
pr2 = { x: (rec.X + pos.X) / 2, y: (rec.Y + pos.Y) / 2};
} else {
// triangulate
pr2 = BASE.util.center2pr({
x: pos.X,
y: pos.Y
}, {
x: rec.X,
y: rec.Y
}, rec.R)[g2 ? 1 : 0];
}
center.x = pr2.x;
center.y = pr2.y;
center.r = rec.R;
@ -172,23 +183,21 @@
}
// line angles
// let a1 = Math.PI - Math.atan2(pos.Y - center.y, pos.X - center.x);
// let a2 = Math.PI - Math.atan2(rec.Y - center.y, rec.X - center.x);
let a1 = Math.PI - Math.atan2(center.y - pos.Y, center.x - pos.X);
let a2 = Math.PI - Math.atan2(center.y - rec.Y, center.x - rec.X);
let a1 = Math.atan2(center.y - pos.Y, center.x - pos.X) + Math.PI;
let a2 = Math.atan2(center.y - rec.Y, center.x - rec.X) + Math.PI;
let ad = BASE.util.thetaDiff(a1, a2, true);
let steps = 20;
let steps = Math.floor(Math.abs(ad) / arcdivs);
let step = (Math.abs(ad) > 0.001 ? ad : Math.PI * 2) / steps;
let rot = a2;
let rot = a1 + step;
LOG({first: pos, last: rec, center, a1, a2, ad, step, rot, line});
// G0G1(false, [`X${center.x}`, `Y${center.y}`, `E1`]);
let pc = { X: pos.X, Y: pos.Y };
for (let i=0; i<=steps; i++) {
for (let i=0; i<=steps-2; i++) {
let np = {
X: center.x + Math.sin(rot) * center.r,
Y: center.y + Math.cos(rot) * center.r
X: center.x + Math.cos(rot) * center.r,
Y: center.y + Math.sin(rot) * center.r
};
rot += step;
G0G1(false, [`X${np.X}`, `Y${np.Y}`, `E1`]);

View file

@ -505,12 +505,13 @@
let from = arcQ[0];
let to = arcQ.peek();
let cc = {x:0, y:0, z:0, r:0};
let cl = arcQ.center.length;
for (let center of arcQ.center) {
let cl = 0;
for (let center of arcQ.center.filter(rec => !isNaN(rec.r))) {
cc.x += center.x;
cc.y += center.y;
cc.z += center.z;
cc.r += center.r;
cl++;
}
cc.x /= cl;
cc.y /= cl;
@ -518,7 +519,8 @@
cc.r /= cl;
// first arc point
emitQrec(from);
console.log({first: from, last: arcQ.peek(), center: cc});
// console.log(arcQ.slice(), arcQ.center);
// console.log({first: from, last: arcQ.peek(), center: cc});
// rest of arc to final point
let dist = arcQ.slice(1).map(v => v.dist).reduce((a,v) => a+v);
let emit = from.e;//arcQ.slice(1).map(v => v.e).reduce((a,v) => a+v);