5 from .. 
import pinocchio_pywrap_default 
as pin
 
    6 from ..utils 
import npToTuple
 
    7 from .base_visualizer 
import BaseVisualizer
 
   12     WITH_HPP_FCL_BINDINGS = 
True 
   14     WITH_HPP_FCL_BINDINGS = 
False 
   19     A Pinocchio display using panda3d engine. 
   22     def initViewer(self, viewer=None, load_model=False, open=True):  
 
   23         """Init the viewer by attaching to / creating a GUI viewer.""" 
   30         from panda3d_viewer 
import Viewer 
as Panda3dViewer
 
   34                 self.
viewer = Panda3dViewer(
 
   35                     window_title=
"python-pinocchio", window_type=
"offscreen" 
   38                 self.
viewer = Panda3dViewer(window_title=
"python-pinocchio")
 
   44         """Create a group of nodes displaying the robot meshes in the viewer.""" 
   53             if WITH_HPP_FCL_BINDINGS 
and isinstance(geom, hppfcl.ShapeBase):
 
   55                 if isinstance(geom, hppfcl.Capsule):
 
   56                     r, fl = geom.radius, 2 * geom.halfLength
 
   57                     self.
viewer.append_capsule(root, obj.name, r, fl)
 
   58                 elif isinstance(geom, hppfcl.Cylinder):
 
   59                     r, fl = geom.radius, 2 * geom.halfLength
 
   60                     self.
viewer.append_cylinder(root, obj.name, r, fl)
 
   61                 elif isinstance(geom, hppfcl.Box):
 
   63                     self.
viewer.append_box(root, obj.name, size)
 
   64                 elif isinstance(geom, hppfcl.Sphere):
 
   65                     self.
viewer.append_sphere(root, obj.name, geom.radius)
 
   67                     msg = f
"Unsupported geometry type for {obj.name} ({type(geom)})" 
   68                     warnings.warn(msg, category=UserWarning, stacklevel=2)
 
   73                 self.
viewer.append_mesh(root, obj.name, obj.meshPath, scale)
 
   75             if obj.overrideMaterial:
 
   77                 path = obj.meshTexturePath
 
   78                 self.
viewer.set_material(root, obj.name, rgba, path)
 
   79             elif color 
is not None:
 
   80                 self.
viewer.set_material(root, obj.name, color)
 
   94         """Return the name of the geometry object inside the viewer.""" 
   95         if geometry_type 
is pin.GeometryType.VISUAL:
 
   97         elif geometry_type 
is pin.GeometryType.COLLISION:
 
  102         Display the robot at configuration q in the viewer by placing all the bodies. 
  107         def move(group, model, data):
 
  110             for obj 
in model.geometryObjects:
 
  111                 oMg = data.oMg[model.getGeometryId(obj.name)]
 
  112                 x, y, z, qx, qy, qz, qw = pin.SE3ToXYZQUATtuple(oMg)
 
  113                 name_pose_dict[obj.name] = (x, y, z), (qw, qx, qy, qz)
 
  114             self.
viewer.move_nodes(group, name_pose_dict)
 
  123         """Set whether to display collision objects or not.""" 
  128         """Set whether to display visual objects or not.""" 
  133         raise NotImplementedError()
 
  136         raise NotImplementedError()
 
  139         raise NotImplementedError()
 
  142         raise NotImplementedError()
 
  145         raise NotImplementedError()
 
  148         rgb = self.
viewer.get_screenshot(requested_format=
"RGB")
 
  150             raise RuntimeError(
"Failed to capture image from viewer")
 
  154         raise NotImplementedError()
 
  157         raise NotImplementedError()
 
  160         raise NotImplementedError()
 
  163 __all__ = [
"Panda3dVisualizer"]