Add auto-generated tree element lists to Python bindings.
PiperOrigin-RevId: 680973047 Change-Id: I948151260cba330c6b7218cecf13aae2c7ae92c7
This commit is contained in:
committed by
Copybara-Service
parent
62ec802ec1
commit
8a825e6050
@@ -252,31 +252,31 @@ def generate() -> None:
|
||||
|
||||
def generate_add() -> None:
|
||||
"""Generate add constructors with optional keyword arguments."""
|
||||
for key, parent, default in [
|
||||
('mjsSite', 'Body', True),
|
||||
('mjsGeom', 'Body', True),
|
||||
('mjsJoint', 'Body', True),
|
||||
('mjsLight', 'Body', True),
|
||||
('mjsCamera', 'Body', True),
|
||||
('mjsBody', 'Body', True),
|
||||
('mjsFrame', 'Body', True),
|
||||
('mjsMaterial', 'Spec', True),
|
||||
('mjsMesh', 'Spec', True),
|
||||
('mjsPair', 'Spec', True),
|
||||
('mjsEquality', 'Spec', True),
|
||||
('mjsTendon', 'Spec', True),
|
||||
('mjsActuator', 'Spec', True),
|
||||
('mjsSkin', 'Spec', False),
|
||||
('mjsTexture', 'Spec', False),
|
||||
('mjsText', 'Spec', False),
|
||||
('mjsTuple', 'Spec', False),
|
||||
('mjsFlex', 'Spec', False),
|
||||
('mjsHField', 'Spec', False),
|
||||
('mjsKey', 'Spec', False),
|
||||
('mjsNumeric', 'Spec', False),
|
||||
('mjsExclude', 'Spec', False),
|
||||
('mjsSensor', 'Spec', False),
|
||||
('mjsPlugin', 'Spec', False),
|
||||
for key, parent, default, listname, objtype in [
|
||||
('mjsSite', 'Body', True, 'sites', 'mjOBJ_SITE'),
|
||||
('mjsGeom', 'Body', True, 'geoms', 'mjOBJ_GEOM'),
|
||||
('mjsJoint', 'Body', True, 'joints', 'mjOBJ_JOINT'),
|
||||
('mjsLight', 'Body', True, 'lights', 'mjOBJ_LIGHT'),
|
||||
('mjsCamera', 'Body', True, 'cameras', 'mjOBJ_CAMERA'),
|
||||
('mjsBody', 'Body', True, 'bodies', 'mjOBJ_BODY'),
|
||||
('mjsFrame', 'Body', True, 'frames', 'mjOBJ_FRAME'),
|
||||
('mjsMaterial', 'Spec', True, 'materials', 'mjOBJ_MATERIAL'),
|
||||
('mjsMesh', 'Spec', True, 'meshes', 'mjOBJ_MESH'),
|
||||
('mjsPair', 'Spec', True, 'pairs', 'mjOBJ_PAIR'),
|
||||
('mjsEquality', 'Spec', True, 'equalities', 'mjOBJ_EQUALITY'),
|
||||
('mjsTendon', 'Spec', True, 'tendons', 'mjOBJ_TENDON'),
|
||||
('mjsActuator', 'Spec', True, 'actuators', 'mjOBJ_ACTUATOR'),
|
||||
('mjsSkin', 'Spec', False, 'skins', 'mjOBJ_SKIN'),
|
||||
('mjsTexture', 'Spec', False, 'textures', 'mjOBJ_TEXTURE'),
|
||||
('mjsText', 'Spec', False, 'texts', 'mjOBJ_TEXT'),
|
||||
('mjsTuple', 'Spec', False, 'tuples', 'mjOBJ_TUPLE'),
|
||||
('mjsFlex', 'Spec', False, 'flexes', 'mjOBJ_FLEX'),
|
||||
('mjsHField', 'Spec', False, 'hfields', 'mjOBJ_HFIELD'),
|
||||
('mjsKey', 'Spec', False, 'keys', 'mjOBJ_KEY'),
|
||||
('mjsNumeric', 'Spec', False, 'numerics', 'mjOBJ_NUMERIC'),
|
||||
('mjsExclude', 'Spec', False, 'excludes', 'mjOBJ_EXCLUDE'),
|
||||
('mjsSensor', 'Spec', False, 'sensors', 'mjOBJ_SENSOR'),
|
||||
('mjsPlugin', 'Spec', False, 'plugins', 'mjOBJ_PLUGIN'),
|
||||
]:
|
||||
|
||||
def _field(f: ast_nodes.StructFieldDecl):
|
||||
@@ -561,6 +561,21 @@ def generate_add() -> None:
|
||||
py::return_value_policy::reference_internal);
|
||||
"""
|
||||
|
||||
code += f"""\n
|
||||
mjSpec.def_property_readonly(
|
||||
"{listname}",
|
||||
[](MjSpec& self) -> py::list {{
|
||||
py::list list;
|
||||
raw::MjsElement* el = mjs_firstElement(self.ptr, {objtype});
|
||||
while (el) {{
|
||||
list.append(mjs_as{key[3:]}(el));
|
||||
el = mjs_nextElement(self.ptr, el);
|
||||
}}
|
||||
return list;
|
||||
}},
|
||||
py::return_value_policy::reference_internal);
|
||||
"""
|
||||
|
||||
print(code)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user