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 6.2.p2)


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