public static PointCloud FromTriangleVectors(List <TriangleVectors> listTriangleVectors) { List <Triangle> listTriangles = new List <Triangle>(); List <Vector3> newVectors = new List <Vector3>(); for (int i = 0; i < listTriangleVectors.Count; i++) { Triangle t = new Triangle(newVectors.Count, newVectors.Count + 1, newVectors.Count + 2); TriangleVectors tv = listTriangleVectors[i]; listTriangles.Add(t); //if(!newVectors.Contains(tv.A)) // newVectors.Add(tv.A); //if (!newVectors.Contains(tv.B)) // newVectors.Add(tv.B); //if (!newVectors.Contains(tv.C)) // newVectors.Add(tv.C); newVectors.Add(tv.A.Vector); newVectors.Add(tv.B.Vector); newVectors.Add(tv.C.Vector); } PointCloud pcNew = PointCloud.FromListVector3(newVectors); pcNew.Triangles = listTriangles; pcNew.CreateIndicesFromTriangles(); return(pcNew); }
/// <summary> /// Copy constructor. /// </summary> /// <param name="src"></param> public TriangleVectors(TriangleVectors src) { A = src.A; B = src.B; C = src.C; AB = src.AB; BC = src.BC; CA = src.CA; Index = m_index; m_index++; }
/// <summary> /// Set the edge by index. /// </summary> /// <param name="i"></param> /// <param name="t"></param> public void SetEdge(int i, TriangleVectors t) { i = i < 0 ? i + 3 : i > 2 ? i - 3 : i; if (i == 0) { AB = t; } if (i == 1) { BC = t; } if (i == 2) { CA = t; } }
public void CreateIndicesFromTriangles(List <TriangleVectors> listTriangleVectors) { List <Triangle> listTriangles = new List <Triangle>(); for (int i = 0; i < listTriangleVectors.Count; i++) { TriangleVectors tv = listTriangleVectors[i]; Triangle t = new Triangle(tv.A.Index, tv.B.Index, tv.C.Index); listTriangles.Add(t); } this.Triangles = listTriangles; this.CreateIndicesFromTriangles(); }
/// <summary> /// Repair any Edge links, both ways. /// </summary> /// <param name="a"></param> /// <returns></returns> public void RepairEdges(TriangleVectors a) { // Check if a.AB is in this. if (this.Index == a.Index) { return; } if (bothIn(a, a.A, a.B)) { a.AB = this; return; } if (bothIn(a, a.B, a.C)) { a.BC = this; return; } if (bothIn(a, a.C, a.A)) { a.CA = this; return; } }
/// <summary> /// Are both Vector3es in? /// </summary> /// <param name="t"></param> /// <param name="vt"></param> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> protected bool bothIn(TriangleVectors t, Vertex a, Vertex b) { if (a == A) { if (b == B) { AB = t; return(true); } if (b == C) { CA = t; return(true); } } if (a == B) { if (b == A) { AB = t; return(true); } if (b == C) { BC = t; return(true); } } if (a == C) { if (b == A) { CA = t; return(true); } if (b == B) { BC = t; return(true); } } return(false); }
public Circle(TriangleVectors t) : this(t.A.Vector, t.B.Vector, t.C.Vector) { }