Skip to content

liblaf.melon.scene

Scene helpers for transformed Trimesh geometry extraction.

Functions:

  • dump

    Dump scene geometries as transformed Trimesh copies.

  • subscene

    Extract a subscene and apply the node transform in world coordinates.

dump

dump(
    scene: Scene,
    geometry_names: Iterable[str] | None = None,
    *,
    include_visual: bool = True,
) -> list[Trimesh]

Dump scene geometries as transformed Trimesh copies.

Parameters:

  • scene (Scene) –

    Source Trimesh scene.

  • geometry_names (Iterable[str] | None, default: None ) –

    Optional geometry names to include. When omitted, all Trimesh geometries are dumped.

  • include_visual (bool, default: True ) –

    Preserve visual attributes on copied geometries.

Returns:

  • list[Trimesh]

    Transformed meshes with name and node metadata.

Source code in src/liblaf/melon/scene/_scene.py
def dump(
    scene: tm.Scene,
    geometry_names: Iterable[str] | None = None,
    *,
    include_visual: bool = True,
) -> list[tm.Trimesh]:
    """Dump scene geometries as transformed Trimesh copies.

    Args:
        scene: Source Trimesh scene.
        geometry_names: Optional geometry names to include. When omitted, all
            Trimesh geometries are dumped.
        include_visual: Preserve visual attributes on copied geometries.

    Returns:
        Transformed meshes with `name` and `node` metadata.
    """
    geometries: list[tm.Trimesh] = []
    if geometry_names is None:
        geometry_names: list[str] = [
            name
            for name, geometry in scene.geometry.items()
            if isinstance(geometry, tm.Trimesh)
        ]
    for geometry_name in geometry_names:
        for node_name in scene.graph.geometry_nodes[geometry_name]:
            transform, geometry_name_ = scene.graph[node_name]
            assert geometry_name == geometry_name_
            geometry: tm.Trimesh = scene.geometry[geometry_name]
            geometry: tm.Trimesh = geometry.copy(include_visual=include_visual)
            geometry: tm.Trimesh = geometry.apply_transform(transform)
            geometry.metadata["name"] = geometry_name
            geometry.metadata["node"] = node_name
            geometries.append(geometry)
    return geometries

subscene

subscene(scene: Scene, node_name: str) -> Scene

Extract a subscene and apply the node transform in world coordinates.

Parameters:

  • scene (Scene) –

    Source Trimesh scene.

  • node_name (str) –

    Node to extract.

Returns:

  • Scene

    Transformed subscene rooted at node_name.

Source code in src/liblaf/melon/scene/_scene.py
def subscene(scene: tm.Scene, node_name: str) -> tm.Scene:
    """Extract a subscene and apply the node transform in world coordinates.

    Args:
        scene: Source Trimesh scene.
        node_name: Node to extract.

    Returns:
        Transformed subscene rooted at `node_name`.
    """
    subscene: tm.Scene = scene.subscene(node_name)
    transform, _geometry_name = scene.graph[node_name]
    subscene.apply_transform(transform)
    return subscene