Do not use flexedge_length if trilinear interpolation is used.

PiperOrigin-RevId: 723452451
Change-Id: I5a67fb74c13e80ae6d390694dd0c9f8c5e4d5213
This commit is contained in:
Alessio Quaglino
2025-02-05 04:08:38 -08:00
committed by Copybara-Service
parent 3235f69afc
commit 0d4bc1de00
+10 -9
View File
@@ -502,22 +502,23 @@ static void setStat(mjModel* m, mjData* d) {
// adjust body size for flex edges involving body
for (int f=0; f < m->nflex; f++) {
mjtNum meanedge = 0;
for (int e=m->flex_edgeadr[f]; e < m->flex_edgeadr[f]+m->flex_edgenum[f]; e++) {
meanedge += m->flexedge_length0[e] / m->flex_edgenum[f];
if (m->flex_interp[f]) {
continue;
if (m->flex_interp[f]) {
for (int v1=m->flex_nodeadr[f]; v1 < m->flex_nodeadr[f]+m->flex_nodenum[f]; v1++) {
for (int v2=m->flex_nodeadr[f]; v2 < m->flex_nodeadr[f]+m->flex_nodenum[f]; v2++) {
mjtNum edge = mju_dist3(d->xpos+3*m->flex_nodebodyid[v1],
d->xpos+3*m->flex_nodebodyid[v2]);
body[m->flex_nodebodyid[v1]] = mju_max(body[m->flex_nodebodyid[v1]], edge);
}
}
continue;
}
for (int e=m->flex_edgeadr[f]; e < m->flex_edgeadr[f]+m->flex_edgenum[f]; e++) {
int b1 = m->flex_vertbodyid[m->flex_vertadr[f]+m->flex_edge[2*e]];
int b2 = m->flex_vertbodyid[m->flex_vertadr[f]+m->flex_edge[2*e+1]];
body[b1] = mju_max(body[b1], m->flexedge_length0[e]);
body[b2] = mju_max(body[b2], m->flexedge_length0[e]);
}
for (int v=m->flex_nodeadr[f]; v < m->flex_nodeadr[f]+m->flex_node[f]; v++) {
body[m->flex_nodebodyid[v]] = mju_max(body[m->flex_nodebodyid[v]], meanedge);
}
}
// compute meansize, make sure all sizes are above min