private static void TestVoxelization() { var dir = new DirectoryInfo("."); while (!Directory.Exists(dir.FullName + Path.DirectorySeparatorChar + "TestFiles")) { dir = dir.Parent; } dir = new DirectoryInfo(dir.FullName + Path.DirectorySeparatorChar + "TestFiles"); //var fileName = dir.FullName + Path.DirectorySeparatorChar + "test.json"; var fileNames = dir.GetFiles("*atht*").OrderBy(x => r.NextDouble()).ToArray(); for (var i = 0; i < fileNames.Length; i++) { var filename = fileNames[i].FullName; var name = fileNames[i].Name; Console.WriteLine("Attempting: " + filename); var solid = (TessellatedSolid)IO.Open(filename); Presenter.ShowAndHang(solid); if (solid.Errors != null) { Console.WriteLine(" ===>" + filename + " has errors: " + solid.Errors.ToString()); continue; } Console.WriteLine("voxelizing..."); var voxsol = new VoxelizedSolid(solid, 1000); Console.WriteLine("now presenting " + name); Presenter.ShowAndHang(voxsol.ConvertToTessellatedSolidMarchingCubes(5)); Console.WriteLine("draft in pos y"); var yposVoxSol = voxsol.DraftToNewSolid(CartesianDirections.YPositive); Console.WriteLine("presenting"); Presenter.ShowAndHang(yposVoxSol.ConvertToTessellatedSolidMarchingCubes(5)); Console.WriteLine("draft in neg y"); var ynegVoxSol = voxsol.DraftToNewSolid(CartesianDirections.YNegative); Console.WriteLine("presenting"); Presenter.ShowAndHang(ynegVoxSol.ConvertToTessellatedSolidMarchingCubes(5)); Console.WriteLine("union of y solids"); var yUnion = yposVoxSol.UnionToNewSolid(ynegVoxSol); Console.WriteLine("presenting"); Presenter.ShowAndHang(yUnion.ConvertToTessellatedSolidMarchingCubes(5)); Console.WriteLine("draft in neg z"); var znegVoxSol = voxsol.DraftToNewSolid(CartesianDirections.ZNegative); Console.WriteLine("intersecting"); var intersect = znegVoxSol.IntersectToNewSolid(yUnion); Console.WriteLine("presenting"); Presenter.ShowAndHang(intersect.ConvertToTessellatedSolidMarchingCubes(5)); } }
private static void Run() { #region TessellatedSolid var ts = new TessellatedSolid(); ts = new TessellatedSolid(new[] { new List <Vector3>() }, true, new TVGL.Color[0]); ts = new TessellatedSolid(new Vector3[0], new[] { new[] { 1, 2, 3 } }, true, new TVGL.Color[0]); ts.AddPrimitive(new Plane()); ts.CheckModelIntegrity(); ts.Complexify(); ts.Copy(); ts.OrientedBoundingBox(); ts.CreateSilhouette(Vector3.UnitX); ts.Repair(); ts.SetToOriginAndSquare(out var backTransform); ts.SetToOriginAndSquareToNewSolid(out backTransform); ts.Simplify(); ts.SimplifyFlatPatches(); ts.Transform(new Matrix4x4()); ts.TransformToNewSolid(new Matrix4x4()); ts.SliceOnInfiniteFlat(new Plane(), out List <TessellatedSolid> solids, out ContactData contactData); ts.SliceOnFlatAsSingleSolids(new Plane(), out TessellatedSolid positiveSideSolids, out TessellatedSolid negativeSideSolid); ts.GetSliceContactData(new Plane(), out contactData, false); ts.ConvexHull.Vertices.MinimumBoundingCylinder(); ts.ConvexHull.Vertices.OrientedBoundingBox(); var length = ts.ConvexHull.Vertices.GetLengthAndExtremeVertices(Vector3.UnitX, out List <IVertex3D> bottomVertices, out List <IVertex3D> topVertices); length = ts.ConvexHull.Vertices.GetLengthAndExtremeVertex(Vector3.UnitX, out Vertex bottomVertex, out Vertex topVertex); #endregion #region CrossSectionSolid var cs = new CrossSectionSolid(new Dictionary <int, double>()); //cs.Add(new List<Vertex>) #endregion #region VoxelizedSolid var vs1 = new VoxelizedSolid(ts, 0.1); vs1.ConvertToTessellatedSolidMarchingCubes(5); vs1.ConvertToTessellatedSolidRectilinear(); var vs2 = (VoxelizedSolid)vs1.Copy(); vs1.DirectionalErodeToConstraintToNewSolid(in vs2, CartesianDirections.XNegative); vs1.Draft(CartesianDirections.XNegative); var vs3 = vs1.DraftToNewSolid(CartesianDirections.XNegative); #endregion }
public static void InitialTest() { DirectoryInfo dir; if (Directory.Exists("../../../../TestFiles")) { //x64 dir = new DirectoryInfo("../../../../TestFiles"); } else { //x86 dir = new DirectoryInfo("../../../TestFiles"); } var random = new Random(); var fileNames = dir.GetFiles("*ananas*").OrderBy(x => random.Next()).ToArray(); //var fileNames = dir.GetFiles("*"); for (var i = 0; i < fileNames.Length - 0; i++) { //var filename = FileNames[i]; var filename = fileNames[i].FullName; var name = fileNames[i].Name; Console.WriteLine("Attempting: " + filename); var ts = (TessellatedSolid)IO.Open(filename); if (ts.Errors != null) { Console.WriteLine(" ===>" + filename + " has errors: " + ts.Errors.ToString()); continue; } IO.Save(ts, dir + "/3_bananas"); ts.SolidColor = new Color(100, 200, 100, 50); //Presenter.ShowAndHang(ts); var vs = new VoxelizedSolid(ts, 10000); //Presenter.ShowAndHang(vs); var extrudeSolid = vs.DraftToNewSolid(CartesianDirections.XNegative); //Presenter.ShowAndHang(extrudeSolid); extrudeSolid.Subtract(vs); Presenter.ShowAndHang(extrudeSolid.ConvertToTessellatedSolidMarchingCubes(50)); //Snapshot.Match(vs, SnapshotNameExtension.Create(name)); } }
public static void TestVoxelization(TessellatedSolid ts, string _fileName) { var vs1 = new VoxelizedSolid(ts, 10); Console.WriteLine("done constructing, now ..."); PresenterShowAndHang(vs1); //var vs1ts = vs1.ConvertToTessellatedSolid(color); //var savename = "voxelized_" + _fileName; //IO.Save(vs1ts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in X Positive..."); var vs1xpos = vs1.DraftToNewSolid(CartesianDirections.XPositive); //Presenter.ShowAndHang(vs1xpos); //var vs1xposts = vs1xpos.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "vs1xpos_" + _fileName; //IO.Save(vs1xposts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in X Negative..."); var vs1xneg = vs1.DraftToNewSolid(CartesianDirections.XNegative); //Presenter.ShowAndHang(vs1xneg); //var vs1xnegts = vs1xneg.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "vs1xneg_" + _fileName; //IO.Save(vs1xnegts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in Y Positive..."); var vs1ypos = vs1.DraftToNewSolid(CartesianDirections.YPositive); //Presenter.ShowAndHang(vs1ypos); //var vs1yposts = vs1ypos.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "vs1ypos_" + _fileName; //IO.Save(vs1yposts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in Y Negative..."); var vs1yneg = vs1.DraftToNewSolid(CartesianDirections.YNegative); //Presenter.ShowAndHang(vs1yneg); ////var vs1ynegts = vs1yneg.ConvertToTessellatedSolid(color); ////Console.WriteLine("Saving Solid..."); ////savename = "vs1yneg_" + _fileName; ////IO.Save(vs1ynegts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in Z Positive..."); var vs1zpos = vs1.DraftToNewSolid(CartesianDirections.ZPositive); //Presenter.ShowAndHang(vs1zpos); ////var vs1zposts = vs1zpos.ConvertToTessellatedSolid(color); ////Console.WriteLine("Saving Solid..."); ////savename = "vs1zpos_" + _fileName; ////IO.Save(vs1zposts, savename, FileType.STL_ASCII); Console.WriteLine("Drafting Solid in Z Negative..."); var vs1zneg = vs1.DraftToNewSolid(CartesianDirections.ZNegative); //Presenter.ShowAndHang(vs1zneg); //var vs1znegts = vs1zneg.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "vs1zneg_" + _fileName; //IO.Save(vs1znegts, savename, FileType.STL_ASCII); Console.WriteLine("Intersecting Drafted Solids..."); var intersect = vs1xpos.IntersectToNewSolid(vs1xneg, vs1ypos, vs1zneg, vs1yneg, vs1zpos); //Presenter.ShowAndHang(intersect); //return; //var intersectts = intersect.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "intersect_" + _fileName; //IO.Save(intersectts, savename, FileType.STL_ASCII); Console.WriteLine("Subtracting Original Voxelized Shape From Intersect..."); var unmachinableVoxels = intersect.SubtractToNewSolid(vs1); //Presenter.ShowAndHang(unmachinableVoxels); //var uvts = unmachinableVoxels.ConvertToTessellatedSolid(color); //Console.WriteLine("Saving Solid..."); //savename = "unmachinable_" + _fileName; //IO.Save(uvts, savename, FileType.STL_ASCII); //Console.WriteLine("Totals for Original Voxel Shape: " + vs1.GetTotals[0] + "; " + vs1.GetTotals[1] + "; " + vs1.GetTotals[2] + "; " + vs1.GetTotals[3]); //Console.WriteLine("Totals for X Positive Draft: " + vs1xpos.GetTotals[0] + "; " + vs1xpos.GetTotals[1] + "; " + vs1xpos.GetTotals[2] + "; " + vs1xpos.GetTotals[3]); //Console.WriteLine("Totals for X Negative Draft: " + vs1xneg.GetTotals[0] + "; " + vs1xneg.GetTotals[1] + "; " + vs1xneg.GetTotals[2] + "; " + vs1xneg.GetTotals[3]); //Console.WriteLine("Totals for Y Positive Draft: " + vs1ypos.GetTotals[0] + "; " + vs1ypos.GetTotals[1] + "; " + vs1ypos.GetTotals[2] + "; " + vs1ypos.GetTotals[3]); //Console.WriteLine("Totals for Y Negative Draft: " + vs1yneg.GetTotals[0] + "; " + vs1yneg.GetTotals[1] + "; " + vs1yneg.GetTotals[2] + "; " + vs1yneg.GetTotals[3]); //Console.WriteLine("Totals for Z Positive Draft: " + vs1zpos.GetTotals[0] + "; " + vs1zpos.GetTotals[1] + "; " + vs1zpos.GetTotals[2] + "; " + vs1zpos.GetTotals[3]); //Console.WriteLine("Totals for Z Negative Draft: " + vs1zneg.GetTotals[0] + "; " + vs1zneg.GetTotals[1] + "; " + vs1zneg.GetTotals[2] + "; " + vs1zneg.GetTotals[3]); //Console.WriteLine("Totals for Intersected Voxel Shape: " + intersect.GetTotals[0] + "; " + intersect.GetTotals[1] + "; " + intersect.GetTotals[2] + "; " + intersect.GetTotals[3]); //Console.WriteLine("Totals for Unmachinable Voxels: " + unmachinableVoxels.GetTotals[0] + "; " + unmachinableVoxels.GetTotals[1] + "; " + unmachinableVoxels.GetTotals[2] + "; " + unmachinableVoxels.GetTotals[3]); Console.WriteLine("orig volume = {0}, intersect vol = {1}, and subtract vol = {2}", vs1.Volume, intersect.Volume, unmachinableVoxels.Volume); //PresenterShowAndHang(vs1); //PresenterShowAndHang(vs1xpos); //PresenterShowAndHang(vs1xneg); //PresenterShowAndHang(vs1ypos); //PresenterShowAndHang(vs1yneg); //PresenterShowAndHang(vs1zpos); //PresenterShowAndHang(vs1zneg); //PresenterShowAndHang(intersect); //PresenterShowAndHang(unmachinableVoxels); //unmachinableVoxels.SolidColor = new Color(KnownColors.DeepPink); //unmachinableVoxels.SolidColor.A = 200; if (unmachinableVoxels.Volume == 0) { Console.WriteLine("no unmachineable sections!!\n\n"); } else { PresenterShowAndHang(unmachinableVoxels, ts); PresenterShowAndHang(unmachinableVoxels); } //PresenterShowAndHang(new Solid[] { intersect }); //var unmachinableVoxelsSolid = new Solid[] { unmachinableVoxels }; //PresenterShowAndHang(unmachinableVoxelsSolid); //var originalTS = new Solid[] { ts }; }