示例#1
0
        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()));
        }
示例#2
0
        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()));
        }