Add flex fields to mj_validateReferences.

PiperOrigin-RevId: 575779915
Change-Id: I14d22092e7d712dcc3d474cf0c2a85ef4d6a4aee
This commit is contained in:
Alessio Quaglino
2023-10-23 04:43:53 -07:00
committed by Copybara-Service
parent a53b5be956
commit c6ef4f71c3
+84 -73
View File
@@ -1829,79 +1829,90 @@ const char* mj_validateReferences(const mjModel* m) {
// add flex fields (b/303056369)
#define MJMODEL_REFERENCES \
X(body_parentid, nbody, nbody , 0 ) \
X(body_rootid, nbody, nbody , 0 ) \
X(body_weldid, nbody, nbody , 0 ) \
X(body_mocapid, nbody, nmocap , 0 ) \
X(body_jntadr, nbody, njnt , m->body_jntnum ) \
X(body_dofadr, nbody, nv , m->body_dofnum ) \
X(body_geomadr, nbody, ngeom , m->body_geomnum ) \
X(body_bvhadr, nbody, nbvh , m->body_bvhnum ) \
X(body_plugin, nbody, nplugin , 0 ) \
X(jnt_qposadr, njnt, nq , 0 ) \
X(jnt_dofadr, njnt, nv , 0 ) \
X(jnt_bodyid, njnt, nbody , 0 ) \
X(dof_bodyid, nv, nbody , 0 ) \
X(dof_jntid, nv, njnt , 0 ) \
X(dof_parentid, nv, nv , 0 ) \
X(dof_Madr, nv, nM , 0 ) \
X(geom_bodyid, ngeom, nbody , 0 ) \
X(geom_matid, ngeom, nmat , 0 ) \
X(site_bodyid, nsite, nbody , 0 ) \
X(site_matid, nsite, nmat , 0 ) \
X(cam_bodyid, ncam, nbody , 0 ) \
X(cam_targetbodyid, ncam, nbody , 0 ) \
X(light_bodyid, nlight, nbody , 0 ) \
X(light_targetbodyid, nlight, nbody , 0 ) \
X(mesh_vertadr, nmesh, nmeshvert , m->mesh_vertnum ) \
X(mesh_normaladr, nmesh, nmeshnormal , m->mesh_normalnum ) \
X(mesh_texcoordadr, nmesh, nmeshtexcoord, m->mesh_texcoordnum ) \
X(mesh_faceadr, nmesh, nmeshface , m->mesh_facenum ) \
X(mesh_bvhadr, nmesh, nbvh , m->mesh_bvhnum ) \
X(mesh_graphadr, nmesh, nmeshgraph , 0 ) \
X(skin_matid, nskin, nmat , 0 ) \
X(skin_vertadr, nskin, nskinvert , m->skin_vertnum ) \
X(skin_texcoordadr, nskin, nskintexvert , 0 ) \
X(skin_faceadr, nskin, nskinface , m->skin_facenum ) \
X(skin_boneadr, nskin, nskinbone , m->skin_bonenum ) \
X(skin_bonevertadr, nskinbone, nskinbonevert, m->skin_bonevertnum ) \
X(skin_bonebodyid, nskinbone, nbody , 0 ) \
X(skin_bonevertid, nskinbonevert, nskinvert , 0 ) \
X(pair_geom1, npair, ngeom , 0 ) \
X(pair_geom2, npair, ngeom , 0 ) \
X(actuator_plugin, nu, nplugin , 0 ) \
X(actuator_actadr, nu, na , m->actuator_actnum ) \
X(sensor_plugin, nsensor, nplugin , 0 ) \
X(plugin_stateadr, nplugin, npluginstate , m->plugin_statenum ) \
X(plugin_attradr, nplugin, npluginattr , 0 ) \
X(tendon_adr, ntendon, nwrap , m->tendon_num ) \
X(tendon_matid, ntendon, nmat , 0 ) \
X(numeric_adr, nnumeric, nnumericdata , m->numeric_size ) \
X(text_adr, ntext, ntextdata , m->text_size ) \
X(tuple_adr, ntuple, ntupledata , m->tuple_size ) \
X(name_bodyadr, nbody, nnames , 0 ) \
X(name_jntadr, njnt, nnames , 0 ) \
X(name_geomadr, ngeom, nnames , 0 ) \
X(name_siteadr, nsite, nnames , 0 ) \
X(name_camadr, ncam, nnames , 0 ) \
X(name_lightadr, nlight, nnames , 0 ) \
X(name_meshadr, nmesh, nnames , 0 ) \
X(name_skinadr, nskin, nnames , 0 ) \
X(name_hfieldadr, nhfield, nnames , 0 ) \
X(name_texadr, ntex, nnames , 0 ) \
X(name_matadr, nmat, nnames , 0 ) \
X(name_pairadr, npair, nnames , 0 ) \
X(name_excludeadr, nexclude, nnames , 0 ) \
X(name_eqadr, neq, nnames , 0 ) \
X(name_tendonadr, ntendon, nnames , 0 ) \
X(name_actuatoradr, nu, nnames , 0 ) \
X(name_sensoradr, nsensor, nnames , 0 ) \
X(name_numericadr, nnumeric, nnames , 0 ) \
X(name_textadr, ntext, nnames , 0 ) \
X(name_tupleadr, ntuple, nnames , 0 ) \
X(name_keyadr, nkey, nnames , 0 ) \
X(mesh_pathadr, nmesh, npaths , 0 )
#define MJMODEL_REFERENCES \
X(body_parentid, nbody, nbody , 0 ) \
X(body_rootid, nbody, nbody , 0 ) \
X(body_weldid, nbody, nbody , 0 ) \
X(body_mocapid, nbody, nmocap , 0 ) \
X(body_jntadr, nbody, njnt , m->body_jntnum ) \
X(body_dofadr, nbody, nv , m->body_dofnum ) \
X(body_geomadr, nbody, ngeom , m->body_geomnum ) \
X(body_bvhadr, nbody, nbvh , m->body_bvhnum ) \
X(body_plugin, nbody, nplugin , 0 ) \
X(jnt_qposadr, njnt, nq , 0 ) \
X(jnt_dofadr, njnt, nv , 0 ) \
X(jnt_bodyid, njnt, nbody , 0 ) \
X(dof_bodyid, nv, nbody , 0 ) \
X(dof_jntid, nv, njnt , 0 ) \
X(dof_parentid, nv, nv , 0 ) \
X(dof_Madr, nv, nM , 0 ) \
X(geom_bodyid, ngeom, nbody , 0 ) \
X(geom_matid, ngeom, nmat , 0 ) \
X(site_bodyid, nsite, nbody , 0 ) \
X(site_matid, nsite, nmat , 0 ) \
X(cam_bodyid, ncam, nbody , 0 ) \
X(cam_targetbodyid, ncam, nbody , 0 ) \
X(light_bodyid, nlight, nbody , 0 ) \
X(light_targetbodyid, nlight, nbody , 0 ) \
X(mesh_vertadr, nmesh, nmeshvert , m->mesh_vertnum ) \
X(mesh_normaladr, nmesh, nmeshnormal , m->mesh_normalnum ) \
X(mesh_texcoordadr, nmesh, nmeshtexcoord , m->mesh_texcoordnum ) \
X(mesh_faceadr, nmesh, nmeshface , m->mesh_facenum ) \
X(mesh_bvhadr, nmesh, nbvh , m->mesh_bvhnum ) \
X(mesh_graphadr, nmesh, nmeshgraph , 0 ) \
X(flex_vertadr, nflex, nflexvert , m->flex_vertnum ) \
X(flex_edgeadr, nflex, nflexedge , m->flex_edgenum ) \
X(flex_elemadr, nflex, nflexelem , m->flex_elemnum ) \
X(flex_evpairadr, nflex, nflexevpair , m->flex_evpairnum ) \
X(flex_texcoordadr, nflex, nflextexcoord , 0 ) \
X(flex_elemdataadr, nflex, nflexelemdata , 0 ) \
X(flex_shelldataadr, nflex, nflexshelldata, 0 ) \
X(flex_edge, nflexedge*2, nflexvert , 0 ) \
X(flex_elem, nflexelemdata, nflexvert , 0 ) \
X(flex_shell, nflexshelldata, nflexvert , 0 ) \
X(flex_bvhadr, nflex, nbvh , m->flex_bvhnum ) \
X(skin_matid, nskin, nmat , 0 ) \
X(skin_vertadr, nskin, nskinvert , m->skin_vertnum ) \
X(skin_texcoordadr, nskin, nskintexvert , 0 ) \
X(skin_faceadr, nskin, nskinface , m->skin_facenum ) \
X(skin_boneadr, nskin, nskinbone , m->skin_bonenum ) \
X(skin_bonevertadr, nskinbone, nskinbonevert , m->skin_bonevertnum ) \
X(skin_bonebodyid, nskinbone, nbody , 0 ) \
X(skin_bonevertid, nskinbonevert, nskinvert , 0 ) \
X(pair_geom1, npair, ngeom , 0 ) \
X(pair_geom2, npair, ngeom , 0 ) \
X(actuator_plugin, nu, nplugin , 0 ) \
X(actuator_actadr, nu, na , m->actuator_actnum ) \
X(sensor_plugin, nsensor, nplugin , 0 ) \
X(plugin_stateadr, nplugin, npluginstate , m->plugin_statenum ) \
X(plugin_attradr, nplugin, npluginattr , 0 ) \
X(tendon_adr, ntendon, nwrap , m->tendon_num ) \
X(tendon_matid, ntendon, nmat , 0 ) \
X(numeric_adr, nnumeric, nnumericdata , m->numeric_size ) \
X(text_adr, ntext, ntextdata , m->text_size ) \
X(tuple_adr, ntuple, ntupledata , m->tuple_size ) \
X(name_bodyadr, nbody, nnames , 0 ) \
X(name_jntadr, njnt, nnames , 0 ) \
X(name_geomadr, ngeom, nnames , 0 ) \
X(name_siteadr, nsite, nnames , 0 ) \
X(name_camadr, ncam, nnames , 0 ) \
X(name_lightadr, nlight, nnames , 0 ) \
X(name_meshadr, nmesh, nnames , 0 ) \
X(name_skinadr, nskin, nnames , 0 ) \
X(name_hfieldadr, nhfield, nnames , 0 ) \
X(name_texadr, ntex, nnames , 0 ) \
X(name_matadr, nmat, nnames , 0 ) \
X(name_pairadr, npair, nnames , 0 ) \
X(name_excludeadr, nexclude, nnames , 0 ) \
X(name_eqadr, neq, nnames , 0 ) \
X(name_tendonadr, ntendon, nnames , 0 ) \
X(name_actuatoradr, nu, nnames , 0 ) \
X(name_sensoradr, nsensor, nnames , 0 ) \
X(name_numericadr, nnumeric, nnames , 0 ) \
X(name_textadr, ntext, nnames , 0 ) \
X(name_tupleadr, ntuple, nnames , 0 ) \
X(name_keyadr, nkey, nnames , 0 ) \
X(mesh_pathadr, nmesh, npaths , 0 )
#define X(adrarray, nadrs, ntarget, numarray) { \
int *nums = (numarray); \