source: tags/Visualization_after-vis09-02-01-tag/RayTracer/src/G4RTMessenger.cc @ 958

Last change on this file since 958 was 958, checked in by garnier, 15 years ago

tag

File size: 9.5 KB
Line 
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: G4RTMessenger.cc,v 1.10 2006/11/17 21:34:12 perl Exp $
28// GEANT4 tag $Name:  $
29//
30//
31//
32
33
34#include "G4RTMessenger.hh"
35
36#include "G4UIdirectory.hh"
37#include "G4UIcmdWithABool.hh"
38#include "G4UIcmdWith3Vector.hh"
39#include "G4UIcmdWith3VectorAndUnit.hh"
40#include "G4UIcmdWithADoubleAndUnit.hh"
41#include "G4UIcmdWithAnInteger.hh"
42#include "G4UIcmdWithAString.hh"
43#include "G4TheRayTracer.hh"
44#include "G4RTSteppingAction.hh"
45#include "G4ThreeVector.hh"
46#include "G4VisManager.hh"
47#include "G4RayTracerViewer.hh"
48
49G4RTMessenger* G4RTMessenger::fpInstance = 0;
50
51G4RTMessenger* G4RTMessenger::GetInstance
52(G4TheRayTracer* p1,G4RTSteppingAction* p2)
53{
54  if (!fpInstance) fpInstance = new G4RTMessenger(p1, p2);
55  return fpInstance;
56}
57
58G4RTMessenger::G4RTMessenger(G4TheRayTracer* p1,G4RTSteppingAction* p2)
59{
60  theDefaultTracer = p1;
61  theSteppingAction = p2;
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");
71  fileCmd->AvailableForStates(G4State_Idle);
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 virtical 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 calsurated 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
141G4RTMessenger::~G4RTMessenger()
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
158G4String G4RTMessenger::GetCurrentValue(G4UIcommand * command)
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(theSteppingAction->GetIgnoreTransparency()); }
181  else if(command==bkgColCmd)
182  { currentValue = bkgColCmd->ConvertToString(theTracer->GetBackgroundColour()); }
183  return currentValue;
184}
185
186void G4RTMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
187{
188  G4VisManager* pVisManager = G4VisManager::GetInstance();
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      G4cout <<
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    G4cout <<
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        G4cout << "WARNING: /vis/rayTracer/backgroundColour has been deprecated."
232        "\n  Use \"/vis/viewer/set/background\" instead."
233                << G4endl;
234  }
235  else if(command==transCmd)
236  { theSteppingAction->SetIgnoreTransparency(transCmd->GetNewBoolValue(newValue)); }
237  else if(command==fileCmd)
238  { theTracer->Trace(newValue); }
239}
240
241
242 
243
244
Note: See TracBrowser for help on using the repository browser.