public Edge GetNeighbor(Edge e) { return(neighbors[e.face.submesh][e.face.index][e.index]); }
public void InitHelpers() { vertexEdges = new Edge[vertexCount][]; for (int v = 0; v < vertexCount; ++v) { var es = new List <Edge>(); foreach (Face face in IterAllFaces()) { int e = GetIndexInFace(GetFaceVertexIndices(face), v); if (e != -1) { es.Add(new Edge { face = face, index = e }); } } vertexEdges[v] = es.ToArray(); } positionVertices = new int[positions.Count][]; for (int p = 0; p < positions.Count; ++p) { var vs = new List <int>(); for (int v = 0; v < vertexCount; ++v) { if (posIndices[v] == p) { vs.Add(v); } } positionVertices[p] = vs.ToArray(); } neighbors = new Edge[submeshes.Length][][]; for (int s = 0; s < submeshes.Length; ++s) { int[][] faces = submeshes[s].faces; neighbors[s] = new Edge[faces.Length][]; for (int f = 0; f < faces.Length; ++f) { int[] es = faces[f]; neighbors[s][f] = new Edge[es.Length]; for (int e = 0; e < es.Length; ++e) { neighbors[s][f][e] = Edge.Invalid; } } } foreach (Edge e in IterAllEdges()) { if (GetNeighbor(e).IsValid()) { continue; } Edge n = FindNeighbor(e); if (!n.IsValid()) { continue; } SetNeighbor(e, n); SetNeighbor(n, e); } }
private void SetNeighbor(Edge e, Edge n) { neighbors[e.face.submesh][e.face.index][e.index] = n; }