[95] | 1 | #include "main.h"
|
---|
| 2 |
|
---|
| 3 | unsigned int EventI = 0;
|
---|
| 4 |
|
---|
| 5 | void Loading()
|
---|
| 6 | {
|
---|
[100] | 7 | char Buffer[1024];
|
---|
| 8 |
|
---|
[95] | 9 | switch(mLoading_I)
|
---|
| 10 | {
|
---|
| 11 |
|
---|
| 12 |
|
---|
| 13 | case 0:{
|
---|
| 14 | printf("\n");
|
---|
| 15 | printf("######################################################################\n");
|
---|
| 16 | printf("# http://projects.hepforge.org/frog/ #\n");
|
---|
| 17 | printf("# Please have a look at the website for latest versions and news #\n");
|
---|
| 18 | printf("# Also register to the Frog mailing list if you are not a member yet #\n");
|
---|
| 19 | printf("######################################################################\n");
|
---|
| 20 | #ifndef FROG_LIGHTING
|
---|
| 21 | printf("# FROG_LIGHTING is not defined --> Lighting effects will not be used #\n");
|
---|
| 22 | printf("# Modify the MakeFile to define it in order to have nicer pictures #\n");
|
---|
| 23 | printf("######################################################################\n");
|
---|
| 24 | #endif
|
---|
| 25 | printf("\n");
|
---|
| 26 |
|
---|
| 27 | start = time ( NULL );
|
---|
| 28 |
|
---|
| 29 |
|
---|
| 30 | // TURN Vertical Synchronisation (VSYNC) OFF
|
---|
| 31 | // This allow the system to have more than 60 or 75FPS.
|
---|
| 32 | /*
|
---|
| 33 | #ifdef windows
|
---|
| 34 | if(WGL_EXT_swap_control){wglSwapIntervalEXT(0);}else{printf("WGL_EXT_swap_control is NOT OK\n");}
|
---|
| 35 | #else
|
---|
| 36 | if(GLX_SGI_swap_control){glXSwapIntervalSGI(0);}else{printf("GLX_SGI_swap_control is NOT OK\n");}
|
---|
| 37 | #endif
|
---|
| 38 | */
|
---|
| 39 |
|
---|
| 40 |
|
---|
| 41 | // Init the random number generator
|
---|
| 42 | srand (time(NULL));
|
---|
| 43 |
|
---|
| 44 | Fonts = new FROG_Fonts();
|
---|
| 45 | ViewScreen = new FROG_View_Screen("Screen");
|
---|
| 46 | ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
[100] | 47 | sprintf(Buffer,"Reading %s",inputConfig.c_str());
|
---|
| 48 | ViewScreen->LoadingInProgress(0.0f,Buffer,Fonts,LogoTexture);
|
---|
[95] | 49 |
|
---|
| 50 |
|
---|
[100] | 51 | LoadCard(inputConfig.c_str());
|
---|
[95] | 52 | if(!Card->IsTagPresent("InputGeom") && !Card->IsTagPresent("InputVisFile")){
|
---|
| 53 | printf("There is no .geom file neither than .vis file in the Config card\n");
|
---|
[100] | 54 | printf("FROG will stop. Please update the Config card (%s)\n",inputConfig.c_str());
|
---|
[95] | 55 | exit(0);
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | }break;
|
---|
| 59 |
|
---|
| 60 | case 1:
|
---|
| 61 | ViewScreen->LoadingInProgress(1.0f,"Downloading Geometry\n(if necessary)",Fonts,LogoTexture);
|
---|
| 62 |
|
---|
| 63 | if(Card->IsTagPresent("InputGeom")){
|
---|
| 64 | inputGeom = Card->GetStringVector("InputGeom");
|
---|
| 65 | for(unsigned int g=0;g<inputGeom.size();g++){
|
---|
[100] | 66 | inputGeom[g] = string((char*)DownLoadFile( (char*)inputGeom[g].c_str(), AbsolutePath.c_str() ) );
|
---|
[95] | 67 | }
|
---|
| 68 | }
|
---|
| 69 | break;
|
---|
| 70 |
|
---|
| 71 | case 2:
|
---|
[100] | 72 | /*
|
---|
[95] | 73 | ViewScreen->LoadingInProgress(10.0f,"Downloading Events\n(if necessary)",Fonts,LogoTexture);
|
---|
| 74 |
|
---|
| 75 | if(inputVisFileFromCard.length()<3 && Card->IsTagPresent("InputVisFile")){
|
---|
| 76 | inputVisFileFromCard = Card->GetString("InputVisFile");
|
---|
| 77 | }
|
---|
[100] | 78 | inputVisFile = string((char*)DownLoadFile( (char*)inputVisFileFromCard.c_str(), AbsolutePath.c_str() ) );
|
---|
| 79 | */
|
---|
[95] | 80 | break;
|
---|
| 81 |
|
---|
| 82 | case 3:{
|
---|
| 83 | ViewScreen->LoadingInProgress(20.0f,"Loading Geometry",Fonts,LogoTexture);
|
---|
| 84 | if(geom)delete geom;
|
---|
| 85 | geom = new FROG_Geometry();
|
---|
| 86 | if(inputGeom.size()<=0){printf("Error : No Input Geometry File\n");exit(0);}
|
---|
| 87 |
|
---|
| 88 | while(inputGeom.size()>0){
|
---|
| 89 | ViewScreen->LoadingInProgress(20.f+30.f/inputGeom.size(),(char*)inputGeom[inputGeom.size()-1].c_str(),Fonts,LogoTexture);
|
---|
| 90 | geom->Load((char*)inputGeom[inputGeom.size()-1].c_str());
|
---|
| 91 | inputGeom.pop_back();
|
---|
| 92 | }
|
---|
| 93 | frogObjects_ = new FROG_Objects_Extended(geom,NULL,Card, Fonts);
|
---|
[100] | 94 |
|
---|
[95] | 95 |
|
---|
| 96 | }break;
|
---|
| 97 |
|
---|
| 98 | case 4:{
|
---|
[100] | 99 | ViewScreen->LoadingInProgress(80.0f,"Loading .vis Files",Fonts,LogoTexture);
|
---|
[95] | 100 |
|
---|
| 101 | if(events)delete events;
|
---|
[100] | 102 | events = new FROG_Events(frogObjects_);
|
---|
| 103 | events->Load(inputVisFileFromCommand);
|
---|
[95] | 104 | events->readEventToDisplay(Card);
|
---|
[100] | 105 | if(SCREENSAVER)eventNumber = rand()%((int)events->NumberOfEvents());
|
---|
[95] | 106 | event = events->GoToEvent(eventNumber);
|
---|
| 107 | }break;
|
---|
| 108 |
|
---|
[100] | 109 | case 5:{
|
---|
[95] | 110 | ViewScreen->LoadingInProgress(95.0f,"Views Initialisation",Fonts,LogoTexture);
|
---|
| 111 |
|
---|
| 112 | ViewScreen->displayFunc_ = displaytext;
|
---|
| 113 | std::vector<string> ViewsName = Card->GetStringVector("ActiveViews");
|
---|
[100] | 114 | ViewMain = ViewScreen;
|
---|
| 115 | for(unsigned int i=0;i<ViewsName.size();i++){
|
---|
[95] | 116 | char* tmp = new char[ViewsName[i].size()+1];
|
---|
| 117 | strcpy(tmp,ViewsName[i].c_str());
|
---|
[100] | 118 | ActiveViews.push_back(FROG_VIEW::Create(tmp,frogObjects_));
|
---|
| 119 | }
|
---|
[95] | 120 | ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
[100] | 121 |
|
---|
[95] | 122 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
| 123 | if(ViewMain==ViewScreen && ActiveViews[j]->IsSwapPossible()){ViewMain = ActiveViews[j];}
|
---|
| 124 | ActiveViews[j]->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
| 125 | ActiveViews[j]->displayFunc_ = &display2;
|
---|
| 126 | }
|
---|
[100] | 127 | ViewMain->IsActive = true;
|
---|
[95] | 128 | geom->updateGeomToDisplay((void*)frogObjects_);
|
---|
| 129 |
|
---|
| 130 | ViewMenu = new FROG_View_Menu("ViewMenu2",frogObjects_);
|
---|
[100] | 131 | ViewMenu->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
[95] | 132 | }break;
|
---|
| 133 |
|
---|
| 134 |
|
---|
| 135 | case 20:
|
---|
| 136 | ViewScreen->LoadingInProgress(99.0f,"Preparation for Display",Fonts,LogoTexture);
|
---|
| 137 |
|
---|
| 138 | glEnable (GL_DEPTH_TEST);
|
---|
| 139 |
|
---|
| 140 | glFrontFace(GL_CCW);
|
---|
| 141 | glEnable(GL_CULL_FACE);
|
---|
| 142 |
|
---|
| 143 | glEnable(GL_POINT_SMOOTH);
|
---|
| 144 | glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
|
---|
| 145 | //glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
|
---|
| 146 |
|
---|
| 147 | glEnable(GL_LINE_SMOOTH);
|
---|
| 148 | glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
|
---|
| 149 | //glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST);
|
---|
| 150 |
|
---|
| 151 | //glEnable(GL_POLYGON_SMOOTH);
|
---|
| 152 | //glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
|
---|
| 153 |
|
---|
| 154 | glEnable(GL_BLEND) ;
|
---|
| 155 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
|
---|
| 156 |
|
---|
[100] | 157 |
|
---|
[95] | 158 | mLoading = false;
|
---|
| 159 | end = time ( NULL );
|
---|
| 160 | printf("Loading Time = %isec\n",(int)(end-start));
|
---|
| 161 |
|
---|
| 162 | glutDisplayFunc (display);
|
---|
| 163 | glutIdleFunc (display);
|
---|
| 164 |
|
---|
[100] | 165 | glutKeyboardFunc (processNormalKeys);
|
---|
| 166 | glutSpecialFunc (processSpecialKeys);
|
---|
| 167 |
|
---|
| 168 | glutMouseFunc(processMouse);
|
---|
| 169 | glutMotionFunc(processMotion);
|
---|
| 170 | if(SCREENSAVER){
|
---|
| 171 | eventTime = 20;
|
---|
| 172 | glutPassiveMotionFunc(processPassiveMotion);
|
---|
| 173 | glutFullScreen();
|
---|
| 174 | }
|
---|
| 175 |
|
---|
| 176 |
|
---|
[95] | 177 | if(SHOOTER){
|
---|
| 178 | mAutomaticShooter_LastEvent = events->Current_Event;
|
---|
| 179 | do{
|
---|
| 180 | frogObjects_->selectedObject_ = NULL;//mCLicked_DetId = (unsigned int) -1;
|
---|
| 181 | for(unsigned int j=0;j<ActiveViews.size();j++){ActiveViews[j]->MarkForUpdate();}
|
---|
| 182 | for(unsigned int i=0;i<4;i++)display();
|
---|
| 183 | char temp[255]; sprintf(temp,"AutomaticShooter_%04i.%s",SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
| 184 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, display);
|
---|
| 185 | SCREENSHOT++;
|
---|
| 186 | event = events->NextEvent();
|
---|
| 187 | }while(events->Current_Event!=mAutomaticShooter_LastEvent);
|
---|
| 188 | exit(0);
|
---|
| 189 | }
|
---|
| 190 |
|
---|
| 191 | return;
|
---|
| 192 | break;
|
---|
| 193 |
|
---|
| 194 | default:
|
---|
| 195 | break;
|
---|
| 196 | }
|
---|
| 197 |
|
---|
| 198 | mLoading_I++;
|
---|
| 199 | }
|
---|
| 200 |
|
---|
| 201 | void reshape (int w, int h)
|
---|
| 202 | {
|
---|
| 203 | if (h == 0) h = 1;
|
---|
| 204 |
|
---|
| 205 | WINDOW_WIDTH = w;
|
---|
| 206 | WINDOW_HEIGHT = h;
|
---|
| 207 |
|
---|
| 208 | if(ViewScreen)ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
| 209 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
| 210 | ActiveViews[j]->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
| 211 | }
|
---|
| 212 | if(ViewMenu)ViewMenu->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
| 213 |
|
---|
| 214 | glutPostRedisplay ();
|
---|
| 215 | }
|
---|
| 216 |
|
---|
| 217 | void displaytext()
|
---|
| 218 | {
|
---|
| 219 | glColor4fv (Txt_Color);
|
---|
| 220 | Fonts->Font_Fixed_9_by_15->glPrint(WINDOW_WIDTH-126,WINDOW_HEIGHT - 30,"% 10i FPS", ViewScreen->FPS);
|
---|
| 221 | if(mHelpScreen){
|
---|
[100] | 222 | if(events) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 14,"CurrentFile = ...%s",events->CurrentFile());
|
---|
[95] | 223 |
|
---|
[100] | 224 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 45 ,"F1 = Open this Screen for Help");
|
---|
| 225 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 60 ,"F2 = Open the Display Menu");
|
---|
| 226 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 75 ,"F3 = use only for debug");
|
---|
| 227 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 90 ,"F4 = Automatic ScreenShooter (Warning)");
|
---|
[95] | 228 |
|
---|
[100] | 229 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 125 ,"F5 = SimTrack : ON/OFF");
|
---|
| 230 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 140 ,"F6 = SimVertex : ON/OFF");
|
---|
| 231 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 155 ,"F7 = PSimHits : ON/OFF");
|
---|
| 232 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 170 ,"F8 = RecoTrack : ON/OFF");
|
---|
[95] | 233 |
|
---|
[100] | 234 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 205 ,"F9 = SiStripCluster : ON/OFF");
|
---|
| 235 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 220 ,"F10 = EcalHits : ON/OFF");
|
---|
| 236 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 235 ,"F11 = HcalHits : ON/OFF");
|
---|
| 237 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 250 ,"F12 = MuonHit/Seg : ON/OFF");
|
---|
[95] | 238 |
|
---|
[100] | 239 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 285 ,"0 = Geometry to Display : NONE");
|
---|
| 240 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 300 ,"9 = Geometry to Display : FULL");
|
---|
[95] | 241 |
|
---|
[100] | 242 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 335 ,"LEFT = Previous Event");
|
---|
| 243 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 350 ,"RIGHT = Next Event");
|
---|
| 244 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 375 ,"UP = Increase Rotation");
|
---|
| 245 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 390 ,"DOWN = Decrease Rotation");
|
---|
[95] | 246 |
|
---|
[100] | 247 | Fonts->Font_Fixed_9_by_15->glPrint(500,WINDOW_HEIGHT - 375 ,"PAGE UP = Previous VisFile");
|
---|
| 248 | Fonts->Font_Fixed_9_by_15->glPrint(500,WINDOW_HEIGHT - 390 ,"PAGE DOWN = Next VisFile");
|
---|
| 249 |
|
---|
| 250 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 425 ,"p = Zoom In");
|
---|
| 251 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 440 ,"m = Zoom Out");
|
---|
| 252 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 455 ,"f = Maximize the active view");
|
---|
| 253 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 470 ,"s = SlideShow : ON/OFF");
|
---|
| 254 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 485 ,"t = TreeMenu : ON/OFF");
|
---|
| 255 |
|
---|
| 256 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 515 ,"ENTER = Screenshot");
|
---|
| 257 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 530 ,"SPACE = Rotation : ON/OFF");
|
---|
| 258 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 545 ,"ESCAPE = Exit");
|
---|
| 259 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 560 ,"q = Exit");
|
---|
| 260 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 575 ,"a = Full Screen");
|
---|
[95] | 261 |
|
---|
| 262 | Fonts->Font_Fixed_9_by_15->glPrint(120,3,"This program has been created by Loic Quertenmont, loic.quertenmont@cern.ch");
|
---|
| 263 | }else{
|
---|
| 264 | Fonts->Font_Fixed_9_by_15->glPrint(WINDOW_WIDTH-153,WINDOW_HEIGHT - 14,"Press F1 for Help");
|
---|
| 265 | if(event) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 14,"#Run %i #Event %i (%02i/%02i)",event->NRun_, event->NEvent_, events->Current_Event, (int)events->NumberOfEvents()-1);
|
---|
| 266 | if(event) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 29,"%s", event->EventDate_);
|
---|
| 267 |
|
---|
| 268 |
|
---|
| 269 | char temp[255];
|
---|
| 270 | if(frogObjects_->selectedObject_){
|
---|
| 271 | frogObjects_->selectedObject_->printInfos(temp);
|
---|
| 272 | if(frogObjects_->IsSelected_Geometry())sprintf(temp,"%s : Press '1' or '2' or ... to Display the parent object",temp);
|
---|
| 273 | Fonts->Font_Helvetica_10->glPrint(120,3,temp);
|
---|
| 274 | }
|
---|
| 275 |
|
---|
| 276 | }
|
---|
| 277 |
|
---|
| 278 | ViewScreen->DrawLogo(0,0,120,80,LogoTxtTexture, Fonts);
|
---|
| 279 | }
|
---|
| 280 |
|
---|
| 281 | void displayForScreenShot()
|
---|
| 282 | {
|
---|
| 283 | display2();
|
---|
| 284 | ViewMain->DisplayBkgGeom();
|
---|
| 285 | }
|
---|
| 286 |
|
---|
| 287 | void display2()
|
---|
| 288 | {
|
---|
| 289 | // Display the FrameWork
|
---|
| 290 | if(ZAxis_Color[3]>0){
|
---|
| 291 | glColor4fv (ZAxis_Color);
|
---|
| 292 | glLineWidth(ZAxis_Thickness);
|
---|
| 293 | glBegin (GL_LINES);
|
---|
| 294 | glNormal3f(0,1,0);
|
---|
| 295 | glVertex3f (0,0,-300);
|
---|
| 296 | glVertex3f (0,0,300);
|
---|
| 297 | glEnd();
|
---|
| 298 | glLineWidth(1);
|
---|
| 299 | }
|
---|
| 300 |
|
---|
| 301 | // Display the 3D Geometry (only if in a 3D View)
|
---|
| 302 | if(geom!=NULL){// && ViewMain->Type_==VIEW3D){
|
---|
| 303 | if(Geometry_WireFrame){
|
---|
| 304 | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
---|
| 305 | }else{
|
---|
| 306 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
---|
| 307 | }
|
---|
| 308 | geom->display();
|
---|
| 309 | }
|
---|
| 310 |
|
---|
| 311 | // Display the Event
|
---|
| 312 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
---|
| 313 | if(event!=NULL) event->display();
|
---|
| 314 | }
|
---|
| 315 |
|
---|
| 316 |
|
---|
| 317 | void display()
|
---|
| 318 | {
|
---|
| 319 | //-------- update event file if required ------------
|
---|
| 320 | //updateEventsFile();
|
---|
| 321 |
|
---|
| 322 | glClearColor(BackGround_Color[0],BackGround_Color[1],BackGround_Color[2],1.0);
|
---|
| 323 | glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset le buffer de couleur et de profondeur
|
---|
| 324 |
|
---|
| 325 | if(ViewMenu->AlphaFx<1){
|
---|
| 326 | ViewMain->Display();
|
---|
| 327 | if(!ViewMain->screen_flag){
|
---|
| 328 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
| 329 | if(ActiveViews[j]!=ViewMain && ActiveViews[j]->Type_!=VIEWMENU) ActiveViews[j]->Display();
|
---|
| 330 | }
|
---|
| 331 | }
|
---|
| 332 | if(ViewScreen) ViewScreen->Display();
|
---|
| 333 | }
|
---|
| 334 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
| 335 | if(ActiveViews[j]->Type_==VIEWMENU){ActiveViews[j]->Display();}
|
---|
| 336 | }
|
---|
| 337 | ViewMenu->Display();
|
---|
| 338 |
|
---|
| 339 | glutSwapBuffers();
|
---|
| 340 |
|
---|
| 341 | SelectedObject_Counter++;
|
---|
| 342 | if(SelectedObject_Counter>25){
|
---|
| 343 | SelectedObject_Counter = 0;
|
---|
| 344 | frogObjects_->selectedObject_DisplayFlag = !frogObjects_->selectedObject_DisplayFlag;
|
---|
| 345 | }
|
---|
| 346 |
|
---|
| 347 | fflush(stdout);
|
---|
| 348 | }
|
---|
| 349 |
|
---|
| 350 | void updateEventsFile() {
|
---|
| 351 | // this function lauch a threat to download the input event file
|
---|
| 352 | // if required by the variable updateVisFileTime
|
---|
| 353 |
|
---|
[100] | 354 | /*
|
---|
| 355 | #ifdef windows
|
---|
[95] | 356 | if( updateVisFileTime>0 && !Thread_Run) {
|
---|
| 357 | char* argtosend = (char*)inputVisFileFromCard.c_str();
|
---|
[100] | 358 |
|
---|
| 359 | Thread_H = CreateThread( NULL, 0, WinDownLoadFile, (void*)argtosend, 0, &Thread_Id);
|
---|
| 360 | if (Thread_H == NULL){
|
---|
| 361 | printf("Unable to create thread\n");
|
---|
| 362 | exit(1);
|
---|
| 363 | }
|
---|
| 364 | Thread_Run = true;
|
---|
[95] | 365 | }
|
---|
| 366 |
|
---|
| 367 | static time_t upstart = time (NULL );
|
---|
| 368 | time_t upstop = time( NULL );
|
---|
[100] | 369 | if(upstop - upstart > updateVisFileTime && Thread_Run) {
|
---|
| 370 | if(WaitForSingleObject(Thread_H, 0) == WAIT_OBJECT_0){
|
---|
| 371 | Thread_Run=false;
|
---|
| 372 | glutDisplayFunc (Loading);
|
---|
| 373 | glutIdleFunc (Loading);
|
---|
[95] | 374 |
|
---|
[100] | 375 | mLoading_I = 30;
|
---|
| 376 | mLoading = true;
|
---|
| 377 | start = time ( NULL );
|
---|
| 378 | }else{
|
---|
| 379 | // File is not yet fully downloaded
|
---|
| 380 | }
|
---|
| 381 | upstart = time (NULL );
|
---|
[95] | 382 | }
|
---|
[100] | 383 | #else
|
---|
[95] | 384 | if( updateVisFileTime>0 && !Thread_Run) {
|
---|
| 385 | char* argtosend = (char*)inputVisFileFromCard.c_str();
|
---|
| 386 | if (pthread_create (&Thread_H, NULL, DownLoadFile, (void*)argtosend) < 0) {
|
---|
| 387 | printf("pthread_create error for Thread_H\n");
|
---|
| 388 | exit (1);
|
---|
| 389 | }
|
---|
| 390 | Thread_Run=true;
|
---|
| 391 | }
|
---|
| 392 |
|
---|
| 393 | static time_t upstart = time (NULL );
|
---|
| 394 | time_t upstop = time( NULL );
|
---|
| 395 | if(upstop - upstart > updateVisFileTime && Thread_Run) {
|
---|
| 396 | (void)pthread_join (Thread_H, NULL);
|
---|
| 397 |
|
---|
| 398 | Thread_Run=false;
|
---|
| 399 | glutDisplayFunc (Loading);
|
---|
| 400 | glutIdleFunc (Loading);
|
---|
| 401 |
|
---|
| 402 | mLoading_I = 30;
|
---|
| 403 | mLoading = true;
|
---|
| 404 | start = time ( NULL );
|
---|
| 405 | }
|
---|
| 406 |
|
---|
| 407 | #endif
|
---|
[100] | 408 | */
|
---|
[95] | 409 |
|
---|
| 410 | }
|
---|
| 411 |
|
---|
| 412 | void processNormalKeys(unsigned char key, int x, int y)
|
---|
| 413 | {
|
---|
| 414 | int Mod = glutGetModifiers();
|
---|
| 415 | if(Mod==GLUT_ACTIVE_CTRL)key+=96;
|
---|
| 416 |
|
---|
| 417 | switch(key){
|
---|
| 418 | case 'q':
|
---|
| 419 | case 27 :
|
---|
| 420 | exit(0);
|
---|
| 421 | break;
|
---|
| 422 | case 13 :{
|
---|
[100] | 423 | char temp[255]; sprintf(temp,"%s%02i.%s",ScreenShotName,SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
[95] | 424 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, displayForScreenShot );
|
---|
| 425 | SCREENSHOT++;
|
---|
| 426 | }break;
|
---|
| 427 | case ' ':{
|
---|
| 428 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->shouldRotate_ = ! ((FROG_View_3D*)ViewMain)->shouldRotate_;
|
---|
| 429 | }break;
|
---|
| 430 | case 'p' :
|
---|
| 431 | ViewMain->cam_->R*=0.95;
|
---|
| 432 | break;
|
---|
| 433 | case 'm' :
|
---|
| 434 | ViewMain->cam_->R*=1.05;
|
---|
| 435 | break;
|
---|
| 436 | case 'r' :
|
---|
| 437 | case 'R' :
|
---|
[100] | 438 | LoadCard(inputConfig.c_str());
|
---|
[95] | 439 | /* geom->updateGeomToDisplay(Card);
|
---|
| 440 | events->prim->setDisplay(0);
|
---|
| 441 | events->Init(frogObjects_);
|
---|
| 442 | events->readEventToDisplay(Card);
|
---|
| 443 | */
|
---|
| 444 | event = events->GoToEvent(eventNumber);
|
---|
| 445 |
|
---|
| 446 | break;
|
---|
| 447 | case 'T' :
|
---|
| 448 | case 't' :
|
---|
| 449 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
| 450 | if(ActiveViews[j]->Type_==VIEWMENU){((FROG_View_Menu*)ActiveViews[j])->State =! ((FROG_View_Menu*)ActiveViews[j])->State;}
|
---|
| 451 | }
|
---|
| 452 | break;
|
---|
| 453 | case 'F' :
|
---|
| 454 | case 'f' :
|
---|
| 455 | ViewMain->FullScreen();
|
---|
| 456 | break;
|
---|
| 457 | case 'a':
|
---|
| 458 | case 'l':
|
---|
| 459 | if( (key=='l' && Mod == GLUT_ACTIVE_CTRL) || key=='a'){
|
---|
| 460 | if(FULLSCREEN){
|
---|
| 461 | glutReshapeWindow(SAVE_WINDOW_W, SAVE_WINDOW_H);
|
---|
| 462 | glutPositionWindow(SAVE_WINDOW_X,SAVE_WINDOW_Y);
|
---|
| 463 | }else{
|
---|
| 464 | SAVE_WINDOW_W = glutGet(GLUT_WINDOW_WIDTH);
|
---|
| 465 | SAVE_WINDOW_H = glutGet(GLUT_WINDOW_HEIGHT);
|
---|
| 466 | SAVE_WINDOW_X = glutGet(GLUT_WINDOW_X);
|
---|
| 467 | SAVE_WINDOW_Y = glutGet(GLUT_WINDOW_Y);
|
---|
| 468 | glutFullScreen();
|
---|
| 469 | }
|
---|
| 470 | FULLSCREEN = !FULLSCREEN;
|
---|
| 471 | }
|
---|
| 472 | break;
|
---|
| 473 | case 's':
|
---|
| 474 | mEventChanging = !mEventChanging;
|
---|
| 475 | break;
|
---|
| 476 | case '0' : geom->prim->setDisplay(0);
|
---|
| 477 | break;
|
---|
| 478 |
|
---|
| 479 | case '9' : geom->prim->setDisplay(1);
|
---|
| 480 | break;
|
---|
| 481 |
|
---|
| 482 | case '1' :
|
---|
| 483 | case '2' :
|
---|
| 484 | case '3' :
|
---|
| 485 | case '4' :
|
---|
| 486 | case '5' :
|
---|
| 487 | case '6' :
|
---|
| 488 | case '7' :
|
---|
| 489 | case '8' :
|
---|
| 490 | if(frogObjects_->IsSelected_Geometry()){
|
---|
| 491 | frogObjects_->selectedObject_->toogleParentDisplay(1,key-48);
|
---|
| 492 | geom->prim->setDisplay(2);
|
---|
| 493 | }
|
---|
| 494 | break;
|
---|
| 495 | }
|
---|
| 496 | if(SCREENSAVER)exit(0);
|
---|
| 497 | }
|
---|
| 498 |
|
---|
| 499 |
|
---|
| 500 | void processSpecialKeys(int key, int x, int y)
|
---|
| 501 | {
|
---|
| 502 | if(ViewMenu->State){
|
---|
| 503 | if(ViewMenu->processSpecialKeys(key,x,y))return;
|
---|
| 504 | }
|
---|
| 505 |
|
---|
| 506 | int Mod = glutGetModifiers();
|
---|
| 507 | // if(Mod==GLUT_ACTIVE_CTRL)key+=96;
|
---|
| 508 |
|
---|
| 509 | switch(key) {
|
---|
| 510 | case GLUT_KEY_F1 :
|
---|
| 511 | mHelpScreen = !mHelpScreen;
|
---|
| 512 | break;
|
---|
| 513 | case GLUT_KEY_F2 :
|
---|
| 514 | ViewMenu->State = !ViewMenu->State;
|
---|
| 515 | ViewMenu->Alpha = 1;
|
---|
| 516 | break;
|
---|
| 517 |
|
---|
| 518 | case GLUT_KEY_F3 :
|
---|
| 519 | if(event) event->SuperCleardisplayList();
|
---|
| 520 | break;
|
---|
| 521 |
|
---|
| 522 | case GLUT_KEY_F4 :
|
---|
| 523 | mAutomaticShooter = !mAutomaticShooter;
|
---|
| 524 | if(mAutomaticShooter){
|
---|
| 525 | AutomaticEventChanging(0);
|
---|
| 526 | mAutomaticShooter_LastEvent = events->Current_Event;
|
---|
| 527 | }
|
---|
| 528 | break;
|
---|
| 529 |
|
---|
| 530 | case GLUT_KEY_F5 :
|
---|
| 531 | events->updateEventToDisplay(EVTID_SIMTRK);
|
---|
| 532 | break;
|
---|
| 533 | case GLUT_KEY_F6 :
|
---|
| 534 | events->updateEventToDisplay(EVTID_SIMVTX);
|
---|
| 535 | break;
|
---|
| 536 | case GLUT_KEY_F7 :
|
---|
| 537 | events->updateEventToDisplay(EVTID_SIMHIT);
|
---|
| 538 | break;
|
---|
| 539 | case GLUT_KEY_F8 :
|
---|
| 540 | events->updateEventToDisplay(EVTID_TRK);
|
---|
| 541 | break;
|
---|
| 542 | case GLUT_KEY_F9 :
|
---|
| 543 | events->updateEventToDisplay(EVTID_SISTRIPCLUSTER);
|
---|
| 544 | break;
|
---|
| 545 | case GLUT_KEY_F10 :
|
---|
| 546 | events->updateEventToDisplay(EVTID_ECALHIT);
|
---|
| 547 | break;
|
---|
| 548 | case GLUT_KEY_F11:
|
---|
| 549 | events->updateEventToDisplay(EVTID_HCALHIT);
|
---|
| 550 | break;
|
---|
| 551 | case GLUT_KEY_F12 :
|
---|
| 552 | events->updateEventToDisplay(EVTID_MUONHIT);
|
---|
| 553 | events->updateEventToDisplay(EVTID_MUONSEG);
|
---|
| 554 | break;
|
---|
| 555 | case GLUT_KEY_RIGHT :
|
---|
| 556 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
| 557 | ViewMain->cam_->Move(-5,0);
|
---|
| 558 | }else{
|
---|
| 559 | frogObjects_->selectedObject_ = NULL;
|
---|
| 560 | event = events->NextEvent();
|
---|
| 561 | }
|
---|
| 562 | break;
|
---|
| 563 | case GLUT_KEY_LEFT :
|
---|
| 564 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
| 565 | ViewMain->cam_->Move(5,0);
|
---|
| 566 | }else{
|
---|
| 567 | frogObjects_->selectedObject_ = NULL;
|
---|
| 568 | event = events->PreviousEvent();
|
---|
| 569 | }
|
---|
| 570 | break;
|
---|
| 571 | case GLUT_KEY_UP :
|
---|
| 572 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
| 573 | ViewMain->cam_->Move(0,5);
|
---|
| 574 | }else{
|
---|
| 575 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->dphi_ += 0.005f;
|
---|
| 576 | }
|
---|
| 577 | break;
|
---|
| 578 | case GLUT_KEY_DOWN :
|
---|
| 579 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
| 580 | ViewMain->cam_->Move(0,-5);
|
---|
| 581 | }else{
|
---|
| 582 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->dphi_ -= 0.005f;
|
---|
| 583 | }
|
---|
| 584 | break;
|
---|
[100] | 585 |
|
---|
| 586 | case GLUT_KEY_PAGE_UP :
|
---|
| 587 | events->NextFile();
|
---|
| 588 | event = events->GoToEvent(0);
|
---|
| 589 | break;
|
---|
| 590 | case GLUT_KEY_PAGE_DOWN :
|
---|
| 591 | events->PreviousFile();
|
---|
| 592 | event = events->GoToEvent(0);
|
---|
| 593 | break;
|
---|
| 594 |
|
---|
[95] | 595 | case GLUT_KEY_HOME :
|
---|
| 596 | if(ViewMain->Type_==VIEW3D) ViewMain->cam_->Reset();
|
---|
| 597 | break;
|
---|
| 598 | case GLUT_KEY_END :
|
---|
| 599 | event = events->GoToEvent(-1);
|
---|
| 600 | break;
|
---|
| 601 | }
|
---|
| 602 | if(SCREENSAVER)exit(0);
|
---|
| 603 | }
|
---|
| 604 |
|
---|
| 605 | void processMouse(int button, int state, int x, int y)
|
---|
| 606 | {
|
---|
| 607 | if(ViewMenu->processMouse(button, state,x,y) ){
|
---|
| 608 | events->keepEventToDisplay(NULL);
|
---|
| 609 | events->keepOpenedMenu(NULL);
|
---|
| 610 | return;
|
---|
| 611 | }
|
---|
| 612 |
|
---|
| 613 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
| 614 | if(ActiveViews[j]->Type_ == VIEWMENU && ActiveViews[j]->IsInViewPort(x,y)){
|
---|
| 615 | if( ((FROG_View_Menu*)ActiveViews[j])->processMouse(button, state,x,y)){
|
---|
| 616 | events->keepEventToDisplay(NULL);
|
---|
| 617 | events->keepOpenedMenu(NULL);
|
---|
| 618 | return;
|
---|
| 619 | }
|
---|
| 620 | }
|
---|
| 621 | }
|
---|
| 622 |
|
---|
| 623 | int K = 0;
|
---|
| 624 | if(button == GLUT_LEFT_BUTTON){
|
---|
| 625 | K = 0;
|
---|
| 626 | if(state == GLUT_DOWN){
|
---|
| 627 | int ClickedView = -1;
|
---|
| 628 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
| 629 | if(ActiveViews[j]!= ViewMain && ActiveViews[j]->IsInViewPort(x,y) && ActiveViews[j]->IsSwapPossible()){
|
---|
| 630 | ClickedView = j;
|
---|
| 631 | break;
|
---|
| 632 | }
|
---|
| 633 | }
|
---|
| 634 | if(ClickedView>=0){
|
---|
| 635 | FROG_VIEW::Swap(ViewMain, ActiveViews[ClickedView]);
|
---|
| 636 | ViewMain->IsActive = false;
|
---|
| 637 | ViewMain = ActiveViews[ClickedView];
|
---|
| 638 | ViewMain->IsActive = true;
|
---|
| 639 | }else if(ViewMain->IsInViewPort(x,y)){
|
---|
| 640 | gl_select(x,WINDOW_HEIGHT-y);
|
---|
| 641 | }
|
---|
| 642 | }
|
---|
| 643 | }else if(button == GLUT_MIDDLE_BUTTON ){
|
---|
| 644 | K = 1;
|
---|
| 645 | }else if(button == GLUT_RIGHT_BUTTON){
|
---|
| 646 | K = 2;
|
---|
| 647 | }else{
|
---|
| 648 | }
|
---|
| 649 |
|
---|
| 650 | bool old_state = MouseStates[K];
|
---|
| 651 | if(state == GLUT_DOWN) MouseStates[K] = true;
|
---|
| 652 | if(state == GLUT_UP) MouseStates[K] = false;
|
---|
| 653 |
|
---|
| 654 | if( old_state != MouseStates[K]) stateChanged=true;
|
---|
| 655 | else stateChanged=false;
|
---|
| 656 | }
|
---|
| 657 |
|
---|
| 658 | void processMotion(int x, int y) {
|
---|
| 659 | static int xold=x, yold=y;
|
---|
| 660 | if( stateChanged ) { xold=x; yold=y; stateChanged=false; return; }
|
---|
| 661 |
|
---|
| 662 | if(MouseStates[2]){
|
---|
| 663 | if(ViewMain->Is3D()){
|
---|
| 664 | ViewMain->cam_->phi = ViewMain->cam_->phi + 10.0*((float)(xold-x)/(float)ViewMain->cam_->R);
|
---|
| 665 | ViewMain->cam_->theta = ViewMain->cam_->theta + 10.0*((float)(yold-y)/(float)ViewMain->cam_->R);
|
---|
| 666 | }else if(ViewMain->Is2D()){
|
---|
| 667 | ViewMain->cam_->Move((x-xold),(y-yold));
|
---|
| 668 | }
|
---|
| 669 | xold=x; yold=y;
|
---|
| 670 | }else if(MouseStates[1]){
|
---|
| 671 | if(yold-y>0){
|
---|
| 672 | ViewMain->cam_->R*=0.98;
|
---|
| 673 | }else{
|
---|
| 674 | ViewMain->cam_->R*=1.02;
|
---|
| 675 | }
|
---|
| 676 | }
|
---|
| 677 | }
|
---|
| 678 |
|
---|
| 679 | void processPassiveMotion(int x, int y)
|
---|
| 680 | {
|
---|
| 681 | static int xold=x;
|
---|
| 682 | static int yold=y;
|
---|
| 683 | if(SCREENSAVER && (abs(x-xold)>3 || abs(y-yold)>3) )exit(0);
|
---|
| 684 | }
|
---|
| 685 |
|
---|
| 686 | void gl_select(int x, int y)
|
---|
| 687 | {
|
---|
| 688 | ViewMain->Display_Begin();
|
---|
| 689 |
|
---|
[100] | 690 | GLuint buff[1024] = {0};
|
---|
[95] | 691 | GLint hits, view[4];
|
---|
| 692 |
|
---|
[100] | 693 | glSelectBuffer(1024, buff);
|
---|
[95] | 694 | glGetIntegerv(GL_VIEWPORT, view);
|
---|
| 695 | glRenderMode(GL_SELECT);
|
---|
| 696 | glInitNames();
|
---|
| 697 | glPushName(0);
|
---|
| 698 |
|
---|
| 699 | glMatrixMode(GL_PROJECTION);
|
---|
| 700 | glPushMatrix();
|
---|
| 701 | glLoadIdentity();
|
---|
[100] | 702 | gluPickMatrix(x-4, y-4, 8.0, 8.0, view);
|
---|
[95] | 703 | ViewMain->ProjectionMatrix();
|
---|
| 704 | glMatrixMode(GL_MODELVIEW);
|
---|
| 705 | glutSwapBuffers();
|
---|
| 706 | ViewMain->Display_Core();
|
---|
| 707 | glMatrixMode(GL_PROJECTION);
|
---|
| 708 | glPopMatrix();
|
---|
| 709 |
|
---|
| 710 | hits = glRenderMode(GL_RENDER);
|
---|
| 711 | list_hits(hits, buff);
|
---|
| 712 | glMatrixMode(GL_MODELVIEW);
|
---|
| 713 | }
|
---|
| 714 | void list_hits(GLint hits, GLuint *names)
|
---|
| 715 | {
|
---|
| 716 | unsigned int i;
|
---|
| 717 | // names[i * 4 + 0] = 1 names[i * 4 + 1] = MinZ
|
---|
| 718 | // names[i * 4 + 3] = Name names[i * 4 + 2] = MaxZ
|
---|
| 719 |
|
---|
| 720 | //get Min in Z;
|
---|
| 721 | // unsigned int MinZ = (unsigned int)-1;
|
---|
| 722 | // unsigned int NearestHit = 0;
|
---|
| 723 | // for (i = 0; i < hits; i++){
|
---|
| 724 | // if( names[i*4+1]<MinZ ){MinZ=names[i*4+1]; NearestHit = i;}
|
---|
| 725 | // }
|
---|
| 726 |
|
---|
| 727 | if(hits==0)return;
|
---|
| 728 | unsigned int NearestHit = rand()%hits;
|
---|
| 729 |
|
---|
| 730 | for (i = 0; (int)i < hits; i++) {
|
---|
| 731 | unsigned int tmp = names[i * 4 + 3];
|
---|
[100] | 732 | //printf("--> %i/%i > %i\n",i,hits,tmp);
|
---|
[95] | 733 | if(i == NearestHit && tmp!=0){
|
---|
| 734 | if(tmp>1000000){
|
---|
| 735 | frogObjects_->selectedObject_ = dynamic_cast<FROG_Element_Base_With_DetId*>(geom->FindByDetId(tmp));
|
---|
| 736 | }else if(event && tmp<event->name_map.size()){
|
---|
| 737 | frogObjects_->selectedObject_ = event->name_map[tmp];
|
---|
| 738 | }
|
---|
| 739 | }
|
---|
| 740 | }
|
---|
| 741 | }
|
---|
| 742 |
|
---|
[100] | 743 | void LoadCard(const char* inputCard ){
|
---|
[95] | 744 | if(Card)delete Card;
|
---|
[100] | 745 | Card = new FROG_ReadCards(AbsolutePath.c_str(),inputCard);
|
---|
| 746 |
|
---|
[95] | 747 | Card->GetInt (&updateVisFileTime , "updateVisFileTime");
|
---|
| 748 |
|
---|
| 749 | Card->GetInt (&eventNumber , "Event_Number");
|
---|
| 750 | Card->GetInt (&eventTime , "Event_Time");
|
---|
| 751 | if(eventTime>=0)glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);
|
---|
| 752 |
|
---|
| 753 | Card->GetChar (SCREENSHOT_FORMAT,256, "Screenshot_Format");
|
---|
[100] | 754 | Card->GetChar (ScreenShotName,1024 , "Screenshot_Name");
|
---|
[95] | 755 |
|
---|
| 756 | Card->GetColor(BackGround_Color , "BackGround_Color");
|
---|
| 757 | Card->GetColor(Txt_Color , "Txt_Color");
|
---|
| 758 | Card->GetColor(Framework_Color , "Framework_Color");
|
---|
| 759 | Card->GetFloat(&Framework_Thickness , "Framework_Thickness");
|
---|
| 760 | Card->GetColor(ZAxis_Color , "ZAxis_Color");
|
---|
| 761 | Card->GetFloat(&ZAxis_Thickness , "ZAxis_Thickness");
|
---|
| 762 |
|
---|
| 763 | Geometry_WireFrame = Card->GetBool(Geometry_WireFrame,"Geometry_WireFrame");
|
---|
| 764 | }
|
---|
| 765 |
|
---|
| 766 |
|
---|
| 767 | void AutomaticEventChanging (int Extra)
|
---|
| 768 | {
|
---|
| 769 | if(mLoading || (!mAutomaticShooter && (ViewMenu->State || !mEventChanging))){glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);return;}
|
---|
| 770 |
|
---|
| 771 | frogObjects_->selectedObject_ = NULL;
|
---|
| 772 | if(mAutomaticShooter){
|
---|
| 773 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
| 774 | ActiveViews[j]->MarkForUpdate();
|
---|
| 775 | }
|
---|
| 776 | display();
|
---|
| 777 | display();
|
---|
| 778 | char temp[255]; sprintf(temp,"AutomaticShooter_%04i.%s",SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
| 779 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, display);
|
---|
| 780 | SCREENSHOT++;
|
---|
| 781 | }
|
---|
| 782 |
|
---|
| 783 | if(!mLoading && events){
|
---|
| 784 | if(event && eventNumber>=0){event = events->NextEvent();
|
---|
| 785 | }else if(eventNumber<0 ){event = events->GoToEvent(-1);}
|
---|
| 786 | }
|
---|
| 787 | if(!mAutomaticShooter){
|
---|
[100] | 788 | if(eventTime>=0)glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);
|
---|
[95] | 789 | }else{
|
---|
| 790 | if(mAutomaticShooter_LastEvent == events->Current_Event){
|
---|
| 791 | mAutomaticShooter = false;
|
---|
| 792 | }else{
|
---|
| 793 | glutTimerFunc(25,AutomaticEventChanging, 0);
|
---|
| 794 | }
|
---|
| 795 | }
|
---|
| 796 |
|
---|
| 797 | EventI++;
|
---|
[100] | 798 | if(event && events)printf("%8u | Run %4i Event %4i | Event %4i in File Containing %4i Events\n",EventI,event->NRun_,event->NEvent_,events->Current_Event, (int)events->NumberOfEvents());
|
---|
[95] | 799 | }
|
---|
| 800 |
|
---|
| 801 |
|
---|
| 802 | int main (int argc, char *argv[])
|
---|
| 803 | {
|
---|
[100] | 804 | string ExePath = string(argv[0]);
|
---|
| 805 | unsigned int n = ExePath.rfind("frog");
|
---|
| 806 | AbsolutePath = ExePath.substr(0,n);
|
---|
[95] | 807 |
|
---|
| 808 |
|
---|
| 809 | for(int i=1;i<argc;i++){
|
---|
| 810 | unsigned int len = strlen(argv[i]);
|
---|
| 811 |
|
---|
| 812 | //Change to lowerCase
|
---|
| 813 | char LowCase[2048];
|
---|
| 814 | strcpy(LowCase,argv[i]);
|
---|
| 815 | for(unsigned int j=0;j<len;j++){
|
---|
| 816 | if(LowCase[j]>=65 && LowCase[j]<=90)LowCase[j]+=32;
|
---|
| 817 | }
|
---|
| 818 |
|
---|
| 819 | if( strcmp(LowCase,"-shooter" )==0){SHOOTER = true;
|
---|
| 820 | }else if(strcmp(LowCase,"-s" )==0){SCREENSAVER = true;
|
---|
[100] | 821 | }else if(strcmp(LowCase,"-v" )==0){
|
---|
| 822 | printf("Fast and Realistic OpenGl Event Display : FROG\n");
|
---|
| 823 | printf("Version : %6.3f of %s\n",FROG_VERSION,__DATE__);
|
---|
| 824 | printf("Authors List : \n");
|
---|
| 825 | printf("%s\n",FROG_AUTHORLIST);
|
---|
| 826 | exit(0);
|
---|
| 827 | }else if(strcmp(LowCase,"-c" )==0 && i+1<argc){
|
---|
| 828 | i++; inputConfig = string(argv[i]);
|
---|
| 829 | }else if(len>=4 && strcmp(LowCase+len-4,".vis" )==0){inputVisFileFromCommand.push_back(string(argv[i]));
|
---|
| 830 | }else if(len>=7 && strcmp(LowCase+len-7,".vis.gz")==0){inputVisFileFromCommand.push_back(string(argv[i]));
|
---|
[95] | 831 | }else{
|
---|
| 832 | printf("\n");
|
---|
[100] | 833 | printf("#######################################################################\n");
|
---|
| 834 | printf("# http://projects.hepforge.org/frog/ #\n");
|
---|
| 835 | printf("# Please have a look at the website for latest versions and news #\n");
|
---|
| 836 | printf("# Also register to the Frog mailing list if you are not a member yet #\n");
|
---|
| 837 | printf("#######################################################################\n");
|
---|
| 838 | printf("# HELP SCREEN #\n");
|
---|
| 839 | printf("#######################################################################\n");
|
---|
| 840 | printf("# Supported Commands are : #\n");
|
---|
| 841 | printf("# filename.vis --> open the file : filename.vis #\n");
|
---|
| 842 | printf("# filename.vis.gz --> open the file : filename.vis.gz #\n");
|
---|
| 843 | printf("# -help --> Print this screen #\n");
|
---|
| 844 | printf("# -v --> Print Version and Other Info #\n");
|
---|
| 845 | printf("# -s --> ScreenSaver Mode #\n");
|
---|
| 846 | printf("# -c <config.txt> --> Specify the Frog Configuration Card to use #\n");
|
---|
| 847 | printf("# -shooter --> Scan events, make a screenshot and exit #\n");
|
---|
| 848 | printf("#######################################################################\n");
|
---|
| 849 | printf("\n");
|
---|
[95] | 850 | exit(0);
|
---|
| 851 | }
|
---|
| 852 | }
|
---|
| 853 |
|
---|
| 854 | // initialisation de GLUT
|
---|
| 855 | glutInit (&argc, argv);
|
---|
| 856 |
|
---|
| 857 | // création d'une fenêtre OpenGL RVBA avec en simple mémoire tampon
|
---|
| 858 | // avec un tampon de profondeur
|
---|
| 859 | glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
|
---|
| 860 | glutInitWindowSize (WINDOW_WIDTH, WINDOW_HEIGHT);
|
---|
| 861 | glutCreateWindow ("FROG Displayer");
|
---|
| 862 |
|
---|
| 863 | // Charge le logo en mémoire
|
---|
[100] | 864 | LoadTexture((unsigned int*)&LogoTexture ,FROG_PATH::GetGlobalPath("Resources/Frog_Logo.png" ,AbsolutePath.c_str()).c_str());
|
---|
| 865 | LoadTexture((unsigned int*)&LogoTxtTexture ,FROG_PATH::GetGlobalPath("Resources/Frog_LogoTxt.png",AbsolutePath.c_str()).c_str());
|
---|
[95] | 866 |
|
---|
| 867 | // initialisation des fonctions callback appelées par glut
|
---|
| 868 | // pour respectivement le redimensionnement de la fenêtre
|
---|
| 869 | // et le rendu de la scène
|
---|
| 870 | glutReshapeFunc (reshape);
|
---|
| 871 | glutDisplayFunc (Loading);
|
---|
| 872 | glutIdleFunc (Loading);
|
---|
| 873 |
|
---|
| 874 |
|
---|
| 875 | // initialisation of GLEW (OpenGL Extension Wrangler Library)
|
---|
| 876 | GLenum err = glewInit();
|
---|
| 877 | if(GLEW_OK != err){
|
---|
| 878 | printf("Problem: glewInit failed, something is seriously wrong\n");
|
---|
| 879 | printf("Error: %s\n", glewGetErrorString(err));
|
---|
| 880 | exit(0);
|
---|
| 881 | }
|
---|
| 882 |
|
---|
| 883 | // entre dans la boucle d'évènements
|
---|
| 884 | glutMainLoop ();
|
---|
| 885 | return 0;
|
---|
| 886 | }
|
---|
| 887 |
|
---|
| 888 |
|
---|
| 889 |
|
---|
| 890 |
|
---|