in mujoco_py/mjrendercontext.pyx [0:0]
def _add_marker_to_scene(self, marker_params):
""" Adds marker to scene, and returns the corresponding object. """
if self._scn.ngeom >= self._scn.maxgeom:
raise RuntimeError('Ran out of geoms. maxgeom: %d' % self._scn.maxgeom)
cdef mjvGeom *g = self._scn.geoms + self._scn.ngeom
# default values.
g.dataid = -1
g.objtype = const.OBJ_UNKNOWN
g.objid = -1
g.category = const.CAT_DECOR
g.texid = -1
g.texuniform = 0
g.texrepeat[0] = 1
g.texrepeat[1] = 1
g.emission = 0
g.specular = 0.5
g.shininess = 0.5
g.reflectance = 0
g.type = const.GEOM_BOX
g.size[:] = np.ones(3) * 0.1
g.mat[:] = np.eye(3).flatten()
g.rgba[:] = np.ones(4)
wrapped = WrapMjvGeom(g)
for key, value in marker_params.items():
if isinstance(value, (int, float)):
setattr(wrapped, key, value)
elif isinstance(value, (tuple, list, np.ndarray)):
attr = getattr(wrapped, key)
attr[:] = np.asarray(value).reshape(attr.shape)
elif isinstance(value, str):
assert key == "label", "Only label is a string in mjvGeom."
if value == None:
g.label[0] = 0
else:
strncpy(g.label, value.encode(), 100)
elif hasattr(wrapped, key):
raise ValueError("mjvGeom has attr {} but type {} is invalid".format(key, type(value)))
else:
raise ValueError("mjvGeom doesn't have field %s" % key)
self._scn.ngeom += 1