Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VisExtent.hh
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$
28//
29//
30// A.Walkden 28/11/95
31
32// Class Description:
33// G4VisExtent defines a bounding box in a visualisable object's local
34// coordinate system which includes the object.
35// WARNING: it also attempts to support the concept of a bounding
36// sphere. (This is used extensively in the G4 Visualisation System
37// to calculate camera parameters, etc.) Be aware that this involves
38// loss of information. Given a bounding box, one can calculate the
39// bounding sphere; inverting this will produce a cube which *might*
40// *not* include the object. E.g., a long thin object of length l
41// will have a bounding sphere of diameter l; the corresponding cube
42// will have side l/std::sqrt(3) so that the bounding sphere diameter is
43// still l. Thus the long thin object will stick out of the cube.
44// So, if you once use the concept of bounding sphere you must stick
45// with it and abandon the concept of bounding box.
46// Class Description - End:
47
48#ifndef G4VISEXTENT_HH
49#define G4VISEXTENT_HH
50
51#include "globals.hh"
52#include "G4Point3D.hh"
53
55{
56public: // 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 G4bool operator != (const G4VisExtent& e) const;
64 G4double GetXmin () const;
65 G4double GetXmax () const;
66 G4double GetYmin () const;
67 G4double GetYmax () const;
68 G4double GetZmin () const;
69 G4double GetZmax () const;
70 const G4Point3D& GetExtentCentre () const;
71 const G4Point3D& GetExtentCenter () const;
73 void SetXmin (G4double xmin);
74 void SetXmax (G4double xmax);
75 void SetYmin (G4double ymin);
76 void SetYmax (G4double ymax);
77 void SetZmin (G4double zmin);
78 void SetZmax (G4double zmax);
79 friend std::ostream& operator << (std::ostream& os, const G4VisExtent& e);
80 static const G4VisExtent NullExtent;
81
82private:
83 G4double fXmin, fXmax, fYmin, fYmax, fZmin, fZmax;
84 mutable G4bool fRadiusCached, fCentreCached;
85 mutable G4double fRadius;
86 mutable G4Point3D fCentre;
87};
88
89inline G4double G4VisExtent::GetXmin () const { return fXmin; }
90inline G4double G4VisExtent::GetXmax () const { return fXmax; }
91inline G4double G4VisExtent::GetYmin () const { return fYmin; }
92inline G4double G4VisExtent::GetYmax () const { return fYmax; }
93inline G4double G4VisExtent::GetZmin () const { return fZmin; }
94inline G4double G4VisExtent::GetZmax () const { return fZmax; }
95
97 return GetExtentCentre ();
98}
99
101{fXmin = xmin; fRadiusCached = false; fCentreCached = false;}
103{fXmax = xmax; fRadiusCached = false; fCentreCached = false;}
105{fYmin = ymin; fRadiusCached = false; fCentreCached = false;}
107{fYmax = ymax; fRadiusCached = false; fCentreCached = false;}
109{fZmin = zmin; fRadiusCached = false; fCentreCached = false;}
111{fZmax = zmax; fRadiusCached = false; fCentreCached = false;}
112
113#endif
double G4double
Definition: G4Types.hh:64
bool G4bool
Definition: G4Types.hh:67
void SetYmin(G4double ymin)
Definition: G4VisExtent.hh:104
G4double GetYmin() const
Definition: G4VisExtent.hh:91
G4double GetXmax() const
Definition: G4VisExtent.hh:90
G4bool operator!=(const G4VisExtent &e) const
Definition: G4VisExtent.cc:91
void SetYmax(G4double ymax)
Definition: G4VisExtent.hh:106
void SetXmax(G4double xmax)
Definition: G4VisExtent.hh:102
const G4Point3D & GetExtentCenter() const
Definition: G4VisExtent.hh:96
G4double GetExtentRadius() const
Definition: G4VisExtent.cc:73
void SetXmin(G4double xmin)
Definition: G4VisExtent.hh:100
void SetZmax(G4double zmax)
Definition: G4VisExtent.hh:110
friend std::ostream & operator<<(std::ostream &os, const G4VisExtent &e)
Definition: G4VisExtent.cc:83
static const G4VisExtent NullExtent
Definition: G4VisExtent.hh:80
G4double GetYmax() const
Definition: G4VisExtent.hh:92
G4double GetZmax() const
Definition: G4VisExtent.hh:94
G4double GetZmin() const
Definition: G4VisExtent.hh:93
const G4Point3D & GetExtentCentre() const
Definition: G4VisExtent.cc:63
G4double GetXmin() const
Definition: G4VisExtent.hh:89
void SetZmin(G4double zmin)
Definition: G4VisExtent.hh:108