Add missing default namespaces.
Fixes #2162. PiperOrigin-RevId: 688575676 Change-Id: I6c43e33ebead68dece0f779e6f031e90a5e19096
This commit is contained in:
committed by
Copybara-Service
parent
708fd83a49
commit
4a3f77dd1f
+10
-40
@@ -696,7 +696,7 @@ void mjCBase::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
if (!classname.empty() && m != model) {
|
||||
if (!classname.empty() && classname != "main" && m != model) {
|
||||
classname = m->prefix + classname + m->suffix;
|
||||
}
|
||||
}
|
||||
@@ -1014,12 +1014,7 @@ void mjCBody::NameSpace(const mjCModel* m) {
|
||||
|
||||
// apply prefix and suffix, propagate to all descendents or only to child bodies
|
||||
void mjCBody::NameSpace_(const mjCModel* m, bool propagate) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
if (!classname.empty() && m != model) {
|
||||
classname = m->prefix + classname + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
if (!plugin_instance_name.empty()) {
|
||||
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
||||
}
|
||||
@@ -2257,12 +2252,7 @@ void mjCGeom::CopyFromSpec() {
|
||||
|
||||
|
||||
void mjCGeom::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
if (!classname.empty() && m != model) {
|
||||
classname = m->prefix + classname + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
if (!spec_material_.empty() && model != m) {
|
||||
spec_material_ = m->prefix + spec_material_ + m->suffix;
|
||||
}
|
||||
@@ -3219,12 +3209,7 @@ void mjCCamera::PointToLocal() {
|
||||
|
||||
|
||||
void mjCCamera::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
if (!classname.empty() && m != model) {
|
||||
classname = m->prefix + classname + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
if (!spec_targetbody_.empty()) {
|
||||
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
||||
}
|
||||
@@ -3370,12 +3355,7 @@ void mjCLight::PointToLocal() {
|
||||
|
||||
|
||||
void mjCLight::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
if (!classname.empty() && m != model) {
|
||||
classname = m->prefix + classname + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
if (!spec_targetbody_.empty()) {
|
||||
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
||||
}
|
||||
@@ -4565,9 +4545,7 @@ void mjCMaterial::CopyFromSpec() {
|
||||
|
||||
|
||||
void mjCMaterial::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
for (int i=0; i<mjNTEXROLE; i++) {
|
||||
if (!spec_textures_[i].empty() && model != m) {
|
||||
spec_textures_[i] = m->prefix + spec_textures_[i] + m->suffix;
|
||||
@@ -4651,9 +4629,7 @@ void mjCPair::PointToLocal() {
|
||||
|
||||
|
||||
void mjCPair::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
prefix = m->prefix;
|
||||
suffix = m->suffix;
|
||||
}
|
||||
@@ -5009,9 +4985,7 @@ void mjCEquality::PointToLocal() {
|
||||
|
||||
|
||||
void mjCEquality::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
spec_name1_ = m->prefix + spec_name1_ + m->suffix;
|
||||
spec_name2_ = m->prefix + spec_name2_ + m->suffix;
|
||||
}
|
||||
@@ -5179,9 +5153,7 @@ void mjCTendon::PointToLocal() {
|
||||
|
||||
|
||||
void mjCTendon::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
prefix = m->prefix;
|
||||
suffix = m->suffix;
|
||||
}
|
||||
@@ -5699,9 +5671,7 @@ void mjCActuator::PointToLocal() {
|
||||
|
||||
|
||||
void mjCActuator::NameSpace(const mjCModel* m) {
|
||||
if (!name.empty()) {
|
||||
name = m->prefix + name + m->suffix;
|
||||
}
|
||||
mjCBase::NameSpace(m);
|
||||
if (!plugin_instance_name.empty()) {
|
||||
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
// Tests for xml/xml_native_writer.cc.
|
||||
|
||||
#include <memory>
|
||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
@@ -1476,5 +1477,51 @@ TEST_F(DecompilerTest, VeryLargeNumbers) {
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(XMLWriterTest, ExpandAttach) {
|
||||
static constexpr char xml_parent[] = R"(
|
||||
<mujoco>
|
||||
<asset>
|
||||
<model name="b" file="b.xml" />
|
||||
</asset>
|
||||
|
||||
<worldbody>
|
||||
<attach model="b" body="b" prefix="b" />
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
static constexpr char xml_child[] = R"(
|
||||
<mujoco>
|
||||
<default>
|
||||
<default class="b"/>
|
||||
</default>
|
||||
|
||||
<worldbody>
|
||||
<body name="b">
|
||||
<geom type="box" size="0.1 0.1 0.1"/>
|
||||
<joint name="b"/>
|
||||
</body>
|
||||
</worldbody>
|
||||
|
||||
<actuator>
|
||||
<position joint="b" class="b"/>
|
||||
</actuator>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
auto vfs = std::make_unique<mjVFS>();
|
||||
mj_defaultVFS(vfs.get());
|
||||
mj_addBufferVFS(vfs.get(), "b.xml", xml_child, sizeof(xml_child));
|
||||
|
||||
std::array<char, 1024> er;
|
||||
mjModel* m = LoadModelFromString(xml_parent, er.data(), er.size(), vfs.get());
|
||||
ASSERT_THAT(m, NotNull()) << er.data();
|
||||
|
||||
std::string saved_xml = SaveAndReadXml(m);
|
||||
EXPECT_THAT(saved_xml, HasSubstr("class=\"bb\""));
|
||||
mj_deleteModel(m);
|
||||
mj_deleteVFS(vfs.get());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace mujoco
|
||||
|
||||
Reference in New Issue
Block a user