diff --git a/src/geo/polygons.js b/src/geo/polygons.js index 5d4e17a1..5d8304e1 100644 --- a/src/geo/polygons.js +++ b/src/geo/polygons.js @@ -288,15 +288,7 @@ * @returns {Polygon[]} out */ function subtract(setA, setB, outA, outB, z, minArea) { - 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), - min = minArea || 0.1, + let min = minArea || 0.1, out = []; function filter(from, to = []) { @@ -309,10 +301,17 @@ 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) { - // expensive but worth it? + // more expensive? worth it? clip.StrictlySimple = true; if (outA) { clip.AddPaths(sp1, ptyp.ptSubject, true); diff --git a/src/mode/fdm/slice.js b/src/mode/fdm/slice.js index cbee0860..b35a8f41 100644 --- a/src/mode/fdm/slice.js +++ b/src/mode/fdm/slice.js @@ -451,6 +451,7 @@ projectFlats(slice, solidLayers); projectBridges(slice, solidLayers); }, "layer deltas"); + // console.log('start'); await BASE.util.ptimer(1000); let promises = doConcurrent ? [] : undefined; forSlices(0.35, promises ? 0.4 : 0.5, slice => { let params = slice.params || spro; @@ -466,6 +467,7 @@ 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 @@ -1164,7 +1166,6 @@ gap = proc.sliceSupportGap, min = minArea || 0.01, size = (pillarSize || 1), - mergeDist = size * 3, // pillar merge dist tops = slice.topPolys(), trimTo = tops; @@ -1181,6 +1182,15 @@ down_tops = down ? down.topPolys() : 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 function checkPointSupport(point) { // skip points close to other support points