Geant4  10.02.p01
CexmcScenePrimitivesMessenger.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  * Filename: CexmcScenePrimitivesMessenger.cc
30  *
31  * Description: draw auxiliary scene primitives
32  *
33  * Version: 1.0
34  * Created: 03.01.2011 12:42:03
35  * Revision: none
36  * Compiler: gcc
37  *
38  * Author: Alexey Radkov (),
39  * Company: PNPI
40  *
41  * =============================================================================
42  */
43 
44 #include <sstream>
45 #include <cctype>
46 #include <G4UIparameter.hh>
47 #include <G4UIcommand.hh>
48 #include <G4UIcmdWith3Vector.hh>
49 #include <G4UIcmdWithABool.hh>
51 #include <G4Colour.hh>
52 #include "CexmcScenePrimitives.hh"
54 #include "CexmcMessenger.hh"
55 
56 
58  CexmcScenePrimitives * scenePrimitives ) :
59  scenePrimitives( scenePrimitives ), drawRadialLine( NULL ),
60  clearRadialLines( NULL ), markTargetCenter( NULL ),
61  highlightInnerCrystals( NULL ), setColour( NULL )
62 {
64  ( CexmcMessenger::visDirName + "drawRadialLine" ).c_str(), this );
65  drawRadialLine->SetGuidance( "Draw radial line with specified theta, phi "
66  "(both in deg!)\n and length (in cm!)" );
67  drawRadialLine->SetParameterName( "RadialLineTheta", "RadialLinePhi",
68  "RadialLineLength", true );
69  drawRadialLine->SetRange( "RadialLineLength >= 0." );
70  drawRadialLine->SetDefaultValue( G4ThreeVector( 0., 0., 100. ) );
72 
74  ( CexmcMessenger::visDirName + "clearRadialLines" ).c_str(), this );
75  clearRadialLines->SetGuidance( "Clear all existing radial lines" );
77 
79  ( CexmcMessenger::visDirName + "markTargetCenter" ).c_str(), this );
80  markTargetCenter->SetGuidance( "Mark/unmark target center" );
81  markTargetCenter->SetParameterName( "MarkTargetCenter", true );
84 
86  ( CexmcMessenger::visDirName + "hlIC" ).c_str(), this );
87  highlightInnerCrystals->SetGuidance( "Highlight inner crystals in "
88  "calorimeters on/off" );
89  highlightInnerCrystals->SetParameterName( "HighlightInnerCrystals", true );
92 
93  setColour = new G4UIcommand(
94  ( CexmcMessenger::visDirName + "setColour" ).c_str(), this );
95  setColour->SetGuidance( "Set colour of specified scene primitive" );
96  G4UIparameter * parameter( new G4UIparameter( "ScenePrimitive", 's',
97  false ) );
98  parameter->SetGuidance( "Scene primitive, possible values:\n"
99  " tc - target center mark,\n"
100  " rl - radial lines,\n"
101  " ic - inner crystal highlights" );
102  parameter->SetParameterCandidates( "tc rl ic" );
103  setColour->SetParameter( parameter );
104  parameter = new G4UIparameter( "red", 's', true );
105  parameter->SetGuidance( "Red component or string, e.g. \"blue\", in which "
106  "case succeeding colour\n components are ignored" );
107  parameter->SetDefaultValue( "1.0" );
108  setColour->SetParameter( parameter );
109  parameter = new G4UIparameter( "green", 'd', true );
110  parameter->SetGuidance( "Green component" );
111  parameter->SetDefaultValue( 1.0 );
112  setColour->SetParameter( parameter );
113  parameter = new G4UIparameter( "blue", 'd', true );
114  parameter->SetGuidance( "Blue component" );
115  parameter->SetDefaultValue( 1.0 );
116  setColour->SetParameter( parameter );
117  parameter = new G4UIparameter( "opacity", 'd', true );
118  parameter->SetGuidance( "Opacity" );
119  parameter->SetDefaultValue( 1.0 );
120  setColour->SetParameter( parameter );
122 }
123 
124 
126 {
127  delete drawRadialLine;
128  delete clearRadialLines;
129  delete markTargetCenter;
130  delete highlightInnerCrystals;
131  delete setColour;
132 }
133 
134 
136  G4String value )
137 {
138  do
139  {
140  if ( cmd == drawRadialLine )
141  {
143  value ) );
145  break;
146  }
147  if ( cmd == clearRadialLines )
148  {
150  break;
151  }
152  if ( cmd == markTargetCenter )
153  {
156  break;
157  }
158  if ( cmd == highlightInnerCrystals )
159  {
162  break;
163  }
164  if ( cmd == setColour )
165  {
166  G4String name;
167  G4String redOrString;
168  G4double green( 1 );
169  G4double blue( 1 );
170  G4double opacity( 1 );
171  G4Colour colour( 1, green, blue, opacity );
172  std::istringstream iss( value );
173 
174  iss >> name >> redOrString >> green >> blue >> opacity;
175 
176  if ( std::isalpha( redOrString[ size_t( 0 ) ] ) )
177  {
178  G4Colour::GetColour( redOrString, colour );
179  }
180  else
181  {
182  colour = G4Colour( G4UIcommand::ConvertToDouble( redOrString ),
183  green, blue );
184  }
185  colour = G4Colour( colour.GetRed(), colour.GetGreen(),
186  colour.GetBlue(), opacity );
187 
189  do
190  {
191  if ( name == "tc" )
192  {
193  primitive = CexmcTargetCenterMark_SP;
194  break;
195  }
196  if ( name == "rl" )
197  {
198  primitive = CexmcRadialLine_SP;
199  break;
200  }
201  if ( name == "ic" )
202  {
203  primitive = CexmcInnerCrystalsHl_SP;
204  break;
205  }
206  return;
207  } while ( false );
208 
209  scenePrimitives->SetColour( primitive, colour );
210  break;
211  }
212  } while ( false );
213 }
214 
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:152
CLHEP::Hep3Vector G4ThreeVector
void SetColour(CexmcSPType primitive, const G4Colour &colour)
void SetParameterCandidates(const char *theString)
G4String name
Definition: TRTMaterials.hh:40
void SetParameterName(const char *theNameX, const char *theNameY, const char *theNameZ, G4bool omittable, G4bool currentAsDefault=false)
static G4bool GetColour(const G4String &key, G4Colour &result)
Definition: G4Colour.cc:126
void MarkTargetCenter(G4bool on=true)
void SetDefaultValue(const char *theDefaultValue)
CexmcScenePrimitivesMessenger(CexmcScenePrimitives *scenePrimitives)
G4double GetBlue() const
Definition: G4Colour.hh:141
Definition: test07.cc:36
static G4bool GetNewBoolValue(const char *paramString)
void SetDefaultValue(G4bool defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
G4double GetRed() const
Definition: G4Colour.hh:139
static G4ThreeVector GetNew3VectorValue(const char *paramString)
G4double GetGreen() const
Definition: G4Colour.hh:140
void SetRange(const char *rs)
Definition: G4UIcommand.hh:125
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
static G4double ConvertToDouble(const char *st)
Definition: G4UIcommand.cc:443
void AvailableForStates(G4ApplicationState s1)
Definition: G4UIcommand.cc:239
void SetNewValue(G4UIcommand *cmd, G4String value)
static G4String visDirName
double G4double
Definition: G4Types.hh:76
void SetDefaultValue(G4ThreeVector defVal)
void SetGuidance(const char *theGuidance)
void HighlightInnerCrystals(G4bool=true)
void DrawRadialLine(const G4ThreeVector &line)