public TriangleStripper(ModelBase.FaceListDef faceList) { if (faceList.m_Type != ModelBase.PolyListType.Triangles) { bool tris = true; for (int i = 0; i < faceList.m_Faces.Count; i++) { tris = (faceList.m_Faces[i].m_NumVertices == 3); if (!tris) { throw new ArgumentException("The provided FaceListDef must be triangulated."); } } faceList.m_Type = ModelBase.PolyListType.Triangles; } m_Vertices = new List <VertexLinked>(); m_Triangles = new List <TriangleLinked>(); m_TrianglesToProcess = new List <TriangleLinked>(); for (int i = 0; i < faceList.m_Faces.Count; i++) { if (IsDegenerateFace(faceList.m_Faces[i])) { faceList.m_Faces.RemoveAt(i); } } for (int i = 0; i < faceList.m_Faces.Count; i++) { m_Triangles.Add(new TriangleLinked(faceList.m_Faces[i])); } for (int i = 0; i < m_Triangles.Count; i++) { ModelBase.FaceDef triangle = m_Triangles[i].m_Triangle; for (int j = 0; j < triangle.m_NumVertices; j++) { VertexLinked vertex = new VertexLinked(triangle.m_Vertices[j]); int index = m_Vertices.IndexOf(vertex); if (index == -1) { m_Vertices.Add(vertex); index = m_Vertices.Count - 1; } m_Vertices[index].m_LinkedTriangles.Add(i); } } }
public TriangleStripper(ModelBase.FaceListDef faceList) { if (faceList.m_Type != ModelBase.PolyListType.Triangles) { bool tris = true; for (int i = 0; i < faceList.m_Faces.Count; i++) { tris = (faceList.m_Faces[i].m_NumVertices == 3); if (!tris) throw new ArgumentException("The provided FaceListDef must be triangulated."); } faceList.m_Type = ModelBase.PolyListType.Triangles; } m_Vertices = new List<VertexLinked>(); m_Triangles = new List<TriangleLinked>(); m_TrianglesToProcess = new List<TriangleLinked>(); for (int i = 0; i < faceList.m_Faces.Count; i++) { if (IsDegenerateFace(faceList.m_Faces[i])) { faceList.m_Faces.RemoveAt(i); } } for (int i = 0; i < faceList.m_Faces.Count; i++) { m_Triangles.Add(new TriangleLinked(faceList.m_Faces[i])); } for (int i = 0; i < m_Triangles.Count; i++) { ModelBase.FaceDef triangle = m_Triangles[i].m_Triangle; for (int j = 0; j < triangle.m_NumVertices; j++) { VertexLinked vertex = new VertexLinked(triangle.m_Vertices[j]); int index = m_Vertices.IndexOf(vertex); if (index == -1) { m_Vertices.Add(vertex); index = m_Vertices.Count - 1; } m_Vertices[index].m_LinkedTriangles.Add(i); } } }