00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
00034
00035 #include "G4OpenGLStoredQtSceneHandler.hh"
00036
00037 #include "G4PhysicalVolumeModel.hh"
00038 #include "G4LogicalVolumeModel.hh"
00039 #include "G4Text.hh"
00040 #include "G4VPhysicalVolume.hh"
00041 #include "G4OpenGLQtViewer.hh"
00042 #include <typeinfo>
00043 #include <sstream>
00044
00045 G4OpenGLStoredQtSceneHandler::G4OpenGLStoredQtSceneHandler
00046 (G4VGraphicsSystem& system,
00047 const G4String& name):
00048 G4OpenGLStoredSceneHandler (system, name)
00049 {}
00050
00051 G4OpenGLStoredQtSceneHandler::~G4OpenGLStoredQtSceneHandler ()
00052 {}
00053
00054 G4bool G4OpenGLStoredQtSceneHandler::ExtraPOProcessing
00055 (const G4Visible& visible, size_t currentPOListIndex)
00056 {
00057 G4bool usesGLCommands = true;
00058
00059 try {
00060 const G4Text& g4Text = dynamic_cast<const G4Text&>(visible);
00061 G4TextPlus* pG4TextPlus = new G4TextPlus(g4Text);
00062 pG4TextPlus->fProcessing2D = fProcessing2D;
00063 fPOList[currentPOListIndex].fpG4TextPlus = pG4TextPlus;
00064 usesGLCommands = false;
00065 }
00066 catch (std::bad_cast) {}
00067
00068 G4PhysicalVolumeModel* pPVModel =
00069 dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
00070 G4LogicalVolumeModel* pLVModel =
00071 dynamic_cast<G4LogicalVolumeModel*>(pPVModel);
00072 if (pPVModel && !pLVModel) {
00073
00074
00075
00076
00077
00078
00079
00080 typedef G4PhysicalVolumeModel::G4PhysicalVolumeNodeID PVNodeID;
00081 typedef std::vector<PVNodeID> PVPath;
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 G4OpenGLQtViewer* pGLViewer = dynamic_cast<G4OpenGLQtViewer*>(fpViewer);
00099 if ( pGLViewer ) {
00100 pGLViewer->addPVSceneTreeElement(fpModel->GetCurrentDescription(),pPVModel,currentPOListIndex);
00101 }
00102
00103 } else {
00104
00105 if (fpModel) {
00106
00107
00108
00109 G4OpenGLQtViewer* pGLViewer = dynamic_cast<G4OpenGLQtViewer*>(fpViewer);
00110 if ( pGLViewer ) {
00111 pGLViewer->addNonPVSceneTreeElement(fpModel->GetType(),currentPOListIndex,fpModel->GetCurrentDescription().data(),visible);
00112 }
00113 }
00114 }
00115
00116 return usesGLCommands;
00117 }
00118
00119 G4bool G4OpenGLStoredQtSceneHandler::ExtraTOProcessing
00120 (const G4Visible& visible, size_t currentTOListIndex)
00121 {
00122
00123 G4bool usesGLCommands = true;
00124
00125 try {
00126 const G4Text& g4Text = dynamic_cast<const G4Text&>(visible);
00127 G4TextPlus* pG4TextPlus = new G4TextPlus(g4Text);
00128 pG4TextPlus->fProcessing2D = fProcessing2D;
00129 fTOList[currentTOListIndex].fpG4TextPlus = pG4TextPlus;
00130 usesGLCommands = false;
00131 }
00132 catch (std::bad_cast) {}
00133
00134 return usesGLCommands;
00135 }
00136
00137 void G4OpenGLStoredQtSceneHandler::ClearStore () {
00138
00139
00140
00141 G4OpenGLStoredSceneHandler::ClearStore ();
00142
00143 G4OpenGLQtViewer* pGLQtViewer = dynamic_cast<G4OpenGLQtViewer*>(fpViewer);
00144 if ( pGLQtViewer ) {
00145 #ifdef G4DEBUG_VIS_OGL
00146 printf("G4OpenGLStoredQtSceneHandler::ClearStore_________________________________\n" );
00147 #endif
00148 pGLQtViewer->clearTreeWidget();
00149 }
00150 }
00151
00152 void G4OpenGLStoredQtSceneHandler::ClearTransientStore () {
00153
00154
00155
00156 G4OpenGLStoredSceneHandler::ClearTransientStore ();
00157
00158
00159 G4OpenGLQtViewer* pGLQtViewer = dynamic_cast<G4OpenGLQtViewer*>(fpViewer);
00160 if ( pGLQtViewer ) {
00161 #ifdef G4DEBUG_VIS_OGL
00162 printf("G4OpenGLStoredQtSceneHandler::ClearTransient_________________________________\n" );
00163 #endif
00164
00165 }
00166
00167
00168 if (fpViewer) {
00169 fpViewer -> SetView ();
00170 fpViewer -> ClearView ();
00171 fpViewer -> DrawView ();
00172 }
00173 }
00174
00175 void G4OpenGLStoredQtSceneHandler::SetScene(G4Scene* pScene){
00176
00177 if (pScene != fpScene) {
00178 G4OpenGLQtViewer* pGLQtViewer = dynamic_cast<G4OpenGLQtViewer*>(fpViewer);
00179 if ( pGLQtViewer ) {
00180 pGLQtViewer->clearTreeWidget();
00181 }
00182 }
00183 G4VSceneHandler::SetScene(pScene);
00184 }
00185
00186 #endif