rename mjspec api structs and functions mjm -> mjs
PiperOrigin-RevId: 618017976 Change-Id: I5f790167e5ca670f8d5f92e8e1c920db8d236144
This commit is contained in:
committed by
Copybara-Service
parent
f0ad80f268
commit
4660a297d1
+64
-64
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
+235
-235
File diff suppressed because it is too large
Load Diff
+18
-18
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user