882 lines
36 KiB
C++
882 lines
36 KiB
C++
/*
|
|
* Copyright (C) 2015 Open Source Robotics Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
#ifndef _GAZEBO_RENDERING_SCENE_HH_
|
|
#define _GAZEBO_RENDERING_SCENE_HH_
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <boost/enable_shared_from_this.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
#include <sdf/sdf.hh>
|
|
|
|
#include <ignition/math/Vector2.hh>
|
|
#include <ignition/math/Vector3.hh>
|
|
|
|
#include "gazebo/common/Events.hh"
|
|
#include "gazebo/common/Color.hh"
|
|
#include "gazebo/gazebo_config.h"
|
|
#include "gazebo/math/Vector2i.hh"
|
|
#include "gazebo/msgs/msgs.hh"
|
|
#include "gazebo/rendering/RenderTypes.hh"
|
|
#include "gazebo/rendering/Visual.hh"
|
|
#include "gazebo/transport/TransportTypes.hh"
|
|
#include "gazebo/util/system.hh"
|
|
|
|
namespace SkyX
|
|
{
|
|
class SkyX;
|
|
}
|
|
|
|
namespace Ogre
|
|
{
|
|
class SceneManager;
|
|
class Node;
|
|
class Entity;
|
|
class Mesh;
|
|
class Vector3;
|
|
class Quaternion;
|
|
}
|
|
|
|
namespace gazebo
|
|
{
|
|
namespace rendering
|
|
{
|
|
class Visual;
|
|
class Grid;
|
|
class Heightmap;
|
|
class ScenePrivate;
|
|
|
|
/// \addtogroup gazebo_rendering
|
|
/// \{
|
|
|
|
/// \class Scene Scene.hh rendering/rendering.hh
|
|
/// \brief Representation of an entire scene graph.
|
|
///
|
|
/// Maintains all the Visuals, Lights, and Cameras for a World.
|
|
class GZ_RENDERING_VISIBLE Scene :
|
|
public boost::enable_shared_from_this<Scene>
|
|
{
|
|
public: enum SkyXMode {
|
|
GZ_SKYX_ALL = 0x0FFFFFFF,
|
|
GZ_SKYX_CLOUDS = 0x0000001,
|
|
GZ_SKYX_MOON = 0x0000002,
|
|
GZ_SKYX_NONE = 0
|
|
};
|
|
|
|
/// \brief Constructor.
|
|
private: Scene();
|
|
|
|
/// \brief Constructor.
|
|
/// \param[in] _name Name of the scene.
|
|
/// \param[in] _enableVisualizations True to enable visualizations,
|
|
/// this should be set to true for user interfaces, and false for
|
|
/// sensor generation.
|
|
public: Scene(const std::string &_name,
|
|
const bool _enableVisualizations = false,
|
|
const bool _isServer = false);
|
|
|
|
/// \brief Destructor
|
|
public: virtual ~Scene();
|
|
|
|
/// \brief Load the scene from a set of parameters.
|
|
/// \param[in] _scene SDF scene element to load.
|
|
public: void Load(sdf::ElementPtr _scene);
|
|
|
|
/// \brief Load the scene with default parameters.
|
|
public: void Load();
|
|
|
|
/// \brief Init rendering::Scene.
|
|
public: void Init();
|
|
|
|
/// \brief Process all received messages.
|
|
public: void PreRender();
|
|
|
|
/// \brief Get the OGRE scene manager.
|
|
/// \return Pointer to the Ogre SceneManager.
|
|
/// \deprecated See OgreSceneManager()
|
|
public: Ogre::SceneManager *GetManager() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the OGRE scene manager.
|
|
/// \return Pointer to the Ogre SceneManager.
|
|
public: Ogre::SceneManager *OgreSceneManager() const;
|
|
|
|
/// \brief Get the name of the scene.
|
|
/// \return Name of the scene.
|
|
/// \deprecated See Name()
|
|
public: std::string GetName() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the name of the scene.
|
|
/// \return Name of the scene.
|
|
public: std::string Name() const;
|
|
|
|
/// \brief Set the ambient color.
|
|
/// \param[in] _color The ambient color to use.
|
|
public: void SetAmbientColor(const common::Color &_color);
|
|
|
|
/// \brief Get the ambient color.
|
|
/// \return The scene's ambient color.
|
|
/// \deprecated See AmbientColor()
|
|
public: common::Color GetAmbientColor() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the ambient color.
|
|
/// \return The scene's ambient color.
|
|
public: common::Color AmbientColor() const;
|
|
|
|
/// \brief Set the background color.
|
|
/// \param[in] _color The background color.
|
|
public: void SetBackgroundColor(const common::Color &_color);
|
|
|
|
/// \brief Get the background color.
|
|
/// \return The background color.
|
|
/// \deprecated See BackgroundColor()
|
|
public: common::Color GetBackgroundColor() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the background color.
|
|
/// \return The background color.
|
|
public: common::Color BackgroundColor() const;
|
|
|
|
/// \brief Create a square grid of cells.
|
|
/// \param[in] _cellCount Number of grid cells in one direction.
|
|
/// \param[in] _cellLength Length of one grid cell.
|
|
/// \param[in] _lineWidth Width of the grid lines.
|
|
/// \param[in] _color Color of the grid lines.
|
|
public: void CreateGrid(const uint32_t _cellCount,
|
|
const float _cellLength, const float _lineWidth,
|
|
const common::Color &_color);
|
|
|
|
/// \brief Get a grid based on an index. Index must be between 0 and
|
|
/// Scene::GetGridCount.
|
|
/// \param[in] _index Index of the grid.
|
|
public: Grid *GetGrid(uint32_t _index) const;
|
|
|
|
/// \brief Get the number of grids.
|
|
/// \return The number of grids.
|
|
/// \deprecated See GridCount()
|
|
public: uint32_t GetGridCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the number of grids.
|
|
/// \return The number of grids.
|
|
public: uint32_t GridCount() const;
|
|
|
|
/// \brief Create a camera
|
|
/// \param[in] _name Name of the new camera.
|
|
/// \param[in] _autoRender True to allow Gazebo to automatically
|
|
/// render the camera. This should almost always be true.
|
|
/// \return Pointer to the new camera.
|
|
public: CameraPtr CreateCamera(const std::string &_name,
|
|
const bool _autoRender = true);
|
|
|
|
/// \brief Create a wide-angle camera
|
|
/// \param[in] _name Name of the new camera.
|
|
/// \param[in] _autoRender True to allow Gazebo to automatically
|
|
/// render the camera. This should almost always be true.
|
|
/// \return Pointer to the new camera.
|
|
public: WideAngleCameraPtr CreateWideAngleCamera(const std::string &_name,
|
|
const bool _autoRender = true);
|
|
|
|
#ifdef HAVE_OCULUS
|
|
/// \brief Create an oculus rift camera
|
|
/// \param[in] _name Name of the new camera.
|
|
/// \return Pointer to the new camera.
|
|
public: OculusCameraPtr CreateOculusCamera(const std::string &_name);
|
|
|
|
/// \brief Get the number of cameras in this scene
|
|
/// \return Number of cameras.
|
|
/// \deprecated See OculusCameraCount()
|
|
public: uint32_t GetOculusCameraCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the number of cameras in this scene
|
|
/// \return Number of cameras.
|
|
public: uint32_t OculusCameraCount() const;
|
|
#endif
|
|
|
|
/// \brief Create depth camera
|
|
/// \param[in] _name Name of the new camera.
|
|
/// \param[in] _autoRender True to allow Gazebo to automatically
|
|
/// render the camera. This should almost always be true.
|
|
/// \return Pointer to the new camera.
|
|
public: DepthCameraPtr CreateDepthCamera(const std::string &_name,
|
|
const bool _autoRender = true);
|
|
|
|
/// \brief Create laser that generates data from rendering.
|
|
/// \param[in] _name Name of the new laser.
|
|
/// \param[in] _autoRender True to allow Gazebo to automatically
|
|
/// render the camera. This should almost always be true.
|
|
/// \return Pointer to the new laser.
|
|
public: GpuLaserPtr CreateGpuLaser(const std::string &_name,
|
|
const bool _autoRender = true);
|
|
|
|
/// \brief Get the number of cameras in this scene
|
|
/// \return Number of cameras.
|
|
/// \deprecated See CameraCount()
|
|
public: uint32_t GetCameraCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the number of cameras in this scene
|
|
/// \return Number of cameras.
|
|
public: uint32_t CameraCount() const;
|
|
|
|
/// \brief Get a camera based on an index. Index must be between
|
|
/// 0 and Scene::GetCameraCount.
|
|
/// \param[in] _index Index of the camera to get.
|
|
/// \return Pointer to the camera. Or NULL if the index is invalid.
|
|
public: CameraPtr GetCamera(const uint32_t _index) const;
|
|
|
|
/// \brief Get a camera by name.
|
|
/// \param[in] _name Name of the camera.
|
|
/// \return Pointer to the camera. Or NULL if the name is invalid.
|
|
public: CameraPtr GetCamera(const std::string &_name) const;
|
|
|
|
/// \brief Create a user camera.
|
|
///
|
|
/// A user camera is one design for use with a GUI.
|
|
/// \param[in] _name Name of the UserCamera.
|
|
/// \param[in] _stereoEnabled True to enable stereo rendering. This is
|
|
/// here for compatibility with 3D monitors/TVs.
|
|
/// \return A pointer to the new UserCamera.
|
|
public: UserCameraPtr CreateUserCamera(const std::string &_name,
|
|
const bool _stereoEnabled = false);
|
|
|
|
/// \brief Get the number of user cameras in this scene
|
|
/// \return The number of user cameras.
|
|
/// \deprecated See UserCameraCount()
|
|
public: uint32_t GetUserCameraCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the number of user cameras in this scene
|
|
/// \return The number of user cameras.
|
|
public: uint32_t UserCameraCount() const;
|
|
|
|
/// \brief Get a user camera by index. The index value must be between
|
|
/// 0 and Scene::GetUserCameraCount.
|
|
/// \param[in] _index Index of the UserCamera to get.
|
|
/// \return Pointer to the UserCamera, or NULL if the index was
|
|
/// invalid.
|
|
public: UserCameraPtr GetUserCamera(const uint32_t _index) const;
|
|
|
|
/// \brief Remove a camera from the scene
|
|
/// \param[in] _name Name of the camera.
|
|
public: void RemoveCamera(const std::string &_name);
|
|
|
|
/// \brief Get a light by name.
|
|
/// \param[in] _name Name of the light to get.
|
|
/// \return Pointer to the light, or NULL if the light was not found.
|
|
public: LightPtr GetLight(const std::string &_name) const;
|
|
|
|
/// \brief Get the count of the lights.
|
|
/// \return The number of lights.
|
|
/// \deprecated See LightCount()
|
|
public: uint32_t GetLightCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the count of the lights.
|
|
/// \return The number of lights.
|
|
public: uint32_t LightCount() const;
|
|
|
|
/// \brief Get a light based on an index. The index must be between
|
|
/// 0 and Scene::GetLightCount.
|
|
/// \param[in] _index Index of the light.
|
|
/// \return Pointer to the Light or NULL if index was invalid.
|
|
public: LightPtr GetLight(const uint32_t _index) const;
|
|
|
|
/// \brief Get a visual by name.
|
|
/// \param[in] _name Name of the visual to retrieve.
|
|
/// \return Pointer to the visual, NULL if not found.
|
|
public: VisualPtr GetVisual(const std::string &_name) const;
|
|
|
|
/// \brief Get a visual by id.
|
|
/// \param[in] _id ID of the visual to retrieve.
|
|
/// \return Pointer to the visual, NULL if not found.
|
|
public: VisualPtr GetVisual(const uint32_t _id) const;
|
|
|
|
/// \brief Select a visual by name.
|
|
/// \param[in] _name Name of the visual to select.
|
|
/// \param[in] _mode Selection mode (normal, or move).
|
|
public: void SelectVisual(const std::string &_name,
|
|
const std::string &_mode);
|
|
|
|
/// \brief Get an entity at a pixel location using a camera. Used for
|
|
/// mouse picking.
|
|
/// \param[in] _camera The ogre camera, used to do mouse picking
|
|
/// \param[in] _mousePos The position of the mouse in screen coordinates
|
|
/// \param[out] _mod Used for object manipulation
|
|
/// \return The selected entity, or NULL
|
|
/// \deprecated See VisualAt()
|
|
public: VisualPtr GetVisualAt(CameraPtr _camera,
|
|
const math::Vector2i &_mousePos,
|
|
std::string &_mod) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get an entity at a pixel location using a camera. Used for
|
|
/// mouse picking.
|
|
/// \param[in] _camera The ogre camera, used to do mouse picking
|
|
/// \param[in] _mousePos The position of the mouse in screen coordinates
|
|
/// \param[out] _mod Used for object manipulation
|
|
/// \return The selected entity, or NULL
|
|
public: VisualPtr VisualAt(CameraPtr _camera,
|
|
const ignition::math::Vector2i &_mousePos,
|
|
std::string &_mod);
|
|
|
|
/// \brief Move the visual to be ontop of the nearest visual below it.
|
|
/// \param[in] _visualName Name of the visual to move.
|
|
public: void SnapVisualToNearestBelow(const std::string &_visualName);
|
|
|
|
/// \brief Get a visual at a mouse position.
|
|
/// \param[in] _camera Pointer to the camera used to project the mouse
|
|
/// position.
|
|
/// \param[in] _mousePos The 2d position of the mouse in pixels.
|
|
/// \return Pointer to the visual, NULL if none found.
|
|
/// \deprecated See VisualAt()
|
|
public: VisualPtr GetVisualAt(CameraPtr _camera,
|
|
const math::Vector2i &_mousePos) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get a visual at a mouse position.
|
|
/// \param[in] _camera Pointer to the camera used to project the mouse
|
|
/// position.
|
|
/// \param[in] _mousePos The 2d position of the mouse in pixels.
|
|
/// \return Pointer to the visual, NULL if none found.
|
|
public: VisualPtr VisualAt(CameraPtr _camera,
|
|
const ignition::math::Vector2i &_mousePos);
|
|
|
|
/// \brief Get a model's visual at a mouse position.
|
|
/// \param[in] _camera Pointer to the camera used to project the mouse
|
|
/// position.
|
|
/// \param[in] _mousePos The 2d position of the mouse in pixels.
|
|
/// \return Pointer to the visual, NULL if none found.
|
|
/// \deprecated See ModelVisualAt()
|
|
public: VisualPtr GetModelVisualAt(CameraPtr _camera,
|
|
const math::Vector2i &_mousePos) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get a model's visual at a mouse position.
|
|
/// \param[in] _camera Pointer to the camera used to project the mouse
|
|
/// position.
|
|
/// \param[in] _mousePos The 2d position of the mouse in pixels.
|
|
/// \return Pointer to the visual, NULL if none found.
|
|
public: VisualPtr ModelVisualAt(CameraPtr _camera,
|
|
const ignition::math::Vector2i &_mousePos);
|
|
|
|
/// \brief Get the closest visual below a given visual.
|
|
/// \param[in] _visualName Name of the visual to search below.
|
|
/// \return Pointer to the visual below, or NULL if no visual.
|
|
/// \deprecated See VisualBelow()
|
|
public: VisualPtr GetVisualBelow(const std::string &_visualName)
|
|
GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the closest visual below a given visual.
|
|
/// \param[in] _visualName Name of the visual to search below.
|
|
/// \return Pointer to the visual below, or NULL if no visual.
|
|
public: VisualPtr VisualBelow(const std::string &_visualName);
|
|
|
|
/// \brief Get a visual directly below a point.
|
|
/// \param[in] _pt 3D point to get the visual below.
|
|
/// \param[out] _visuals The visuals below the point order in
|
|
/// proximity.
|
|
/// \deprecated See VisualsBelowPoint()
|
|
public: void GetVisualsBelowPoint(const math::Vector3 &_pt,
|
|
std::vector<VisualPtr> &_visuals) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get a visual directly below a point.
|
|
/// \param[in] _pt 3D point to get the visual below.
|
|
/// \param[out] _visuals The visuals below the point order in
|
|
/// proximity.
|
|
public: void VisualsBelowPoint(const ignition::math::Vector3d &_pt,
|
|
std::vector<VisualPtr> &_visuals);
|
|
|
|
|
|
/// \brief Get the Z-value of the first object below the given point.
|
|
/// \param[in] _pt Position to search below for a visual.
|
|
/// \return The Z-value of the nearest visual below the point. Zero
|
|
/// is returned if no visual is found.
|
|
/// \deprecated See HeightBelowPoint()
|
|
public: double GetHeightBelowPoint(const math::Vector3 &_pt)
|
|
GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the Z-value of the first object below the given point.
|
|
/// \param[in] _pt Position to search below for a visual.
|
|
/// \return The Z-value of the nearest visual below the point. Zero
|
|
/// is returned if no visual is found.
|
|
public: double HeightBelowPoint(const ignition::math::Vector3d &_pt);
|
|
|
|
/// \brief Get the world pos of a the first contact at a pixel location.
|
|
/// \param[in] _camera Pointer to the camera.
|
|
/// \param[in] _mousePos 2D position of the mouse in pixels.
|
|
/// \param[out] _position 3D position of the first contact point.
|
|
/// \return True if a valid object was hit by the raycast.
|
|
/// \deprecated See FirstContact()
|
|
public: bool GetFirstContact(CameraPtr _camera,
|
|
const math::Vector2i &_mousePos,
|
|
math::Vector3 &_position) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the world pos of a the first contact at a pixel location.
|
|
/// \param[in] _camera Pointer to the camera.
|
|
/// \param[in] _mousePos 2D position of the mouse in pixels.
|
|
/// \param[out] _position 3D position of the first contact point.
|
|
/// \return True if a valid object was hit by the raycast.
|
|
public: bool FirstContact(CameraPtr _camera,
|
|
const ignition::math::Vector2i &_mousePos,
|
|
ignition::math::Vector3d &_position);
|
|
|
|
/// \brief Print the scene graph to std_out.
|
|
public: void PrintSceneGraph();
|
|
|
|
/// \brief Hide or show a visual.
|
|
/// \param[in] _name Name of the visual to change.
|
|
/// \param[in] _visible True to make visual visible, False to make it
|
|
/// invisible.
|
|
public: void SetVisible(const std::string &_name, const bool _visible);
|
|
|
|
/// \brief Draw a named line.
|
|
/// \param[in] _start Start position of the line.
|
|
/// \param[in] _end End position of the line.
|
|
/// \param[in] _name Name of the line.
|
|
/// \deprecated See function that accepts ignition::math parameters.
|
|
public: void DrawLine(const math::Vector3 &_start,
|
|
const math::Vector3 &_end,
|
|
const std::string &_name) GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Draw a named line.
|
|
/// \param[in] _start Start position of the line.
|
|
/// \param[in] _end End position of the line.
|
|
/// \param[in] _name Name of the line.
|
|
public: void DrawLine(const ignition::math::Vector3d &_start,
|
|
const ignition::math::Vector3d &_end,
|
|
const std::string &_name);
|
|
|
|
/// \brief Set the fog parameters.
|
|
/// \param[in] _type Type of fog: "linear", "exp", or "exp2".
|
|
/// \param[in] _color Color of the fog.
|
|
/// \param[in] _density Fog density.
|
|
/// \param[in] _start Distance from camera to start the fog.
|
|
/// \param[in] _end Distance from camera at which the fog is at max
|
|
/// density.
|
|
public: void SetFog(const std::string &_type,
|
|
const common::Color &_color,
|
|
const double _density, const double _start,
|
|
const double _end);
|
|
|
|
/// \brief Get the scene ID.
|
|
/// \return The ID of the scene.
|
|
/// \deprecated See Id()
|
|
public: uint32_t GetId() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the scene ID.
|
|
/// \return The ID of the scene.
|
|
public: uint32_t Id() const;
|
|
|
|
/// \brief Get the scene Id as a string.
|
|
/// \return The ID as a string.
|
|
/// \deprecated See IdString()
|
|
public: std::string GetIdString() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the scene Id as a string.
|
|
/// \return The ID as a string.
|
|
public: std::string IdString() const;
|
|
|
|
/// \brief Set whether shadows are on or off
|
|
/// \param[in] _value True to enable shadows, False to disable
|
|
public: void SetShadowsEnabled(const bool _value);
|
|
|
|
/// \brief Get whether shadows are on or off
|
|
/// \return True if shadows are enabled.
|
|
/// \deprecated See ShadowsEnabled()
|
|
public: bool GetShadowsEnabled() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get whether shadows are on or off
|
|
/// \return True if shadows are enabled.
|
|
public: bool ShadowsEnabled() const;
|
|
|
|
/// \brief Set the shadow texture size
|
|
/// \param[in] _size Size to set the shadow texture to. This must be a
|
|
/// power of 2. The default size is 1024.
|
|
/// \return True if size is set successfully, false otherwise.
|
|
public: bool SetShadowTextureSize(const unsigned int _size);
|
|
|
|
/// \brief Get the shadow texture size
|
|
/// \return Size of the shadow texture. The default size is 1024.
|
|
public: unsigned int ShadowTextureSize() const;
|
|
|
|
/// \brief Add a visual to the scene
|
|
/// \param[in] _vis Visual to add.
|
|
public: void AddVisual(VisualPtr _vis);
|
|
|
|
/// \brief Remove a visual from the scene.
|
|
/// \param[in] _vis Visual to remove.
|
|
public: void RemoveVisual(VisualPtr _vis);
|
|
|
|
/// \brief Remove a visual from the scene.
|
|
/// \param[in] _id Id of the visual to remove.
|
|
public: void RemoveVisual(const uint32_t _id);
|
|
|
|
/// \internal
|
|
/// \brief Set the id of a visual. Internally used when visual ids'
|
|
/// are required to be updated from visual msgs.
|
|
/// \param[in] _vis Pointer to visual.
|
|
/// \param[in] _id New id to set to.
|
|
public: void SetVisualId(VisualPtr _vis, const uint32_t _id);
|
|
|
|
/// \brief Add a light to the scene
|
|
/// \param[in] _light Light to add.
|
|
public: void AddLight(LightPtr _light);
|
|
|
|
/// \brief Remove a light to the scene
|
|
/// \param[in] _light Light to Remove.
|
|
public: void RemoveLight(LightPtr _light);
|
|
|
|
/// \brief Set the grid on or off
|
|
/// \param[in] _enabled Set to true to turn on the grid
|
|
public: void SetGrid(const bool _enabled);
|
|
|
|
/// \brief Show/hide the world origin indicator.
|
|
/// \param[in] _show True to show the origin.
|
|
public: void ShowOrigin(const bool _show);
|
|
|
|
/// \brief Get the top level world visual.
|
|
/// \return Pointer to the world visual.
|
|
/// \deprecated See WorldVisual()
|
|
public: VisualPtr GetWorldVisual() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the top level world visual.
|
|
/// \return Pointer to the world visual.
|
|
public: VisualPtr WorldVisual() const;
|
|
|
|
/// \brief Remove the name of scene from a string.
|
|
/// \param[in] _name Name to string the scene name from.
|
|
/// \return The stripped name.
|
|
public: std::string StripSceneName(const std::string &_name) const;
|
|
|
|
/// \brief Get a pointer to the heightmap.
|
|
/// \return Pointer to the heightmap, NULL if no heightmap.
|
|
public: Heightmap *GetHeightmap() const;
|
|
|
|
/// \brief Set the Level Of Detail (LOD) value for the heightmap.
|
|
/// \param[in] _value A render-engine specific value used to compute LOD.
|
|
/// \sa Heightmap::SetLOD
|
|
public: void SetHeightmapLOD(const unsigned int _value);
|
|
|
|
/// \brief Get the Level Of Detail (LOD) value for the heightmap.
|
|
/// \return A render-engine specific value that is used to compute LOD.
|
|
/// \sa Heightmap::LOD
|
|
public: unsigned int HeightmapLOD() const;
|
|
|
|
/// \brief Set the skirt length value for the heightmap LOD tiles.
|
|
/// \param[in] _value Length of skirts on LOD tiles
|
|
/// \sa Heightmap::SetSkirtLength
|
|
public: void SetHeightmapSkirtLength(const double _value);
|
|
|
|
/// \brief Get the skirt length value for the heightmap LOD tiles.
|
|
/// \return Length of skirts on LOD tiles
|
|
/// \sa Heightmap::SkirtLength
|
|
public: double HeightmapSkirtLength() const;
|
|
|
|
/// \brief Clear rendering::Scene
|
|
public: void Clear();
|
|
|
|
/// \brief Get the currently selected visual.
|
|
/// \return Pointer to the currently selected visual, or NULL if
|
|
/// nothing is selected.
|
|
/// \deprecated See SelectedVisual()
|
|
public: VisualPtr GetSelectedVisual() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the currently selected visual.
|
|
/// \return Pointer to the currently selected visual, or NULL if
|
|
/// nothing is selected.
|
|
public: VisualPtr SelectedVisual() const;
|
|
|
|
/// \brief Enable or disable wireframe for all visuals.
|
|
/// \param[in] _show True to enable wireframe for all visuals.
|
|
public: void SetWireframe(const bool _show);
|
|
|
|
/// \brief Get whether wireframe is enabled for all visuals.
|
|
/// \return True if wireframe is enabled for all visuals.
|
|
public: bool Wireframe() const;
|
|
|
|
/// \brief Enable or disable transparency for all visuals.
|
|
/// \param[in] _show True to enable transparency for all visuals.
|
|
public: void SetTransparent(const bool _show);
|
|
|
|
/// \brief Enable or disable center of mass visualization.
|
|
/// \param[in] _show True to enable center of mass visualization.
|
|
public: void ShowCOMs(const bool _show);
|
|
|
|
/// \brief Enable or disable inertia visualization.
|
|
/// \param[in] _show True to enable inertia visualization.
|
|
public: void ShowInertias(const bool _show);
|
|
|
|
/// \brief Enable or disable link frame visualization.
|
|
/// \param[in] _show True to enable link frame visualization.
|
|
public: void ShowLinkFrames(const bool _show);
|
|
|
|
/// \brief Enable or disable joint visualization.
|
|
/// \param[in] _show True to enable joint visualization.
|
|
public: void ShowJoints(const bool _show);
|
|
|
|
/// \brief Enable or disable collision visualization.
|
|
/// \param[in] _show True to enable collision visualization.
|
|
public: void ShowCollisions(const bool _show);
|
|
|
|
/// \brief Enable or disable contact visualization.
|
|
/// \param[in] _show True to enable contact visualization.
|
|
public: void ShowContacts(const bool _show);
|
|
|
|
/// \brief Display clouds in the sky.
|
|
/// \param[in] _show True to display clouds.
|
|
public: void ShowClouds(const bool _show);
|
|
|
|
/// \brief Get whether or not clouds are displayed.
|
|
/// \return True if clouds are displayed.
|
|
/// \deprecated See ShowClouds()
|
|
public: bool GetShowClouds() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get whether or not clouds are displayed.
|
|
/// \return True if clouds are displayed.
|
|
public: bool ShowClouds() const;
|
|
|
|
/// \brief Set SkyX mode to enable/disable skyx components such as
|
|
/// clouds and moon.
|
|
/// \param[in] _mode SkyX mode bitmask.
|
|
/// \sa Scene::SkyXMode
|
|
public: void SetSkyXMode(const unsigned int _mode);
|
|
|
|
/// \brief Get the sky in the scene.
|
|
/// \return Pointer to the sky.
|
|
public: SkyX::SkyX *GetSkyX() const;
|
|
|
|
/// \brief Return true if the Scene has been initialized.
|
|
/// \return True if the scene has been initialized.
|
|
/// \deprecated See Initialized()
|
|
public: bool GetInitialized() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Return true if the Scene has been initialized.
|
|
/// \return True if the scene has been initialized.
|
|
public: bool Initialized() const;
|
|
|
|
/// \brief Get the scene simulation time.
|
|
/// Note this is different from World::GetSimTime() because
|
|
/// there is a lag between the time new poses are sent out by World
|
|
/// and when they are received and applied by the Scene.
|
|
/// \return The current simulation time in Scene
|
|
/// \deprecated See SimTime()
|
|
public: common::Time GetSimTime() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the scene simulation time.
|
|
/// Note this is different from World::GetSimTime() because
|
|
/// there is a lag between the time new poses are sent out by World
|
|
/// and when they are received and applied by the Scene.
|
|
/// \return The current simulation time in Scene
|
|
public: common::Time SimTime() const;
|
|
|
|
/// \brief Get the number of visuals.
|
|
/// \return The number of visuals in the Scene.
|
|
/// \deprecated See VisualCount()
|
|
public: uint32_t GetVisualCount() const GAZEBO_DEPRECATED(7.0);
|
|
|
|
/// \brief Get the number of visuals.
|
|
/// \return The number of visuals in the Scene.
|
|
public: uint32_t VisualCount() const;
|
|
|
|
/// \brief Remove all projectors.
|
|
public: void RemoveProjectors();
|
|
|
|
/// \brief Toggle layer visilibility. This will process all visuals.
|
|
/// If a visual is on the specified layer its visiblity will be
|
|
/// toggled. Visuals with a negative layer index are always visible.
|
|
/// \param[in] _layer Index of the layer to toggle.
|
|
public: void ToggleLayer(const int32_t _layer);
|
|
|
|
/// \brief Enable visualizations, currently only applies to sensor
|
|
/// visuals.
|
|
/// \param[in] _enable True to enable, false to disable.
|
|
/// \sa EnableVisualizations()
|
|
public: void EnableVisualizations(const bool _enable);
|
|
|
|
/// \brief Check whether visualizations are enabled or not.
|
|
/// \return True if enabled.
|
|
/// \sa EnableVisualizations(bool)
|
|
public: bool EnableVisualizations() const;
|
|
|
|
/// \brief Helper function to setup the sky.
|
|
private: void SetSky();
|
|
|
|
/// \brief Initialize the deferred shading render path.
|
|
private: void InitDeferredShading();
|
|
|
|
/// \brief Helper function for GetVisualAt functions.
|
|
/// \param[in] _camera Pointer to the camera.
|
|
/// \param[in] _mousePos 2D position of the mouse in pixels.
|
|
/// \param[in] _ignoreSelectionObj True to ignore selection objects,
|
|
/// which are GUI objects use to manipulate objects.
|
|
/// \return Pointer to the Ogre::Entity, NULL if none.
|
|
private: Ogre::Entity *OgreEntityAt(CameraPtr _camera,
|
|
const ignition::math::Vector2i &_mousePos,
|
|
const bool _ignoreSelectionObj);
|
|
|
|
/// \brief Get the mesh information for the given mesh.
|
|
/// \param[in] _mesh Mesh to get info about.
|
|
/// \param[out] _vertexCount Number of vertices in the mesh.
|
|
/// \param[out] _vertices Array of the vertices.
|
|
/// \param[out] _indexCount Number if indices.
|
|
/// \param[out] _indices Array of the indices.
|
|
/// \param[in] _position Position of the mesh.
|
|
/// \param[in] _orient Orientation of the mesh.
|
|
/// \param[in] _scale Scale of the mesh
|
|
// Code found in Wiki: www.ogre3d.org/wiki/index.php/RetrieveVertexData
|
|
private: void MeshInformation(const Ogre::Mesh *_mesh,
|
|
size_t &_vertexCount,
|
|
Ogre::Vector3* &_vertices,
|
|
size_t &_indexCount,
|
|
uint64_t* &_indices,
|
|
const ignition::math::Vector3d &_position,
|
|
const ignition::math::Quaterniond &_orient,
|
|
const ignition::math::Vector3d &_scale);
|
|
|
|
/// \brief Print scene graph.
|
|
/// \param[in] _prefix String to prefix each line of output with.
|
|
/// \param[in] _node The Ogre Node to print.
|
|
private: void PrintSceneGraphHelper(const std::string &_prefix,
|
|
Ogre::Node *_node);
|
|
|
|
/// \brief Called when a scene message is received on the
|
|
/// ~/scene topic
|
|
/// \param[in] _msg The message.
|
|
private: void OnScene(ConstScenePtr &_msg);
|
|
|
|
/// \brief Response callback
|
|
/// \param[in] _msg The message data.
|
|
private: void OnResponse(ConstResponsePtr &_msg);
|
|
|
|
/// \brief Request callback
|
|
/// \param[in] _msg The message data.
|
|
private: void OnRequest(ConstRequestPtr &_msg);
|
|
|
|
/// \brief Joint message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnJointMsg(ConstJointPtr &_msg);
|
|
|
|
/// \brief Sensor message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessSensorMsg(ConstSensorPtr &_msg);
|
|
|
|
/// \brief Process a joint message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessJointMsg(ConstJointPtr &_msg);
|
|
|
|
/// \brief Process a link message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessLinkMsg(ConstLinkPtr &_msg);
|
|
|
|
/// \brief Proces a scene message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessSceneMsg(ConstScenePtr &_msg);
|
|
|
|
/// \brief Process a model message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessModelMsg(const msgs::Model &_msg);
|
|
|
|
/// \brief Scene message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnSensorMsg(ConstSensorPtr &_msg);
|
|
|
|
/// \brief Visual message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnVisualMsg(ConstVisualPtr &_msg);
|
|
|
|
/// \brief Process a visual message.
|
|
/// \param[in] _msg The message data.
|
|
/// \param[in] _type Type of visual.
|
|
/// \return True if message is processed successfully.
|
|
private: bool ProcessVisualMsg(ConstVisualPtr &_msg,
|
|
Visual::VisualType _type = Visual::VT_ENTITY);
|
|
|
|
/// \brief Light factory message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnLightFactoryMsg(ConstLightPtr &_msg);
|
|
|
|
/// \brief Light modify message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnLightModifyMsg(ConstLightPtr &_msg);
|
|
|
|
/// \brief Process a light factory message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessLightFactoryMsg(ConstLightPtr &_msg);
|
|
|
|
/// \brief Process a light modify message.
|
|
/// \param[in] _msg The message data.
|
|
private: bool ProcessLightModifyMsg(ConstLightPtr &_msg);
|
|
|
|
/// \brief Process a request message.
|
|
/// \param[in] _msg The message data.
|
|
private: void ProcessRequestMsg(ConstRequestPtr &_msg);
|
|
|
|
/// \brief Sky message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnSkyMsg(ConstSkyPtr &_msg);
|
|
|
|
/// \brief Model message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnModelMsg(ConstModelPtr &_msg);
|
|
|
|
/// \brief Pose message callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnPoseMsg(ConstPosesStampedPtr &_msg);
|
|
|
|
/// \brief Skeleton animation callback.
|
|
/// \param[in] _msg The message data.
|
|
private: void OnSkeletonPoseMsg(ConstPoseAnimationPtr &_msg);
|
|
|
|
/// \brief Create a new center of mass visual.
|
|
/// \param[in] _msg Message containing the link data.
|
|
/// \param[in] _linkVisual Pointer to the link's visual.
|
|
private: void CreateCOMVisual(ConstLinkPtr &_msg, VisualPtr _linkVisual);
|
|
|
|
/// \brief Create a center of mass visual using SDF data.
|
|
/// \param[in] _elem SDF element data.
|
|
/// \param[in] _linkVisual Pointer to the link's visual.
|
|
private: void CreateCOMVisual(sdf::ElementPtr _elem,
|
|
VisualPtr _linkVisual);
|
|
|
|
/// \brief Create a new inertia visual.
|
|
/// \param[in] _msg Message containing the link data.
|
|
/// \param[in] _linkVisual Pointer to the link's visual.
|
|
private: void CreateInertiaVisual(ConstLinkPtr &_msg,
|
|
VisualPtr _linkVisual);
|
|
|
|
/// \brief Create an inertia visual using SDF data.
|
|
/// \param[in] _elem SDF element data.
|
|
/// \param[in] _linkVisual Pointer to the link's visual.
|
|
private: void CreateInertiaVisual(sdf::ElementPtr _elem,
|
|
VisualPtr _linkVisual);
|
|
|
|
/// \brief Create a new link frame visual.
|
|
/// \param[in] _msg Message containing the link data.
|
|
/// \param[in] _linkVisual Pointer to the link's visual.
|
|
private: void CreateLinkFrameVisual(ConstLinkPtr &_msg,
|
|
VisualPtr _linkVisual);
|
|
|
|
/// \brief Helper function to remove all visualizations attached to a
|
|
/// visual.
|
|
/// \param[in] _vis Visual that the visualizations are attached to.
|
|
private: void RemoveVisualizations(VisualPtr _vis);
|
|
|
|
/// \internal
|
|
/// \brief Pointer to private data.
|
|
private: std::unique_ptr<ScenePrivate> dataPtr;
|
|
};
|
|
/// \}
|
|
}
|
|
}
|
|
#endif
|