Add AddFreeJoint and remove isfree from AddJoint.
PiperOrigin-RevId: 604597442 Change-Id: I2fe03cf0f9a59b425080cc5cc12b236fea9c020d
This commit is contained in:
committed by
Copybara-Service
parent
3b2dd06c54
commit
01439f28b3
@@ -456,7 +456,7 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjCBody* body, char* error, int
|
|||||||
// add slider joints if none defined
|
// add slider joints if none defined
|
||||||
if (!add[mjCOMPKIND_PARTICLE]) {
|
if (!add[mjCOMPKIND_PARTICLE]) {
|
||||||
for (int i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
mjCJoint* jnt = b->AddJoint(&defjoint[mjCOMPKIND_JOINT][0], false);
|
mjCJoint* jnt = b->AddJoint(&defjoint[mjCOMPKIND_JOINT][0]);
|
||||||
jnt->def = body->def;
|
jnt->def = body->def;
|
||||||
jnt->type = mjJNT_SLIDE;
|
jnt->type = mjJNT_SLIDE;
|
||||||
mjuu_setvec(jnt->pos, 0, 0, 0);
|
mjuu_setvec(jnt->pos, 0, 0, 0);
|
||||||
@@ -468,7 +468,7 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjCBody* body, char* error, int
|
|||||||
// add user-specified joints
|
// add user-specified joints
|
||||||
else {
|
else {
|
||||||
for (auto defjnt : defjoint[mjCOMPKIND_PARTICLE]) {
|
for (auto defjnt : defjoint[mjCOMPKIND_PARTICLE]) {
|
||||||
mjCJoint* jnt = b->AddJoint(&defjnt, false);
|
mjCJoint* jnt = b->AddJoint(&defjnt);
|
||||||
jnt->def = body->def;
|
jnt->def = body->def;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -659,16 +659,25 @@ mjCFrame* mjCBody::AddFrame(mjCFrame* _frame) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// create new joint and add it to body
|
// create new free joint (no default inheritance) and add it to body
|
||||||
// _def==NULL means no defaults, unlike all others which inherit from body
|
mjCJoint* mjCBody::AddFreeJoint() {
|
||||||
mjCJoint* mjCBody::AddJoint(mjCDef* _def, bool isfree) {
|
// create free joint, don't inherit from defaults
|
||||||
// create joint
|
mjCJoint* obj = new mjCJoint(model, NULL);
|
||||||
mjCJoint* obj = new mjCJoint(model, _def ? _def : (isfree ? NULL : def));
|
obj->type = mjJNT_FREE;
|
||||||
|
|
||||||
// set free type if specified
|
// set body pointer, add
|
||||||
if (isfree) {
|
obj->body = this;
|
||||||
obj->type = mjJNT_FREE;
|
|
||||||
}
|
joints.push_back(obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// create new joint and add it to body
|
||||||
|
mjCJoint* mjCBody::AddJoint(mjCDef* _def) {
|
||||||
|
// create joint
|
||||||
|
mjCJoint* obj = new mjCJoint(model, _def ? _def : def);
|
||||||
|
|
||||||
// set body pointer, add
|
// set body pointer, add
|
||||||
obj->body = this;
|
obj->body = this;
|
||||||
|
|||||||
@@ -229,7 +229,8 @@ class mjCBody : public mjCBase {
|
|||||||
// API for adding objects to body
|
// API for adding objects to body
|
||||||
mjCBody* AddBody(mjCDef* = 0);
|
mjCBody* AddBody(mjCDef* = 0);
|
||||||
mjCFrame* AddFrame(mjCFrame* = 0);
|
mjCFrame* AddFrame(mjCFrame* = 0);
|
||||||
mjCJoint* AddJoint(mjCDef* = 0, bool isfree = false);
|
mjCJoint* AddJoint(mjCDef* = 0);
|
||||||
|
mjCJoint* AddFreeJoint();
|
||||||
mjCGeom* AddGeom(mjCDef* = 0);
|
mjCGeom* AddGeom(mjCDef* = 0);
|
||||||
mjCSite* AddSite(mjCDef* = 0);
|
mjCSite* AddSite(mjCDef* = 0);
|
||||||
mjCCamera* AddCamera(mjCDef* = 0);
|
mjCCamera* AddCamera(mjCDef* = 0);
|
||||||
|
|||||||
@@ -3045,7 +3045,7 @@ void mjXReader::Body(XMLElement* section, mjCBody* pbody, mjCFrame* frame) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create free joint without defaults
|
// create free joint without defaults
|
||||||
mjCJoint* pjoint = pbody->AddJoint(NULL, true);
|
mjCJoint* pjoint = pbody->AddFreeJoint();
|
||||||
pjoint->SetFrame(frame);
|
pjoint->SetFrame(frame);
|
||||||
|
|
||||||
// save defaults after creation, to make sure writing is ok
|
// save defaults after creation, to make sure writing is ok
|
||||||
|
|||||||
Reference in New Issue
Block a user