You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
6.9 KiB
C
208 lines
6.9 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: QVTKOpenGLStereoWidget.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
#ifndef QVTKOpenGLStereoWidget_h
|
||
|
#define QVTKOpenGLStereoWidget_h
|
||
|
|
||
|
#include "vtkGUISupportQtModule.h" // For export macro
|
||
|
#include <QWidget>
|
||
|
|
||
|
#include "QVTKOpenGLWindow.h" // needed for ivar
|
||
|
#include <QPointer> // needed for ivar
|
||
|
|
||
|
// Forward Qt class declarations
|
||
|
class QSurfaceFormat;
|
||
|
class QOpenGLContext;
|
||
|
|
||
|
// class QVTKInteractor;
|
||
|
class QVTKInteractorAdapter;
|
||
|
class QVTKOpenGLWindow;
|
||
|
class vtkGenericOpenGLRenderWindow;
|
||
|
class vtkRenderWindow;
|
||
|
class vtkRenderWindowInteractor;
|
||
|
|
||
|
/**
|
||
|
* @class QVTKOpenGLStereoWidget
|
||
|
* @brief QWidget for displaying a vtkRenderWindow in a Qt Application.
|
||
|
*
|
||
|
* QVTKOpenGLStereoWidget simplifies using a QVTKOpenGLWindow as a widget in Qt
|
||
|
* application so it can be embedded in a layout rather than being a top-level
|
||
|
* window. QVTKOpenGLWindow has all the limitations posed by Qt with
|
||
|
* `QWidget::createWindowContainer` hence developers are advised to refer to Qt
|
||
|
* docs for more details.
|
||
|
*
|
||
|
* In general QVTKOpenGLNativeWidget may be a better choice, however
|
||
|
* QVTKOpenGLWindow-based QVTKOpenGLStereoWidget may be better choice for applications
|
||
|
* requiring quad-buffer stereo.
|
||
|
*
|
||
|
* Due to Qt limitations, QVTKOpenGLStereoWidget does not support being a
|
||
|
* native widget. But native widget are sometimes mandatory, for example within
|
||
|
* QScrollArea and QMDIArea, so the QVTKOpenGLNativeWidget should be
|
||
|
* used when in needs of VTK rendering in the context of Qt native widget.
|
||
|
*
|
||
|
* If a QVTKOpenGLStereoWidget is used in a QScrollArea or in a QMDIArea, it
|
||
|
* will force it to be native and this is *NOT* supported.
|
||
|
*
|
||
|
* Unlike QVTKOpenGLNativeWidget, QVTKOpenGLStereoWidget does not require that the
|
||
|
* default surface format for the application be changed. One can simply specify
|
||
|
* the needed QSurfaceFormat for the specific QVTKOpenGLStereoWidget instance by
|
||
|
* calling `QVTKOpenGLStereoWidget::setFormat` before the widget is initialized.
|
||
|
*
|
||
|
* @sa QVTKOpenGLWindow QVTKOpenGLNativeWidget QVTKRenderWidget
|
||
|
*/
|
||
|
class VTKGUISUPPORTQT_EXPORT QVTKOpenGLStereoWidget : public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
typedef QWidget Superclass;
|
||
|
|
||
|
public:
|
||
|
QVTKOpenGLStereoWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
||
|
QVTKOpenGLStereoWidget(
|
||
|
QOpenGLContext* shareContext, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
||
|
QVTKOpenGLStereoWidget(vtkGenericOpenGLRenderWindow* w, QWidget* parent = nullptr,
|
||
|
Qt::WindowFlags f = Qt::WindowFlags());
|
||
|
QVTKOpenGLStereoWidget(vtkGenericOpenGLRenderWindow* w, QOpenGLContext* shareContext,
|
||
|
QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
||
|
~QVTKOpenGLStereoWidget() override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* @copydoc QVTKOpenGLWindow::setRenderWindow()
|
||
|
*/
|
||
|
void setRenderWindow(vtkGenericOpenGLRenderWindow* win)
|
||
|
{
|
||
|
this->VTKOpenGLWindow->setRenderWindow(win);
|
||
|
}
|
||
|
void setRenderWindow(vtkRenderWindow* win) { this->VTKOpenGLWindow->setRenderWindow(win); }
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* @copydoc QVTKOpenGLWindow::renderWindow()
|
||
|
*/
|
||
|
vtkRenderWindow* renderWindow() const { return this->VTKOpenGLWindow->renderWindow(); }
|
||
|
|
||
|
/**
|
||
|
* @copydoc QVTKOpenGLWindow::interactor()
|
||
|
*/
|
||
|
QVTKInteractor* interactor() const { return this->VTKOpenGLWindow->interactor(); }
|
||
|
|
||
|
/**
|
||
|
* @copydoc QVTKRenderWindowAdapter::defaultFormat(bool)
|
||
|
*/
|
||
|
static QSurfaceFormat defaultFormat(bool stereo_capable = false)
|
||
|
{
|
||
|
return QVTKOpenGLWindow::defaultFormat(stereo_capable);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @copydoc QVTKOpenGLWindow::setEnableHiDPI()
|
||
|
*/
|
||
|
void setEnableHiDPI(bool enable) { this->VTKOpenGLWindow->setEnableHiDPI(enable); }
|
||
|
bool enableHiDPI() const { return this->VTKOpenGLWindow->enableHiDPI(); }
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get unscaled DPI value. Defaults to 72, which is also the default value
|
||
|
* in vtkWindow.
|
||
|
*/
|
||
|
void setUnscaledDPI(int dpi) { this->VTKOpenGLWindow->setUnscaledDPI(dpi); }
|
||
|
int unscaledDPI() const { return this->VTKOpenGLWindow->unscaledDPI(); }
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* @copydoc QVTKOpenGLWindow::setDefaultCursor()
|
||
|
*/
|
||
|
void setDefaultCursor(const QCursor& cursor) { this->VTKOpenGLWindow->setDefaultCursor(cursor); }
|
||
|
const QCursor& defaultCursor() const { return this->VTKOpenGLWindow->defaultCursor(); }
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the internal QOpenGLWindow's is valid, i.e. if OpenGL
|
||
|
* resources, like the context, have been successfully initialized.
|
||
|
*/
|
||
|
bool isValid() { return this->VTKOpenGLWindow->isValid(); }
|
||
|
|
||
|
/**
|
||
|
* Expose internal QVTKOpenGLWindow::grabFramebuffer(). Renders and returns
|
||
|
* a 32-bit RGB image of the framebuffer.
|
||
|
*/
|
||
|
QImage grabFramebuffer();
|
||
|
|
||
|
/**
|
||
|
* Returns the embedded QVTKOpenGLWindow.
|
||
|
*/
|
||
|
QVTKOpenGLWindow* embeddedOpenGLWindow() const { return this->VTKOpenGLWindow; }
|
||
|
|
||
|
/**
|
||
|
* Sets the requested surface format.
|
||
|
*
|
||
|
* When the format is not explicitly set via this function, the format
|
||
|
* returned by QSurfaceFormat::defaultFormat() will be used. This means that
|
||
|
* when having multiple OpenGL widgets, individual calls to this function can
|
||
|
* be replaced by one single call to QSurfaceFormat::setDefaultFormat() before
|
||
|
* creating the first widget.
|
||
|
*/
|
||
|
void setFormat(const QSurfaceFormat& fmt) { this->VTKOpenGLWindow->setFormat(fmt); }
|
||
|
|
||
|
/**
|
||
|
* Returns the context and surface format used by this widget and its toplevel window.
|
||
|
*/
|
||
|
QSurfaceFormat format() const { return this->VTKOpenGLWindow->format(); }
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* @deprecated in VTK 9.0
|
||
|
*/
|
||
|
VTK_LEGACY(void SetRenderWindow(vtkGenericOpenGLRenderWindow* win));
|
||
|
VTK_LEGACY(void SetRenderWindow(vtkRenderWindow* win));
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* These methods have be deprecated to fix naming style. Since
|
||
|
* QVTKOpenGLNativeWidget is QObject subclass, we follow Qt naming conventions
|
||
|
* rather than VTK's.
|
||
|
*/
|
||
|
VTK_LEGACY(vtkRenderWindow* GetRenderWindow());
|
||
|
VTK_LEGACY(QVTKInteractor* GetInteractor());
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* @deprecated in VTK 9.0
|
||
|
* QVTKInteractorAdapter is an internal helper. Hence the API was removed.
|
||
|
*/
|
||
|
VTK_LEGACY(QVTKInteractorAdapter* GetInteractorAdapter());
|
||
|
|
||
|
/**
|
||
|
* @deprecated in VTK 9.0. Simply use `QWidget::setCursor` API to change
|
||
|
* cursor.
|
||
|
*/
|
||
|
VTK_LEGACY(void setQVTKCursor(const QCursor& cursor));
|
||
|
|
||
|
/**
|
||
|
* @deprecated in VTK 9.0. Use `setDefaultCursor` instead.
|
||
|
*/
|
||
|
VTK_LEGACY(void setDefaultQVTKCursor(const QCursor& cursor));
|
||
|
|
||
|
protected:
|
||
|
void resizeEvent(QResizeEvent* evt) override;
|
||
|
void paintEvent(QPaintEvent* evt) override;
|
||
|
|
||
|
private:
|
||
|
QPointer<QVTKOpenGLWindow> VTKOpenGLWindow;
|
||
|
};
|
||
|
|
||
|
#endif
|