Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4QuadrangularFacet.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 and of QinetiQ Ltd, *
20// * subject to DEFCON 705 IPR conditions. *
21// * By using, copying, modifying or distributing the software (or *
22// * any work based on the software) you agree to acknowledge its *
23// * use in resulting scientific publications, and indicate your *
24// * acceptance of all terms of the Geant4 Software license. *
25// ********************************************************************
26//
27// G4QuadrangularFacet
28//
29// Class description:
30//
31// The G4QuadrangularFacet class is used for the contruction of
32// G4TessellatedSolid.
33// It is defined by four fVertices, which shall be in the same plane and be
34// supplied in anti-clockwise order looking from the outsider of the solid
35// where it belongs. Its constructor
36//
37// G4QuadrangularFacet (const G4ThreeVector& Pt0, const G4ThreeVector& vt1,
38// const G4ThreeVector& vt2, const G4ThreeVector& vt3,
39// G4FacetVertexType);
40//
41// takes 5 parameters to define the four fVertices:
42// 1) G4FacetvertexType = "ABSOLUTE": in this case Pt0, vt1, vt2 and vt3
43// are the four fVertices required in anti-clockwise order when looking
44// from the outsider.
45// 2) G4FacetvertexType = "RELATIVE": in this case the first vertex is Pt0,
46// the second vertex is Pt0+vt, the third vertex is Pt0+vt2 and
47// the fourth vertex is Pt0+vt3, in anti-clockwise order when looking
48// from the outsider.
49
50// 31 October 2004, P R Truscott, QinetiQ Ltd, UK - Created.
51// 12 October 2012, M Gayer, CERN, - Reviewed optimized implementation.
52// --------------------------------------------------------------------
53#ifndef G4QUADRANGULARFACET_HH
54#define G4QUADRANGULARFACET_HH
55
56#include "G4VFacet.hh"
57#include "G4Types.hh"
58#include "G4ThreeVector.hh"
59#include "G4TriangularFacet.hh"
60
62{
63 public:
64
65 G4QuadrangularFacet (const G4ThreeVector& Pt0, const G4ThreeVector& vt1,
66 const G4ThreeVector& vt2, const G4ThreeVector& vt3,
70
72
73 G4VFacet* GetClone () override;
74
76 G4double Distance (const G4ThreeVector& p, G4double minDist) override;
77 G4double Distance (const G4ThreeVector& p, G4double minDist,
78 const G4bool outgoing) override;
79 G4double Extent (const G4ThreeVector axis) override;
80 G4bool Intersect (const G4ThreeVector& p, const G4ThreeVector& v,
81 const G4bool outgoing, G4double& distance,
82 G4double& distFromSurface,
83 G4ThreeVector& normal) override;
84 G4ThreeVector GetSurfaceNormal () const override;
85
86 G4double GetArea () const override;
87 G4ThreeVector GetPointOnFace () const override;
88
89 G4GeometryType GetEntityType () const override;
90
91 inline G4bool IsDefined () const override;
92 inline G4int GetNumberOfVertices () const override;
93 inline G4ThreeVector GetVertex (G4int i) const override;
94 inline void SetVertex (G4int i, const G4ThreeVector& val) override;
95 inline void SetVertices(std::vector<G4ThreeVector>* v) override;
96
97 inline G4double GetRadius () const override;
98 inline G4ThreeVector GetCircumcentre () const override;
99
100 private:
101
102 inline G4int GetVertexIndex (G4int i) const override;
103 inline void SetVertexIndex (G4int i, G4int val) override;
104
105 inline G4int AllocatedMemory() override;
106
107 private:
108
109 G4double fRadius = 0.0;
110
111 G4ThreeVector fCircumcentre;
112
113 G4TriangularFacet fFacet1, fFacet2;
114};
115
116// --------------------------------------------------------------------
117// Inlined Methods
118// --------------------------------------------------------------------
119
121{
122 return 4;
123}
124
126{
127 return i == 3 ? fFacet2.GetVertex(2) : fFacet1.GetVertex(i);
128}
129
130
132{
133 return fRadius;
134}
135
137{
138 return fCircumcentre;
139}
140
142{
143 switch (i)
144 {
145 case 0:
146 fFacet1.SetVertex(0, val);
147 fFacet2.SetVertex(0, val);
148 break;
149 case 1:
150 fFacet1.SetVertex(1, val);
151 break;
152 case 2:
153 fFacet1.SetVertex(2, val);
154 fFacet2.SetVertex(1, val);
155 break;
156 case 3:
157 fFacet2.SetVertex(2, val);
158 break;
159 }
160}
161
162inline void G4QuadrangularFacet::SetVertices(std::vector<G4ThreeVector>* v)
163{
164 fFacet1.SetVertices(v);
165 fFacet2.SetVertices(v);
166}
167
169{
170 return fFacet1.IsDefined();
171}
172
173inline G4int G4QuadrangularFacet::GetVertexIndex (G4int i) const
174{
175 return i == 3 ? fFacet2.GetVertexIndex(2) : fFacet1.GetVertexIndex(i);
176}
177
178
179inline void G4QuadrangularFacet::SetVertexIndex (G4int i, G4int val)
180{
181 switch (i)
182 {
183 case 0:
184 fFacet1.SetVertexIndex(0, val);
185 fFacet2.SetVertexIndex(0, val);
186 break;
187 case 1:
188 fFacet1.SetVertexIndex(1, val);
189 break;
190 case 2:
191 fFacet1.SetVertexIndex(2, val);
192 fFacet2.SetVertexIndex(1, val);
193 break;
194 case 3:
195 fFacet2.SetVertexIndex(2, val);
196 break;
197 }
198}
199
200inline G4int G4QuadrangularFacet::AllocatedMemory()
201{
202 return sizeof(*this) + fFacet1.AllocatedMemory() + fFacet2.AllocatedMemory();
203}
204
205#endif
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4FacetVertexType
Definition G4VFacet.hh:48
G4int GetNumberOfVertices() const override
G4double GetArea() const override
G4ThreeVector Distance(const G4ThreeVector &p)
G4QuadrangularFacet(const G4ThreeVector &Pt0, const G4ThreeVector &vt1, const G4ThreeVector &vt2, const G4ThreeVector &vt3, G4FacetVertexType)
G4ThreeVector GetSurfaceNormal() const override
G4ThreeVector GetCircumcentre() const override
G4QuadrangularFacet & operator=(const G4QuadrangularFacet &right)
G4double GetRadius() const override
G4ThreeVector GetVertex(G4int i) const override
G4bool IsDefined() const override
~G4QuadrangularFacet() override
void SetVertices(std::vector< G4ThreeVector > *v) override
G4VFacet * GetClone() override
G4GeometryType GetEntityType() const override
void SetVertex(G4int i, const G4ThreeVector &val) override
G4double Extent(const G4ThreeVector axis) override
G4ThreeVector GetPointOnFace() const override
G4bool Intersect(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool outgoing, G4double &distance, G4double &distFromSurface, G4ThreeVector &normal) override
G4int GetVertexIndex(G4int i) const override
void SetVertex(G4int i, const G4ThreeVector &val) override
G4ThreeVector GetVertex(G4int i) const override
void SetVertices(std::vector< G4ThreeVector > *v) override
G4bool IsDefined() const override
void SetVertexIndex(G4int i, G4int j) override
G4int AllocatedMemory() override