Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4DAWNFILEViewer Class Reference

#include <G4DAWNFILEViewer.hh>

Inheritance diagram for G4DAWNFILEViewer:
G4VViewer

Public Member Functions

 G4DAWNFILEViewer (G4DAWNFILESceneHandler &scene, const G4String &name="")
 
virtual ~G4DAWNFILEViewer ()
 
void SetView ()
 
void ClearView ()
 
void DrawView ()
 
void ShowView ()
 
void SendViewParameters ()
 
const char * GetG4PrimViewer ()
 
const char * GetG4PrimViewerInvocation ()
 
const char * GetPSViewer ()
 
void SendDrawingStyleToDAWNGUI (std::ostream &out)
 
- Public Member Functions inherited from G4VViewer
 G4VViewer (G4VSceneHandler &, G4int id, const G4String &name="")
 
virtual ~G4VViewer ()
 
virtual void Initialise ()
 
virtual void ResetView ()
 
void RefreshView ()
 
virtual void FinishView ()
 
const G4StringGetName () const
 
const G4StringGetShortName () const
 
void SetName (const G4String &)
 
G4int GetViewId () const
 
G4VSceneHandlerGetSceneHandler () const
 
const G4ViewParametersGetViewParameters () const
 
const G4ViewParametersGetDefaultViewParameters () const
 
virtual const std::vector
< G4ModelingParameters::VisAttributesModifier > * 
GetPrivateVisAttributesModifiers () const
 
void SetViewParameters (const G4ViewParameters &vp)
 
void SetDefaultViewParameters (const G4ViewParameters &vp)
 
const G4VisAttributesGetApplicableVisAttributes (const G4VisAttributes *) const
 
void SetNeedKernelVisit (G4bool need)
 
void NeedKernelVisit ()
 
void ProcessView ()
 

Additional Inherited Members

- Protected Attributes inherited from G4VViewer
G4VSceneHandlerfSceneHandler
 
G4int fViewId
 
G4String fName
 
G4String fShortName
 
G4ViewParameters fVP
 
G4ViewParameters fDefaultVP
 
G4bool fNeedKernelVisit
 

Detailed Description

Definition at line 40 of file G4DAWNFILEViewer.hh.

Constructor & Destructor Documentation

G4DAWNFILEViewer::G4DAWNFILEViewer ( G4DAWNFILESceneHandler scene,
const G4String name = "" 
)

Definition at line 63 of file G4DAWNFILEViewer.cc.

References G4DAWNFILESceneHandler::GetG4PrimFileName().

64  :
65  G4VViewer (sceneHandler,
66  sceneHandler.IncrementViewCount (),
67  name),
68  fSceneHandler (sceneHandler)
69 {
70  // Set a g4.prim-file viewer
71  strcpy( fG4PrimViewer, "dawn" );
72  if( getenv( "G4DAWNFILE_VIEWER" ) != NULL ) {
73  strcpy( fG4PrimViewer, getenv( "G4DAWNFILE_VIEWER" ) ) ;
74  }
75 
76  // string for viewer invocation
77  if ( !strcmp( fG4PrimViewer, "NONE" ) ) {
78 
79  strcpy( fG4PrimViewerInvocation, "" );
80  } else {
81 
82  strcpy( fG4PrimViewerInvocation, fG4PrimViewer );
83  strcat( fG4PrimViewerInvocation, " ");
84  strcat( fG4PrimViewerInvocation, fSceneHandler.GetG4PrimFileName() );
85  }
86 
87  // Set a PostScript Viewer
88 // strcpy( fPSViewer, "ghostview" );
89  strcpy( fPSViewer, "gv" );
90  if( getenv( "G4DAWNFILE_PS_VIEWER" ) != NULL ) {
91  strcpy( fPSViewer, getenv( "G4DAWNFILE_PS_VIEWER" ) ) ;
92  }
93 
94 }
const XML_Char * name
G4VViewer(G4VSceneHandler &, G4int id, const G4String &name="")
Definition: G4VViewer.cc:45
G4DAWNFILEViewer::~G4DAWNFILEViewer ( )
virtual

Definition at line 97 of file G4DAWNFILEViewer.cc.

98 {}

Member Function Documentation

void G4DAWNFILEViewer::ClearView ( void  )
virtual

Implements G4VViewer.

Definition at line 114 of file G4DAWNFILEViewer.cc.

References G4FRofstream::Close(), G4VisManager::errors, FR_G4_PRIM_HEADER, G4DAWNFILESceneHandler::FRBeginModeling(), G4cout, G4endl, G4VisManager::GetVerbosity(), G4FRofstream::IsOpen(), G4FRofstream::Open(), and G4DAWNFILESceneHandler::SendStr().

115 {
116 #if defined DEBUG_FR_VIEW
118  G4cout << "***** G4DAWNFILEViewer::ClearView (): No effects " << G4endl;
119 #endif
120  if (fSceneHandler.fPrimDest.IsOpen()) {
121  fSceneHandler.fPrimDest.Close();
122  // Re-open with same filename...
123  fSceneHandler.fPrimDest.Open(fSceneHandler.fG4PrimFileName);
124  fSceneHandler.SendStr( FR_G4_PRIM_HEADER );
125  fSceneHandler.FRflag_in_modeling = false;
126  fSceneHandler.FRBeginModeling();
127  }
128 }
void SendStr(const char *char_string)
void Open(const char *filename)
Definition: G4FRofstream.hh:74
G4bool IsOpen()
Definition: G4FRofstream.hh:60
const char FR_G4_PRIM_HEADER[]
Definition: G4FRConst.hh:38
G4GLOB_DLL std::ostream G4cout
static Verbosity GetVerbosity()
#define G4endl
Definition: G4ios.hh:61
void G4DAWNFILEViewer::DrawView ( )
virtual

Implements G4VViewer.

Definition at line 132 of file G4DAWNFILEViewer.cc.

References G4VisManager::errors, G4DAWNFILESceneHandler::FRBeginModeling(), G4cout, G4endl, G4VisManager::GetVerbosity(), G4VViewer::NeedKernelVisit(), and G4VViewer::ProcessView().

133 {
134 #if defined DEBUG_FR_VIEW
136  G4cout << "***** G4DAWNFILEViewer::DrawView () " << G4endl;
137 #endif
138  //-----
139  fSceneHandler.FRBeginModeling() ;
140 
141  //----- Always visit G4 kernel
142  NeedKernelVisit ();
143 
144  //----- Draw
145  ProcessView () ;
146 
147 } // G4DAWNFILEViewer::DrawView ()
G4GLOB_DLL std::ostream G4cout
static Verbosity GetVerbosity()
void NeedKernelVisit()
Definition: G4VViewer.cc:86
#define G4endl
Definition: G4ios.hh:61
void ProcessView()
Definition: G4VViewer.cc:115
const char* G4DAWNFILEViewer::GetG4PrimViewer ( )
inline

Definition at line 57 of file G4DAWNFILEViewer.hh.

57 { return fG4PrimViewer ;}
const char* G4DAWNFILEViewer::GetG4PrimViewerInvocation ( )
inline

Definition at line 58 of file G4DAWNFILEViewer.hh.

Referenced by ShowView().

58 { return fG4PrimViewerInvocation ;}
const char* G4DAWNFILEViewer::GetPSViewer ( )
inline

Definition at line 59 of file G4DAWNFILEViewer.hh.

Referenced by SendViewParameters().

59 { return fPSViewer ;}
void G4DAWNFILEViewer::SendDrawingStyleToDAWNGUI ( std::ostream &  out)

Definition at line 207 of file G4DAWNFILEViewer.cc.

References G4VViewer::fVP, G4endl, G4ViewParameters::GetDrawingStyle(), G4ViewParameters::hlhsr, G4ViewParameters::hlr, G4ViewParameters::hsr, and G4ViewParameters::wireframe.

Referenced by SendViewParameters().

208 {
209 ///////////////////////
210 //#if defined DEBUG_FR_VIEW
211 // G4cout << "***** G4DAWNFILEViewer::SendDrawingStyleToDAWNGUI()" << G4endl;
212 //#endif
213 //////////////////////
214 
215  G4int style = fVP.GetDrawingStyle();
216 
217  enum { FR_WIREFRAME_STYLE = 1, FR_WF_STORED_STYLE = 2,
218  FR_HID_STYLE = 3, FR_HID2_STYLE = 4,
219  FR_HID3_STYLE = 5, FR_DRAWING_MODE_END_STYLE = 6 };
220 
221  switch( style )
222  {
224  out << FR_WIREFRAME_STYLE << G4endl;
225  break;
227  out << FR_HID2_STYLE << G4endl; // LINE
228  break;
231  out << FR_HID_STYLE << G4endl; // SURFACE
232  break;
233  default:
234  out << FR_WIREFRAME_STYLE << G4endl;
235  break;
236  }
237 
238 } // G4DAWNFILEViewer::SendDrawingStyle()
int G4int
Definition: G4Types.hh:78
G4ViewParameters fVP
Definition: G4VViewer.hh:144
DrawingStyle GetDrawingStyle() const
#define G4endl
Definition: G4ios.hh:61
void G4DAWNFILEViewer::SendViewParameters ( )

Definition at line 243 of file G4DAWNFILEViewer.cc.

References G4VisManager::errors, FR_ENV_MULTI_WINDOW, FR_ENV_MULTI_WINDOW2, G4VViewer::fVP, G4cout, G4endl, G4ViewParameters::GetCurrentTargetPoint(), G4ViewParameters::GetDolly(), G4Scene::GetExtent(), G4VisExtent::GetExtentRadius(), G4ViewParameters::GetFieldHalfAngle(), GetPSViewer(), G4VSceneHandler::GetScene(), G4Scene::GetStandardTargetPoint(), G4VisManager::GetVerbosity(), G4ViewParameters::GetViewpointDirection(), G4ViewParameters::GetZoomFactor(), python.hepunit::pi, SendDrawingStyleToDAWNGUI(), HepGeom::BasicVector3D< T >::theta(), HepGeom::BasicVector3D< T >::unit(), HepGeom::BasicVector3D< T >::x(), HepGeom::BasicVector3D< T >::y(), and HepGeom::BasicVector3D< T >::z().

Referenced by ShowView().

244 {
245  // Calculates view representation based on extent of object being
246  // viewed and (initial) direction of camera. (Note: it can change
247  // later due to user interaction via visualization system's GUI.)
248 
249 #if defined DEBUG_FR_VIEW
251  G4cout << "***** G4DAWNFILEViewer::SendViewParameters() ";
252  G4cout << "(GUI parameters)" << G4endl;
253  }
254 #endif
255 
256  //----- Magic number to decide camera distance automatically
257  const G4double HOW_FAR = 1000.0 ; // to define "infinity"
258  const G4double MIN_HALF_ANGLE = 0.01 ;
259  const G4double MAX_HALF_ANGLE = 0.499 * pi ;
260 
261  //----- CALC camera distance
262  //..... Note: Camera cannot enter inside object
263  G4double camera_distance ;
264  G4double radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
265 
266  G4double half_view_angle = std::fabs ( fVP.GetFieldHalfAngle () ) ;
267  if( half_view_angle > MAX_HALF_ANGLE ) {
268  half_view_angle = MAX_HALF_ANGLE ;
269  }
270 
271  if( half_view_angle < MIN_HALF_ANGLE ) {
272  //----- infinity (or ortho projection)
273  camera_distance = radius * HOW_FAR ;
274  } else {
275  //----- Calc camera distance from half view angle
276  camera_distance = radius / std::sin ( half_view_angle );
277  camera_distance -= fVP.GetDolly();
278  }
279 
280  if ( camera_distance < radius ) {
282  G4cout << "WARNING from DAWNFILE driver:" << G4endl;
283  G4cout << " Camera cannot enter inside objects" << G4endl;
284  }
285  camera_distance = radius ;
286  }
287 
288  //----- CALC camera direction
289  const G4Vector3D& camera_direction \
291  const G4double v_angle = (180.0 / pi) * camera_direction.theta() ;
292  const G4double h_angle = (180.0 / pi) * camera_direction.phi () ;
293 
294 
295  //########### Generation of the file .DAWN.history for DAWN GUI
296  //-----
297  std::ofstream gui_out (".DAWN_1.history") ;
298 
299  // ######### P1
300 
301  //----- camera position
302  gui_out << camera_distance << G4endl;
303  gui_out << v_angle << G4endl ;
304  gui_out << h_angle << G4endl ;
305  gui_out << "0" << G4endl ; // auto target
306 
307  //----- target point
308  const G4Point3D& target_point
309  = fSceneHandler.GetScene()->GetStandardTargetPoint()
311  gui_out << target_point.x() << G4endl ;
312  gui_out << target_point.y() << G4endl ;
313  gui_out << target_point.z() << G4endl ;
314 
315  //----- Magnification
316  const G4double zoom_factor = fVP.GetZoomFactor();
317  if( half_view_angle < MIN_HALF_ANGLE ) {
318 
319  gui_out << zoom_factor << G4endl;
320 
321  } else {
322  const G4double FR_HALF_SCREEN_SIZE = 0.5 ;
323  G4double focal_distance \
324  = FR_HALF_SCREEN_SIZE / std::tan( half_view_angle );
325  focal_distance *= zoom_factor ;
326 
327  gui_out << "fd" << focal_distance << G4endl;
328 
329  }
330  SendDrawingStyleToDAWNGUI( gui_out ) ; // gui_out, viewing mode
331  gui_out << "0.001" << G4endl ; // 3D Tolerance
332  gui_out << "0" << G4endl ; // not display parameters
333 
334 
335  // ######### P2
336  gui_out << 1 << G4endl; // Source light
337  gui_out << 1 << G4endl;
338  gui_out << 1 << G4endl;
339  gui_out << 0.5 << G4endl; // Ambient light
340  gui_out << 0.5 << G4endl;
341  gui_out << 0.5 << G4endl;
342  gui_out << 19.0 << G4endl; // Light direction (Polar)
343  gui_out << 71.0 << G4endl; // Light direction (Azimuthal)
344 
345  // ######### P3
346  gui_out << 0.1 << G4endl; // Real edge width
347  gui_out << 0.1 << G4endl; // outline width
348  gui_out << 0.1 << G4endl; // aux edge width
349  gui_out << 3 << G4endl; // aux edge style
350  gui_out << 70.0<< G4endl; // aux-edge threshold angle
351  gui_out << 0.1 << G4endl; // line width
352  gui_out << 0 << G4endl; // haloing
353  gui_out << 1 << G4endl; // Dashed edged for back faces
354 
355  //######### P4
356  //----- drawing device
357  // enum {PS=1, XWIN=2, PS2=3, XWIN2=4, OPEN_GL=5, DEVICE_END=6};
358  if( ( ( getenv( FR_ENV_MULTI_WINDOW ) != NULL ) && \
359  ( strcmp( getenv( FR_ENV_MULTI_WINDOW ),"0" ) ) ) || \
360  ( ( getenv( FR_ENV_MULTI_WINDOW2 ) != NULL ) && \
361  ( strcmp( getenv( FR_ENV_MULTI_WINDOW2 ),"0" ) ) ) )
362  {
363  gui_out << 2 << G4endl; // OpenWindow
364  } else {
365  gui_out << 1 << G4endl; // Invoke PS viewer
366  }
367 
368  gui_out << GetPSViewer() << G4endl; // PS viewer
369  gui_out << 1 << G4endl ; // Do not add showpage
370  gui_out << 0 << G4endl ; // Non-append mode
371 
372  gui_out.close();
373  //########### end of generating file .DAWN.history
374 
375 
376 }
G4double GetZoomFactor() const
G4double GetDolly() const
BasicVector3D< T > unit() const
const char * GetPSViewer()
const G4Point3D & GetCurrentTargetPoint() const
const char FR_ENV_MULTI_WINDOW[]
G4double GetExtentRadius() const
Definition: G4VisExtent.cc:73
const G4Vector3D & GetViewpointDirection() const
void SendDrawingStyleToDAWNGUI(std::ostream &out)
G4GLOB_DLL std::ostream G4cout
const G4VisExtent & GetExtent() const
const G4Point3D & GetStandardTargetPoint() const
G4ViewParameters fVP
Definition: G4VViewer.hh:144
G4Scene * GetScene() const
static Verbosity GetVerbosity()
#define G4endl
Definition: G4ios.hh:61
G4double GetFieldHalfAngle() const
double G4double
Definition: G4Types.hh:76
const char FR_ENV_MULTI_WINDOW2[]
void G4DAWNFILEViewer::SetView ( )
virtual

Implements G4VViewer.

Definition at line 101 of file G4DAWNFILEViewer.cc.

References G4VisManager::errors, G4cout, G4endl, and G4VisManager::GetVerbosity().

102 {
103 #if defined DEBUG_FR_VIEW
105  G4cout << "***** G4DAWNFILEViewer::SetView(): No effects" << G4endl;
106 #endif
107 // Do nothing, since DAWN is running as a different process.
108 // SendViewParameters () will do this job instead.
109 }
G4GLOB_DLL std::ostream G4cout
static Verbosity GetVerbosity()
#define G4endl
Definition: G4ios.hh:61
void G4DAWNFILEViewer::ShowView ( void  )
virtual

Reimplemented from G4VViewer.

Definition at line 152 of file G4DAWNFILEViewer.cc.

References G4FRofstream::DoesFileExist(), G4VisManager::errors, G4DAWNFILESceneHandler::FREndModeling(), G4DAWNFILESceneHandler::FRIsInModeling(), G4cout, G4endl, G4DAWNFILESceneHandler::GetG4PrimFileName(), GetG4PrimViewerInvocation(), G4VisManager::GetVerbosity(), SendViewParameters(), and void().

153 {
154 #if defined DEBUG_FR_VIEW
156  G4cout << "***** G4DAWNFILEViewer::ShowView () " << G4endl;
157 #endif
158 
159  if( fSceneHandler.FRIsInModeling() )
160  {
161  //----- End of modeling
162  // !EndModeling, !DrawAll, !CloseDevice,
163  // close g4.prim
164  fSceneHandler.FREndModeling();
165 
166  //----- Output DAWN GUI file
168 
169  //----- string for viewer invocation
170  if ( !strcmp( fG4PrimViewer, "NONE" ) ) {
171 
172  strcpy( fG4PrimViewerInvocation, "" );
173  } else {
174 
175  strcpy( fG4PrimViewerInvocation, fG4PrimViewer );
176  strcat( fG4PrimViewerInvocation, " ");
177  strcat( fG4PrimViewerInvocation, fSceneHandler.GetG4PrimFileName() );
178  }
179 
180 
181  //----- Invoke DAWN
182  G4cout << G4endl ;
183  if( false == G4FRofstream::DoesFileExist( fSceneHandler.GetG4PrimFileName() ) )
184  {
185  G4cout << "ERROR: Failed to generate file ";
186  G4cout << fSceneHandler.GetG4PrimFileName() << G4endl;
187 
188  } else if( strcmp( GetG4PrimViewerInvocation(), "" ) )
189  {
190  G4cout << "File " << fSceneHandler.GetG4PrimFileName() ;
191  G4cout << " is generated." << G4endl;
193  (void) system( GetG4PrimViewerInvocation() );
194 
195  } else { // no view, i.e., only file generation
196  G4cout << "File " << fSceneHandler.GetG4PrimFileName() ;
197  G4cout << " is generated." << G4endl;
198  G4cout << "No viewer is invoked." << G4endl;
199  }
200 
201  }
202 
203 } // G4DAWNFILEViewer::ShowView()
static G4bool DoesFileExist(const char *filename)
Definition: G4FRofstream.hh:99
typedef void(XMLCALL *XML_ElementDeclHandler)(void *userData
G4GLOB_DLL std::ostream G4cout
const char * GetG4PrimViewerInvocation()
static Verbosity GetVerbosity()
#define G4endl
Definition: G4ios.hh:61

The documentation for this class was generated from the following files: