ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Colour.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4Colour.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 20th October 1996
30 
31 // Class Description:
32 // Class G4Colour has 4 fields, which represent the RGBA (red, green, blue,
33 // and alpha) components of colour. Each component takes a value between
34 // 0 and 1. If an irrelevant value, i.e., a value less than 0 or greater
35 // than 1, is given as an argument of the constructor, such a value is
36 // automatically clipped to 0 or 1. Alpha is opacity (1 = opaque).
37 //
38 // A G4Colour object is instantiated by giving red, green, and blue
39 // components to its constructor, i.e.,
40 //
41 // G4Colour::G4Colour ( G4double r = 1.0,
42 // G4double g = 1.0,
43 // G4double b = 1.0,
44 // G4double a = 1.0);
45 // // 0<=red, green, blue <= 1.0
46 //
47 // The default value of each component is 1.0. That is to say, the default
48 // colour is "white". For example, colours which are often used can be
49 // instantiated as follows:
50 //
51 // G4Colour white () ; // white
52 // G4Colour white (1.0, 1.0, 1.0) ; // white
53 // G4Colour gray (0.5, 0.5, 0.5) ; // gray
54 // G4Colour black (0.0, 0.0, 0.0) ; // black
55 // G4Colour brown (0.45,0.25,0.0) ; // G4 logo brown
56 // G4Colour red (1.0, 0.0, 0.0) ; // red
57 // G4Colour green (0.0, 1.0, 0.0) ; // green
58 // G4Colour blue (0.0, 0.0, 1.0) ; // blue
59 // G4Colour cyan (0.0, 1.0, 1.0) ; // cyan
60 // G4Colour magenta (1.0, 0.0, 1.0) ; // magenta
61 // G4Colour yellow (1.0, 1.0, 0.0) ; // yellow
62 //
63 // For convenience, static member functions are also defined for the above colours.
64 //
65 // After instantiation of a G4Colour object, you can access to its components
66 // with the following access functions:
67 //
68 // G4double G4Colour::GetRed () const ; // Get the red component.
69 // G4double G4Colour::GetGreen () const ; // Get the green component.
70 // G4double G4Colour::GetBlue () const ; // Get the blue component.
71 //
72 // Class Description - End:
73 
74 #ifndef G4COLOUR_HH
75 #define G4COLOUR_HH
76 
77 #include "globals.hh"
78 #include "G4ThreeVector.hh"
79 #include <iostream>
80 #include <map>
81 
82 class G4Colour {
83 
84  friend std::ostream& operator << (std::ostream&, const G4Colour&);
85 
86 public: // With description
87 
88  G4Colour (G4double r = 1., G4double g = 1., G4double b = 1.,
89  G4double a = 1.);
90 
92  // Converts the components of the 3-vector into red, green, blue.
93  // The opacity, alpha = 1.
94 
95  operator G4ThreeVector();
96  // Converts red, green, blue into the components of a 3-vector.
97 
98  G4bool operator != (const G4Colour& c) const;
99  G4bool operator == (const G4Colour& c) const {return !(operator != (c));}
100 
101  G4Colour& operator += (const G4Colour& rhs) {*this = rhs; return *this;}
102  // Note: This is required by RayTracer in its use of G4THitsMap.
103  // Adding colours, without also taking brightness into account, does not make
104  // sense, so let us make it synonymous with operator=, which is, I guess,
105  // equivalent to covering the old colour with the new, like a coat of paint.
106 
107  G4double GetRed () const;
108  G4double GetGreen () const;
109  G4double GetBlue () const;
110  G4double GetAlpha () const; // alpha = opacity = 1. - transparency.
111 
112  void SetRed (G4double);
113  void SetGreen (G4double);
114  void SetBlue (G4double);
115  void SetAlpha (G4double); // alpha = opacity = 1. - transparency.
116 
117  static G4Colour White();
118  static G4Colour Gray();
119  static G4Colour Grey();
120  static G4Colour Black();
121  static G4Colour Brown(); // G4 logo brown
122  static G4Colour Red();
123  static G4Colour Green();
124  static G4Colour Blue();
125  static G4Colour Cyan();
126  static G4Colour Magenta();
127  static G4Colour Yellow();
128 
129  static G4bool GetColour(const G4String& key, G4Colour& result);
130  // Get colour for given key, placing it in result.
131  // The key is usually the name of the colour.
132  // The key is not case sensitive.
133  // Returns false if key doesn't exist, leaving result unchanged.
134 
135  static void AddToMap(const G4String& key, const G4Colour& colour);
136  // Add user defined colour to colour map with given key. Standard
137  // colours are added to map by default.
138 
139  static void InitialiseColourMap();
140  static const std::map<G4String, G4Colour>& GetMap();
141 
142 private:
144 
145  static std::map<G4String, G4Colour> fColourMap;
147 
148 };
149 
150 inline G4double G4Colour::GetRed () const {return red;}
151 inline G4double G4Colour::GetGreen () const {return green;}
152 inline G4double G4Colour::GetBlue () const {return blue;}
153 inline G4double G4Colour::GetAlpha () const {return alpha;}
154 inline G4Colour G4Colour::White() {return G4Colour(1.0, 1.0, 1.0);}
155 inline G4Colour G4Colour::Gray() {return G4Colour(0.5, 0.5, 0.5);}
156 inline G4Colour G4Colour::Grey() {return G4Colour(0.5, 0.5, 0.5);}
157 inline G4Colour G4Colour::Black() {return G4Colour(0.0, 0.0, 0.0);}
158 inline G4Colour G4Colour::Brown() {return G4Colour(0.45,0.25,0.0);}
159 inline G4Colour G4Colour::Red() {return G4Colour(1.0, 0.0, 0.0);}
160 inline G4Colour G4Colour::Green() {return G4Colour(0.0, 1.0, 0.0);}
161 inline G4Colour G4Colour::Blue() {return G4Colour(0.0, 0.0, 1.0);}
162 inline G4Colour G4Colour::Cyan() {return G4Colour(0.0, 1.0, 1.0);}
163 inline G4Colour G4Colour::Magenta() {return G4Colour(1.0, 0.0, 1.0);}
164 inline G4Colour G4Colour::Yellow() {return G4Colour(1.0, 1.0, 0.0);}
165 
166 #endif