checkpoint trace work
This commit is contained in:
parent
94dc665231
commit
9945a08dbb
3 changed files with 24 additions and 16 deletions
|
|
@ -206,6 +206,7 @@
|
|||
flatoff = UTIL.numOrDefault(opt.flatoff, 0.01),
|
||||
onflat = this.zFlat[znorm],
|
||||
edges = opt.edges || false,
|
||||
over = opt.over || false,
|
||||
phash = {},
|
||||
lines = [],
|
||||
zScale = this.zScale,
|
||||
|
|
@ -237,7 +238,7 @@
|
|||
// one side of triangle is on the Z plane and 3rd is below
|
||||
// drop lines with 3rd above because that leads to ambiguities
|
||||
// with complex nested polygons on flat surface
|
||||
if (edges || where.under.length === 1) {
|
||||
if ((over && where.over.length === 1) || (!over && where.under.length === 1)) {
|
||||
lines.push(makeZLine(phash, where.on[0], where.on[1], false, true));
|
||||
}
|
||||
} else if (where.on.length === 3) {
|
||||
|
|
|
|||
|
|
@ -235,8 +235,10 @@
|
|||
KIRI.api.widgets.for(widget => {
|
||||
let stack = new KIRI.Stack(widget.mesh);
|
||||
widget.trace_stack = stack;
|
||||
widget.traces.forEach(slice => {
|
||||
stack.addLayers(slice.layers);
|
||||
widget.traces.forEach(poly => {
|
||||
let layers = new KIRI.Layers();
|
||||
layers.setLayer("trace", {line: 0x88aa55}, false).addPoly(poly);
|
||||
stack.addLayers(layers);
|
||||
});
|
||||
widget.adds.appendAll(stack.meshes);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -486,6 +486,10 @@
|
|||
// generate tracing offsets from chosen features
|
||||
if (procTrace) {
|
||||
// todo
|
||||
// let proc = settings.process;
|
||||
// let traceTool = new CAM.Tool(settings, proc.camTraceTool);
|
||||
// let traceToolDiam = traceTool.fluteDiameter();
|
||||
// widget.maxToolDiam = Math.max(maxToolDiam, traceToolDiam);
|
||||
// slice.camMode = PRO.TRACE;
|
||||
}
|
||||
|
||||
|
|
@ -523,30 +527,31 @@
|
|||
zlist: true,
|
||||
zline: true
|
||||
});
|
||||
let proc = settings.process;
|
||||
let traceTool = new CAM.Tool(settings, proc.camTraceTool);
|
||||
let traceToolDiam = traceTool.fluteDiameter();
|
||||
// widget.maxToolDiam = Math.max(maxToolDiam, traceToolDiam);
|
||||
// unique merge of z flats and z line indices
|
||||
let indices = [...new Set(Object.keys(slicer.zFlat)
|
||||
.map(kv => parseFloat(kv).round(5))
|
||||
.appendAll(Object.entries(slicer.zLine).map(ze => {
|
||||
let [ zk, zv ] = ze;
|
||||
return zv > 0 ? parseFloat(zk).round(5) : null;
|
||||
return zv > 1 ? parseFloat(zk).round(5) : null;
|
||||
})
|
||||
.filter(v => v !== null)))]
|
||||
.sort((a,b) => b - a);
|
||||
let traces = [];
|
||||
slicer.slice(indices, { each: (data, index, total) => {
|
||||
let oneach = (data, index, total) => {
|
||||
// create separate slice for each poly (and inner)
|
||||
BASE.polygons.flatten(data.tops,null,true).forEach(poly => {
|
||||
let trace = KIRI.newSlice(data.z);
|
||||
trace.output('trace')
|
||||
.setLayer("trace", {line: 0x88aa55}, false)
|
||||
.addPoly(poly);
|
||||
traces.push(trace);
|
||||
for (let i=0, il=traces.length; i<il; i++) {
|
||||
// do not add duplicates
|
||||
if (traces[i].isEquivalent(poly)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
traces.push(poly);
|
||||
});
|
||||
}, flatoff: 0, edges: true, openok: true });
|
||||
};
|
||||
let opts = { each: oneach, over: false, flatoff: 0, edges: true, openok: true };
|
||||
slicer.slice(indices, opts);
|
||||
opts.over = true;
|
||||
slicer.slice(indices, opts);
|
||||
widget.traces = traces;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue