Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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
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 if (verbosity >= G4VisManager::warnings) {
313 static G4bool first = true;
314 if (first) {
315 first = false;
316 G4warn << "WARNING: If \"/vis/touchable/set/visibility\" does not appear to"
317 "\n work, check that opacity (4th component of colour) is non-zero." << G4endl;
318 G4warn << "ALSO: The volume must be in a requested physical volume tree,"
319 "\n not in the \"base path\". E.g., if"
320 "\n /vis/drawVolume volume-name"
321 "\n there is no way to make a parent of volume-name visible except by"
322 "\n explicitly adding the parent:"
323 "\n /vis/scene/add/volume parent-name" << G4endl;
324 }
325 }
326 }
327
328 else {
329 if (verbosity >= G4VisManager::errors) {
330 G4warn <<
331 "ERROR: G4VisCommandsTouchableSet::SetNewValue: unrecognised command."
332 << G4endl;
333 }
334 return;
335 }
336
337 SetViewParameters(currentViewer,workingVP);
338
339 // To update all views
340 G4UImanager::GetUIpointer()->ApplyCommand("/vis/scene/notifyHandlers");
341}
#define G4warn
Definition G4Scene.cc:41
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
#define G4endl
Definition G4ios.hh:67
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)
void SetGuidance(const char *aGuidance)
static G4int ConvertToInt(const char *st)
static G4bool ConvertToBool(const char *st)
static G4double ConvertToDouble(const char *st)
G4int ApplyCommand(const char *aCommand)
static G4UImanager * GetUIpointer()
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