Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4Box.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// G4Box
27//
28// Class description:
29//
30// A Box is a cuboid of given half lengths dx,dy,dz. The Box is
31// centred on the origin with sides parallel to the x/y/z axes.
32
33// 30.06.95 P.Kent: Converted from source code developed end 94
34// 27.03.96 J.Allison: Added virtual functions DescribeYourselfTo() and
35// SendWireframeTo(G4VGraphicsModel&)
36// 27.03.98 J.Apostolakis: Inherit from G4CSGSolid (not G4VSolid)
37// --------------------------------------------------------------------
38#ifndef G4BOX_HH
39#define G4BOX_HH
40
41#include "G4GeomTypes.hh"
42
43#if defined(G4GEOM_USE_USOLIDS)
44#define G4GEOM_USE_UBOX 1
45#endif
46
47#if defined(G4GEOM_USE_UBOX)
48 #define G4UBox G4Box
49 #include "G4UBox.hh"
50#else
51
52#include "G4CSGSolid.hh"
53#include "G4Polyhedron.hh"
54
55class G4Box : public G4CSGSolid
56{
57 public:
58
59 G4Box(const G4String& pName, G4double pX, G4double pY, G4double pZ);
60 // Construct a box with name, and half lengths pX,pY,pZ
61
62 ~G4Box() override;
63
65 const G4int n,
66 const G4VPhysicalVolume* pRep) override;
67
68 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override;
69
70 G4bool CalculateExtent(const EAxis pAxis,
71 const G4VoxelLimits& pVoxelLimit,
72 const G4AffineTransform& pTransform,
73 G4double& pMin, G4double& pMax) const override;
74
75 // Accessors and modifiers
76
77 inline G4double GetXHalfLength() const;
78 inline G4double GetYHalfLength() const;
79 inline G4double GetZHalfLength() const;
80
81 void SetXHalfLength(G4double dx) ;
82 void SetYHalfLength(G4double dy) ;
83 void SetZHalfLength(G4double dz) ;
84
85 // Methods for solid
86
87 inline G4double GetCubicVolume() override;
88 inline G4double GetSurfaceArea() override;
89
90 EInside Inside(const G4ThreeVector& p) const override;
91 G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const override;
93 const G4ThreeVector& v) const override;
94 G4double DistanceToIn(const G4ThreeVector& p) const override;
96 const G4bool calcNorm = false,
97 G4bool* validNorm = nullptr,
98 G4ThreeVector* n = nullptr) const override;
99 G4double DistanceToOut(const G4ThreeVector& p) const override;
100
101 G4GeometryType GetEntityType() const override;
102 G4ThreeVector GetPointOnSurface() const override;
103
104 G4VSolid* Clone() const override;
105
106 std::ostream& StreamInfo(std::ostream& os) const override;
107
108 // Utilities for visualization
109
110 void DescribeYourselfTo (G4VGraphicsScene& scene) const override;
111 G4VisExtent GetExtent () const override;
112 G4Polyhedron* CreatePolyhedron () const override;
113
114 G4Box(__void__&);
115 // Fake default constructor for usage restricted to direct object
116 // persistency for clients requiring preallocation of memory for
117 // persistifiable objects.
118
119 G4Box(const G4Box& rhs);
120 G4Box& operator=(const G4Box& rhs);
121 // Copy constructor and assignment operator.
122
123 private:
124
125 G4ThreeVector ApproxSurfaceNormal( const G4ThreeVector& p) const;
126 // Algorithm for SurfaceNormal() following the original
127 // specification for points not on the surface
128
129 private:
130
131 G4double fDx = 0.0, fDy = 0.0, fDz = 0.0;
132 G4double delta; // Cached half Cartesian tolerance
133};
134
135#include "G4Box.icc"
136
137#endif
138
139#endif
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
Definition G4Box.hh:56
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep) override
Definition G4Box.cc:191
G4double GetYHalfLength() const
G4Box(const G4String &pName, G4double pX, G4double pY, G4double pZ)
Definition G4Box.cc:52
void DescribeYourselfTo(G4VGraphicsScene &scene) const override
Definition G4Box.cc:523
G4VSolid * Clone() const override
Definition G4Box.cc:514
G4Polyhedron * CreatePolyhedron() const override
Definition G4Box.cc:533
G4Box & operator=(const G4Box &rhs)
Definition G4Box.cc:96
G4GeometryType GetEntityType() const override
Definition G4Box.cc:466
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const override
Definition G4Box.cc:320
G4double GetZHalfLength() const
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const override
Definition G4Box.cc:258
G4VisExtent GetExtent() const override
Definition G4Box.cc:528
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const override
Definition G4Box.cc:372
~G4Box() override
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const override
Definition G4Box.cc:202
G4double GetCubicVolume() override
void SetZHalfLength(G4double dz)
Definition G4Box.cc:167
EInside Inside(const G4ThreeVector &p) const override
Definition G4Box.cc:244
G4ThreeVector GetPointOnSurface() const override
Definition G4Box.cc:495
G4Box(const G4Box &rhs)
G4double GetXHalfLength() const
void SetYHalfLength(G4double dy)
Definition G4Box.cc:144
void SetXHalfLength(G4double dx)
Definition G4Box.cc:120
std::ostream & StreamInfo(std::ostream &os) const override
Definition G4Box.cc:475
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const override
Definition G4Box.cc:225
G4double GetSurfaceArea() override
EAxis
Definition geomdefs.hh:54
EInside
Definition geomdefs.hh:67