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); }
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())); }