feat: add Preferences dialog for managing theme, rendering, and unit settings

This commit is contained in:
AndreaRigoni
2026-04-10 18:12:05 +00:00
parent e8c10daf6d
commit f8f92ebf3d
8 changed files with 213 additions and 35 deletions

View File

@@ -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()
{

View File

@@ -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