28#ifdef G4VIS_BUILD_OIQT_DRIVER
35#include <Inventor/nodes/SoSelection.h>
37#include <Inventor/Qt/SoQt.h>
39#include <Inventor/Qt/viewers/SoQtViewer.h>
40#include <Inventor/Qt/viewers/SoQtFullViewer.h>
41#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
58#include "moc_G4OpenInventorQtViewer.cpp"
61G4OpenInventorQtViewer::G4OpenInventorQtViewer(
62 G4OpenInventorSceneHandler& sceneHandler,
const G4String& name)
63 : G4OpenInventorViewer(sceneHandler,
name), fViewer(0)
71void G4OpenInventorQtViewer::Initialise()
74 QWidget* parent = SoQt::getTopLevelWidget();
81 fViewer =
new G4OpenInventorQtExaminerViewer(parent,
"Geant4",
TRUE);
87 int width = fVP.GetWindowSizeHintX();
88 int height = fVP.GetWindowSizeHintY();
100 fViewer->setSize(SbVec2s(width, height));
105 QMenu* filemenu = fViewer->getFileMenu();
106 QMenu* etcmenu = fViewer->getEtcMenu();
107 QFont* font = fViewer->getFont();
111 FileWritePS =
new QAction(
"Write PostScript (gl2ps)",
this);
112 FileWritePS->setFont(*font);
113 connect(FileWritePS, SIGNAL(triggered()),
this,
114 SLOT(FileWritePSCB()));
115 filemenu->addAction(FileWritePS);
117 FileWritePDF =
new QAction(
"Write PDF (gl2ps)",
this);
118 FileWritePDF->setFont(*font);
119 connect(FileWritePDF, SIGNAL(triggered()),
this,
120 SLOT(FileWritePDFCB()));
121 filemenu->addAction(FileWritePDF);
123 FileWriteIV =
new QAction(
"Write IV",
this);
124 FileWriteIV->setFont(*font);
125 connect(FileWriteIV, SIGNAL(triggered()),
this,
126 SLOT(FileWriteIVCB()));
127 filemenu->addAction(FileWriteIV);
129 FileEscape =
new QAction(
"Escape",
this);
130 FileEscape->setFont(*font);
131 connect(FileEscape, SIGNAL(triggered()),
this,
132 SLOT(FileEscapeCB()));
133 filemenu->addAction(FileEscape);
137 if (
static_cast<G4SoQt*
>(fInteractorManager)->IsExternalApp())
138 fViewer->setExternalQtApp();
146 EtcEraseDetector =
new QAction(
"Erase detector",
this);
147 EtcEraseDetector->setFont(*font);
148 connect(EtcEraseDetector, SIGNAL(triggered()),
this,
149 SLOT(EtcEraseDetectorCB()));
150 etcmenu->addAction(EtcEraseDetector);
152 EtcEraseEvent =
new QAction(
"Erase event",
this);
153 EtcEraseEvent->setFont(*font);
154 connect(EtcEraseEvent, SIGNAL(triggered()),
this,
155 SLOT(EtcEraseEventCB()));
156 etcmenu->addAction(EtcEraseEvent);
158 EtcSetSolid =
new QAction(
"Set solid",
this);
159 EtcSetSolid->setFont(*font);
160 connect(EtcSetSolid, SIGNAL(triggered()),
this, SLOT(EtcSetSolidCB()));
161 etcmenu->addAction(EtcSetSolid);
163 EtcSetReducedWireframe =
new QAction(
"Set (G4) reduced wireframe",
this);
164 EtcSetReducedWireframe->setFont(*font);
165 connect(EtcSetReducedWireframe, SIGNAL(triggered()),
this,
166 SLOT(EtcSetReducedWireframeCB()));
167 etcmenu->addAction(EtcSetReducedWireframe);
169 EtcSetFullWireframe =
new QAction(
"Set full wireframe",
this);
170 EtcSetFullWireframe->setFont(*font);
171 connect(EtcSetFullWireframe, SIGNAL(triggered()),
this,
172 SLOT(EtcSetFullWireframeCB()));
173 etcmenu->addAction(EtcSetFullWireframe);
175 EtcVisibMInvisibD =
new QAction(
"Visible mothers + invisible daughters",
177 EtcVisibMInvisibD->setFont(*font);
178 connect(EtcVisibMInvisibD, SIGNAL(triggered()),
this,
179 SLOT(EtcVisibMInvisibDCB()));
180 etcmenu->addAction(EtcVisibMInvisibD);
182 EtcVisibMVisibD =
new QAction(
"Visible mothers + visible daughters",
this);
183 EtcVisibMVisibD->setFont(*font);
184 connect(EtcVisibMVisibD, SIGNAL(triggered()),
this,
185 SLOT(EtcVisibMVisibDCB()));
186 etcmenu->addAction(EtcVisibMVisibD);
188 EtcUpdateScene =
new QAction(
"Update scene",
this);
189 EtcUpdateScene->setFont(*font);
190 connect(EtcUpdateScene, SIGNAL(triggered()),
this,
191 SLOT(EtcUpdateSceneCB()));
192 etcmenu->addAction(EtcUpdateScene);
194 EtcSceneGraphStats =
new QAction(
"Scene graph stats",
this);
195 EtcSceneGraphStats->setFont(*font);
196 connect(EtcSceneGraphStats, SIGNAL(triggered()),
this,
197 SLOT(EtcSceneGraphStatsCB()));
198 etcmenu->addAction(EtcSceneGraphStats);
202 const SbViewportRegion& vpRegion = fViewer->getViewportRegion();
204 fViewer->setGLRenderAction(fGL2PSAction);
214 fViewer->setSceneGraph(fSoSelection);
215 fViewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_ADD);
217 fViewer->saveHomePosition();
218 fViewer->setTitle(fName);
224 QWidget* mainWin = SoQt::getTopLevelWidget();
231 fInteractorManager->FlushAndWaitExecution();
234 fInteractorManager->SetCreatedInteractor(fViewer->getWidget());
238G4OpenInventorQtViewer::~G4OpenInventorQtViewer()
242 fViewer->setSceneGraph(0);
250void G4OpenInventorQtViewer::FinishView()
254 fViewer->saveHomePosition();
257void G4OpenInventorQtViewer::SetView()
259 G4OpenInventorViewer::SetView();
262 G4Colour b = fVP.GetBackgroundColour();
263 fViewer->setBackgroundColor
268void G4OpenInventorQtViewer::ViewerRender()
274SoCamera* G4OpenInventorQtViewer::GetCamera () {
275 if(!fViewer)
return 0;
276 return fViewer->getCamera();
282void G4OpenInventorQtViewer::FileWritePSCB()
286 SbBool superimpState =
287 fViewer->getSuperimpositionEnabled(fViewer->superimposition);
288 fViewer->setSuperimpositionEnabled(fViewer->superimposition,
FALSE);
291 fViewer->setSuperimpositionEnabled(fViewer->superimposition,
TRUE);
294void G4OpenInventorQtViewer::FileWritePDFCB()
298 SbBool superimpState =
299 fViewer->getSuperimpositionEnabled(fViewer->superimposition);
300 fViewer->setSuperimpositionEnabled(fViewer->superimposition,
FALSE);
303 fViewer->setSuperimpositionEnabled(fViewer->superimposition,
TRUE);
306void G4OpenInventorQtViewer::FileWriteIVCB()
312void G4OpenInventorQtViewer::FileEscapeCB()
315 static_cast<G4SoQt*
>(fInteractorManager)->ExitSecondaryLoop();
322G4OpenInventorQtViewer::EtcEraseDetectorCB()
329G4OpenInventorQtViewer::EtcEraseEventCB()
335void G4OpenInventorQtViewer::EtcSetSolidCB()
341void G4OpenInventorQtViewer::EtcSetReducedWireframeCB()
344 SetReducedWireFrame(
true);
347void G4OpenInventorQtViewer::EtcSetFullWireframeCB()
350 SetReducedWireFrame(
false);
353void G4OpenInventorQtViewer::EtcVisibMInvisibDCB()
360void G4OpenInventorQtViewer::EtcVisibMVisibDCB()
367void G4OpenInventorQtViewer::EtcUpdateSceneCB()
373void G4OpenInventorQtViewer::EtcSceneGraphStatsCB()
376 SceneGraphStatistics();
G4GLOB_DLL std::ostream G4cout
G4double GetGreen() const
static Verbosity GetVerbosity()
const char * name(G4int ptype)