add Qt viewport
This commit is contained in:
@@ -1,5 +1,15 @@
|
||||
|
||||
add_executable(gcompose src/main.cpp)
|
||||
add_executable(gcompose
|
||||
src/main.cpp
|
||||
src/MainWindow.h
|
||||
src/MainWindow.cpp
|
||||
)
|
||||
|
||||
set_target_properties(gcompose PROPERTIES
|
||||
AUTOMOC ON
|
||||
AUTOUIC ON
|
||||
AUTORCC ON
|
||||
)
|
||||
|
||||
target_include_directories(gcompose PRIVATE
|
||||
${SRC_DIR}
|
||||
@@ -8,13 +18,21 @@ target_include_directories(gcompose PRIVATE
|
||||
${VTK_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
# Filter Geant4 libraries to remove Qt-dependent ones
|
||||
set(Geant4_LIBS_FILTERED ${Geant4_LIBRARIES})
|
||||
if(Geant4_LIBS_FILTERED)
|
||||
list(REMOVE_ITEM Geant4_LIBS_FILTERED Geant4::G4interfaces Geant4::G4OpenGL Geant4::G4visQt3D)
|
||||
endif()
|
||||
|
||||
target_link_libraries(gcompose
|
||||
mutomCore
|
||||
mutomMath
|
||||
mutomGeant
|
||||
mutomVtk
|
||||
${Geant4_LIBRARIES}
|
||||
${Geant4_LIBS_FILTERED}
|
||||
${VTK_LIBRARIES}
|
||||
Qt6::Widgets
|
||||
VTK::GUISupportQt
|
||||
)
|
||||
|
||||
install(TARGETS gcompose RUNTIME DESTINATION bin)
|
||||
|
||||
15
app/gcompose/src/MainWindow.cpp
Normal file
15
app/gcompose/src/MainWindow.cpp
Normal 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() {
|
||||
}
|
||||
25
app/gcompose/src/MainWindow.h
Normal file
25
app/gcompose/src/MainWindow.h
Normal 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
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user