Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DAWNFILEViewer Class Reference

#include <G4DAWNFILEViewer.hh>

+ Inheritance diagram for G4DAWNFILEViewer:

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 ()
 
virtual void SetView ()=0
 
virtual void ClearView ()=0
 
virtual void DrawView ()=0
 
void RefreshView ()
 
virtual void ShowView ()
 
virtual void FinishView ()
 
const G4StringGetName () const
 
const G4StringGetShortName () const
 
void SetName (const G4String &)
 
G4int GetViewId () const
 
G4VSceneHandlerGetSceneHandler () const
 
const G4ViewParametersGetViewParameters () const
 
const G4ViewParametersGetDefaultViewParameters () 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::G4DAWNFILEViewer ( G4DAWNFILESceneHandler scene,
const G4String name = "" 
)

Definition at line 63 of file G4DAWNFILEViewer.cc.

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}

◆ ~G4DAWNFILEViewer()

G4DAWNFILEViewer::~G4DAWNFILEViewer ( )
virtual

Definition at line 97 of file G4DAWNFILEViewer.cc.

98{}

Member Function Documentation

◆ ClearView()

void G4DAWNFILEViewer::ClearView ( void  )
virtual

Implements G4VViewer.

Definition at line 114 of file G4DAWNFILEViewer.cc.

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}
const char FR_G4_PRIM_HEADER[]
Definition: G4FRConst.hh:38
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
void SendStr(const char *char_string)
void Open(const char *filename)
Definition: G4FRofstream.hh:74
G4bool IsOpen()
Definition: G4FRofstream.hh:60
static Verbosity GetVerbosity()

◆ DrawView()

void G4DAWNFILEViewer::DrawView ( )
virtual

Implements G4VViewer.

Definition at line 132 of file G4DAWNFILEViewer.cc.

133{
134#if defined DEBUG_FR_VIEW
136 G4cout << "***** G4DAWNFILEViewer::DrawView () " << G4endl;
137#endif
138 //-----
139 fSceneHandler.FRBeginModeling() ;
140
141 //----- Always visit G4 kernel
143
144 //----- Draw
145 ProcessView () ;
146
147} // G4DAWNFILEViewer::DrawView ()
void ProcessView()
Definition: G4VViewer.cc:115
void NeedKernelVisit()
Definition: G4VViewer.cc:86

◆ GetG4PrimViewer()

const char * G4DAWNFILEViewer::GetG4PrimViewer ( )
inline

Definition at line 57 of file G4DAWNFILEViewer.hh.

57{ return fG4PrimViewer ;}

◆ GetG4PrimViewerInvocation()

const char * G4DAWNFILEViewer::GetG4PrimViewerInvocation ( )
inline

Definition at line 58 of file G4DAWNFILEViewer.hh.

58{ return fG4PrimViewerInvocation ;}

Referenced by ShowView().

◆ GetPSViewer()

const char * G4DAWNFILEViewer::GetPSViewer ( )
inline

Definition at line 59 of file G4DAWNFILEViewer.hh.

59{ return fPSViewer ;}

Referenced by SendViewParameters().

◆ SendDrawingStyleToDAWNGUI()

void G4DAWNFILEViewer::SendDrawingStyleToDAWNGUI ( std::ostream &  out)

Definition at line 207 of file G4DAWNFILEViewer.cc.

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:66
G4ViewParameters fVP
Definition: G4VViewer.hh:137
DrawingStyle GetDrawingStyle() const

Referenced by SendViewParameters().

◆ SendViewParameters()

void G4DAWNFILEViewer::SendViewParameters ( )

Definition at line 243 of file G4DAWNFILEViewer.cc.

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}
const char FR_ENV_MULTI_WINDOW2[]
const char FR_ENV_MULTI_WINDOW[]
double G4double
Definition: G4Types.hh:64
void SendDrawingStyleToDAWNGUI(std::ostream &out)
const char * GetPSViewer()
const G4VisExtent & GetExtent() const
const G4Point3D & GetStandardTargetPoint() const
G4Scene * GetScene() const
const G4Vector3D & GetViewpointDirection() const
const G4Point3D & GetCurrentTargetPoint() const
G4double GetFieldHalfAngle() const
G4double GetZoomFactor() const
G4double GetDolly() const
G4double GetExtentRadius() const
Definition: G4VisExtent.cc:73
BasicVector3D< T > unit() const
const G4double pi

Referenced by ShowView().

◆ SetView()

void G4DAWNFILEViewer::SetView ( )
virtual

Implements G4VViewer.

Definition at line 101 of file G4DAWNFILEViewer.cc.

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}

◆ ShowView()

void G4DAWNFILEViewer::ShowView ( void  )
virtual

Reimplemented from G4VViewer.

Definition at line 152 of file G4DAWNFILEViewer.cc.

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()
const char * GetG4PrimViewerInvocation()
static G4bool DoesFileExist(const char *filename)
Definition: G4FRofstream.hh:99

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