Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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()