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:
committed by
Copybara-Service
parent
995bbf0f0f
commit
775c45c60e
@@ -1009,35 +1009,41 @@ mjCBody& mjCBody::operator-=(const mjCBody& subtree) {
|
|||||||
// set model of this body and its subtree
|
// set model of this body and its subtree
|
||||||
void mjCBody::SetModel(mjCModel* _model) {
|
void mjCBody::SetModel(mjCModel* _model) {
|
||||||
model = _model;
|
model = _model;
|
||||||
mjSpec* origin = model->FindSpec(mjs_getString(model->spec.modelname));
|
mjSpec* origin = _model->FindSpec(compiler);
|
||||||
compiler = origin ? &origin->compiler : &model->spec.compiler;
|
compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
|
|
||||||
for (auto& body : bodies) {
|
for (auto& body : bodies) {
|
||||||
body->SetModel(_model);
|
body->SetModel(_model);
|
||||||
}
|
}
|
||||||
for (auto& frame : frames) {
|
for (auto& frame : frames) {
|
||||||
|
origin = _model->FindSpec(frame->compiler);
|
||||||
frame->model = _model;
|
frame->model = _model;
|
||||||
frame->compiler = compiler;
|
frame->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
for (auto& geom : geoms) {
|
for (auto& geom : geoms) {
|
||||||
|
origin = _model->FindSpec(geom->compiler);
|
||||||
geom->model = _model;
|
geom->model = _model;
|
||||||
geom->compiler = compiler;
|
geom->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
for (auto& joint : joints) {
|
for (auto& joint : joints) {
|
||||||
|
origin = _model->FindSpec(joint->compiler);
|
||||||
joint->model = _model;
|
joint->model = _model;
|
||||||
joint->compiler = compiler;
|
joint->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
for (auto& site : sites) {
|
for (auto& site : sites) {
|
||||||
|
origin = _model->FindSpec(site->compiler);
|
||||||
site->model = _model;
|
site->model = _model;
|
||||||
site->compiler = compiler;
|
site->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
for (auto& camera : cameras) {
|
for (auto& camera : cameras) {
|
||||||
|
origin = _model->FindSpec(camera->compiler);
|
||||||
camera->model = _model;
|
camera->model = _model;
|
||||||
camera->compiler = compiler;
|
camera->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
for (auto& light : lights) {
|
for (auto& light : lights) {
|
||||||
|
origin = _model->FindSpec(light->compiler);
|
||||||
light->model = _model;
|
light->model = _model;
|
||||||
light->compiler = compiler;
|
light->compiler = origin ? &origin->compiler : &model->spec.compiler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2342,13 +2342,13 @@ TEST_F(MujocoTest, KeyframeSizeError) {
|
|||||||
|
|
||||||
TEST_F(MujocoTest, DifferentUnitsAllowed) {
|
TEST_F(MujocoTest, DifferentUnitsAllowed) {
|
||||||
static constexpr char gchild_xml[] = R"(
|
static constexpr char gchild_xml[] = R"(
|
||||||
<mujoco model="gchild">
|
<mujoco>
|
||||||
<compiler angle="radian"/>
|
<compiler angle="degree"/>
|
||||||
|
|
||||||
<worldbody>
|
<worldbody>
|
||||||
<body name="gchild" euler="-1.5707963 0 0">
|
<body name="gchild" euler="-90 0 0">
|
||||||
<geom type="box" size="1 1 1"/>
|
<geom type="box" size="1 1 1"/>
|
||||||
<joint name="gchild_joint" range="-3.1415926 3.1415926"/>
|
<joint name="gchild_joint" range="-180 180"/>
|
||||||
</body>
|
</body>
|
||||||
</worldbody>
|
</worldbody>
|
||||||
</mujoco>
|
</mujoco>
|
||||||
|
|||||||
Reference in New Issue
Block a user