#ifndef ULIB_VTK_QVIEWPORT_H #define ULIB_VTK_QVIEWPORT_H #include #include #include #include #include #include #include #include #include #include "uLibVtkInterface.h" #include "vtkViewport.h" class vtkProp; class vtk3DWidget; class vtkRenderWindowInteractor; class vtkCameraOrientationWidget; namespace uLib { namespace Vtk { /** * QViewport is a self-contained Qt widget that embeds a VTK renderer * directly into the Qt application (no separate VTK window). * Prop3Ds and actors are added to the embedded renderer. */ class QViewport : public QWidget, public Viewport { Q_OBJECT signals: void prop3dSelected(uLib::Vtk::Prop3D* p); public: explicit QViewport(QWidget* parent = nullptr); virtual ~QViewport(); // Render scene virtual void Render() override; void SetThrottledRendering(bool enabled) { m_throttledRendering = enabled; } bool GetThrottledRendering() const { return m_throttledRendering; } // Direct access to VTK internals virtual vtkRenderWindow* GetRenderWindow() override; virtual vtkRenderWindowInteractor* GetInteractor() override; QVTKOpenGLNativeWidget* GetWidget() { return m_VtkWidget; } virtual void OnSelectionChanged(Prop3D* p) override; protected: virtual void resizeEvent(QResizeEvent* event) override; private slots: void onGridButtonClicked(); void onProjButtonClicked(); void doRender(); private: void SetupPipeline(); QVTKOpenGLNativeWidget* m_VtkWidget; QPushButton* m_GridButton; QPushButton* m_ProjButton; QTimer* m_renderTimer; bool m_renderPending = false; bool m_throttledRendering = true; }; } // namespace Vtk } // namespace uLib #endif // ULIB_VTK_QVIEWPORT_H