Add missing global fields to mjmModel.

PiperOrigin-RevId: 610415124
Change-Id: I07f284804bf73cb67703597973b50b8c00ea8deb
This commit is contained in:
Alessio Quaglino
2024-02-26 08:24:10 -08:00
committed by Copybara-Service
parent 8679c9fc59
commit 1f2d673c7b
10 changed files with 42 additions and 22 deletions
+3
View File
@@ -510,6 +510,9 @@ void mjm_setDouble(mjDoubleVec dest, const double* array, int size) {
// get string
const char* mjm_getString(const mjString source) {
std::string* str = reinterpret_cast<std::string*>(source);
if (!str) {
return nullptr;
}
return str->c_str();
}
+7
View File
@@ -125,6 +125,13 @@ typedef struct _mjmModel { // model specification
// sizes
int nkey; // number of keyframes
// global data
mjString comment; // comment at top of XML
mjString modelfiledir; // path to model file
// other
bool hasImplicitPluginElem; // already encountered an implicit plugin sensor/actuator
} mjmModel;
+4 -2
View File
@@ -837,7 +837,8 @@ bool mjCFlexcomp::MakeMesh(mjCModel* model, char* error, int error_sz) {
}
// load resource
string filename = mjuu_makefullname(model->modelfiledir, mjm_getString(model->spec.meshdir), file);
string filename = mjuu_makefullname(mjm_getString(model->spec.modelfiledir),
mjm_getString(model->spec.meshdir), file);
mjResource* resource = nullptr;
try {
@@ -943,7 +944,8 @@ bool mjCFlexcomp::MakeGMSH(mjCModel* model, char* error, int error_sz) {
}
// open resource
string filename = mjuu_makefullname(model->modelfiledir, mjm_getString(model->spec.meshdir), file);
string filename = mjuu_makefullname(mjm_getString(model->spec.modelfiledir),
mjm_getString(model->spec.meshdir), file);
mjResource* resource = nullptr;
try {
+2 -2
View File
@@ -348,7 +348,7 @@ void mjCMesh::Compile(const mjVFS* vfs) {
throw mjCError(this, "unsupported content type: '%s'", asset_type.c_str());
}
string filename = mjuu_makefullname(model->modelfiledir, model->meshdir_, file_);
string filename = mjuu_makefullname(model->modelfiledir_, model->meshdir_, file_);
mjResource* resource = LoadResource(filename, vfs);
try {
@@ -1951,7 +1951,7 @@ void mjCSkin::Compile(const mjVFS* vfs) {
throw mjCError(this, "Unknown skin file type: %s", file_.c_str());
}
string filename = mjuu_makefullname(model->modelfiledir, model->meshdir_, file_);
string filename = mjuu_makefullname(model->modelfiledir_, model->meshdir_, file_);
mjResource* resource = LoadResource(filename, vfs);
try {
+8 -2
View File
@@ -84,8 +84,8 @@ static void copyvec(T1* dest, T2* src, int n) {
// constructor
mjCModel::mjCModel() {
mjm_defaultModel(spec);
comment.clear();
modelfiledir.clear();
spec_comment_.clear();
spec_modelfiledir_.clear();
spec_meshdir_.clear();
spec_texturedir_.clear();
spec_modelname_ = "MuJoCo Model";
@@ -177,6 +177,8 @@ mjCModel::mjCModel() {
void mjCModel::PointToLocal() {
spec.element = (mjElement)this;
spec.comment = (mjString)&spec_comment_;
spec.modelfiledir = (mjString)&spec_modelfiledir_;
spec.modelname = (mjString)&spec_modelname_;
spec.meshdir = (mjString)&spec_meshdir_;
spec.texturedir = (mjString)&spec_texturedir_;
@@ -186,9 +188,13 @@ void mjCModel::PointToLocal() {
void mjCModel::CopyFromSpec() {
*static_cast<mjmModel*>(this) = spec;
comment_ = spec_comment_;
modelfiledir_ = spec_modelfiledir_;
modelname_ = spec_modelname_;
meshdir_ = spec_meshdir_;
texturedir_ = spec_texturedir_;
comment = (mjString)&comment_;
modelfiledir = (mjString)&modelfiledir_;
modelname = (mjString)&modelname_;
meshdir = (mjString)&meshdir_;
texturedir = (mjString)&texturedir_;
+5 -5
View File
@@ -129,9 +129,8 @@ class mjCModel : private mjmModel {
//------------------------ global data
std::string comment; // comment at top of XML
std::string modelfiledir; // path to model file
std::vector<mjCDef*> defaults; // settings for each defaults class
std::vector<std::pair<const mjpPlugin*, int>> active_plugins; // list of active plugins
private:
void TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs);
@@ -245,8 +244,6 @@ class mjCModel : private mjmModel {
std::vector<mjCText*> texts; // list of text fields
std::vector<mjCTuple*> tuples; // list of tuple fields
std::vector<mjCKey*> keys; // list of keyframe fields
std::vector<std::pair<const mjpPlugin*, int>> active_plugins; // list of active plugins
std::vector<mjCPlugin*> plugins; // list of plugin instances
// pointers to objects created inside kinematic tree
@@ -272,16 +269,19 @@ class mjCModel : private mjmModel {
// map from object names to ids
mjListKeyMap ids;
bool hasImplicitPluginElem; // already encountered an implicit plugin sensor/actuator
bool compiled; // already compiled flag (cannot be compiled again)
mjCError errInfo; // last error info
int fixCount; // how many bodies have been fixed
std::vector<mjtNum> qpos0; // save qpos0, to recognize changed key_qpos in write
// variable-size attributes
std::string comment_; // comment at top of XML
std::string modelfiledir_; // path to model file
std::string modelname_;
std::string meshdir_;
std::string texturedir_;
std::string spec_comment_;
std::string spec_modelfiledir_;
std::string spec_modelname_;
std::string spec_meshdir_;
std::string spec_texturedir_;
+3 -3
View File
@@ -2654,7 +2654,7 @@ void mjCHField::Compile(const mjVFS* vfs) {
throw mjCError(this, "unsupported content type: '%s'", asset_type.c_str());
}
string filename = mjuu_makefullname(model->modelfiledir, model->meshdir_, file_);
string filename = mjuu_makefullname(model->modelfiledir_, model->meshdir_, file_);
mjResource* resource = LoadResource(filename, vfs);
try {
@@ -3273,7 +3273,7 @@ void mjCTexture::LoadCubeSeparate(const mjVFS* vfs) {
}
// make filename
string filename = mjuu_makefullname(model->modelfiledir, model->texturedir_, cubefiles_[i]);
string filename = mjuu_makefullname(model->modelfiledir_, model->texturedir_, cubefiles_[i]);
// load PNG or custom
unsigned int w, h;
@@ -3373,7 +3373,7 @@ void mjCTexture::Compile(const mjVFS* vfs) {
}
// make filename
string filename = mjuu_makefullname(model->modelfiledir, model->texturedir_, file_);
string filename = mjuu_makefullname(model->modelfiledir_, model->texturedir_, file_);
// dispatch
if (type==mjTEXTURE_2D) {