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_OPENGL_DRIVER
00034
00035 #ifndef G4OPENGLVIEWER_HH
00036 #define G4OPENGLVIEWER_HH
00037
00038 #include "G4VViewer.hh"
00039 #include "G4OpenGL.hh"
00040
00041 class G4OpenGLSceneHandler;
00042 class G4OpenGL2PSAction;
00043 class G4Text;
00044
00045
00046 class G4OpenGLViewer: virtual public G4VViewer {
00047
00048 friend class G4OpenGLSceneHandler;
00049 friend class G4OpenGLImmediateSceneHandler;
00050 friend class G4OpenGLStoredSceneHandler;
00051 friend class G4OpenGLFileSceneHandler;
00052 friend class G4OpenGLViewerMessenger;
00053
00054 public:
00055 void ClearView ();
00057 void printEPS();
00058
00059 protected:
00060 G4OpenGLViewer (G4OpenGLSceneHandler& scene);
00061 virtual ~G4OpenGLViewer ();
00062
00063 private:
00064 G4OpenGLViewer(const G4OpenGLViewer&);
00065 G4OpenGLViewer& operator= (const G4OpenGLViewer&);
00066
00067 protected:
00068 void SetView ();
00069 void ResetView ();
00070
00071 virtual void DrawText(const G4Text&);
00072 void ChangePointSize(G4double size);
00073 void ChangeLineWidth(G4double width);
00074 void HaloingFirstPass ();
00075 void HaloingSecondPass ();
00076 void HLRFirstPass ();
00077 void HLRSecondPass ();
00078 void HLRThirdPass ();
00079 void InitializeGLView ();
00080 void ResizeGLView();
00081 void ResizeWindow(unsigned int, unsigned int);
00082 void Pick(GLdouble x, GLdouble y);
00083 virtual void CreateFontLists () {}
00084 void rotateScene (G4double dx, G4double dy);
00085 void rotateSceneToggle (G4double dx, G4double dy);
00087
00088 void setPrintSize(G4int,G4int);
00089
00090
00091
00092
00093 void setPrintFilename(G4String name,G4bool inc);
00094
00095
00096 std::string getRealPrintFilename();
00097 unsigned int getWinWidth();
00098 unsigned int getWinHeight();
00099 G4bool sizeHasChanged();
00100
00101 GLdouble getSceneNearWidth();
00102 GLdouble getSceneFarWidth();
00103 GLdouble getSceneDepth();
00104 G4bool isGl2psWriting();
00105 G4bool fPrintColour;
00106 G4bool fVectoredPs;
00107
00108 G4OpenGLSceneHandler& fOpenGLSceneHandler;
00109 G4Colour background;
00110 G4bool
00111 transparency_enabled,
00112 antialiasing_enabled,
00113 haloing_enabled;
00114 G4double fStartTime, fEndTime;
00115 G4double fFadeFactor;
00116 G4bool fDisplayHeadTime;
00117 G4double fDisplayHeadTimeX, fDisplayHeadTimeY;
00118 G4double fDisplayHeadTimeSize;
00119 G4double fDisplayHeadTimeRed, fDisplayHeadTimeGreen, fDisplayHeadTimeBlue;
00120 G4bool fDisplayLightFront;
00121 G4double fDisplayLightFrontX, fDisplayLightFrontY, fDisplayLightFrontZ,
00122 fDisplayLightFrontT;
00123 G4double fDisplayLightFrontRed, fDisplayLightFrontGreen, fDisplayLightFrontBlue;
00124 G4OpenGL2PSAction* fGL2PSAction;
00125
00126 G4double fRot_sens;
00127 G4double fPan_sens;
00128
00129 private :
00130 static G4int fPrintSizeX;
00131 static G4int fPrintSizeY;
00132 static G4String fPrintFilename;
00133 static int fPrintFilenameIndex;
00134 unsigned int fWinSize_x, fWinSize_y;
00135 G4float fPointSize;
00136 G4bool fSizeHasChanged;
00137 int fGl2psDefaultLineWith;
00138 int fGl2psDefaultPointSize;
00139
00140
00141 void rotateSceneThetaPhi(G4double dx, G4double dy);
00142 void rotateSceneInViewDirection (G4double dx, G4double dy);
00143 bool printGl2PS();
00144 G4int getRealPrintSizeX();
00145 G4int getRealPrintSizeY();
00146 GLubyte* grabPixels (int inColor,
00147 unsigned int width,
00148 unsigned int height);
00149 bool printNonVectoredEPS ();
00150
00151
00152 bool printVectoredEPS();
00153
00154 };
00155
00156 #endif
00157
00158 #endif