Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4RTMessenger.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//
28//
29//
30
31
32#include "G4RTMessenger.hh"
33
34#include "G4UIdirectory.hh"
35#include "G4UIcmdWithABool.hh"
36#include "G4UIcmdWith3Vector.hh"
40#include "G4UIcmdWithAString.hh"
41#include "G4RTSteppingAction.hh"
42#include "G4ThreeVector.hh"
43#include "G4VisManager.hh"
44#include "G4RayTracerViewer.hh"
45#include "G4TheRayTracer.hh"
46
47#define G4warn G4cout
48
49G4RTMessenger* G4RTMessenger::fpInstance = 0;
50
53{
54 if (!fpInstance) fpInstance = new G4RTMessenger(p1);
55 return fpInstance;
56}
57
58G4RTMessenger::G4RTMessenger(G4TheRayTracer* p1)
59{
60 theDefaultTracer = p1;
61 theTracer = theDefaultTracer;
62
63 rayDirectory = new G4UIdirectory("/vis/rayTracer/");
64 rayDirectory->SetGuidance("RayTracer commands.");
65
66 fileCmd = new G4UIcmdWithAString("/vis/rayTracer/trace",this);
67 fileCmd->SetGuidance("Start the ray tracing.");
68 fileCmd->SetGuidance("Define the name of output JPEG file.");
69 fileCmd->SetParameterName("fileName",true);
70 fileCmd->SetDefaultValue("g4RayTracer.jpeg");
72
73 columnCmd = new G4UIcmdWithAnInteger("/vis/rayTracer/column",this);
74 columnCmd->SetGuidance("Define the number of horizontal pixels.");
75 columnCmd->SetParameterName("nPixel",false);
76 columnCmd->SetRange("nPixel > 0");
77
78 rowCmd = new G4UIcmdWithAnInteger("/vis/rayTracer/row",this);
79 rowCmd->SetGuidance("Define the number of vertical pixels.");
80 rowCmd->SetParameterName("nPixel",false);
81 rowCmd->SetRange("nPixel > 0");
82
83 targetCmd = new G4UIcmdWith3VectorAndUnit("/vis/rayTracer/target",this);
84 targetCmd->SetGuidance("Define the center position of the target.");
85 targetCmd->SetParameterName("X","Y","Z",true);
86 targetCmd->SetDefaultValue(G4ThreeVector(0.,0.,0.));
87 targetCmd->SetDefaultUnit("m");
88
89 eyePosCmd = new G4UIcmdWith3VectorAndUnit("/vis/rayTracer/eyePosition",this);
90 eyePosCmd->SetGuidance("Define the eye position.");
91 eyePosCmd->SetGuidance("Eye direction is calculated from (target - eyePosition).");
92 eyePosCmd->SetParameterName("X","Y","Z",true);
93 eyePosCmd->SetDefaultValue(G4ThreeVector(0.,0.,0.));
94 eyePosCmd->SetDefaultUnit("m");
95
96 lightCmd = new G4UIcmdWith3Vector("/vis/rayTracer/lightDirection",this);
97 lightCmd->SetGuidance("Define the direction of illumination light.");
98 lightCmd->SetGuidance("The vector needs not to be a unit vector, but it must not be a zero vector.");
99 lightCmd->SetParameterName("Px","Py","Pz",true);
100 lightCmd->SetDefaultValue(G4ThreeVector(0.1,0.2,0.3));
101 lightCmd->SetRange("Px != 0 || Py != 0 || Pz != 0");
102
103 spanXCmd = new G4UIcmdWithADoubleAndUnit("/vis/rayTracer/span",this);
104 spanXCmd->SetGuidance("Define the angle per 100 pixels.");
105 spanXCmd->SetParameterName("span",true);
106 spanXCmd->SetDefaultValue(50.);
107 spanXCmd->SetDefaultUnit("deg");
108 spanXCmd->SetRange("span>0.");
109
110 headCmd = new G4UIcmdWithADoubleAndUnit("/vis/rayTracer/headAngle",this);
111 headCmd->SetGuidance("Define the head direction.");
112 headCmd->SetParameterName("headAngle",true);
113 headCmd->SetDefaultValue(270.);
114 headCmd->SetDefaultUnit("deg");
115 headCmd->SetRange("headAngle>=0. && headAngle<360.");
116
117 attCmd = new G4UIcmdWithADoubleAndUnit("/vis/rayTracer/attenuation",this);
118 attCmd->SetGuidance("Define the attenuation length for transparent material.");
119 attCmd->SetGuidance("Note that this value is independent to the attenuation length for the optical photon processes.");
120 attCmd->SetParameterName("Length",true);
121 attCmd->SetDefaultValue(1.0);
122 attCmd->SetDefaultUnit("m");
123 attCmd->SetRange("Length > 0.");
124
125 distCmd = new G4UIcmdWithABool("/vis/rayTracer/distortion",this);
126 distCmd->SetGuidance("Distortion effect of the fish eye lens.");
127 distCmd->SetParameterName("flag",true);
128 distCmd->SetDefaultValue(false);
129
130 transCmd = new G4UIcmdWithABool("/vis/rayTracer/ignoreTransparency",this);
131 transCmd->SetGuidance("Ignore transparency even if the alpha of G4Colour < 1.");
132 transCmd->SetParameterName("flag",true);
133 transCmd->SetDefaultValue(false);
134
135 bkgColCmd = new G4UIcmdWith3Vector("/vis/rayTracer/backgroundColour",this);
136 bkgColCmd->SetGuidance("Command has been deprecated. Use /vis/viewer/set/background instead.");
137 bkgColCmd->SetParameterName("red","green","blue",true);
138 bkgColCmd->SetDefaultValue(G4ThreeVector(1.,1.,1.));
139}
140
142{
143 delete columnCmd;
144 delete rowCmd;
145 delete targetCmd;
146 delete eyePosCmd;
147 delete lightCmd;
148 delete spanXCmd;
149 delete headCmd;
150 delete attCmd;
151 delete distCmd;
152 delete transCmd;
153 delete fileCmd;
154 delete bkgColCmd;
155 delete rayDirectory;
156}
157
159{
160 G4String currentValue;
161 if(command==columnCmd)
162 { currentValue = columnCmd->ConvertToString(theTracer->GetNColumn()); }
163 else if(command==rowCmd)
164 { currentValue = rowCmd->ConvertToString(theTracer->GetNRow()); }
165 else if(command==targetCmd)
166 { currentValue = targetCmd->ConvertToString(theTracer->GetTargetPosition(),"m"); }
167 else if(command==eyePosCmd)
168 { currentValue = eyePosCmd->ConvertToString(theTracer->GetEyePosition(),"m"); }
169 else if(command==lightCmd)
170 { currentValue = lightCmd->ConvertToString(theTracer->GetLightDirection()); }
171 else if(command==spanXCmd)
172 { currentValue = spanXCmd->ConvertToString(theTracer->GetViewSpan(),"deg"); }
173 else if(command==headCmd)
174 { currentValue = headCmd->ConvertToString(theTracer->GetHeadAngle(),"deg"); }
175 else if(command==attCmd)
176 { currentValue = attCmd->ConvertToString(theTracer->GetAttenuationLength(),"m");}
177 else if(command==distCmd)
178 { currentValue = distCmd->ConvertToString(theTracer->GetDistortion()); }
179 else if(command==transCmd)
180 { currentValue = transCmd->ConvertToString(G4RTSteppingAction::GetIgnoreTransparency()); }
181 else if(command==bkgColCmd)
182 { currentValue = bkgColCmd->ConvertToString(theTracer->GetBackgroundColour()); }
183 return currentValue;
184}
185
187{
189
190 theTracer = theDefaultTracer;
191
192 G4VViewer* pVViewer = pVisManager->GetCurrentViewer();
193 if (pVViewer) {
194 G4RayTracerViewer* pViewer = dynamic_cast<G4RayTracerViewer*>(pVViewer);
195 if (pViewer) {
196 theTracer = pViewer->GetTracer();
197 } else {
198 G4warn <<
199 "G4RTMessenger::SetNewValue: Current viewer is not of type RayTracer."
200 "\n Use \"/vis/viewer/select\" or \"/vis/open\"."
201 << G4endl;
202 }
203 }
204
205 if (theTracer == theDefaultTracer) {
206 G4warn <<
207"G4RTMessenger::SetNewValue: No valid current viewer. Using default RayTracer."
208 << G4endl;
209 }
210
211 if(command==columnCmd)
212 { theTracer->SetNColumn(columnCmd->GetNewIntValue(newValue)); }
213 else if(command==rowCmd)
214 { theTracer->SetNRow(rowCmd->GetNewIntValue(newValue)); }
215 else if(command==targetCmd)
216 { theTracer->SetTargetPosition(targetCmd->GetNew3VectorValue(newValue)); }
217 else if(command==eyePosCmd)
218 { theTracer->SetEyePosition(eyePosCmd->GetNew3VectorValue(newValue)); }
219 else if(command==lightCmd)
220 { theTracer->SetLightDirection(lightCmd->GetNew3VectorValue(newValue)); }
221 else if(command==spanXCmd)
222 { theTracer->SetViewSpan(spanXCmd->GetNewDoubleValue(newValue)); }
223 else if(command==headCmd)
224 { theTracer->SetHeadAngle(headCmd->GetNewDoubleValue(newValue)); }
225 else if(command==attCmd)
226 { theTracer->SetAttenuationLength(attCmd->GetNewDoubleValue(newValue)); }
227 else if(command==distCmd)
228 { theTracer->SetDistortion(distCmd->GetNewBoolValue(newValue)); }
229 else if(command==bkgColCmd)
230 {
231 G4warn << "WARNING: /vis/rayTracer/backgroundColour has been deprecated."
232 "\n Use \"/vis/viewer/set/background\" instead."
233 << G4endl;
234 }
235 else if(command==transCmd)
237 else if(command==fileCmd)
238 { theTracer->Trace(newValue); }
239}
240
241
242
243
244
@ G4State_Idle
#define G4warn
Definition: G4Scene.cc:41
CLHEP::Hep3Vector G4ThreeVector
#define G4endl
Definition: G4ios.hh:57
virtual void SetNewValue(G4UIcommand *command, G4String newValue)
virtual G4String GetCurrentValue(G4UIcommand *command)
virtual ~G4RTMessenger()
static G4RTMessenger * GetInstance(G4TheRayTracer *p1)
static G4bool GetIgnoreTransparency()
static void SetIgnoreTransparency(G4bool val)
G4TheRayTracer * GetTracer()
void SetTargetPosition(const G4ThreeVector &val)
G4double GetViewSpan() const
G4int GetNColumn() const
void SetViewSpan(G4double val)
void SetNRow(G4int val)
G4double GetHeadAngle() const
virtual void Trace(const G4String &fileName)
G4bool GetDistortion() const
void SetNColumn(G4int val)
void SetLightDirection(const G4ThreeVector &val)
void SetDistortion(G4bool val)
G4ThreeVector GetTargetPosition() const
void SetAttenuationLength(G4double val)
G4Colour GetBackgroundColour() const
G4ThreeVector GetLightDirection() const
G4ThreeVector GetEyePosition() const
void SetHeadAngle(G4double val)
G4double GetAttenuationLength() const
G4int GetNRow() const
void SetEyePosition(const G4ThreeVector &val)
void SetDefaultUnit(const char *defUnit)
static G4ThreeVector GetNew3VectorValue(const char *paramString)
void SetParameterName(const char *theNameX, const char *theNameY, const char *theNameZ, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(const G4ThreeVector &defVal)
void SetDefaultValue(const G4ThreeVector &defVal)
static G4ThreeVector GetNew3VectorValue(const char *paramString)
void SetParameterName(const char *theNameX, const char *theNameY, const char *theNameZ, G4bool omittable, G4bool currentAsDefault=false)
static G4bool GetNewBoolValue(const char *paramString)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(G4bool defVal)
void SetDefaultUnit(const char *defUnit)
static G4double GetNewDoubleValue(const char *paramString)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(const char *defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
static G4int GetNewIntValue(const char *paramString)
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:446
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:157
void SetRange(const char *rs)
Definition: G4UIcommand.hh:121
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:287
G4VViewer * GetCurrentViewer() const
static G4VisManager * GetInstance()