Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 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" 37 #include "G4UIcmdWith3VectorAndUnit.hh" 38 #include "G4UIcmdWithADoubleAndUnit.hh" 39 #include "G4UIcmdWithAnInteger.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 49 G4RTMessenger* G4RTMessenger::fpInstance = 0; 50 51 G4RTMessenger* G4RTMessenger::GetInstance 52 (G4TheRayTracer* p1) 53 { 54 if (!fpInstance) fpInstance = new G4RTMessen 55 return fpInstance; 56 } 57 58 G4RTMessenger::G4RTMessenger(G4TheRayTracer* p 59 { 60 theDefaultTracer = p1; 61 theTracer = theDefaultTracer; 62 63 rayDirectory = new G4UIdirectory("/vis/rayTr 64 rayDirectory->SetGuidance("RayTracer command 65 66 fileCmd = new G4UIcmdWithAString("/vis/rayTr 67 fileCmd->SetGuidance("Start the ray tracing. 68 fileCmd->SetGuidance("Define the name of out 69 fileCmd->SetParameterName("fileName",true); 70 fileCmd->SetDefaultValue("g4RayTracer.jpeg") 71 fileCmd->AvailableForStates(G4State_Idle); 72 73 columnCmd = new G4UIcmdWithAnInteger("/vis/r 74 columnCmd->SetGuidance("Define the number of 75 columnCmd->SetParameterName("nPixel",false); 76 columnCmd->SetRange("nPixel > 0"); 77 78 rowCmd = new G4UIcmdWithAnInteger("/vis/rayT 79 rowCmd->SetGuidance("Define the number of ve 80 rowCmd->SetParameterName("nPixel",false); 81 rowCmd->SetRange("nPixel > 0"); 82 83 targetCmd = new G4UIcmdWith3VectorAndUnit("/ 84 targetCmd->SetGuidance("Define the center po 85 targetCmd->SetParameterName("X","Y","Z",true 86 targetCmd->SetDefaultValue(G4ThreeVector(0., 87 targetCmd->SetDefaultUnit("m"); 88 89 eyePosCmd = new G4UIcmdWith3VectorAndUnit("/ 90 eyePosCmd->SetGuidance("Define the eye posit 91 eyePosCmd->SetGuidance("Eye direction is cal 92 eyePosCmd->SetParameterName("X","Y","Z",true 93 eyePosCmd->SetDefaultValue(G4ThreeVector(0., 94 eyePosCmd->SetDefaultUnit("m"); 95 96 lightCmd = new G4UIcmdWith3Vector("/vis/rayT 97 lightCmd->SetGuidance("Define the direction 98 lightCmd->SetGuidance("The vector needs not 99 lightCmd->SetParameterName("Px","Py","Pz",tr 100 lightCmd->SetDefaultValue(G4ThreeVector(0.1, 101 lightCmd->SetRange("Px != 0 || Py != 0 || Pz 102 103 spanXCmd = new G4UIcmdWithADoubleAndUnit("/v 104 spanXCmd->SetGuidance("Define the angle per 105 spanXCmd->SetParameterName("span",true); 106 spanXCmd->SetDefaultValue(50.); 107 spanXCmd->SetDefaultUnit("deg"); 108 spanXCmd->SetRange("span>0."); 109 110 headCmd = new G4UIcmdWithADoubleAndUnit("/vi 111 headCmd->SetGuidance("Define the head direct 112 headCmd->SetParameterName("headAngle",true); 113 headCmd->SetDefaultValue(270.); 114 headCmd->SetDefaultUnit("deg"); 115 headCmd->SetRange("headAngle>=0. && headAngl 116 117 attCmd = new G4UIcmdWithADoubleAndUnit("/vis 118 attCmd->SetGuidance("Define the attenuation 119 attCmd->SetGuidance("Note that this value is 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/rayTrac 126 distCmd->SetGuidance("Distortion effect of t 127 distCmd->SetParameterName("flag",true); 128 distCmd->SetDefaultValue(false); 129 130 transCmd = new G4UIcmdWithABool("/vis/rayTra 131 transCmd->SetGuidance("Ignore transparency e 132 transCmd->SetParameterName("flag",true); 133 transCmd->SetDefaultValue(false); 134 135 bkgColCmd = new G4UIcmdWith3Vector("/vis/ray 136 bkgColCmd->SetGuidance("Command has been dep 137 bkgColCmd->SetParameterName("red","green","b 138 bkgColCmd->SetDefaultValue(G4ThreeVector(1., 139 } 140 141 G4RTMessenger::~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 158 G4String G4RTMessenger::GetCurrentValue(G4UIco 159 { 160 G4String currentValue; 161 if(command==columnCmd) 162 { currentValue = columnCmd->ConvertToString( 163 else if(command==rowCmd) 164 { currentValue = rowCmd->ConvertToString(the 165 else if(command==targetCmd) 166 { currentValue = targetCmd->ConvertToString( 167 else if(command==eyePosCmd) 168 { currentValue = eyePosCmd->ConvertToString( 169 else if(command==lightCmd) 170 { currentValue = lightCmd->ConvertToString(t 171 else if(command==spanXCmd) 172 { currentValue = spanXCmd->ConvertToString(t 173 else if(command==headCmd) 174 { currentValue = headCmd->ConvertToString(th 175 else if(command==attCmd) 176 { currentValue = attCmd->ConvertToString(the 177 else if(command==distCmd) 178 { currentValue = distCmd->ConvertToString(th 179 else if(command==transCmd) 180 { currentValue = transCmd->ConvertToString(G 181 else if(command==bkgColCmd) 182 { currentValue = bkgColCmd->ConvertToString( 183 return currentValue; 184 } 185 186 void G4RTMessenger::SetNewValue(G4UIcommand * 187 { 188 G4VisManager* pVisManager = G4VisManager::Ge 189 190 theTracer = theDefaultTracer; 191 192 G4VViewer* pVViewer = pVisManager->GetCurren 193 if (pVViewer) { 194 G4RayTracerViewer* pViewer = dynamic_cast< 195 if (pViewer) { 196 theTracer = pViewer->GetTracer(); 197 } else { 198 G4warn << 199 "G4RTMessenger::SetNewValue: Current viewer 200 "\n Use \"/vis/viewer/select\" or \"/vis/op 201 << G4endl; 202 } 203 } 204 205 if (theTracer == theDefaultTracer) { 206 G4warn << 207 "G4RTMessenger::SetNewValue: No valid current 208 << G4endl; 209 } 210 211 if(command==columnCmd) 212 { theTracer->SetNColumn(columnCmd->GetNewInt 213 else if(command==rowCmd) 214 { theTracer->SetNRow(rowCmd->GetNewIntValue( 215 else if(command==targetCmd) 216 { theTracer->SetTargetPosition(targetCmd->Ge 217 else if(command==eyePosCmd) 218 { theTracer->SetEyePosition(eyePosCmd->GetNe 219 else if(command==lightCmd) 220 { theTracer->SetLightDirection(lightCmd->Get 221 else if(command==spanXCmd) 222 { theTracer->SetViewSpan(spanXCmd->GetNewDou 223 else if(command==headCmd) 224 { theTracer->SetHeadAngle(headCmd->GetNewDou 225 else if(command==attCmd) 226 { theTracer->SetAttenuationLength(attCmd->Ge 227 else if(command==distCmd) 228 { theTracer->SetDistortion(distCmd->GetNewBo 229 else if(command==bkgColCmd) 230 { 231 G4warn << "WARNING: /vis/rayTracer/backgroun 232 "\n Use \"/vis/viewer/set/background\" inst 233 << G4endl; 234 } 235 else if(command==transCmd) 236 { G4RTSteppingAction::SetIgnoreTransparency( 237 else if(command==fileCmd) 238 { theTracer->Trace(newValue); } 239 } 240 241 242 243 244 245