public VertexInfo(int idx, MeshDataTool mdt, VertexInfo[] storage) { this.storage = storage; this.vertIdx = idx; this.mdt = mdt; edges = mdt.GetVertexEdges(idx); faces = mdt.GetVertexFaces(idx); this.pos = mdt.GetVertex(idx); adjacentVerticies = new int[edges.Length]; for (var i = 0; i < edges.Length; i++) { var edgeIdx = edges[i]; var edgeVert0 = mdt.GetEdgeVertex(edgeIdx, 0); var edgeVert1 = mdt.GetEdgeVertex(edgeIdx, 1); var adjacent = edgeVert0 != idx ? edgeVert0 : edgeVert1; adjacentVerticies[i] = adjacent; } //better heuristic for sorting (vert with most adjcent faces) foreach (var faceIdx in faces) { //adjadj++; for (var i = 0; i < 3; i++) { var faceVertIdx = mdt.GetFaceVertex(faceIdx, i); adjadj += mdt.GetVertexFaces(faceVertIdx).Length; } } }