From 4ae0f51c57f1d72901ed4ce84aa45cb0b8443bab Mon Sep 17 00:00:00 2001 From: Million Integrals Date: Mon, 15 Apr 2019 16:03:45 -0700 Subject: [PATCH] Expose mesh names. (#388) --- mujoco_py/generated/wrappers.pxi | 17 ++++++++++++++--- scripts/gen_wrappers.py | 5 ++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/mujoco_py/generated/wrappers.pxi b/mujoco_py/generated/wrappers.pxi index 23894bb2..f0eb061b 100644 --- a/mujoco_py/generated/wrappers.pxi +++ b/mujoco_py/generated/wrappers.pxi @@ -1001,9 +1001,9 @@ cdef class PyMjModel(object): cdef np.ndarray _name_keyadr cdef np.ndarray _names - cdef readonly tuple body_names, joint_names, geom_names, site_names, light_names, camera_names, actuator_names, sensor_names, tendon_names - cdef readonly dict _body_id2name, _joint_id2name, _geom_id2name, _site_id2name, _light_id2name, _camera_id2name, _actuator_id2name, _sensor_id2name, _tendon_id2name - cdef readonly dict _body_name2id, _joint_name2id, _geom_name2id, _site_name2id, _light_name2id, _camera_name2id, _actuator_name2id, _sensor_name2id, _tendon_name2id + cdef readonly tuple body_names, joint_names, geom_names, site_names, light_names, camera_names, actuator_names, sensor_names, tendon_names, mesh_names + cdef readonly dict _body_id2name, _joint_id2name, _geom_id2name, _site_id2name, _light_id2name, _camera_id2name, _actuator_id2name, _sensor_id2name, _tendon_id2name, _mesh_id2name + cdef readonly dict _body_name2id, _joint_name2id, _geom_name2id, _site_name2id, _light_name2id, _camera_name2id, _actuator_name2id, _sensor_name2id, _tendon_name2id, _mesh_name2id def body_id2name(self, id): if id not in self._body_id2name: @@ -1094,6 +1094,16 @@ cdef class PyMjModel(object): if name not in self._tendon_name2id: raise ValueError("No \"tendon\" with name %s exists. Available \"tendon\" names = %s." % (name, self.tendon_names)) return self._tendon_name2id[name] + + def mesh_id2name(self, id): + if id not in self._mesh_id2name: + raise ValueError("No mesh with id %d exists." % id) + return self._mesh_id2name[id] + + def mesh_name2id(self, name): + if name not in self._mesh_name2id: + raise ValueError("No \"mesh\" with name %s exists. Available \"mesh\" names = %s." % (name, self.mesh_names)) + return self._mesh_name2id[name] cdef public tuple userdata_names cdef public dict _userdata_id2name cdef public dict _userdata_name2id @@ -1222,6 +1232,7 @@ cdef class PyMjModel(object): self.actuator_names, self._actuator_name2id, self._actuator_id2name = self._extract_mj_names(p, p.name_actuatoradr, p.nu, mjtObj.mjOBJ_ACTUATOR) self.sensor_names, self._sensor_name2id, self._sensor_id2name = self._extract_mj_names(p, p.name_sensoradr, p.nsensor, mjtObj.mjOBJ_SENSOR) self.tendon_names, self._tendon_name2id, self._tendon_id2name = self._extract_mj_names(p, p.name_tendonadr, p.ntendon, mjtObj.mjOBJ_TENDON) + self.mesh_names, self._mesh_name2id, self._mesh_id2name = self._extract_mj_names(p, p.name_meshadr, p.nmesh, mjtObj.mjOBJ_MESH) self.userdata_names = tuple() self._userdata_name2id = dict() self._userdata_id2name = dict() diff --git a/scripts/gen_wrappers.py b/scripts/gen_wrappers.py index 95a08d08..b26a7a05 100644 --- a/scripts/gen_wrappers.py +++ b/scripts/gen_wrappers.py @@ -654,7 +654,8 @@ def {name}(self): 'camera', 'actuator', 'sensor', - 'tendon'] + 'tendon', + 'mesh'] obj_types_names = [o + '_names' for o in obj_types] extra += ' cdef readonly tuple ' + ', '.join(obj_types_names) + '\n' obj_types_id2names = ['_' + o + '_id2name' for o in obj_types] @@ -739,6 +740,8 @@ def __dealloc__(self): 'sensor', 'sensor', 'SENSOR') extra_set += _set_body_identifiers('tendon', 'tendon', 'tendon', 'TENDON') + extra_set += _set_body_identifiers('mesh', + 'mesh', 'mesh', 'MESH') # userdata_names is empty at construction time extra_set += ' self.userdata_names = tuple()\n' extra_set += ' self._userdata_name2id = dict()\n'