de-rez complex slices for support interference detection where it's less important
This commit is contained in:
parent
14ee94311d
commit
a73faf8d05
2 changed files with 22 additions and 13 deletions
|
|
@ -288,15 +288,7 @@
|
||||||
* @returns {Polygon[]} out
|
* @returns {Polygon[]} out
|
||||||
*/
|
*/
|
||||||
function subtract(setA, setB, outA, outB, z, minArea) {
|
function subtract(setA, setB, outA, outB, z, minArea) {
|
||||||
let clib = self.ClipperLib,
|
let min = minArea || 0.1,
|
||||||
ctyp = clib.ClipType,
|
|
||||||
ptyp = clib.PolyType,
|
|
||||||
cfil = clib.PolyFillType,
|
|
||||||
clip = new clib.Clipper(),
|
|
||||||
ctre = new clib.PolyTree(),
|
|
||||||
sp1 = toClipper(setA),
|
|
||||||
sp2 = toClipper(setB),
|
|
||||||
min = minArea || 0.1,
|
|
||||||
out = [];
|
out = [];
|
||||||
|
|
||||||
function filter(from, to = []) {
|
function filter(from, to = []) {
|
||||||
|
|
@ -309,10 +301,17 @@
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
const JS = true;
|
if (true) {
|
||||||
|
let clib = self.ClipperLib,
|
||||||
|
ctyp = clib.ClipType,
|
||||||
|
ptyp = clib.PolyType,
|
||||||
|
cfil = clib.PolyFillType,
|
||||||
|
clip = new clib.Clipper(),
|
||||||
|
ctre = new clib.PolyTree(),
|
||||||
|
sp1 = toClipper(setA),
|
||||||
|
sp2 = toClipper(setB);
|
||||||
|
|
||||||
if (JS) {
|
// more expensive? worth it?
|
||||||
// expensive but worth it?
|
|
||||||
clip.StrictlySimple = true;
|
clip.StrictlySimple = true;
|
||||||
if (outA) {
|
if (outA) {
|
||||||
clip.AddPaths(sp1, ptyp.ptSubject, true);
|
clip.AddPaths(sp1, ptyp.ptSubject, true);
|
||||||
|
|
|
||||||
|
|
@ -451,6 +451,7 @@
|
||||||
projectFlats(slice, solidLayers);
|
projectFlats(slice, solidLayers);
|
||||||
projectBridges(slice, solidLayers);
|
projectBridges(slice, solidLayers);
|
||||||
}, "layer deltas");
|
}, "layer deltas");
|
||||||
|
// console.log('start'); await BASE.util.ptimer(1000);
|
||||||
let promises = doConcurrent ? [] : undefined;
|
let promises = doConcurrent ? [] : undefined;
|
||||||
forSlices(0.35, promises ? 0.4 : 0.5, slice => {
|
forSlices(0.35, promises ? 0.4 : 0.5, slice => {
|
||||||
let params = slice.params || spro;
|
let params = slice.params || spro;
|
||||||
|
|
@ -466,6 +467,7 @@
|
||||||
trackupdate(i / t, 0.4, 0.5);
|
trackupdate(i / t, 0.4, 0.5);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// console.log('stop'); await BASE.util.ptimer(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// sparse layers only present when non-vase mose and sparse % > 0
|
// sparse layers only present when non-vase mose and sparse % > 0
|
||||||
|
|
@ -1164,7 +1166,6 @@
|
||||||
gap = proc.sliceSupportGap,
|
gap = proc.sliceSupportGap,
|
||||||
min = minArea || 0.01,
|
min = minArea || 0.01,
|
||||||
size = (pillarSize || 1),
|
size = (pillarSize || 1),
|
||||||
mergeDist = size * 3, // pillar merge dist
|
|
||||||
tops = slice.topPolys(),
|
tops = slice.topPolys(),
|
||||||
trimTo = tops;
|
trimTo = tops;
|
||||||
|
|
||||||
|
|
@ -1181,6 +1182,15 @@
|
||||||
down_tops = down ? down.topPolys() : null,
|
down_tops = down ? down.topPolys() : null,
|
||||||
down_traces = down ? POLY.flatten(down.topShells().clone(true)) : null;
|
down_traces = down ? POLY.flatten(down.topShells().clone(true)) : null;
|
||||||
|
|
||||||
|
if (down_tops) {
|
||||||
|
// de-rez complex polys because it's not that important for supports
|
||||||
|
let points = down_tops.map(p => p.deepLength).reduce((a,v)=>a+v);
|
||||||
|
if (points > 200) {
|
||||||
|
down_tops = down_tops.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
||||||
|
down_traces = down_traces.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// check if point is supported by layer below
|
// check if point is supported by layer below
|
||||||
function checkPointSupport(point) {
|
function checkPointSupport(point) {
|
||||||
// skip points close to other support points
|
// skip points close to other support points
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue