ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VisExtent.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VisExtent.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 // A.Walkden 28/11/95
30 
31 // Class Description:
32 // G4VisExtent defines a bounding box in a visualisable object's local
33 // coordinate system which includes the object.
34 // WARNING: it also attempts to support the concept of a bounding
35 // sphere. (This is used extensively in the G4 Visualisation System
36 // to calculate camera parameters, etc.) Be aware that this involves
37 // loss of information. Given a bounding box, one can calculate the
38 // bounding sphere; inverting this will produce a cube which *might*
39 // *not* include the object. E.g., a long thin object of length l
40 // will have a bounding sphere of diameter l; the corresponding cube
41 // will have side l/std::sqrt(3) so that the bounding sphere diameter is
42 // still l. Thus the long thin object will stick out of the cube.
43 // So, if you once use the concept of bounding sphere you must stick
44 // with it and abandon the concept of bounding box.
45 // Class Description - End:
46 
47 #ifndef G4VISEXTENT_HH
48 #define G4VISEXTENT_HH
49 
50 #include "globals.hh"
51 #include "G4Point3D.hh"
52 #include "G4Transform3D.hh"
53 
55 {
56 public: // With description
57 
58  G4VisExtent (G4double xmin = 0., G4double xmax = 0.,
59  G4double ymin = 0., G4double ymax = 0.,
60  G4double zmin = 0., G4double zmax = 0.);
61  G4VisExtent (const G4Point3D& centre, G4double radius);
62  ~G4VisExtent ();
63  static const G4VisExtent& GetNullExtent ();
64  G4bool operator != (const G4VisExtent& e) const;
65  G4bool operator == (const G4VisExtent& e) const {return !operator!=(e);}
66 
68  // The above transforms the box defined by the 6 limits fXmin, fXmax,
69  // etc., and produces a new box that encloses the transformed box. If the
70  // transform includes a rotation the new box will likely be a good deal larger
71  // than the old one, but hey-ho, the concept of G4VisExtent requires the
72  // limits to be along the major axes and thus defines a box whose edges are
73  // parallel to the major axes. So use the above with care.
74 
75  G4double GetXmin () const;
76  G4double GetXmax () const;
77  G4double GetYmin () const;
78  G4double GetYmax () const;
79  G4double GetZmin () const;
80  G4double GetZmax () const;
81  const G4Point3D& GetExtentCentre () const;
82  const G4Point3D& GetExtentCenter () const;
83  G4double GetExtentRadius () const;
84  void SetXmin (G4double xmin);
85  void SetXmax (G4double xmax);
86  void SetYmin (G4double ymin);
87  void SetYmax (G4double ymax);
88  void SetZmin (G4double zmin);
89  void SetZmax (G4double zmax);
90  friend std::ostream& operator << (std::ostream& os, const G4VisExtent& e);
91 
92 private:
95  mutable G4double fRadius;
96  mutable G4Point3D fCentre;
97 };
98 
99 inline G4double G4VisExtent::GetXmin () const { return fXmin; }
100 inline G4double G4VisExtent::GetXmax () const { return fXmax; }
101 inline G4double G4VisExtent::GetYmin () const { return fYmin; }
102 inline G4double G4VisExtent::GetYmax () const { return fYmax; }
103 inline G4double G4VisExtent::GetZmin () const { return fZmin; }
104 inline G4double G4VisExtent::GetZmax () const { return fZmax; }
105 
106 inline const G4Point3D& G4VisExtent::GetExtentCenter () const {
107  return GetExtentCentre ();
108 }
109 
111 {fXmin = xmin; fRadiusCached = false; fCentreCached = false;}
113 {fXmax = xmax; fRadiusCached = false; fCentreCached = false;}
115 {fYmin = ymin; fRadiusCached = false; fCentreCached = false;}
117 {fYmax = ymax; fRadiusCached = false; fCentreCached = false;}
118 inline void G4VisExtent::SetZmin (G4double zmin)
119 {fZmin = zmin; fRadiusCached = false; fCentreCached = false;}
120 inline void G4VisExtent::SetZmax (G4double zmax)
121 {fZmax = zmax; fRadiusCached = false; fCentreCached = false;}
122 
123 #endif