private static void AddTrianglesV1(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { int len1 = len - 1; OuterBox.AddTriangle(ts[len1], padXYZ); for (int i = 0; i < len1; i++) { Triangle t1 = ts[i]; bool used = false; OuterBox.AddTriangle(t1, padXYZ); for (int ii = i + 1; ii < len; ii++) { Triangle t2 = ts[ii]; int shared = SharedVertexs(t1, t2); if (shared == 3) continue; if (shared == 2) { Box3Fill B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); used = true; } } if (!used) { Box3Fill B = new Box3Fill(true); B.AddTriangle(t1, padXYZ); InnerBoxes.Add(B); } } }
private static void AddTrianglesV4(IEnumerable<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { foreach (Triangle t1 in ts) { OuterBox.AddTriangle(t1, padXYZ); Vertex v1 = t1.v1; Vertex v2 = t1.v2; Vertex v3 = t1.v3; AddThreeTwo(v1, v2, v3,InnerBoxes, padXYZ); } }
private static void AddTrianglesV4S(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { List<Vertex> Shared; List<Vertex> UnShared; Box3Fill B;// = new Box3Fill(t1, t2, padXYZ); for (int i = 0; i < len; i += 1) { Triangle t1 = ts[i]; if (t1 == null) continue; OuterBox.AddTriangle(t1, padXYZ); //InnerBoxes.Add(B); bool used = false; for (int ii = i + 1; ii < len; ii++) { Triangle t2 = ts[ii]; if (t2 == null) continue; List<Vertex> verts = AddedVertexs(t1, t2,out Shared,out UnShared); // if (Shared.Count == 0) continue; if (Shared.Count == 2) { // ts[ii] = null; B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); used = true; // break; } } if (!used) { Vertex v1 = t1.v1; Vertex v2 = t1.v2; Vertex v3 = t1.v3; AddThreeTwo(v1, v2, v3, InnerBoxes, padXYZ); } } }
private static void AddTrianglesV34(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { //int len1 = len - 2; //OuterBox.AddTriangle(ts[len - 1], padXYZ); for (int i = 0; i < len; i += 1) { Triangle t1 = ts[i]; if (t1 == null) continue; OuterBox.AddTriangle(t1, padXYZ); Box3Fill B;// = new Box3Fill(t1, t2, padXYZ); //InnerBoxes.Add(B); bool used = false; for (int ii = i + 1; ii < len; ii++) { Triangle t2 = ts[ii]; if (t2 == null) continue; int shared = SharedVertexs(t1, t2); if (shared == 3) continue; if (shared == 2) { ts[ii] = null; B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); used = true; } } if (!used) { AddThreeFour(2, t1.v1, t1.v2, t1.v3, InnerBoxes, padXYZ); } } }
private static void AddTrianglesV32(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { Triangle t1 = ts[0]; Triangle t2 = ts[len - 1]; OuterBox.AddTriangle(t1, padXYZ); OuterBox.AddTriangle(t2, padXYZ); Box3Fill B;// = new Box3Fill(t1, t2, padXYZ); //InnerBoxes.Add(B); int len2 = len - 2; OuterBox.AddTriangle(ts[len - 1], padXYZ); for (int i = 0; i < len2; i += 1) { t1 = ts[i]; if (t1 == null) continue; t2 = ts[i + 1]; if (t2 == null) continue; OuterBox.AddTriangle(t1, padXYZ); OuterBox.AddTriangle(t2, padXYZ); B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); bool used = false; for (int ii = i + 2; ii < len; ii++) { t2 = ts[ii]; if (t2 == null) continue; int shared = SharedVertexs(t1, t2); if (shared == 3) continue; if (shared == 2) { B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); // ts[ii] = null; used = true; } } if (!used) { B = new Box3Fill(true); B.AddTriangle(t1, padXYZ); InnerBoxes.Add(B); } } }
private static void AddTrianglesV321(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { int len2 = len - 2; int len1 = len - 1; OuterBox.AddTriangle(ts[len - 1], padXYZ); for (int i = 0; i < len2; i += 2) { Triangle t1 = ts[i]; if (t1 == null) continue; OuterBox.AddTriangle(t1, padXYZ); Triangle t2 = ts[i + 1]; if (t2 != null) { OuterBox.AddTriangle(t2, padXYZ); InnerBoxes.Add(new Box3Fill(t1, t2, padXYZ)); } bool used = false; int until = i + 1; for (int ii = len1; ii > until;ii-- ) { t2 = ts[ii]; if (t2 == null) continue; int shared = SharedVertexs(t1, t2); if (shared == 3) continue; if (shared == 2) { InnerBoxes.Add(new Box3Fill(t1, t2, padXYZ)); ts[ii] = null; used = true; } } if (!used) { Box3Fill B = new Box3Fill(true); B.AddTriangle(t1, padXYZ); InnerBoxes.Add(B); } } }
private static void AddTrianglesV2(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { foreach (Triangle t1 in ts) { Box3Fill B = new Box3Fill(true); OuterBox.AddTriangle(t1, padXYZ); B.AddTriangle(t1, padXYZ); InnerBoxes.Add(B); } }
private static void AddTrianglesV13(IList<Triangle> ts, int len, Box3Fill OuterBox, Vector3 padXYZ, IList<Box3Fill> InnerBoxes) { Vertex[] unsharedV = new Vertex[6]; Vertex[] sharedV = new Vertex[3]; //int len1 = len - 1; //OuterBox.AddTriangle(ts[len1], padXYZ); for (int i = 0; i < len; i++) { Triangle t1 = ts[i]; if (t1 == null) continue; bool used = false; OuterBox.AddTriangle(t1, padXYZ); for (int ii = i + 1; ii < len; ii++) { Triangle t2 = ts[ii]; if (t2 == null) continue; int shared = SharedVertexs(t1, t2,sharedV,unsharedV); if (shared == 3) continue; if (shared == 2) { Vertex u1 = unsharedV[0]; Vertex u2 = unsharedV[1]; Vertex s1 = sharedV[0]; Vertex s2 = sharedV[1]; float ZDiff = u1.Z - u2.Z; if (ZDiff < 0) ZDiff = -ZDiff; if (ZDiff < 3) { Box3Fill B = new Box3Fill(t1, t2, padXYZ); InnerBoxes.Add(B); used = true; } else { } } } if (!used) { AddThreeFour(2, t1.v1, t1.v2, t1.v3, InnerBoxes, padXYZ); } } }