コード例 #1
0
ファイル: engine.py プロジェクト: myl2232/dm_control
  def select(self, cursor_position):
    """Returns bodies and geoms visible at given coordinates in the frame.

    Args:
      cursor_position:  A `tuple` containing x and y coordinates, normalized to
        between 0 and 1, and where (0, 0) is bottom-left.

    Returns:
      A `Selected` namedtuple. Fields are None if nothing is selected.
    """
    self.update()
    aspect_ratio = self._width / self._height
    cursor_x, cursor_y = cursor_position
    pos = np.empty(3, np.double)
    selected_geom = mjlib.mjv_select(
        self._physics.model.ptr,
        self._physics.data.ptr,
        self._scene_option.ptr,
        aspect_ratio,
        cursor_x,
        cursor_y,
        self._scene.ptr,
        pos)

    if selected_geom == -1:  # Nothing was selected.
      return Selected(body=None, geom=None, world_position=None)
    else:
      assert 0 <= selected_geom < self._physics.model.ngeom
      selected_body = self._physics.model.geom_bodyid[selected_geom]
      assert 0 <= selected_body < self._physics.model.nbody
      return Selected(
          body=selected_body, geom=selected_geom, world_position=pos)
コード例 #2
0
ファイル: engine.py プロジェクト: zeta1999/dm_control
  def select(self, cursor_position):
    """Returns bodies and geoms visible at given coordinates in the frame.

    Args:
      cursor_position:  A `tuple` containing x and y coordinates, normalized to
        between 0 and 1, and where (0, 0) is bottom-left.

    Returns:
      A `Selected` namedtuple. Fields are None if nothing is selected.
    """
    self.update()
    aspect_ratio = self._width / self._height
    cursor_x, cursor_y = cursor_position
    pos = np.empty(3, np.double)
    geom_id_arr = np.intc([-1])
    skin_id_arr = np.intc([-1])
    body_id = mjlib.mjv_select(
        self._physics.model.ptr,
        self._physics.data.ptr,
        self._scene_option.ptr,
        aspect_ratio,
        cursor_x,
        cursor_y,
        self._scene.ptr,
        pos,
        geom_id_arr,
        skin_id_arr)
    [geom_id] = geom_id_arr
    [skin_id] = skin_id_arr

    # Validate IDs
    if body_id != -1:
      assert 0 <= body_id < self._physics.model.nbody
    else:
      body_id = None
    if geom_id != -1:
      assert 0 <= geom_id < self._physics.model.ngeom
    else:
      geom_id = None
    if skin_id != -1:
      assert 0 <= skin_id < self._physics.model.nskin
    else:
      skin_id = None

    if all(id_ is None for id_ in (body_id, geom_id, skin_id)):
      pos = None

    return Selected(
        body=body_id, geom=geom_id, skin=skin_id, world_position=pos)
コード例 #3
0
 def raycast(self, viewport, screen_pos):
     """Shoots a ray from the specified viewport position into the scene."""
     if not self.is_initialized:
         return -1, None
     viewport_pos = viewport.screen_to_inverse_viewport(screen_pos)
     grab_world_pos = np.empty(3, dtype=np.double)
     selected_geom_id_arr = np.intc([-1])
     selected_skin_id_arr = np.intc([-1])
     selected_body_id = mjlib.mjv_select(
         self._model.ptr, self._data.ptr, self._options.visualization.ptr,
         viewport.aspect_ratio, viewport_pos[0], viewport_pos[1],
         self._scene.ptr, grab_world_pos, selected_geom_id_arr,
         selected_skin_id_arr)
     del selected_geom_id_arr, selected_skin_id_arr  # Unused.
     if selected_body_id < 0:
         selected_body_id = _INVALID_BODY_INDEX
         grab_world_pos = None
     return selected_body_id, grab_world_pos
コード例 #4
0
    def raycast(self, viewport, screen_pos):
        """Shoots a ray from the specified viewport position into the scene."""
        if not self.is_initialized:
            return -1, None
        viewport_pos = viewport.screen_to_inverse_viewport(screen_pos)
        grab_world_pos = np.zeros(3)
        selected_geom_id = mjlib.mjv_select(self._model.ptr, self._data.ptr,
                                            self._options.visualization.ptr,
                                            viewport.aspect_ratio,
                                            viewport_pos[0], viewport_pos[1],
                                            self._scene.ptr, grab_world_pos)

        if selected_geom_id >= 0:
            selected_body_id = self._model.geom_bodyid[selected_geom_id]
        else:
            selected_body_id = _INVALID_BODY_INDEX
            grab_world_pos = None

        return selected_body_id, grab_world_pos