9 #ifndef CDisplayWindow3D_H
10 #define CDisplayWindow3D_H
22 class C3DWindowDialog;
23 class CMyGLCanvas_DisplayWindow3D;
119 using Ptr = std::shared_ptr<CDisplayWindow3D>;
120 using ConstPtr = std::shared_ptr<const CDisplayWindow3D>;
158 unsigned int initialWindowWidth = 400,
159 unsigned int initialWindowHeight = 300);
163 const std::string& windowCaption,
unsigned int initialWindowWidth = 400,
164 unsigned int initialWindowHeight = 300);
330 const size_t unique_index = 0,
338 const double x_frac,
const double y_frac,
const std::string& text,
340 const double font_size,
342 const size_t unique_index = 0,
const double font_spacing = 1.5,
343 const double font_kerning = 0.1,
const bool draw_shadow =
false,
The base class for GUI window classes.
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.
static CDisplayWindow3D::Ptr Create(const std::string &windowCaption, unsigned int initialWindowWidth=400, unsigned int initialWindowHeight=300)
Class factory returning a smart pointer.
void setCameraPointingToPoint(float x, float y, float z)
Changes the camera parameters programmatically.
void updateWindow()
Repaints the window.
mrpt::img::CImage::Ptr getLastWindowImagePtr() const
Retrieve the last captured image from the window, as a smart pointer.
void internal_setRenderingFPS(double FPS)
Set the rendering FPS (users don't call this, the method is for internal MRPT objects only)
std::shared_ptr< const CDisplayWindow3D > ConstPtr
unsigned int m_grab_imgs_idx
void forceRepaint()
Repaints the window.
void unlockAccess3DScene()
Unlocks the access to the internal 3D scene.
void setPos(int x, int y) override
Changes the position of the window on the screen.
friend class CMyGLCanvas_DisplayWindow3D
virtual void setCursorCross(bool cursorIsCross) override
Set cursor style to default (cursorIsCross=false) or to a cross (cursorIsCross=true)
std::recursive_mutex m_csAccess3DScene
Critical section for accesing m_3Dscene.
bool getLastMousePositionRay(mrpt::math::TLine3D &ray) const
Gets the 3D ray for the direction line of the pixel where the mouse cursor is at.
void setCameraZoom(float zoom)
Changes the camera parameters programmatically.
float getCameraElevationDeg() const
Get camera parameters programmatically.
bool isCapturingImgs() const
void setImageView_fast(mrpt::img::CImage &img)
Just like setImageView but moves the internal image memory instead of making a copy,...
void getCameraPointingToPoint(float &x, float &y, float &z) const
Get camera parameters programmatically.
void setFOV(float v)
Changes the camera field of view (in degrees) (used for gluPerspective).
void setWindowTitle(const std::string &str) override
Changes the window title.
void setCameraProjective(bool isProjective)
Sets the camera as projective, or orthogonal.
void grabImagesStart(const std::string &grab_imgs_prefix=std::string("video_"))
Start to save rendered images to disk.
CDisplayWindow3D(const std::string &windowCaption=std::string(), unsigned int initialWindowWidth=400, unsigned int initialWindowHeight=300)
Constructor.
mrpt::opengl::COpenGLScene::Ptr & get3DSceneAndLock()
Gets a reference to the smart shared pointer that holds the internal scene (carefuly read introductio...
void setCameraAzimuthDeg(float deg)
Changes the camera parameters programmatically.
virtual bool getLastMousePosition(int &x, int &y) const override
Gets the last x,y pixel coordinates of the mouse.
virtual ~CDisplayWindow3D()
Destructor.
std::string m_grab_imgs_prefix
bool isCameraProjective() const
Sets the camera as projective, or orthogonal.
void captureImagesStart()
Enables the grabbing of CImage objects from screenshots of the window.
void internalSetMinMaxRange()
void setMaxRange(double new_max)
Changes the camera max clip range (z) (used for gluPerspective.
void resize(unsigned int width, unsigned int height) override
Resizes the window, stretching the image to fit into the display area.
float getFOV() const
Return the camera field of view (in degrees) (used for gluPerspective)
void internal_emitGrabImageEvent(const std::string &fil)
called by CMyGLCanvas_DisplayWindow3D::OnPostRenderSwapBuffers
void createOpenGLContext()
Throws an exception on initialization error.
mrpt::opengl::COpenGLViewport::Ptr getDefaultViewport()
A short cut for getting the "main" viewport of the scene object, it is equivalent to:
double getRenderingFPS() const
Get the average Frames Per Second (FPS) value from the last 250 rendering events.
mrpt::void_ptr_noncopy m_DisplayDeviceContext
mrpt::opengl::COpenGLScene::Ptr m_3Dscene
Internal OpenGL object (see general discussion in about usage of this object)
mrpt::system::TTimeStamp m_lastFullScreen
std::string grabImageGetNextFile()
Increments by one the image counter and return the next image file name (Users normally don't want to...
float getCameraAzimuthDeg() const
Get camera parameters programmatically.
mrpt::img::CImage::Ptr m_last_captured_img
void repaint()
Repaints the window.
void setMinRange(double new_min)
Changes the camera min clip range (z) (used for gluPerspective).
float getCameraZoom() const
Get camera parameters programmatically.
void clearTextMessages()
Clear all text messages created with addTextMessage().
std::mutex m_last_captured_img_cs
void setImageView(const mrpt::img::CImage &img)
Set the "main" viewport into "image view"-mode, where an image is efficiently drawn (fitting the view...
void addTextMessage(const double x, const double y, const std::string &text, const mrpt::img::TColorf &color=mrpt::img::TColorf(1.0, 1.0, 1.0), const size_t unique_index=0, const mrpt::opengl::TOpenGLFont font=mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24)
Add 2D text messages overlapped to the 3D rendered scene.
mrpt::void_ptr_noncopy m_GLRenderingContext
void grabImagesStop()
Stops image grabbing started by grabImagesStart.
bool getLastWindowImage(mrpt::img::CImage &out_img) const
Retrieve the last captured image from the window.
void setCameraElevationDeg(float deg)
Changes the camera parameters programmatically.
void captureImagesStop()
Stop image grabbing.
std::shared_ptr< CDisplayWindow3D > Ptr
void useCameraFromScene(bool useIt=true)
If set to true (default = false), the mouse-based scene navigation will be disabled and the camera po...
Auxiliary class for safely claiming the 3DScene of a mrpt::gui::CDisplayWindow3D.
CDisplayWindow3DLocker(CDisplayWindow3D &win, mrpt::opengl::COpenGLScene::Ptr &out_scene_ptr)
Acquires the lock of the 3D scene of the referenced window, and returns a copy of the smart pointer t...
~CDisplayWindow3DLocker()
An event sent by a CDisplayWindow3D window when an image is saved after enabling this feature with CD...
CDisplayWindow3D * source_object
const std::string & img_file
The absolute path of the file that has been just saved.
mrptEvent3DWindowGrabImageFile(CDisplayWindow3D *obj, const std::string &_img_file)
virtual void do_nothing() override
Just to allow this class to be polymorphic.
A class for storing images as grayscale or RGB bitmaps.
std::shared_ptr< CImage > Ptr
std::shared_ptr< COpenGLScene > Ptr
std::shared_ptr< COpenGLViewport > Ptr
The basic event type for the observer-observable pattern in MRPT.
GLsizei GLsizei GLuint * obj
GLenum GLsizei GLsizei height
GLsizei const GLchar ** string
TOpenGLFont
Existing fonts for 2D texts in mrpt::opengl methods.
@ MRPT_GLUT_BITMAP_TIMES_ROMAN_24
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
Classes for creating GUI windows for 2D and 3D visualization.
TOpenGLFontStyle
Different style for vectorized font rendering.
@ NICE
renders glyphs filled with antialiased outlines
A RGB color - floats in the range [0,1].
3D line, represented by a base point and a director vector.
mrpt::gui::CDisplayWindow3D::Ptr win