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
G4VisCommandsTouchableSet.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// /vis/touchable/set commands - John Allison 8th October 2012
29
31
32#include "G4UImanager.hh"
33#include "G4UIcommand.hh"
34#include "G4UIcmdWithABool.hh"
35#include "G4UIcmdWithADouble.hh"
37#include "G4UIcmdWithAString.hh"
38
39#include <sstream>
40
41#define G4warn G4cout
42
43////////////// /vis/touchable/set/colour ///////////////////////////////////////
44
46{
47 G4bool omitable;
48 G4UIparameter* parameter;
49
50 fpCommandSetColour = new G4UIcommand
51 ("/vis/touchable/set/colour", this);
52 fpCommandSetColour->SetGuidance("Set colour of current touchable.");
53 fpCommandSetColour->SetGuidance
54 ("Use \"/vis/set/touchable\" to set current touchable.");
55 fpCommandSetColour->SetGuidance(ConvertToColourGuidance());
56 parameter = new G4UIparameter("red", 's', omitable = true);
57 parameter->SetDefaultValue("1.");
58 fpCommandSetColour->SetParameter(parameter);
59 parameter = new G4UIparameter("green", 'd', omitable = true);
60 parameter->SetDefaultValue(1.);
61 fpCommandSetColour->SetParameter(parameter);
62 parameter = new G4UIparameter("blue", 'd', omitable = true);
63 parameter->SetDefaultValue(1.);
64 fpCommandSetColour->SetParameter(parameter);
65 parameter = new G4UIparameter("opacity", 'd', omitable = true);
66 parameter->SetDefaultValue(1.);
67 fpCommandSetColour->SetParameter(parameter);
68
69 fpCommandSetDaughtersInvisible = new G4UIcmdWithABool
70 ("/vis/touchable/set/daughtersInvisible", this);
71 fpCommandSetDaughtersInvisible->SetGuidance
72 ("Daughters of current touchable invisible: true/false.");
73 fpCommandSetDaughtersInvisible->SetGuidance
74 ("Use \"/vis/set/touchable\" to set current touchable.");
75 fpCommandSetDaughtersInvisible->SetParameterName("daughtersInvisible", omitable = true);
76 fpCommandSetDaughtersInvisible->SetDefaultValue(true);
77
78 fpCommandSetForceAuxEdgeVisible = new G4UIcmdWithABool
79 ("/vis/touchable/set/forceAuxEdgeVisible", this);
80 fpCommandSetForceAuxEdgeVisible->SetGuidance
81 ("Force auxiliary (soft) edges of current touchable to be visible: true/false.");
82 fpCommandSetForceAuxEdgeVisible->SetGuidance
83 ("Use \"/vis/set/touchable\" to set current touchable.");
84 fpCommandSetForceAuxEdgeVisible->SetParameterName("forceAuxEdgeVisible", omitable = true);
85 fpCommandSetForceAuxEdgeVisible->SetDefaultValue(true);
86
87 fpCommandSetForceCloud = new G4UIcmdWithABool
88 ("/vis/touchable/set/forceCloud", this);
89 fpCommandSetForceCloud->SetGuidance
90 ("Force current touchable always to be drawn as a cloud.");
91 fpCommandSetForceCloud->SetGuidance
92 ("Use \"/vis/set/touchable\" to set current touchable.");
93 fpCommandSetForceCloud->SetParameterName("force", omitable = true);
94 fpCommandSetForceCloud->SetDefaultValue(true);
95
96 fpCommandSetForceSolid = new G4UIcmdWithABool
97 ("/vis/touchable/set/forceSolid", this);
98 fpCommandSetForceSolid->SetGuidance
99 ("Force current touchable always to be drawn solid (surface drawing).");
100 fpCommandSetForceSolid->SetGuidance
101 ("Use \"/vis/set/touchable\" to set current touchable.");
102 fpCommandSetForceSolid->SetParameterName("force", omitable = true);
103 fpCommandSetForceSolid->SetDefaultValue(true);
104
105 fpCommandSetForceWireframe = new G4UIcmdWithABool
106 ("/vis/touchable/set/forceWireframe", this);
107 fpCommandSetForceWireframe->SetGuidance
108 ("Force current touchable always to be drawn as wireframe.");
109 fpCommandSetForceWireframe->SetGuidance
110 ("Use \"/vis/set/touchable\" to set current touchable.");
111 fpCommandSetForceWireframe->SetParameterName("forceWireframe", omitable = true);
112 fpCommandSetForceWireframe->SetDefaultValue(true);
113
114 fpCommandSetLineSegmentsPerCircle = new G4UIcmdWithAnInteger
115 ("/vis/touchable/set/lineSegmentsPerCircle", this);
116 fpCommandSetLineSegmentsPerCircle->SetGuidance
117 ("For current touchable, set number of line segments per circle, the"
118 "\nprecision with which a curved line or surface is represented by a"
119 "\npolygon or polyhedron, regardless of the view parameters."
120 "\nNegative to pick up G4Polyhedron default value.");
121 fpCommandSetLineSegmentsPerCircle->SetGuidance
122 ("Use \"/vis/set/touchable\" to set current touchable.");
123 fpCommandSetLineSegmentsPerCircle->SetParameterName("lineSegmentsPerCircle", omitable = true);
124 fpCommandSetLineSegmentsPerCircle->SetDefaultValue(0);
125
126 fpCommandSetLineStyle = new G4UIcmdWithAString
127 ("/vis/touchable/set/lineStyle", this);
128 fpCommandSetLineStyle->SetGuidance("Set line style of current touchable drawing.");
129 fpCommandSetLineStyle->SetGuidance
130 ("Use \"/vis/set/touchable\" to set current touchable.");
131 fpCommandSetLineStyle->SetParameterName("lineStyle", omitable = true);
132 fpCommandSetLineStyle->SetCandidates("unbroken dashed dotted");
133 fpCommandSetLineStyle->SetDefaultValue("unbroken");
134
135 fpCommandSetLineWidth = new G4UIcmdWithADouble
136 ("/vis/touchable/set/lineWidth", this);
137 fpCommandSetLineWidth->SetGuidance("Set line width of current touchable.");
138 fpCommandSetLineWidth->SetGuidance
139 ("Use \"/vis/set/touchable\" to set current touchable.");
140 fpCommandSetLineWidth->SetParameterName("lineWidth", omitable = true);
141 fpCommandSetLineWidth->SetDefaultValue(1.);
142
143 fpCommandSetNumberOfCloudPoints = new G4UIcmdWithAnInteger
144 ("/vis/touchable/set/numberOfCloudPoints", this);
145 fpCommandSetNumberOfCloudPoints->SetGuidance
146 ("For current touchable, set number of cloud points for cloud drawing."
147 "\n<= 0 means under control of viewer.");
148 fpCommandSetNumberOfCloudPoints->SetGuidance
149 ("Use \"/vis/set/touchable\" to set current touchable.");
150 fpCommandSetNumberOfCloudPoints->SetParameterName("numberOfCloudPoints", omitable = true);
151 fpCommandSetNumberOfCloudPoints->SetDefaultValue(0);
152
153 fpCommandSetVisibility = new G4UIcmdWithABool
154 ("/vis/touchable/set/visibility", this);
155 fpCommandSetVisibility->SetGuidance
156 ("Set visibility of current touchable: true/false.");
157 fpCommandSetVisibility->SetGuidance
158 ("Use \"/vis/set/touchable\" to set current touchable.");
159 fpCommandSetVisibility->SetParameterName("visibility", omitable = true);
160 fpCommandSetVisibility->SetDefaultValue(true);
161}
162
164 delete fpCommandSetVisibility;
165 delete fpCommandSetNumberOfCloudPoints;
166 delete fpCommandSetLineWidth;
167 delete fpCommandSetLineStyle;
168 delete fpCommandSetForceWireframe;
169 delete fpCommandSetForceSolid;
170 delete fpCommandSetForceCloud;
171 delete fpCommandSetLineSegmentsPerCircle;
172 delete fpCommandSetForceAuxEdgeVisible;
173 delete fpCommandSetDaughtersInvisible;
174 delete fpCommandSetColour;
175}
176
178 return "";
179}
180
182(G4UIcommand* command,G4String newValue)
183{
185
186 G4VViewer* currentViewer = fpVisManager->GetCurrentViewer();
187 if (!currentViewer) {
188 if (verbosity >= G4VisManager::errors) {
189 G4warn <<
190 "ERROR: G4VisCommandsTouchableSet::SetNewValue: no current viewer."
191 << G4endl;
192 }
193 return;
194 }
195
196 G4ViewParameters workingVP = currentViewer->GetViewParameters();
197 G4VisAttributes workingVisAtts;
198
199 if (command == fpCommandSetColour)
200 {
201 G4String redOrString;
202 G4double green, blue, opacity;
203 std::istringstream iss(newValue);
204 iss >> redOrString >> green >> blue >> opacity;
205 G4Colour colour(1,1,1,1); // Default white and opaque.
206 ConvertToColour(colour, redOrString, green, blue, opacity);
207 workingVisAtts.SetColour(colour);
210 (workingVisAtts,
213 }
214
215 else if (command == fpCommandSetDaughtersInvisible) {
216 workingVisAtts.SetDaughtersInvisible(G4UIcommand::ConvertToBool(newValue));
219 (workingVisAtts,
222 }
223
224 else if (command == fpCommandSetForceAuxEdgeVisible) {
225 workingVisAtts.SetForceAuxEdgeVisible(G4UIcommand::ConvertToBool(newValue));
228 (workingVisAtts,
231 }
232
233 else if (command == fpCommandSetLineSegmentsPerCircle) {
234 workingVisAtts.SetForceLineSegmentsPerCircle
235 (G4UIcommand::ConvertToInt(newValue));
238 (workingVisAtts,
241 }
242
243 else if (command == fpCommandSetForceCloud) {
244 workingVisAtts.SetForceCloud(G4UIcommand::ConvertToBool(newValue));
247 (workingVisAtts,
250 }
251
252 else if (command == fpCommandSetForceSolid) {
253 workingVisAtts.SetForceSolid(G4UIcommand::ConvertToBool(newValue));
256 (workingVisAtts,
259 }
260
261 else if (command == fpCommandSetForceWireframe) {
262 workingVisAtts.SetForceWireframe(G4UIcommand::ConvertToBool(newValue));
265 (workingVisAtts,
268 }
269
270 else if (command == fpCommandSetLineStyle) {
272 if (newValue == "dashed") {
273 lineStyle = G4VisAttributes::dashed;
274 } else if (newValue == "dotted") {
275 lineStyle = G4VisAttributes::dotted;
276 }
277 // All other values are "unbroken".
278 workingVisAtts.SetLineStyle(lineStyle);
281 (workingVisAtts,
284 }
285
286 else if (command == fpCommandSetLineWidth) {
287 workingVisAtts.SetLineWidth(G4UIcommand::ConvertToDouble(newValue));
290 (workingVisAtts,
293 }
294
295 else if (command == fpCommandSetNumberOfCloudPoints) {
296 workingVisAtts.SetForceNumberOfCloudPoints
297 (G4UIcommand::ConvertToInt(newValue));
300 (workingVisAtts,
303 }
304
305 else if (command == fpCommandSetVisibility) {
306 workingVisAtts.SetVisibility(G4UIcommand::ConvertToBool(newValue));
309 (workingVisAtts,
312 }
313
314 else {
315 if (verbosity >= G4VisManager::errors) {
316 G4warn <<
317 "ERROR: G4VisCommandsTouchableSet::SetNewValue: unrecognised command."
318 << G4endl;
319 }
320 return;
321 }
322
323 SetViewParameters(currentViewer,workingVP);
324
325 // To update all views
326 G4UImanager::GetUIpointer()->ApplyCommand("/vis/scene/notifyHandlers");
327}
#define G4warn
Definition: G4Scene.cc:41
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
#define G4endl
Definition: G4ios.hh:57
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(G4bool defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetDefaultValue(G4double defVal)
void SetCandidates(const char *candidateList)
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)
void SetDefaultValue(G4int defVal)
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:147
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:157
static G4int ConvertToInt(const char *st)
Definition: G4UIcommand.cc:561
static G4bool ConvertToBool(const char *st)
Definition: G4UIcommand.cc:549
static G4double ConvertToDouble(const char *st)
Definition: G4UIcommand.cc:579
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:495
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
void SetDefaultValue(const char *theDefaultValue)
const G4ViewParameters & GetViewParameters() const
void ConvertToColour(G4Colour &colour, const G4String &redOrString, G4double green, G4double blue, G4double opacity)
static G4VisManager * fpVisManager
void SetViewParameters(G4VViewer *viewer, const G4ViewParameters &viewParams)
const G4String & ConvertToColourGuidance()
static G4PhysicalVolumeModel::TouchableProperties fCurrentTouchableProperties
void AddVisAttributesModifier(const G4ModelingParameters::VisAttributesModifier &)
void SetColour(const G4Colour &)
void SetVisibility(G4bool=true)
void SetForceAuxEdgeVisible(G4bool=true)
void SetForceCloud(G4bool=true)
void SetForceWireframe(G4bool=true)
void SetLineWidth(G4double)
void SetForceSolid(G4bool=true)
void SetLineStyle(LineStyle)
void SetForceLineSegmentsPerCircle(G4int nSegments)
void SetDaughtersInvisible(G4bool=true)
void SetForceNumberOfCloudPoints(G4int nPoints)
void SetNewValue(G4UIcommand *command, G4String newValue)
G4String GetCurrentValue(G4UIcommand *command)
G4VViewer * GetCurrentViewer() const
static Verbosity GetVerbosity()
G4ModelingParameters::PVNameCopyNoPath fTouchablePath