35 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
37 #ifndef G4OPENGLQTVIEWER_HH
38 #define G4OPENGLQTVIEWER_HH
49 class G4OpenGLSceneHandler;
57 class QContextMenuEvent;
70 class QTreeWidgetItem;
73 class G4OpenGLSceneHandler;
74 class G4OpenGLQtMovieDialog;
79 class QTableWidgetItem;
83 class G4OpenGLQtViewer:
public QObject,
virtual public G4OpenGLViewer {
88 typedef std::vector<PVNodeID>
PVPath;
91 G4OpenGLQtViewer (G4OpenGLSceneHandler& scene);
92 virtual ~G4OpenGLQtViewer ();
93 #ifdef G4MULTITHREADED
94 void SwitchToVisSubThread();
95 void SwitchToMasterThread();
99 G4OpenGLQtViewer (
const G4OpenGLQtViewer&);
100 G4OpenGLQtViewer& operator= (
const G4OpenGLQtViewer&);
102 virtual void updateQWidget()=0;
103 void updateSceneTreeComponentTreeWidgetInfos();
104 QString setEncoderPath(QString path);
105 QString getEncoderPath();
106 QString setTempFolderPath(QString path);
107 QString getTempFolderPath();
108 QString setSaveFileName(QString path);
109 QString getSaveFileName();
123 void setBadEncoder();
124 bool isReadyToEncode();
125 void resetRecording();
129 bool generateMpegEncoderParameters();
130 void displayRecordingStatus();
131 void DrawText(
const G4Text&);
133 void addPVSceneTreeElement(
const G4String& model,
135 int currentPVPOIndex);
136 void addNonPVSceneTreeElement(
const G4String& model,
137 int currentPVPOIndex,
138 const std::string& modelDescription,
140 bool isTouchableVisible(
int POindex);
141 void clearTreeWidget();
142 bool exportImage(std::string
name=
"",
int width=-1,
int height=-1);
145 void G4MousePressEvent(QMouseEvent *event);
146 void G4wheelEvent (QWheelEvent * event);
147 void G4keyPressEvent (QKeyEvent * event);
148 void G4keyReleaseEvent (QKeyEvent * event);
149 void G4MouseDoubleClickEvent();
150 void G4MouseReleaseEvent(QMouseEvent *evnt);
151 void G4MouseMoveEvent(QMouseEvent *event);
154 void CreateGLQtContext ();
155 virtual void CreateMainWindow (QGLWidget*,
const QString&);
156 void G4manageContextMenuEvent(QContextMenuEvent *e);
157 void rotateQtScene(
float,
float);
158 void rotateQtSceneToggle(
float,
float);
159 void moveScene(
float,
float,
float,
bool);
161 void updateKeyModifierState(
const Qt::KeyboardModifiers&);
162 void displaySceneTreeComponent();
163 G4Colour getColorForPoIndex(
int poIndex);
168 const std::vector<G4ModelingParameters::VisAttributesModifier>*
169 GetPrivateVisAttributesModifiers()
const;
173 bool hasPendingEvents();
174 void savePPMToTemp();
175 int fRecordFrameNumber;
179 bool fQGLWidgetInitialiseCompleted;
180 bool fPaintEventLock;
183 enum RECORDING_STEP {WAIT,
START,PAUSE,CONTINUE,STOP,READY_TO_ENCODE,ENCODING,FAILED,SUCCESS,BAD_ENCODER,BAD_OUTPUT,BAD_TMP,SAVE};
185 void createPopupMenu();
186 void createRadioAction(QAction *,QAction *,
const std::string&,
unsigned int a=1);
187 void rescaleImage(
int,
int);
188 bool printPDF(
const std::string,
int,QImage);
189 void showMovieParametersDialog();
190 void initMovieParameters();
191 QString createTempFolder();
192 QString removeTempFolder();
193 void setRecordingStatus(RECORDING_STEP);
194 void setRecordingInfos(
const QString&);
195 QString getProcessErrorMsg();
196 QWidget* getParentWidget();
197 bool parseAndInsertInSceneTree(QTreeWidgetItem *,
199 unsigned int fullPathIndex,
200 const QString& parentRoot,
201 unsigned int currentIndex,
202 int currentPVPOIndex);
203 void setCheckComponent(QTreeWidgetItem* item,
bool check);
204 void initSceneTreeComponent();
205 void initViewerPropertiesComponent();
206 void initPickingComponent();
207 bool parseAndCheckVisibility(QTreeWidgetItem * treeNode,
int POindex);
208 QTreeWidgetItem* createTreeWidgetItem(
const PVPath& fullPath,
212 const QString& logicalName,
213 Qt::CheckState state,
214 QTreeWidgetItem * treeNode,
216 QString getModelShortName(
const G4String& modelShortName);
217 void cloneSceneTree(QTreeWidgetItem* rootItem);
218 void changeDepthOnSceneTreeItem(
double lookForDepth,
double currentDepth,QTreeWidgetItem* item);
219 void updatePositivePoIndexSceneTreeWidgetQuickMap(
int POindex,QTreeWidgetItem* item);
220 void changeQColorForTreeWidgetItem(QTreeWidgetItem* item,
const QColor&);
222 bool isSameSceneTreeElement(QTreeWidgetItem* parentOldItem,QTreeWidgetItem* parentNewItem);
223 void changeOpenCloseVisibleHiddenSelectedColorSceneTreeElement(QTreeWidgetItem* subItem);
224 bool isPVVolume(QTreeWidgetItem* item);
225 QTreeWidgetItem* cloneWidgetItem(QTreeWidgetItem* item);
226 void clearSceneTreeSelection(QTreeWidgetItem*);
227 void clearTreeWidgetElements(QTreeWidgetItem* item);
230 QTreeWidgetItem* getTreeWidgetItem(
int POindex);
233 QTreeWidgetItem* getOldTreeWidgetItem(
int POindex);
236 std::string parseSceneTreeAndSaveState();
238 std::string parseSceneTreeElementAndSaveState(QTreeWidgetItem* item,
unsigned int level);
239 QString GetCommandParameterList (
const G4UIcommand *aCommand);
240 void changeColorAndTransparency(GLuint index,
G4Color color);
256 bool fHoldRotateEvent;
258 QString fEncoderPath;
259 QString fTempFolderPath;
260 QString fMovieTempFolderPath;
261 QString fSaveFileName;
262 QString fParameterFileName;
263 QAction *fMouseRotateAction;
264 QAction *fMouseMoveAction;
265 QAction *fMousePickAction;
266 QAction *fMouseZoomInAction;
267 QAction *fMouseZoomOutAction;
268 QAction *fFullScreenOn;
269 QAction *fFullScreenOff;
270 QAction *fDrawingWireframe;
271 QAction *fDrawingLineRemoval;
272 QAction *fDrawingSurfaceRemoval;
273 QAction *fDrawingLineSurfaceRemoval;
274 QAction *fProjectionOrtho;
275 QAction *fProjectionPerspective;
276 G4OpenGLQtMovieDialog* fMovieParametersDialog;
277 RECORDING_STEP fRecordingStep;
279 QTime *fLastEventTime;
281 int fNbMaxFramesPerSec;
282 float fNbMaxAnglePerSec;
283 int fLaunchSpinDelay;
284 QTabWidget* fUISceneTreeComponentsTBWidget;
287 bool fControlKeyPress;
290 bool fCheckSceneTreeComponentSignalLock;
291 QTreeWidget* fSceneTreeComponentTreeWidget;
293 QTreeWidget* fOldSceneTreeComponentTreeWidget;
294 QWidget* fSceneTreeWidget;
295 bool fPVRootNodeCreate;
296 QLineEdit* fFilterOutput;
297 QString fFileSavePath;
298 QPushButton* fSceneTreeViewerButton;
299 QPushButton* fViewerPropertiesButton;
300 QPushButton* fViewerPickingButton;
303 QString fTouchableVolumes;
304 QDialog* fShortcutsDialog;
305 QTableWidget *fSceneTreeComponentTreeWidgetInfos;
306 QWidget* fSceneTreeComponentPickingInfos;
307 QWidget* fSceneTreeViewerInfos;
308 QScrollArea* fSceneTreeComponentPickingScrollArea;
309 int fTreeWidgetInfosIgnoredCommands;
310 QPushButton * fSceneTreeButtonApply;
311 QTextEdit *fShortcutsDialogInfos;
312 QSlider* fSceneTreeDepthSlider;
313 std::map <int, PVPath > fTreeItemModels;
314 std::map <int, PVPath > fOldTreeItemModels;
317 std::map <int, QTreeWidgetItem*> fPositivePoIndexSceneTreeWidgetQuickMap;
319 std::map <int, QTreeWidgetItem*> fOldPositivePoIndexSceneTreeWidgetQuickMap;
320 std::vector <QTreeWidgetItem*> fOldNullPoIndexSceneTreeWidgetQuickVector;
322 std::map <int, QColor> fOldVisAttrColorMap;
324 unsigned int fSceneTreeDepth;
325 QTreeWidgetItem* fModelShortNameItem;
327 int fMaxPOindexInserted;
329 QSignalMapper *fSignalMapperMouse;
330 QSignalMapper *fSignalMapperSurface;
331 QSignalMapper *fSignalMapperPicking;
334 std::map <int, QTreeWidgetItem*>::const_iterator fLastSceneTreeWidgetAskForIterator;
335 std::map <int, QTreeWidgetItem*>::const_iterator fLastSceneTreeWidgetAskForIteratorEnd;
338 std::map <int, QTreeWidgetItem*>::const_iterator fOldLastSceneTreeWidgetAskForIterator;
339 std::map <int, QTreeWidgetItem*>::const_iterator fOldLastSceneTreeWidgetAskForIteratorEnd;
342 QPixmap* fTreeIconOpen;
343 QPixmap* fTreeIconClosed;
344 QPixmap* fSearchIcon;
346 int fLastExportSliderValue;
348 GLuint fLastHighlightName;
352 void startPauseVideo();
355 void updateToolbarAndMouseContextMenu();
358 void actionSaveImage();
359 void actionChangeBackgroundColor();
360 void actionChangeTextColor();
361 void actionChangeDefaultColor();
362 void actionMovieParameters();
364 void showShortcuts();
365 void toggleMouseAction(
int);
366 void toggleSurfaceAction(
int);
367 void toggleProjection(
bool);
368 void toggleTransparency(
bool);
369 void toggleAntialiasing(
bool);
370 void toggleHaloing(
bool);
371 void toggleAux(
bool);
372 void toggleHiddenMarkers(
bool);
373 void toggleFullScreen(
bool);
374 void processEncodeFinished();
375 void processLookForFinished();
376 void processEncodeStdout();
377 void sceneTreeComponentItemChanged(QTreeWidgetItem* item,
int id);
378 void toggleSceneTreeViewerInfos();
379 void toggleSceneTreeComponentTreeWidgetInfos();
380 void toggleSceneTreeComponentPickingInfos();
381 void toggleSceneTreeComponentPickingCout(
int);
382 void togglePicking();
385 void sceneTreeComponentSelected();
386 void changeDepthInSceneTree(
int);
387 void changeSearchSelection();
388 void changeColorAndTransparency(QTreeWidgetItem* item,
int val);
389 void tableWidgetViewerSetItemChanged(QTableWidgetItem *);
G4PhysicalVolumeModel::G4PhysicalVolumeNodeID PVNodeID
std::vector< PVNodeID > PVPath