public static Dictionary<string, object> GetSurfaces(Slicer slicer) { List<Solid[]> SliceResults = new List<Solid[]>(); // Container for Solid Results return new Dictionary<string, object> { { "Primary", slicer.GenerateSurfaces(slicer.CutPlanesPrimary) }, { "Secondary", slicer.GenerateSurfaces(slicer.CutPlanesSecondary)}, { "Tertiary", slicer.GenerateSurfaces(slicer.CutPlanesTertiary)} }; }
public static Dictionary<string, object> GetPrimaryResults(Slicer slicer) { List<Surface[]> Surfaces = new List<Surface[]>(); List<PolyCurve[]> Profiles = new List<PolyCurve[]>(); List<Solid[]> Slices = new List<Solid[]>(); for (int i = 0; i < slicer.CutPlanesPrimary.Count; i++) { Geometry[] geometry = slicer.Solid.Intersect(slicer.CutPlanesPrimary[i]); List<PolyCurve> profiles = new List<PolyCurve>(); List<Surface> surfaces = new List<Surface>(); List<Solid> slices = new List<Solid>(); for (int j = 0; j < geometry.Length; j++) { if ((geometry[j] is Point) ^ (geometry[j] is Curve)) { continue; } else { surfaces.Add((Surface)geometry[j]); profiles.Add(PolyCurve.ByJoinedCurves(((Surface)geometry[j]).PerimeterCurves())); slices.Add(((Surface)geometry[j]).Thicken(slicer.Thickness)); } } Profiles.Add(profiles.ToArray()); Surfaces.Add(surfaces.ToArray()); Slices.Add(slices.ToArray()); } return new Dictionary<string, object> { { "Profiles", Profiles }, { "Surfaces", Surfaces}, { "Slices", Slices } }; }
public static Dictionary<string, object> GetSlices(Slicer slicer) { return new Dictionary<string, object> { { "Primary", slicer.GenerateSlices(slicer.GenerateSurfaces(slicer.CutPlanesPrimary)) }, { "Secondary", slicer.GenerateSlices(slicer.GenerateSurfaces(slicer.CutPlanesSecondary))}, { "Tertiary", slicer.GenerateSlices(slicer.GenerateSurfaces(slicer.CutPlanesTertiary))} }; }
public static Dictionary<string, object> GetPrimaryInscribedResults(Slicer slicer) { Plane[][] Shifted = slicer.ShiftCutPlanes(slicer.CutPlanesPrimary, slicer.Thickness); List<Surface[]> Surfaces = new List<Surface[]>(); List<PolyCurve[]> Profiles = new List<PolyCurve[]>(); List<Solid[]> Slices = new List<Solid[]>(); for (int i = 0; i < slicer.CutPlanesPrimary.Count; i++) { Geometry[] Up = slicer.Solid.Intersect(Shifted[0][i]); Geometry[] Down = slicer.Solid.Intersect(Shifted[1][i]); List<Solid> solidsUp = new List<Solid>(); List<Solid> solidsDown = new List<Solid>(); for (int j = 0; j < Up.Length; j++) { if ((Up[j] is Point) ^ (Up[j] is Curve)) { continue; } else { solidsUp.Add(((Surface)Up[j].Translate(slicer.CutPlanesPrimary[i].Normal.Scale(-slicer.Thickness / 2.0))).Thicken(slicer.Thickness)); } } for (int j = 0; j < Down.Length; j++) { if ((Down[j] is Point) ^ (Down[j] is Curve)) { continue; } else { solidsDown.Add(((Surface)Down[j].Translate(slicer.CutPlanesPrimary[i].Normal.Scale(slicer.Thickness / 2.0))).Thicken(slicer.Thickness)); } } Solid solidUp = Solid.ByUnion(solidsUp); Solid solidDown = Solid.ByUnion(solidsDown); Geometry[] results = slicer.CutPlanesPrimary[i].IntersectAll(solidUp.Intersect(solidDown)); List<Surface> surfaces = new List<Surface>(); List<Solid> slices = new List<Solid>(); List<PolyCurve> profiles = new List<PolyCurve>(); for (int j = 0; j < results.Length; j++) { if ((results[j] is Point) ^ (results[j] is Curve)) { continue; } else { surfaces.Add((Surface) results[j]); profiles.Add(PolyCurve.ByJoinedCurves(((Surface) results[j]).PerimeterCurves())); slices.Add(((Surface) results[j]).Thicken(slicer.Thickness)); } } Surfaces.Add(surfaces.ToArray()); Slices.Add(slices.ToArray()); Profiles.Add(profiles.ToArray()); } return new Dictionary<string, object> { { "Profiles", Profiles }, { "Surfaces", Surfaces}, { "Slices", Slices } }; }