G4RayTracerViewer Class Reference

#include <G4RayTracerViewer.hh>

Inheritance diagram for G4RayTracerViewer:

G4VViewer

Public Member Functions

 G4RayTracerViewer (G4VSceneHandler &, const G4String &name, G4TheRayTracer *=0)
virtual ~G4RayTracerViewer ()
void SetView ()
void ClearView ()
void DrawView ()
G4TheRayTracerGetTracer ()

Protected Attributes

G4int fFileCount
G4TheRayTracertheTracer

Detailed Description

Definition at line 38 of file G4RayTracerViewer.hh.


Constructor & Destructor Documentation

G4RayTracerViewer::G4RayTracerViewer ( G4VSceneHandler ,
const G4String name,
G4TheRayTracer = 0 
)

Definition at line 41 of file G4RayTracerViewer.cc.

References G4TheRayTracer::SetNColumn().

00043                          :
00044   G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(), name),
00045   fFileCount(0)
00046 {
00047   theTracer = aTracer;
00048   if (!aTracer) theTracer = new G4TheRayTracer;
00049   theTracer->SetNColumn(fVP.GetWindowSizeHintX());
00050   theTracer->SetNRow(fVP.GetWindowSizeHintY());
00051 }

G4RayTracerViewer::~G4RayTracerViewer (  )  [virtual]

Definition at line 53 of file G4RayTracerViewer.cc.

00053 {}


Member Function Documentation

void G4RayTracerViewer::ClearView (  )  [virtual]

Implements G4VViewer.

Definition at line 85 of file G4RayTracerViewer.cc.

00085 {}

void G4RayTracerViewer::DrawView (  )  [virtual]

Implements G4VViewer.

Definition at line 87 of file G4RayTracerViewer.cc.

References fFileCount, G4VViewer::fShortName, G4VViewer::fVP, G4cout, G4endl, G4ViewParameters::GetFieldHalfAngle(), G4ViewParameters::SetFieldHalfAngle(), SetView(), theTracer, and G4TheRayTracer::Trace().

00088 {
00089   // Trap recursive call
00090   static G4bool called = false;
00091   if (called) return;
00092   called = true;
00093 
00094   if (fVP.GetFieldHalfAngle() == 0.) { // Orthogonal (parallel) projection.
00095     G4double fieldHalfAngle = perMillion;
00096     fVP.SetFieldHalfAngle(fieldHalfAngle);
00097     G4cout << 
00098       "WARNING: G4RayTracerViewer::DrawView: true orthogonal projection"
00099       "\n  not yet implemented.  Doing a \"long shot\", i.e., a perspective"
00100       "\n  projection with a half field angle of "
00101            << fieldHalfAngle <<
00102       " radians."
00103            << G4endl;
00104     SetView();  // Special graphics system - bypass ProcessView().
00105     fVP.SetFieldHalfAngle(0.);
00106   }
00107   else {
00108     SetView();  // Special graphics system - bypass ProcessView().
00109   }
00110   std::ostringstream filename;
00111   filename << "g4RayTracer." << fShortName << '_' << fFileCount++ << ".jpeg";
00112   theTracer->Trace(filename.str());
00113 
00114   // Reset call flag
00115   called = false;
00116 }

G4TheRayTracer* G4RayTracerViewer::GetTracer (  )  [inline]

Definition at line 47 of file G4RayTracerViewer.hh.

References theTracer.

Referenced by G4RTMessenger::SetNewValue().

00047 {return theTracer;}

void G4RayTracerViewer::SetView (  )  [virtual]

Implements G4VViewer.

Definition at line 55 of file G4RayTracerViewer.cc.

References G4VViewer::fSceneHandler, G4VViewer::fVP, G4ViewParameters::GetActualLightpointDirection(), G4ViewParameters::GetBackgroundColour(), G4ViewParameters::GetCameraDistance(), G4ViewParameters::GetCurrentTargetPoint(), G4Scene::GetExtent(), G4VisExtent::GetExtentRadius(), G4ViewParameters::GetFrontHalfHeight(), G4TheRayTracer::GetNColumn(), G4ViewParameters::GetNearDistance(), G4VSceneHandler::GetScene(), G4Scene::GetStandardTargetPoint(), G4ViewParameters::GetUpVector(), G4ViewParameters::GetViewpointDirection(), G4TheRayTracer::SetBackgroundColour(), G4TheRayTracer::SetEyePosition(), G4TheRayTracer::SetLightDirection(), G4TheRayTracer::SetTargetPosition(), G4TheRayTracer::SetUpVector(), and theTracer.

Referenced by DrawView().

00056 {
00057   // Get radius of scene, etc.  (See G4OpenGLViewer::SetView().)
00058   // Note that this procedure properly takes into account zoom, dolly and pan.
00059   const G4Point3D& targetPoint
00060     = fSceneHandler.GetScene()->GetStandardTargetPoint()
00061     + fVP.GetCurrentTargetPoint();
00062   G4double radius =  // See G4ViewParameters for following procedure.
00063     fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
00064   if(radius<=0.) radius = 1.;
00065   const G4double cameraDistance = fVP.GetCameraDistance(radius);
00066   const G4Point3D cameraPosition =
00067     targetPoint + cameraDistance * fVP.GetViewpointDirection().unit();
00068   const G4double nearDistance  = fVP.GetNearDistance(cameraDistance,radius);
00069   const G4double frontHalfHeight = fVP.GetFrontHalfHeight(nearDistance,radius);
00070   const G4double frontHalfAngle = std::atan(frontHalfHeight / nearDistance);
00071 
00072   // Calculate and set ray tracer parameters.
00073   theTracer->
00074     SetViewSpan(200. * frontHalfAngle / theTracer->GetNColumn());
00075   theTracer->SetTargetPosition(targetPoint);
00076   theTracer->SetEyePosition(cameraPosition);
00077   theTracer->SetUpVector(fVP.GetUpVector());
00078   const G4Vector3D
00079     actualLightpointDirection(-fVP.GetActualLightpointDirection());
00080   theTracer->SetLightDirection(actualLightpointDirection);
00081   theTracer->SetBackgroundColour(fVP.GetBackgroundColour());
00082 }


Field Documentation

G4int G4RayTracerViewer::fFileCount [protected]

Definition at line 49 of file G4RayTracerViewer.hh.

Referenced by DrawView().

G4TheRayTracer* G4RayTracerViewer::theTracer [protected]

Definition at line 50 of file G4RayTracerViewer.hh.

Referenced by DrawView(), GetTracer(), and SetView().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:16 2013 for Geant4 by  doxygen 1.4.7