fix dogbones typo for trace. fix first point error

This commit is contained in:
Stewart Allen 2023-02-25 13:07:40 -05:00
commit e0695b1a02
3 changed files with 29 additions and 20 deletions

View file

@ -1366,6 +1366,19 @@ CAM.init = function(kiri, api) {
// filter: UC.newRow([ UC.newButton(LANG.filter, contourFilter) ], {class:"ext-buttons f-row"}) // filter: UC.newRow([ UC.newButton(LANG.filter, contourFilter) ], {class:"ext-buttons f-row"})
}; };
function canDogBones() {
if (!poppedRec) return false;
return poppedRec.mode === 'follow';// && poppedRec.offset && poppedRec.offset !== 'none';
}
function canDogBonesRev() {
return canDogBones() && poppedRec.dogbone;
}
function zDogSep() {
return canDogBones() || zBottom();
}
createPopOp('trace', { createPopOp('trace', {
mode: 'camTraceType', mode: 'camTraceType',
offset: 'camTraceOffset', offset: 'camTraceOffset',
@ -1395,10 +1408,10 @@ CAM.init = function(kiri, api) {
down: UC.newInput(LANG.cc_sdwn_s, {title:LANG.cc_sdwn_l, convert:UC.toFloat, units:true}), down: UC.newInput(LANG.cc_sdwn_s, {title:LANG.cc_sdwn_l, convert:UC.toFloat, units:true}),
thru: UC.newInput(LANG.cc_thru_s, {title:LANG.cc_thru_l, convert:UC.toFloat, units:true}), thru: UC.newInput(LANG.cc_thru_s, {title:LANG.cc_thru_l, convert:UC.toFloat, units:true}),
offover: UC.newInput(LANG.cc_offd_s, {title:LANG.cc_offd_l, convert:UC.toFloat, units:true, show:() => poppedRec.offset !== "none"}), offover: UC.newInput(LANG.cc_offd_s, {title:LANG.cc_offd_l, convert:UC.toFloat, units:true, show:() => poppedRec.offset !== "none"}),
sep: UC.newBlank({class:"pop-sep", modes:MCAM, poop:true }), sep: UC.newBlank({class:"pop-sep", modes:MCAM, xshow:zDogSep}),
bottom: UC.newBoolean(LANG.cf_botm_s, undefined, {title:LANG.cf_botm_l, show:(op,conf) => conf.process.camZBottom}), bottom: UC.newBoolean(LANG.cf_botm_s, undefined, {title:LANG.cf_botm_l, show:(op,conf) => conf.process.camZBottom}),
dogbone: UC.newBoolean(LANG.co_dogb_s, undefined, {title:LANG.co_dogb_l}), dogbone: UC.newBoolean(LANG.co_dogb_s, undefined, {title:LANG.co_dogb_l, show:canDogBones}),
revbone: UC.newBoolean(LANG.co_dogr_s, undefined, {title:LANG.co_dogr_l, show:(op) => poppedRec.dogbone}), revbone: UC.newBoolean(LANG.co_dogr_s, undefined, {title:LANG.co_dogr_l, show:canDogBonesRev}),
sep: UC.newBlank({class:"pop-sep"}), sep: UC.newBlank({class:"pop-sep"}),
menu: UC.newRow([ menu: UC.newRow([
UC.newButton(undefined, func.traceAdd, {icon:'<i class="fas fa-plus"></i>'}), UC.newButton(undefined, func.traceAdd, {icon:'<i class="fas fa-plus"></i>'}),

View file

@ -1001,7 +1001,7 @@ class OpTrace extends CamOp {
return slice; return slice;
} }
function followZ(poly) { function followZ(poly) {
if (op.dogbones) { if (op.dogbone) {
CAM.addDogbones(poly, toolDiam / 5, !op.revbone); CAM.addDogbones(poly, toolDiam / 5, !op.revbone);
} }
let z = poly.getZ(); let z = poly.getZ();

View file

@ -292,25 +292,20 @@ CAM.addDogbones = function(poly, dist, reverse) {
if (Array.isArray(poly)) { if (Array.isArray(poly)) {
return poly.forEach(p => CAM.addDogbones(p, dist)); return poly.forEach(p => CAM.addDogbones(p, dist));
} }
// if (poly.open) return;
let open = poly.open; let open = poly.open;
let isCW = poly.isClockwise(); let isCW = poly.isClockwise();
if (reverse || poly.parent) isCW = !isCW; if (reverse || poly.parent) isCW = !isCW;
let oldpts = poly.points.slice(); let oldpts = poly.points.slice();
let lastpt = oldpts[oldpts.length - 1]; let lastpt = oldpts[oldpts.length - 1];
let lastsl = lastpt.slopeTo(oldpts[0]).toUnit(); let lastsl = lastpt.slopeTo(oldpts[0]).toUnit();
let length = oldpts.length + (open ? 0 : 1);
let newpts = [ ]; let newpts = [ ];
for (let i=0; i<oldpts.length + (open ? 0 : 1); i++) { for (let i=0; i<length; i++) {
let nextpt = oldpts[i % oldpts.length]; let nextpt = oldpts[i % oldpts.length];
let nextsl = lastpt.slopeTo(nextpt).toUnit(); let nextsl = lastpt.slopeTo(nextpt).toUnit();
let adiff = lastsl.angleDiff(nextsl, true); let adiff = lastsl.angleDiff(nextsl, true);
let bdiff = ((adiff < 0 ? (180 - adiff) : (180 + adiff)) / 2) + 180; let bdiff = ((adiff < 0 ? (180 - adiff) : (180 + adiff)) / 2) + 180;
if (open && i === 0) { if (!open || (i > 1 && i < length)) {
lastsl = nextsl;
lastpt = nextpt;
newpts.push(nextpt);
continue;
}
if (isCW && adiff > 45) { if (isCW && adiff > 45) {
let newa = base.newSlopeFromAngle(lastsl.angle + bdiff); let newa = base.newSlopeFromAngle(lastsl.angle + bdiff);
newpts.push(lastpt.projectOnSlope(newa, dist)); newpts.push(lastpt.projectOnSlope(newa, dist));
@ -320,6 +315,7 @@ CAM.addDogbones = function(poly, dist, reverse) {
newpts.push(lastpt.projectOnSlope(newa, dist)); newpts.push(lastpt.projectOnSlope(newa, dist));
newpts.push(lastpt.clone()); newpts.push(lastpt.clone());
} }
}
lastsl = nextsl; lastsl = nextsl;
lastpt = nextpt; lastpt = nextpt;
if (i < oldpts.length) { if (i < oldpts.length) {