Declare loop variables inside for loop declaration where possible.
PiperOrigin-RevId: 518846098 Change-Id: Icdb2e5894bd80110552e29270472eeb242e6cf2c
This commit is contained in:
committed by
Copybara-Service
parent
ce6c9053e2
commit
145fe7f354
@@ -517,7 +517,7 @@ typedef struct _mjtPrism mjtPrism;
|
|||||||
|
|
||||||
// ccd prism support function
|
// ccd prism support function
|
||||||
static void prism_support(const void *obj, const ccd_vec3_t *dir, ccd_vec3_t *vec) {
|
static void prism_support(const void *obj, const ccd_vec3_t *dir, ccd_vec3_t *vec) {
|
||||||
int i, istart, ibest;
|
int istart, ibest;
|
||||||
mjtNum best, tmp;
|
mjtNum best, tmp;
|
||||||
const mjtPrism* p = (const mjtPrism*)obj;
|
const mjtPrism* p = (const mjtPrism*)obj;
|
||||||
|
|
||||||
@@ -525,7 +525,7 @@ static void prism_support(const void *obj, const ccd_vec3_t *dir, ccd_vec3_t *ve
|
|||||||
istart = dir->v[2]<0 ? 0 : 3;
|
istart = dir->v[2]<0 ? 0 : 3;
|
||||||
ibest = istart;
|
ibest = istart;
|
||||||
best = mju_dot3(p->v[istart], dir->v);
|
best = mju_dot3(p->v[istart], dir->v);
|
||||||
for (i=istart+1; i<istart+3; i++) {
|
for (int i=istart+1; i<istart+3; i++) {
|
||||||
if ((tmp = mju_dot3(p->v[i], dir->v)) > best) {
|
if ((tmp = mju_dot3(p->v[i], dir->v)) > best) {
|
||||||
ibest = i;
|
ibest = i;
|
||||||
best = tmp;
|
best = tmp;
|
||||||
@@ -584,7 +584,7 @@ int mjc_ConvexHField(const mjModel* m, const mjData* d,
|
|||||||
int hid = m->geom_dataid[g1];
|
int hid = m->geom_dataid[g1];
|
||||||
int nrow = m->hfield_nrow[hid];
|
int nrow = m->hfield_nrow[hid];
|
||||||
int ncol = m->hfield_ncol[hid];
|
int ncol = m->hfield_ncol[hid];
|
||||||
int r, c, dr[2], cnt, rmin, rmax, cmin, cmax, nvert;
|
int dr[2], cnt, rmin, rmax, cmin, cmax, nvert;
|
||||||
const float* data = m->hfield_data + m->hfield_adr[hid];
|
const float* data = m->hfield_data + m->hfield_adr[hid];
|
||||||
mjtPrism prism;
|
mjtPrism prism;
|
||||||
|
|
||||||
@@ -710,9 +710,9 @@ int mjc_ConvexHField(const mjModel* m, const mjData* d,
|
|||||||
|
|
||||||
// process all prisms in sub-grid
|
// process all prisms in sub-grid
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
for (r=rmin; r<rmax; r++) {
|
for (int r=rmin; r<rmax; r++) {
|
||||||
nvert = 0;
|
nvert = 0;
|
||||||
for (c=cmin; c<=cmax; c++) {
|
for (int c=cmin; c<=cmax; c++) {
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
// send vertex to prism constructor
|
// send vertex to prism constructor
|
||||||
addVert(&nvert, &prism, dx*c-size1[0], dy*(r+dr[i])-size1[1],
|
addVert(&nvert, &prism, dx*c-size1[0], dy*(r+dr[i])-size1[1],
|
||||||
|
|||||||
@@ -664,7 +664,7 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
// find center of non-world geoms; return if none
|
// find center of non-world geoms; return if none
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
mju_zero3(cen);
|
mju_zero3(cen);
|
||||||
for (i=0; i<ngeom; i++) {
|
for (int i=0; i<ngeom; i++) {
|
||||||
if (m->geom_bodyid[i]) {
|
if (m->geom_bodyid[i]) {
|
||||||
mju_addTo3(cen, d->geom_xpos+3*i);
|
mju_addTo3(cen, d->geom_xpos+3*i);
|
||||||
cnt++;
|
cnt++;
|
||||||
@@ -673,14 +673,14 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
if (cnt==0) {
|
if (cnt==0) {
|
||||||
return npair;
|
return npair;
|
||||||
} else {
|
} else {
|
||||||
for (i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
cen[i] /= cnt;
|
cen[i] /= cnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute covariance
|
// compute covariance
|
||||||
mju_zero(cov, 9);
|
mju_zero(cov, 9);
|
||||||
for (i=0; i<ngeom; i++) {
|
for (int i=0; i<ngeom; i++) {
|
||||||
if (m->geom_bodyid[i]) {
|
if (m->geom_bodyid[i]) {
|
||||||
mju_sub3(dif, d->geom_xpos+3*i, cen);
|
mju_sub3(dif, d->geom_xpos+3*i, cen);
|
||||||
mjtNum D00 = dif[0]*dif[0];
|
mjtNum D00 = dif[0]*dif[0];
|
||||||
@@ -700,7 +700,7 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
cov[8] += D22;
|
cov[8] += D22;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i=0; i<9; i++) {
|
for (int i=0; i<9; i++) {
|
||||||
cov[i] /= cnt;
|
cov[i] /= cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -713,7 +713,7 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
|
|
||||||
// construct body AABB for the aligned frame, count collidable
|
// construct body AABB for the aligned frame, count collidable
|
||||||
int bufcnt = 0;
|
int bufcnt = 0;
|
||||||
for (i=1; i<nbody; i++) {
|
for (int i=1; i<nbody; i++) {
|
||||||
makeAABB(m, d, aabb+6*i, i, frame);
|
makeAABB(m, d, aabb+6*i, i, frame);
|
||||||
|
|
||||||
if (can_collide(m, i)) {
|
if (can_collide(m, i)) {
|
||||||
@@ -734,7 +734,7 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
|
|
||||||
// init sortbuf with axis0
|
// init sortbuf with axis0
|
||||||
j = 0;
|
j = 0;
|
||||||
for (i=1; i<nbody; i++) {
|
for (int i=1; i<nbody; i++) {
|
||||||
// cannot colide
|
// cannot colide
|
||||||
if (!can_collide(m, i)) {
|
if (!can_collide(m, i)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -758,10 +758,10 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
|
|
||||||
// sweep and prune
|
// sweep and prune
|
||||||
cnt = 0; // size of active list
|
cnt = 0; // size of active list
|
||||||
for (i=0; i<2*bufcnt; i++) {
|
for (int i=0; i<2*bufcnt; i++) {
|
||||||
// min value: collide with all in list, add
|
// min value: collide with all in list, add
|
||||||
if (!(sortbuf[i].body_ismax & 0x10000)) {
|
if (!(sortbuf[i].body_ismax & 0x10000)) {
|
||||||
for (j=0; j<cnt; j++) {
|
for (int j=0; j<cnt; j++) {
|
||||||
// get body ids: no need to mask ismax because activebuf entries never have the ismax bit,
|
// get body ids: no need to mask ismax because activebuf entries never have the ismax bit,
|
||||||
// and sortbuf[i].body_ismax is tested above
|
// and sortbuf[i].body_ismax is tested above
|
||||||
b1 = activebuf[j].body_ismax;
|
b1 = activebuf[j].body_ismax;
|
||||||
@@ -797,7 +797,7 @@ int mj_broadphase(const mjModel* m, mjData* d, int* pair, int maxpair) {
|
|||||||
// max value: remove corresponding min value from list
|
// max value: remove corresponding min value from list
|
||||||
else {
|
else {
|
||||||
toremove = sortbuf[i].body_ismax & 0xFFFF;
|
toremove = sortbuf[i].body_ismax & 0xFFFF;
|
||||||
for (j=0; j<cnt; j++) {
|
for (int j=0; j<cnt; j++) {
|
||||||
if (activebuf[j].body_ismax==toremove) {
|
if (activebuf[j].body_ismax==toremove) {
|
||||||
if (j<cnt-1) {
|
if (j<cnt-1) {
|
||||||
memmove(activebuf+j, activebuf+j+1, sizeof(mjtBroadphase)*(cnt-1-j));
|
memmove(activebuf+j, activebuf+j+1, sizeof(mjtBroadphase)*(cnt-1-j));
|
||||||
@@ -921,14 +921,13 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
// remove repeated contacts in box-box
|
// remove repeated contacts in box-box
|
||||||
if (type1==mjGEOM_BOX && type2==mjGEOM_BOX) {
|
if (type1==mjGEOM_BOX && type2==mjGEOM_BOX) {
|
||||||
// use dim field to mark: -1: bad, 0: good
|
// use dim field to mark: -1: bad, 0: good
|
||||||
for (i=0; i<num; i++) {
|
for (int i=0; i<num; i++) {
|
||||||
con[i].dim = 0;
|
con[i].dim = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find bad
|
// find bad
|
||||||
int j;
|
for (int i=0; i<num-1; i++) {
|
||||||
for (i=0; i<num-1; i++) {
|
for (int j=i+1; j<num; j++) {
|
||||||
for (j=i+1; j<num; j++) {
|
|
||||||
if (con[i].pos[0]==con[j].pos[0] &&
|
if (con[i].pos[0]==con[j].pos[0] &&
|
||||||
con[i].pos[1]==con[j].pos[1] &&
|
con[i].pos[1]==con[j].pos[1] &&
|
||||||
con[i].pos[2]==con[j].pos[2]) {
|
con[i].pos[2]==con[j].pos[2]) {
|
||||||
@@ -940,7 +939,7 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
|
|
||||||
// consolidate good
|
// consolidate good
|
||||||
i = 0;
|
i = 0;
|
||||||
for (j=0; j<num; j++) {
|
for (int j=0; j<num; j++) {
|
||||||
if (con[j].dim==0) {
|
if (con[j].dim==0) {
|
||||||
// different: copy
|
// different: copy
|
||||||
if (i<j) {
|
if (i<j) {
|
||||||
@@ -963,7 +962,7 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
int gp = (m->geom_priority[g1]>m->geom_priority[g2] ? g1 : g2);
|
int gp = (m->geom_priority[g1]>m->geom_priority[g2] ? g1 : g2);
|
||||||
|
|
||||||
// friction
|
// friction
|
||||||
for (i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
friction[2*i] = m->geom_friction[3*gp+i];
|
friction[2*i] = m->geom_friction[3*gp+i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -977,7 +976,7 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
// same priority
|
// same priority
|
||||||
else {
|
else {
|
||||||
// friction: max
|
// friction: max
|
||||||
for (i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
friction[2*i] = mju_max(m->geom_friction[3*g1+i], m->geom_friction[3*g2+i]);
|
friction[2*i] = mju_max(m->geom_friction[3*g1+i], m->geom_friction[3*g2+i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -994,14 +993,14 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
|
|
||||||
// reference standard: mix
|
// reference standard: mix
|
||||||
if (m->geom_solref[mjNREF*g1]>0 && m->geom_solref[mjNREF*g2]>0) {
|
if (m->geom_solref[mjNREF*g1]>0 && m->geom_solref[mjNREF*g2]>0) {
|
||||||
for (i=0; i<mjNREF; i++) {
|
for (int i=0; i<mjNREF; i++) {
|
||||||
solref[i] = mix*m->geom_solref[mjNREF*g1+i] + (1-mix)*m->geom_solref[mjNREF*g2+i];
|
solref[i] = mix*m->geom_solref[mjNREF*g1+i] + (1-mix)*m->geom_solref[mjNREF*g2+i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reference direct: min
|
// reference direct: min
|
||||||
else {
|
else {
|
||||||
for (i=0; i<mjNREF; i++) {
|
for (int i=0; i<mjNREF; i++) {
|
||||||
solref[i] = mju_min(m->geom_solref[mjNREF*g1+i], m->geom_solref[mjNREF*g2+i]);
|
solref[i] = mju_min(m->geom_solref[mjNREF*g1+i], m->geom_solref[mjNREF*g2+i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1019,7 +1018,7 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
// set friction, solref, solimp: pair
|
// set friction, solref, solimp: pair
|
||||||
else {
|
else {
|
||||||
// friction
|
// friction
|
||||||
for (i=0; i<5; i++) {
|
for (int i=0; i<5; i++) {
|
||||||
friction[i] = m->pair_friction[5*ipair+i];
|
friction[i] = m->pair_friction[5*ipair+i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1031,12 +1030,12 @@ void mj_collideGeoms(const mjModel* m, mjData* d, int g1, int g2, int flg_user,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// clamp friction to mjMINMU
|
// clamp friction to mjMINMU
|
||||||
for (i=0; i<5; i++) {
|
for (int i=0; i<5; i++) {
|
||||||
friction[i] = mju_max(mjMINMU, friction[i]);
|
friction[i] = mju_max(mjMINMU, friction[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add contact returned by collision detector
|
// add contact returned by collision detector
|
||||||
for (i=0; i<num; i++) {
|
for (int i=0; i<num; i++) {
|
||||||
// set contact data
|
// set contact data
|
||||||
if (condim > 6 || condim < 1) { // SHOULD NOT OCCUR
|
if (condim > 6 || condim < 1) { // SHOULD NOT OCCUR
|
||||||
mju_error("Invalid condim value: %d", i);
|
mju_error("Invalid condim value: %d", i);
|
||||||
|
|||||||
@@ -544,20 +544,22 @@ static void mj_advance(const mjModel* m, mjData* d,
|
|||||||
|
|
||||||
// Euler integrator, semi-implicit in velocity, possibly skipping factorisation
|
// Euler integrator, semi-implicit in velocity, possibly skipping factorisation
|
||||||
void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
|
void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
|
||||||
int i, nv = m->nv, nM = m->nM;
|
int nv = m->nv, nM = m->nM;
|
||||||
mjMARKSTACK;
|
mjMARKSTACK;
|
||||||
mjtNum* qfrc = mj_stackAlloc(d, nv);
|
mjtNum* qfrc = mj_stackAlloc(d, nv);
|
||||||
mjtNum* qacc = mj_stackAlloc(d, nv);
|
mjtNum* qacc = mj_stackAlloc(d, nv);
|
||||||
|
|
||||||
// check for dof damping
|
// check for dof damping
|
||||||
for (i=0; i<nv; i++) {
|
int dof_damping = 0;
|
||||||
|
for (int i=0; i<nv; i++) {
|
||||||
if (m->dof_damping[i]>0) {
|
if (m->dof_damping[i]>0) {
|
||||||
|
dof_damping = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// no damping: explicit velocity integration
|
// no damping: explicit velocity integration
|
||||||
if (i>=nv) {
|
if (!dof_damping) {
|
||||||
mju_copy(qacc, d->qacc, nv);
|
mju_copy(qacc, d->qacc, nv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,7 +570,7 @@ void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
|
|||||||
|
|
||||||
// MhB = M + h*diag(B)
|
// MhB = M + h*diag(B)
|
||||||
mju_copy(MhB, d->qM, m->nM);
|
mju_copy(MhB, d->qM, m->nM);
|
||||||
for (i=0; i<nv; i++) {
|
for (int i=0; i<nv; i++) {
|
||||||
MhB[m->dof_Madr[i]] += m->opt.timestep * m->dof_damping[i];
|
MhB[m->dof_Madr[i]] += m->opt.timestep * m->dof_damping[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buff
|
|||||||
// load model from binary MJB file
|
// load model from binary MJB file
|
||||||
// if vfs is not NULL, look up file in vfs before reading from disk
|
// if vfs is not NULL, look up file in vfs before reading from disk
|
||||||
mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) {
|
mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) {
|
||||||
int i, header[4] = {0};
|
int header[4] = {0};
|
||||||
int expected_header[4] = {ID, sizeof(mjtNum), getnint(), getnptr()};
|
int expected_header[4] = {ID, sizeof(mjtNum), getnint(), getnptr()};
|
||||||
int info[2000];
|
int info[2000];
|
||||||
int ptrbuf = 0;
|
int ptrbuf = 0;
|
||||||
@@ -633,7 +633,7 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) {
|
|||||||
const void* buffer = NULL;
|
const void* buffer = NULL;
|
||||||
int buffer_sz = 0;
|
int buffer_sz = 0;
|
||||||
if (vfs) {
|
if (vfs) {
|
||||||
i = mj_findFileVFS(vfs, filename);
|
int i = mj_findFileVFS(vfs, filename);
|
||||||
if (i>=0) {
|
if (i>=0) {
|
||||||
buffer_sz = vfs->filesize[i];
|
buffer_sz = vfs->filesize[i];
|
||||||
buffer = vfs->filedata[i];
|
buffer = vfs->filedata[i];
|
||||||
@@ -660,7 +660,7 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check header
|
// check header
|
||||||
for (i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
if (header[i]!=expected_header[i]) {
|
if (header[i]!=expected_header[i]) {
|
||||||
if (fp) {
|
if (fp) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ static void ARdiaginv(const mjModel* m, mjData* d, mjtNum* res, int flg_subR) {
|
|||||||
// extract diagonal block from AR, clamp diag to 1e-10 if flg_subR
|
// extract diagonal block from AR, clamp diag to 1e-10 if flg_subR
|
||||||
static void extractBlock(const mjModel* m, mjData* d, mjtNum* Ac,
|
static void extractBlock(const mjModel* m, mjData* d, mjtNum* Ac,
|
||||||
int start, int n, int flg_subR) {
|
int start, int n, int flg_subR) {
|
||||||
int k, nefc = d->nefc;
|
int nefc = d->nefc;
|
||||||
const mjtNum *AR = d->efc_AR;
|
const mjtNum *AR = d->efc_AR;
|
||||||
const int *rownnz = d->efc_AR_rownnz, *rowadr = d->efc_AR_rowadr, *colind = d->efc_AR_colind;
|
const int *rownnz = d->efc_AR_rownnz, *rowadr = d->efc_AR_rowadr, *colind = d->efc_AR_colind;
|
||||||
|
|
||||||
@@ -123,6 +123,7 @@ static void extractBlock(const mjModel* m, mjData* d, mjtNum* Ac,
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
// assume full sub-matrix, find starting k: same for all rows
|
// assume full sub-matrix, find starting k: same for all rows
|
||||||
|
int k;
|
||||||
for (k=0; k<rownnz[start]; k++) {
|
for (k=0; k<rownnz[start]; k++) {
|
||||||
if (colind[rowadr[start]+k]==start) {
|
if (colind[rowadr[start]+k]==start) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static void vfs_strippath(char* newname, const char* oldname) {
|
|||||||
mju_strncpy(newname, oldname+i+1, mjMAXVFSNAME);
|
mju_strncpy(newname, oldname+i+1, mjMAXVFSNAME);
|
||||||
|
|
||||||
// make lowercase
|
// make lowercase
|
||||||
for (i=strlen(newname)-1; i>=0; i--) {
|
for (int i=strlen(newname)-1; i>=0; i--) {
|
||||||
if (newname[i]>='A' && newname[i]<='Z') {
|
if (newname[i]>='A' && newname[i]<='Z') {
|
||||||
newname[i] = (char)(((int)newname[i]) +'a' - 'A');
|
newname[i] = (char)(((int)newname[i]) +'a' - 'A');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1059,9 +1059,9 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get geom group and clamp
|
// get geom group and clamp
|
||||||
int j = mjMAX(0, mjMIN(mjNGROUP-1, m->geom_group[i]));
|
int geomgroup = mjMAX(0, mjMIN(mjNGROUP-1, m->geom_group[i]));
|
||||||
|
|
||||||
if (vopt->geomgroup[j]) {
|
if (vopt->geomgroup[geomgroup]) {
|
||||||
START
|
START
|
||||||
|
|
||||||
// construct geom
|
// construct geom
|
||||||
@@ -1116,7 +1116,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
|
|||||||
// re-center infinite plane
|
// re-center infinite plane
|
||||||
if (m->geom_size[3*i]<=0 || m->geom_size[3*i+1]<=0) {
|
if (m->geom_size[3*i]<=0 || m->geom_size[3*i+1]<=0) {
|
||||||
// vec = headpos - geompos
|
// vec = headpos - geompos
|
||||||
for (j=0; j<3; j++) {
|
for (int j=0; j<3; j++) {
|
||||||
vec[j] = 0.5*(scn->camera[0].pos[j] + scn->camera[1].pos[j]) - d->geom_xpos[3*i+j];
|
vec[j] = 0.5*(scn->camera[0].pos[j] + scn->camera[1].pos[j]) - d->geom_xpos[3*i+j];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1428,7 +1428,7 @@ static void mjGlad_find_coreGL(void) {
|
|||||||
* https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176
|
* https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176
|
||||||
* https://github.com/glfw/glfw/blob/master/src/context.c#L36
|
* https://github.com/glfw/glfw/blob/master/src/context.c#L36
|
||||||
*/
|
*/
|
||||||
int i, major, minor;
|
int major, minor;
|
||||||
|
|
||||||
const char* version;
|
const char* version;
|
||||||
const char* prefixes[] = {
|
const char* prefixes[] = {
|
||||||
@@ -1441,7 +1441,7 @@ static void mjGlad_find_coreGL(void) {
|
|||||||
version = (const char*) glGetString(GL_VERSION);
|
version = (const char*) glGetString(GL_VERSION);
|
||||||
if (!version) return;
|
if (!version) return;
|
||||||
|
|
||||||
for (i = 0; prefixes[i]; i++) {
|
for (int i = 0; prefixes[i]; i++) {
|
||||||
const size_t length = strlen(prefixes[i]);
|
const size_t length = strlen(prefixes[i]);
|
||||||
if (strncmp(version, prefixes[i], length) == 0) {
|
if (strncmp(version, prefixes[i], length) == 0) {
|
||||||
version += length;
|
version += length;
|
||||||
|
|||||||
+69
-67
@@ -1656,7 +1656,6 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// draw section(s)
|
// draw section(s)
|
||||||
int k;
|
|
||||||
mjtNum sel;
|
mjtNum sel;
|
||||||
mjrRect r;
|
mjrRect r;
|
||||||
char text[mjMAXUITEXT];
|
char text[mjMAXUITEXT];
|
||||||
@@ -1776,7 +1775,7 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
drawrectangle(r, rgbpane, rgbpane, con);
|
drawrectangle(r, rgbpane, rgbpane, con);
|
||||||
|
|
||||||
// text lines
|
// text lines
|
||||||
for (k=0; k<it->multi.nelem; k++) {
|
for (int k=0; k<it->multi.nelem; k++) {
|
||||||
drawtext(it->multi.name[k],
|
drawtext(it->multi.name[k],
|
||||||
r.left+g_texthor,
|
r.left+g_texthor,
|
||||||
r.bottom+g_textver+(it->multi.nelem-k-1)*(con->charHeight+g_textver),
|
r.bottom+g_textver+(it->multi.nelem-k-1)*(con->charHeight+g_textver),
|
||||||
@@ -1809,35 +1808,37 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case mjITEM_CHECKINT:
|
case mjITEM_CHECKINT:
|
||||||
case mjITEM_CHECKBYTE:
|
case mjITEM_CHECKBYTE: {
|
||||||
if (state) {
|
if (state) {
|
||||||
rgbdecor = ui->color.check;
|
rgbdecor = ui->color.check;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get value according to type
|
||||||
|
int k;
|
||||||
|
if (it->type==mjITEM_CHECKINT) {
|
||||||
|
k = *(int*)it->pdata;
|
||||||
|
} else {
|
||||||
|
k = *(mjtByte*)it->pdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
// filled or outline
|
||||||
|
if (k) {
|
||||||
|
drawrectangle(it->rect, rgbdecor, NULL, con);
|
||||||
|
} else {
|
||||||
|
drawrectangle(it->rect, rgbdecor, rgbpane, con);
|
||||||
|
}
|
||||||
|
|
||||||
|
// name
|
||||||
|
drawtext(it->name,
|
||||||
|
it->rect.left+g_texthor,
|
||||||
|
it->rect.bottom+g_textver,
|
||||||
|
maxwidth, rgbfont, con);
|
||||||
|
|
||||||
|
// shortcut
|
||||||
|
if (ui->mousehelp && it->single.shortcut)
|
||||||
|
shortcuthelp(it->rect, it->single.modifier, it->single.shortcut,
|
||||||
|
ui, con);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get value according to type
|
|
||||||
if (it->type==mjITEM_CHECKINT) {
|
|
||||||
k = *(int*)it->pdata;
|
|
||||||
} else {
|
|
||||||
k = *(mjtByte*)it->pdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
// filled or outline
|
|
||||||
if (k) {
|
|
||||||
drawrectangle(it->rect, rgbdecor, NULL, con);
|
|
||||||
} else {
|
|
||||||
drawrectangle(it->rect, rgbdecor, rgbpane, con);
|
|
||||||
}
|
|
||||||
|
|
||||||
// name
|
|
||||||
drawtext(it->name,
|
|
||||||
it->rect.left+g_texthor,
|
|
||||||
it->rect.bottom+g_textver,
|
|
||||||
maxwidth, rgbfont, con);
|
|
||||||
|
|
||||||
// shortcut
|
|
||||||
if (ui->mousehelp && it->single.shortcut)
|
|
||||||
shortcuthelp(it->rect, it->single.modifier, it->single.shortcut,
|
|
||||||
ui, con);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case mjITEM_RADIO:
|
case mjITEM_RADIO:
|
||||||
@@ -1859,7 +1860,7 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
drawrectangle(r, rgbdecor, NULL, con);
|
drawrectangle(r, rgbdecor, NULL, con);
|
||||||
|
|
||||||
// element names
|
// element names
|
||||||
for (k=0; k<it->multi.nelem; k++) {
|
for (int k=0; k<it->multi.nelem; k++) {
|
||||||
r = radioelement(it, k, ui, con);
|
r = radioelement(it, k, ui, con);
|
||||||
drawtext(it->multi.name[k],
|
drawtext(it->multi.name[k],
|
||||||
r.left+g_texthor,
|
r.left+g_texthor,
|
||||||
@@ -1868,39 +1869,40 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case mjITEM_RADIOLINE:
|
case mjITEM_RADIOLINE: {
|
||||||
if (state) {
|
if (state) {
|
||||||
rgbdecor = ui->color.radio;
|
rgbdecor = ui->color.radio;
|
||||||
}
|
}
|
||||||
|
|
||||||
// name
|
// name
|
||||||
drawtext(it->name,
|
drawtext(it->name,
|
||||||
s->rcontent.left+g_itemside+g_texthor,
|
s->rcontent.left+g_itemside+g_texthor,
|
||||||
it->rect.bottom+g_textver,
|
it->rect.bottom+g_textver,
|
||||||
g_label-2*g_texthor, rgbfont, con);
|
g_label-2*g_texthor, rgbfont, con);
|
||||||
|
|
||||||
// outline
|
// outline
|
||||||
drawrectangle(it->rect, rgbdecor, rgbpane, con);
|
drawrectangle(it->rect, rgbdecor, rgbpane, con);
|
||||||
|
|
||||||
// make separators
|
// make separators
|
||||||
makeradioline(it, con, sep);
|
makeradioline(it, con, sep);
|
||||||
|
|
||||||
// fill selected
|
// fill selected
|
||||||
k = *(int*)it->pdata;
|
int k = *(int*)it->pdata;
|
||||||
r = it->rect;
|
|
||||||
r.left += sep[k];
|
|
||||||
r.width = sep[k+1] - sep[k];
|
|
||||||
drawrectangle(r, rgbdecor, NULL, con);
|
|
||||||
|
|
||||||
// element names
|
|
||||||
for (k=0; k<it->multi.nelem; k++) {
|
|
||||||
// compute rectangle for element
|
|
||||||
r = it->rect;
|
r = it->rect;
|
||||||
r.left += sep[k];
|
r.left += sep[k];
|
||||||
r.width = sep[k+1] - sep[k];
|
r.width = sep[k+1] - sep[k];
|
||||||
|
drawrectangle(r, rgbdecor, NULL, con);
|
||||||
|
|
||||||
// draw centered
|
// element names
|
||||||
drawtextrect(r, it->multi.name[k], rgbfont, con);
|
for (int k=0; k<it->multi.nelem; k++) {
|
||||||
|
// compute rectangle for element
|
||||||
|
r = it->rect;
|
||||||
|
r.left += sep[k];
|
||||||
|
r.width = sep[k+1] - sep[k];
|
||||||
|
|
||||||
|
// draw centered
|
||||||
|
drawtextrect(r, it->multi.name[k], rgbfont, con);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1959,7 +1961,7 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
r.height = g_textver;
|
r.height = g_textver;
|
||||||
|
|
||||||
// draw ticks
|
// draw ticks
|
||||||
for (k=1; k<(int)it->slider.divisions; k++) {
|
for (int k=1; k<(int)it->slider.divisions; k++) {
|
||||||
r.left = it->rect.left - r.width/2 +
|
r.left = it->rect.left - r.width/2 +
|
||||||
it->rect.width*k/it->slider.divisions;
|
it->rect.width*k/it->slider.divisions;
|
||||||
drawrectangle(r, rgbpane, NULL, con);
|
drawrectangle(r, rgbpane, NULL, con);
|
||||||
@@ -2007,8 +2009,8 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// show cursor
|
// show cursor
|
||||||
k = textwidth(ui->edittext + ui->editscroll, con,
|
int k = textwidth(ui->edittext + ui->editscroll, con,
|
||||||
ui->editcursor - ui->editscroll);
|
ui->editcursor - ui->editscroll);
|
||||||
r.left = it->rect.left + g_texthor + k - SCL(1, con);
|
r.left = it->rect.left + g_texthor + k - SCL(1, con);
|
||||||
r.width = 2*SCL(1, con);
|
r.width = 2*SCL(1, con);
|
||||||
r.bottom = it->rect.bottom + g_textver/2;
|
r.bottom = it->rect.bottom + g_textver/2;
|
||||||
@@ -2064,7 +2066,7 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
drawrectangle(r, ui->color.select2, NULL, con);
|
drawrectangle(r, ui->color.select2, NULL, con);
|
||||||
|
|
||||||
// hightlight row under mouse
|
// hightlight row under mouse
|
||||||
k = findselect(it, ui, state, con);
|
int k = findselect(it, ui, state, con);
|
||||||
if (k>=0) {
|
if (k>=0) {
|
||||||
mjrRect r1 = r;
|
mjrRect r1 = r;
|
||||||
r1.bottom = r.bottom + (it->multi.nelem-1-k)*cellheight;
|
r1.bottom = r.bottom + (it->multi.nelem-1-k)*cellheight;
|
||||||
@@ -2073,7 +2075,7 @@ void mjui_update(int section, int item, const mjUI* ui,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// values
|
// values
|
||||||
for (k=0; k<it->multi.nelem; k++) {
|
for (int k=0; k<it->multi.nelem; k++) {
|
||||||
drawtext(it->multi.name[k],
|
drawtext(it->multi.name[k],
|
||||||
r.left+g_texthor,
|
r.left+g_texthor,
|
||||||
r.bottom+g_textver+(it->multi.nelem-1-k)*cellheight,
|
r.bottom+g_textver+(it->multi.nelem-1-k)*cellheight,
|
||||||
@@ -2223,7 +2225,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
else if (sect_cur>0 && item_cur<0) {
|
else if (sect_cur>0 && item_cur<0) {
|
||||||
// double-click: make all sections like this
|
// double-click: make all sections like this
|
||||||
if (state->doubleclick) {
|
if (state->doubleclick) {
|
||||||
for (i=0; i<ui->nsect; i++) {
|
for (int i=0; i<ui->nsect; i++) {
|
||||||
if (ui->sect[i].state<2 && ui->sect[sect_cur-1].state<2) {
|
if (ui->sect[i].state<2 && ui->sect[sect_cur-1].state<2) {
|
||||||
ui->sect[i].state = ui->sect[sect_cur-1].state;
|
ui->sect[i].state = ui->sect[sect_cur-1].state;
|
||||||
}
|
}
|
||||||
@@ -2445,7 +2447,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
case mjKEY_BACKSPACE: // delete before cursor
|
case mjKEY_BACKSPACE: // delete before cursor
|
||||||
if (ui->editcursor>0) {
|
if (ui->editcursor>0) {
|
||||||
// shift chars after cursor to the left
|
// shift chars after cursor to the left
|
||||||
for (i=ui->editcursor; i<=strlen(ui->edittext); i++) {
|
for (int i=ui->editcursor; i<=strlen(ui->edittext); i++) {
|
||||||
ui->edittext[i-1] = ui->edittext[i];
|
ui->edittext[i-1] = ui->edittext[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2457,7 +2459,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
case mjKEY_DELETE: // delete after cursor
|
case mjKEY_DELETE: // delete after cursor
|
||||||
if (ui->editcursor<strlen(ui->edittext)) {
|
if (ui->editcursor<strlen(ui->edittext)) {
|
||||||
// shift chars after cursor to the left
|
// shift chars after cursor to the left
|
||||||
for (i=ui->editcursor; i<=strlen(ui->edittext); i++) {
|
for (int i=ui->editcursor; i<=strlen(ui->edittext); i++) {
|
||||||
ui->edittext[i] = ui->edittext[i+1];
|
ui->edittext[i] = ui->edittext[i+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2467,7 +2469,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
key = validkey(key, strlen(ui->edittext), it_edit->type, state);
|
key = validkey(key, strlen(ui->edittext), it_edit->type, state);
|
||||||
if (key) {
|
if (key) {
|
||||||
// shift chars after cursor to the right
|
// shift chars after cursor to the right
|
||||||
for (i=strlen(ui->edittext); i>=ui->editcursor; i--) {
|
for (int i=strlen(ui->edittext); i>=ui->editcursor; i--) {
|
||||||
ui->edittext[i+1] = ui->edittext[i];
|
ui->edittext[i+1] = ui->edittext[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2494,7 +2496,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
for (int n=0; n<ui->nsect; n++)
|
for (int n=0; n<ui->nsect; n++)
|
||||||
if (matchshortcut(state, ui->sect[n].modifier, ui->sect[n].shortcut)) {
|
if (matchshortcut(state, ui->sect[n].modifier, ui->sect[n].shortcut)) {
|
||||||
// collapse all
|
// collapse all
|
||||||
for (i=0; i<ui->nsect; i++) {
|
for (int i=0; i<ui->nsect; i++) {
|
||||||
if (ui->sect[i].state<2) {
|
if (ui->sect[i].state<2) {
|
||||||
ui->sect[i].state = 0;
|
ui->sect[i].state = 0;
|
||||||
}
|
}
|
||||||
@@ -2516,7 +2518,7 @@ mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con) {
|
|||||||
|
|
||||||
// search item shortcuts
|
// search item shortcuts
|
||||||
for (int n=0; n<ui->nsect; n++) {
|
for (int n=0; n<ui->nsect; n++) {
|
||||||
for (i=0; i<ui->sect[n].nitem; i++) {
|
for (int i=0; i<ui->sect[n].nitem; i++) {
|
||||||
// get pointer to item
|
// get pointer to item
|
||||||
it = ui->sect[n].item + i;;
|
it = ui->sect[n].item + i;;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user