Remove mjCBase::def and use mjCBase::classname instead.
PiperOrigin-RevId: 650629741 Change-Id: I10a9955b99e4a5ff0b5a742e22635ccad1455f1a
This commit is contained in:
committed by
Copybara-Service
parent
c5f958bdff
commit
e0d33eb1d0
@@ -460,7 +460,9 @@ mjSpec* mjs_getSpec(mjsBody* body) {
|
|||||||
|
|
||||||
// get default
|
// get default
|
||||||
mjsDefault* mjs_getDefault(mjsElement* element) {
|
mjsDefault* mjs_getDefault(mjsElement* element) {
|
||||||
return &(static_cast<mjCBase*>(element)->def->spec);
|
mjCModel* model = static_cast<mjCBase*>(element)->model;
|
||||||
|
std::string classname = static_cast<mjCBase*>(element)->classname;
|
||||||
|
return &(model->def_map[classname]->spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -569,7 +571,7 @@ int mjs_getId(mjsElement* element) {
|
|||||||
// set default
|
// set default
|
||||||
void mjs_setDefault(mjsElement* element, mjsDefault* defspec) {
|
void mjs_setDefault(mjsElement* element, mjsDefault* defspec) {
|
||||||
mjCBase* baseC = static_cast<mjCBase*>(element);
|
mjCBase* baseC = static_cast<mjCBase*>(element);
|
||||||
baseC->def = static_cast<mjCDef*>(defspec->element);
|
baseC->classname = static_cast<mjCDef*>(defspec->element)->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -674,7 +674,7 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjsBody* body, char* error, int err
|
|||||||
|
|
||||||
// create tendon
|
// create tendon
|
||||||
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON);
|
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON);
|
||||||
ten->def = model->Default();
|
ten->classname = model->Default()->name;
|
||||||
mju::sprintf_arr(txt, "%sT%d_%d_%d", prefix.c_str(), i, ix, iy);
|
mju::sprintf_arr(txt, "%sT%d_%d_%d", prefix.c_str(), i, ix, iy);
|
||||||
ten->name = txt;
|
ten->name = txt;
|
||||||
ten->WrapSite(txt1);
|
ten->WrapSite(txt1);
|
||||||
@@ -1131,7 +1131,7 @@ bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int erro
|
|||||||
|
|
||||||
// fixed tendon for all joints
|
// fixed tendon for all joints
|
||||||
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON);
|
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON);
|
||||||
ten->def = model->Default();
|
ten->classname = model->Default()->name;
|
||||||
mju::sprintf_arr(txt, "%sT", prefix.c_str());
|
mju::sprintf_arr(txt, "%sT", prefix.c_str());
|
||||||
ten->name = txt;
|
ten->name = txt;
|
||||||
|
|
||||||
@@ -1245,7 +1245,7 @@ void mjCComposite::MakeShear(mjCModel* model) {
|
|||||||
|
|
||||||
// create tendon
|
// create tendon
|
||||||
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_SHEAR);
|
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_SHEAR);
|
||||||
ten->def = model->Default();
|
ten->classname = model->Default()->name;
|
||||||
ten->WrapSite(txt1);
|
ten->WrapSite(txt1);
|
||||||
ten->WrapSite(txt2);
|
ten->WrapSite(txt2);
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = (_def ? _def->name : (_model ? "main" : ""));
|
||||||
|
|
||||||
// in case this body is not compiled
|
// in case this body is not compiled
|
||||||
CopyFromSpec();
|
CopyFromSpec();
|
||||||
@@ -1424,7 +1424,7 @@ void mjCMesh::Process() {
|
|||||||
// apply formula, accumulate
|
// apply formula, accumulate
|
||||||
GetVolumeRef(type) += vol;
|
GetVolumeRef(type) += vol;
|
||||||
for (int j=0; j<6; j++) {
|
for (int j=0; j<6; j++) {
|
||||||
P[j] += def->Geom().density*vol /
|
P[j] += model->def_map[classname]->Geom().density*vol /
|
||||||
(type==mjINERTIA_SHELL ? 12 : 20) * (
|
(type==mjINERTIA_SHELL ? 12 : 20) * (
|
||||||
2*(D[k[j][0]] * D[k[j][1]] +
|
2*(D[k[j][0]] * D[k[j][1]] +
|
||||||
E[k[j][0]] * E[k[j][1]] +
|
E[k[j][0]] * E[k[j][1]] +
|
||||||
@@ -1465,7 +1465,7 @@ void mjCMesh::Process() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compute sizes of equivalent inertia box
|
// compute sizes of equivalent inertia box
|
||||||
double mass = GetVolumeRef(type) * def->Geom().density;
|
double mass = GetVolumeRef(type) * model->def_map[classname]->Geom().density;
|
||||||
double* boxsz = GetInertiaBoxPtr(type);
|
double* boxsz = GetInertiaBoxPtr(type);
|
||||||
boxsz[0] = sqrt(6*(eigval[1]+eigval[2]-eigval[0])/mass)/2;
|
boxsz[0] = sqrt(6*(eigval[1]+eigval[2]-eigval[0])/mass)/2;
|
||||||
boxsz[1] = sqrt(6*(eigval[0]+eigval[2]-eigval[1])/mass)/2;
|
boxsz[1] = sqrt(6*(eigval[0]+eigval[2]-eigval[1])/mass)/2;
|
||||||
|
|||||||
+7
-23
@@ -110,7 +110,8 @@ mjCModel::mjCModel() {
|
|||||||
world->parentid = 0;
|
world->parentid = 0;
|
||||||
world->weldid = 0;
|
world->weldid = 0;
|
||||||
world->name = "world";
|
world->name = "world";
|
||||||
world->def = defaults_[0];
|
world->classname = "main";
|
||||||
|
def_map["main"] = Default();
|
||||||
bodies_.push_back(world);
|
bodies_.push_back(world);
|
||||||
|
|
||||||
// create mjCBase lists from children lists
|
// create mjCBase lists from children lists
|
||||||
@@ -146,6 +147,9 @@ mjCModel& mjCModel::operator=(const mjCModel& other) {
|
|||||||
// add everything else
|
// add everything else
|
||||||
*this += other;
|
*this += other;
|
||||||
|
|
||||||
|
// update the default map
|
||||||
|
def_map["main"] = Default();
|
||||||
|
|
||||||
// copy name maps
|
// copy name maps
|
||||||
for (int i=0; i<mjNOBJECT; i++) {
|
for (int i=0; i<mjNOBJECT; i++) {
|
||||||
ids[i] = other.ids[i];
|
ids[i] = other.ids[i];
|
||||||
@@ -179,7 +183,6 @@ void mjCModel::CopyList(std::vector<T*>& dest,
|
|||||||
// copy the element from the other model to this model
|
// copy the element from the other model to this model
|
||||||
dest.push_back(candidate);
|
dest.push_back(candidate);
|
||||||
dest.back()->model = this;
|
dest.back()->model = this;
|
||||||
dest.back()->def = defaults[def_map[candidate->def]];
|
|
||||||
dest.back()->id = -1;
|
dest.back()->id = -1;
|
||||||
}
|
}
|
||||||
if (!dest.empty()) {
|
if (!dest.empty()) {
|
||||||
@@ -250,26 +253,6 @@ mjCModel& mjCModel::operator+=(const mjCModel& other) {
|
|||||||
plugins_ = other.plugins_;
|
plugins_ = other.plugins_;
|
||||||
active_plugins_ = other.active_plugins_;
|
active_plugins_ = other.active_plugins_;
|
||||||
|
|
||||||
// update defaults for the copied objects
|
|
||||||
for (int i = 1; i < other.bodies_.size(); i++) {
|
|
||||||
bodies_[i]->def = defaults_[def_map[other.bodies_[i]->def]];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < other.joints_.size(); i++) {
|
|
||||||
joints_[i]->def = defaults_[def_map[other.joints_[i]->def]];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < other.geoms_.size(); i++) {
|
|
||||||
geoms_[i]->def = defaults_[def_map[other.geoms_[i]->def]];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < other.sites_.size(); i++) {
|
|
||||||
sites_[i]->def = defaults_[def_map[other.sites_[i]->def]];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < other.cameras_.size(); i++) {
|
|
||||||
cameras_[i]->def = defaults_[def_map[other.cameras_[i]->def]];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < other.lights_.size(); i++) {
|
|
||||||
lights_[i]->def= defaults_[def_map[other.lights_[i]->def]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore to the original state
|
// restore to the original state
|
||||||
if (!compiled) {
|
if (!compiled) {
|
||||||
resetlist(bodies_);
|
resetlist(bodies_);
|
||||||
@@ -573,7 +556,7 @@ template <class T>
|
|||||||
T* mjCModel::AddObjectDefault(vector<T*>& list, string type, mjCDef* def) {
|
T* mjCModel::AddObjectDefault(vector<T*>& list, string type, mjCDef* def) {
|
||||||
T* obj = new T(this, def ? def : defaults_[0]);
|
T* obj = new T(this, def ? def : defaults_[0]);
|
||||||
obj->id = (int)list.size();
|
obj->id = (int)list.size();
|
||||||
obj->def = def ? def : defaults_[0];
|
obj->classname = def ? def->name : "main";
|
||||||
list.push_back(obj);
|
list.push_back(obj);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
@@ -829,6 +812,7 @@ mjCDef* mjCModel::AddDefault(string name, mjCDef* parent) {
|
|||||||
def->parent = parent;
|
def->parent = parent;
|
||||||
def->name = name;
|
def->name = name;
|
||||||
def->child.clear();
|
def->child.clear();
|
||||||
|
def_map[name] = def;
|
||||||
|
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,6 +269,9 @@ class mjCModel : public mjCModel_, private mjSpec {
|
|||||||
void SaveState(const mjData* d);
|
void SaveState(const mjData* d);
|
||||||
void RestoreState(const mjModel* m, mjData** dest);
|
void RestoreState(const mjModel* m, mjData** dest);
|
||||||
|
|
||||||
|
// map from default class name to default class pointer
|
||||||
|
std::map<std::string, mjCDef*> def_map;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// settings for each defaults class
|
// settings for each defaults class
|
||||||
std::vector<mjCDef*> defaults_;
|
std::vector<mjCDef*> defaults_;
|
||||||
|
|||||||
+17
-31
@@ -643,7 +643,6 @@ mjCBase::mjCBase() {
|
|||||||
id = -1;
|
id = -1;
|
||||||
info = "";
|
info = "";
|
||||||
model = 0;
|
model = 0;
|
||||||
def = 0;
|
|
||||||
frame = nullptr;
|
frame = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -774,9 +773,6 @@ mjCBody& mjCBody::operator=(const mjCBody& other) {
|
|||||||
lights.clear();
|
lights.clear();
|
||||||
id = other.id;
|
id = other.id;
|
||||||
|
|
||||||
// copy defaults
|
|
||||||
def = other.def;
|
|
||||||
|
|
||||||
// add elements to lists
|
// add elements to lists
|
||||||
*this += other;
|
*this += other;
|
||||||
}
|
}
|
||||||
@@ -884,7 +880,7 @@ void mjCBody::CopyList(std::vector<T*>& dst, const std::vector<T*>& src,
|
|||||||
dst.back()->body = this;
|
dst.back()->body = this;
|
||||||
dst.back()->model = model;
|
dst.back()->model = model;
|
||||||
dst.back()->id = -1;
|
dst.back()->id = -1;
|
||||||
dst.back()->def = src[i]->def;
|
dst.back()->classname = src[i]->classname;
|
||||||
|
|
||||||
// assign dst frame to src frame
|
// assign dst frame to src frame
|
||||||
dst.back()->frame = src[i]->frame ? frames[fmap[src[i]->frame]] : nullptr;
|
dst.back()->frame = src[i]->frame ? frames[fmap[src[i]->frame]] : nullptr;
|
||||||
@@ -1007,7 +1003,7 @@ mjCBody* mjCBody::AddBody(mjCDef* _def) {
|
|||||||
mjCBody* obj = new mjCBody(model);
|
mjCBody* obj = new mjCBody(model);
|
||||||
|
|
||||||
// handle def recursion (i.e. childclass)
|
// handle def recursion (i.e. childclass)
|
||||||
obj->def = _def ? _def : def;
|
obj->classname = _def ? _def->name : classname;
|
||||||
|
|
||||||
bodies.push_back(obj);
|
bodies.push_back(obj);
|
||||||
return obj;
|
return obj;
|
||||||
@@ -1042,7 +1038,7 @@ mjCJoint* mjCBody::AddFreeJoint() {
|
|||||||
// create new joint and add it to body
|
// create new joint and add it to body
|
||||||
mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
|
mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
|
||||||
// create joint
|
// create joint
|
||||||
mjCJoint* obj = new mjCJoint(model, _def ? _def : def);
|
mjCJoint* obj = new mjCJoint(model, _def ? _def : model->def_map[classname]);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
@@ -1056,7 +1052,7 @@ mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
|
|||||||
// create new geom and add it to body
|
// create new geom and add it to body
|
||||||
mjCGeom* mjCBody::AddGeom(mjCDef* _def) {
|
mjCGeom* mjCBody::AddGeom(mjCDef* _def) {
|
||||||
// create geom
|
// create geom
|
||||||
mjCGeom* obj = new mjCGeom(model, _def ? _def : def);
|
mjCGeom* obj = new mjCGeom(model, _def ? _def : model->def_map[classname]);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
@@ -1070,7 +1066,7 @@ mjCGeom* mjCBody::AddGeom(mjCDef* _def) {
|
|||||||
// create new site and add it to body
|
// create new site and add it to body
|
||||||
mjCSite* mjCBody::AddSite(mjCDef* _def) {
|
mjCSite* mjCBody::AddSite(mjCDef* _def) {
|
||||||
// create site
|
// create site
|
||||||
mjCSite* obj = new mjCSite(model, _def ? _def : def);
|
mjCSite* obj = new mjCSite(model, _def ? _def : model->def_map[classname]);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
@@ -1084,7 +1080,7 @@ mjCSite* mjCBody::AddSite(mjCDef* _def) {
|
|||||||
// create new camera and add it to body
|
// create new camera and add it to body
|
||||||
mjCCamera* mjCBody::AddCamera(mjCDef* _def) {
|
mjCCamera* mjCBody::AddCamera(mjCDef* _def) {
|
||||||
// create camera
|
// create camera
|
||||||
mjCCamera* obj = new mjCCamera(model, _def ? _def : def);
|
mjCCamera* obj = new mjCCamera(model, _def ? _def : model->def_map[classname]);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
@@ -1098,7 +1094,7 @@ mjCCamera* mjCBody::AddCamera(mjCDef* _def) {
|
|||||||
// create new light and add it to body
|
// create new light and add it to body
|
||||||
mjCLight* mjCBody::AddLight(mjCDef* _def) {
|
mjCLight* mjCBody::AddLight(mjCDef* _def) {
|
||||||
// create light
|
// create light
|
||||||
mjCLight* obj = new mjCLight(model, _def ? _def : def);
|
mjCLight* obj = new mjCLight(model, _def ? _def : model->def_map[classname]);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
@@ -1691,8 +1687,7 @@ mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -1899,8 +1894,7 @@ mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -2542,8 +2536,7 @@ mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2688,8 +2681,7 @@ mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -2842,8 +2834,7 @@ mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
CopyFromSpec();
|
CopyFromSpec();
|
||||||
@@ -3887,8 +3878,7 @@ mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
|
|
||||||
@@ -3974,8 +3964,7 @@ mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -4335,8 +4324,7 @@ mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -4497,8 +4485,7 @@ mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// point to local
|
// point to local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -4975,8 +4962,7 @@ mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
|
|||||||
|
|
||||||
// set model, def
|
// set model, def
|
||||||
model = _model;
|
model = _model;
|
||||||
def = (_def ? _def : (_model ? _model->Default() : 0));
|
classname = _def ? _def->name : "main";
|
||||||
classname = def ? def->name : "";
|
|
||||||
|
|
||||||
// in case this actuator is not compiled
|
// in case this actuator is not compiled
|
||||||
CopyFromSpec();
|
CopyFromSpec();
|
||||||
|
|||||||
@@ -202,7 +202,6 @@ class mjCBase : public mjCBase_ {
|
|||||||
// Copy assignment
|
// Copy assignment
|
||||||
mjCBase& operator=(const mjCBase& other);
|
mjCBase& operator=(const mjCBase& other);
|
||||||
|
|
||||||
mjCDef* def; // defaults class used to init this object
|
|
||||||
mjCFrame* frame; // pointer to frame transformation
|
mjCFrame* frame; // pointer to frame transformation
|
||||||
mjCModel* model; // pointer to model that created object
|
mjCModel* model; // pointer to model that created object
|
||||||
|
|
||||||
|
|||||||
@@ -1472,7 +1472,7 @@ void mjXWriter::Asset(XMLElement* root) {
|
|||||||
// create element and write
|
// create element and write
|
||||||
mjCMaterial* pmat = (mjCMaterial*)model->GetObject(mjOBJ_MATERIAL, i);
|
mjCMaterial* pmat = (mjCMaterial*)model->GetObject(mjOBJ_MATERIAL, i);
|
||||||
elem = InsertEnd(section, "material");
|
elem = InsertEnd(section, "material");
|
||||||
OneMaterial(elem, pmat, pmat->def);
|
OneMaterial(elem, pmat, model->def_map[pmat->classname]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write meshes
|
// write meshes
|
||||||
@@ -1485,7 +1485,7 @@ void mjXWriter::Asset(XMLElement* root) {
|
|||||||
OnePlugin(InsertEnd(elem, "plugin"), &pmesh->plugin);
|
OnePlugin(InsertEnd(elem, "plugin"), &pmesh->plugin);
|
||||||
} else{
|
} else{
|
||||||
elem = InsertEnd(section, "mesh");
|
elem = InsertEnd(section, "mesh");
|
||||||
OneMesh(elem, pmesh, pmesh->def);
|
OneMesh(elem, pmesh, model->def_map[pmesh->classname]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1543,7 +1543,9 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
// write body attributes and inertial
|
// write body attributes and inertial
|
||||||
else if (body!=model->GetWorld()) {
|
else if (body!=model->GetWorld()) {
|
||||||
WriteAttrTxt(elem, "name", body->name);
|
WriteAttrTxt(elem, "name", body->name);
|
||||||
WriteAttrTxt(elem, "childclass", body->classname);
|
if (childclass != body->classname && body->classname != "main") {
|
||||||
|
WriteAttrTxt(elem, "childclass", body->classname);
|
||||||
|
}
|
||||||
|
|
||||||
// write pos if it's not {0, 0, 0}
|
// write pos if it's not {0, 0, 0}
|
||||||
if (body->pos[0] || body->pos[1] || body->pos[2]) {
|
if (body->pos[0] || body->pos[1] || body->pos[2]) {
|
||||||
@@ -1578,7 +1580,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
std::string classname = body->joints[i]->frame && !body->joints[i]->frame->classname.empty()
|
std::string classname = body->joints[i]->frame && !body->joints[i]->frame->classname.empty()
|
||||||
? body->joints[i]->frame->classname
|
? body->joints[i]->frame->classname
|
||||||
: body->classname;
|
: body->classname;
|
||||||
OneJoint(InsertEnd(celem, "joint"), body->joints[i], body->joints[i]->def,
|
OneJoint(InsertEnd(celem, "joint"), body->joints[i],
|
||||||
|
model->def_map[body->joints[i]->classname],
|
||||||
classname.empty() ? childclass : classname);
|
classname.empty() ? childclass : classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1588,7 +1591,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
std::string classname = body->geoms[i]->frame && !body->geoms[i]->frame->classname.empty()
|
std::string classname = body->geoms[i]->frame && !body->geoms[i]->frame->classname.empty()
|
||||||
? body->geoms[i]->frame->classname
|
? body->geoms[i]->frame->classname
|
||||||
: body->classname;
|
: body->classname;
|
||||||
OneGeom(InsertEnd(celem, "geom"), body->geoms[i], body->geoms[i]->def,
|
OneGeom(InsertEnd(celem, "geom"), body->geoms[i],
|
||||||
|
model->def_map[body->geoms[i]->classname],
|
||||||
classname.empty() ? childclass : classname);
|
classname.empty() ? childclass : classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1598,7 +1602,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
std::string classname = body->sites[i]->frame && !body->sites[i]->frame->classname.empty()
|
std::string classname = body->sites[i]->frame && !body->sites[i]->frame->classname.empty()
|
||||||
? body->sites[i]->frame->classname
|
? body->sites[i]->frame->classname
|
||||||
: body->classname;
|
: body->classname;
|
||||||
OneSite(InsertEnd(celem, "site"), body->sites[i], body->sites[i]->def,
|
OneSite(InsertEnd(celem, "site"), body->sites[i],
|
||||||
|
model->def_map[body->sites[i]->classname],
|
||||||
classname.empty() ? childclass : classname);
|
classname.empty() ? childclass : classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1608,7 +1613,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
std::string classname = body->cameras[i]->frame && !body->cameras[i]->frame->classname.empty()
|
std::string classname = body->cameras[i]->frame && !body->cameras[i]->frame->classname.empty()
|
||||||
? body->cameras[i]->frame->classname
|
? body->cameras[i]->frame->classname
|
||||||
: body->classname;
|
: body->classname;
|
||||||
OneCamera(InsertEnd(celem, "camera"), body->cameras[i], body->cameras[i]->def,
|
OneCamera(InsertEnd(celem, "camera"), body->cameras[i],
|
||||||
|
model->def_map[body->cameras[i]->classname],
|
||||||
classname.empty() ? childclass : classname);
|
classname.empty() ? childclass : classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1618,7 +1624,8 @@ void mjXWriter::Body(XMLElement* elem, mjCBody* body, std::string_view childclas
|
|||||||
std::string classname = body->lights[i]->frame && !body->lights[i]->frame->classname.empty()
|
std::string classname = body->lights[i]->frame && !body->lights[i]->frame->classname.empty()
|
||||||
? body->lights[i]->frame->classname
|
? body->lights[i]->frame->classname
|
||||||
: body->classname;
|
: body->classname;
|
||||||
OneLight(InsertEnd(celem, "light"), body->lights[i], body->lights[i]->def,
|
OneLight(InsertEnd(celem, "light"), body->lights[i],
|
||||||
|
model->def_map[body->lights[i]->classname],
|
||||||
classname.empty() ? childclass : classname);
|
classname.empty() ? childclass : classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1660,7 +1667,7 @@ void mjXWriter::Contact(XMLElement* root) {
|
|||||||
// create element and write
|
// create element and write
|
||||||
mjCPair* ppair = (mjCPair*)model->GetObject(mjOBJ_PAIR, i);
|
mjCPair* ppair = (mjCPair*)model->GetObject(mjOBJ_PAIR, i);
|
||||||
elem = InsertEnd(section, "pair");
|
elem = InsertEnd(section, "pair");
|
||||||
OnePair(elem, ppair, ppair->def);
|
OnePair(elem, ppair, model->def_map[ppair->classname]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write all exclude pairs
|
// write all exclude pairs
|
||||||
@@ -1693,7 +1700,7 @@ void mjXWriter::Equality(XMLElement* root) {
|
|||||||
for (int i=0; i<num; i++) {
|
for (int i=0; i<num; i++) {
|
||||||
mjCEquality* peq = (mjCEquality*)model->GetObject(mjOBJ_EQUALITY, i);
|
mjCEquality* peq = (mjCEquality*)model->GetObject(mjOBJ_EQUALITY, i);
|
||||||
XMLElement* elem = InsertEnd(section, FindValue(equality_map, equality_sz, peq->type).c_str());
|
XMLElement* elem = InsertEnd(section, FindValue(equality_map, equality_sz, peq->type).c_str());
|
||||||
OneEquality(elem, peq, peq->def);
|
OneEquality(elem, peq, model->def_map[peq->classname]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1754,7 +1761,7 @@ void mjXWriter::Tendon(XMLElement* root) {
|
|||||||
}
|
}
|
||||||
XMLElement* elem = InsertEnd(section,
|
XMLElement* elem = InsertEnd(section,
|
||||||
pten->GetWrap(0)->type==mjWRAP_JOINT ? "fixed" : "spatial");
|
pten->GetWrap(0)->type==mjWRAP_JOINT ? "fixed" : "spatial");
|
||||||
OneTendon(elem, pten, pten->def);
|
OneTendon(elem, pten, model->def_map[pten->classname]);
|
||||||
|
|
||||||
// write wraps
|
// write wraps
|
||||||
XMLElement* wrap;
|
XMLElement* wrap;
|
||||||
@@ -1815,7 +1822,7 @@ void mjXWriter::Actuator(XMLElement* root) {
|
|||||||
} else {
|
} else {
|
||||||
elem = InsertEnd(section, "general");
|
elem = InsertEnd(section, "general");
|
||||||
}
|
}
|
||||||
OneActuator(elem, pact, pact->def);
|
OneActuator(elem, pact, model->def_map[pact->classname]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user