Geant4  10.02.p03
G4VisAttributes.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 // $Id: G4VisAttributes.cc 102310 2017-01-20 15:27:13Z gcosmo $
28 //
29 //
30 // John Allison 23rd October 1996
31 
32 #include "G4VisAttributes.hh"
33 
34 #include "G4AttValue.hh"
35 #include "G4AttDef.hh"
36 
38 fVisible (va.fVisible),
39 fDaughtersInvisible (va.fDaughtersInvisible),
40 fColour (va.fColour),
41 fLineStyle (va.fLineStyle),
42 fLineWidth (va.fLineWidth),
43 fForceDrawingStyle (va.fForceDrawingStyle),
44 fForcedStyle (va.fForcedStyle),
45 fForceAuxEdgeVisible (va.fForceAuxEdgeVisible),
46 fForcedLineSegmentsPerCircle (va.fForcedLineSegmentsPerCircle),
47 fStartTime (va.fStartTime),
48 fEndTime (va.fEndTime),
49 // AttValues are created afresh for each object (using the
50 // CreateAttValues message), but deletion is the responsibility of
51 // the creator. So just copy pointer.
52 fAttValues (va.fAttValues),
53 // AttDefs, if any, belong to the object from which they were obtained
54 // (with a GetAttDefs message), so just copy pointer.
55 fAttDefs (va.fAttDefs)
56 {}
57 
59 fVisible (true),
60 fDaughtersInvisible (false),
61 fColour (G4Colour ()),
63 fLineWidth (1.),
64 fForceDrawingStyle (false),
66 fForceAuxEdgeVisible (false),
67 fForcedLineSegmentsPerCircle (0), // <=0 means not forced.
70 fAttValues (0),
71 fAttDefs (0)
72 {}
73 
75 fVisible (visibility),
76 fDaughtersInvisible (false),
77 fColour (G4Colour ()),
79 fLineWidth (1.),
80 fForceDrawingStyle (false),
82 fForceAuxEdgeVisible (false),
83 fForcedLineSegmentsPerCircle (0), // <=0 means not forced.
86 fAttValues (0),
87 fAttDefs (0)
88 {}
89 
91 fVisible (true),
92 fDaughtersInvisible (false),
93 fColour (colour),
95 fLineWidth (1.),
96 fForceDrawingStyle (false),
98 fForceAuxEdgeVisible (false),
99 fForcedLineSegmentsPerCircle (0), // <=0 means not forced.
101 fEndTime (DBL_MAX),
102 fAttValues (0),
103 fAttDefs (0)
104 {}
105 
107  const G4Colour& colour):
108 fVisible (visibility),
109 fDaughtersInvisible (false),
110 fColour (colour),
112 fLineWidth (1.),
113 fForceDrawingStyle (false),
115 fForceAuxEdgeVisible (false),
116 fForcedLineSegmentsPerCircle (0), // <=0 means not forced.
118 fEndTime (DBL_MAX),
119 fAttValues (0),
120 fAttDefs (0)
121 {}
122 
124 {
125 }
126 
128 {
129  if (&rhs == this) return *this;
130  fVisible = rhs.fVisible;
132  fColour = rhs.fColour;
133  fLineStyle = rhs.fLineStyle;
134  fLineWidth = rhs.fLineWidth;
139  fStartTime = rhs.fStartTime;
140  fEndTime = rhs.fEndTime;
141  // AttValues are created afresh for each object (using the
142  // CreateAttValues message), but deletion is the responsibility of
143  // the creator. So just copy pointer.
144  fAttValues = rhs.fAttValues;
145  // AttDefs, if any, belong to the object from which they were obtained
146  // (with a GetAttDefs message), so just copy pointer.
147  fAttDefs = rhs.fAttDefs;
148  return *this;
149 }
150 
151 // Deprecated 14 July 2016 JA
153 
155  static const G4VisAttributes invisible = G4VisAttributes(false);
156  return invisible;
157 }
158 
159 const std::vector<G4AttValue>* G4VisAttributes::CreateAttValues () const {
160  // Create an expendable copy on the heap...
161  return new std::vector<G4AttValue>(*fAttValues);
162 }
163 
165  const G4int nSegmentsMin = fMinLineSegmentsPerCircle;
166  if (nSegments > 0 && nSegments < nSegmentsMin) {
167  nSegments = nSegmentsMin;
168  G4cout <<
169  "G4VisAttributes::SetForcedLineSegmentsPerCircle: attempt to set the"
170  "\nnumber of line segements per circle < " << nSegmentsMin
171  << "; forced to " << nSegments << G4endl;
172  }
173  fForcedLineSegmentsPerCircle = nSegments;
174 }
175 
176 std::ostream& operator << (std::ostream& os, const G4VisAttributes& a)
177 {
178  os << "G4VisAttributes: ";
179  if (!a.fVisible) os << "in";
180  os << "visible, daughters ";
181  if (a.fDaughtersInvisible) os << "in";
182  os << "visible, colour: " << a.fColour;
183  os << "\n linestyle: ";
184  switch (a.fLineStyle) {
186  os << "solid"; break;
188  os << "dashed"; break;
189  case G4VisAttributes::dotted: os << "dotted"; break;
190  default: os << "unrecognised"; break;
191  }
192  os << ", line width: " << a.fLineWidth;
193  os << ", min line segments per circle: " << a.GetMinLineSegmentsPerCircle();
194  os << "\n drawing style: ";
195  if (a.fForceDrawingStyle) {
196  os << "forced to: ";
197  switch (a.fForcedStyle) {
199  os << "wireframe"; break;
201  os << "solid"; break;
202  default: os << "unrecognised"; break;
203  }
204  }
205  else {
206  os << "not forced";
207  }
208  os << ", auxiliary edge visibility: ";
209  if (!a.fForceAuxEdgeVisible) {
210  os << "not ";
211  }
212  os << "forced";
213  os << "\n line segments per circle: ";
214  if (a.fForcedLineSegmentsPerCircle > 0) {
215  os << "forced to " << a.fForcedLineSegmentsPerCircle;
216  } else {
217  os << "not forced.";
218  }
219  os << "\n time range: (" << a.fStartTime << ',' << a.fEndTime << ')';
220  os << "\n G4AttValue pointer is ";
221  if (a.fAttValues) {
222  os << "non-";
223  }
224  os << "zero";
225  os << ", G4AttDef pointer is ";
226  if (a.fAttDefs) {
227  os << "non-";
228  }
229  os << "zero";
230  return os;
231 }
232 
234 
235  if (
236  (fVisible != a.fVisible) ||
238  (fColour != a.fColour) ||
239  (fLineStyle != a.fLineStyle) ||
240  (fLineWidth != a.fLineWidth) ||
244  (fStartTime != a.fStartTime) ||
245  (fEndTime != a.fEndTime) ||
246  (fAttValues != a.fAttValues) ||
247  (fAttDefs != a.fAttDefs)
248  )
249  return true;
250 
251  if (fForceDrawingStyle) {
252  if (fForcedStyle != a.fForcedStyle) return true;
253  }
254 
255  return false;
256 }
257 
259  return !(G4VisAttributes::operator != (a));
260 }
const std::map< G4String, G4AttDef > * fAttDefs
G4bool operator!=(const G4VisAttributes &a) const
int G4int
Definition: G4Types.hh:78
ForcedDrawingStyle fForcedStyle
G4VisAttributes & operator=(const G4VisAttributes &)
G4GLOB_DLL std::ostream G4cout
static G4int GetMinLineSegmentsPerCircle()
bool G4bool
Definition: G4Types.hh:79
const std::vector< G4AttValue > * CreateAttValues() const
const std::vector< G4AttValue > * fAttValues
static const G4VisAttributes Invisible
#define G4endl
Definition: G4ios.hh:61
friend std::ostream & operator<<(std::ostream &os, const G4VisAttributes &a)
G4bool operator==(const G4VisAttributes &a) const
G4int fForcedLineSegmentsPerCircle
#define DBL_MAX
Definition: templates.hh:83
static const G4VisAttributes & GetInvisible()
void SetForceLineSegmentsPerCircle(G4int nSegments)