Do not lookup compiler options by name when attaching.

Also, fix a pre-existing bug that caused incorrect compiler option propagation with nested attachments.

Fixes #2480.

PiperOrigin-RevId: 736156202
Change-Id: Ib430493e8c60556c2312603198587b39de9b8a4a
This commit is contained in:
Alessio Quaglino
2025-03-12 09:17:45 -07:00
committed by Copybara-Service
parent 995bbf0f0f
commit 775c45c60e
2 changed files with 17 additions and 11 deletions
+13 -7
View File
@@ -1009,35 +1009,41 @@ mjCBody& mjCBody::operator-=(const mjCBody& subtree) {
// set model of this body and its subtree
void mjCBody::SetModel(mjCModel* _model) {
model = _model;
mjSpec* origin = model->FindSpec(mjs_getString(model->spec.modelname));
mjSpec* origin = _model->FindSpec(compiler);
compiler = origin ? &origin->compiler : &model->spec.compiler;
for (auto& body : bodies) {
body->SetModel(_model);
}
for (auto& frame : frames) {
origin = _model->FindSpec(frame->compiler);
frame->model = _model;
frame->compiler = compiler;
frame->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
for (auto& geom : geoms) {
origin = _model->FindSpec(geom->compiler);
geom->model = _model;
geom->compiler = compiler;
geom->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
for (auto& joint : joints) {
origin = _model->FindSpec(joint->compiler);
joint->model = _model;
joint->compiler = compiler;
joint->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
for (auto& site : sites) {
origin = _model->FindSpec(site->compiler);
site->model = _model;
site->compiler = compiler;
site->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
for (auto& camera : cameras) {
origin = _model->FindSpec(camera->compiler);
camera->model = _model;
camera->compiler = compiler;
camera->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
for (auto& light : lights) {
origin = _model->FindSpec(light->compiler);
light->model = _model;
light->compiler = compiler;
light->compiler = origin ? &origin->compiler : &model->spec.compiler;
}
}
+4 -4
View File
@@ -2342,13 +2342,13 @@ TEST_F(MujocoTest, KeyframeSizeError) {
TEST_F(MujocoTest, DifferentUnitsAllowed) {
static constexpr char gchild_xml[] = R"(
<mujoco model="gchild">
<compiler angle="radian"/>
<mujoco>
<compiler angle="degree"/>
<worldbody>
<body name="gchild" euler="-1.5707963 0 0">
<body name="gchild" euler="-90 0 0">
<geom type="box" size="1 1 1"/>
<joint name="gchild_joint" range="-3.1415926 3.1415926"/>
<joint name="gchild_joint" range="-180 180"/>
</body>
</worldbody>
</mujoco>