MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / get_vertex_chain_around_triangle

Method get_vertex_chain_around_triangle

tools/MeshUtils/LongEdgeRemoval.cpp:235–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233}
234
235std::vector<size_t> LongEdgeRemoval::get_vertex_chain_around_triangle(
236 size_t fi, size_t& v0_idx, size_t& v1_idx, size_t& v2_idx) {
237 const auto& f = m_faces.row(fi);
238 const auto& chain_01 = m_edge_map[{f[0], f[1]}];
239 const auto& chain_12 = m_edge_map[{f[1], f[2]}];
240 const auto& chain_20 = m_edge_map[{f[2], f[0]}];
241
242 std::vector<size_t> chain;
243 chain.reserve(chain_01.size() + chain_12.size() + chain_20.size() - 3);
244 v0_idx = 0;
245 chain.push_back(f[0]);
246 if (f[0] == chain_01.front()) {
247 chain.insert(chain.end(),
248 std::next(chain_01.begin()),
249 std::prev(chain_01.end()));
250 } else {
251 assert(f[0] == chain_01.back());
252 chain.insert(chain.end(),
253 std::next(chain_01.rbegin()),
254 std::prev(chain_01.rend()));
255 }
256
257 v1_idx = chain.size();
258 chain.push_back(f[1]);
259 if (f[1] == chain_12.front()) {
260 chain.insert(chain.end(),
261 std::next(chain_12.begin()),
262 std::prev(chain_12.end()));
263 } else {
264 assert(f[1] == chain_12.back());
265 chain.insert(chain.end(),
266 std::next(chain_12.rbegin()),
267 std::prev(chain_12.rend()));
268 }
269
270 v2_idx = chain.size();
271 chain.push_back(f[2]);
272 if (f[2] == chain_20.front()) {
273 chain.insert(chain.end(),
274 std::next(chain_20.begin()),
275 std::prev(chain_20.end()));
276 } else {
277 assert(f[2] == chain_20.back());
278 chain.insert(chain.end(),
279 std::next(chain_20.rbegin()),
280 std::prev(chain_20.rend()));
281 }
282 return chain;
283}

Callers

nothing calls this directly

Calls 5

nextFunction · 0.85
sizeMethod · 0.45
insertMethod · 0.45
endMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected