private CSG _differencePolygonBoundsOpt(CSG csg) { List <Polygon> inner = new List <Polygon>(); List <Polygon> outer = new List <Polygon>(); Bounds bounds = csg.getBounds(); this.polygons.ForEach(p => { if (bounds.intersects(p.getBounds())) { inner.Add(p); } else { outer.Add(p); } }); CSG innerCSG = CSG.fromPolygons(inner); List <Polygon> allPolygons = new List <Polygon>(); allPolygons.AddRange(outer); allPolygons.AddRange(innerCSG._differenceNoOpt(csg).polygons); return(CSG.fromPolygons(allPolygons).optimization(getOptType())); }
private CSG _differenceCSGBoundsOpt(CSG csg) { CSG b = csg; CSG a1 = this._differenceNoOpt(csg.getBounds().toCSG()); CSG a2 = this.intersect(csg.getBounds().toCSG()); return(a2._differenceNoOpt(b)._unionIntersectOpt(a1).optimization(getOptType())); }