MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/PositionBasedDynamics / buildNeighbors

Method buildNeighbors

Utils/IndexedFaceMesh.cpp:118–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

116}
117
118void IndexedFaceMesh::buildNeighbors()
119{
120 typedef std::vector<unsigned int> PEdges;
121
122 PEdges* pEdges = new PEdges[numVertices()];
123
124 // build vertex-face structure
125 m_verticesFaces.clear(); // to delete old pointers
126 m_verticesFaces.resize(numVertices());
127 m_verticesEdges.clear(); // to delete old pointers
128 m_verticesEdges.resize(numVertices());
129 m_facesEdges.clear();
130 m_facesEdges.resize(numFaces());
131
132 m_edges.clear();
133
134 unsigned int *v = new unsigned int[m_verticesPerFace];
135 unsigned int *edges = new unsigned int[m_verticesPerFace*2];
136 for(unsigned int i=0; i < numFaces(); i++)
137 {
138 m_facesEdges[i].resize(m_verticesPerFace);
139 for (unsigned int j=0u; j < m_verticesPerFace; j++)
140 v[j] = m_indices[m_verticesPerFace*i+j];
141
142 for (unsigned int j=0u; j < m_verticesPerFace-1u; j++)
143 {
144 edges[2*j] = v[j];
145 edges[2*j+1] = v[j+1];
146 }
147 edges[2*(m_verticesPerFace-1)] = v[m_verticesPerFace-1];
148 edges[2*(m_verticesPerFace-1)+1] = v[0];
149
150 for(unsigned int j=0u; j < m_verticesPerFace; j++)
151 {
152 // add vertex-face connection
153 const unsigned int vIndex = m_indices[m_verticesPerFace*i+j];
154 bool found = false;
155 for(unsigned int k=0; k < m_verticesFaces[vIndex].size(); k++)
156 {
157 if (m_verticesFaces[vIndex][k] == i)
158 {
159 found = true;
160 break;
161 }
162 }
163 if (!found)
164 {
165 m_verticesFaces[vIndex].push_back(i);
166 }
167
168 // add edge information
169 const unsigned int a = edges[j*2+0];
170 const unsigned int b = edges[j*2+1];
171 unsigned int edge = 0xffffffff;
172 // find edge
173 for(unsigned int k=0; k < pEdges[a].size(); k++)
174 {
175 const Edge& e = m_edges[pEdges[a][k]];

Callers

nothing calls this directly

Calls 4

clearMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected