Remap convex hull graph ids with an inverse table

Signed-off-by: Teerth Sharma <teerths57@gmail.com>
This commit is contained in:
teerthsharma
2026-08-03 18:08:09 +05:30
parent b475bb6f36
commit 747d36da91
+17 -13
View File
@@ -1947,20 +1947,24 @@ void mjCMesh::MakeGraph(const double* dvert) {
} }
// replace global ids with local ids in edge data // replace global ids with local ids in edge data
for (int i=0; i < numvert+3*numface; i++) { else {
if (edge_localid[i] >= 0) { // invert vert_globalid: point id -> hull vertex index, -1 if not on hull.
// search vert_globalid for match // every vert_globalid entry was range-checked above, so the index is safe.
int adr; std::vector<int> hullid(nvert(), -1);
for (adr=0; adr < numvert; adr++) { for (int adr=0; adr < numvert; adr++) {
if (vert_globalid[adr] == edge_localid[i]) { hullid[vert_globalid[adr]] = adr;
edge_localid[i] = adr; }
break;
}
}
// make sure we found a match: SHOULD NOT OCCUR for (int i=0; i < numvert+3*numface; i++) {
if (adr >= numvert) { if (edge_localid[i] >= 0) {
mju_error("Vertex id not found in convex hull"); int adr = hullid[edge_localid[i]];
// make sure we found a match: SHOULD NOT OCCUR
if (adr < 0) {
mju_error("Vertex id not found in convex hull");
}
edge_localid[i] = adr;
} }
} }
} }