Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VRML2Viewer.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29// G4VRML2Viewer.cc
30// Satoshi Tanaka & Yasuhide Sawada
31
32#ifndef WIN32
33
34//=================//
35#ifdef G4VIS_BUILD_VRML_DRIVER
36//=================//
37
38
39//#define DEBUG_FR_VIEW
40
41#include <cmath>
42
43#include "G4VisManager.hh"
44#include "G4Scene.hh"
45#include "G4VRML2Viewer.hh"
47#include "G4VRML2.hh"
48#include "G4ios.hh"
49
50G4VRML2Viewer::G4VRML2Viewer(G4VRML2SceneHandler& sceneHandler, const G4String& name) :
51 G4VViewer(sceneHandler,
52 sceneHandler.IncrementViewCount(),
53 name),
54 fSceneHandler(sceneHandler),
55 fDest(sceneHandler.fDest)
56{
57 fViewHalfAngle = 0.5 * 0.785398 ; // 0.5 * 45*deg
58 fsin_VHA = std::sin ( fViewHalfAngle ) ;
59}
60
61G4VRML2Viewer::~G4VRML2Viewer()
62{}
63
64void G4VRML2Viewer::SetView()
65{
66#if defined DEBUG_FR_VIEW
68 G4cout << "***** G4VRML2Viewer::SetView(): No effects" << G4endl;
69#endif
70
71// Do nothing, since VRML a browser is running as a different process.
72// SendViewParameters () will do this job instead.
73
74}
75
76
77void G4VRML2Viewer::DrawView()
78{
79#if defined DEBUG_FR_VIEW
81 G4cout << "***** G4VRML2Viewer::DrawView()" << G4endl;
82#endif
83 fSceneHandler.VRMLBeginModeling() ;
84
85 // Viewpoint node
86 SendViewParameters();
87
88 // Here is a minimal DrawView() function.
89 NeedKernelVisit();
90 ProcessView();
91 FinishView();
92}
93
94void G4VRML2Viewer::ClearView(void)
95{
96#if defined DEBUG_FR_VIEW
98 G4cout << "***** G4VRML2Viewer::ClearView(): No effects" << G4endl;
99#endif
100}
101
102void G4VRML2Viewer::ShowView(void)
103{
104#if defined DEBUG_FR_VIEW
106 G4cout << "***** G4VRML2Viewer::ShowView()" << G4endl;
107#endif
108 fSceneHandler.VRMLEndModeling();
109}
110
111void G4VRML2Viewer::FinishView(void)
112{
113#if defined DEBUG_FR_VIEW
115 G4cout << "***** G4VRML2Viewer::FinishView(): No effects" << G4endl;
116#endif
117}
118
119void G4VRML2Viewer::SendViewParameters ()
120{
121 // Calculates view representation based on extent of object being
122 // viewed and (initial) direction of camera. (Note: it can change
123 // later due to user interaction via visualization system's GUI.)
124
125#if defined DEBUG_FR_VIEW
127 G4cout << "***** G4VRML2Viewer::SendViewParameters()\n";
128#endif
129 // error recovery
130 if ( fsin_VHA < 1.0e-6 ) { return ; }
131
132 // camera distance
133 G4double extent_radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
134 G4double camera_distance = extent_radius / fsin_VHA ;
135
136 // camera position on Z axis
137 const G4Point3D& target_point
138 = fSceneHandler.GetScene()->GetStandardTargetPoint()
139 + fVP.GetCurrentTargetPoint();
140 G4double E_z = target_point.z() + camera_distance;
141 G4Point3D E(0.0, 0.0, E_z );
142
143 // VRML codes are generated below
144 fDest << "\n";
145 fDest << "#---------- CAMERA" << "\n";
146 fDest << "Viewpoint {" << "\n";
147 fDest << "\t" << "position " ;
148 fDest << E.x() << " " ;
149 fDest << E.y() << " " ;
150 fDest << E.z() << "\n" ;
151 fDest << "}" << "\n";
152 fDest << "\n";
153
154}
155
156
157
158#endif
159#endif //WIN32
double G4double
Definition: G4Types.hh:64
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
static Verbosity GetVerbosity()