Пример #1
0
 public Edge GetNeighbor(Edge e)
 {
     return(neighbors[e.face.submesh][e.face.index][e.index]);
 }
Пример #2
0
 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);
     }
 }
Пример #3
0
 private void SetNeighbor(Edge e, Edge n)
 {
     neighbors[e.face.submesh][e.face.index][e.index] = n;
 }