rename mjspec api structs and functions mjm -> mjs

PiperOrigin-RevId: 618017976
Change-Id: I5f790167e5ca670f8d5f92e8e1c920db8d236144
This commit is contained in:
Yuval Tassa
2024-03-21 18:04:06 -07:00
committed by Copybara-Service
parent f0ad80f268
commit 4660a297d1
22 changed files with 960 additions and 959 deletions
+64 -64
View File
@@ -49,7 +49,7 @@ static T& operator+(T& base, std::string_view suffix) {
// create model
mjSpec* mjm_createSpec() {
mjSpec* mjs_createSpec() {
mjCModel* modelC = new mjCModel;
return &modelC->spec;
}
@@ -57,7 +57,7 @@ mjSpec* mjm_createSpec() {
// copy model
mjSpec* mjm_copySpec(const mjSpec* s) {
mjSpec* mjs_copySpec(const mjSpec* s) {
mjCModel* modelC = new mjCModel(*reinterpret_cast<mjCModel*>(s->element));
return &modelC->spec;
}
@@ -65,7 +65,7 @@ mjSpec* mjm_copySpec(const mjSpec* s) {
// copy back model
void mjm_copyBack(mjSpec* s, const mjModel* m) {
void mjs_copyBack(mjSpec* s, const mjModel* m) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
modelC->CopyBack(m);
}
@@ -73,7 +73,7 @@ void mjm_copyBack(mjSpec* s, const mjModel* m) {
// compile model
mjModel* mjm_compile(mjSpec* s, const mjVFS* vfs) {
mjModel* mjs_compile(mjSpec* s, const mjVFS* vfs) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
return modelC->Compile(vfs);
}
@@ -81,7 +81,7 @@ mjModel* mjm_compile(mjSpec* s, const mjVFS* vfs) {
// attach body to a frame of the parent
int mjm_attachBody(mjmFrame* parent, const mjmBody* child,
int mjs_attachBody(mjsFrame* parent, const mjsBody* child,
const char* prefix, const char* suffix) {
mjCFrame* frame_parent = reinterpret_cast<mjCFrame*>(parent->element);
mjCBody* child_body = reinterpret_cast<mjCBody*>(child->element);
@@ -92,7 +92,7 @@ int mjm_attachBody(mjmFrame* parent, const mjmBody* child,
// get error message from model
const char* mjm_getError(mjSpec* s) {
const char* mjs_getError(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
return modelC->GetError().message;
}
@@ -100,7 +100,7 @@ const char* mjm_getError(mjSpec* s) {
// check if model has warnings
int mjm_isWarning(mjSpec* s) {
int mjs_isWarning(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
return modelC->GetError().warning;
}
@@ -108,7 +108,7 @@ int mjm_isWarning(mjSpec* s) {
// delete model
void mjm_deleteSpec(mjSpec* s) {
void mjs_deleteSpec(mjSpec* s) {
mjCModel* model = reinterpret_cast<mjCModel*>(s->element);
delete model;
}
@@ -116,7 +116,7 @@ void mjm_deleteSpec(mjSpec* s) {
// add child body to body, return child spec
mjmBody* mjm_addBody(mjmBody* bodyspec, mjmDefault* defspec) {
mjsBody* mjs_addBody(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element)->AddBody(def);
return &body->spec;
@@ -125,7 +125,7 @@ mjmBody* mjm_addBody(mjmBody* bodyspec, mjmDefault* defspec) {
// add site to body, return site spec
mjmSite* mjm_addSite(mjmBody* bodyspec, mjmDefault* defspec) {
mjsSite* mjs_addSite(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCSite* site = body->AddSite(def);
@@ -135,7 +135,7 @@ mjmSite* mjm_addSite(mjmBody* bodyspec, mjmDefault* defspec) {
// add joint to body
mjmJoint* mjm_addJoint(mjmBody* bodyspec, mjmDefault* defspec) {
mjsJoint* mjs_addJoint(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCJoint* joint = body->AddJoint(def);
@@ -145,7 +145,7 @@ mjmJoint* mjm_addJoint(mjmBody* bodyspec, mjmDefault* defspec) {
// add free joint to body
mjmJoint* mjm_addFreeJoint(mjmBody* bodyspec) {
mjsJoint* mjs_addFreeJoint(mjsBody* bodyspec) {
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCJoint* joint = body->AddFreeJoint();
return &joint->spec;
@@ -154,7 +154,7 @@ mjmJoint* mjm_addFreeJoint(mjmBody* bodyspec) {
// add geom to body
mjmGeom* mjm_addGeom(mjmBody* bodyspec, mjmDefault* defspec) {
mjsGeom* mjs_addGeom(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCGeom* geom = body->AddGeom(def);
@@ -164,7 +164,7 @@ mjmGeom* mjm_addGeom(mjmBody* bodyspec, mjmDefault* defspec) {
// add camera to body
mjmCamera* mjm_addCamera(mjmBody* bodyspec, mjmDefault* defspec) {
mjsCamera* mjs_addCamera(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCCamera* camera = body->AddCamera(def);
@@ -174,7 +174,7 @@ mjmCamera* mjm_addCamera(mjmBody* bodyspec, mjmDefault* defspec) {
// add light to body
mjmLight* mjm_addLight(mjmBody* bodyspec, mjmDefault* defspec) {
mjsLight* mjs_addLight(mjsBody* bodyspec, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCLight* light = body->AddLight(def);
@@ -184,7 +184,7 @@ mjmLight* mjm_addLight(mjmBody* bodyspec, mjmDefault* defspec) {
// add flex to model
mjmFlex* mjm_addFlex(mjSpec* s) {
mjsFlex* mjs_addFlex(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCFlex* flex = modelC->AddFlex();
return &flex->spec;
@@ -193,7 +193,7 @@ mjmFlex* mjm_addFlex(mjSpec* s) {
// add frame to body
mjmFrame* mjm_addFrame(mjmBody* bodyspec, mjmFrame* parentframe) {
mjsFrame* mjs_addFrame(mjsBody* bodyspec, mjsFrame* parentframe) {
mjCFrame* parentframeC = 0;
if (parentframe) {
parentframeC = reinterpret_cast<mjCFrame*>(parentframe->element);
@@ -207,7 +207,7 @@ mjmFrame* mjm_addFrame(mjmBody* bodyspec, mjmFrame* parentframe) {
// add mesh to model
mjmMesh* mjm_addMesh(mjSpec* s, mjmDefault* defspec) {
mjsMesh* mjs_addMesh(mjSpec* s, mjmDefault* defspec) {
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCMesh* mesh = modelC->AddMesh(def);
@@ -217,7 +217,7 @@ mjmMesh* mjm_addMesh(mjSpec* s, mjmDefault* defspec) {
// add height field to model
mjmHField* mjm_addHField(mjSpec* s) {
mjsHField* mjs_addHField(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCHField* heightField = modelC->AddHField();
return &heightField->spec;
@@ -226,7 +226,7 @@ mjmHField* mjm_addHField(mjSpec* s) {
// add skin to model
mjmSkin* mjm_addSkin(mjSpec* s) {
mjsSkin* mjs_addSkin(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCSkin* skin = modelC->AddSkin();
return &skin->spec;
@@ -235,7 +235,7 @@ mjmSkin* mjm_addSkin(mjSpec* s) {
// add texture to model
mjmTexture* mjm_addTexture(mjSpec* s) {
mjsTexture* mjs_addTexture(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCTexture* texture = modelC->AddTexture();
return &texture->spec;
@@ -244,7 +244,7 @@ mjmTexture* mjm_addTexture(mjSpec* s) {
// add material to model
mjmMaterial* mjm_addMaterial(mjSpec* s, mjmDefault* defspec) {
mjsMaterial* mjs_addMaterial(mjSpec* s, mjmDefault* defspec) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCMaterial* material = modelC->AddMaterial(def);
@@ -254,7 +254,7 @@ mjmMaterial* mjm_addMaterial(mjSpec* s, mjmDefault* defspec) {
// add pair to model
mjmPair* mjm_addPair(mjSpec* s, mjmDefault* defspec) {
mjsPair* mjs_addPair(mjSpec* s, mjmDefault* defspec) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCPair* pair = modelC->AddPair(def);
@@ -264,7 +264,7 @@ mjmPair* mjm_addPair(mjSpec* s, mjmDefault* defspec) {
// add pair exclusion to model
mjmExclude* mjm_addExclude(mjSpec* s) {
mjsExclude* mjs_addExclude(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCBodyPair* bodypair = modelC->AddExclude();
return &bodypair->spec;
@@ -273,7 +273,7 @@ mjmExclude* mjm_addExclude(mjSpec* s) {
// add equality to model
mjmEquality* mjm_addEquality(mjSpec* s, mjmDefault* defspec) {
mjsEquality* mjs_addEquality(mjSpec* s, mjmDefault* defspec) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCEquality* equality = modelC->AddEquality(def);
@@ -283,7 +283,7 @@ mjmEquality* mjm_addEquality(mjSpec* s, mjmDefault* defspec) {
// add tendon to model
mjmTendon* mjm_addTendon(mjSpec* s, mjmDefault* defspec) {
mjsTendon* mjs_addTendon(mjSpec* s, mjmDefault* defspec) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCTendon* tendon = modelC->AddTendon(def);
@@ -293,7 +293,7 @@ mjmTendon* mjm_addTendon(mjSpec* s, mjmDefault* defspec) {
// wrap site using tendon
MJAPI mjmWrap* mjm_wrapSite(mjmTendon* tendonspec, const char* name) {
MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendonspec, const char* name) {
mjCTendon* tendon = reinterpret_cast<mjCTendon*>(tendonspec->element);
tendon->WrapSite(name);
return &tendon->path.back()->spec;
@@ -302,7 +302,7 @@ MJAPI mjmWrap* mjm_wrapSite(mjmTendon* tendonspec, const char* name) {
// wrap geom using tendon
mjmWrap* mjm_wrapGeom(mjmTendon* tendonspec, const char* name, const char* sidesite) {
mjsWrap* mjs_wrapGeom(mjsTendon* tendonspec, const char* name, const char* sidesite) {
mjCTendon* tendon = reinterpret_cast<mjCTendon*>(tendonspec->element);
tendon->WrapGeom(name, sidesite);
return &tendon->path.back()->spec;
@@ -311,7 +311,7 @@ mjmWrap* mjm_wrapGeom(mjmTendon* tendonspec, const char* name, const char* sides
// wrap joint using tendon
mjmWrap* mjm_wrapJoint(mjmTendon* tendonspec, const char* name, double coef) {
mjsWrap* mjs_wrapJoint(mjsTendon* tendonspec, const char* name, double coef) {
mjCTendon* tendon = reinterpret_cast<mjCTendon*>(tendonspec->element);
tendon->WrapJoint(name, coef);
return &tendon->path.back()->spec;
@@ -320,7 +320,7 @@ mjmWrap* mjm_wrapJoint(mjmTendon* tendonspec, const char* name, double coef) {
// wrap pulley using tendon
mjmWrap* mjm_wrapPulley(mjmTendon* tendonspec, double divisor) {
mjsWrap* mjs_wrapPulley(mjsTendon* tendonspec, double divisor) {
mjCTendon* tendon = reinterpret_cast<mjCTendon*>(tendonspec->element);
tendon->WrapPulley(divisor);
return &tendon->path.back()->spec;
@@ -329,7 +329,7 @@ mjmWrap* mjm_wrapPulley(mjmTendon* tendonspec, double divisor) {
// add actuator to model
mjmActuator* mjm_addActuator(mjSpec* s, mjmDefault* defspec) {
mjsActuator* mjs_addActuator(mjSpec* s, mjmDefault* defspec) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = defspec ? reinterpret_cast<mjCDef*>(defspec->element) : 0;
mjCActuator* actuator = modelC->AddActuator(def);
@@ -339,7 +339,7 @@ mjmActuator* mjm_addActuator(mjSpec* s, mjmDefault* defspec) {
// add sensor to model
mjmSensor* mjm_addSensor(mjSpec* s) {
mjsSensor* mjs_addSensor(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCSensor* sensor = modelC->AddSensor();
return &sensor->spec;
@@ -348,7 +348,7 @@ mjmSensor* mjm_addSensor(mjSpec* s) {
// add numeric to model
mjmNumeric* mjm_addNumeric(mjSpec* s) {
mjsNumeric* mjs_addNumeric(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCNumeric* numeric = modelC->AddNumeric();
return &numeric->spec;
@@ -357,7 +357,7 @@ mjmNumeric* mjm_addNumeric(mjSpec* s) {
// add text to model
mjmText* mjm_addText(mjSpec* s) {
mjsText* mjs_addText(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCText* text = modelC->AddText();
return &text->spec;
@@ -366,7 +366,7 @@ mjmText* mjm_addText(mjSpec* s) {
// add tuple to model
mjmTuple* mjm_addTuple(mjSpec* s) {
mjsTuple* mjs_addTuple(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCTuple* tuple = modelC->AddTuple();
return &tuple->spec;
@@ -375,7 +375,7 @@ mjmTuple* mjm_addTuple(mjSpec* s) {
// add keyframe to model
mjmKey* mjm_addKey(mjSpec* s) {
mjsKey* mjs_addKey(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCKey* key = modelC->AddKey();
return &key->spec;
@@ -384,7 +384,7 @@ mjmKey* mjm_addKey(mjSpec* s) {
// add plugin to model
mjmPlugin* mjm_addPlugin(mjSpec* s) {
mjsPlugin* mjs_addPlugin(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCPlugin* plugin = modelC->AddPlugin();
plugin->spec.instance = (mjElement)plugin;
@@ -394,7 +394,7 @@ mjmPlugin* mjm_addPlugin(mjSpec* s) {
// add default to model
mjmDefault* mjm_addDefault(mjSpec* s, const char* classname, int parentid, int* id) {
mjmDefault* mjs_addDefault(mjSpec* s, const char* classname, int parentid, int* id) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
*id = (int)modelC->defaults.size();
mjCDef* def = modelC->AddDef(classname, parentid);
@@ -408,21 +408,21 @@ mjmDefault* mjm_addDefault(mjSpec* s, const char* classname, int parentid, int*
// get objects
mjSpec* mjm_getSpec(mjmBody* body) {
mjSpec* mjs_getSpec(mjsBody* body) {
return &(reinterpret_cast<mjCBody*>(body->element)->model->spec);
}
// get default
mjmDefault* mjm_getDefault(mjElement element) {
mjmDefault* mjs_getDefault(mjElement element) {
return &(reinterpret_cast<mjCBase*>(element)->def->spec);
}
// Find default with given name in model.
mjmDefault* mjm_findDefault(mjSpec* s, const char* classname) {
mjmDefault* mjs_findDefault(mjSpec* s, const char* classname) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* cdef = modelC->FindDef(classname);
if (!cdef) {
@@ -434,7 +434,7 @@ mjmDefault* mjm_findDefault(mjSpec* s, const char* classname) {
// get default[0] from model
mjmDefault* mjm_getSpecDefault(mjSpec* s) {
mjmDefault* mjs_getSpecDefault(mjSpec* s) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
mjCDef* def = modelC->defaults[0];
if (!def) {
@@ -446,7 +446,7 @@ mjmDefault* mjm_getSpecDefault(mjSpec* s) {
// find body in model by name
mjmBody* mjm_findBody(mjSpec* s, const char* name) {
mjsBody* mjs_findBody(mjSpec* s, const char* name) {
mjCModel* model = reinterpret_cast<mjCModel*>(s->element);
mjCBase* body = 0;
if (model->IsCompiled()) {
@@ -460,7 +460,7 @@ mjmBody* mjm_findBody(mjSpec* s, const char* name) {
// find child of a body by name
mjmBody* mjm_findChild(mjmBody* bodyspec, const char* name) {
mjsBody* mjs_findChild(mjsBody* bodyspec, const char* name) {
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
mjCBase* child = body->FindObject(mjOBJ_BODY, std::string(name));
return child ? &(static_cast<mjCBody*>(child)->spec) : nullptr;
@@ -469,7 +469,7 @@ mjmBody* mjm_findChild(mjmBody* bodyspec, const char* name) {
// find mesh by name
mjmMesh* mjm_findMesh(mjSpec* s, const char* name) {
mjsMesh* mjs_findMesh(mjSpec* s, const char* name) {
mjCModel* model = reinterpret_cast<mjCModel*>(s->element);
mjCMesh* mesh = (mjCMesh*)model->FindObject(mjOBJ_MESH, std::string(name));
return mesh ? &(static_cast<mjCMesh*>(mesh)->spec) : nullptr;
@@ -478,7 +478,7 @@ mjmMesh* mjm_findMesh(mjSpec* s, const char* name) {
// find frame by name
mjmFrame* mjm_findFrame(mjSpec* s, const char* name) {
mjsFrame* mjs_findFrame(mjSpec* s, const char* name) {
mjCModel* model = reinterpret_cast<mjCModel*>(s->element);
mjCFrame* frame = (mjCFrame*)model->FindFrame(model->GetWorld(), std::string(name));
return frame ? &(static_cast<mjCFrame*>(frame)->spec) : nullptr;
@@ -487,7 +487,7 @@ mjmFrame* mjm_findFrame(mjSpec* s, const char* name) {
// set frame
void mjm_setFrame(mjElement dest, mjmFrame* frame) {
void mjs_setFrame(mjElement dest, mjsFrame* frame) {
if (!frame) {
return;
}
@@ -499,14 +499,14 @@ void mjm_setFrame(mjElement dest, mjmFrame* frame) {
// get id
int mjm_getId(mjElement element) {
int mjs_getId(mjElement element) {
return reinterpret_cast<mjCBase*>(element)->id;
}
// set default
void mjm_setDefault(mjElement element, mjmDefault* defspec) {
void mjs_setDefault(mjElement element, mjmDefault* defspec) {
mjCBase* baseC = reinterpret_cast<mjCBase*>(element);
baseC->def = reinterpret_cast<mjCDef*>(defspec->element);
}
@@ -514,7 +514,7 @@ void mjm_setDefault(mjElement element, mjmDefault* defspec) {
// set string
void mjm_setString(mjString dest, const char* text) {
void mjs_setString(mjString dest, const char* text) {
std::string* str = reinterpret_cast<std::string*>(dest);
*str = std::string(text);
}
@@ -522,10 +522,10 @@ void mjm_setString(mjString dest, const char* text) {
// Set specific entry in destination string vector.
mjtByte mjm_setInStringVec(mjStringVec dest, int i, const char* text) {
mjtByte mjs_setInStringVec(mjStringVec dest, int i, const char* text) {
std::vector<std::string>* v = reinterpret_cast<std::vector<std::string>*>(dest);
if (v->size() <= i) {
mju_error("Requested index in mjm_setInStringVec is out of bounds");
mju_error("Requested index in mjs_setInStringVec is out of bounds");
return 0;
}
v->at(i) = std::string(text);
@@ -535,7 +535,7 @@ mjtByte mjm_setInStringVec(mjStringVec dest, int i, const char* text) {
// split text and copy into string array
void mjm_setStringVec(mjStringVec dest, const char* text) {
void mjs_setStringVec(mjStringVec dest, const char* text) {
std::vector<std::string>* v = reinterpret_cast<std::vector<std::string>*>(dest);
*v = mjXUtil::String2Vector<std::string>(text);
}
@@ -543,14 +543,14 @@ void mjm_setStringVec(mjStringVec dest, const char* text) {
// add text entry to destination string vector
void mjm_appendString(mjStringVec dest, const char* text) {
void mjs_appendString(mjStringVec dest, const char* text) {
std::vector<std::string>* v = reinterpret_cast<std::vector<std::string>*>(dest);
v->push_back(std::string(text));
}
// copy int array to vector
void mjm_setInt(mjIntVec dest, const int* array, int size) {
void mjs_setInt(mjIntVec dest, const int* array, int size) {
std::vector<int>* v = reinterpret_cast<std::vector<int>*>(dest);
v->assign(size, 0.0);
for (int i = 0; i < size; ++i) {
@@ -561,7 +561,7 @@ void mjm_setInt(mjIntVec dest, const int* array, int size) {
// append int array to vector of arrays
void mjm_appendIntVec(mjIntVecVec dest, const int* array, int size) {
void mjs_appendIntVec(mjIntVecVec dest, const int* array, int size) {
std::vector<std::vector<int>>* v = reinterpret_cast<std::vector<std::vector<int>>*>(dest);
v->push_back(std::vector<int>(array, array + size));
}
@@ -569,7 +569,7 @@ void mjm_appendIntVec(mjIntVecVec dest, const int* array, int size) {
// copy float array to vector
void mjm_setFloat(mjFloatVec dest, const float* array, int size) {
void mjs_setFloat(mjFloatVec dest, const float* array, int size) {
std::vector<float>* v = reinterpret_cast<std::vector<float>*>(dest);
v->assign(size, 0.0);
for (int i = 0; i < size; ++i) {
@@ -581,7 +581,7 @@ void mjm_setFloat(mjFloatVec dest, const float* array, int size) {
// append float array to vector of arrays
void mjm_appendFloatVec(mjFloatVecVec dest, const float* array, int size) {
void mjs_appendFloatVec(mjFloatVecVec dest, const float* array, int size) {
std::vector<std::vector<float>>* v = reinterpret_cast<std::vector<std::vector<float>>*>(dest);
v->push_back(std::vector<float>(array, array + size));
}
@@ -589,7 +589,7 @@ void mjm_appendFloatVec(mjFloatVecVec dest, const float* array, int size) {
// copy double array to vector
void mjm_setDouble(mjDoubleVec dest, const double* array, int size) {
void mjs_setDouble(mjDoubleVec dest, const double* array, int size) {
std::vector<double>* v = reinterpret_cast<std::vector<double>*>(dest);
v->assign(size, 0.0);
for (int i = 0; i < size; ++i) {
@@ -600,7 +600,7 @@ void mjm_setDouble(mjDoubleVec dest, const double* array, int size) {
// get string
const char* mjm_getString(const mjString source) {
const char* mjs_getString(const mjString source) {
std::string* str = reinterpret_cast<std::string*>(source);
if (!str) {
return nullptr;
@@ -611,7 +611,7 @@ const char* mjm_getString(const mjString source) {
// get double array
const double* mjm_getDouble(const mjDoubleVec source, int* size) {
const double* mjs_getDouble(const mjDoubleVec source, int* size) {
std::vector<double>* v = reinterpret_cast<std::vector<double>*>(source);
if (size) {
*size = v->size();
@@ -622,7 +622,7 @@ const double* mjm_getDouble(const mjDoubleVec source, int* size) {
// set plugin attributes
void mjm_setPluginAttributes(mjmPlugin* plugin, void* attributes) {
void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes) {
mjCPlugin* pluginC = reinterpret_cast<mjCPlugin*>(plugin->instance);
std::map<std::string, std::string, std::less<>>* config_attribs =
reinterpret_cast<std::map<std::string, std::string, std::less<>>*>(attributes);
@@ -632,7 +632,7 @@ void mjm_setPluginAttributes(mjmPlugin* plugin, void* attributes) {
// Set active plugins.
void mjm_setActivePlugins(mjSpec* s, void* activeplugins) {
void mjs_setActivePlugins(mjSpec* s, void* activeplugins) {
mjCModel* modelC = reinterpret_cast<mjCModel*>(s->element);
std::vector<std::pair<const mjpPlugin*, int>>* active_plugins =
reinterpret_cast<std::vector<std::pair<const mjpPlugin*, int>>*>(activeplugins);
@@ -642,7 +642,7 @@ void mjm_setActivePlugins(mjSpec* s, void* activeplugins) {
// compute full inertia
const char* mjm_setFullInertia(mjmBody* bodyspec, double quat[4], double inertia[3]) {
const char* mjs_setFullInertia(mjsBody* bodyspec, double quat[4], double inertia[3]) {
mjCBody* body = reinterpret_cast<mjCBody*>(bodyspec->element);
return body->FullInertia(quat, inertia);
}
+162 -162
View File
@@ -135,25 +135,25 @@ typedef struct _mjSpec { // model specification
} mjSpec;
typedef struct _mjmOrientation { // alternative orientation specifiers
typedef struct _mjsOrientation { // alternative orientation specifiers
double axisangle[4]; // rotation axis and angle
double xyaxes[6]; // x and y axes
double zaxis[3]; // z axis (use minimal rotation)
double euler[3]; // euler angles
} mjmOrientation;
} mjsOrientation;
typedef struct _mjmPlugin { // plugin specification
typedef struct _mjsPlugin { // plugin specification
mjElement instance; // internal, do not modify
mjString name; // name
mjString instance_name; // instance name
int plugin_slot; // global registered slot number of the plugin
mjtByte active; // is the plugin active
mjString info; // message appended to compiler errors
} mjmPlugin;
} mjsPlugin;
typedef struct _mjmBody { // body specification
typedef struct _mjsBody { // body specification
mjElement element; // internal, do not modify
mjString name; // name
mjString childclass; // childclass name
@@ -161,14 +161,14 @@ typedef struct _mjmBody { // body specification
// body frame
double pos[3]; // frame position
double quat[4]; // frame orientation
mjmOrientation alt; // frame alternative orientation
mjsOrientation alt; // frame alternative orientation
// inertial frame
double mass; // mass
double ipos[3]; // inertial frame position
double iquat[4]; // inertial frame orientation
double inertia[3]; // diagonal inertia (in i-frame)
mjmOrientation ialt; // inertial frame alternative orientation
mjsOrientation ialt; // inertial frame alternative orientation
double fullinertia[6]; // non-axis-aligned inertia matrix
// other
@@ -176,23 +176,23 @@ typedef struct _mjmBody { // body specification
double gravcomp; // gravity compensation
mjDoubleVec userdata; // user data
mjtByte explicitinertial; // whether to save the body with explicit inertial clause
mjmPlugin plugin; // passive force plugin
mjsPlugin plugin; // passive force plugin
mjString info; // message appended to compiler errors
} mjmBody;
} mjsBody;
typedef struct _mjmFrame { // frame specification
typedef struct _mjsFrame { // frame specification
mjElement element; // internal, do not modify
mjString name; // name
mjString childclass; // childclass name
double pos[3]; // position
double quat[4]; // orientation
mjmOrientation alt; // alternative orientation
mjsOrientation alt; // alternative orientation
mjString info; // message appended to compiler errors
} mjmFrame;
} mjsFrame;
typedef struct _mjmJoint { // joint specification
typedef struct _mjsJoint { // joint specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -229,10 +229,10 @@ typedef struct _mjmJoint { // joint specification
double urdfeffort; // effort (urdf)
mjDoubleVec userdata; // user data
mjString info; // message appended to compiler errors
} mjmJoint;
} mjsJoint;
typedef struct _mjmGeom { // geom specification
typedef struct _mjsGeom { // geom specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // classname
@@ -241,7 +241,7 @@ typedef struct _mjmGeom { // geom specification
// frame, size
double pos[3]; // position
double quat[4]; // orientation
mjmOrientation alt; // alternative orientation
mjsOrientation alt; // alternative orientation
double fromto[6]; // alternative for capsule, cylinder, box, ellipsoid
double size[3]; // type-specific size
@@ -276,12 +276,12 @@ typedef struct _mjmGeom { // geom specification
mjString meshname; // mesh attached to geom
double fitscale; // scale mesh uniformly
mjDoubleVec userdata; // user data
mjmPlugin plugin; // sdf plugin
mjsPlugin plugin; // sdf plugin
mjString info; // message appended to compiler errors
} mjmGeom;
} mjsGeom;
typedef struct _mjmSite { // site specification
typedef struct _mjsSite { // site specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -289,7 +289,7 @@ typedef struct _mjmSite { // site specification
// frame, size
double pos[3]; // position
double quat[4]; // orientation
mjmOrientation alt; // alternative orientation
mjsOrientation alt; // alternative orientation
double fromto[6]; // alternative for capsule, cylinder, box, ellipsoid
double size[3]; // geom size
@@ -302,10 +302,10 @@ typedef struct _mjmSite { // site specification
// other
mjDoubleVec userdata; // user data
mjString info; // message appended to compiler errors
} mjmSite;
} mjsSite;
typedef struct _mjmCamera { // camera specification
typedef struct _mjsCamera { // camera specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -313,7 +313,7 @@ typedef struct _mjmCamera { // camera specification
// extrinsics
double pos[3]; // position
double quat[4]; // orientation
mjmOrientation alt; // alternative orientation
mjsOrientation alt; // alternative orientation
mjtCamLight mode; // tracking mode
mjString targetbody; // target body for tracking/targeting
@@ -331,10 +331,10 @@ typedef struct _mjmCamera { // camera specification
// other
mjDoubleVec userdata; // user data
mjString info; // message appended to compiler errors
} mjmCamera;
} mjsCamera;
typedef struct _mjmLight { // light specification
typedef struct _mjsLight { // light specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -358,10 +358,10 @@ typedef struct _mjmLight { // light specification
// other
mjString info; // message appended to compiler errors
} mjmLight;
} mjsLight;
typedef struct _mjmFlex {
typedef struct _mjsFlex {
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -399,10 +399,10 @@ typedef struct _mjmFlex {
// other
mjString info; // message appended to compiler errors
} mjmFlex;
} mjsFlex;
typedef struct _mjmMesh { // mesh specification
typedef struct _mjsMesh { // mesh specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -418,12 +418,12 @@ typedef struct _mjmMesh { // mesh specification
mjIntVec userface; // user vertex indices
mjIntVec userfacenormal; // user normal indices
mjIntVec userfacetexcoord; // user texcoord indices
mjmPlugin plugin; // sdf plugin
mjsPlugin plugin; // sdf plugin
mjString info; // message appended to compiler errors
} mjmMesh;
} mjsMesh;
typedef struct _mjmHField { // height field specification
typedef struct _mjsHField { // height field specification
mjElement element; // internal, do not modify
mjString name; // name
mjString content_type; // content type of file
@@ -433,11 +433,11 @@ typedef struct _mjmHField { // height field specification
int ncol; // number of columns
mjFloatVec userdata; // user-provided elevation data
mjString info; // message appended to compiler errors
} mjmHField;
} mjsHField;
typedef struct _mjmSkin { // skin specification
typedef struct _mjsSkin { // skin specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -461,10 +461,10 @@ typedef struct _mjmSkin { // skin specification
// other
mjString info; // message appended to compiler errors
} mjmSkin;
} mjsSkin;
typedef struct _mjmTexture { // texture specification
typedef struct _mjsTexture { // texture specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -495,10 +495,10 @@ typedef struct _mjmTexture { // texture specification
// other
mjString info; // message appended to compiler errors
} mjmTexture;
} mjsTexture;
typedef struct _mjmMaterial { // material specification
typedef struct _mjsMaterial { // material specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -511,10 +511,10 @@ typedef struct _mjmMaterial { // material specification
float reflectance; // reflectance
float rgba[4]; // rgba
mjString info; // message appended to compiler errors
} mjmMaterial;
} mjsMaterial;
typedef struct _mjmPair {
typedef struct _mjsPair {
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -530,19 +530,19 @@ typedef struct _mjmPair {
double gap; // include in solver if dist<margin-gap
double friction[5]; // full contact friction
mjString info; // message appended to errors
} mjmPair;
} mjsPair;
typedef struct _mjmExclude {
typedef struct _mjsExclude {
mjElement element; // internal, do not modify
mjString name; // name
mjString bodyname1; // name of geom 1
mjString bodyname2; // name of geom 2
mjString info; // message appended to errors
} mjmExclude;
} mjsExclude;
typedef struct _mjmEquality { // equality specification
typedef struct _mjsEquality { // equality specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -554,10 +554,10 @@ typedef struct _mjmEquality { // equality specification
mjtNum solref[mjNREF]; // solver reference
mjtNum solimp[mjNIMP]; // solver impedance
mjString info; // message appended to errors
} mjmEquality;
} mjsEquality;
typedef struct _mjmTendon { // tendon specification
typedef struct _mjsTendon { // tendon specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -586,16 +586,16 @@ typedef struct _mjmTendon { // tendon specification
// other
mjDoubleVec userdata; // user data
mjString info; // message appended to errors
} mjmTendon;
} mjsTendon;
typedef struct _mjmWrap { // wrapping object specification
typedef struct _mjsWrap { // wrapping object specification
mjElement element; // internal, do not modify
mjString info; // message appended to errors
} mjmWrap;
} mjsWrap;
typedef struct _mjmActuator { // actuator specification
typedef struct _mjsActuator { // actuator specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -634,12 +634,12 @@ typedef struct _mjmActuator { // actuator specification
// other
int group; // group
mjDoubleVec userdata; // user data
mjmPlugin plugin; // actuator plugin
mjsPlugin plugin; // actuator plugin
mjString info; // message appended to compiler errors
} mjmActuator;
} mjsActuator;
typedef struct _mjmSensor { // sensor specfication
typedef struct _mjsSensor { // sensor specification
mjElement element; // internal, do not modify
mjString name; // name
mjString classname; // class name
@@ -662,39 +662,39 @@ typedef struct _mjmSensor { // sensor specfication
// other
mjDoubleVec userdata; // user data
mjmPlugin plugin; // sensor plugin
mjsPlugin plugin; // sensor plugin
mjString info; // message appended to compiler errors
} mjmSensor;
} mjsSensor;
typedef struct _mjmNumeric { // custom numeric field specification
typedef struct _mjsNumeric { // custom numeric field specification
mjElement element; // internal, do not modify
mjString name; // name
mjDoubleVec data; // initialization data
int size; // array size, can be bigger than data size
mjString info; // message appended to compiler errors
} mjmNumeric;
} mjsNumeric;
typedef struct _mjmText { // custom text specification
typedef struct _mjsText { // custom text specification
mjElement element; // internal, do not modify
mjString name; // name
mjString data; // text string
mjString info; // message appended to compiler errors
} mjmText;
} mjsText;
typedef struct _mjmTuple { // tuple specification
typedef struct _mjsTuple { // tuple specification
mjElement element; // internal, do not modify
mjString name; // name
mjIntVec objtype; // object types
mjStringVec objname; // object names
mjDoubleVec objprm; // object parameters
mjString info; // message appended to compiler errors
} mjmTuple;
} mjsTuple;
typedef struct _mjmKey { // keyframe specification
typedef struct _mjsKey { // keyframe specification
mjElement element; // internal, do not modify
mjString name; // name
double time; // time
@@ -705,293 +705,293 @@ typedef struct _mjmKey { // keyframe specification
mjDoubleVec mquat; // mocap quat
mjDoubleVec ctrl; // ctrl
mjString info; // message appended to compiler errors
} mjmKey;
} mjsKey;
typedef struct _mjmDefault { // default specification
mjString name; // name
mjElement element; // internal, do not modify
mjmJoint* joint; // joint defaults
mjmGeom* geom; // geom defaults
mjmSite* site; // site defaults
mjmCamera* camera; // camera defaults
mjmLight* light; // light defaults
mjmFlex* flex; // flex defaults
mjmMesh* mesh; // mesh defaults
mjmMaterial* material; // material defaults
mjmPair* pair; // pair defaults
mjmEquality* equality; // equality defaults
mjmTendon* tendon; // tendon defaults
mjmActuator* actuator; // actuator defaults
mjsJoint* joint; // joint defaults
mjsGeom* geom; // geom defaults
mjsSite* site; // site defaults
mjsCamera* camera; // camera defaults
mjsLight* light; // light defaults
mjsFlex* flex; // flex defaults
mjsMesh* mesh; // mesh defaults
mjsMaterial* material; // material defaults
mjsPair* pair; // pair defaults
mjsEquality* equality; // equality defaults
mjsTendon* tendon; // tendon defaults
mjsActuator* actuator; // actuator defaults
} mjmDefault;
//---------------------------------- API functions -------------------------------------------------
// Create model.
MJAPI mjSpec* mjm_createSpec();
MJAPI mjSpec* mjs_createSpec();
// Copy model.
MJAPI mjSpec* mjm_copySpec(const mjSpec* s);
MJAPI mjSpec* mjs_copySpec(const mjSpec* s);
// Copy back model.
MJAPI void mjm_copyBack(mjSpec* s, const mjModel* m);
MJAPI void mjs_copyBack(mjSpec* s, const mjModel* m);
// Compile model.
MJAPI mjModel* mjm_compile(mjSpec* s, const mjVFS* vfs);
MJAPI mjModel* mjs_compile(mjSpec* s, const mjVFS* vfs);
// Attach child body to a frame of the parent, return 0 if success
MJAPI int mjm_attachBody(mjmFrame* parent, const mjmBody* child,
MJAPI int mjs_attachBody(mjsFrame* parent, const mjsBody* child,
const char* prefix, const char* suffix);
// Get error message from model.
MJAPI const char* mjm_getError(mjSpec* s);
MJAPI const char* mjs_getError(mjSpec* s);
// Return 1 if model has warnings.
MJAPI int mjm_isWarning(mjSpec* s);
MJAPI int mjs_isWarning(mjSpec* s);
// Delete model.
MJAPI void mjm_deleteSpec(mjSpec* s);
MJAPI void mjs_deleteSpec(mjSpec* s);
// Add child body to body, return child spec.
MJAPI mjmBody* mjm_addBody(mjmBody* body, mjmDefault* def);
MJAPI mjsBody* mjs_addBody(mjsBody* body, mjmDefault* def);
// Add site to body, return site spec.
MJAPI mjmSite* mjm_addSite(mjmBody* body, mjmDefault* def);
MJAPI mjsSite* mjs_addSite(mjsBody* body, mjmDefault* def);
// Add joint to body.
MJAPI mjmJoint* mjm_addJoint(mjmBody* body, mjmDefault* def);
MJAPI mjsJoint* mjs_addJoint(mjsBody* body, mjmDefault* def);
// Add freejoint to body.
MJAPI mjmJoint* mjm_addFreeJoint(mjmBody* body);
MJAPI mjsJoint* mjs_addFreeJoint(mjsBody* body);
// Add geom to body.
MJAPI mjmGeom* mjm_addGeom(mjmBody* body, mjmDefault* def);
MJAPI mjsGeom* mjs_addGeom(mjsBody* body, mjmDefault* def);
// Add camera to body.
MJAPI mjmCamera* mjm_addCamera(mjmBody* body, mjmDefault* def);
MJAPI mjsCamera* mjs_addCamera(mjsBody* body, mjmDefault* def);
// Add light to body.
MJAPI mjmLight* mjm_addLight(mjmBody* body, mjmDefault* def);
MJAPI mjsLight* mjs_addLight(mjsBody* body, mjmDefault* def);
// Add frame to body.
MJAPI mjmFrame* mjm_addFrame(mjmBody* body, mjmFrame* parentframe);
MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe);
// Add flex to model.
MJAPI mjmFlex* mjm_addFlex(mjSpec* s);
MJAPI mjsFlex* mjs_addFlex(mjSpec* s);
// Add mesh to model.
MJAPI mjmMesh* mjm_addMesh(mjSpec* s, mjmDefault* def);
MJAPI mjsMesh* mjs_addMesh(mjSpec* s, mjmDefault* def);
// Add height field to model.
MJAPI mjmHField* mjm_addHField(mjSpec* s);
MJAPI mjsHField* mjs_addHField(mjSpec* s);
// Add skin to model.
MJAPI mjmSkin* mjm_addSkin(mjSpec* s);
MJAPI mjsSkin* mjs_addSkin(mjSpec* s);
// Add texture to model.
MJAPI mjmTexture* mjm_addTexture(mjSpec* s);
MJAPI mjsTexture* mjs_addTexture(mjSpec* s);
// Add material to model.
MJAPI mjmMaterial* mjm_addMaterial(mjSpec* s, mjmDefault* def);
MJAPI mjsMaterial* mjs_addMaterial(mjSpec* s, mjmDefault* def);
// Add pair to model.
MJAPI mjmPair* mjm_addPair(mjSpec* s, mjmDefault* def);
MJAPI mjsPair* mjs_addPair(mjSpec* s, mjmDefault* def);
// Add excluded body pair to model.
MJAPI mjmExclude* mjm_addExclude(mjSpec* s);
MJAPI mjsExclude* mjs_addExclude(mjSpec* s);
// Add equality to model.
MJAPI mjmEquality* mjm_addEquality(mjSpec* s, mjmDefault* def);
MJAPI mjsEquality* mjs_addEquality(mjSpec* s, mjmDefault* def);
// Add tendon to model.
MJAPI mjmTendon* mjm_addTendon(mjSpec* s, mjmDefault* def);
MJAPI mjsTendon* mjs_addTendon(mjSpec* s, mjmDefault* def);
// Wrap site using tendon.
MJAPI mjmWrap* mjm_wrapSite(mjmTendon* tendon, const char* name);
MJAPI mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name);
// Wrap geom using tendon.
MJAPI mjmWrap* mjm_wrapGeom(mjmTendon* tendon, const char* name, const char* sidesite);
MJAPI mjsWrap* mjs_wrapGeom(mjsTendon* tendon, const char* name, const char* sidesite);
// Wrap joint using tendon.
MJAPI mjmWrap* mjm_wrapJoint(mjmTendon* tendon, const char* name, double coef);
MJAPI mjsWrap* mjs_wrapJoint(mjsTendon* tendon, const char* name, double coef);
// Wrap pulley using tendon.
MJAPI mjmWrap* mjm_wrapPulley(mjmTendon* tendon, double divisor);
MJAPI mjsWrap* mjs_wrapPulley(mjsTendon* tendon, double divisor);
// Add actuator to model.
MJAPI mjmActuator* mjm_addActuator(mjSpec* s, mjmDefault* def);
MJAPI mjsActuator* mjs_addActuator(mjSpec* s, mjmDefault* def);
// Add sensor to model.
MJAPI mjmSensor* mjm_addSensor(mjSpec* s);
MJAPI mjsSensor* mjs_addSensor(mjSpec* s);
// Add numeric to model.
MJAPI mjmNumeric* mjm_addNumeric(mjSpec* s);
MJAPI mjsNumeric* mjs_addNumeric(mjSpec* s);
// Add text to model.
MJAPI mjmText* mjm_addText(mjSpec* s);
MJAPI mjsText* mjs_addText(mjSpec* s);
// Add tuple to model.
MJAPI mjmTuple* mjm_addTuple(mjSpec* s);
MJAPI mjsTuple* mjs_addTuple(mjSpec* s);
// Add keyframe to model.
MJAPI mjmKey* mjm_addKey(mjSpec* s);
MJAPI mjsKey* mjs_addKey(mjSpec* s);
// Add plugin to model.
MJAPI mjmPlugin* mjm_addPlugin(mjSpec* s);
MJAPI mjsPlugin* mjs_addPlugin(mjSpec* s);
// Add default to model.
MJAPI mjmDefault* mjm_addDefault(mjSpec* s, const char* classname, int parentid, int* id);
MJAPI mjmDefault* mjs_addDefault(mjSpec* s, const char* classname, int parentid, int* id);
// Get model spec from body.
MJAPI mjSpec* mjm_getSpec(mjmBody* body);
MJAPI mjSpec* mjs_getSpec(mjsBody* body);
// Get default corresponding to an mjElement.
MJAPI mjmDefault* mjm_getDefault(mjElement element);
MJAPI mjmDefault* mjs_getDefault(mjElement element);
// Find default in model by class name.
MJAPI mjmDefault* mjm_findDefault(mjSpec* s, const char* classname);
MJAPI mjmDefault* mjs_findDefault(mjSpec* s, const char* classname);
// Get global default from model.
MJAPI mjmDefault* mjm_getSpecDefault(mjSpec* s);
MJAPI mjmDefault* mjs_getSpecDefault(mjSpec* s);
// Find body in model by name.
MJAPI mjmBody* mjm_findBody(mjSpec* s, const char* name);
MJAPI mjsBody* mjs_findBody(mjSpec* s, const char* name);
// Find child body by name.
MJAPI mjmBody* mjm_findChild(mjmBody* body, const char* name);
MJAPI mjsBody* mjs_findChild(mjsBody* body, const char* name);
// Find mesh by name.
MJAPI mjmMesh* mjm_findMesh(mjSpec* s, const char* name);
MJAPI mjsMesh* mjs_findMesh(mjSpec* s, const char* name);
// Find frame by name.
MJAPI mjmFrame* mjm_findFrame(mjSpec* s, const char* name);
MJAPI mjsFrame* mjs_findFrame(mjSpec* s, const char* name);
// Get element id.
MJAPI int mjm_getId(mjElement element);
MJAPI int mjs_getId(mjElement element);
// Copy text to string.
MJAPI void mjm_setString(mjString dest, const char* text);
MJAPI void mjs_setString(mjString dest, const char* text);
// Split text to entries and copy to string vector.
MJAPI void mjm_setStringVec(mjStringVec dest, const char* text);
MJAPI void mjs_setStringVec(mjStringVec dest, const char* text);
// Set entry in string vector.
MJAPI mjtByte mjm_setInStringVec(mjStringVec dest, int i, const char* text);
MJAPI mjtByte mjs_setInStringVec(mjStringVec dest, int i, const char* text);
// Append text entry to string vector.
MJAPI void mjm_appendString(mjStringVec dest, const char* text);
MJAPI void mjs_appendString(mjStringVec dest, const char* text);
// Copy int array to vector.
MJAPI void mjm_setInt(mjIntVec dest, const int* array, int size);
MJAPI void mjs_setInt(mjIntVec dest, const int* array, int size);
// Append int array to vector of arrays.
MJAPI void mjm_appendIntVec(mjIntVecVec dest, const int* array, int size);
MJAPI void mjs_appendIntVec(mjIntVecVec dest, const int* array, int size);
// Copy float array to vector.
MJAPI void mjm_setFloat(mjFloatVec dest, const float* array, int size);
MJAPI void mjs_setFloat(mjFloatVec dest, const float* array, int size);
// Append float array to vector of arrays.
MJAPI void mjm_appendFloatVec(mjFloatVecVec dest, const float* array, int size);
MJAPI void mjs_appendFloatVec(mjFloatVecVec dest, const float* array, int size);
// Copy double array to vector.
MJAPI void mjm_setDouble(mjDoubleVec dest, const double* array, int size);
MJAPI void mjs_setDouble(mjDoubleVec dest, const double* array, int size);
// Get string contents.
MJAPI const char* mjm_getString(mjString source);
MJAPI const char* mjs_getString(mjString source);
// Get double array contents and optionally its size.
MJAPI const double* mjm_getDouble(mjDoubleVec source, int* size);
MJAPI const double* mjs_getDouble(mjDoubleVec source, int* size);
// Set plugin attributes.
MJAPI void mjm_setPluginAttributes(mjmPlugin* plugin, void* attributes);
MJAPI void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes);
// Set active plugins.
MJAPI void mjm_setActivePlugins(mjSpec* s, void* activeplugins);
MJAPI void mjs_setActivePlugins(mjSpec* s, void* activeplugins);
// Set default.
MJAPI void mjm_setDefault(mjElement element, mjmDefault* def);
MJAPI void mjs_setDefault(mjElement element, mjmDefault* def);
// Set frame.
MJAPI void mjm_setFrame(mjElement dest, mjmFrame* frame);
MJAPI void mjs_setFrame(mjElement dest, mjsFrame* frame);
// Compute quat and inertia from body->fullinertia.
MJAPI const char* mjm_setFullInertia(mjmBody* body, double quat[4], double inertia[3]);
MJAPI const char* mjs_setFullInertia(mjsBody* body, double quat[4], double inertia[3]);
//---------------------------------- Initialization functions --------------------------------------
// Default model attributes.
MJAPI void mjm_defaultSpec(mjSpec& model);
MJAPI void mjs_defaultSpec(mjSpec& model);
// Default body attributes.
MJAPI void mjm_defaultBody(mjmBody& body);
MJAPI void mjs_defaultBody(mjsBody& body);
// Default frame attributes.
MJAPI void mjm_defaultFrame(mjmFrame& frame);
MJAPI void mjs_defaultFrame(mjsFrame& frame);
// Default joint attributes.
MJAPI void mjm_defaultJoint(mjmJoint& joint);
MJAPI void mjs_defaultJoint(mjsJoint& joint);
// Default geom attributes.
MJAPI void mjm_defaultGeom(mjmGeom& geom);
MJAPI void mjs_defaultGeom(mjsGeom& geom);
// Default site attributes.
MJAPI void mjm_defaultSite(mjmSite& site);
MJAPI void mjs_defaultSite(mjsSite& site);
// Default camera attributes.
MJAPI void mjm_defaultCamera(mjmCamera& camera);
MJAPI void mjs_defaultCamera(mjsCamera& camera);
// Default light attributes.
MJAPI void mjm_defaultLight(mjmLight& light);
MJAPI void mjs_defaultLight(mjsLight& light);
// Default flex attributes.
MJAPI void mjm_defaultFlex(mjmFlex& flex);
MJAPI void mjs_defaultFlex(mjsFlex& flex);
// Default mesh attributes.
MJAPI void mjm_defaultMesh(mjmMesh& mesh);
MJAPI void mjs_defaultMesh(mjsMesh& mesh);
// Default height field attributes.
MJAPI void mjm_defaultHField(mjmHField& hfield);
MJAPI void mjs_defaultHField(mjsHField& hfield);
// Default skin attributes.
MJAPI void mjm_defaultSkin(mjmSkin& skin);
MJAPI void mjs_defaultSkin(mjsSkin& skin);
// Default texture attributes.
MJAPI void mjm_defaultTexture(mjmTexture& texture);
MJAPI void mjs_defaultTexture(mjsTexture& texture);
// Default material attributes.
MJAPI void mjm_defaultMaterial(mjmMaterial& material);
MJAPI void mjs_defaultMaterial(mjsMaterial& material);
// Default pair attributes.
MJAPI void mjm_defaultPair(mjmPair& pair);
MJAPI void mjs_defaultPair(mjsPair& pair);
// Default equality attributes.
MJAPI void mjm_defaultEquality(mjmEquality& equality);
MJAPI void mjs_defaultEquality(mjsEquality& equality);
// Default tendon attributes.
MJAPI void mjm_defaultTendon(mjmTendon& tendon);
MJAPI void mjs_defaultTendon(mjsTendon& tendon);
// Default actuator attributes.
MJAPI void mjm_defaultActuator(mjmActuator& actuator);
MJAPI void mjs_defaultActuator(mjsActuator& actuator);
// Default sensor attributes.
MJAPI void mjm_defaultSensor(mjmSensor& sensor);
MJAPI void mjs_defaultSensor(mjsSensor& sensor);
// Default numeric attributes.
MJAPI void mjm_defaultNumeric(mjmNumeric& numeric);
MJAPI void mjs_defaultNumeric(mjsNumeric& numeric);
// Default text attributes.
MJAPI void mjm_defaultText(mjmText& text);
MJAPI void mjs_defaultText(mjsText& text);
// Default tuple attributes.
MJAPI void mjm_defaultTuple(mjmTuple& tuple);
MJAPI void mjs_defaultTuple(mjsTuple& tuple);
// Default keyframe attributes.
MJAPI void mjm_defaultKey(mjmKey& key);
MJAPI void mjs_defaultKey(mjsKey& key);
// Default plugin attributes.
MJAPI void mjm_defaultPlugin(mjmPlugin& plugin);
MJAPI void mjs_defaultPlugin(mjsPlugin& plugin);
//------------------------- Cache functions ------------------------------------
+150 -150
View File
@@ -66,7 +66,7 @@ mjCComposite::mjCComposite(void) {
mj_defaultSolRefImp(solrefsmooth, solimpsmooth);
// plugin variables
mjm_defaultPlugin(plugin);
mjs_defaultPlugin(plugin);
plugin_name = "";
plugin_instance_name = "";
plugin.name = (mjString)&plugin_name;
@@ -223,7 +223,7 @@ void mjCComposite::SetDefault(void) {
// make composite object
bool mjCComposite::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::Make(mjSpec* spec, mjsBody* body, char* error, int error_sz) {
mjCModel* model = (mjCModel*)spec->element;
// check geom type
@@ -350,7 +350,7 @@ bool mjCComposite::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz)
bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::MakeParticle(mjCModel* model, mjsBody* body, char* error, int error_sz) {
char txt[100];
std::vector<int> face;
@@ -464,13 +464,13 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int
// create bodies and geoms
for (int i=0; i<uservert.size()/3; i++) {
// create body
mjmBody* b = mjm_addBody(body, NULL);
mjsBody* b = mjs_addBody(body, NULL);
if (!username.empty()) {
mjm_setString(b->name, username[i].c_str());
mjs_setString(b->name, username[i].c_str());
} else {
mju::sprintf_arr(txt, "%sB%d", prefix.c_str(), i);
mjm_setString(b->name, txt);
mjs_setString(b->name, txt);
}
// set body position
@@ -481,8 +481,8 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int
// add slider joints if none defined
if (!add[mjCOMPKIND_PARTICLE]) {
for (int i=0; i<3; i++) {
mjmJoint* jnt = mjm_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
jnt->type = mjJNT_SLIDE;
mjuu_setvec(jnt->pos, 0, 0, 0);
mjuu_setvec(jnt->axis, 0, 0, 0);
@@ -493,30 +493,30 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int
// add user-specified joints
else {
for (auto defjnt : defjoint[mjCOMPKIND_PARTICLE]) {
mjmJoint* jnt = mjm_addJoint(b, &defjnt.spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(b, &defjnt.spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
}
}
// add geom
mjmGeom* g = mjm_addGeom(b, &def[0].spec);
mjm_setDefault(g->element, mjm_getDefault(body->element));
mjsGeom* g = mjs_addGeom(b, &def[0].spec);
mjs_setDefault(g->element, mjs_getDefault(body->element));
// add site
mjmSite* s = mjm_addSite(b, &def[0].spec);
mjm_setDefault(s->element, mjm_getDefault(body->element));
mjsSite* s = mjs_addSite(b, &def[0].spec);
mjs_setDefault(s->element, mjs_getDefault(body->element));
s->type = mjGEOM_SPHERE;
mju::sprintf_arr(txt, "%sS%d", prefix.c_str(), i);
mjm_setString(s->name, txt);
mjs_setString(s->name, txt);
// add plugin
if (plugin.active) {
mjmPlugin* pplugin = &b->plugin;
mjsPlugin* pplugin = &b->plugin;
mjCPlugin* cplugin = (mjCPlugin*)plugin.instance;
pplugin->active = true;
pplugin->instance = (mjElement)plugin.instance;
mjm_setString(pplugin->instance_name, plugin_instance_name.c_str());
mjm_setString(pplugin->name, mjm_getString(plugin.name));
mjs_setString(pplugin->instance_name, plugin_instance_name.c_str());
mjs_setString(pplugin->name, mjs_getString(plugin.name));
if (i==0 && !cplugin->config_attribs["face"].empty()) {
return comperr(error, "Face attribute already exists in plugin", error_sz);
@@ -560,18 +560,18 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int
mju::sprintf_arr(txt2, "%sS%d", prefix.c_str(), v1);
// create tendon
mjmTendon* ten = mjm_addTendon(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjm_setDefault(ten->element, &model->defaults[0]->spec);
mjm_setString(ten->name, txt0);
mjsTendon* ten = mjs_addTendon(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjs_setDefault(ten->element, &model->defaults[0]->spec);
mjs_setString(ten->name, txt0);
ten->group = 4;
mjm_wrapSite(ten, txt1);
mjm_wrapSite(ten, txt2);
mjs_wrapSite(ten, txt1);
mjs_wrapSite(ten, txt2);
// add equality constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_TENDON;
mjm_setString(eq->name1, mjm_getString(ten->name));
mjs_setString(eq->name1, mjs_getString(ten->name));
}
}
@@ -593,7 +593,7 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjmBody* body, char* error, int
// make grid connected with tendons
bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::MakeGrid(mjCModel* model, mjsBody* body, char* error, int error_sz) {
char txt[100], txt1[100], txt2[100];
// check dimensionality
@@ -615,9 +615,9 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int err
for (int ix=0; ix<count[0]; ix++) {
for (int iy=0; iy<count[1]; iy++) {
// create body
mjmBody* b = mjm_addBody(body, NULL);
mjsBody* b = mjs_addBody(body, NULL);
mju::sprintf_arr(txt, "%sB%d_%d", prefix.c_str(), ix, iy);
mjm_setString(b->name, txt);
mjs_setString(b->name, txt);
// set body position
b->pos[0] = offset[0] + spacing*(ix - 0.5*count[0]);
@@ -625,18 +625,18 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int err
b->pos[2] = offset[2];
// add geom
mjmGeom* g = mjm_addGeom(b, &def[0].spec);
mjm_setDefault(g->element, mjm_getDefault(body->element));
mjsGeom* g = mjs_addGeom(b, &def[0].spec);
mjs_setDefault(g->element, mjs_getDefault(body->element));
g->type = mjGEOM_SPHERE;
mju::sprintf_arr(txt, "%sG%d_%d", prefix.c_str(), ix, iy);
mjm_setString(g->name, txt);
mjs_setString(g->name, txt);
// add site
mjmSite* s = mjm_addSite(b, &def[0].spec);
mjm_setDefault(s->element, mjm_getDefault(body->element));
mjsSite* s = mjs_addSite(b, &def[0].spec);
mjs_setDefault(s->element, mjs_getDefault(body->element));
s->type = mjGEOM_SPHERE;
mju::sprintf_arr(txt, "%sS%d_%d", prefix.c_str(), ix, iy);
mjm_setString(s->name, txt);
mjs_setString(s->name, txt);
// skip pinned elements
bool skip = false;
@@ -651,12 +651,12 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int err
}
// add slider joint
mjmJoint* jnt[3];
mjsJoint* jnt[3];
for (int i=0; i<3; i++) {
jnt[i] = mjm_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjm_setDefault(jnt[i]->element, mjm_getDefault(body->element));
jnt[i] = mjs_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjs_setDefault(jnt[i]->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sJ%d_%d_%d", prefix.c_str(), i, ix, iy);
mjm_setString(jnt[i]->name, txt);
mjs_setString(jnt[i]->name, txt);
jnt[i]->type = mjJNT_SLIDE;
mjuu_setvec(jnt[i]->pos, 0, 0, 0);
mjuu_setvec(jnt[i]->axis, 0, 0, 0);
@@ -682,10 +682,10 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int err
ten->WrapSite(txt2);
// add equality constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_TENDON;
mjm_setString(eq->name1, ten->name.c_str());
mjs_setString(eq->name1, ten->name.c_str());
}
}
}
@@ -709,7 +709,7 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjmBody* body, char* error, int err
bool mjCComposite::MakeCable(mjCModel* model, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::MakeCable(mjCModel* model, mjsBody* body, char* error, int error_sz) {
// check dim
if (dim!=1) {
return comperr(error, "Cable must be one-dimensional", error_sz);
@@ -723,9 +723,9 @@ bool mjCComposite::MakeCable(mjCModel* model, mjmBody* body, char* error, int er
}
// add name to model
mjmText* pte = mjm_addText(&model->spec);
mjm_setString(pte->name, ("composite_" + prefix).c_str());
mjm_setString(pte->data, ("rope_" + prefix).c_str());
mjsText* pte = mjs_addText(&model->spec);
mjs_setString(pte->name, ("composite_" + prefix).c_str());
mjs_setString(pte->data, ("rope_" + prefix).c_str());
// populate uservert if not specified
if (uservert.empty()) {
@@ -780,7 +780,7 @@ bool mjCComposite::MakeCable(mjCModel* model, mjmBody* body, char* error, int er
mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtNum normal[3], mjtNum prev_quat[4]) {
mjsBody* mjCComposite::AddCableBody(mjCModel* model, mjsBody* body, int ix, mjtNum normal[3], mjtNum prev_quat[4]) {
char txt_geom[100], txt_site[100], txt_slide[100];
char this_body[100], next_body[100], this_joint[100];
mjtNum dquat[4], this_quat[4];
@@ -836,8 +836,8 @@ mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtN
mju::sprintf_arr(txt_slide, "%sJs%d", prefix.c_str(), ix);
// add body
body = mjm_addBody(body, 0);
mjm_setString(body->name, this_body);
body = mjs_addBody(body, 0);
mjs_setString(body->name, this_body);
if (first) {
mjuu_setvec(body->pos, offset[0]+uservert[3*ix],
offset[1]+uservert[3*ix+1],
@@ -851,9 +851,9 @@ mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtN
}
// add geom
mjmGeom* geom = mjm_addGeom(body, &def[0].spec);
mjm_setDefault(geom->element, mjm_getDefault(body->element));
mjm_setString(geom->name, txt_geom);
mjsGeom* geom = mjs_addGeom(body, &def[0].spec);
mjs_setDefault(geom->element, mjs_getDefault(body->element));
mjs_setString(geom->name, txt_geom);
if (def[0].spec.geom->type==mjGEOM_CYLINDER ||
def[0].spec.geom->type==mjGEOM_CAPSULE) {
mjuu_zerovec(geom->fromto, 6);
@@ -866,11 +866,11 @@ mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtN
// add plugin
if (plugin.active) {
mjmPlugin* pplugin = &body->plugin;
mjsPlugin* pplugin = &body->plugin;
pplugin->active = true;
pplugin->instance = (mjElement)plugin.instance;
mjm_setString(pplugin->name, mjm_getString(plugin.name));
mjm_setString(pplugin->instance_name, plugin_instance_name.c_str());
mjs_setString(pplugin->name, mjs_getString(plugin.name));
mjs_setString(pplugin->instance_name, plugin_instance_name.c_str());
}
// update orientation
@@ -878,27 +878,27 @@ mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtN
// add curvature joint
if (!first || strcmp(initial.c_str(), "none")) {
mjmJoint* jnt = mjm_addJoint(body, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(body, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
jnt->type = (first && strcmp(initial.c_str(), "free")==0) ? mjJNT_FREE : mjJNT_BALL;
jnt->damping = jnt->type==mjJNT_FREE ? 0 : jnt->damping;
jnt->armature = jnt->type==mjJNT_FREE ? 0 : jnt->armature;
jnt->frictionloss = jnt->type==mjJNT_FREE ? 0 : jnt->frictionloss;
mjm_setString(jnt->name, this_joint);
mjs_setString(jnt->name, this_joint);
}
// exclude contact pair
if (!last) {
mjmExclude* exclude = mjm_addExclude(&model->spec);
mjm_setString(exclude->bodyname1, std::string(this_body).c_str());
mjm_setString(exclude->bodyname2, std::string(next_body).c_str());
mjsExclude* exclude = mjs_addExclude(&model->spec);
mjs_setString(exclude->bodyname1, std::string(this_body).c_str());
mjs_setString(exclude->bodyname2, std::string(next_body).c_str());
}
// add site at the boundary
if (last || first) {
mjmSite* site = mjm_addSite(body, &def[0].spec);
mjm_setDefault(site->element, mjm_getDefault(body->element));
mjm_setString(site->name, txt_site);
mjsSite* site = mjs_addSite(body, &def[0].spec);
mjs_setDefault(site->element, mjs_getDefault(body->element));
mjs_setString(site->name, txt_site);
mjuu_setvec(site->pos, last ? length : 0, 0, 0);
mjuu_setvec(site->quat, 1, 0, 0, 0);
}
@@ -908,7 +908,7 @@ mjmBody* mjCComposite::AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtN
// make rope
bool mjCComposite::MakeRope(mjCModel* model, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::MakeRope(mjCModel* model, mjsBody* body, char* error, int error_sz) {
// check dim
if (dim!=1) {
return comperr(error, "Rope must be one-dimensional", error_sz);
@@ -917,7 +917,7 @@ bool mjCComposite::MakeRope(mjCModel* model, mjmBody* body, char* error, int err
// check root body name prefix
char txt[200];
mju::sprintf_arr(txt, "%sB", prefix.c_str());
std::string body_name = mjm_getString(body->name);
std::string body_name = mjs_getString(body->name);
if (std::strncmp(txt, body_name.substr(0, strlen(txt)).c_str(), mju::sizeof_arr(txt))) {
mju::strcat_arr(txt, " must be the beginning of root body name");
return comperr(error, txt, error_sz);
@@ -937,7 +937,7 @@ bool mjCComposite::MakeRope(mjCModel* model, mjmBody* body, char* error, int err
AddRopeBody(model, body, ox, ox);
// add elements: right
mjmBody* pbody = body;
mjsBody* pbody = body;
for (int ix=ox; ix<count[0]-1; ix++) {
pbody = AddRopeBody(model, pbody, ix, ix+1);
}
@@ -953,20 +953,20 @@ bool mjCComposite::MakeRope(mjCModel* model, mjmBody* body, char* error, int err
char txt2[200];
// add equality constraint
mjmEquality* eq = mjm_addEquality(&model->spec, 0);
mjsEquality* eq = mjs_addEquality(&model->spec, 0);
eq->type = mjEQ_CONNECT;
mju::sprintf_arr(txt, "%sB0", prefix.c_str());
mju::sprintf_arr(txt2, "%sB%d", prefix.c_str(), count[0]-1);
mjm_setString(eq->name1, txt);
mjm_setString(eq->name2, txt2);
mjs_setString(eq->name1, txt);
mjs_setString(eq->name2, txt2);
mjuu_setvec(eq->data, -0.5*spacing, 0, 0);
mju_copy(eq->solref, solrefsmooth, mjNREF);
mju_copy(eq->solimp, solimpsmooth, mjNIMP);
// remove contact between connected bodies
mjmExclude* pair = mjm_addExclude(&model->spec);
mjm_setString(pair->bodyname1, std::string(txt).c_str());
mjm_setString(pair->bodyname2, std::string(txt2).c_str());
mjsExclude* pair = mjs_addExclude(&model->spec);
mjs_setString(pair->bodyname1, std::string(txt).c_str());
mjs_setString(pair->bodyname2, std::string(txt2).c_str());
}
return true;
@@ -975,16 +975,16 @@ bool mjCComposite::MakeRope(mjCModel* model, mjmBody* body, char* error, int err
// add child body for cloth
mjmBody* mjCComposite::AddRopeBody(mjCModel* model, mjmBody* body, int ix, int ix1) {
mjsBody* mjCComposite::AddRopeBody(mjCModel* model, mjsBody* body, int ix, int ix1) {
char txt[100];
bool isroot = (ix==ix1);
double dx = spacing*(ix1-ix);
// add child if not root
if (!isroot) {
body = mjm_addBody(body, 0);
body = mjs_addBody(body, 0);
mju::sprintf_arr(txt, "%sB%d", prefix.c_str(), ix1);
mjm_setString(body->name, txt);
mjs_setString(body->name, txt);
// loop
if (type==mjCOMPTYPE_LOOP) {
@@ -1007,10 +1007,10 @@ mjmBody* mjCComposite::AddRopeBody(mjCModel* model, mjmBody* body, int ix, int i
}
// add geom
mjmGeom* geom = mjm_addGeom(body, &def[0].spec);
mjm_setDefault(geom->element, mjm_getDefault(body->element));
mjsGeom* geom = mjs_addGeom(body, &def[0].spec);
mjs_setDefault(geom->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sG%d", prefix.c_str(), ix1);
mjm_setString(geom->name, txt);
mjs_setString(geom->name, txt);
mjuu_setvec(geom->pos, 0, 0, 0);
mjuu_setvec(geom->quat, sqrt(0.5), 0, sqrt(0.5), 0);
@@ -1022,10 +1022,10 @@ mjmBody* mjCComposite::AddRopeBody(mjCModel* model, mjmBody* body, int ix, int i
// add main joint
for (int i=0; i<2; i++) {
// add joint
mjmJoint* jnt = mjm_addJoint(body, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(body, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sJ%d_%d", prefix.c_str(), i, ix1);
mjm_setString(jnt->name, txt);
mjs_setString(jnt->name, txt);
jnt->type = mjJNT_HINGE;
mjuu_setvec(jnt->pos, -0.5*dx, 0, 0);
mjuu_setvec(jnt->axis, 0, 0, 0);
@@ -1035,37 +1035,37 @@ mjmBody* mjCComposite::AddRopeBody(mjCModel* model, mjmBody* body, int ix, int i
// add twist joint
if (add[mjCOMPKIND_TWIST]) {
// add joint
mjmJoint* jnt = mjm_addJoint(body, &defjoint[mjCOMPKIND_TWIST][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(body, &defjoint[mjCOMPKIND_TWIST][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sJT%d", prefix.c_str(), ix1);
mjm_setString(jnt->name, txt);
mjs_setString(jnt->name, txt);
jnt->type = mjJNT_HINGE;
mjuu_setvec(jnt->pos, -0.5*dx, 0, 0);
mjuu_setvec(jnt->axis, 1, 0, 0);
// add constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_TWIST].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TWIST].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_JOINT;
mjm_setString(eq->name1, mjm_getString(jnt->name));
mjs_setString(eq->name1, mjs_getString(jnt->name));
}
// add stretch joint
if (add[mjCOMPKIND_STRETCH]) {
// add joint
mjmJoint* jnt = mjm_addJoint(body, &defjoint[mjCOMPKIND_STRETCH][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(body, &defjoint[mjCOMPKIND_STRETCH][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sJS%d", prefix.c_str(), ix1);
mjm_setString(jnt->name, txt);
mjs_setString(jnt->name, txt);
jnt->type = mjJNT_SLIDE;
mjuu_setvec(jnt->pos, -0.5*dx, 0, 0);
mjuu_setvec(jnt->axis, 1, 0, 0);
// add constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_STRETCH].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_STRETCH].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_JOINT;
mjm_setString(eq->name1, mjm_getString(jnt->name));
mjs_setString(eq->name1, mjs_getString(jnt->name));
}
return body;
@@ -1110,7 +1110,7 @@ void mjCComposite::BoxProject(double* pos) {
// make 3d box, ellipsoid or cylinder
bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int error_sz) {
bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int error_sz) {
char txt[100];
// check dim
@@ -1119,11 +1119,11 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
}
// center geom: two times bigger
mjmGeom* geom = mjm_addGeom(body, &def[0].spec);
mjm_setDefault(geom->element, mjm_getDefault(body->element));
mjsGeom* geom = mjs_addGeom(body, &def[0].spec);
mjs_setDefault(geom->element, mjs_getDefault(body->element));
geom->type = mjGEOM_SPHERE;
mju::sprintf_arr(txt, "%sGcenter", prefix.c_str());
mjm_setString(geom->name, txt);
mjs_setString(geom->name, txt);
mjuu_setvec(geom->pos, 0, 0, 0);
geom->size[0] *= 2;
geom->size[1] = 0;
@@ -1143,9 +1143,9 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
iy==0 || iy==count[1]-1 ||
iz==0 || iz==count[2]-1) {
// create body
mjmBody* b = mjm_addBody(body, NULL);
mjsBody* b = mjs_addBody(body, NULL);
mju::sprintf_arr(txt, "%sB%d_%d_%d", prefix.c_str(), ix, iy, iz);
mjm_setString(b->name, txt);
mjs_setString(b->name, txt);
// set body position (+/- 1)
b->pos[0] = 2.0*ix/(count[0]-1) - 1;
@@ -1160,10 +1160,10 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
mjuu_normvec(b->alt.zaxis, 3);
// add geom
mjmGeom* g = mjm_addGeom(b, &def[0].spec);
mjm_setDefault(g->element, mjm_getDefault(body->element));
mjsGeom* g = mjs_addGeom(b, &def[0].spec);
mjs_setDefault(g->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sG%d_%d_%d", prefix.c_str(), ix, iy, iz);
mjm_setString(g->name, txt);
mjs_setString(g->name, txt);
// offset inwards, enforce sphere or capsule
if (g->type==mjGEOM_CAPSULE) {
@@ -1174,22 +1174,22 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
}
// add slider joint
mjmJoint* jnt = mjm_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjm_setDefault(jnt->element, mjm_getDefault(body->element));
mjsJoint* jnt = mjs_addJoint(b, &defjoint[mjCOMPKIND_JOINT][0].spec);
mjs_setDefault(jnt->element, mjs_getDefault(body->element));
mju::sprintf_arr(txt, "%sJ%d_%d_%d", prefix.c_str(), ix, iy, iz);
mjm_setString(jnt->name, txt);
mjs_setString(jnt->name, txt);
jnt->type = mjJNT_SLIDE;
mjuu_setvec(jnt->pos, 0, 0, 0);
mjuu_setvec(jnt->axis, 0, 0, 1);
// add fix constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_JOINT].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_JOINT].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_JOINT;
mjm_setString(eq->name1, mjm_getString(jnt->name));
mjs_setString(eq->name1, mjs_getString(jnt->name));
// add joint to tendon
ten->WrapJoint(std::string(mjm_getString(jnt->name)), 1);
ten->WrapJoint(std::string(mjs_getString(jnt->name)), 1);
// add neighbor constraints
for (int i=0; i<3; i++) {
@@ -1203,12 +1203,12 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
char txt2[200];
mju::sprintf_arr(txt2,
"%sJ%d_%d_%d", prefix.c_str(), ix1, iy1, iz1);
mjmEquality* eqn = mjm_addEquality(&model->spec, 0);
mjsEquality* eqn = mjs_addEquality(&model->spec, 0);
mju_copy(eqn->solref, solrefsmooth, mjNREF);
mju_copy(eqn->solimp, solimpsmooth, mjNIMP);
eqn->type = mjEQ_JOINT;
mjm_setString(eqn->name1, txt);
mjm_setString(eqn->name2, txt2);
mjs_setString(eqn->name1, txt);
mjs_setString(eqn->name2, txt2);
}
}
}
@@ -1217,10 +1217,10 @@ bool mjCComposite::MakeBox(mjCModel* model, mjmBody* body, char* error, int erro
}
// finalize fixed tendon
mjmEquality* eqt = mjm_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjm_setDefault(eqt->element, &model->defaults[0]->spec);
mjsEquality* eqt = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec);
mjs_setDefault(eqt->element, &model->defaults[0]->spec);
eqt->type = mjEQ_TENDON;
mjm_setString(eqt->name1, ten->name.c_str());
mjs_setString(eqt->name1, ten->name.c_str());
// skin
if (skin) {
@@ -1253,10 +1253,10 @@ void mjCComposite::MakeShear(mjCModel* model) {
ten->name = txt;
// equality constraint
mjmEquality* eq = mjm_addEquality(&model->spec, &def[mjCOMPKIND_SHEAR].spec);
mjm_setDefault(eq->element, &model->defaults[0]->spec);
mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_SHEAR].spec);
mjs_setDefault(eq->element, &model->defaults[0]->spec);
eq->type = mjEQ_TENDON;
mjm_setString(eq->name1, txt);
mjs_setString(eq->name1, txt);
}
}
}
@@ -1264,18 +1264,18 @@ void mjCComposite::MakeShear(mjCModel* model) {
// copy local vectors to skin
void mjCComposite::CopyIntoSkin(mjmSkin* skin) {
mjm_setInt(skin->face, face.data(), face.size());
mjm_setFloat(skin->vert, vert.data(), vert.size());
mjm_setFloat(skin->bindpos, bindpos.data(), bindpos.size());
mjm_setFloat(skin->bindquat, bindquat.data(), bindquat.size());
mjm_setFloat(skin->texcoord, texcoord.data(), texcoord.size());
void mjCComposite::CopyIntoSkin(mjsSkin* skin) {
mjs_setInt(skin->face, face.data(), face.size());
mjs_setFloat(skin->vert, vert.data(), vert.size());
mjs_setFloat(skin->bindpos, bindpos.data(), bindpos.size());
mjs_setFloat(skin->bindquat, bindquat.data(), bindquat.size());
mjs_setFloat(skin->texcoord, texcoord.data(), texcoord.size());
for (int i=0; i<vertid.size(); i++) {
mjm_appendIntVec(skin->vertid, vertid[i].data(), vertid[i].size());
mjs_appendIntVec(skin->vertid, vertid[i].data(), vertid[i].size());
}
for (int i=0; i< vertweight.size(); i++) {
mjm_appendFloatVec(skin->vertweight, vertweight[i].data(), vertweight[i].size());
mjs_appendFloatVec(skin->vertweight, vertweight[i].data(), vertweight[i].size());
}
face.clear();
@@ -1295,10 +1295,10 @@ void mjCComposite::MakeSkin2(mjCModel* model, mjtNum inflate) {
int N = count[0]*count[1];
// add skin, set name and material
mjmSkin* skin = mjm_addSkin(&model->spec);
mjsSkin* skin = mjs_addSkin(&model->spec);
mju::sprintf_arr(txt, "%sSkin", prefix.c_str());
mjm_setString(skin->name, txt);
mjm_setString(skin->material, skinmaterial.c_str());
mjs_setString(skin->name, txt);
mjs_setString(skin->material, skinmaterial.c_str());
mjuu_copyvec(skin->rgba, skinrgba, 4);
skin->inflate = inflate;
skin->group = skingroup;
@@ -1316,7 +1316,7 @@ void mjCComposite::MakeSkin2(mjCModel* model, mjtNum inflate) {
vert.push_back(0);
mju::sprintf_arr(txt, "%sB%d", prefix.c_str(), i);
mjm_appendString(skin->bodyname, txt);
mjs_appendString(skin->bodyname, txt);
bindpos.push_back(0);
bindpos.push_back(0);
bindpos.push_back(0);
@@ -1426,7 +1426,7 @@ void mjCComposite::MakeSkin2(mjCModel* model, mjtNum inflate) {
// add bones in 2D
void mjCComposite::MakeClothBones(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeClothBones(mjCModel* model, mjsSkin* skin) {
char txt[100];
int N = count[0]*count[1];
@@ -1441,7 +1441,7 @@ void mjCComposite::MakeClothBones(mjCModel* model, mjmSkin* skin) {
}
// bind pose
mjm_appendString(skin->bodyname, txt);
mjs_appendString(skin->bodyname, txt);
bindpos.push_back(0);
bindpos.push_back(0);
bindpos.push_back(0);
@@ -1459,7 +1459,7 @@ void mjCComposite::MakeClothBones(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeClothBonesSubgrid(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeClothBonesSubgrid(mjCModel* model, mjsSkin* skin) {
char txt[100];
// populate bones
@@ -1473,7 +1473,7 @@ void mjCComposite::MakeClothBonesSubgrid(mjCModel* model, mjmSkin* skin) {
}
// bind pose
mjm_appendString(skin->bodyname, txt);
mjs_appendString(skin->bodyname, txt);
bindpos.push_back(ix*spacing);
bindpos.push_back(iy*spacing);
bindpos.push_back(0);
@@ -1492,7 +1492,7 @@ void mjCComposite::MakeClothBonesSubgrid(mjCModel* model, mjmSkin* skin) {
// add bones to 1D
void mjCComposite::MakeCableBones(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeCableBones(mjCModel* model, mjsSkin* skin) {
char this_body[100];
int N = count[0]*count[1];
@@ -1510,14 +1510,14 @@ void mjCComposite::MakeCableBones(mjCModel* model, mjmSkin* skin) {
// bind pose
if (iy==0) {
mjm_appendString(skin->bodyname, this_body);
mjs_appendString(skin->bodyname, this_body);
bindpos.push_back((ix==count[0]-1) ? -2*def[0].spec.geom->size[0] : 0);
bindpos.push_back(-def[0].spec.geom->size[1]);
bindpos.push_back(0);
bindquat.push_back(1); bindquat.push_back(0);
bindquat.push_back(0); bindquat.push_back(0);
} else {
mjm_appendString(skin->bodyname, this_body);
mjs_appendString(skin->bodyname, this_body);
bindpos.push_back((ix==count[0]-1) ? -2*def[0].spec.geom->size[0] : 0);
bindpos.push_back(def[0].spec.geom->size[1]);
bindpos.push_back(0);
@@ -1534,7 +1534,7 @@ void mjCComposite::MakeCableBones(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeCableBonesSubgrid(mjCModel* model, mjmSkin* skin) {
void mjCComposite::MakeCableBonesSubgrid(mjCModel* model, mjsSkin* skin) {
// populate bones
for (int ix=0; ix<count[0]; ix++) {
for (int iy=0; iy<count[1]; iy++) {
@@ -1563,7 +1563,7 @@ void mjCComposite::MakeCableBonesSubgrid(mjCModel* model, mjmSkin* skin) {
bindpos.push_back(0);
bindpos.push_back(0);
}
mjm_appendString(skin->bodyname, txt);
mjs_appendString(skin->bodyname, txt);
bindquat.push_back(1);
bindquat.push_back(0);
bindquat.push_back(0);
@@ -1888,10 +1888,10 @@ void mjCComposite::MakeSkin2Subgrid(mjCModel* model, mjtNum inflate) {
// add skin, set name and material
char txt[100];
mjmSkin* skin = mjm_addSkin(&model->spec);
mjsSkin* skin = mjs_addSkin(&model->spec);
mju::sprintf_arr(txt, "%sSkin", prefix.c_str());
mjm_setString(skin->name, txt);
mjm_setString(skin->material, skinmaterial.c_str());
mjs_setString(skin->name, txt);
mjs_setString(skin->material, skinmaterial.c_str());
mjuu_copyvec(skin->rgba, skinrgba, 4);
skin->inflate = inflate;
skin->group = skingroup;
@@ -2043,10 +2043,10 @@ void mjCComposite::MakeSkin3(mjCModel* model) {
mju::sprintf_arr(cnt2, "%d", count[2]-1);
// add skin, set name and material
mjmSkin* skin = mjm_addSkin(&model->spec);
mjsSkin* skin = mjs_addSkin(&model->spec);
mju::sprintf_arr(txt, "%sSkin", prefix.c_str());
mjm_setString(skin->name, txt);
mjm_setString(skin->material, skinmaterial.c_str());
mjs_setString(skin->name, txt);
mjs_setString(skin->material, skinmaterial.c_str());
mjuu_copyvec(skin->rgba, skinrgba, 4);
skin->inflate = skininflate;
skin->group = skingroup;
@@ -2191,7 +2191,7 @@ void mjCComposite::MakeSkin3(mjCModel* model) {
// make one face of 3D skin, box
void mjCComposite::MakeSkin3Box(mjmSkin* skin, int c0, int c1, int side,
void mjCComposite::MakeSkin3Box(mjsSkin* skin, int c0, int c1, int side,
int& vcnt, const char* format) {
char txt[100];
@@ -2224,7 +2224,7 @@ void mjCComposite::MakeSkin3Box(mjmSkin* skin, int c0, int c1, int side,
mju::sprintf_arr(txt, format, prefix.c_str(), i0, i1);
// bind pose: origin
mjm_appendString(skin->bodyname, txt);
mjs_appendString(skin->bodyname, txt);
bindpos.push_back(0);
bindpos.push_back(0);
bindpos.push_back(0);
@@ -2246,7 +2246,7 @@ void mjCComposite::MakeSkin3Box(mjmSkin* skin, int c0, int c1, int side,
// make one face of 3D skin, smooth
void mjCComposite::MakeSkin3Smooth(mjmSkin* skin, int c0, int c1, int side,
void mjCComposite::MakeSkin3Smooth(mjsSkin* skin, int c0, int c1, int side,
const std::map<string, int>& vmap, const char* format) {
char txt00[100], txt01[100], txt10[100], txt11[100];
@@ -2281,7 +2281,7 @@ void mjCComposite::MakeSkin3Smooth(mjmSkin* skin, int c0, int c1, int side,
}
// bind pose: origin
mjm_appendString(skin->bodyname, txt00);
mjs_appendString(skin->bodyname, txt00);
bindpos.push_back(0);
bindpos.push_back(0);
bindpos.push_back(0);
+16 -16
View File
@@ -69,25 +69,25 @@ class mjCComposite {
bool AddDefaultJoint(char* error = NULL, int error_sz = 0);
void AdjustSoft(mjtNum* solref, mjtNum* solimp, int level);
bool Make(mjSpec* spec, mjmBody* body, char* error, int error_sz);
bool Make(mjSpec* spec, mjsBody* body, char* error, int error_sz);
bool MakeParticle(mjCModel* model, mjmBody* body, char* error, int error_sz);
bool MakeGrid(mjCModel* model, mjmBody* body, char* error, int error_sz);
bool MakeRope(mjCModel* model, mjmBody* body, char* error, int error_sz);
bool MakeCable(mjCModel* model, mjmBody* body, char* error, int error_sz);
bool MakeBox(mjCModel* model, mjmBody* body, char* error, int error_sz);
bool MakeParticle(mjCModel* model, mjsBody* body, char* error, int error_sz);
bool MakeGrid(mjCModel* model, mjsBody* body, char* error, int error_sz);
bool MakeRope(mjCModel* model, mjsBody* body, char* error, int error_sz);
bool MakeCable(mjCModel* model, mjsBody* body, char* error, int error_sz);
bool MakeBox(mjCModel* model, mjsBody* body, char* error, int error_sz);
void MakeShear(mjCModel* model);
void MakeSkin2(mjCModel* model, mjtNum inflate);
void MakeSkin2Subgrid(mjCModel* model, mjtNum inflate);
void MakeClothBones(mjCModel* model, mjmSkin* skin);
void MakeClothBonesSubgrid(mjCModel* model, mjmSkin* skin);
void MakeCableBones(mjCModel* model, mjmSkin* skin);
void MakeCableBonesSubgrid(mjCModel* model, mjmSkin* skin);
void MakeClothBones(mjCModel* model, mjsSkin* skin);
void MakeClothBonesSubgrid(mjCModel* model, mjsSkin* skin);
void MakeCableBones(mjCModel* model, mjsSkin* skin);
void MakeCableBonesSubgrid(mjCModel* model, mjsSkin* skin);
void MakeSkin3(mjCModel* model);
void MakeSkin3Box(mjmSkin* skin, int c0, int c1, int side, int& vcnt, const char* format);
void MakeSkin3Smooth(mjmSkin* skin, int c0, int c1, int side,
void MakeSkin3Box(mjsSkin* skin, int c0, int c1, int side, int& vcnt, const char* format);
void MakeSkin3Smooth(mjsSkin* skin, int c0, int c1, int side,
const std::map<std::string, int>& vmap, const char* format);
void BoxProject(double* pos);
@@ -116,7 +116,7 @@ class mjCComposite {
// plugin support
std::string plugin_name;
std::string plugin_instance_name;
mjmPlugin plugin;
mjsPlugin plugin;
// skin
bool skin; // generate skin
@@ -136,11 +136,11 @@ class mjCComposite {
int dim; // dimensionality
private:
mjmBody* AddRopeBody(mjCModel* model, mjmBody* body, int ix, int ix1);
mjmBody* AddCableBody(mjCModel* model, mjmBody* body, int ix, mjtNum normal[3], mjtNum prev_quat[4]);
mjsBody* AddRopeBody(mjCModel* model, mjsBody* body, int ix, int ix1);
mjsBody* AddCableBody(mjCModel* model, mjsBody* body, int ix, mjtNum normal[3], mjtNum prev_quat[4]);
// temporary skin vectors
void CopyIntoSkin(mjmSkin* skin);
void CopyIntoSkin(mjsSkin* skin);
std::vector<int> face;
std::vector<float> vert;
std::vector<float> bindpos;
+29 -29
View File
@@ -72,7 +72,7 @@ mjCFlexcomp::mjCFlexcomp(void) {
rigid = false;
centered = false;
mjm_defaultPlugin(plugin);
mjs_defaultPlugin(plugin);
plugin_name = "";
plugin_instance_name = "";
plugin.name = (mjString)&plugin_name;
@@ -82,9 +82,9 @@ mjCFlexcomp::mjCFlexcomp(void) {
// make flexcomp object
bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
bool mjCFlexcomp::Make(mjSpec* spec, mjsBody* body, char* error, int error_sz) {
mjCModel* model = (mjCModel*)spec->element;
mjmFlex* dflex = def.spec.flex;
mjsFlex* dflex = def.spec.flex;
int dim = dflex->dim;
bool radial = (type==mjFCOMPTYPE_BOX ||
type==mjFCOMPTYPE_CYLINDER ||
@@ -94,7 +94,7 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
type==mjFCOMPTYPE_GMSH);
// check parent body name
if (std::string(mjm_getString(body->name)).empty()) {
if (std::string(mjs_getString(body->name)).empty()) {
return comperr(error, "Parent body must have name", error_sz);
}
@@ -381,7 +381,7 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
// create flex, copy parameters
mjCFlex* flex = model->AddFlex();
mjmFlex* pf = &flex->spec;
mjsFlex* pf = &flex->spec;
int id = flex->id;
*flex = def.flex;
@@ -389,13 +389,13 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
flex->model = model;
flex->id = id;
mjm_setString(pf->name, name.c_str());
mjm_setInt(pf->elem, element.data(), element.size());
mjm_setFloat(pf->texcoord, texcoord.data(), texcoord.size());
mjs_setString(pf->name, name.c_str());
mjs_setInt(pf->elem, element.data(), element.size());
mjs_setFloat(pf->texcoord, texcoord.data(), texcoord.size());
// rigid: set parent name, nothing else to do
if (rigid) {
mjm_appendString(pf->vertbody, mjm_getString(body->name));
mjs_appendString(pf->vertbody, mjs_getString(body->name));
return true;
}
@@ -418,22 +418,22 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
// pinned: parent body
if (pinned[i]) {
mjm_appendString(pf->vertbody, mjm_getString(body->name));
mjs_appendString(pf->vertbody, mjs_getString(body->name));
// add plugin
if (plugin.active) {
mjmPlugin* pplugin = &body->plugin;
mjsPlugin* pplugin = &body->plugin;
pplugin->active = true;
pplugin->instance = (mjElement)plugin.instance;
mjm_setString(pplugin->name, mjm_getString(plugin.name));
mjm_setString(pplugin->instance_name, plugin_instance_name.c_str());
mjs_setString(pplugin->name, mjs_getString(plugin.name));
mjs_setString(pplugin->instance_name, plugin_instance_name.c_str());
}
}
// not pinned: new body
else {
// add new body at vertex coordinates
mjmBody* pb = mjm_addBody(body, 0);
mjsBody* pb = mjs_addBody(body, 0);
// set frame and inertial
pb->pos[0] = point[3*i];
@@ -448,7 +448,7 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
// add radial slider
if (radial) {
mjmJoint* jnt = mjm_addJoint(pb, 0);
mjsJoint* jnt = mjs_addJoint(pb, 0);
// set properties
jnt->type = mjJNT_SLIDE;
@@ -461,7 +461,7 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
else {
for (int j=0; j<3; j++) {
// add joint to body
mjmJoint* jnt = mjm_addJoint(pb, 0);
mjsJoint* jnt = mjs_addJoint(pb, 0);
// set properties
jnt->type = mjJNT_SLIDE;
@@ -474,8 +474,8 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
// construct body name, add to vertbody
char txt[100];
mju::sprintf_arr(txt, "%s_%d", name.c_str(), i);
mjm_setString(pb->name, txt);
mjm_appendString(pf->vertbody, mjm_getString(pb->name));
mjs_setString(pb->name, txt);
mjs_appendString(pf->vertbody, mjs_getString(pb->name));
// clear flex vertex coordinates if allocated
if (!centered) {
@@ -486,26 +486,26 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjmBody* body, char* error, int error_sz) {
// add plugin
if (plugin.active) {
mjmPlugin* pplugin = &pb->plugin;
mjsPlugin* pplugin = &pb->plugin;
pplugin->active = true;
pplugin->instance = (mjElement)plugin.instance;
mjm_setString(pplugin->name, mjm_getString(plugin.name));
mjm_setString(pplugin->instance_name, plugin_instance_name.c_str());
mjs_setString(pplugin->name, mjs_getString(plugin.name));
mjs_setString(pplugin->instance_name, plugin_instance_name.c_str());
}
}
}
if (!centered) {
mjm_setDouble(pf->vert, point.data(), point.size());
mjs_setDouble(pf->vert, point.data(), point.size());
}
// create edge equality constraint
if (equality) {
mjmEquality* pe = mjm_addEquality(&model->spec, &def.spec);
mjm_setDefault(pe->element, &model->defaults[0]->spec);
mjsEquality* pe = mjs_addEquality(&model->spec, &def.spec);
mjs_setDefault(pe->element, &model->defaults[0]->spec);
pe->type = mjEQ_FLEX;
pe->active = true;
mjm_setString(pe->name1, name.c_str());
mjs_setString(pe->name1, name.c_str());
}
return true;
@@ -885,8 +885,8 @@ bool mjCFlexcomp::MakeMesh(mjCModel* model, char* error, int error_sz) {
}
// load resource
string filename = mjuu_makefullname(mjm_getString(model->spec.modelfiledir),
mjm_getString(model->spec.meshdir), file);
string filename = mjuu_makefullname(mjs_getString(model->spec.modelfiledir),
mjs_getString(model->spec.meshdir), file);
mjResource* resource = nullptr;
try {
@@ -992,8 +992,8 @@ bool mjCFlexcomp::MakeGMSH(mjCModel* model, char* error, int error_sz) {
}
// open resource
string filename = mjuu_makefullname(mjm_getString(model->spec.modelfiledir),
mjm_getString(model->spec.meshdir), file);
string filename = mjuu_makefullname(mjs_getString(model->spec.modelfiledir),
mjs_getString(model->spec.meshdir), file);
mjResource* resource = nullptr;
try {
+2 -2
View File
@@ -42,7 +42,7 @@ typedef enum _mjtFcompType {
class mjCFlexcomp {
public:
mjCFlexcomp(void);
bool Make(mjSpec* spec, mjmBody* body, char* error, int error_sz);
bool Make(mjSpec* spec, mjsBody* body, char* error, int error_sz);
bool MakeGrid(char* error, int error_sz);
bool MakeBox(char* error, int error_sz);
@@ -93,7 +93,7 @@ class mjCFlexcomp {
// plugin support
std::string plugin_name;
std::string plugin_instance_name;
mjmPlugin plugin;
mjsPlugin plugin;
};
#endif // MUJOCO_SRC_USER_USER_FLEXCOMP_H_
+47 -47
View File
@@ -22,7 +22,7 @@
// default model attributes
void mjm_defaultSpec(mjSpec& model) {
void mjs_defaultSpec(mjSpec& model) {
memset(&model, 0, sizeof(mjSpec));
// default statistics
@@ -76,8 +76,8 @@ void mjm_defaultSpec(mjSpec& model) {
// default body attributes
void mjm_defaultBody(mjmBody& body) {
memset(&body, 0, sizeof(mjmBody));
void mjs_defaultBody(mjsBody& body) {
memset(&body, 0, sizeof(mjsBody));
// body frame
body.pos[0] = mjNAN;
@@ -94,8 +94,8 @@ void mjm_defaultBody(mjmBody& body) {
// default frame attributes
void mjm_defaultFrame(mjmFrame& frame) {
memset(&frame, 0, sizeof(mjmFrame));
void mjs_defaultFrame(mjsFrame& frame) {
memset(&frame, 0, sizeof(mjsFrame));
mju_zero3(frame.pos);
mjuu_setvec(frame.quat, 1, 0, 0, 0);
frame.alt.axisangle[0] = frame.alt.xyaxes[0] = frame.alt.zaxis[0] = frame.alt.euler[0] = mjNAN;
@@ -104,8 +104,8 @@ void mjm_defaultFrame(mjmFrame& frame) {
// default joint attributes
void mjm_defaultJoint(mjmJoint& joint) {
memset(&joint, 0, sizeof(mjmJoint));
void mjs_defaultJoint(mjsJoint& joint) {
memset(&joint, 0, sizeof(mjsJoint));
joint.type = mjJNT_HINGE;
joint.axis[2] = 1;
@@ -119,8 +119,8 @@ void mjm_defaultJoint(mjmJoint& joint) {
// default geom attributes
void mjm_defaultGeom(mjmGeom& geom) {
memset(&geom, 0, sizeof(mjmGeom));
void mjs_defaultGeom(mjsGeom& geom) {
memset(&geom, 0, sizeof(mjsGeom));
// type
geom.type = mjGEOM_SPHERE;
@@ -163,9 +163,9 @@ void mjm_defaultGeom(mjmGeom& geom) {
// default site attributes
void mjm_defaultSite(mjmSite& site) {
void mjs_defaultSite(mjsSite& site) {
// set everything to 0 / false / NULL
memset(&site, 0, sizeof(mjmSite));
memset(&site, 0, sizeof(mjsSite));
// type
site.type = mjGEOM_SPHERE;
@@ -184,8 +184,8 @@ void mjm_defaultSite(mjmSite& site) {
// default cam attributes
void mjm_defaultCamera(mjmCamera& cam) {
memset(&cam, 0, sizeof(mjmCamera));
void mjs_defaultCamera(mjsCamera& cam) {
memset(&cam, 0, sizeof(mjsCamera));
// type
cam.mode = mjCAMLIGHT_FIXED;
@@ -203,8 +203,8 @@ void mjm_defaultCamera(mjmCamera& cam) {
// default light attributes
void mjm_defaultLight(mjmLight& light) {
memset(&light, 0, sizeof(mjmLight));
void mjs_defaultLight(mjsLight& light) {
memset(&light, 0, sizeof(mjsLight));
// mode
light.mode = mjCAMLIGHT_FIXED;
@@ -223,8 +223,8 @@ void mjm_defaultLight(mjmLight& light) {
// default flex attributes
void mjm_defaultFlex(mjmFlex& flex) {
memset(&flex, 0, sizeof(mjmFlex));
void mjs_defaultFlex(mjsFlex& flex) {
memset(&flex, 0, sizeof(mjsFlex));
// set contact defaults
flex.contype = 1;
@@ -247,8 +247,8 @@ void mjm_defaultFlex(mjmFlex& flex) {
// default mesh attributes
void mjm_defaultMesh(mjmMesh& mesh) {
memset(&mesh, 0, sizeof(mjmMesh));
void mjs_defaultMesh(mjsMesh& mesh) {
memset(&mesh, 0, sizeof(mjsMesh));
mjuu_setvec(mesh.refpos, 0, 0, 0);
mjuu_setvec(mesh.refquat, 1, 0, 0, 0);
mjuu_setvec(mesh.scale, 1, 1, 1);
@@ -258,15 +258,15 @@ void mjm_defaultMesh(mjmMesh& mesh) {
// default height field attributes
void mjm_defaultHField(mjmHField& hfield) {
memset(&hfield, 0, sizeof(mjmHField));
void mjs_defaultHField(mjsHField& hfield) {
memset(&hfield, 0, sizeof(mjsHField));
}
// default skin attributes
void mjm_defaultSkin(mjmSkin& skin) {
memset(&skin, 0, sizeof(mjmSkin));
void mjs_defaultSkin(mjsSkin& skin) {
memset(&skin, 0, sizeof(mjsSkin));
skin.rgba[0] = skin.rgba[1] = skin.rgba[2] = 0.5f;
skin.rgba[3] = 1.0f;
skin.inflate = 0;
@@ -276,8 +276,8 @@ void mjm_defaultSkin(mjmSkin& skin) {
// default texture attributes
void mjm_defaultTexture(mjmTexture& texture) {
memset(&texture, 0, sizeof(mjmTexture));
void mjs_defaultTexture(mjsTexture& texture) {
memset(&texture, 0, sizeof(mjsTexture));
texture.type = mjTEXTURE_CUBE;
mjuu_setvec(texture.rgb1, 0.8, 0.8, 0.8);
mjuu_setvec(texture.rgb2, 0.5, 0.5, 0.5);
@@ -290,8 +290,8 @@ void mjm_defaultTexture(mjmTexture& texture) {
// default material attributes
void mjm_defaultMaterial(mjmMaterial& material) {
memset(&material, 0, sizeof(mjmMaterial));
void mjs_defaultMaterial(mjsMaterial& material) {
memset(&material, 0, sizeof(mjsMaterial));
material.texuniform = false;
material.texrepeat[0] = material.texrepeat[1] = 1;
material.emission = 0;
@@ -304,8 +304,8 @@ void mjm_defaultMaterial(mjmMaterial& material) {
// default pair attributes
void mjm_defaultPair(mjmPair& pair) {
memset(&pair, 0, sizeof(mjmPair));
void mjs_defaultPair(mjsPair& pair) {
memset(&pair, 0, sizeof(mjsPair));
pair.condim = 3;
mj_defaultSolRefImp(pair.solref, pair.solimp);
pair.friction[0] = 1;
@@ -318,8 +318,8 @@ void mjm_defaultPair(mjmPair& pair) {
// default equality attributes
void mjm_defaultEquality(mjmEquality& equality) {
memset(&equality, 0, sizeof(mjmEquality));
void mjs_defaultEquality(mjsEquality& equality) {
memset(&equality, 0, sizeof(mjsEquality));
equality.type = mjEQ_CONNECT;
equality.active = 1;
mj_defaultSolRefImp(equality.solref, equality.solimp);
@@ -330,8 +330,8 @@ void mjm_defaultEquality(mjmEquality& equality) {
// default tendon attributes
void mjm_defaultTendon(mjmTendon& tendon) {
memset(&tendon, 0, sizeof(mjmTendon));
void mjs_defaultTendon(mjsTendon& tendon) {
memset(&tendon, 0, sizeof(mjsTendon));
tendon.limited = mjLIMITED_AUTO;
tendon.springlength[0] = tendon.springlength[1] = -1;
mj_defaultSolRefImp(tendon.solref_limit, tendon.solimp_limit);
@@ -344,8 +344,8 @@ void mjm_defaultTendon(mjmTendon& tendon) {
// default actuator attributes
void mjm_defaultActuator(mjmActuator& actuator) {
memset(&actuator, 0, sizeof(mjmActuator));
void mjs_defaultActuator(mjsActuator& actuator) {
memset(&actuator, 0, sizeof(mjsActuator));
// gain, bias
actuator.gaintype = mjGAIN_FIXED;
@@ -370,8 +370,8 @@ void mjm_defaultActuator(mjmActuator& actuator) {
// default sensor attributes
void mjm_defaultSensor(mjmSensor& sensor) {
memset(&sensor, 0, sizeof(mjmSensor));
void mjs_defaultSensor(mjsSensor& sensor) {
memset(&sensor, 0, sizeof(mjsSensor));
sensor.type = mjSENS_TOUCH;
sensor.datatype = mjDATATYPE_REAL;
sensor.needstage = mjSTAGE_ACC;
@@ -380,36 +380,36 @@ void mjm_defaultSensor(mjmSensor& sensor) {
// Default numeric attributes.
void mjm_defaultNumeric(mjmNumeric& numeric) {
memset(&numeric, 0, sizeof(mjmNumeric));
void mjs_defaultNumeric(mjsNumeric& numeric) {
memset(&numeric, 0, sizeof(mjsNumeric));
}
// Default text attributes.
void mjm_defaultText(mjmText& text) {
memset(&text, 0, sizeof(mjmText));
void mjs_defaultText(mjsText& text) {
memset(&text, 0, sizeof(mjsText));
}
// Default tuple attributes.
void mjm_defaultTuple(mjmTuple& tuple) {
memset(&tuple, 0, sizeof(mjmTuple));
void mjs_defaultTuple(mjsTuple& tuple) {
memset(&tuple, 0, sizeof(mjsTuple));
}
// Default keyframe attributes.
void mjm_defaultKey(mjmKey& key) {
memset(&key, 0, sizeof(mjmKey));
void mjs_defaultKey(mjsKey& key) {
memset(&key, 0, sizeof(mjsKey));
}
// default plugin attributes
void mjm_defaultPlugin(mjmPlugin& plugin) {
memset(&plugin, 0, sizeof(mjmPlugin));
void mjs_defaultPlugin(mjsPlugin& plugin) {
memset(&plugin, 0, sizeof(mjsPlugin));
plugin.plugin_slot = -1;
}
+9 -9
View File
@@ -130,7 +130,7 @@ static void ReadFromBuffer(T* dst, const char* src) {
//------------------ class mjCMesh implementation --------------------------------------------------
mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) {
mjm_defaultMesh(spec);
mjs_defaultMesh(spec);
// clear internal variables
mjuu_setvec(pos_surface_, 0, 0, 0);
@@ -195,7 +195,7 @@ mjCMesh& mjCMesh::operator=(const mjCMesh& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCMesh_*>(this) = static_cast<const mjCMesh_&>(other);
*static_cast<mjmMesh*>(this) = static_cast<const mjmMesh&>(other);
*static_cast<mjsMesh*>(this) = static_cast<const mjsMesh&>(other);
if (other.vert_) {
size_t nvert = 3*other.nvert_*sizeof(float);
this->vert_ = (float*)mju_malloc(nvert);
@@ -282,7 +282,7 @@ void mjCMesh::PointToLocal() {
void mjCMesh::CopyFromSpec() {
*static_cast<mjmMesh*>(this) = spec;
*static_cast<mjsMesh*>(this) = spec;
file_ = spec_file_;
content_type_ = spec_content_type_;
uservert_ = spec_uservert_;
@@ -2054,7 +2054,7 @@ void mjCMesh::MakeCenter(void) {
// constructor
mjCSkin::mjCSkin(mjCModel* _model) {
mjm_defaultSkin(spec);
mjs_defaultSkin(spec);
// set model pointer
model = _model;
@@ -2093,7 +2093,7 @@ mjCSkin& mjCSkin::operator=(const mjCSkin& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCSkin_*>(this) = static_cast<const mjCSkin_&>(other);
*static_cast<mjmSkin*>(this) = static_cast<const mjmSkin&>(other);
*static_cast<mjsSkin*>(this) = static_cast<const mjsSkin&>(other);
}
PointToLocal();
return *this;
@@ -2129,7 +2129,7 @@ void mjCSkin::NameSpace(const mjCModel* m) {
void mjCSkin::CopyFromSpec() {
*static_cast<mjmSkin*>(this) = spec;
*static_cast<mjsSkin*>(this) = spec;
file_ = spec_file_;
material_ = spec_material_;
vert_ = spec_vert_;
@@ -2478,7 +2478,7 @@ constexpr int eledge[3][6][2] = {{{ 0, 1}, {-1, -1}, {-1, -1},
// constructor
mjCFlex::mjCFlex(mjCModel* _model) {
mjm_defaultFlex(spec);
mjs_defaultFlex(spec);
// set model
model = _model;
@@ -2505,7 +2505,7 @@ mjCFlex& mjCFlex::operator=(const mjCFlex& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCFlex_*>(this) = static_cast<const mjCFlex_&>(other);
*static_cast<mjmFlex*>(this) = static_cast<const mjmFlex&>(other);
*static_cast<mjsFlex*>(this) = static_cast<const mjsFlex&>(other);
}
PointToLocal();
return *this;
@@ -2535,7 +2535,7 @@ void mjCFlex::NameSpace(const mjCModel* m) {
void mjCFlex::CopyFromSpec() {
*static_cast<mjmFlex*>(this) = spec;
*static_cast<mjsFlex*>(this) = spec;
spec.info = (mjString)&info;
material_ = spec_material_;
vertbody_ = spec_vertbody_;
+1 -1
View File
@@ -83,7 +83,7 @@ static void copyvec(T1* dest, T2* src, int n) {
// constructor
mjCModel::mjCModel() {
mjm_defaultSpec(spec);
mjs_defaultSpec(spec);
spec_comment_.clear();
spec_modelfiledir_.clear();
spec_meshdir_.clear();
+72 -72
View File
@@ -432,18 +432,18 @@ mjCDef::mjCDef(void) {
name.clear();
parentid = -1;
childid.clear();
mjm_defaultJoint(joint.spec);
mjm_defaultGeom(geom.spec);
mjm_defaultSite(site.spec);
mjm_defaultCamera(camera.spec);
mjm_defaultLight(light.spec);
mjm_defaultFlex(flex.spec);
mjm_defaultMesh(mesh.spec);
mjm_defaultMaterial(material.spec);
mjm_defaultPair(pair.spec);
mjm_defaultEquality(equality.spec);
mjm_defaultTendon(tendon.spec);
mjm_defaultActuator(actuator.spec);
mjs_defaultJoint(joint.spec);
mjs_defaultGeom(geom.spec);
mjs_defaultSite(site.spec);
mjs_defaultCamera(camera.spec);
mjs_defaultLight(light.spec);
mjs_defaultFlex(flex.spec);
mjs_defaultMesh(mesh.spec);
mjs_defaultMaterial(material.spec);
mjs_defaultPair(pair.spec);
mjs_defaultEquality(equality.spec);
mjs_defaultTendon(tendon.spec);
mjs_defaultActuator(actuator.spec);
// make sure all the pointers are local
PointToLocal();
@@ -626,7 +626,7 @@ mjCBody::mjCBody(mjCModel* _model) {
// set model pointer
model = _model;
mjm_defaultBody(spec);
mjs_defaultBody(spec);
parentid = -1;
weldid = -1;
dofnum = 0;
@@ -668,7 +668,7 @@ mjCBody& mjCBody::operator=(const mjCBody& other) {
if (this != &other) {
spec = other.spec;
*static_cast<mjCBody_*>(this) = static_cast<const mjCBody_&>(other);
*static_cast<mjmBody*>(this) = static_cast<const mjmBody&>(other);
*static_cast<mjsBody*>(this) = static_cast<const mjsBody&>(other);
std::map<mjCFrame*, int> fmap;
mjCFrame *np = nullptr;
bodies.clear();
@@ -751,7 +751,7 @@ void mjCBody::PointToLocal() {
void mjCBody::CopyFromSpec() {
*static_cast<mjmBody*>(this) = spec;
*static_cast<mjsBody*>(this) = spec;
userdata_ = spec_userdata_;
userdata = (mjDoubleVec)&userdata_;
mju_copy4(alt_.axisangle, alt.axisangle);
@@ -1367,7 +1367,7 @@ void mjCBody::Compile(void) {
// initialize frame
mjCFrame::mjCFrame(mjCModel* _model, mjCFrame* _frame) {
mjm_defaultFrame(spec);
mjs_defaultFrame(spec);
compiled = false;
model = _model;
body = NULL;
@@ -1388,7 +1388,7 @@ mjCFrame& mjCFrame::operator=(const mjCFrame& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCFrame_*>(this) = static_cast<const mjCFrame_&>(other);
*static_cast<mjmFrame*>(this) = static_cast<const mjmFrame&>(other);
*static_cast<mjsFrame*>(this) = static_cast<const mjsFrame&>(other);
}
PointToLocal();
return *this;
@@ -1429,7 +1429,7 @@ void mjCFrame::PointToLocal() {
void mjCFrame::CopyFromSpec() {
*static_cast<mjmFrame*>(this) = spec;
*static_cast<mjsFrame*>(this) = spec;
mju_copy3(pos, spec.pos);
mju_copy4(quat, spec.quat);
mju_copy4(alt_.axisangle, alt.axisangle);
@@ -1467,7 +1467,7 @@ void mjCFrame::Compile() {
// initialize default joint
mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) {
mjm_defaultJoint(spec);
mjs_defaultJoint(spec);
// clear internal variables
spec_userdata_.clear();
@@ -1501,7 +1501,7 @@ mjCJoint& mjCJoint::operator=(const mjCJoint& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCJoint_*>(this) = static_cast<const mjCJoint_&>(other);
*static_cast<mjmJoint*>(this) = static_cast<const mjmJoint&>(other);
*static_cast<mjsJoint*>(this) = static_cast<const mjsJoint&>(other);
}
PointToLocal();
return *this;
@@ -1525,7 +1525,7 @@ void mjCJoint::PointToLocal() {
void mjCJoint::CopyFromSpec() {
*static_cast<mjmJoint*>(this) = spec;
*static_cast<mjsJoint*>(this) = spec;
userdata_ = spec_userdata_;
userdata = (mjDoubleVec)&spec_userdata_;
}
@@ -1664,7 +1664,7 @@ int mjCJoint::Compile(void) {
// initialize default geom
mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) {
mjm_defaultGeom(spec);
mjs_defaultGeom(spec);
mass_ = 0;
body = 0;
@@ -1712,7 +1712,7 @@ mjCGeom& mjCGeom::operator=(const mjCGeom& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCGeom_*>(this) = static_cast<const mjCGeom_&>(other);
*static_cast<mjmGeom*>(this) = static_cast<const mjmGeom&>(other);
*static_cast<mjsGeom*>(this) = static_cast<const mjsGeom&>(other);
}
PointToLocal();
return *this;
@@ -1737,7 +1737,7 @@ void mjCGeom::PointToLocal(void) {
void mjCGeom::CopyFromSpec() {
*static_cast<mjmGeom*>(this) = spec;
*static_cast<mjsGeom*>(this) = spec;
userdata_ = spec_userdata_;
hfieldname_ = spec_hfieldname_;
meshname_ = spec_meshname_;
@@ -2294,7 +2294,7 @@ void mjCGeom::Compile(void) {
// initialize default site
mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) {
mjm_defaultSite(spec);
mjs_defaultSite(spec);
// clear internal variables
body = 0;
@@ -2330,7 +2330,7 @@ mjCSite& mjCSite::operator=(const mjCSite& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCSite_*>(this) = static_cast<const mjCSite_&>(other);
*static_cast<mjmSite*>(this) = static_cast<const mjmSite&>(other);
*static_cast<mjsSite*>(this) = static_cast<const mjsSite&>(other);
}
PointToLocal();
return *this;
@@ -2350,7 +2350,7 @@ void mjCSite::PointToLocal() {
void mjCSite::CopyFromSpec() {
*static_cast<mjmSite*>(this) = spec;
*static_cast<mjsSite*>(this) = spec;
userdata_ = spec_userdata_;
material_ = spec_material_;
userdata = (mjDoubleVec)&userdata_;
@@ -2454,7 +2454,7 @@ void mjCSite::Compile(void) {
// initialize defaults
mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) {
mjm_defaultCamera(spec);
mjs_defaultCamera(spec);
// clear private variables
body = 0;
@@ -2489,7 +2489,7 @@ mjCCamera& mjCCamera::operator=(const mjCCamera& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCCamera_*>(this) = static_cast<const mjCCamera_&>(other);
*static_cast<mjmCamera*>(this) = static_cast<const mjmCamera&>(other);
*static_cast<mjsCamera*>(this) = static_cast<const mjsCamera&>(other);
}
PointToLocal();
return *this;
@@ -2509,7 +2509,7 @@ void mjCCamera::PointToLocal() {
void mjCCamera::CopyFromSpec() {
*static_cast<mjmCamera*>(this) = spec;
*static_cast<mjsCamera*>(this) = spec;
userdata_ = spec_userdata_;
targetbody_ = spec_targetbody_;
userdata = (mjDoubleVec)&userdata_;
@@ -2608,7 +2608,7 @@ void mjCCamera::Compile(void) {
// initialize defaults
mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) {
mjm_defaultLight(spec);
mjs_defaultLight(spec);
// clear private variables
body = 0;
@@ -2640,7 +2640,7 @@ mjCLight& mjCLight::operator=(const mjCLight& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCLight_*>(this) = static_cast<const mjCLight_&>(other);
*static_cast<mjmLight*>(this) = static_cast<const mjmLight&>(other);
*static_cast<mjsLight*>(this) = static_cast<const mjsLight&>(other);
}
PointToLocal();
return *this;
@@ -2659,7 +2659,7 @@ void mjCLight::PointToLocal() {
void mjCLight::CopyFromSpec() {
*static_cast<mjmLight*>(this) = spec;
*static_cast<mjsLight*>(this) = spec;
targetbody_ = spec_targetbody_;
targetbody = (mjString)&targetbody_;
}
@@ -2704,7 +2704,7 @@ void mjCLight::Compile(void) {
// constructor
mjCHField::mjCHField(mjCModel* _model) {
mjm_defaultHField(spec);
mjs_defaultHField(spec);
// set model pointer
model = _model;
@@ -2733,7 +2733,7 @@ mjCHField& mjCHField::operator=(const mjCHField& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCHField_*>(this) = static_cast<const mjCHField_&>(other);
*static_cast<mjmHField*>(this) = static_cast<const mjmHField&>(other);
*static_cast<mjsHField*>(this) = static_cast<const mjsHField&>(other);
}
PointToLocal();
return *this;
@@ -2753,7 +2753,7 @@ void mjCHField::PointToLocal() {
void mjCHField::CopyFromSpec() {
*static_cast<mjmHField*>(this) = spec;
*static_cast<mjsHField*>(this) = spec;
file_ = spec_file_;
content_type_ = spec_content_type_;
userdata_ = spec_userdata_;
@@ -2956,7 +2956,7 @@ void mjCHField::Compile(const mjVFS* vfs) {
// initialize defaults
mjCTexture::mjCTexture(mjCModel* _model) {
mjm_defaultTexture(spec);
mjs_defaultTexture(spec);
// set model pointer
model = _model;
@@ -3010,7 +3010,7 @@ void mjCTexture::PointToLocal() {
void mjCTexture::CopyFromSpec() {
*static_cast<mjmTexture*>(this) = spec;
*static_cast<mjsTexture*>(this) = spec;
file_ = spec_file_;
content_type_ = spec_content_type_;
cubefiles_ = spec_cubefiles_;
@@ -3698,7 +3698,7 @@ void mjCTexture::Compile(const mjVFS* vfs) {
// initialize defaults
mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) {
mjm_defaultMaterial(spec);
mjs_defaultMaterial(spec);
// clear internal
spec_texture_.clear();
@@ -3732,7 +3732,7 @@ mjCMaterial& mjCMaterial::operator=(const mjCMaterial& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCMaterial_*>(this) = static_cast<const mjCMaterial_&>(other);
*static_cast<mjmMaterial*>(this) = static_cast<const mjmMaterial&>(other);
*static_cast<mjsMaterial*>(this) = static_cast<const mjsMaterial&>(other);
}
PointToLocal();
return *this;
@@ -3751,7 +3751,7 @@ void mjCMaterial::PointToLocal() {
void mjCMaterial::CopyFromSpec() {
*static_cast<mjmMaterial*>(this) = spec;
*static_cast<mjsMaterial*>(this) = spec;
texture_ = spec_texture_;
texture = (mjString)&texture_;
}
@@ -3769,7 +3769,7 @@ void mjCMaterial::Compile(void) {
// constructor
mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) {
mjm_defaultPair(spec);
mjs_defaultPair(spec);
// set defaults
spec_geomname1_.clear();
@@ -3808,7 +3808,7 @@ mjCPair& mjCPair::operator=(const mjCPair& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCPair_*>(this) = static_cast<const mjCPair_&>(other);
*static_cast<mjmPair*>(this) = static_cast<const mjmPair&>(other);
*static_cast<mjsPair*>(this) = static_cast<const mjsPair&>(other);
this->geom1 = nullptr;
this->geom2 = nullptr;
}
@@ -3840,7 +3840,7 @@ void mjCPair::NameSpace(const mjCModel* m) {
void mjCPair::CopyFromSpec() {
*static_cast<mjmPair*>(this) = spec;
*static_cast<mjsPair*>(this) = spec;
geomname1_ = spec_geomname1_;
geomname2_ = spec_geomname2_;
geomname1 = (mjString)&geomname1_;
@@ -4020,7 +4020,7 @@ mjCBodyPair& mjCBodyPair::operator=(const mjCBodyPair& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCBodyPair_*>(this) = static_cast<const mjCBodyPair_&>(other);
*static_cast<mjmExclude*>(this) = static_cast<const mjmExclude&>(other);
*static_cast<mjsExclude*>(this) = static_cast<const mjsExclude&>(other);
}
PointToLocal();
return *this;
@@ -4049,7 +4049,7 @@ void mjCBodyPair::NameSpace(const mjCModel* m) {
void mjCBodyPair::CopyFromSpec() {
*static_cast<mjmExclude*>(this) = spec;
*static_cast<mjsExclude*>(this) = spec;
bodyname1_ = spec_bodyname1_;
bodyname2_ = spec_bodyname2_;
bodyname1 = (mjString)&bodyname1_;
@@ -4104,7 +4104,7 @@ void mjCBodyPair::Compile(void) {
// initialize default constraint
mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) {
mjm_defaultEquality(spec);
mjs_defaultEquality(spec);
// clear internal variables
spec_name1_.clear();
@@ -4139,7 +4139,7 @@ mjCEquality& mjCEquality::operator=(const mjCEquality& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCEquality_*>(this) = static_cast<const mjCEquality_&>(other);
*static_cast<mjmEquality*>(this) = static_cast<const mjmEquality&>(other);
*static_cast<mjsEquality*>(this) = static_cast<const mjsEquality&>(other);
}
PointToLocal();
return *this;
@@ -4169,7 +4169,7 @@ void mjCEquality::NameSpace(const mjCModel* m) {
void mjCEquality::CopyFromSpec() {
*static_cast<mjmEquality*>(this) = spec;
*static_cast<mjsEquality*>(this) = spec;
name1_ = spec_name1_;
name2_ = spec_name2_;
name1 = (mjString)&name1_;
@@ -4266,7 +4266,7 @@ void mjCEquality::Compile(void) {
// constructor
mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) {
mjm_defaultTendon(spec);
mjs_defaultTendon(spec);
// clear internal variables
spec_material_.clear();
@@ -4302,7 +4302,7 @@ mjCTendon& mjCTendon::operator=(const mjCTendon& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCTendon_*>(this) = static_cast<const mjCTendon_&>(other);
*static_cast<mjmTendon*>(this) = static_cast<const mjmTendon&>(other);
*static_cast<mjsTendon*>(this) = static_cast<const mjsTendon&>(other);
for (int i=0; i<other.path.size(); i++) {
path.push_back(new mjCWrap(*other.path[i]));
path.back()->tendon = this;
@@ -4340,7 +4340,7 @@ void mjCTendon::NameSpace(const mjCModel* m) {
void mjCTendon::CopyFromSpec() {
*static_cast<mjmTendon*>(this) = spec;
*static_cast<mjsTendon*>(this) = spec;
material_ = spec_material_;
userdata_ = spec_userdata_;
material = (mjString)&material_;
@@ -4622,7 +4622,7 @@ mjCWrap& mjCWrap::operator=(const mjCWrap& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCWrap_*>(this) = static_cast<const mjCWrap_&>(other);
*static_cast<mjmWrap*>(this) = static_cast<const mjmWrap&>(other);
*static_cast<mjsWrap*>(this) = static_cast<const mjsWrap&>(other);
obj = nullptr;
}
PointToLocal();
@@ -4723,7 +4723,7 @@ void mjCWrap::ResolveReferences(const mjCModel* m) {
// initialize defaults
mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
mjm_defaultActuator(spec);
mjs_defaultActuator(spec);
// clear private variables
ptarget = nullptr;
@@ -4761,7 +4761,7 @@ mjCActuator& mjCActuator::operator=(const mjCActuator& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCActuator_*>(this) = static_cast<const mjCActuator_&>(other);
*static_cast<mjmActuator*>(this) = static_cast<const mjmActuator&>(other);
*static_cast<mjsActuator*>(this) = static_cast<const mjsActuator&>(other);
ptarget = nullptr;
}
PointToLocal();
@@ -4803,7 +4803,7 @@ void mjCActuator::NameSpace(const mjCModel* m) {
void mjCActuator::CopyFromSpec() {
*static_cast<mjmActuator*>(this) = spec;
*static_cast<mjsActuator*>(this) = spec;
userdata_ = spec_userdata_;
target_ = spec_target_;
refsite_ = spec_refsite_;
@@ -5066,7 +5066,7 @@ void mjCActuator::Compile(void) {
// initialize defaults
mjCSensor::mjCSensor(mjCModel* _model) {
mjm_defaultSensor(spec);
mjs_defaultSensor(spec);
// set model
model = _model;
@@ -5098,7 +5098,7 @@ mjCSensor& mjCSensor::operator=(const mjCSensor& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCSensor_*>(this) = static_cast<const mjCSensor_&>(other);
*static_cast<mjmSensor*>(this) = static_cast<const mjmSensor&>(other);
*static_cast<mjsSensor*>(this) = static_cast<const mjsSensor&>(other);
obj = nullptr;
ref = nullptr;
}
@@ -5133,7 +5133,7 @@ void mjCSensor::NameSpace(const mjCModel* m) {
void mjCSensor::CopyFromSpec() {
*static_cast<mjmSensor*>(this) = spec;
*static_cast<mjsSensor*>(this) = spec;
userdata_ = spec_userdata_;
objname_ = spec_objname_;
refname_ = spec_refname_;
@@ -5552,7 +5552,7 @@ void mjCSensor::Compile(void) {
// constructor
mjCNumeric::mjCNumeric(mjCModel* _model) {
mjm_defaultNumeric(spec);
mjs_defaultNumeric(spec);
// set model pointer
model = _model;
@@ -5579,7 +5579,7 @@ mjCNumeric& mjCNumeric::operator=(const mjCNumeric& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCNumeric_*>(this) = static_cast<const mjCNumeric_&>(other);
*static_cast<mjmNumeric*>(this) = static_cast<const mjmNumeric&>(other);
*static_cast<mjsNumeric*>(this) = static_cast<const mjsNumeric&>(other);
}
PointToLocal();
return *this;
@@ -5597,7 +5597,7 @@ void mjCNumeric::PointToLocal() {
void mjCNumeric::CopyFromSpec() {
*static_cast<mjmNumeric*>(this) = spec;
*static_cast<mjsNumeric*>(this) = spec;
data_ = spec_data_;
data = (mjDoubleVec)&data_;
}
@@ -5640,7 +5640,7 @@ void mjCNumeric::Compile(void) {
// constructor
mjCText::mjCText(mjCModel* _model) {
mjm_defaultText(spec);
mjs_defaultText(spec);
// set model pointer
model = _model;
@@ -5667,7 +5667,7 @@ mjCText& mjCText::operator=(const mjCText& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCText_*>(this) = static_cast<const mjCText_&>(other);
*static_cast<mjmText*>(this) = static_cast<const mjmText&>(other);
*static_cast<mjsText*>(this) = static_cast<const mjsText&>(other);
}
PointToLocal();
return *this;
@@ -5685,7 +5685,7 @@ void mjCText::PointToLocal() {
void mjCText::CopyFromSpec() {
*static_cast<mjmText*>(this) = spec;
*static_cast<mjsText*>(this) = spec;
data_ = spec_data_;
data = (mjString)&data_;
}
@@ -5716,7 +5716,7 @@ void mjCText::Compile(void) {
// constructor
mjCTuple::mjCTuple(mjCModel* _model) {
mjm_defaultTuple(spec);
mjs_defaultTuple(spec);
// set model pointer
model = _model;
@@ -5746,7 +5746,7 @@ mjCTuple& mjCTuple::operator=(const mjCTuple& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCTuple_*>(this) = static_cast<const mjCTuple_&>(other);
*static_cast<mjmTuple*>(this) = static_cast<const mjmTuple&>(other);
*static_cast<mjsTuple*>(this) = static_cast<const mjsTuple&>(other);
}
PointToLocal();
return *this;
@@ -5777,7 +5777,7 @@ void mjCTuple::NameSpace(const mjCModel* m) {
void mjCTuple::CopyFromSpec() {
*static_cast<mjmTuple*>(this) = spec;
*static_cast<mjsTuple*>(this) = spec;
objtype_ = spec_objtype_;
objname_ = spec_objname_;
objprm_ = spec_objprm_;
@@ -5848,7 +5848,7 @@ void mjCTuple::Compile(void) {
// constructor
mjCKey::mjCKey(mjCModel* _model) {
mjm_defaultKey(spec);
mjs_defaultKey(spec);
// set model pointer
model = _model;
@@ -5880,7 +5880,7 @@ mjCKey& mjCKey::operator=(const mjCKey& other) {
if (this != &other) {
this->spec = other.spec;
*static_cast<mjCKey_*>(this) = static_cast<const mjCKey_&>(other);
*static_cast<mjmKey*>(this) = static_cast<const mjmKey&>(other);
*static_cast<mjsKey*>(this) = static_cast<const mjsKey&>(other);
}
PointToLocal();
return *this;
@@ -5903,7 +5903,7 @@ void mjCKey::PointToLocal() {
void mjCKey::CopyFromSpec() {
*static_cast<mjmKey*>(this) = spec;
*static_cast<mjsKey*>(this) = spec;
qpos_ = spec_qpos_;
qvel_ = spec_qvel_;
act_ = spec_act_;
@@ -6031,7 +6031,7 @@ mjCPlugin::mjCPlugin(mjCModel* _model) {
instance_name.clear();
// public interface
mjm_defaultPlugin(spec);
mjs_defaultPlugin(spec);
spec.name = (mjString)&name;
spec.instance_name = (mjString)&instance_name;
spec.info = (mjString)&info;
+51 -51
View File
@@ -82,7 +82,7 @@ class [[nodiscard]] mjCError {
// alternative specifications of frame orientation
class mjCAlternative : public mjmOrientation {
class mjCAlternative : public mjsOrientation {
public:
mjCAlternative(); // constuctor
const char* Set(double* quat, // set frame quat
@@ -253,7 +253,7 @@ class mjCBody_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCBody : public mjCBody_, private mjmBody {
class mjCBody : public mjCBody_, private mjsBody {
friend class mjCJoint;
friend class mjCGeom;
friend class mjCSite;
@@ -300,7 +300,7 @@ class mjCBody : public mjCBody_, private mjmBody {
const char* FullInertia(double quat[4], double inertia[3]);
// variables set by user
mjmBody spec;
mjsBody spec;
// inherited
using mjCBase::name;
@@ -343,7 +343,7 @@ class mjCFrame_ : public mjCBase {
mjCAlternative alt_;
};
class mjCFrame : public mjCFrame_, private mjmFrame {
class mjCFrame : public mjCFrame_, private mjsFrame {
friend class mjCBase;
friend class mjCBody;
friend class mjCGeom;
@@ -354,7 +354,7 @@ class mjCFrame : public mjCFrame_, private mjmFrame {
friend class mjCModel;
public:
mjmFrame spec;
mjsFrame spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -389,7 +389,7 @@ class mjCJoint_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCJoint : public mjCJoint_, private mjmJoint {
class mjCJoint : public mjCJoint_, private mjsJoint {
friend class mjCDef;
friend class mjCEquality;
friend class mjCBody;
@@ -399,7 +399,7 @@ class mjCJoint : public mjCJoint_, private mjmJoint {
friend class mjXURDF;
public:
mjmJoint spec;
mjsJoint spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -457,7 +457,7 @@ class mjCGeom_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCGeom : public mjCGeom_, private mjmGeom {
class mjCGeom : public mjCGeom_, private mjsGeom {
friend class mjCDef;
friend class mjCMesh;
friend class mjCPair;
@@ -469,7 +469,7 @@ class mjCGeom : public mjCGeom_, private mjmGeom {
public:
using mjCBase::name;
mjmGeom spec; // variables set by user
mjsGeom spec; // variables set by user
double GetVolume(void); // compute geom volume
void SetInertia(void); // compute and set geom inertia
bool IsVisual(void) const { return visual_; }
@@ -526,7 +526,7 @@ class mjCSite_ : public mjCBase {
int matid; // material id for rendering
};
class mjCSite : public mjCSite_, private mjmSite {
class mjCSite : public mjCSite_, private mjsSite {
friend class mjCDef;
friend class mjCBody;
friend class mjCModel;
@@ -534,9 +534,9 @@ class mjCSite : public mjCSite_, private mjmSite {
friend class mjXURDF;
public:
mjmSite spec; // variables set by user
mjsSite spec; // variables set by user
// use strings from mjCBase rather than mjStrings from mjmSite
// use strings from mjCBase rather than mjStrings from mjsSite
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -572,7 +572,7 @@ class mjCCamera_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCCamera : public mjCCamera_, private mjmCamera {
class mjCCamera : public mjCCamera_, private mjsCamera {
friend class mjCDef;
friend class mjCBody;
friend class mjCModel;
@@ -580,7 +580,7 @@ class mjCCamera : public mjCCamera_, private mjmCamera {
friend class mjXWriter;
public:
mjmCamera spec;
mjsCamera spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -612,14 +612,14 @@ class mjCLight_ : public mjCBase {
std::string spec_targetbody_;
};
class mjCLight : public mjCLight_, private mjmLight {
class mjCLight : public mjCLight_, private mjsLight {
friend class mjCDef;
friend class mjCBody;
friend class mjCModel;
friend class mjXWriter;
public:
mjmLight spec;
mjsLight spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -673,7 +673,7 @@ class mjCFlex_ : public mjCBase {
std::vector<float> spec_texcoord_;
};
class mjCFlex: public mjCFlex_, private mjmFlex {
class mjCFlex: public mjCFlex_, private mjsFlex {
friend class mjCDef;
friend class mjCModel;
friend class mjCFlexcomp;
@@ -681,7 +681,7 @@ class mjCFlex: public mjCFlex_, private mjmFlex {
friend class mjXWriter;
public:
mjmFlex spec;
mjsFlex spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -777,7 +777,7 @@ class mjCMesh_ : public mjCBase {
std::vector<double> face_aabb_; // bounding boxes of all faces
};
class mjCMesh: public mjCMesh_, private mjmMesh {
class mjCMesh: public mjCMesh_, private mjsMesh {
friend class mjCModel;
friend class mjCFlexcomp;
friend class mjXWriter;
@@ -787,7 +787,7 @@ class mjCMesh: public mjCMesh_, private mjmMesh {
mjCMesh& operator=(const mjCMesh& other); // copy assignment
~mjCMesh();
mjmMesh spec;
mjsMesh spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -914,12 +914,12 @@ class mjCSkin_ : public mjCBase {
std::vector<int> bodyid; // body ids
};
class mjCSkin: public mjCSkin_, private mjmSkin {
class mjCSkin: public mjCSkin_, private mjsSkin {
friend class mjCModel;
friend class mjXWriter;
public:
mjmSkin spec;
mjsSkin spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -968,13 +968,13 @@ class mjCHField_ : public mjCBase {
std::vector<float> spec_userdata_;
};
class mjCHField : public mjCHField_, private mjmHField {
class mjCHField : public mjCHField_, private mjsHField {
friend class mjCGeom;
friend class mjCModel;
friend class mjXWriter;
public:
mjmHField spec;
mjsHField spec;
using mjCBase::name;
using mjCBase::info;
@@ -1015,7 +1015,7 @@ class mjCTexture_ : public mjCBase {
std::vector<std::string> spec_cubefiles_;
};
class mjCTexture : public mjCTexture_, private mjmTexture {
class mjCTexture : public mjCTexture_, private mjsTexture {
friend class mjCModel;
friend class mjXReader;
friend class mjXWriter;
@@ -1023,7 +1023,7 @@ class mjCTexture : public mjCTexture_, private mjmTexture {
public:
~mjCTexture(); // destructor
mjmTexture spec;
mjsTexture spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1072,13 +1072,13 @@ class mjCMaterial_ : public mjCBase {
std::string spec_texture_;
};
class mjCMaterial : public mjCMaterial_, private mjmMaterial {
class mjCMaterial : public mjCMaterial_, private mjsMaterial {
friend class mjCDef;
friend class mjCModel;
friend class mjXWriter;
public:
mjmMaterial spec;
mjsMaterial spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1111,14 +1111,14 @@ class mjCPair_ : public mjCBase {
std::string spec_geomname2_;
};
class mjCPair : public mjCPair_, private mjmPair {
class mjCPair : public mjCPair_, private mjsPair {
friend class mjCDef;
friend class mjCBody;
friend class mjCModel;
friend class mjXWriter;
public:
mjmPair spec;
mjsPair spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1163,12 +1163,12 @@ class mjCBodyPair_ : public mjCBase {
std::string spec_bodyname2_;
};
class mjCBodyPair : public mjCBodyPair_, private mjmExclude {
class mjCBodyPair : public mjCBodyPair_, private mjsExclude {
friend class mjCBody;
friend class mjCModel;
public:
mjmExclude spec;
mjsExclude spec;
using mjCBase::name;
using mjCBase::info;
@@ -1207,14 +1207,14 @@ class mjCEquality_ : public mjCBase {
std::string spec_name2_;
};
class mjCEquality : public mjCEquality_, private mjmEquality {
class mjCEquality : public mjCEquality_, private mjsEquality {
friend class mjCDef;
friend class mjCBody;
friend class mjCModel;
friend class mjXWriter;
public:
mjmEquality spec;
mjsEquality spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1248,13 +1248,13 @@ class mjCTendon_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCTendon : public mjCTendon_, private mjmTendon {
class mjCTendon : public mjCTendon_, private mjsTendon {
friend class mjCDef;
friend class mjCModel;
friend class mjXWriter;
public:
mjmTendon spec;
mjsTendon spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1308,12 +1308,12 @@ class mjCWrap_ : public mjCBase {
std::string sidesite; // name of side site
};
class mjCWrap : public mjCWrap_, private mjmWrap {
class mjCWrap : public mjCWrap_, private mjsWrap {
friend class mjCTendon;
friend class mjCModel;
public:
mjmWrap spec;
mjsWrap spec;
using mjCBase::info;
void PointToLocal();
@@ -1350,7 +1350,7 @@ class mjCPlugin : public mjCPlugin_ {
friend class mjXWriter;
public:
mjmPlugin spec;
mjsPlugin spec;
mjCBase* parent; // parent object (only used when generating error message)
mjCPlugin(const mjCPlugin& other); // copy constructor
@@ -1383,13 +1383,13 @@ class mjCActuator_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCActuator : public mjCActuator_, private mjmActuator {
class mjCActuator : public mjCActuator_, private mjsActuator {
friend class mjCDef;
friend class mjCModel;
friend class mjXWriter;
public:
mjmActuator spec;
mjsActuator spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1438,13 +1438,13 @@ class mjCSensor_ : public mjCBase {
std::vector<double> spec_userdata_;
};
class mjCSensor : public mjCSensor_, private mjmSensor {
class mjCSensor : public mjCSensor_, private mjsSensor {
friend class mjCDef;
friend class mjCModel;
friend class mjXWriter;
public:
mjmSensor spec;
mjsSensor spec;
using mjCBase::name;
using mjCBase::classname;
using mjCBase::info;
@@ -1480,12 +1480,12 @@ class mjCNumeric_ : public mjCBase {
std::vector<double> spec_data_;
};
class mjCNumeric : public mjCNumeric_, private mjmNumeric {
class mjCNumeric : public mjCNumeric_, private mjsNumeric {
friend class mjCModel;
friend class mjXWriter;
public:
mjmNumeric spec;
mjsNumeric spec;
using mjCBase::name;
using mjCBase::info;
@@ -1512,12 +1512,12 @@ class mjCText_ : public mjCBase {
std::string spec_data_;
};
class mjCText : public mjCText_, private mjmText {
class mjCText : public mjCText_, private mjsText {
friend class mjCModel;
friend class mjXWriter;
public:
mjmText spec;
mjsText spec;
using mjCBase::name;
using mjCBase::info;
@@ -1549,12 +1549,12 @@ class mjCTuple_ : public mjCBase {
std::vector<double> spec_objprm_;
};
class mjCTuple : public mjCTuple_, private mjmTuple {
class mjCTuple : public mjCTuple_, private mjsTuple {
friend class mjCModel;
friend class mjXWriter;
public:
mjmTuple spec;
mjsTuple spec;
using mjCBase::name;
using mjCBase::info;
@@ -1593,12 +1593,12 @@ class mjCKey_ : public mjCBase {
std::vector<double> spec_ctrl_;
};
class mjCKey : public mjCKey_, private mjmKey {
class mjCKey : public mjCKey_, private mjsKey {
friend class mjCModel;
friend class mjXWriter;
public:
mjmKey spec;
mjsKey spec;
using mjCBase::name;
using mjCBase::info;
+6 -6
View File
@@ -345,14 +345,14 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs,
}
// create model, set filedir
model = mjm_createSpec();
model = mjs_createSpec();
const char* dir;
int ndir = 0;
mju_getResourceDir(resource, &dir, &ndir);
if (dir != nullptr) {
mjm_setString(model->modelfiledir, std::string(dir, ndir).c_str());
mjs_setString(model->modelfiledir, std::string(dir, ndir).c_str());
} else {
mjm_setString(model->modelfiledir, "");
mjs_setString(model->modelfiledir, "");
}
// close resource
@@ -364,8 +364,8 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs,
// find include elements, replace them with subtree from xml file
std::unordered_set<std::string> included = {filename};
mjXReader parser;
parser.SetModelFileDir(mjm_getString(model->modelfiledir));
mjIncludeXML(parser, root, mjm_getString(model->modelfiledir), vfs, included);
parser.SetModelFileDir(mjs_getString(model->modelfiledir));
mjIncludeXML(parser, root, mjs_getString(model->modelfiledir), vfs, included);
// parse MuJoCo model
parser.SetModel(model);
@@ -394,7 +394,7 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs,
// catch known errors
catch (mjXError err) {
mjCopyError(error, err.message, error_sz);
mjm_deleteSpec(model);
mjs_deleteSpec(model);
return nullptr;
}
+7 -7
View File
@@ -56,7 +56,7 @@ std::optional<std::string> GlobalModel::ToXML(const mjModel* m, char* error,
mjCopyError(error, "No XML model loaded", error_sz);
return std::nullopt;
}
mjm_copyBack(model_, m);
mjs_copyBack(model_, m);
std::string result = mjWriteXML(model_, error, error_sz);
if (result.empty()) {
return std::nullopt;
@@ -67,7 +67,7 @@ std::optional<std::string> GlobalModel::ToXML(const mjModel* m, char* error,
void GlobalModel::Set(mjSpec* model) {
std::lock_guard<std::mutex> lock(*mutex_);
if (model_ != nullptr) {
mjm_deleteSpec(model_);
mjs_deleteSpec(model_);
}
model_ = model;
}
@@ -93,21 +93,21 @@ mjModel* mj_loadXML(const char* filename, const mjVFS* vfs,
// parse new model
std::unique_ptr<mjSpec, std::function<void(mjSpec*)>> model(
mjParseXML(filename, vfs, error, error_sz),
[](mjSpec* m) { mjm_deleteSpec(m); });
[](mjSpec* m) { mjs_deleteSpec(m); });
if (!model) {
return nullptr;
}
// compile new model
mjModel* m = mjm_compile(model.get(), vfs);
mjModel* m = mjs_compile(model.get(), vfs);
if (!m) {
mjCopyError(error, mjm_getError(model.get()), error_sz);
mjCopyError(error, mjs_getError(model.get()), error_sz);
return nullptr;
}
// handle compile warning
if (mjm_isWarning(model.get())) {
mjCopyError(error, mjm_getError(model.get()), error_sz);
if (mjs_isWarning(model.get())) {
mjCopyError(error, mjs_getError(model.get()), error_sz);
} else if (error) {
error[0] = '\0';
}
+2 -1
View File
@@ -24,6 +24,7 @@
#include "user/user_api.h"
#include "user/user_model.h"
#include "user/user_objects.h"
#include "xml/xml_util.h"
#include "tinyxml2.h"
namespace {
@@ -51,7 +52,7 @@ void mjXBase::SetModel(mjSpec* _model) {
// read alternative orientation specification
int mjXBase::ReadAlternative(XMLElement* elem, mjmOrientation& alt) {
int mjXBase::ReadAlternative(XMLElement* elem, mjsOrientation& alt) {
string text;
int read = (int)(elem->Attribute("quat") != 0) +
(ReadAttr(elem, "axisangle", 4, alt.axisangle, text) ? 1 : 0) +
+1 -1
View File
@@ -90,7 +90,7 @@ class mjXBase : public mjXUtil {
virtual void SetModel(mjSpec*);
// read alternative orientation specification
static int ReadAlternative(tinyxml2::XMLElement* elem, mjmOrientation& alt);
static int ReadAlternative(tinyxml2::XMLElement* elem, mjsOrientation& alt);
protected:
mjSpec* model; // internally-allocated model
File diff suppressed because it is too large Load Diff
+18 -18
View File
@@ -54,8 +54,8 @@ class mjXReader : public mjXBase {
void Visual(tinyxml2::XMLElement* section); // visual section
void Statistic(tinyxml2::XMLElement* section); // statistic section
void Asset(tinyxml2::XMLElement* section); // asset section
void Body(tinyxml2::XMLElement* section, mjmBody* pbody,
mjmFrame* pframe); // body/world section
void Body(tinyxml2::XMLElement* section, mjsBody* pbody,
mjsFrame* pframe); // body/world section
void Contact(tinyxml2::XMLElement* section); // contact section
void Deformable(tinyxml2::XMLElement* section); // deformable section
void Equality(tinyxml2::XMLElement* section); // equality section
@@ -65,22 +65,22 @@ class mjXReader : public mjXBase {
void Keyframe(tinyxml2::XMLElement* section); // keyframe section
// single element parsers, used in defaults and main body
void OneFlex(tinyxml2::XMLElement* elem, mjmFlex* pflex);
void OneMesh(tinyxml2::XMLElement* elem, mjmMesh* pmesh);
void OneSkin(tinyxml2::XMLElement* elem, mjmSkin* pskin);
void OneMaterial(tinyxml2::XMLElement* elem, mjmMaterial* pmaterial);
void OneJoint(tinyxml2::XMLElement* elem, mjmJoint* pjoint);
void OneGeom(tinyxml2::XMLElement* elem, mjmGeom* pgeom);
void OneSite(tinyxml2::XMLElement* elem, mjmSite* site);
void OneCamera(tinyxml2::XMLElement* elem, mjmCamera* pcamera);
void OneLight(tinyxml2::XMLElement* elem, mjmLight* plight);
void OnePair(tinyxml2::XMLElement* elem, mjmPair* ppair);
void OneEquality(tinyxml2::XMLElement* elem, mjmEquality* pequality);
void OneTendon(tinyxml2::XMLElement* elem, mjmTendon* ptendon);
void OneActuator(tinyxml2::XMLElement* elem, mjmActuator* pactuator);
void OneComposite(tinyxml2::XMLElement* elem, mjmBody* pbody, mjmDefault* def);
void OneFlexcomp(tinyxml2::XMLElement* elem, mjmBody* pbody);
void OnePlugin(tinyxml2::XMLElement* elem, mjmPlugin* plugin);
void OneFlex(tinyxml2::XMLElement* elem, mjsFlex* pflex);
void OneMesh(tinyxml2::XMLElement* elem, mjsMesh* pmesh);
void OneSkin(tinyxml2::XMLElement* elem, mjsSkin* pskin);
void OneMaterial(tinyxml2::XMLElement* elem, mjsMaterial* pmaterial);
void OneJoint(tinyxml2::XMLElement* elem, mjsJoint* pjoint);
void OneGeom(tinyxml2::XMLElement* elem, mjsGeom* pgeom);
void OneSite(tinyxml2::XMLElement* elem, mjsSite* site);
void OneCamera(tinyxml2::XMLElement* elem, mjsCamera* pcamera);
void OneLight(tinyxml2::XMLElement* elem, mjsLight* plight);
void OnePair(tinyxml2::XMLElement* elem, mjsPair* ppair);
void OneEquality(tinyxml2::XMLElement* elem, mjsEquality* pequality);
void OneTendon(tinyxml2::XMLElement* elem, mjsTendon* ptendon);
void OneActuator(tinyxml2::XMLElement* elem, mjsActuator* pactuator);
void OneComposite(tinyxml2::XMLElement* elem, mjsBody* pbody, mjmDefault* def);
void OneFlexcomp(tinyxml2::XMLElement* elem, mjsBody* pbody);
void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin);
mjXSchema schema; // schema used for validation
mjmDefault* GetClass(tinyxml2::XMLElement* section); // get default class name
+14 -14
View File
@@ -553,33 +553,33 @@ void mjXWriter::OneEquality(XMLElement* elem, mjCEquality* peq, mjCDef* def) {
switch (peq->type) {
case mjEQ_CONNECT:
WriteAttrTxt(elem, "body1", mjm_getString(peq->name1));
WriteAttrTxt(elem, "body2", mjm_getString(peq->name2));
WriteAttrTxt(elem, "body1", mjs_getString(peq->name1));
WriteAttrTxt(elem, "body2", mjs_getString(peq->name2));
WriteAttr(elem, "anchor", 3, peq->data);
break;
case mjEQ_WELD:
WriteAttrTxt(elem, "body1", mjm_getString(peq->name1));
WriteAttrTxt(elem, "body2", mjm_getString(peq->name2));
WriteAttrTxt(elem, "body1", mjs_getString(peq->name1));
WriteAttrTxt(elem, "body2", mjs_getString(peq->name2));
WriteAttr(elem, "anchor", 3, peq->data);
WriteAttr(elem, "torquescale", 1, peq->data+10);
WriteAttr(elem, "relpose", 7, peq->data+3);
break;
case mjEQ_JOINT:
WriteAttrTxt(elem, "joint1", mjm_getString(peq->name1));
WriteAttrTxt(elem, "joint2", mjm_getString(peq->name2));
WriteAttrTxt(elem, "joint1", mjs_getString(peq->name1));
WriteAttrTxt(elem, "joint2", mjs_getString(peq->name2));
WriteAttr(elem, "polycoef", 5, peq->data);
break;
case mjEQ_TENDON:
WriteAttrTxt(elem, "tendon1", mjm_getString(peq->name1));
WriteAttrTxt(elem, "tendon2", mjm_getString(peq->name2));
WriteAttrTxt(elem, "tendon1", mjs_getString(peq->name1));
WriteAttrTxt(elem, "tendon2", mjs_getString(peq->name2));
WriteAttr(elem, "polycoef", 5, peq->data);
break;
case mjEQ_FLEX:
WriteAttrTxt(elem, "flex", mjm_getString(peq->name1));
WriteAttrTxt(elem, "flex", mjs_getString(peq->name1));
break;
default:
@@ -731,9 +731,9 @@ void mjXWriter::OneActuator(XMLElement* elem, mjCActuator* pact, mjCDef* def) {
// write plugin
void mjXWriter::OnePlugin(XMLElement* elem, mjmPlugin* plugin) {
const std::string instance_name = std::string(mjm_getString(plugin->instance_name));
const std::string plugin_name = std::string(mjm_getString(plugin->name));
void mjXWriter::OnePlugin(XMLElement* elem, mjsPlugin* plugin) {
const std::string instance_name = std::string(mjs_getString(plugin->instance_name));
const std::string plugin_name = std::string(mjs_getString(plugin->name));
if (!instance_name.empty()) {
WriteAttrTxt(elem, "instance", instance_name);
} else {
@@ -783,13 +783,13 @@ string mjXWriter::Write(char *error, size_t error_sz) {
// create document and root
XMLDocument doc;
XMLElement* root = doc.NewElement("mujoco");
root->SetAttribute("model", mjm_getString(model->modelname));
root->SetAttribute("model", mjs_getString(model->modelname));
// insert root
doc.InsertFirstChild(root);
// write comment if present
string text = mjm_getString(model->comment);
string text = mjs_getString(model->comment);
if (!text.empty()) {
XMLComment* comment = doc.NewComment(text.c_str());
root->LinkEndChild(comment);
+1 -1
View File
@@ -72,7 +72,7 @@ class mjXWriter : public mjXBase {
void OneEquality(tinyxml2::XMLElement* elem, mjCEquality* pequality, mjCDef* def);
void OneTendon(tinyxml2::XMLElement* elem, mjCTendon* ptendon, mjCDef* def);
void OneActuator(tinyxml2::XMLElement* elem, mjCActuator* pactuator, mjCDef* def);
void OnePlugin(tinyxml2::XMLElement* elem, mjmPlugin* plugin);
void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin);
bool writingdefaults; // true during defaults write
};
+47 -47
View File
@@ -112,7 +112,7 @@ void mjXURDF::Parse(
// get model name
std::string modelname;
if (ReadAttrTxt(root, "name", modelname)) {
mjm_setString(model->modelname, modelname.c_str());
mjs_setString(model->modelname, modelname.c_str());
}
// find and register all materials
@@ -206,16 +206,16 @@ void mjXURDF::Parse(
// override the pose for the base link and add a free joint
for (int i = 0; i < (int)urName.size(); i++) {
if (urParent[i] < 0) {
mjmBody* world = mjm_findBody(model, "world");
mjmBody* pbody = mjm_findChild(world, urName[i].c_str());
mjsBody* world = mjs_findBody(model, "world");
mjsBody* pbody = mjs_findChild(world, urName[i].c_str());
mjuu_copyvec(pbody->pos, pos, 3);
mjuu_copyvec(pbody->quat, quat, 4);
// add a free joint to allow motion of the body
// if the mass is 0, assume the object is static
if (!static_body && pbody->mass > 0) {
mjmJoint* pjoint = mjm_addJoint(pbody, 0);
mjm_setString(pjoint->name, (urName[i] + "_free_joint").c_str());
mjsJoint* pjoint = mjs_addJoint(pbody, 0);
mjs_setString(pjoint->name, (urName[i] + "_free_joint").c_str());
pjoint->type = mjJNT_FREE;
}
}
@@ -226,14 +226,14 @@ void mjXURDF::Parse(
void mjXURDF::Body(XMLElement* body_elem) {
std::string name, text;
XMLElement *elem, *temp, *temp1;
mjmBody *pbody, *world;
mjmGeom* pgeom;
mjsBody *pbody, *world;
mjsGeom* pgeom;
// get body name and pointer to mjmBody
// get body name and pointer to mjsBody
ReadAttrTxt(body_elem, "name", name, true);
name = GetPrefixedName(name);
world = mjm_findBody(model, "world");
pbody = mjm_findChild(world, name.c_str());
world = mjs_findBody(model, "world");
pbody = mjs_findChild(world, name.c_str());
if (!pbody) {
throw mjXError(body_elem, "URDF body not found"); // SHOULD NOT OCCUR
}
@@ -272,7 +272,7 @@ void mjXURDF::Body(XMLElement* body_elem) {
// lquat = rotation from specified to default (joint/body) inertial frame
double lquat[4] = {1, 0, 0, 0};
double tmpquat[4] = {1, 0, 0, 0};
const char* altres = mjm_setFullInertia(pbody, lquat, pbody->inertia);
const char* altres = mjs_setFullInertia(pbody, lquat, pbody->inertia);
// inertia are sometimes 0 in URDF files: ignore error in altres, fix later
(void) altres;
@@ -326,7 +326,7 @@ void mjXURDF::Body(XMLElement* body_elem) {
mjXUtil::ReadAttrTxt(elem, "name", geom_name);
name = GetPrefixedName(name);
if (urGeomNames.find(geom_name) == urGeomNames.end()) {
mjm_setString(pgeom->name, geom_name.c_str());
mjs_setString(pgeom->name, geom_name.c_str());
urGeomNames.insert(geom_name);
} else {
std::cerr << "WARNING: Geom with duplicate name '" << geom_name
@@ -349,7 +349,7 @@ void mjXURDF::Body(XMLElement* body_elem) {
mjXUtil::ReadAttrTxt(elem, "name", geom_name);
geom_name = GetPrefixedName(geom_name);
if (urGeomNames.find(geom_name) == urGeomNames.end()) {
mjm_setString(pgeom->name, geom_name.c_str());
mjs_setString(pgeom->name, geom_name.c_str());
urGeomNames.insert(geom_name);
} else {
std::cerr << "WARNING: Geom with duplicate name '" << geom_name
@@ -374,8 +374,8 @@ void mjXURDF::Parse(XMLElement* root) {
void mjXURDF::Joint(XMLElement* joint_elem) {
std::string jntname, name, text;
XMLElement *elem;
mjmBody *pbody, *parent, *world;
mjmJoint *pjoint=0, *pjoint1=0, *pjoint2=0;
mjsBody *pbody, *parent, *world;
mjsJoint *pjoint=0, *pjoint1=0, *pjoint2=0;
int jointtype;
// get type and name
@@ -390,8 +390,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
elem = FindSubElem(joint_elem, "parent", true);
ReadAttrTxt(elem, "link", name, true);
name = GetPrefixedName(name);
world = mjm_findBody(model, "world");
parent = mjm_findChild(world, name.c_str());
world = mjs_findBody(model, "world");
parent = mjs_findChild(world, name.c_str());
if (!parent) { // SHOULD NOT OCCUR
throw mjXError(elem, "invalid parent name in URDF joint definition");
}
@@ -400,8 +400,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
elem = FindSubElem(joint_elem, "child", true);
ReadAttrTxt(elem, "link", name, true);
name = GetPrefixedName(name);
world = mjm_findBody(model, "world");
pbody = mjm_findChild(world, name.c_str());
world = mjs_findBody(model, "world");
pbody = mjs_findChild(world, name.c_str());
if (!pbody) { // SHOULD NOT OCCUR
throw mjXError(elem, "invalid child name in URDF joint definition");
}
@@ -418,16 +418,16 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
switch (jointtype) {
case 0: // revolute
case 1: // continuous
pjoint = mjm_addJoint(pbody, 0);
mjm_setString(pjoint->name, jntname.c_str());
pjoint = mjs_addJoint(pbody, 0);
mjs_setString(pjoint->name, jntname.c_str());
pjoint->type = mjJNT_HINGE;
mjuu_setvec(pjoint->pos, 0, 0, 0);
mjuu_copyvec(pjoint->axis, axis, 3);
break;
case 2: // prismatic
pjoint = mjm_addJoint(pbody, 0);
mjm_setString(pjoint->name, jntname.c_str());
pjoint = mjs_addJoint(pbody, 0);
mjs_setString(pjoint->name, jntname.c_str());
pjoint->type = mjJNT_SLIDE;
mjuu_setvec(pjoint->pos, 0, 0, 0);
mjuu_copyvec(pjoint->axis, axis, 3);
@@ -437,8 +437,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
return;
case 4: // floating
pjoint = mjm_addJoint(pbody, 0);
mjm_setString(pjoint->name, jntname.c_str());
pjoint = mjs_addJoint(pbody, 0);
mjs_setString(pjoint->name, jntname.c_str());
pjoint->type = mjJNT_FREE;
break;
@@ -448,8 +448,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
mjuu_quat2mat(mat, quat);
// construct slider along x
pjoint = mjm_addJoint(pbody, 0);
mjm_setString(pjoint->name, (jntname + "_TX").c_str());
pjoint = mjs_addJoint(pbody, 0);
mjs_setString(pjoint->name, (jntname + "_TX").c_str());
pjoint->type = mjJNT_SLIDE;
tmpaxis[0] = mat[0];
tmpaxis[1] = mat[3];
@@ -458,8 +458,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
mjuu_copyvec(pjoint->axis, tmpaxis, 3);
// construct slider along y
pjoint1 = mjm_addJoint(pbody, 0);
mjm_setString(pjoint1->name, (jntname + "_TY").c_str());
pjoint1 = mjs_addJoint(pbody, 0);
mjs_setString(pjoint1->name, (jntname + "_TY").c_str());
pjoint1->type = mjJNT_SLIDE;
tmpaxis[0] = mat[1];
tmpaxis[1] = mat[4];
@@ -468,8 +468,8 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
mjuu_copyvec(pjoint1->axis, tmpaxis, 3);
// construct hinge around z = locaxis
pjoint2 = mjm_addJoint(pbody, 0);
mjm_setString(pjoint2->name, (jntname + "_RZ").c_str());
pjoint2 = mjs_addJoint(pbody, 0);
mjs_setString(pjoint2->name, (jntname + "_RZ").c_str());
pjoint2->type = mjJNT_HINGE;
mjuu_setvec(pjoint2->pos, 0, 0, 0);
mjuu_copyvec(pjoint2->axis, axis, 3);
@@ -506,7 +506,7 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
// parse origin and geometry elements of visual or collision
mjmGeom* mjXURDF::Geom(XMLElement* geom_elem, mjmBody* pbody, bool collision) {
mjsGeom* mjXURDF::Geom(XMLElement* geom_elem, mjsBody* pbody, bool collision) {
XMLElement *elem, *temp;
std::string text, meshfile;
@@ -514,8 +514,8 @@ mjmGeom* mjXURDF::Geom(XMLElement* geom_elem, mjmBody* pbody, bool collision) {
elem = FindSubElem(geom_elem, "geometry", true);
// add BOX geom, modify type later
mjmGeom* pgeom = mjm_addGeom(pbody, 0);
mjm_setString(pgeom->name, "");
mjsGeom* pgeom = mjs_addGeom(pbody, 0);
mjs_setString(pgeom->name, "");
pgeom->type = mjGEOM_BOX;
if (collision) {
pgeom->contype = 1;
@@ -576,19 +576,19 @@ mjmGeom* mjXURDF::Geom(XMLElement* geom_elem, mjmBody* pbody, bool collision) {
meshname = mjuu_stripext(meshname);
// look for existing mesh
mjmMesh* mesh = mjm_findMesh(model, meshname.c_str());
mjmMesh* pmesh = 0;
mjsMesh* mesh = mjs_findMesh(model, meshname.c_str());
mjsMesh* pmesh = 0;
// does not exist: create
if (!mesh) {
pmesh = mjm_addMesh(model, 0);
pmesh = mjs_addMesh(model, 0);
}
// exists with different scale: append name with '1', create
else if (mesh->scale[0]!=meshscale[0] ||
mesh->scale[1]!=meshscale[1] ||
mesh->scale[2]!=meshscale[2]) {
pmesh = mjm_addMesh(model, 0);
pmesh = mjs_addMesh(model, 0);
meshname = meshname + "1";
}
@@ -598,9 +598,9 @@ mjmGeom* mjXURDF::Geom(XMLElement* geom_elem, mjmBody* pbody, bool collision) {
}
// set fields
mjm_setString(pmesh->file, meshfile.c_str());
mjm_setString(pmesh->name, meshname.c_str());
mjm_setString(pgeom->meshname, meshname.c_str());
mjs_setString(pmesh->file, meshfile.c_str());
mjs_setString(pmesh->name, meshname.c_str());
mjs_setString(pgeom->meshname, meshname.c_str());
pmesh->scale[0] = meshscale[0];
pmesh->scale[1] = meshscale[1];
pmesh->scale[2] = meshscale[2];
@@ -683,22 +683,22 @@ void mjXURDF::AddBody(std::string name) {
// add body with given number to the mjCModel tree, process children
void mjXURDF::AddToTree(int n) {
// get pointer to parent in mjCModel tree
mjmBody *parent = 0, *child = 0, *world = 0;
mjsBody *parent = 0, *child = 0, *world = 0;
if (urParent[n]>=0) {
world = mjm_findBody(model, "world");
parent = mjm_findChild(world, urName[urParent[n]].c_str());
world = mjs_findBody(model, "world");
parent = mjs_findChild(world, urName[urParent[n]].c_str());
if (!parent)
throw mjXError(0, "URDF body parent should already be in tree: %s",
urName[urParent[n]].c_str()); // SHOULD NOT OCCUR
} else {
parent = mjm_findBody(model, "world");
parent = mjs_findBody(model, "world");
}
// add this body
if (urName[n] != "world") {
child = mjm_addBody(parent, 0);
mjm_setString(child->name, urName[n].c_str());
child = mjs_addBody(parent, 0);
mjs_setString(child->name, urName[n].c_str());
}
// add children recursively
+2 -2
View File
@@ -51,8 +51,8 @@ class mjXURDF : public mjXBase {
void AddToTree(int n); // add body to mjCModel tree
void Body(tinyxml2::XMLElement* body_elem); // parse body
void Joint(tinyxml2::XMLElement* joint_elem); // parse joint
mjmGeom* Geom(tinyxml2::XMLElement* geom_elem,
mjmBody* pbody, bool collision); // parse origin and geometry of geom
mjsGeom* Geom(tinyxml2::XMLElement* geom_elem,
mjsBody* pbody, bool collision); // parse origin and geometry of geom
void Origin(tinyxml2::XMLElement* origin_elem, double* pos, double* quat); // parse origin element
void MakeMaterials(tinyxml2::XMLElement* elem); // find all materials recursively
+24 -24
View File
@@ -39,28 +39,28 @@ using ::testing::NotNull;
// ----------------------------- test set/get --------------------------------
TEST_F(MujocoTest, ReadWriteData) {
mjSpec* spec = mjm_createSpec();
mjmBody* world = mjm_findBody(spec, "world");
mjmBody* body = mjm_addBody(world, 0);
mjmSite* site = mjm_addSite(body, 0);
mjSpec* spec = mjs_createSpec();
mjsBody* world = mjs_findBody(spec, "world");
mjsBody* body = mjs_addBody(world, 0);
mjsSite* site = mjs_addSite(body, 0);
{
double vec[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
const char* str = "sitename";
mjm_setString(site->name, str);
mjm_setDouble(site->userdata, vec, 10);
mjs_setString(site->name, str);
mjs_setDouble(site->userdata, vec, 10);
}
EXPECT_THAT(mjm_getString(site->name), HasSubstr("sitename"));
EXPECT_THAT(mjs_getString(site->name), HasSubstr("sitename"));
int nsize;
const double* vec = mjm_getDouble(site->userdata, &nsize);
const double* vec = mjs_getDouble(site->userdata, &nsize);
for (int i = 0; i < nsize; ++i) {
EXPECT_EQ(vec[i], i);
}
mjm_deleteSpec(spec);
mjs_deleteSpec(spec);
}
// ------------------- test recompilation multiple files ----------------------
@@ -93,12 +93,12 @@ TEST_F(PluginTest, RecompileCompare) {
mjSpec* s = mjParseXML(xml.c_str(), nullptr, err.data(), err.size());
// copy spec
mjSpec* s_copy = mjm_copySpec(s);
mjSpec* s_copy = mjs_copySpec(s);
// compile twice and compare
mjModel* m_old = mjm_compile(s, nullptr);
mjModel* m_new = mjm_compile(s, nullptr);
mjModel* m_copy = mjm_compile(s_copy, nullptr);
mjModel* m_old = mjs_compile(s, nullptr);
mjModel* m_new = mjs_compile(s, nullptr);
mjModel* m_copy = mjs_compile(s_copy, nullptr);
ASSERT_THAT(m_old, NotNull())
<< "Failed to compile " << xml << ": " << err.data();
@@ -118,8 +118,8 @@ TEST_F(PluginTest, RecompileCompare) {
<< "Different field: " << field << '\n';
// copy to a new spec, compile and compare
mjSpec* s_copy2 = mjm_copySpec(s);
mjModel* m_copy2 = mjm_compile(s_copy2, nullptr);
mjSpec* s_copy2 = mjs_copySpec(s);
mjModel* m_copy2 = mjs_compile(s_copy2, nullptr);
ASSERT_THAT(m_copy2, NotNull())
<< "Failed to compile " << xml << ": " << err.data();
@@ -130,9 +130,9 @@ TEST_F(PluginTest, RecompileCompare) {
<< "Different field: " << field << '\n';
// delete models
mjm_deleteSpec(s);
mjm_deleteSpec(s_copy);
mjm_deleteSpec(s_copy2);
mjs_deleteSpec(s);
mjs_deleteSpec(s_copy);
mjs_deleteSpec(s_copy2);
mj_deleteModel(m_old);
mj_deleteModel(m_new);
mj_deleteModel(m_copy);
@@ -273,7 +273,7 @@ TEST_F(MujocoTest, Attach) {
EXPECT_THAT(parent, NotNull()) << er.data();
// get frame
mjmFrame* frame = mjm_findFrame(parent, "frame");
mjsFrame* frame = mjs_findFrame(parent, "frame");
EXPECT_THAT(frame, NotNull());
// model with one cylinder and a hinge
@@ -281,15 +281,15 @@ TEST_F(MujocoTest, Attach) {
EXPECT_THAT(child, NotNull()) << er.data();
// get subtree
mjmBody* body = mjm_findBody(child, "body");
mjsBody* body = mjs_findBody(child, "body");
EXPECT_THAT(body, NotNull());
// attach child to parent frame
EXPECT_THAT(
mjm_attachBody(frame, body, /*prefix=*/"attached-", /*suffix=*/"-1"), 0);
mjs_attachBody(frame, body, /*prefix=*/"attached-", /*suffix=*/"-1"), 0);
// compile new model
mjModel* m_attached = mjm_compile(parent, 0);
mjModel* m_attached = mjs_compile(parent, 0);
EXPECT_THAT(m_attached, NotNull());
// check full name stored in mjModel
@@ -306,8 +306,8 @@ TEST_F(MujocoTest, Attach) {
<< "Different field: " << field << '\n';;
// destroy everything
mjm_deleteSpec(parent);
mjm_deleteSpec(child);
mjs_deleteSpec(parent);
mjs_deleteSpec(child);
mj_deleteModel(m_attached);
mj_deleteModel(m_expected);
}