add Qt viewport

This commit is contained in:
AndreaRigoni
2026-03-13 22:36:52 +00:00
parent a142c5d060
commit 6bf9eaf309
12 changed files with 344 additions and 39 deletions

View File

@@ -0,0 +1,15 @@
#include "MainWindow.h"
#include <Vtk/vtkQViewport.h>
using namespace uLib;
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) {
m_viewport = new Vtk::QViewport(this);
setCentralWidget(m_viewport);
setWindowTitle("gcompose - Qt VTK Interface");
resize(1200, 800);
}
MainWindow::~MainWindow() {
}

View File

@@ -0,0 +1,25 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QVTKOpenGLNativeWidget.h>
namespace uLib {
namespace Vtk {
class QViewport;
}
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
virtual ~MainWindow();
uLib::Vtk::QViewport* getViewport() { return m_viewport; }
private:
uLib::Vtk::QViewport* m_viewport;
};
#endif

View File

@@ -1,11 +1,13 @@
#include <QApplication>
#include "MainWindow.h"
#include "Math/ContainerBox.h"
#include <HEP/Geant/Scene.h>
#include "HEP/Detectors/DetectorChamber.h"
#include "Vtk/HEP/Detectors/vtkDetectorChamber.h"
#include <Vtk/uLibVtkViewer.h>
#include <Vtk/vtkContainerBox.h>
#include <Vtk/vtkQViewport.h>
#include <vtkSmartPointer.h>
#include <vtkCubeSource.h>
@@ -14,12 +16,15 @@
#include <vtkRenderer.h>
#include "Math/Units.h"
#include <iostream>
using namespace uLib;
using namespace uLib::literals;
int main(int argc, char** argv) {
std::cout << "Starting gcompose application..." << std::endl;
QApplication app(argc, argv);
std::cout << "Starting gcompose Qt application..." << std::endl;
ContainerBox world_box(Vector3f(1, 1, 1));
world_box.Scale(Vector3f(20_mm, 20_mm, 20_mm));
@@ -40,29 +45,23 @@ int main(int argc, char** argv) {
scene.ConstructWorldBox(&world_box, "G4_AIR");
scene.Initialize();
// 2. Initialize VTK Viewer
Vtk::Viewer viewer;
// 2. Initialize MainWindow (contains embedded VTK QViewport)
MainWindow window;
Vtk::QViewport* viewport = window.getViewport();
Vtk::vtkDetectorChamber vtk_d1(&d1);
viewer.AddPuppet(vtk_d1);
Vtk::vtkDetectorChamber vtk_d2(&d2);
viewer.AddPuppet(vtk_d2);
Vtk::vtkContainerBox vtk_box(&world_box);
viewer.AddPuppet(vtk_box);
viewport->AddPuppet(vtk_d1);
viewer.GetRenderer()->Render();
Vtk::vtkDetectorChamber vtk_d2(&d2);
viewport->AddPuppet(vtk_d2);
Vtk::vtkContainerBox vtk_box(&world_box);
viewport->AddPuppet(vtk_box);
viewport->ZoomAuto();
std::cout << "Geant4 and VTK scenes are ready." << std::endl;
std::cout << "Starting VTK Interactor..." << std::endl;
// 3. Start VTK interactor (blocks until window is closed)
viewer.Start();
// 4. Clean up
std::cout << "Shutting down..." << std::endl;
return 0;
window.show();
return app.exec();
}