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()) {
|
if (!name.empty()) {
|
||||||
name = m->prefix + name + m->suffix;
|
name = m->prefix + name + m->suffix;
|
||||||
}
|
}
|
||||||
if (!classname.empty() && m != model) {
|
if (!classname.empty() && classname != "main" && m != model) {
|
||||||
classname = m->prefix + classname + m->suffix;
|
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
|
// apply prefix and suffix, propagate to all descendents or only to child bodies
|
||||||
void mjCBody::NameSpace_(const mjCModel* m, bool propagate) {
|
void mjCBody::NameSpace_(const mjCModel* m, bool propagate) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
if (!classname.empty() && m != model) {
|
|
||||||
classname = m->prefix + classname + m->suffix;
|
|
||||||
}
|
|
||||||
if (!plugin_instance_name.empty()) {
|
if (!plugin_instance_name.empty()) {
|
||||||
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
||||||
}
|
}
|
||||||
@@ -2257,12 +2252,7 @@ void mjCGeom::CopyFromSpec() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCGeom::NameSpace(const mjCModel* m) {
|
void mjCGeom::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
if (!classname.empty() && m != model) {
|
|
||||||
classname = m->prefix + classname + m->suffix;
|
|
||||||
}
|
|
||||||
if (!spec_material_.empty() && model != m) {
|
if (!spec_material_.empty() && model != m) {
|
||||||
spec_material_ = m->prefix + spec_material_ + m->suffix;
|
spec_material_ = m->prefix + spec_material_ + m->suffix;
|
||||||
}
|
}
|
||||||
@@ -3219,12 +3209,7 @@ void mjCCamera::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCCamera::NameSpace(const mjCModel* m) {
|
void mjCCamera::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
if (!classname.empty() && m != model) {
|
|
||||||
classname = m->prefix + classname + m->suffix;
|
|
||||||
}
|
|
||||||
if (!spec_targetbody_.empty()) {
|
if (!spec_targetbody_.empty()) {
|
||||||
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
||||||
}
|
}
|
||||||
@@ -3370,12 +3355,7 @@ void mjCLight::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCLight::NameSpace(const mjCModel* m) {
|
void mjCLight::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
if (!classname.empty() && m != model) {
|
|
||||||
classname = m->prefix + classname + m->suffix;
|
|
||||||
}
|
|
||||||
if (!spec_targetbody_.empty()) {
|
if (!spec_targetbody_.empty()) {
|
||||||
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
spec_targetbody_ = m->prefix + spec_targetbody_ + m->suffix;
|
||||||
}
|
}
|
||||||
@@ -4565,9 +4545,7 @@ void mjCMaterial::CopyFromSpec() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCMaterial::NameSpace(const mjCModel* m) {
|
void mjCMaterial::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
for (int i=0; i<mjNTEXROLE; i++) {
|
for (int i=0; i<mjNTEXROLE; i++) {
|
||||||
if (!spec_textures_[i].empty() && model != m) {
|
if (!spec_textures_[i].empty() && model != m) {
|
||||||
spec_textures_[i] = m->prefix + spec_textures_[i] + m->suffix;
|
spec_textures_[i] = m->prefix + spec_textures_[i] + m->suffix;
|
||||||
@@ -4651,9 +4629,7 @@ void mjCPair::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCPair::NameSpace(const mjCModel* m) {
|
void mjCPair::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
prefix = m->prefix;
|
prefix = m->prefix;
|
||||||
suffix = m->suffix;
|
suffix = m->suffix;
|
||||||
}
|
}
|
||||||
@@ -5009,9 +4985,7 @@ void mjCEquality::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCEquality::NameSpace(const mjCModel* m) {
|
void mjCEquality::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
spec_name1_ = m->prefix + spec_name1_ + m->suffix;
|
spec_name1_ = m->prefix + spec_name1_ + m->suffix;
|
||||||
spec_name2_ = m->prefix + spec_name2_ + m->suffix;
|
spec_name2_ = m->prefix + spec_name2_ + m->suffix;
|
||||||
}
|
}
|
||||||
@@ -5179,9 +5153,7 @@ void mjCTendon::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCTendon::NameSpace(const mjCModel* m) {
|
void mjCTendon::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
prefix = m->prefix;
|
prefix = m->prefix;
|
||||||
suffix = m->suffix;
|
suffix = m->suffix;
|
||||||
}
|
}
|
||||||
@@ -5699,9 +5671,7 @@ void mjCActuator::PointToLocal() {
|
|||||||
|
|
||||||
|
|
||||||
void mjCActuator::NameSpace(const mjCModel* m) {
|
void mjCActuator::NameSpace(const mjCModel* m) {
|
||||||
if (!name.empty()) {
|
mjCBase::NameSpace(m);
|
||||||
name = m->prefix + name + m->suffix;
|
|
||||||
}
|
|
||||||
if (!plugin_instance_name.empty()) {
|
if (!plugin_instance_name.empty()) {
|
||||||
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
plugin_instance_name = m->prefix + plugin_instance_name + m->suffix;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
// Tests for xml/xml_native_writer.cc.
|
// Tests for xml/xml_native_writer.cc.
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -1476,5 +1477,51 @@ TEST_F(DecompilerTest, VeryLargeNumbers) {
|
|||||||
mj_deleteModel(model);
|
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
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|||||||
Reference in New Issue
Block a user