Refactor MJMODEL_POINTERS into category-specific macros.
PiperOrigin-RevId: 802089588 Change-Id: Id3443f88e8243c5167a23b6e42eb32a32f88e8d3
This commit is contained in:
committed by
Copybara-Service
parent
8d884585dd
commit
7a93e22514
+90
-33
@@ -181,9 +181,7 @@
|
||||
// pointer fields of mjModel
|
||||
// XNV means that the field is not required to construct mjvScene
|
||||
// (by default we define XNV to be the same as X)
|
||||
#define MJMODEL_POINTERS \
|
||||
X ( mjtNum, qpos0, nq, 1 ) \
|
||||
X ( mjtNum, qpos_spring, nq, 1 ) \
|
||||
#define MJMODEL_POINTERS_BODY \
|
||||
X ( int, body_parentid, nbody, 1 ) \
|
||||
X ( int, body_rootid, nbody, 1 ) \
|
||||
X ( int, body_weldid, nbody, 1 ) \
|
||||
@@ -212,15 +210,9 @@
|
||||
X ( int, body_contype, nbody, 1 ) \
|
||||
X ( int, body_conaffinity, nbody, 1 ) \
|
||||
X ( int, body_bvhadr, nbody, 1 ) \
|
||||
X ( int, body_bvhnum, nbody, 1 ) \
|
||||
X ( int, bvh_depth, nbvh, 1 ) \
|
||||
X ( int, bvh_child, nbvh, 2 ) \
|
||||
X ( int, bvh_nodeid, nbvh, 1 ) \
|
||||
X ( mjtNum, bvh_aabb, nbvhstatic, 6 ) \
|
||||
X ( int, oct_depth, noct, 1 ) \
|
||||
X ( int, oct_child, noct, 8 ) \
|
||||
X ( mjtNum, oct_aabb, noct, 6 ) \
|
||||
X ( mjtNum, oct_coeff, noct, 8 ) \
|
||||
X ( int, body_bvhnum, nbody, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_JOINT \
|
||||
X ( int, jnt_type, njnt, 1 ) \
|
||||
X ( int, jnt_qposadr, njnt, 1 ) \
|
||||
X ( int, jnt_dofadr, njnt, 1 ) \
|
||||
@@ -237,7 +229,9 @@
|
||||
X ( mjtNum, jnt_range, njnt, 2 ) \
|
||||
X ( mjtNum, jnt_actfrcrange, njnt, 2 ) \
|
||||
X ( mjtNum, jnt_margin, njnt, 1 ) \
|
||||
X ( mjtNum, jnt_user, njnt, MJ_M(nuser_jnt) ) \
|
||||
X ( mjtNum, jnt_user, njnt, MJ_M(nuser_jnt) )
|
||||
|
||||
#define MJMODEL_POINTERS_DOF \
|
||||
X ( int, dof_bodyid, nv, 1 ) \
|
||||
X ( int, dof_jntid, nv, 1 ) \
|
||||
X ( int, dof_parentid, nv, 1 ) \
|
||||
@@ -250,7 +244,9 @@
|
||||
X ( mjtNum, dof_armature, nv, 1 ) \
|
||||
X ( mjtNum, dof_damping, nv, 1 ) \
|
||||
X ( mjtNum, dof_invweight0, nv, 1 ) \
|
||||
X ( mjtNum, dof_M0, nv, 1 ) \
|
||||
X ( mjtNum, dof_M0, nv, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_GEOM \
|
||||
X ( int, geom_type, ngeom, 1 ) \
|
||||
X ( int, geom_contype, ngeom, 1 ) \
|
||||
X ( int, geom_conaffinity, ngeom, 1 ) \
|
||||
@@ -275,7 +271,9 @@
|
||||
X ( mjtNum, geom_gap, ngeom, 1 ) \
|
||||
XNV ( mjtNum, geom_fluid, ngeom, mjNFLUID ) \
|
||||
X ( mjtNum, geom_user, ngeom, MJ_M(nuser_geom) ) \
|
||||
X ( float, geom_rgba, ngeom, 4 ) \
|
||||
X ( float, geom_rgba, ngeom, 4 )
|
||||
|
||||
#define MJMODEL_POINTERS_SITE \
|
||||
X ( int, site_type, nsite, 1 ) \
|
||||
X ( int, site_bodyid, nsite, 1 ) \
|
||||
X ( int, site_matid, nsite, 1 ) \
|
||||
@@ -285,7 +283,9 @@
|
||||
X ( mjtNum, site_pos, nsite, 3 ) \
|
||||
X ( mjtNum, site_quat, nsite, 4 ) \
|
||||
X ( mjtNum, site_user, nsite, MJ_M(nuser_site) ) \
|
||||
X ( float, site_rgba, nsite, 4 ) \
|
||||
X ( float, site_rgba, nsite, 4 )
|
||||
|
||||
#define MJMODEL_POINTERS_CAMERA \
|
||||
X ( int, cam_mode, ncam, 1 ) \
|
||||
X ( int, cam_bodyid, ncam, 1 ) \
|
||||
X ( int, cam_targetbodyid, ncam, 1 ) \
|
||||
@@ -300,7 +300,9 @@
|
||||
X ( int, cam_resolution, ncam, 2 ) \
|
||||
X ( float, cam_sensorsize, ncam, 2 ) \
|
||||
X ( float, cam_intrinsic, ncam, 4 ) \
|
||||
X ( mjtNum, cam_user, ncam, MJ_M(nuser_cam) ) \
|
||||
X ( mjtNum, cam_user, ncam, MJ_M(nuser_cam) )
|
||||
|
||||
#define MJMODEL_POINTERS_LIGHT \
|
||||
X ( int, light_mode, nlight, 1 ) \
|
||||
X ( int, light_bodyid, nlight, 1 ) \
|
||||
X ( int, light_targetbodyid, nlight, 1 ) \
|
||||
@@ -321,7 +323,9 @@
|
||||
X ( float, light_exponent, nlight, 1 ) \
|
||||
X ( float, light_ambient, nlight, 3 ) \
|
||||
X ( float, light_diffuse, nlight, 3 ) \
|
||||
X ( float, light_specular, nlight, 3 ) \
|
||||
X ( float, light_specular, nlight, 3 )
|
||||
|
||||
#define MJMODEL_POINTERS_FLEX \
|
||||
X ( int, flex_contype, nflex, 1 ) \
|
||||
X ( int, flex_conaffinity, nflex, 1 ) \
|
||||
X ( int, flex_condim, nflex, 1 ) \
|
||||
@@ -385,7 +389,9 @@
|
||||
X ( int, flex_bvhadr, nflex, 1 ) \
|
||||
X ( int, flex_bvhnum, nflex, 1 ) \
|
||||
X ( float, flex_rgba, nflex, 4 ) \
|
||||
X ( float, flex_texcoord, nflextexcoord, 2 ) \
|
||||
X ( float, flex_texcoord, nflextexcoord, 2 )
|
||||
|
||||
#define MJMODEL_POINTERS_MESH \
|
||||
X ( int, mesh_vertadr, nmesh, 1 ) \
|
||||
X ( int, mesh_vertnum, nmesh, 1 ) \
|
||||
X ( int, mesh_faceadr, nmesh, 1 ) \
|
||||
@@ -418,7 +424,9 @@
|
||||
XNV ( int, mesh_polyvert, nmeshpolyvert, 1 ) \
|
||||
XNV ( int, mesh_polymapadr, nmeshvert, 1 ) \
|
||||
XNV ( int, mesh_polymapnum, nmeshvert, 1 ) \
|
||||
XNV ( int, mesh_polymap, nmeshpolymap, 1 ) \
|
||||
XNV ( int, mesh_polymap, nmeshpolymap, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_SKIN \
|
||||
X ( int, skin_matid, nskin, 1 ) \
|
||||
X ( int, skin_group, nskin, 1 ) \
|
||||
X ( float, skin_rgba, nskin, 4 ) \
|
||||
@@ -440,13 +448,17 @@
|
||||
X ( int, skin_bonebodyid, nskinbone, 1 ) \
|
||||
X ( int, skin_bonevertid, nskinbonevert, 1 ) \
|
||||
X ( float, skin_bonevertweight, nskinbonevert, 1 ) \
|
||||
X ( int, skin_pathadr, nskin, 1 ) \
|
||||
X ( int, skin_pathadr, nskin, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_HFIELD \
|
||||
X ( mjtNum, hfield_size, nhfield, 4 ) \
|
||||
X ( int, hfield_nrow, nhfield, 1 ) \
|
||||
X ( int, hfield_ncol, nhfield, 1 ) \
|
||||
X ( int, hfield_adr, nhfield, 1 ) \
|
||||
XNV ( float, hfield_data, nhfielddata, 1 ) \
|
||||
X ( int, hfield_pathadr, nhfield, 1 ) \
|
||||
X ( int, hfield_pathadr, nhfield, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_TEXTURE \
|
||||
X ( int, tex_type, ntex, 1 ) \
|
||||
X ( int, tex_colorspace, ntex, 1 ) \
|
||||
X ( int, tex_height, ntex, 1 ) \
|
||||
@@ -454,7 +466,9 @@
|
||||
X ( int, tex_nchannel, ntex, 1 ) \
|
||||
X ( int, tex_adr, ntex, 1 ) \
|
||||
XNV ( mjtByte, tex_data, ntexdata, 1 ) \
|
||||
X ( int, tex_pathadr, ntex, 1 ) \
|
||||
X ( int, tex_pathadr, ntex, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_MATERIAL \
|
||||
X ( int, mat_texid, nmat, mjNTEXROLE ) \
|
||||
X ( mjtByte, mat_texuniform, nmat, 1 ) \
|
||||
X ( float, mat_texrepeat, nmat, 2 ) \
|
||||
@@ -464,7 +478,9 @@
|
||||
X ( float, mat_reflectance, nmat, 1 ) \
|
||||
X ( float, mat_metallic, nmat, 1 ) \
|
||||
X ( float, mat_roughness, nmat, 1 ) \
|
||||
X ( float, mat_rgba, nmat, 4 ) \
|
||||
X ( float, mat_rgba, nmat, 4 )
|
||||
|
||||
#define MJMODEL_POINTERS_PAIR \
|
||||
X ( int, pair_dim, npair, 1 ) \
|
||||
X ( int, pair_geom1, npair, 1 ) \
|
||||
X ( int, pair_geom2, npair, 1 ) \
|
||||
@@ -474,8 +490,12 @@
|
||||
X ( mjtNum, pair_solimp, npair, mjNIMP ) \
|
||||
X ( mjtNum, pair_margin, npair, 1 ) \
|
||||
X ( mjtNum, pair_gap, npair, 1 ) \
|
||||
X ( mjtNum, pair_friction, npair, 5 ) \
|
||||
X ( int, exclude_signature, nexclude, 1 ) \
|
||||
X ( mjtNum, pair_friction, npair, 5 )
|
||||
|
||||
#define MJMODEL_POINTERS_EXCLUDE \
|
||||
X ( int, exclude_signature, nexclude, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_EQUALITY \
|
||||
X ( int, eq_type, neq, 1 ) \
|
||||
X ( int, eq_obj1id, neq, 1 ) \
|
||||
X ( int, eq_obj2id, neq, 1 ) \
|
||||
@@ -483,7 +503,9 @@
|
||||
X ( mjtByte, eq_active0, neq, 1 ) \
|
||||
X ( mjtNum, eq_solref, neq, mjNREF ) \
|
||||
X ( mjtNum, eq_solimp, neq, mjNIMP ) \
|
||||
X ( mjtNum, eq_data, neq, mjNEQDATA ) \
|
||||
X ( mjtNum, eq_data, neq, mjNEQDATA )
|
||||
|
||||
#define MJMODEL_POINTERS_TENDON \
|
||||
X ( int, tendon_adr, ntendon, 1 ) \
|
||||
X ( int, tendon_num, ntendon, 1 ) \
|
||||
X ( int, tendon_matid, ntendon, 1 ) \
|
||||
@@ -506,10 +528,9 @@
|
||||
X ( mjtNum, tendon_length0, ntendon, 1 ) \
|
||||
X ( mjtNum, tendon_invweight0, ntendon, 1 ) \
|
||||
X ( mjtNum, tendon_user, ntendon, MJ_M(nuser_tendon) ) \
|
||||
X ( float, tendon_rgba, ntendon, 4 ) \
|
||||
X ( int, wrap_type, nwrap, 1 ) \
|
||||
X ( int, wrap_objid, nwrap, 1 ) \
|
||||
X ( mjtNum, wrap_prm, nwrap, 1 ) \
|
||||
X ( float, tendon_rgba, ntendon, 4 )
|
||||
|
||||
#define MJMODEL_POINTERS_ACTUATOR \
|
||||
X ( int, actuator_trntype, nu, 1 ) \
|
||||
X ( int, actuator_dyntype, nu, 1 ) \
|
||||
X ( int, actuator_gaintype, nu, 1 ) \
|
||||
@@ -534,7 +555,9 @@
|
||||
X ( mjtNum, actuator_length0, nu, 1 ) \
|
||||
X ( mjtNum, actuator_lengthrange, nu, 2 ) \
|
||||
X ( mjtNum, actuator_user, nu, MJ_M(nuser_actuator) ) \
|
||||
X ( int, actuator_plugin, nu, 1 ) \
|
||||
X ( int, actuator_plugin, nu, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS_SENSOR \
|
||||
X ( int, sensor_type, nsensor, 1 ) \
|
||||
X ( int, sensor_datatype, nsensor, 1 ) \
|
||||
X ( int, sensor_needstage, nsensor, 1 ) \
|
||||
@@ -548,7 +571,41 @@
|
||||
X ( mjtNum, sensor_cutoff, nsensor, 1 ) \
|
||||
X ( mjtNum, sensor_noise, nsensor, 1 ) \
|
||||
X ( mjtNum, sensor_user, nsensor, MJ_M(nuser_sensor) ) \
|
||||
X ( int, sensor_plugin, nsensor, 1 ) \
|
||||
X ( int, sensor_plugin, nsensor, 1 )
|
||||
|
||||
#define MJMODEL_POINTERS \
|
||||
X ( mjtNum, qpos0, nq, 1 ) \
|
||||
X ( mjtNum, qpos_spring, nq, 1 ) \
|
||||
MJMODEL_POINTERS_BODY \
|
||||
X ( int, bvh_depth, nbvh, 1 ) \
|
||||
X ( int, bvh_child, nbvh, 2 ) \
|
||||
X ( int, bvh_nodeid, nbvh, 1 ) \
|
||||
X ( mjtNum, bvh_aabb, nbvhstatic, 6 ) \
|
||||
X ( int, oct_depth, noct, 1 ) \
|
||||
X ( int, oct_child, noct, 8 ) \
|
||||
X ( mjtNum, oct_aabb, noct, 6 ) \
|
||||
X ( mjtNum, oct_coeff, noct, 8 ) \
|
||||
MJMODEL_POINTERS_JOINT \
|
||||
MJMODEL_POINTERS_DOF \
|
||||
MJMODEL_POINTERS_GEOM \
|
||||
MJMODEL_POINTERS_SITE \
|
||||
MJMODEL_POINTERS_CAMERA \
|
||||
MJMODEL_POINTERS_LIGHT \
|
||||
MJMODEL_POINTERS_FLEX \
|
||||
MJMODEL_POINTERS_MESH \
|
||||
MJMODEL_POINTERS_SKIN \
|
||||
MJMODEL_POINTERS_HFIELD \
|
||||
MJMODEL_POINTERS_TEXTURE \
|
||||
MJMODEL_POINTERS_MATERIAL \
|
||||
MJMODEL_POINTERS_PAIR \
|
||||
MJMODEL_POINTERS_EXCLUDE \
|
||||
MJMODEL_POINTERS_EQUALITY \
|
||||
MJMODEL_POINTERS_TENDON \
|
||||
X ( int, wrap_type, nwrap, 1 ) \
|
||||
X ( int, wrap_objid, nwrap, 1 ) \
|
||||
X ( mjtNum, wrap_prm, nwrap, 1 ) \
|
||||
MJMODEL_POINTERS_ACTUATOR \
|
||||
MJMODEL_POINTERS_SENSOR \
|
||||
X ( int, plugin, nplugin, 1 ) \
|
||||
X ( int, plugin_stateadr, nplugin, 1 ) \
|
||||
X ( int, plugin_statenum, nplugin, 1 ) \
|
||||
|
||||
+47
-44
@@ -587,15 +587,17 @@ void mj_printFormattedModel(const mjModel* m, const char* filename, const char*
|
||||
// values used by MJMODEL_POINTERS macro
|
||||
MJMODEL_POINTERS_PREAMBLE(m)
|
||||
|
||||
// object_class points to the integer size identifying the class of arrays currently being printed
|
||||
// used to organise the printout into category groups
|
||||
// note that comparison is based on the integer address, not its value
|
||||
// touch unused sizes to avoid unused variable warning
|
||||
(void)nq;
|
||||
(void)nv;
|
||||
(void)na;
|
||||
(void)nu;
|
||||
(void)nmocap;
|
||||
|
||||
const int* object_class;
|
||||
|
||||
#define X(type, name, num, sz) \
|
||||
if (&m->num == object_class && strncmp(#name, "name_", 5) && \
|
||||
strncmp(#name, "M_", 2) && strncmp(#name, "B_", 2) && \
|
||||
strncmp(#name, "D_", 2) && sz > 0) { \
|
||||
if (&m->num == object_class && sz > 0) { \
|
||||
const char* format = _Generic(*m->name, \
|
||||
double: float_format, \
|
||||
float: float_format, \
|
||||
@@ -612,92 +614,93 @@ void mj_printFormattedModel(const mjModel* m, const char* filename, const char*
|
||||
fprintf(fp, "\n"); \
|
||||
} \
|
||||
}
|
||||
#define XNV X
|
||||
|
||||
// bodies
|
||||
object_class = &m->nbody;
|
||||
for (int i=0; i < m->nbody; i++) {
|
||||
fprintf(fp, "\nBODY %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_bodyadr[i]);
|
||||
object_class = &m->nbody;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_BODY
|
||||
}
|
||||
if (m->nbody) fprintf(fp, "\n");
|
||||
|
||||
// joints
|
||||
object_class = &m->njnt;
|
||||
for (int i=0; i < m->njnt; i++) {
|
||||
fprintf(fp, "\nJOINT %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_jntadr[i]);
|
||||
object_class = &m->njnt;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_JOINT
|
||||
}
|
||||
if (m->njnt) fprintf(fp, "\n");
|
||||
|
||||
// dofs
|
||||
object_class = &m->nv;
|
||||
for (int i=0; i < m->nv; i++) {
|
||||
fprintf(fp, "\nDOF %d:\n", i);
|
||||
object_class = &m->nv;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_DOF
|
||||
}
|
||||
if (m->nv) fprintf(fp, "\n");
|
||||
|
||||
// geoms
|
||||
object_class = &m->ngeom;
|
||||
for (int i=0; i < m->ngeom; i++) {
|
||||
fprintf(fp, "\nGEOM %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_geomadr[i]);
|
||||
object_class = &m->ngeom;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_GEOM
|
||||
}
|
||||
if (m->ngeom) fprintf(fp, "\n");
|
||||
|
||||
// sites
|
||||
object_class = &m->nsite;
|
||||
for (int i=0; i < m->nsite; i++) {
|
||||
fprintf(fp, "\nSITE %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_siteadr[i]);
|
||||
object_class = &m->nsite;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_SITE
|
||||
}
|
||||
if (m->nsite) fprintf(fp, "\n");
|
||||
|
||||
// cameras
|
||||
object_class = &m->ncam;
|
||||
for (int i=0; i < m->ncam; i++) {
|
||||
fprintf(fp, "\nCAMERA %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_camadr[i]);
|
||||
object_class = &m->ncam;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_CAMERA
|
||||
}
|
||||
if (m->ncam) fprintf(fp, "\n");
|
||||
|
||||
// lights
|
||||
object_class = &m->nlight;
|
||||
for (int i=0; i < m->nlight; i++) {
|
||||
fprintf(fp, "\nLIGHT %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_lightadr[i]);
|
||||
object_class = &m->nlight;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_LIGHT
|
||||
}
|
||||
if (m->nlight) fprintf(fp, "\n");
|
||||
|
||||
// flexes
|
||||
object_class = &m->nflex;
|
||||
for (int i=0; i < m->nflex; i++) {
|
||||
fprintf(fp, "\nFLEX %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_flexadr[i]);
|
||||
object_class = &m->nflex;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_FLEX
|
||||
}
|
||||
if (m->nflex) fprintf(fp, "\n");
|
||||
|
||||
// meshes
|
||||
object_class = &m->nmesh;
|
||||
for (int i=0; i < m->nmesh; i++) {
|
||||
fprintf(fp, "\nMESH %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_meshadr[i]);
|
||||
object_class = &m->nmesh;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_MESH
|
||||
if (m->mesh_graphadr[i] >= 0) {
|
||||
fprintf(fp, " " NAME_FORMAT, "qhull face");
|
||||
fprintf(fp, " %d\n", m->mesh_graph[m->mesh_graphadr[i]+1]);
|
||||
@@ -708,82 +711,82 @@ void mj_printFormattedModel(const mjModel* m, const char* filename, const char*
|
||||
if (m->nmesh) fprintf(fp, "\n");
|
||||
|
||||
// skins
|
||||
object_class = &m->nskin;
|
||||
for (int i=0; i < m->nskin; i++) {
|
||||
fprintf(fp, "\nSKIN %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_skinadr[i]);
|
||||
object_class = &m->nskin;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_SKIN
|
||||
}
|
||||
if (m->nskin) fprintf(fp, "\n");
|
||||
|
||||
// hfields
|
||||
object_class = &m->nhfield;
|
||||
for (int i=0; i < m->nhfield; i++) {
|
||||
fprintf(fp, "\nHEIGHTFIELD %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_hfieldadr[i]);
|
||||
object_class = &m->nhfield;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_HFIELD
|
||||
}
|
||||
if (m->nhfield) fprintf(fp, "\n");
|
||||
|
||||
// textures
|
||||
object_class = &m->ntex;
|
||||
for (int i=0; i < m->ntex; i++) {
|
||||
fprintf(fp, "\nTEXTURE %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_texadr[i]);
|
||||
object_class = &m->ntex;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_TEXTURE
|
||||
}
|
||||
if (m->ntex) fprintf(fp, "\n");
|
||||
|
||||
// materials
|
||||
object_class = &m->nmat;
|
||||
for (int i=0; i < m->nmat; i++) {
|
||||
fprintf(fp, "\nMATERIAL %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_matadr[i]);
|
||||
object_class = &m->nmat;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_MATERIAL
|
||||
}
|
||||
if (m->nmat) fprintf(fp, "\n");
|
||||
|
||||
// pairs
|
||||
object_class = &m->npair;
|
||||
for (int i=0; i < m->npair; i++) {
|
||||
fprintf(fp, "\nPAIR %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_pairadr[i]);
|
||||
object_class = &m->npair;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_PAIR
|
||||
}
|
||||
if (m->npair) fprintf(fp, "\n");
|
||||
|
||||
// excludes
|
||||
object_class = &m->nexclude;
|
||||
for (int i=0; i < m->nexclude; i++) {
|
||||
fprintf(fp, "\nEXCLUDE %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_excludeadr[i]);
|
||||
object_class = &m->nexclude;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_EXCLUDE
|
||||
}
|
||||
if (m->nexclude) fprintf(fp, "\n");
|
||||
|
||||
// equality constraints
|
||||
object_class = &m->neq;
|
||||
for (int i=0; i < m->neq; i++) {
|
||||
fprintf(fp, "\nEQUALITY %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_eqadr[i]);
|
||||
object_class = &m->neq;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_EQUALITY
|
||||
}
|
||||
if (m->neq) fprintf(fp, "\n");
|
||||
|
||||
// tendons
|
||||
object_class = &m->ntendon;
|
||||
for (int i=0; i < m->ntendon; i++) {
|
||||
fprintf(fp, "\nTENDON %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_tendonadr[i]);
|
||||
object_class = &m->ntendon;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_TENDON
|
||||
fprintf(fp, " path\n");
|
||||
fprintf(fp, " type objid prm\n");
|
||||
for (int j=0; j < m->tendon_num[i]; j++) {
|
||||
@@ -797,22 +800,22 @@ void mj_printFormattedModel(const mjModel* m, const char* filename, const char*
|
||||
if (m->ntendon) fprintf(fp, "\n");
|
||||
|
||||
// actuators
|
||||
object_class = &m->nu;
|
||||
for (int i=0; i < m->nu; i++) {
|
||||
fprintf(fp, "\nACTUATOR %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_actuatoradr[i]);
|
||||
object_class = &m->nu;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_ACTUATOR
|
||||
}
|
||||
if (m->nu) fprintf(fp, "\n");
|
||||
|
||||
// sensors
|
||||
object_class = &m->nsensor;
|
||||
for (int i=0; i < m->nsensor; i++) {
|
||||
fprintf(fp, "\nSENSOR %d:\n", i);
|
||||
fprintf(fp, " " NAME_FORMAT, "name");
|
||||
fprintf(fp, " %s\n", m->names + m->name_sensoradr[i]);
|
||||
object_class = &m->nsensor;
|
||||
MJMODEL_POINTERS
|
||||
MJMODEL_POINTERS_SENSOR
|
||||
}
|
||||
if (m->nsensor) fprintf(fp, "\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user