robokudo.vis.o3d_visualizer =========================== .. py:module:: robokudo.vis.o3d_visualizer .. autoapi-nested-parse:: Open3D-based visualization for RoboKudo pipelines. This module provides 3D visualization capabilities for RoboKudo pipelines using Open3D. It handles: * 3D geometry visualization * Point cloud rendering * Camera control * Coordinate frame display * Window management Dependencies ----------- * open3d for 3D visualization * logging for status messages * robokudo.annotators for annotator access * robokudo.vis.visualizer for base visualization interface See Also -------- * :mod:`robokudo.vis.visualizer` : Base visualization interface * :mod:`robokudo.vis.cv_visualizer` : 2D visualization * :mod:`robokudo.vis.ros_visualizer` : ROS-based visualization Classes ------- .. autoapisummary:: robokudo.vis.o3d_visualizer.O3DVisualizer robokudo.vis.o3d_visualizer.Viewer3D Module Contents --------------- .. py:class:: O3DVisualizer(*args, **kwargs) Bases: :py:obj:`robokudo.vis.visualizer.Visualizer`, :py:obj:`robokudo.vis.visualizer.Visualizer.Observer` Open3D-based visualizer for 3D geometry data. This class provides visualization of 3D geometry data from pipeline annotators using Open3D windows. It supports: * 3D geometry visualization * Point cloud rendering * Camera control * Coordinate frame display * Shared visualization state Parameters ---------- *args Variable length argument list passed to parent classes **kwargs Arbitrary keyword arguments passed to parent classes Attributes ---------- viewer3d : Viewer3D Open3D viewer instance shared_visualizer_state : Visualizer.SharedState Shared state object for coordinating between visualizers update_output : bool Flag indicating if display needs updating .. py:attribute:: viewer3d :value: None .. py:method:: notify(observable, *args, **kwargs) Handle notification of state changes. Parameters ---------- observable : object The object that sent the notification *args Variable length argument list **kwargs Arbitrary keyword arguments .. py:method:: tick() Update the visualization display. This method: * Initializes viewer if needed * Gets current annotator outputs * Updates display if needed * Handles viewer lifecycle Returns ------- bool False if visualization should terminate, True otherwise .. py:method:: window_title() Get the window title for this visualizer. Returns ------- str Window title in format "RoboKudo/pipeline_name" Notes ----- .. todo:: Refactor with CVVisualizer .. py:class:: Viewer3D(title) Bases: :py:obj:`object` Open3D viewer wrapper for 3D visualization. This class wraps the Open3D visualization functionality to provide: * Window management * Geometry updates * Camera control * Coordinate frame display Parameters ---------- title : str Window title for the viewer Attributes ---------- first_cloud : bool Flag indicating if this is the first cloud being displayed CLOUD_NAME : str Name identifier for the point cloud rk_logger : logging.Logger Logger instance main_vis : o3d.visualization.O3DVisualizer Open3D visualizer instance visualized_geometries : list Names of currently visualized geometries .. py:attribute:: first_cloud :value: True .. py:attribute:: CLOUD_NAME :value: 'Viewer3D' .. py:attribute:: rk_logger :value: None .. py:attribute:: main_vis .. py:attribute:: visualized_geometries :value: [] .. py:method:: tick() Update the viewer display. Returns ------- bool False if visualization should terminate, True otherwise .. py:method:: update_cloud(geometries) Update the displayed geometries. This method updates the Open3D visualizer based on the outputs of the annotators. For the first update, it also sets up the camera and coordinate frame. Parameters ---------- geometries : Union[o3d.geometry.Geometry3D, dict, list, None] Geometries to display. Can be: * A single geometry object * A dict with geometry configuration * A list of geometries or dicts * None to clear display Notes ----- The dict format follows Open3D's draw() convention. See: https://github.com/isl-org/Open3D/blob/master/examples/python/visualization/draw.py