ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VisAttributes.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VisAttributes.hh
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 // John Allison 23rd October 1996
30 
31 // Class Description:
32 // Visualization attributes are a set of information associated with the
33 // visualizable objects. This information is necessary only for
34 // visualization, and is not included in geometrical information such
35 // as shapes, position, and orientation.
36 // A typical example of a visualization attribute is "colour".
37 // For example, in visualizing a box, the Visualization Manager must know
38 // its colour. If an object to be visualized has not been assigned a set of
39 // visualization attributes, then a proper default set is used
40 // automatically. A set of visualization attributes is held by an
41 // instance of class G4VisAttributes defined in the graphics_reps
42 // category. The followings are commonly-used attributes:
43 // - visibility
44 // - visibility of daughters
45 // - force style
46 // - force auxiliary edge visibility
47 // - force line segments per circle
48 // - colour
49 // Class Description - End:
50 
51 
52 #ifndef __G4VISATTRIBUTES_HH__
53 #define __G4VISATTRIBUTES_HH__
54 
55 #include "globals.hh"
56 #include <vector>
57 #include <map>
58 
59 #include "graphics_reps_defs.hh"
60 
61 #include "G4Colour.hh"
62 #include "G4Color.hh"
63 
64 class G4AttValue;
65 class G4AttDef;
66 
68 
70 
71  friend std::ostream& operator << (std::ostream& os, const G4VisAttributes& a);
72 
73 public: // With description
74 
77 
78  G4VisAttributes ();
80  G4VisAttributes (const G4Colour& colour);
81  G4VisAttributes (G4bool visibility, const G4Colour& colour);
85 
86 #ifndef WIN32
87  // Deprecated 14 July 2016 JA
88  // Use GetInvisible() instead. E.g.:
89  // logical_volume->SetVisAttributes(G4VisAttributes::GetInvisible());
90  // or use one of the above constructors or SetVisibility and
91  // logical_volume->SetVisAttributes(my_vis_attributes);
92  static const G4VisAttributes Invisible;
93 #endif
94 
95  static const G4VisAttributes& GetInvisible();
96 
97  G4bool operator != (const G4VisAttributes& a) const;
98  G4bool operator == (const G4VisAttributes& a) const;
99 
100  void SetVisibility (G4bool = true);
101  void SetDaughtersInvisible (G4bool = true);
102  void SetColour (const G4Colour&);
103  void SetColor (const G4Color&);
104  void SetColour (G4double red, G4double green, G4double blue,
105  G4double alpha = 1.);
106  void SetColor (G4double red, G4double green, G4double blue,
107  G4double alpha = 1.);
108  void SetLineStyle (LineStyle);
109  void SetLineWidth (G4double);
110  void SetForceWireframe (G4bool = true);
111  void SetForceSolid (G4bool = true);
112  void SetForceCloud (G4bool = true);
113  void SetForceNumberOfCloudPoints (G4int nPoints);
114  void SetForceAuxEdgeVisible (G4bool = true);
115  void SetForceLineSegmentsPerCircle (G4int nSegments);
116  // Allows choice of circle approximation. A circle of 360 degrees
117  // will be composed of nSegments line segments. If your solid has
118  // curves of D degrees that you need to divide into N segments,
119  // specify nSegments = N * 360 / D.
120  void SetStartTime (G4double);
121  void SetEndTime (G4double);
122  void SetAttValues (const std::vector<G4AttValue>*);
123  void SetAttDefs (const std::map<G4String,G4AttDef>*);
124 
125  G4bool IsVisible () const;
126  G4bool IsDaughtersInvisible () const;
127  const G4Colour& GetColour () const;
128  const G4Color& GetColor () const;
129  LineStyle GetLineStyle () const;
130  G4double GetLineWidth () const;
131  G4bool IsForceDrawingStyle () const;
134  G4bool IsForceAuxEdgeVisible () const;
138  G4double GetStartTime () const;
139  G4double GetEndTime () const;
141  // Returns an expendable copy of the G4AttValues...
142  const std::vector<G4AttValue>* CreateAttValues () const;
143  // Returns the orginal long life G4AttDefs...
144  const std::map<G4String,G4AttDef>* GetAttDefs () const;
145 
146  static constexpr G4int fMinLineSegmentsPerCircle = 3;
147  // Minumum number of sides per circle
148 
149  static constexpr G4double fVeryLongTime = 1.e100 * CLHEP::ns;
150  // About 1.e75 billion years!! Used as default for start and end time.
151 
152 private:
153 
154  G4bool fVisible; // Visibility flag
155  G4bool fDaughtersInvisible; // Make daughters invsibile.
158  G4double fLineWidth; // Units of "normal" device linewidth, e.g.,
159  // pixels for screen, 0.1 mm for paper.
160  G4bool fForceDrawingStyle; // To switch on forced drawing style.
161  ForcedDrawingStyle fForcedStyle; // Value of forced drawing style.
162  G4int fForcedNumberOfCloudPoints; // Number of points used for cloud style.
163  // <=0 means take viewer default
164  G4bool fForceAuxEdgeVisible; // To switch on a forced auxiliary edge mode.
165  G4bool fForcedAuxEdgeVisible; // Whether aux edges are visible or not.
166  G4int fForcedLineSegmentsPerCircle; // Forced lines segments per
167  // circle. <=0 means not forced.
168  G4double fStartTime, fEndTime; // Time range.
169  const std::vector<G4AttValue>* fAttValues; // For picking, etc.
170  const std::map<G4String,G4AttDef>* fAttDefs; // Corresponding definitions.
171 };
172 
173 #include "G4VisAttributes.icc"
174 
175 #endif