Declare loop variables inside for loop in C++ files.

PiperOrigin-RevId: 518852339
Change-Id: I0174d873d89e48f11b816d337728f213c2798248
This commit is contained in:
Nimrod Gileadi
2023-03-23 07:21:46 -07:00
committed by Copybara-Service
parent 145fe7f354
commit 0e7e299bf6
11 changed files with 375 additions and 447 deletions
+150 -168
View File
@@ -181,29 +181,27 @@ mjCModel::mjCModel() {
// destructor
mjCModel::~mjCModel() {
unsigned int i;
// delete kinematic tree and all objects allocated in it
delete bodies[0];
// delete objects allocated in mjCModel
for (i=0; i<meshes.size(); i++) delete meshes[i];
for (i=0; i<skins.size(); i++) delete skins[i];
for (i=0; i<hfields.size(); i++) delete hfields[i];
for (i=0; i<textures.size(); i++) delete textures[i];
for (i=0; i<materials.size(); i++) delete materials[i];
for (i=0; i<pairs.size(); i++) delete pairs[i];
for (i=0; i<excludes.size(); i++) delete excludes[i];
for (i=0; i<equalities.size(); i++) delete equalities[i];
for (i=0; i<tendons.size(); i++) delete tendons[i]; // also deletes wraps
for (i=0; i<actuators.size(); i++) delete actuators[i];
for (i=0; i<sensors.size(); i++) delete sensors[i];
for (i=0; i<numerics.size(); i++) delete numerics[i];
for (i=0; i<texts.size(); i++) delete texts[i];
for (i=0; i<tuples.size(); i++) delete tuples[i];
for (i=0; i<keys.size(); i++) delete keys[i];
for (i=0; i<plugins.size(); i++) delete plugins[i];
for (i=0; i<defaults.size(); i++) delete defaults[i];
for (int i=0; i<meshes.size(); i++) delete meshes[i];
for (int i=0; i<skins.size(); i++) delete skins[i];
for (int i=0; i<hfields.size(); i++) delete hfields[i];
for (int i=0; i<textures.size(); i++) delete textures[i];
for (int i=0; i<materials.size(); i++) delete materials[i];
for (int i=0; i<pairs.size(); i++) delete pairs[i];
for (int i=0; i<excludes.size(); i++) delete excludes[i];
for (int i=0; i<equalities.size(); i++) delete equalities[i];
for (int i=0; i<tendons.size(); i++) delete tendons[i]; // also deletes wraps
for (int i=0; i<actuators.size(); i++) delete actuators[i];
for (int i=0; i<sensors.size(); i++) delete sensors[i];
for (int i=0; i<numerics.size(); i++) delete numerics[i];
for (int i=0; i<texts.size(); i++) delete texts[i];
for (int i=0; i<tuples.size(); i++) delete tuples[i];
for (int i=0; i<keys.size(); i++) delete keys[i];
for (int i=0; i<plugins.size(); i++) delete plugins[i];
for (int i=0; i<defaults.size(); i++) delete defaults[i];
// clear pointer lists created in model construction
meshes.clear();
@@ -705,32 +703,28 @@ bool mjCModel::IsNullPose(const mjtNum* pos, const mjtNum* quat) {
// make lists of objects in tree: bodies, geoms, joints, sites, cameras, lights
void mjCModel::MakeLists(mjCBody* body) {
unsigned int i;
// add this body if not world
if (body!=bodies[0]) {
bodies.push_back(body);
}
// add body's geoms, joints, sites, cameras, lights
for (i=0; i<body->geoms.size(); i++) geoms.push_back(body->geoms[i]);
for (i=0; i<body->joints.size(); i++) joints.push_back(body->joints[i]);
for (i=0; i<body->sites.size(); i++) sites.push_back(body->sites[i]);
for (i=0; i<body->cameras.size(); i++) cameras.push_back(body->cameras[i]);
for (i=0; i<body->lights.size(); i++) lights.push_back(body->lights[i]);
for (int i=0; i<body->geoms.size(); i++) geoms.push_back(body->geoms[i]);
for (int i=0; i<body->joints.size(); i++) joints.push_back(body->joints[i]);
for (int i=0; i<body->sites.size(); i++) sites.push_back(body->sites[i]);
for (int i=0; i<body->cameras.size(); i++) cameras.push_back(body->cameras[i]);
for (int i=0; i<body->lights.size(); i++) lights.push_back(body->lights[i]);
// recursive call to all child bodies
for (i=0; i<body->bodies.size(); i++) MakeLists(body->bodies[i]);
for (int i=0; i<body->bodies.size(); i++) MakeLists(body->bodies[i]);
}
// index assets
void mjCModel::IndexAssets(void) {
unsigned int i;
// assets referenced in geoms
for (i=0; i<geoms.size(); i++) {
for (int i=0; i<geoms.size(); i++) {
mjCGeom* pgeom = geoms[i];
// find material by name
@@ -765,7 +759,7 @@ void mjCModel::IndexAssets(void) {
}
// assets referenced in skins
for (i=0; i<skins.size(); i++) {
for (int i=0; i<skins.size(); i++) {
mjCSkin* pskin = skins[i];
// find material by name
@@ -780,7 +774,7 @@ void mjCModel::IndexAssets(void) {
}
// materials referenced in sites
for (i=0; i<sites.size(); i++) {
for (int i=0; i<sites.size(); i++) {
mjCSite* psite = sites[i];
// find material by name
@@ -795,7 +789,7 @@ void mjCModel::IndexAssets(void) {
}
// materials referenced in tendons
for (i=0; i<tendons.size(); i++) {
for (int i=0; i<tendons.size(); i++) {
mjCTendon* pten = tendons[i];
// find material by name
@@ -810,7 +804,7 @@ void mjCModel::IndexAssets(void) {
}
// textures referenced in materials
for (i=0; i<materials.size(); i++) {
for (int i=0; i<materials.size(); i++) {
mjCMaterial* pmat = materials[i];
// find texture by name
@@ -830,10 +824,9 @@ void mjCModel::IndexAssets(void) {
// if asset name is missing, set to filename
void mjCModel::SetDefaultNames(void) {
string stripped;
unsigned int i;
// meshes
for (i=0; i<meshes.size(); i++) {
for (int i=0; i<meshes.size(); i++) {
if (meshes[i]->name.empty()) {
stripped = mjuu_strippath(meshes[i]->file);
meshes[i]->name = mjuu_stripext(stripped);
@@ -846,7 +839,7 @@ void mjCModel::SetDefaultNames(void) {
}
// skins
for (i=0; i<skins.size(); i++) {
for (int i=0; i<skins.size(); i++) {
if (skins[i]->name.empty()) {
stripped = mjuu_strippath(skins[i]->file);
skins[i]->name = mjuu_stripext(stripped);
@@ -854,7 +847,7 @@ void mjCModel::SetDefaultNames(void) {
}
// hfields
for (i=0; i<hfields.size(); i++) {
for (int i=0; i<hfields.size(); i++) {
if (hfields[i]->name.empty()) {
stripped = mjuu_strippath(hfields[i]->file);
hfields[i]->name = mjuu_stripext(stripped);
@@ -867,7 +860,7 @@ void mjCModel::SetDefaultNames(void) {
}
// textures
for (i=0; i<textures.size(); i++) {
for (int i=0; i<textures.size(); i++) {
if (textures[i]->name.empty()) {
stripped = mjuu_strippath(textures[i]->file);
textures[i]->name = mjuu_stripext(stripped);
@@ -880,7 +873,7 @@ void mjCModel::SetDefaultNames(void) {
}
// materials: name check only
for (i=0; i<materials.size(); i++) {
for (int i=0; i<materials.size(); i++) {
if (materials[i]->name.empty()) {
throw mjCError(materials[i], "empty name in material");
}
@@ -895,8 +888,6 @@ const int nVEL[4] = {6, 3, 1, 1};
// set array sizes
void mjCModel::SetSizes(void) {
int i, j;
// set from object list sizes
nbody = (int)bodies.size();
njnt = (int)joints.size();
@@ -921,13 +912,13 @@ void mjCModel::SetSizes(void) {
nplugin = (int)plugins.size();
// nq, nv
for (i=0; i<njnt; i++) {
for (int i=0; i<njnt; i++) {
nq += nPOS[joints[i]->type];
nv += nVEL[joints[i]->type];
}
// nu, na
for (i=0; i<(int)actuators.size(); i++) {
for (int i=0; i<(int)actuators.size(); i++) {
if (actuators[i]->dyntype == mjDYN_NONE) {
nu++;
} else {
@@ -937,12 +928,12 @@ void mjCModel::SetSizes(void) {
}
// nbvh
for (i=0; i<nbody; i++) {
for (int i=0; i<nbody; i++) {
nbvh += bodies[i]->nbvh;
}
// nmeshvert, nmeshface, nmeshtexcoord, nmeshgraph
for (i=0; i<nmesh; i++) {
for (int i=0; i<nmesh; i++) {
nmeshvert += meshes[i]->nvert;
nmeshnormal += meshes[i]->nnormal;
nmeshface += meshes[i]->nface;
@@ -951,67 +942,67 @@ void mjCModel::SetSizes(void) {
}
// nskinvert, nskintexvert, nskinface, nskinbone, nskinbonevert
for (i=0; i<nskin; i++) {
for (int i=0; i<nskin; i++) {
nskinvert += skins[i]->vert.size()/3;
nskintexvert += skins[i]->texcoord.size()/2;
nskinface += skins[i]->face.size()/3;
nskinbone += skins[i]->bodyid.size();
for (j=0; j<skins[i]->bodyid.size(); j++) {
for (int j=0; j<skins[i]->bodyid.size(); j++) {
nskinbonevert += skins[i]->vertid[j].size();
}
}
// nhfielddata
for (i=0; i<nhfield; i++) nhfielddata += hfields[i]->nrow * hfields[i]->ncol;
for (int i=0; i<nhfield; i++) nhfielddata += hfields[i]->nrow * hfields[i]->ncol;
// ntexdata
for (i=0; i<ntex; i++) ntexdata += 3 * textures[i]->width * textures[i]->height;
for (int i=0; i<ntex; i++) ntexdata += 3 * textures[i]->width * textures[i]->height;
// nwrap
for (i=0; i<ntendon; i++) nwrap += (int)tendons[i]->path.size();
for (int i=0; i<ntendon; i++) nwrap += (int)tendons[i]->path.size();
// nsensordata
for (i=0; i<nsensor; i++) nsensordata += sensors[i]->dim;
for (int i=0; i<nsensor; i++) nsensordata += sensors[i]->dim;
// nnumericdata
for (i=0; i<nnumeric; i++) nnumericdata += numerics[i]->size;
for (int i=0; i<nnumeric; i++) nnumericdata += numerics[i]->size;
// ntextdata
for (i=0; i<ntext; i++) ntextdata += (int)texts[i]->data.size() + 1;
for (int i=0; i<ntext; i++) ntextdata += (int)texts[i]->data.size() + 1;
// ntupledata
for (i=0; i<ntuple; i++) ntupledata += (int)tuples[i]->objtype.size();
for (int i=0; i<ntuple; i++) ntupledata += (int)tuples[i]->objtype.size();
// npluginattr
for (i=0; i<nplugin; i++) npluginattr += (int)plugins[i]->flattened_attributes.size();
for (int i=0; i<nplugin; i++) npluginattr += (int)plugins[i]->flattened_attributes.size();
// nnames
nnames = (int)modelname.size() + 1;
for (i=0; i<nbody; i++) nnames += (int)bodies[i]->name.length() + 1;
for (i=0; i<njnt; i++) nnames += (int)joints[i]->name.length() + 1;
for (i=0; i<ngeom; i++) nnames += (int)geoms[i]->name.length() + 1;
for (i=0; i<nsite; i++) nnames += (int)sites[i]->name.length() + 1;
for (i=0; i<ncam; i++) nnames += (int)cameras[i]->name.length() + 1;
for (i=0; i<nlight; i++) nnames += (int)lights[i]->name.length() + 1;
for (i=0; i<nmesh; i++) nnames += (int)meshes[i]->name.length() + 1;
for (i=0; i<nskin; i++) nnames += (int)skins[i]->name.length() + 1;
for (i=0; i<nhfield; i++) nnames += (int)hfields[i]->name.length() + 1;
for (i=0; i<ntex; i++) nnames += (int)textures[i]->name.length() + 1;
for (i=0; i<nmat; i++) nnames += (int)materials[i]->name.length() + 1;
for (i=0; i<npair; i++) nnames += (int)pairs[i]->name.length() + 1;
for (i=0; i<nexclude; i++) nnames += (int)excludes[i]->name.length() + 1;
for (i=0; i<neq; i++) nnames += (int)equalities[i]->name.length() + 1;
for (i=0; i<ntendon; i++) nnames += (int)tendons[i]->name.length() + 1;
for (i=0; i<nu; i++) nnames += (int)actuators[i]->name.length() + 1;
for (i=0; i<nsensor; i++) nnames += (int)sensors[i]->name.length() + 1;
for (i=0; i<nnumeric; i++) nnames += (int)numerics[i]->name.length() + 1;
for (i=0; i<ntext; i++) nnames += (int)texts[i]->name.length() + 1;
for (i=0; i<ntuple; i++) nnames += (int)tuples[i]->name.length() + 1;
for (i=0; i<nkey; i++) nnames += (int)keys[i]->name.length() + 1;
for (i=0; i<nplugin; i++) nnames += (int)plugins[i]->name.length() + 1;
for (int i=0; i<nbody; i++) nnames += (int)bodies[i]->name.length() + 1;
for (int i=0; i<njnt; i++) nnames += (int)joints[i]->name.length() + 1;
for (int i=0; i<ngeom; i++) nnames += (int)geoms[i]->name.length() + 1;
for (int i=0; i<nsite; i++) nnames += (int)sites[i]->name.length() + 1;
for (int i=0; i<ncam; i++) nnames += (int)cameras[i]->name.length() + 1;
for (int i=0; i<nlight; i++) nnames += (int)lights[i]->name.length() + 1;
for (int i=0; i<nmesh; i++) nnames += (int)meshes[i]->name.length() + 1;
for (int i=0; i<nskin; i++) nnames += (int)skins[i]->name.length() + 1;
for (int i=0; i<nhfield; i++) nnames += (int)hfields[i]->name.length() + 1;
for (int i=0; i<ntex; i++) nnames += (int)textures[i]->name.length() + 1;
for (int i=0; i<nmat; i++) nnames += (int)materials[i]->name.length() + 1;
for (int i=0; i<npair; i++) nnames += (int)pairs[i]->name.length() + 1;
for (int i=0; i<nexclude; i++) nnames += (int)excludes[i]->name.length() + 1;
for (int i=0; i<neq; i++) nnames += (int)equalities[i]->name.length() + 1;
for (int i=0; i<ntendon; i++) nnames += (int)tendons[i]->name.length() + 1;
for (int i=0; i<nu; i++) nnames += (int)actuators[i]->name.length() + 1;
for (int i=0; i<nsensor; i++) nnames += (int)sensors[i]->name.length() + 1;
for (int i=0; i<nnumeric; i++) nnames += (int)numerics[i]->name.length() + 1;
for (int i=0; i<ntext; i++) nnames += (int)texts[i]->name.length() + 1;
for (int i=0; i<ntuple; i++) nnames += (int)tuples[i]->name.length() + 1;
for (int i=0; i<nkey; i++) nnames += (int)keys[i]->name.length() + 1;
for (int i=0; i<nplugin; i++) nnames += (int)plugins[i]->name.length() + 1;
// nemax
for (i=0; i<neq; i++)
for (int i=0; i<neq; i++)
if (equalities[i]->type==mjEQ_CONNECT) {
nemax += 3;
} else if (equalities[i]->type==mjEQ_WELD) {
@@ -1092,8 +1083,6 @@ void* LRfunc(void* arg) {
// compute actuator lengthrange
void mjCModel::LengthRange(mjModel* m, mjData* data) {
int i;
// save options and modify
mjOption saveopt = m->opt;
m->opt.disableflags = mjDSBL_FRICTIONLOSS | mjDSBL_CONTACT | mjDSBL_PASSIVE |
@@ -1107,7 +1096,7 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
// count actuators that need computation
int cnt = 0;
for (i=0; i<m->nu; i++) {
for (int i=0; i<m->nu; i++) {
// skip depending on mode and type
int ismuscle = (m->actuator_gaintype[i]==mjGAIN_MUSCLE ||
m->actuator_biastype[i]==mjBIAS_MUSCLE);
@@ -1132,7 +1121,7 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
// single thread
if (!usethread || cnt<2 || nthread<2) {
char err[200];
for (i=0; i<m->nu; i++) {
for (int i=0; i<m->nu; i++) {
if (!mj_setLengthRange(m, data, i, &LRopt, err, 200)) {
throw mjCError(0, err);
}
@@ -1144,7 +1133,7 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
// allocate mjData for each thread
char err[16][200];
mjData* pdata[16] = {data};
for (i=1; i<nthread; i++) {
for (int i=1; i<nthread; i++) {
pdata[i] = mj_makeData(m);
}
@@ -1156,7 +1145,7 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
// prepare thread function arguments, clear errors
LRThreadArg arg[16];
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
LRThreadArg temp = {m, pdata[i], i*num, num, &LRopt, err[i], 200};
arg[i] = temp;
err[i][0] = 0;
@@ -1166,12 +1155,12 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
#if defined(_WIN32) || defined(__APPLE__)
// launch threads
thread th[16];
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
th[i] = thread(LRfunc, arg+i);
}
// wait for threads to finish
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
th[i].join();
}
@@ -1179,23 +1168,23 @@ void mjCModel::LengthRange(mjModel* m, mjData* data) {
#else
// launch threads
pthread_t th[16];
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
pthread_create(th+i, NULL, LRfunc, arg+i);
}
// wait for threads to finish
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
pthread_join(th[i], NULL);
}
#endif
// free mjData allocated here
for (i=1; i<nthread; i++) {
for (int i=1; i<nthread; i++) {
mj_deleteData(pdata[i]);
}
// report first error
for (i=0; i<nthread; i++) {
for (int i=0; i<nthread; i++) {
if (err[i][0]) {
throw mjCError(0, err[i]);
}
@@ -1326,14 +1315,13 @@ void mjCModel::CopyNames(mjModel* m) {
// copy objects inside kinematic tree
void mjCModel::CopyTree(mjModel* m) {
int i, j, j1;
int jntadr = 0; // addresses in global arrays
int dofadr = 0;
int qposadr = 0;
int bvh_adr = 0;
// main loop over bodies
for (i=0; i<nbody; i++) {
for (int i=0; i<nbody; i++) {
// get body and parent pointers
mjCBody* pb = bodies[i];
mjCBody* par = bodies[pb->parentid];
@@ -1370,7 +1358,7 @@ void mjCModel::CopyTree(mjModel* m) {
// count free joints
int cntfree = 0;
for (j=0; j<(int)pb->joints.size(); j++) {
for (int j=0; j<(int)pb->joints.size(); j++) {
cntfree += (pb->joints[j]->type == mjJNT_FREE);
}
@@ -1396,7 +1384,7 @@ void mjCModel::CopyTree(mjModel* m) {
m->body_sameframe[i] = IsNullPose(m->body_ipos+3*i, m->body_iquat+4*i);
// init simple: sameframe, and (self-root, or parent is fixed child of world)
j = m->body_parentid[i];
int j = m->body_parentid[i];
m->body_simple[i] = (m->body_sameframe[i] &&
(m->body_rootid[i]==i ||
(m->body_parentid[j]==0 &&
@@ -1409,7 +1397,7 @@ void mjCModel::CopyTree(mjModel* m) {
// loop over joints for this body
int rotfound = 0;
for (j=0; j<(int)pb->joints.size(); j++) {
for (int j=0; j<(int)pb->joints.size(); j++) {
// get pointer and id
mjCJoint* pj = pb->joints[j];
int jid = pj->id;
@@ -1470,7 +1458,7 @@ void mjCModel::CopyTree(mjModel* m) {
}
// set dof fields for this joint
for (j1=0; j1<nVEL[pj->type]; j1++) {
for (int j1=0; j1<nVEL[pj->type]; j1++) {
// set attributes
m->dof_bodyid[dofadr] = pb->id;
m->dof_jntid[dofadr] = jid;
@@ -1494,7 +1482,7 @@ void mjCModel::CopyTree(mjModel* m) {
}
// loop over geoms for this body
for (j=0; j<(int)pb->geoms.size(); j++) {
for (int j=0; j<(int)pb->geoms.size(); j++) {
// get pointer and id
mjCGeom* pg = pb->geoms[j];
int gid = pg->id;
@@ -1549,7 +1537,7 @@ void mjCModel::CopyTree(mjModel* m) {
}
// loop over sites for this body
for (j=0; j<(int)pb->sites.size(); j++) {
for (int j=0; j<(int)pb->sites.size(); j++) {
// get pointer and id
mjCSite* ps = pb->sites[j];
int sid = ps->id;
@@ -1582,7 +1570,7 @@ void mjCModel::CopyTree(mjModel* m) {
}
// loop over cameras for this body
for (j=0; j<(int)pb->cameras.size(); j++) {
for (int j=0; j<(int)pb->cameras.size(); j++) {
// get pointer and id
mjCCamera* pc = pb->cameras[j];
int cid = pc->id;
@@ -1599,7 +1587,7 @@ void mjCModel::CopyTree(mjModel* m) {
}
// loop over lights for this body
for (j=0; j<(int)pb->lights.size(); j++) {
for (int j=0; j<(int)pb->lights.size(); j++) {
// get pointer and id
mjCLight* pl = pb->lights[j];
int lid = pl->id;
@@ -1629,12 +1617,12 @@ void mjCModel::CopyTree(mjModel* m) {
// compute nM and dof_Madr
nM = 0;
for (i=0; i<nv; i++) {
for (int i=0; i<nv; i++) {
// set address of this dof
m->dof_Madr[i] = nM;
// count ancestor dofs including self
j = i;
int j = i;
while (j>=0) {
nM++;
j = m->dof_parentid[j];
@@ -1647,7 +1635,7 @@ void mjCModel::CopyTree(mjModel* m) {
m->nD = nD;
// compute subtreedofs in backward pass over bodies
for (i = nbody - 1; i > 0; i--) {
for (int i = nbody - 1; i > 0; i--) {
// add body dofs to self count
bodies[i]->subtreedofs += bodies[i]->dofnum;
@@ -1662,12 +1650,12 @@ void mjCModel::CopyTree(mjModel* m) {
// compute nB
nB = 0;
for (i = 0; i < nbody; i++) {
for (int i = 0; i < nbody; i++) {
// add subtree dofs (including self)
nB += bodies[i]->subtreedofs;
// add dofs in ancestor bodies
j = bodies[i]->parentid;
int j = bodies[i]->parentid;
while (j > 0) {
nB += bodies[j]->dofnum;
j = bodies[j]->parentid;
@@ -1677,7 +1665,7 @@ void mjCModel::CopyTree(mjModel* m) {
// set dof_simplenum
int scnt = 0;
for (i=nv-1; i>=0; i--) {
for (int i=nv-1; i>=0; i--) {
// dof in simple body
if (m->body_simple[m->dof_bodyid[i]]) {
scnt++;
@@ -1696,7 +1684,7 @@ void mjCModel::CopyTree(mjModel* m) {
// copy objects outside kinematic tree
void mjCModel::CopyObjects(mjModel* m) {
int i, j, adr, bone_adr, vert_adr, normal_adr, face_adr, texcoord_adr;
int adr, bone_adr, vert_adr, normal_adr, face_adr, texcoord_adr;
int bonevert_adr, graph_adr, data_adr;
// sizes outside call to mj_makeModel
@@ -1712,7 +1700,7 @@ void mjCModel::CopyObjects(mjModel* m) {
texcoord_adr = 0;
face_adr = 0;
graph_adr = 0;
for (i=0; i<nmesh; i++) {
for (int i=0; i<nmesh; i++) {
// get pointer
mjCMesh* pme = meshes[i];
@@ -1756,7 +1744,7 @@ void mjCModel::CopyObjects(mjModel* m) {
texcoord_adr = 0;
bone_adr = 0;
bonevert_adr = 0;
for (i=0; i<nskin; i++) {
for (int i=0; i<nskin; i++) {
// get pointer
mjCSkin* psk = skins[i];
@@ -1789,7 +1777,7 @@ void mjCModel::CopyObjects(mjModel* m) {
psk->bodyid.size()*sizeof(int));
// copy per-bone vertex data, advance vertex counter
for (j=0; j<m->skin_bonenum[i]; j++) {
for (int j=0; j<m->skin_bonenum[i]; j++) {
// set fields
m->skin_bonevertadr[bone_adr+j] = bonevert_adr;
m->skin_bonevertnum[bone_adr+j] = (int)psk->vertid[j].size();
@@ -1813,7 +1801,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// hfields
data_adr = 0;
for (i=0; i<nhfield; i++) {
for (int i=0; i<nhfield; i++) {
// get pointer
mjCHField* phf = hfields[i];
@@ -1832,7 +1820,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// textures
data_adr = 0;
for (i=0; i<ntex; i++) {
for (int i=0; i<ntex; i++) {
// get pointer
mjCTexture* ptex = textures[i];
@@ -1850,7 +1838,7 @@ void mjCModel::CopyObjects(mjModel* m) {
}
// materials
for (i=0; i<nmat; i++) {
for (int i=0; i<nmat; i++) {
// get pointer
mjCMaterial* pmat = materials[i];
@@ -1866,7 +1854,7 @@ void mjCModel::CopyObjects(mjModel* m) {
}
// geom pairs to include
for (i=0; i<npair; i++) {
for (int i=0; i<npair; i++) {
m->pair_dim[i] = pairs[i]->condim;
m->pair_geom1[i] = pairs[i]->geom1;
m->pair_geom2[i] = pairs[i]->geom2;
@@ -1879,12 +1867,12 @@ void mjCModel::CopyObjects(mjModel* m) {
}
// body pairs to exclude
for (i=0; i<nexclude; i++) {
for (int i=0; i<nexclude; i++) {
m->exclude_signature[i] = excludes[i]->signature;
}
// equality constraints
for (i=0; i<neq; i++) {
for (int i=0; i<neq; i++) {
// get pointer
mjCEquality* peq = equalities[i];
@@ -1900,7 +1888,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// tendons and wraps
adr = 0;
for (i=0; i<ntendon; i++) {
for (int i=0; i<ntendon; i++) {
// get pointer
mjCTendon* pte = tendons[i];
@@ -1927,7 +1915,7 @@ void mjCModel::CopyObjects(mjModel* m) {
copyvec(m->tendon_rgba+4*i, pte->rgba, 4);
// set wraps
for (j=0; j<(int)pte->path.size(); j++) {
for (int j=0; j<(int)pte->path.size(); j++) {
m->wrap_type[adr+j] = pte->path[j]->type;
m->wrap_objid[adr+j] = pte->path[j]->objid;
m->wrap_prm[adr+j] = (mjtNum)pte->path[j]->prm;
@@ -1942,7 +1930,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// actuators
adr = 0;
for (i=0; i<nu; i++) {
for (int i=0; i<nu; i++) {
// get pointer
mjCActuator* pac = actuators[i];
@@ -1974,7 +1962,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// sensors
adr = 0;
for (i=0; i<nsensor; i++) {
for (int i=0; i<nsensor; i++) {
// get pointer
mjCSensor* psen = sensors[i];
@@ -1998,17 +1986,17 @@ void mjCModel::CopyObjects(mjModel* m) {
// numeric fields
adr = 0;
for (i=0; i<nnumeric; i++) {
for (int i=0; i<nnumeric; i++) {
// get pointer
mjCNumeric* pcu = numerics[i];
// set fields
m->numeric_adr[i] = adr;
m->numeric_size[i] = pcu->size;
for (j=0; j<(int)pcu->data.size(); j++) {
for (int j=0; j<(int)pcu->data.size(); j++) {
m->numeric_data[adr+j] = (mjtNum)pcu->data[j];
}
for (j=(int)pcu->data.size(); j<(int)pcu->size; j++) {
for (int j=(int)pcu->data.size(); j<(int)pcu->size; j++) {
m->numeric_data[adr+j] = 0;
}
@@ -2018,7 +2006,7 @@ void mjCModel::CopyObjects(mjModel* m) {
// text fields
adr = 0;
for (i=0; i<ntext; i++) {
for (int i=0; i<ntext; i++) {
// get pointer
mjCText* pte = texts[i];
@@ -2033,14 +2021,14 @@ void mjCModel::CopyObjects(mjModel* m) {
// tuple fields
adr = 0;
for (i=0; i<ntuple; i++) {
for (int i=0; i<ntuple; i++) {
// get pointer
mjCTuple* ptu = tuples[i];
// set fields
m->tuple_adr[i] = adr;
m->tuple_size[i] = (int)ptu->objtype.size();
for (j=0; j<m->tuple_size[i]; j++) {
for (int j=0; j<m->tuple_size[i]; j++) {
m->tuple_objtype[adr+j] = (int)ptu->objtype[j];
m->tuple_objid[adr+j] = ptu->objid[j];
m->tuple_objprm[adr+j] = (mjtNum)ptu->objprm[j];
@@ -2051,7 +2039,7 @@ void mjCModel::CopyObjects(mjModel* m) {
}
// copy keyframe data
for (i=0; i<nkey; i++) {
for (int i=0; i<nkey; i++) {
// copy data
m->key_time[i] = (mjtNum)keys[i]->time;
copyvec(m->key_qpos+i*nq, keys[i]->qpos.data(), nq);
@@ -2065,14 +2053,14 @@ void mjCModel::CopyObjects(mjModel* m) {
}
// normalize quaternions in m->key_qpos
for (j=0; j<m->njnt; j++) {
for (int j=0; j<m->njnt; j++) {
if (m->jnt_type[j]==mjJNT_BALL || m->jnt_type[j]==mjJNT_FREE) {
mju_normalize4(m->key_qpos+i*nq+m->jnt_qposadr[j]+3*(m->jnt_type[j]==mjJNT_FREE));
}
}
// normalize quaternions in m->key_mquat
for (j=0; j<nmocap; j++) {
for (int j=0; j<nmocap; j++) {
mju_normalize4(m->key_mquat+i*4*nmocap+4*j);
}
@@ -2103,35 +2091,33 @@ static void changeframe(double childpos[3], double childquat[4],
// reindex elements during fuse
void mjCModel::FuseReindex(mjCBody* body) {
size_t i;
// set parentid and weldid of children
for (i=0; i<body->bodies.size(); i++) {
for (int i=0; i<body->bodies.size(); i++) {
body->bodies[i]->parentid = body->id;
body->bodies[i]->weldid = (!body->bodies[i]->joints.empty() ?
body->bodies[i]->id : body->weldid);
}
// joints
for (i=0; i<body->joints.size(); i++) {
for (int i=0; i<body->joints.size(); i++) {
body->joints[i]->id = (int)joints.size();
joints.push_back(body->joints[i]);
}
// geoms
for (i=0; i<body->geoms.size(); i++) {
for (int i=0; i<body->geoms.size(); i++) {
body->geoms[i]->id = (int)geoms.size();
geoms.push_back(body->geoms[i]);
}
// sites
for (i=0; i<body->sites.size(); i++) {
for (int i=0; i<body->sites.size(); i++) {
body->sites[i]->id = (int)sites.size();
sites.push_back(body->sites[i]);
}
// process children recursively
for (i=0; i<body->bodies.size(); i++) {
for (int i=0; i<body->bodies.size(); i++) {
FuseReindex(body->bodies[i]);
}
}
@@ -2140,8 +2126,6 @@ void mjCModel::FuseReindex(mjCBody* body) {
// fuse static bodies with their parent
void mjCModel::FuseStatic(void) {
int i, j, k;
// skip if model has potential to reference elements with changed ids
if (!skins.empty() ||
!pairs.empty() ||
@@ -2157,7 +2141,7 @@ void mjCModel::FuseStatic(void) {
}
// process fusable bodies
for (i=1; i<bodies.size(); i++) {
for (int i=1; i<bodies.size(); i++) {
// get body and parent
mjCBody* body = bodies[i];
mjCBody* par = bodies[body->parentid];
@@ -2195,7 +2179,7 @@ void mjCModel::FuseStatic(void) {
// compute total mass
par->mass = 0;
mjuu_setvec(par->locipos, 0, 0, 0);
for (j=0; j<2; j++) {
for (int j=0; j<2; j++) {
par->mass += mass[j];
par->locipos[0] += mass[j]*ipos[j][0];
par->locipos[1] += mass[j]*ipos[j][1];
@@ -2219,7 +2203,7 @@ void mjCModel::FuseStatic(void) {
// add inertias
double toti[6] = {0, 0, 0, 0, 0, 0};
for (j=0; j<2; j++) {
for (int j=0; j<2; j++) {
double inertA[6], inertB[6];
double dpos[3] = {
ipos[j][0] - par->locipos[0],
@@ -2229,7 +2213,7 @@ void mjCModel::FuseStatic(void) {
mjuu_globalinertia(inertA, inertia[j], iquat[j]);
mjuu_offcenter(inertB, mass[j], dpos);
for (k=0; k<6; k++) {
for (int k=0; k<6; k++) {
toti[k] += inertA[k] + inertB[k];
}
}
@@ -2247,7 +2231,7 @@ void mjCModel::FuseStatic(void) {
//------------- replace body with its children in parent body list
// change frames of child bodies
for (j=0; j<body->bodies.size(); j++)
for (int j=0; j<body->bodies.size(); j++)
changeframe(body->bodies[j]->locpos, body->bodies[j]->locquat,
body->locpos, body->locquat);
@@ -2280,7 +2264,7 @@ void mjCModel::FuseStatic(void) {
//------------- assign geoms and sites to parent, change frames
// geoms
for (j=0; j<body->geoms.size(); j++) {
for (int j=0; j<body->geoms.size(); j++) {
// assign
body->geoms[j]->body = par;
par->geoms.push_back(body->geoms[j]);
@@ -2290,7 +2274,7 @@ void mjCModel::FuseStatic(void) {
}
// sites
for (j=0; j<body->sites.size(); j++) {
for (int j=0; j<body->sites.size(); j++) {
// assign
body->sites[j]->body = par;
par->sites.push_back(body->sites[j]);
@@ -2321,7 +2305,7 @@ void mjCModel::FuseStatic(void) {
//------------- re-index bodies, joints, geoms, sites
// body ids
for (j=0; j<bodies.size(); j++) {
for (int j=0; j<bodies.size(); j++) {
bodies[j]->id = j;
}
@@ -2872,8 +2856,6 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) {
// get numeric data back from mjModel
bool mjCModel::CopyBack(const mjModel* m) {
int i, j;
// check for null pointer
if (!m) {
errInfo = mjCError(0, "mjModel pointer is null in CopyBack");
@@ -2905,7 +2887,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
visual = m->vis;
// qpos0, qpos_spring
for (i=0; i<njnt; i++) {
for (int i=0; i<njnt; i++) {
switch (joints[i]->type) {
case mjJNT_FREE:
copyvec(bodies[m->jnt_bodyid[i]]->pos, m->qpos0+m->jnt_qposadr[i], 3);
@@ -2927,7 +2909,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
// body
mjCBody* pb;
for (i=0; i<nbody; i++) {
for (int i=0; i<nbody; i++) {
pb = bodies[i];
copyvec(pb->locpos, m->body_pos+3*i, 3);
@@ -2944,7 +2926,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
// joint and dof
mjCJoint* pj;
for (i=0; i<njnt; i++) {
for (int i=0; i<njnt; i++) {
pj = joints[i];
// joint data
@@ -2961,7 +2943,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// dof data
j = m->jnt_dofadr[i];
int j = m->jnt_dofadr[i];
copyvec(pj->solref_friction, m->dof_solref+mjNREF*j, mjNREF);
copyvec(pj->solimp_friction, m->dof_solimp+mjNIMP*j, mjNIMP);
pj->armature = (double)m->dof_armature[j];
@@ -2971,7 +2953,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
// geom
mjCGeom* pg;
for (i=0; i<ngeom; i++) {
for (int i=0; i<ngeom; i++) {
pg = geoms[i];
copyvec(pg->size, m->geom_size+3*i, 3);
@@ -2991,7 +2973,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// sites
for (i=0; i<nsite; i++) {
for (int i=0; i<nsite; i++) {
copyvec(sites[i]->size, m->site_size + 3 * i, 3);
copyvec(sites[i]->locpos, m->site_pos+3*i, 3);
copyvec(sites[i]->locquat, m->site_quat+4*i, 4);
@@ -3003,7 +2985,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// cameras
for (i=0; i<ncam; i++) {
for (int i=0; i<ncam; i++) {
copyvec(cameras[i]->pos, m->cam_pos+3*i, 3);
copyvec(cameras[i]->quat, m->cam_quat+4*i, 4);
cameras[i]->fovy = (double)m->cam_fovy[i];
@@ -3015,7 +2997,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// lights
for (i=0; i<nlight; i++) {
for (int i=0; i<nlight; i++) {
copyvec(lights[i]->pos, m->light_pos+3*i, 3);
copyvec(lights[i]->dir, m->light_dir+3*i, 3);
copyvec(lights[i]->attenuation, m->light_attenuation+3*i, 3);
@@ -3027,7 +3009,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// materials
for (i=0; i<nmat; i++) {
for (int i=0; i<nmat; i++) {
copyvec(materials[i]->texrepeat, m->mat_texrepeat+2*i, 2);
materials[i]->emission = m->mat_emission[i];
materials[i]->specular = m->mat_specular[i];
@@ -3037,7 +3019,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// pairs
for (i=0; i<npair; i++) {
for (int i=0; i<npair; i++) {
copyvec(pairs[i]->solref, m->pair_solref+mjNREF*i, mjNREF);
copyvec(pairs[i]->solimp, m->pair_solimp+mjNIMP*i, mjNIMP);
pairs[i]->margin = (double)m->pair_margin[i];
@@ -3046,14 +3028,14 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// equality constraints
for (i=0; i<neq; i++) {
for (int i=0; i<neq; i++) {
copyvec(equalities[i]->data, m->eq_data+mjNEQDATA*i, mjNEQDATA);
copyvec(equalities[i]->solref, m->eq_solref+mjNREF*i, mjNREF);
copyvec(equalities[i]->solimp, m->eq_solimp+mjNIMP*i, mjNIMP);
}
// tendons
for (i=0; i<ntendon; i++) {
for (int i=0; i<ntendon; i++) {
copyvec(tendons[i]->range, m->tendon_range+2*i, 2);
copyvec(tendons[i]->solref_limit, m->tendon_solref_lim+mjNREF*i, mjNREF);
copyvec(tendons[i]->solimp_limit, m->tendon_solimp_lim+mjNIMP*i, mjNIMP);
@@ -3073,7 +3055,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
// actuators
mjCActuator* pa;
for (i=0; i<nu; i++) {
for (int i=0; i<nu; i++) {
pa = actuators[i];
copyvec(pa->dynprm, m->actuator_dynprm+i*mjNDYN, mjNDYN);
@@ -3092,7 +3074,7 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// sensors
for (i=0; i<nsensor; i++) {
for (int i=0; i<nsensor; i++) {
sensors[i]->cutoff = (double)m->sensor_cutoff[i];
sensors[i]->noise = (double)m->sensor_noise[i];
@@ -3102,21 +3084,21 @@ bool mjCModel::CopyBack(const mjModel* m) {
}
// numeric data
for (i=0; i<nnumeric; i++) {
for (j=0; j<m->numeric_size[i]; j++) {
for (int i=0; i<nnumeric; i++) {
for (int j=0; j<m->numeric_size[i]; j++) {
numerics[i]->data[j] = (double)m->numeric_data[m->numeric_adr[i]+j];
}
}
// tuple data
for (i=0; i<ntuple; i++) {
for (j=0; j<m->tuple_size[i]; j++) {
for (int i=0; i<ntuple; i++) {
for (int j=0; j<m->tuple_size[i]; j++) {
tuples[i]->objprm[j] = (double)m->tuple_objprm[m->tuple_adr[i]+j];
}
}
// keyframes
for (i=0; i<m->nkey; i++) {
for (int i=0; i<m->nkey; i++) {
mjCKey* pk = keys[i];
pk->time = (double)m->key_time[i];