diff --git a/src/user/user_mesh.cc b/src/user/user_mesh.cc index 18d18cba..b0e1175a 100644 --- a/src/user/user_mesh.cc +++ b/src/user/user_mesh.cc @@ -2302,36 +2302,6 @@ void mjCFlex::Compile(const mjVFS* vfs) { } } - // create edges - std::vector edgeidx(elem.size()*kNumEdges[dim-1]); - - // map from edge vertices to their index in `edges` vector - std::unordered_map, int, PairHash> edge_indices; - - // insert local edges into global vector - for (int f = 0; f < (int)elem.size()/(dim+1); f++) { - int* v = elem.data() + f*(dim+1); - for (int e = 0; e < kNumEdges[dim-1]; e++) { - auto pair = std::pair( - std::min(v[eledge[dim-1][e][0]], v[eledge[dim-1][e][1]]), - std::max(v[eledge[dim-1][e][0]], v[eledge[dim-1][e][1]]) - ); - - // if edge is already present in the vector only store its index - auto [it, inserted] = edge_indices.insert({pair, nedge}); - - if (inserted) { - edge.push_back(pair); - edgeidx[f*kNumEdges[dim-1]+e] = nedge++; - } else { - edgeidx[f*kNumEdges[dim-1]+e] = it->second; - } - } - } - - // set size - nedge = (int)edge.size(); - // determine rigid if not already set if (!rigid) { rigid = true; @@ -2394,6 +2364,36 @@ void mjCFlex::Compile(const mjVFS* vfs) { } } + // create edges + std::vector edgeidx(elem.size()*kNumEdges[dim-1]); + + // map from edge vertices to their index in `edges` vector + std::unordered_map, int, PairHash> edge_indices; + + // insert local edges into global vector + for (int f = 0; f < (int)elem.size()/(dim+1); f++) { + int* v = elem.data() + f*(dim+1); + for (int e = 0; e < kNumEdges[dim-1]; e++) { + auto pair = std::pair( + std::min(v[eledge[dim-1][e][0]], v[eledge[dim-1][e][1]]), + std::max(v[eledge[dim-1][e][0]], v[eledge[dim-1][e][1]]) + ); + + // if edge is already present in the vector only store its index + auto [it, inserted] = edge_indices.insert({pair, nedge}); + + if (inserted) { + edge.push_back(pair); + edgeidx[f*kNumEdges[dim-1]+e] = nedge++; + } else { + edgeidx[f*kNumEdges[dim-1]+e] = it->second; + } + } + } + + // set size + nedge = (int)edge.size(); + // add plugins std::string userface, useredge; mjXUtil::Vector2String(userface, elem);