| 53 | } |
| 54 | |
| 55 | void IndexedTetMesh::buildNeighbors() |
| 56 | { |
| 57 | typedef std::vector<unsigned int> VertexEdges; |
| 58 | |
| 59 | m_verticesEdges.clear(); // to delete old pointers |
| 60 | m_verticesEdges.resize(numVertices()); |
| 61 | |
| 62 | m_verticesFaces.clear(); // to delete old pointers |
| 63 | m_verticesFaces.resize(numVertices()); |
| 64 | |
| 65 | m_verticesTets.clear(); // to delete old pointers |
| 66 | m_verticesTets.resize(numVertices()); |
| 67 | |
| 68 | m_faces.clear(); |
| 69 | m_edges.clear(); |
| 70 | m_tets.resize(numTets()); |
| 71 | |
| 72 | for(unsigned int i=0; i < numTets(); i++) |
| 73 | { |
| 74 | // tet edge indices: {0,1, 0,2, 0,3, 1,2, 1,3, 2,3} |
| 75 | const unsigned int edges[12] = { m_tetIndices[4*i], m_tetIndices[4*i+1], |
| 76 | m_tetIndices[4*i], m_tetIndices[4*i+2], |
| 77 | m_tetIndices[4*i], m_tetIndices[4*i+3], |
| 78 | m_tetIndices[4*i+1], m_tetIndices[4*i+2], |
| 79 | m_tetIndices[4*i+1], m_tetIndices[4*i+3], |
| 80 | m_tetIndices[4*i+2], m_tetIndices[4*i+3]}; |
| 81 | |
| 82 | // tet face indices: {0,1,2, 1,3,2, 3,0,2, 1,0,3} => clock wise |
| 83 | /*const unsigned int faces[12] = { m_tetIndices[4*i], m_tetIndices[4*i+1], m_tetIndices[4*i+2], |
| 84 | m_tetIndices[4*i+1], m_tetIndices[4*i+3], m_tetIndices[4*i+2], |
| 85 | m_tetIndices[4*i+3], m_tetIndices[4*i], m_tetIndices[4*i+2], |
| 86 | m_tetIndices[4*i+1], m_tetIndices[4*i], m_tetIndices[4*i+3]};*/ |
| 87 | |
| 88 | // tet face indices: {1,0,2, 3,1,2, 0,3,2, 0,1,3} => counter clock wise |
| 89 | const unsigned int faces[12] = { m_tetIndices[4*i+1], m_tetIndices[4*i], m_tetIndices[4*i+2], |
| 90 | m_tetIndices[4*i+3], m_tetIndices[4*i+1], m_tetIndices[4*i+2], |
| 91 | m_tetIndices[4*i], m_tetIndices[4*i+3], m_tetIndices[4*i+2], |
| 92 | m_tetIndices[4*i], m_tetIndices[4*i+1], m_tetIndices[4*i+3]}; |
| 93 | |
| 94 | for(unsigned int j=0u; j < 4; j++) |
| 95 | { |
| 96 | // add vertex-tet connection |
| 97 | const unsigned int vIndex = m_tetIndices[4*i+j]; |
| 98 | m_verticesTets[vIndex].push_back(i); |
| 99 | } |
| 100 | |
| 101 | for(unsigned int j=0u; j < 4; j++) |
| 102 | { |
| 103 | // add face information |
| 104 | const unsigned int a = faces[j*3+0]; |
| 105 | const unsigned int b = faces[j*3+1]; |
| 106 | const unsigned int c = faces[j*3+2]; |
| 107 | unsigned int face = 0xffffffff; |
| 108 | // find face |
| 109 | for(unsigned int k=0; k < m_verticesFaces[a].size(); k++) |
| 110 | { |
| 111 | // Check if we already have this face in the list |
| 112 | const unsigned int& faceIndex = m_verticesFaces[a][k]; |
no test coverage detected