Set all flex edges to rigid when the flex is rigid.

PiperOrigin-RevId: 629740153
Change-Id: Ib2fb6f64e3d160268d2521d63830f41e44d03b20
This commit is contained in:
Alessio Quaglino
2024-05-01 09:04:40 -07:00
committed by Copybara-Service
parent ad5bee73ef
commit 7eb8c4b9f4
5 changed files with 58 additions and 4 deletions
+3
View File
@@ -408,6 +408,9 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjsBody* body, char* error, int error_sz) {
mjs_setString(pf->name, name.c_str());
mjs_setInt(pf->elem, element.data(), element.size());
mjs_setFloat(pf->texcoord, texcoord.data(), texcoord.size());
if (!centered) {
mjs_setDouble(pf->vert, point.data(), point.size());
}
// rigid: set parent name, nothing else to do
if (rigid) {
+8 -4
View File
@@ -2372,10 +2372,14 @@ void mjCModel::CopyObjects(mjModel* m) {
m->flex_edge[2*(edge_adr+k)] = pfl->edge[k].first;
m->flex_edge[2*(edge_adr+k)+1] = pfl->edge[k].second;
// check if vertex body weldids are the same
int b1 = pfl->vertbodyid[pfl->edge[k].first];
int b2 = pfl->vertbodyid[pfl->edge[k].second];
m->flexedge_rigid[edge_adr+k] = (bodies[b1]->weldid == bodies[b2]->weldid);
if (pfl->rigid) {
m->flexedge_rigid[edge_adr+k] = 1;
} else {
// check if vertex body weldids are the same
int b1 = pfl->vertbodyid[pfl->edge[k].first];
int b2 = pfl->vertbodyid[pfl->edge[k].second];
m->flexedge_rigid[edge_adr+k] = (bodies[b1]->weldid == bodies[b2]->weldid);
}
}
// advance counters