예제 #1
0
            public List <CsgPolygon> AllPolygons()
            {
                var polygons = new List <CsgPolygon>(Polygons);

                if (Front != null)
                {
                    polygons.AddRange(Front.AllPolygons());
                }
                if (Back != null)
                {
                    polygons.AddRange(Back.AllPolygons());
                }
                return(polygons);
            }
예제 #2
0
        public Csgjs Union(Csgjs csg)
        {
            if (Polygons.Count == 0)
            {
                return(csg.Clone());
            }
            if (csg.Polygons.Count == 0)
            {
                return(Clone());
            }

            var a = new CsgNode(Clone().Polygons);
            var b = new CsgNode(csg.Clone().Polygons);

            a.ClipTo(b);
            b.ClipTo(a);
            b.Invert();
            b.ClipTo(a);
            b.Invert();
            a.Build(b.AllPolygons());
            return(FromPolygons(a.AllPolygons()));
        }