Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/FukuiRenderer/src/G4DAWNFILEViewer.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/FukuiRenderer/src/G4DAWNFILEViewer.cc (Version 11.3.0) and /visualization/FukuiRenderer/src/G4DAWNFILEViewer.cc (Version ReleaseNotes)


** Warning: Cannot open xref database.

  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 //                                                
 28 // Satoshi TANAKA                                 
 29 // DAWNFILE view - opens window, hard copy, et    
 30                                                   
 31 #define __G_ANSI_C__                              
 32 #define G4DAWNFILE_STRUCTURE_PRIORITY 1.          
 33                                                   
 34 // #define DEBUG_FR_VIEW                          
 35                                                   
 36 #include "G4ios.hh"                               
 37 #include <stdio.h>                                
 38 #include <string.h>                               
 39 #include <assert.h>                               
 40                                                   
 41 #include "G4VisManager.hh"                        
 42 #include "G4Scene.hh"                             
 43 #include "G4Vector3D.hh"                          
 44 #include "G4VisExtent.hh"                         
 45 #include "G4LogicalVolume.hh"                     
 46 #include "G4VSolid.hh"                            
 47 #include "G4PhysicalConstants.hh"                 
 48                                                   
 49 #include "G4FRConst.hh"                           
 50 #include "G4DAWNFILE.hh"                          
 51 #include "G4DAWNFILESceneHandler.hh"              
 52 #include "G4DAWNFILEViewer.hh"                    
 53                                                   
 54 //----- constants                                 
 55 const char FR_ENV_MULTI_WINDOW[]  = "G4DAWN_MU    
 56 const char FR_ENV_MULTI_WINDOW2[] = "G4DAWNFIL    
 57                                                   
 58 //----- G4DAWNFILEViewer, constructor             
 59 G4DAWNFILEViewer::G4DAWNFILEViewer(G4DAWNFILES    
 60                                    const G4Str    
 61   : G4VViewer(sceneHandler, sceneHandler.Incre    
 62   , fSceneHandler(sceneHandler)                   
 63 {                                                 
 64   // Set a g4.prim-file viewer                    
 65   strcpy(fG4PrimViewer, "dawn");                  
 66   if(std::getenv("G4DAWNFILE_VIEWER") != NULL)    
 67   {                                               
 68     strcpy(fG4PrimViewer, std::getenv("G4DAWNF    
 69   }                                               
 70                                                   
 71   // string for viewer invocation                 
 72   if(!strcmp(fG4PrimViewer, "NONE"))              
 73   {                                               
 74     strcpy(fG4PrimViewerInvocation, "");          
 75   }                                               
 76   else                                            
 77   {                                               
 78     strcpy(fG4PrimViewerInvocation, fG4PrimVie    
 79     strcat(fG4PrimViewerInvocation, " ");         
 80     strcat(fG4PrimViewerInvocation, fSceneHand    
 81   }                                               
 82                                                   
 83   // Set a PostScript Viewer                      
 84   //  strcpy( fPSViewer, "ghostview" );           
 85   strcpy(fPSViewer, "gv");                        
 86   if(std::getenv("G4DAWNFILE_PS_VIEWER") != NU    
 87   {                                               
 88     strcpy(fPSViewer, std::getenv("G4DAWNFILE_    
 89   }                                               
 90 }                                                 
 91                                                   
 92 //----- G4DAWNFILEViewer, destructor              
 93 G4DAWNFILEViewer::~G4DAWNFILEViewer() {}          
 94                                                   
 95 //----- G4DAWNFILEViewer::SetView ()              
 96 void G4DAWNFILEViewer::SetView()                  
 97 {                                                 
 98 #if defined DEBUG_FR_VIEW                         
 99   if(G4VisManager::GetVerbosity() >= G4VisMana    
100     G4cout << "***** G4DAWNFILEViewer::SetView    
101 #endif                                            
102   // Do nothing, since DAWN is running as a di    
103   // SendViewParameters () will do this job in    
104 }                                                 
105                                                   
106 //----- G4DAWNFILEViewer::ClearView()             
107 void G4DAWNFILEViewer::ClearView(void)            
108 {                                                 
109 #if defined DEBUG_FR_VIEW                         
110   if(G4VisManager::GetVerbosity() >= G4VisMana    
111     G4cout << "***** G4DAWNFILEViewer::ClearVi    
112 #endif                                            
113   if(fSceneHandler.fPrimDest.IsOpen())            
114   {                                               
115     fSceneHandler.fPrimDest.Close();              
116     // Re-open with same filename...              
117     fSceneHandler.fPrimDest.Open(fSceneHandler    
118     fSceneHandler.SendStr(FR_G4_PRIM_HEADER);     
119     fSceneHandler.FRflag_in_modeling = false;     
120     fSceneHandler.FRBeginModeling();              
121   }                                               
122 }                                                 
123                                                   
124 //----- G4DAWNFILEViewer::DrawView ()             
125 void G4DAWNFILEViewer::DrawView()                 
126 {                                                 
127 #if defined DEBUG_FR_VIEW                         
128   if(G4VisManager::GetVerbosity() >= G4VisMana    
129     G4cout << "***** G4DAWNFILEViewer::DrawVie    
130 #endif                                            
131   //-----                                         
132   fSceneHandler.FRBeginModeling();                
133                                                   
134   //----- Always visit G4 kernel                  
135   NeedKernelVisit();                              
136                                                   
137   //----- Draw                                    
138   ProcessView();                                  
139                                                   
140 }  // G4DAWNFILEViewer::DrawView ()               
141                                                   
142 //----- G4DAWNFILEViewer::ShowView()              
143 void G4DAWNFILEViewer::ShowView(void)             
144 {                                                 
145 #if defined DEBUG_FR_VIEW                         
146   if(G4VisManager::GetVerbosity() >= G4VisMana    
147     G4cout << "***** G4DAWNFILEViewer::ShowVie    
148 #endif                                            
149                                                   
150   if(fSceneHandler.FRIsInModeling())              
151   {                                               
152     //----- End of modeling                       
153     // !EndModeling, !DrawAll, !CloseDevice,      
154     // close g4.prim                              
155     fSceneHandler.FREndModeling();                
156                                                   
157     //----- Output DAWN GUI file                  
158     SendViewParameters();                         
159                                                   
160     //----- string for viewer invocation          
161     if(!strcmp(fG4PrimViewer, "NONE"))            
162     {                                             
163       strcpy(fG4PrimViewerInvocation, "");        
164     }                                             
165     else                                          
166     {                                             
167       strcpy(fG4PrimViewerInvocation, fG4PrimV    
168       strcat(fG4PrimViewerInvocation, " ");       
169       strcat(fG4PrimViewerInvocation, fSceneHa    
170     }                                             
171                                                   
172     //----- Invoke DAWN                           
173     G4cout << G4endl;                             
174     if(false == G4FRofstream::DoesFileExist(fS    
175     {                                             
176       G4cout << "ERROR: Failed to generate fil    
177       G4cout << fSceneHandler.GetG4PrimFileNam    
178     }                                             
179     else if(strcmp(GetG4PrimViewerInvocation()    
180     {                                             
181       G4cout << "File  " << fSceneHandler.GetG    
182       G4cout << "  is generated." << G4endl;      
183       G4cout << GetG4PrimViewerInvocation() <<    
184       int iErr = system(GetG4PrimViewerInvocat    
185       if(iErr != 0)                               
186       {                                           
187         G4ExceptionDescription ed;                
188         ed << "Error " << iErr << " when calli    
189            << GetG4PrimViewerInvocation() << "    
190         G4Exception("G4DAWNFILEViewer::ShowVie    
191                     ed);                          
192       }                                           
193     }                                             
194     else                                          
195     {  // no view, i.e., only file generation     
196       G4cout << "File  " << fSceneHandler.GetG    
197       G4cout << "  is generated." << G4endl;      
198       G4cout << "No viewer is invoked." << G4e    
199     }                                             
200   }                                               
201                                                   
202 }  // G4DAWNFILEViewer::ShowView()                
203                                                   
204 //----- G4DAWNFILEViewer::SendDrawingStyleToDA    
205 void G4DAWNFILEViewer::SendDrawingStyleToDAWNG    
206 {                                                 
207   ///////////////////////                         
208   //#if defined DEBUG_FR_VIEW                     
209   //  G4cout << "***** G4DAWNFILEViewer::SendD    
210   //#endif                                        
211   //////////////////////                          
212                                                   
213   G4int style = fVP.GetDrawingStyle();            
214                                                   
215   enum                                            
216   {                                               
217     FR_WIREFRAME_STYLE        = 1,                
218     FR_WF_STORED_STYLE        = 2,                
219     FR_HID_STYLE              = 3,                
220     FR_HID2_STYLE             = 4,                
221     FR_HID3_STYLE             = 5,                
222     FR_DRAWING_MODE_END_STYLE = 6                 
223   };                                              
224                                                   
225   switch(style)                                   
226   {                                               
227     case G4ViewParameters::wireframe:             
228       out << FR_WIREFRAME_STYLE << G4endl;        
229       break;                                      
230     case G4ViewParameters::hlr:                   
231       out << FR_HID2_STYLE << G4endl;  // LINE    
232       break;                                      
233     case G4ViewParameters::hsr:                   
234     case G4ViewParameters::hlhsr:                 
235       out << FR_HID_STYLE << G4endl;  // SURFA    
236       break;                                      
237     default:                                      
238       out << FR_WIREFRAME_STYLE << G4endl;        
239       break;                                      
240   }                                               
241                                                   
242 }  // G4DAWNFILEViewer::SendDrawingStyle()        
243                                                   
244 //-----                                           
245 void G4DAWNFILEViewer::SendViewParameters()       
246 {                                                 
247   // Calculates view representation based on e    
248   // viewed and (initial) direction of camera.    
249   // later due to user interaction via visuali    
250                                                   
251 #if defined DEBUG_FR_VIEW                         
252   if(G4VisManager::GetVerbosity() >= G4VisMana    
253   {                                               
254     G4cout << "***** G4DAWNFILEViewer::SendVie    
255     G4cout << "(GUI parameters)" << G4endl;       
256   }                                               
257 #endif                                            
258                                                   
259   //----- Magic number to decide camera distan    
260   const G4double HOW_FAR        = 1000.0;  //     
261   const G4double MIN_HALF_ANGLE = 0.01;           
262   const G4double MAX_HALF_ANGLE = 0.499 * pi;     
263                                                   
264   //----- CALC camera distance                    
265   //..... Note: Camera cannot enter inside obj    
266   G4double camera_distance;                       
267   G4double radius = fSceneHandler.GetScene()->    
268                                                   
269   G4double half_view_angle = std::fabs(fVP.Get    
270   if(half_view_angle > MAX_HALF_ANGLE)            
271   {                                               
272     half_view_angle = MAX_HALF_ANGLE;             
273   }                                               
274                                                   
275   if(half_view_angle < MIN_HALF_ANGLE)            
276   {                                               
277     //----- infinity (or ortho projection)        
278     camera_distance = radius * HOW_FAR;           
279   }                                               
280   else                                            
281   {                                               
282     //----- Calc camera distance from half vie    
283     camera_distance = radius / std::sin(half_v    
284     camera_distance -= fVP.GetDolly();            
285   }                                               
286                                                   
287   if(camera_distance < radius)                    
288   {                                               
289     if(G4VisManager::GetVerbosity() >= G4VisMa    
290     {                                             
291       G4cout << "WARNING from DAWNFILE driver:    
292       G4cout << "  Camera cannot enter inside     
293     }                                             
294     camera_distance = radius;                     
295   }                                               
296                                                   
297   //----- CALC camera direction                   
298   const G4Vector3D& camera_direction = fVP.Get    
299   const G4double v_angle             = (180.0     
300   const G4double h_angle             = (180.0     
301                                                   
302   //########### Generation of the file .DAWN.h    
303   //-----                                         
304   std::ofstream gui_out(".DAWN_1.history");       
305                                                   
306   // ######### P1                                 
307                                                   
308   //----- camera position                         
309   gui_out << camera_distance << G4endl;           
310   gui_out << v_angle << G4endl;                   
311   gui_out << h_angle << G4endl;                   
312   gui_out << "0" << G4endl;  // auto target       
313                                                   
314   //----- target point                            
315   const G4Point3D& target_point =                 
316     fSceneHandler.GetScene()->GetStandardTarge    
317     fVP.GetCurrentTargetPoint();                  
318   gui_out << target_point.x() << G4endl;          
319   gui_out << target_point.y() << G4endl;          
320   gui_out << target_point.z() << G4endl;          
321                                                   
322   //----- Magnification                           
323   const G4double zoom_factor = fVP.GetZoomFact    
324   if(half_view_angle < MIN_HALF_ANGLE)            
325   {                                               
326     gui_out << zoom_factor << G4endl;             
327   }                                               
328   else                                            
329   {                                               
330     const G4double FR_HALF_SCREEN_SIZE = 0.5;     
331     G4double focal_distance = FR_HALF_SCREEN_S    
332     focal_distance *= zoom_factor;                
333                                                   
334     gui_out << "fd" << focal_distance << G4end    
335   }                                               
336   SendDrawingStyleToDAWNGUI(gui_out);  // gui_    
337   gui_out << "0.001" << G4endl;        // 3D T    
338   gui_out << "0" << G4endl;            // not     
339                                                   
340   // ######### P2                                 
341   gui_out << 1 << G4endl;  // Source light        
342   gui_out << 1 << G4endl;                         
343   gui_out << 1 << G4endl;                         
344   gui_out << 0.5 << G4endl;  // Ambient light     
345   gui_out << 0.5 << G4endl;                       
346   gui_out << 0.5 << G4endl;                       
347   gui_out << 19.0 << G4endl;  // Light directi    
348   gui_out << 71.0 << G4endl;  // Light directi    
349                                                   
350   // ######### P3                                 
351   gui_out << 0.1 << G4endl;   // Real edge wid    
352   gui_out << 0.1 << G4endl;   // outline   wid    
353   gui_out << 0.1 << G4endl;   // aux edge  wid    
354   gui_out << 3 << G4endl;     // aux edge  sty    
355   gui_out << 70.0 << G4endl;  // aux-edge thre    
356   gui_out << 0.1 << G4endl;   // line width       
357   gui_out << 0 << G4endl;     // haloing          
358   gui_out << 1 << G4endl;     // Dashed edged     
359                                                   
360   //######### P4                                  
361   //----- drawing device                          
362   //  enum {PS=1, XWIN=2, PS2=3, XWIN2=4, OPEN    
363   if(((std::getenv(FR_ENV_MULTI_WINDOW) != NUL    
364       (strcmp(std::getenv(FR_ENV_MULTI_WINDOW)    
365      ((std::getenv(FR_ENV_MULTI_WINDOW2) != NU    
366       (strcmp(std::getenv(FR_ENV_MULTI_WINDOW2    
367   {                                               
368     gui_out << 2 << G4endl;  // OpenWindow        
369   }                                               
370   else                                            
371   {                                               
372     gui_out << 1 << G4endl;  // Invoke PS view    
373   }                                               
374                                                   
375   gui_out << GetPSViewer() << G4endl;  // PS v    
376   gui_out << 1 << G4endl;              // Do n    
377   gui_out << 0 << G4endl;              // Non-    
378                                                   
379   gui_out.close();                                
380   //########### end of generating file .DAWN.h    
381 }                                                 
382