feat: add Preferences dialog for managing theme, rendering, and unit settings
This commit is contained in:
@@ -20,17 +20,25 @@ QViewport::QViewport(QWidget* parent)
|
||||
, m_VtkWidget(nullptr)
|
||||
, m_GridButton(nullptr)
|
||||
, m_ProjButton(nullptr)
|
||||
, m_renderTimer(nullptr)
|
||||
, m_renderPending(false)
|
||||
{
|
||||
// Build the layout – zero margins so VTK fills the entire widget
|
||||
auto* layout = new QVBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->setSpacing(0);
|
||||
|
||||
|
||||
m_VtkWidget = new QVTKOpenGLNativeWidget(this);
|
||||
layout->addWidget(m_VtkWidget);
|
||||
|
||||
|
||||
// Initialize render timer
|
||||
m_renderTimer = new QTimer(this);
|
||||
m_renderTimer->setSingleShot(true);
|
||||
connect(m_renderTimer, &QTimer::timeout, this, &QViewport::doRender);
|
||||
|
||||
// Grid Toggle Button
|
||||
m_GridButton = new QPushButton(m_VtkWidget);
|
||||
|
||||
m_GridButton->setText("#");
|
||||
m_GridButton->setFixedSize(40, 40);
|
||||
m_GridButton->setToolTip("Toggle Grid");
|
||||
@@ -112,9 +120,21 @@ void QViewport::SetupPipeline()
|
||||
|
||||
void QViewport::Render()
|
||||
{
|
||||
if (m_VtkWidget && m_VtkWidget->renderWindow())
|
||||
m_VtkWidget->renderWindow()->Render();
|
||||
if (!m_throttledRendering) {
|
||||
doRender();
|
||||
return;
|
||||
}
|
||||
if (m_renderPending) return;
|
||||
m_renderPending = true;
|
||||
m_renderTimer->start(16);
|
||||
}
|
||||
|
||||
void QViewport::doRender()
|
||||
{
|
||||
m_renderPending = false;
|
||||
if (m_VtkWidget && m_VtkWidget->renderWindow())
|
||||
m_VtkWidget->renderWindow()->Render();
|
||||
}
|
||||
|
||||
vtkRenderWindow* QViewport::GetRenderWindow()
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <QWidget>
|
||||
#include <QVTKOpenGLNativeWidget.h>
|
||||
#include <QPushButton>
|
||||
#include <QTimer>
|
||||
|
||||
#include <vtkCornerAnnotation.h>
|
||||
#include <vtkOrientationMarkerWidget.h>
|
||||
@@ -39,27 +40,35 @@ public:
|
||||
// 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;
|
||||
};
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void onGridButtonClicked();
|
||||
void onProjButtonClicked();
|
||||
|
||||
private:
|
||||
void SetupPipeline();
|
||||
|
||||
QVTKOpenGLNativeWidget* m_VtkWidget;
|
||||
QPushButton* m_GridButton;
|
||||
QPushButton* m_ProjButton;
|
||||
};
|
||||
|
||||
} // namespace Vtk
|
||||
} // namespace uLib
|
||||
|
||||
Reference in New Issue
Block a user