18 #ifndef IGNITION_GAZEBO_GUI_SCENE3D_HH_ 19 #define IGNITION_GAZEBO_GUI_SCENE3D_HH_ 31 #include <sdf/Root.hh> 41 #include <ignition/rendering/Camera.hh> 45 #include "ignition/gui/qt.h" 53 inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE {
54 class IgnRendererPrivate;
55 class RenderWindowItemPrivate;
85 QString errorPopupText
87 WRITE SetErrorPopupText
88 NOTIFY ErrorPopupTextChanged
95 public: ~Scene3D() override;
98 public:
void LoadConfig(const tinyxml2::XMLElement *_pluginElem) override;
108 public slots:
void OnDropped(const QString &_drop,
109 int _mouseX,
int _mouseY);
114 public slots:
void OnHovered(
int _mouseX,
int _mouseY);
118 public slots:
void OnFocusWindow();
121 protected:
bool eventFilter(QObject *_obj, QEvent *_event) override;
127 private:
bool OnTransformMode(const msgs::StringMsg &_msg,
128 msgs::Boolean &_res);
134 private:
bool OnRecordVideo(const msgs::VideoRecord &_msg,
135 msgs::Boolean &_res);
141 private:
bool OnMoveTo(const msgs::StringMsg &_msg,
142 msgs::Boolean &_res);
148 private:
bool OnFollow(const msgs::StringMsg &_msg,
149 msgs::Boolean &_res);
155 private:
bool OnFollowOffset(const msgs::
Vector3d &_msg,
156 msgs::Boolean &_res);
162 private:
bool OnViewAngle(const msgs::
Vector3d &_msg,
163 msgs::Boolean &_res);
169 private:
bool OnMoveToPose(const msgs::GUICamera &_msg,
170 msgs::Boolean &_res);
176 private:
bool OnViewCollisions(const msgs::StringMsg &_msg,
177 msgs::Boolean &_res);
181 public: Q_INVOKABLE QString ErrorPopupText() const;
185 public: Q_INVOKABLE
void SetErrorPopupText(const QString &_errorTxt);
188 signals:
void ErrorPopupTextChanged();
193 signals:
void popupError();
197 private:
std::unique_ptr<Scene3DPrivate> dataPtr;
221 public:
void Render(RenderSync *_renderSync);
224 public:
void Initialize();
227 public:
void Destroy();
234 public:
void SetTransformMode(
const std::string &_mode);
242 public:
void SetModelPath(
const std::string &_filePath);
247 public:
void SetDropdownMenuEnabled(
bool _enableDropdownMenu);
253 public:
void SetRecordVideo(
bool _record,
const std::string &_format,
258 public:
void SetRecordVideoUseSimTime(
bool _useSimTime);
262 public:
void SetRecordVideoLockstep(
bool _lockstep);
266 public:
void SetRecordVideoBitrate(
unsigned int _bitrate);
270 public:
void SetMoveTo(
const std::string &_target);
277 public:
void SetFollowTarget(
const std::string &_target,
278 bool _waitForTarget =
false);
292 public:
void SetViewCollisionsTarget(
const std::string &_target);
296 public:
void SetFollowPGain(
double _gain);
301 public:
void SetFollowWorldFrame(
bool _worldFrame);
313 public:
bool FollowWorldFrame()
const;
321 public:
void SetInitCameraPose(
const math::Pose3d &_pose);
335 public:
void HandleKeyPress(QKeyEvent *_e);
339 public:
void HandleKeyRelease(QKeyEvent *_e);
372 public:
void SnapPoint(
381 public:
void RequestSelectionChange(
Entity _selectedEntity,
382 bool _deselectAll,
bool _sendEvent);
392 private:
double SnapValue(
393 double _coord,
double _interval,
double _sensitivity)
const;
400 private:
void HandleMouseEvent();
403 private:
void HandleMouseContextMenu();
406 private:
void HandleMouseViewControl();
409 private:
void HandleMouseTransformControl();
412 private:
void HandleEntitySelection();
415 private:
void HandleModelPlacement();
418 private:
void BroadcastHoverPos();
421 private:
void BroadcastLeftClick();
424 private:
void BroadcastRightClick();
428 private:
Entity UniqueId();
433 public:
bool GeneratePreview(
const sdf::Root &_sdf);
436 public:
void TerminateSpawnPreview();
457 private:
void OnMoveToComplete();
460 private:
void OnViewAngleComplete();
463 private:
void OnMoveToPoseComplete();
469 private:
void UpdateSelectedEntity(
const rendering::NodePtr &_node,
475 private:
void DeselectAllEntities(
bool _sendEvent);
478 signals:
void ContextMenuRequested(QString _entity);
484 signals:
void FollowTargetChanged(
const std::string &_target,
485 bool _waitForTarget);
500 public: uint32_t visibilityMask = 0xFFFFFFFFu;
503 public:
bool initialized =
false;
506 public: QSize textureSize = QSize(1024, 1024);
509 public:
bool textureDirty =
false;
527 public slots:
void RenderNext(RenderSync *renderSync);
530 public slots:
void ShutDown();
533 public slots:
void SizeChanged();
539 signals:
void TextureReady(uint _id,
const QSize &_size);
542 public: QOffscreenSurface *surface =
nullptr;
545 public: QOpenGLContext *context =
nullptr;
577 public:
void SetInitCameraPose(
const math::Pose3d &_pose);
581 public:
void SetVisibilityMask(uint32_t _mask);
585 public:
void SetTransformMode(
const std::string &_mode);
593 public:
void SetModelPath(
const std::string &_filePath);
598 public:
void SetDropdownMenuEnabled(
bool _enableDropdownMenu);
604 public:
void SetRecordVideo(
bool _record,
const std::string &_format,
609 public:
void SetRecordVideoUseSimTime(
bool _useSimTime);
613 public:
void SetRecordVideoLockstep(
bool _lockstep);
617 public:
void SetRecordVideoBitrate(
unsigned int _bitrate);
621 public:
void SetMoveTo(
const std::string &_target);
628 public Q_SLOTS:
void SetFollowTarget(
const std::string &_target,
629 bool _waitForTarget =
false);
643 public:
void SetViewCollisionsTarget(
const std::string &_target);
647 public:
void SetFollowPGain(
double _gain);
652 public:
void SetFollowWorldFrame(
bool _worldFrame);
660 public:
void SetWorldName(
const std::string &_name);
672 public:
void UpdateSelectedEntity(
Entity _entity,
679 public:
void DeselectAllEntities(
bool _sendEvent);
708 public:
bool RendererInitialized()
const;
711 public Q_SLOTS:
void Ready();
715 public:
void HandleKeyPress(QKeyEvent *_e);
719 public:
void HandleKeyRelease(QKeyEvent *_e);
722 protected:
void mousePressEvent(QMouseEvent *_e)
override;
725 protected:
void mouseReleaseEvent(QMouseEvent *_e)
override;
728 protected:
void mouseMoveEvent(QMouseEvent *_e)
override;
731 protected:
void wheelEvent(QWheelEvent *_e)
override;
739 private: QSGNode *updatePaintNode(QSGNode *_oldNode,
740 QQuickItem::UpdatePaintNodeData *_data)
override;
746 signals:
void openContextMenu(QString _entity);
750 public slots:
void OnContextMenuRequested(QString _entity);
766 public:
explicit TextureNode(QQuickWindow *_window,
767 RenderSync &_renderSync);
776 public slots:
void NewTexture(uint _id,
const QSize &_size);
780 public slots:
void PrepareNode();
785 signals:
void TextureInUse(RenderSync *_renderSync);
789 signals:
void PendingNewTexture();
795 public: QSize size = QSize(0, 0);
804 public: QSGTexture *texture =
nullptr;
807 public: QQuickWindow *window =
nullptr;
std::string worldName
Name of the world.
Definition: Scene3D.hh:497
IgnRenderer ignRenderer
Ign-rendering renderer.
Definition: Scene3D.hh:548
Texture node for displaying the render texture from ign-renderer.
Definition: Scene3D.hh:758
A QQUickItem that manages the render window.
Definition: Scene3D.hh:553
Information passed to systems on the update callback.
Definition: Types.hh:36
QMutex mutex
Mutex to protect the texture variables.
Definition: Scene3D.hh:798
The EntityComponentManager constructs, deletes, and returns components and entities. A component can be of any class which inherits from components::BaseComponent.
Definition: EntityComponentManager.hh:65
Creates a new ignition rendering scene or adds a user-camera to an existing scene. It is possible to orbit the camera around the scene with the mouse. Use other plugins to manage objects in the scene.
Definition: Scene3D.hh:79
Ign-rendering renderer. All ign-rendering calls should be performed inside this class as it makes sur...
Definition: Scene3D.hh:208
static const Vector2< T > Zero
Rendering thread.
Definition: Scene3D.hh:517
Vector3< double > Vector3d
RenderSync & renderSync
See RenderSync.
Definition: Scene3D.hh:801
GLuint textureId
Render texture id Values is constantly constantly cycled/swapped/changed from a worker thread Don't r...
Definition: Scene3D.hh:491
This library is part of the Ignition Robotics project.
Base class for a GUI System.
Definition: GuiSystem.hh:44
uint64_t Entity
An Entity identifies a single object in simulation such as a model, link, or light. At its core, an Entity is just an identifier.
Definition: Entity.hh:59
Definition: RenderUtil.hh:44