Skip to content

Commit

Permalink
Remove mjCBase::def and use mjCBase::classname instead.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 650629741
Change-Id: I10a9955b99e4a5ff0b5a742e22635ccad1455f1a
  • Loading branch information
quagla authored and Copybara-Service committed Jul 9, 2024
1 parent c5f958b commit e0d33eb
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 75 deletions.
6 changes: 4 additions & 2 deletions src/user/user_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,9 @@ mjSpec* mjs_getSpec(mjsBody* body) {

// get default
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);
}


Expand Down Expand Up @@ -569,7 +571,7 @@ int mjs_getId(mjsElement* element) {
// set default
void mjs_setDefault(mjsElement* element, mjsDefault* defspec) {
mjCBase* baseC = static_cast<mjCBase*>(element);
baseC->def = static_cast<mjCDef*>(defspec->element);
baseC->classname = static_cast<mjCDef*>(defspec->element)->name;
}


Expand Down
6 changes: 3 additions & 3 deletions src/user/user_composite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,7 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjsBody* body, char* error, int err

// create 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);
ten->name = txt;
ten->WrapSite(txt1);
Expand Down Expand Up @@ -1131,7 +1131,7 @@ bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int erro

// fixed tendon for all joints
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON);
ten->def = model->Default();
ten->classname = model->Default()->name;
mju::sprintf_arr(txt, "%sT", prefix.c_str());
ten->name = txt;

Expand Down Expand Up @@ -1245,7 +1245,7 @@ void mjCComposite::MakeShear(mjCModel* model) {

// create tendon
mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_SHEAR);
ten->def = model->Default();
ten->classname = model->Default()->name;
ten->WrapSite(txt1);
ten->WrapSite(txt2);

Expand Down
6 changes: 3 additions & 3 deletions src/user/user_mesh.cc
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = (_def ? _def->name : (_model ? "main" : ""));

// in case this body is not compiled
CopyFromSpec();
Expand Down Expand Up @@ -1424,7 +1424,7 @@ void mjCMesh::Process() {
// apply formula, accumulate
GetVolumeRef(type) += vol;
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) * (
2*(D[k[j][0]] * D[k[j][1]] +
E[k[j][0]] * E[k[j][1]] +
Expand Down Expand Up @@ -1465,7 +1465,7 @@ void mjCMesh::Process() {
}

// 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);
boxsz[0] = sqrt(6*(eigval[1]+eigval[2]-eigval[0])/mass)/2;
boxsz[1] = sqrt(6*(eigval[0]+eigval[2]-eigval[1])/mass)/2;
Expand Down
30 changes: 7 additions & 23 deletions src/user/user_model.cc
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ mjCModel::mjCModel() {
world->parentid = 0;
world->weldid = 0;
world->name = "world";
world->def = defaults_[0];
world->classname = "main";
def_map["main"] = Default();
bodies_.push_back(world);

// create mjCBase lists from children lists
Expand Down Expand Up @@ -146,6 +147,9 @@ mjCModel& mjCModel::operator=(const mjCModel& other) {
// add everything else
*this += other;

// update the default map
def_map["main"] = Default();

// copy name maps
for (int i=0; i<mjNOBJECT; i++) {
ids[i] = other.ids[i];
Expand Down Expand Up @@ -179,7 +183,6 @@ void mjCModel::CopyList(std::vector<T*>& dest,
// copy the element from the other model to this model
dest.push_back(candidate);
dest.back()->model = this;
dest.back()->def = defaults[def_map[candidate->def]];
dest.back()->id = -1;
}
if (!dest.empty()) {
Expand Down Expand Up @@ -250,26 +253,6 @@ mjCModel& mjCModel::operator+=(const mjCModel& other) {
plugins_ = other.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
if (!compiled) {
resetlist(bodies_);
Expand Down Expand Up @@ -573,7 +556,7 @@ template <class T>
T* mjCModel::AddObjectDefault(vector<T*>& list, string type, mjCDef* def) {
T* obj = new T(this, def ? def : defaults_[0]);
obj->id = (int)list.size();
obj->def = def ? def : defaults_[0];
obj->classname = def ? def->name : "main";
list.push_back(obj);
return obj;
}
Expand Down Expand Up @@ -829,6 +812,7 @@ mjCDef* mjCModel::AddDefault(string name, mjCDef* parent) {
def->parent = parent;
def->name = name;
def->child.clear();
def_map[name] = def;

return def;
}
Expand Down
3 changes: 3 additions & 0 deletions src/user/user_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,9 @@ class mjCModel : public mjCModel_, private mjSpec {
void SaveState(const mjData* d);
void RestoreState(const mjModel* m, mjData** dest);

// map from default class name to default class pointer
std::map<std::string, mjCDef*> def_map;

private:
// settings for each defaults class
std::vector<mjCDef*> defaults_;
Expand Down
48 changes: 17 additions & 31 deletions src/user/user_objects.cc
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,6 @@ mjCBase::mjCBase() {
id = -1;
info = "";
model = 0;
def = 0;
frame = nullptr;
}

Expand Down Expand Up @@ -774,9 +773,6 @@ mjCBody& mjCBody::operator=(const mjCBody& other) {
lights.clear();
id = other.id;

// copy defaults
def = other.def;

// add elements to lists
*this += other;
}
Expand Down Expand Up @@ -884,7 +880,7 @@ void mjCBody::CopyList(std::vector<T*>& dst, const std::vector<T*>& src,
dst.back()->body = this;
dst.back()->model = model;
dst.back()->id = -1;
dst.back()->def = src[i]->def;
dst.back()->classname = src[i]->classname;

// assign dst frame to src frame
dst.back()->frame = src[i]->frame ? frames[fmap[src[i]->frame]] : nullptr;
Expand Down Expand Up @@ -1007,7 +1003,7 @@ mjCBody* mjCBody::AddBody(mjCDef* _def) {
mjCBody* obj = new mjCBody(model);

// handle def recursion (i.e. childclass)
obj->def = _def ? _def : def;
obj->classname = _def ? _def->name : classname;

bodies.push_back(obj);
return obj;
Expand Down Expand Up @@ -1042,7 +1038,7 @@ mjCJoint* mjCBody::AddFreeJoint() {
// create new joint and add it to body
mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
// 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
obj->body = this;
Expand All @@ -1056,7 +1052,7 @@ mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
// create new geom and add it to body
mjCGeom* mjCBody::AddGeom(mjCDef* _def) {
// 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
obj->body = this;
Expand All @@ -1070,7 +1066,7 @@ mjCGeom* mjCBody::AddGeom(mjCDef* _def) {
// create new site and add it to body
mjCSite* mjCBody::AddSite(mjCDef* _def) {
// 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
obj->body = this;
Expand All @@ -1084,7 +1080,7 @@ mjCSite* mjCBody::AddSite(mjCDef* _def) {
// create new camera and add it to body
mjCCamera* mjCBody::AddCamera(mjCDef* _def) {
// 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
obj->body = this;
Expand All @@ -1098,7 +1094,7 @@ mjCCamera* mjCBody::AddCamera(mjCDef* _def) {
// create new light and add it to body
mjCLight* mjCBody::AddLight(mjCDef* _def) {
// 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
obj->body = this;
Expand Down Expand Up @@ -1691,8 +1687,7 @@ mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -1899,8 +1894,7 @@ mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -2542,8 +2536,7 @@ mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";
}


Expand Down Expand Up @@ -2688,8 +2681,7 @@ mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -2842,8 +2834,7 @@ mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

PointToLocal();
CopyFromSpec();
Expand Down Expand Up @@ -3887,8 +3878,7 @@ mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) {
}

model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

PointToLocal();

Expand Down Expand Up @@ -3974,8 +3964,7 @@ mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -4335,8 +4324,7 @@ mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -4497,8 +4485,7 @@ mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// point to local
PointToLocal();
Expand Down Expand Up @@ -4975,8 +4962,7 @@ mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {

// set model, def
model = _model;
def = (_def ? _def : (_model ? _model->Default() : 0));
classname = def ? def->name : "";
classname = _def ? _def->name : "main";

// in case this actuator is not compiled
CopyFromSpec();
Expand Down
1 change: 0 additions & 1 deletion src/user/user_objects.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,6 @@ class mjCBase : public mjCBase_ {
// Copy assignment
mjCBase& operator=(const mjCBase& other);

mjCDef* def; // defaults class used to init this object
mjCFrame* frame; // pointer to frame transformation
mjCModel* model; // pointer to model that created object

Expand Down
Loading

0 comments on commit e0d33eb

Please sign in to comment.