Geant4 9.6.0
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// $Id$
28//
29// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
30//
31// Class G4QuadrangularFacet
32//
33// Class description:
34//
35// The G4QuadrangularFacet class is used for the contruction of
36// G4TessellatedSolid.
37// It is defined by four fVertices, which shall be in the same plane and be
38// supplied in anti-clockwise order looking from the outsider of the solid
39// where it belongs. Its constructor
40//
41// G4QuadrangularFacet (const G4ThreeVector Pt0, const G4ThreeVector vt1,
42// const G4ThreeVector vt2, const G4ThreeVector vt3,
43// G4FacetVertexType);
44//
45// takes 5 parameters to define the four fVertices:
46// 1) G4FacetvertexType = "ABSOLUTE": in this case Pt0, vt1, vt2 and vt3
47// are the four fVertices required in anti-clockwise order when looking
48// from the outsider.
49// 2) G4FacetvertexType = "RELATIVE": in this case the first vertex is Pt0,
50// the second vertex is Pt0+vt, the third vertex is Pt0+vt2 and
51// the fourth vertex is Pt0+vt3, in anti-clockwise order when looking
52// from the outsider.
53
54// CHANGE HISTORY
55// --------------
56//
57// 31 October 2004, P R Truscott, QinetiQ Ltd, UK - Created.
58// 12 October 2012, M Gayer, CERN, - Reviewed optimized implementation.
59//
60///////////////////////////////////////////////////////////////////////////////
61#ifndef G4QuadrangularFacet_HH
62#define G4QuadrangularFacet_HH 1
63
64#include "G4VFacet.hh"
65#include "G4Types.hh"
66#include "G4ThreeVector.hh"
67#include "G4TriangularFacet.hh"
68
70{
71 public: // with description
72
73 G4QuadrangularFacet (const G4ThreeVector &Pt0, const G4ThreeVector &vt1,
74 const G4ThreeVector &vt2, const G4ThreeVector &vt3,
78
80
82
84 G4double Distance (const G4ThreeVector &p, G4double minDist);
85 G4double Distance (const G4ThreeVector &p, G4double minDist,
86 const G4bool outgoing);
87 G4double Extent (const G4ThreeVector axis);
88 G4bool Intersect (const G4ThreeVector &p, const G4ThreeVector &v,
89 const G4bool outgoing, G4double &distance,
90 G4double &distFromSurface, G4ThreeVector &normal);
92
95
97
98 inline G4bool IsDefined () const;
99 inline G4int GetNumberOfVertices () const;
100 inline G4ThreeVector GetVertex (G4int i) const;
101 inline void SetVertex (G4int i, const G4ThreeVector &val);
102 inline void SetVertices(std::vector<G4ThreeVector> *v);
103
104 inline G4double GetRadius () const;
105 inline G4ThreeVector GetCircumcentre () const;
106
107 private:
108
109 inline G4int GetVertexIndex (G4int i) const;
110 inline void SetVertexIndex (G4int i, G4int val);
111
112 inline G4int AllocatedMemory();
113
114 private:
115
116 G4double fRadius;
117 G4ThreeVector fCircumcentre;
118
119 G4TriangularFacet fFacet1, fFacet2;
120};
121
122///////////////////////////////////////////////////////////////////////////////
123// Inlined Methods
124///////////////////////////////////////////////////////////////////////////////
125
127{
128 return 4;
129}
130
132{
133 return i == 3 ? fFacet2.GetVertex(2) : fFacet1.GetVertex(i);
134}
135
136
138{
139 return fRadius;
140}
141
143{
144 return fCircumcentre;
145}
146
148{
149 switch (i)
150 {
151 case 0:
152 fFacet1.SetVertex(0, val);
153 fFacet2.SetVertex(0, val);
154 break;
155 case 1:
156 fFacet1.SetVertex(1, val);
157 break;
158 case 2:
159 fFacet1.SetVertex(2, val);
160 fFacet2.SetVertex(1, val);
161 break;
162 case 3:
163 fFacet2.SetVertex(2, val);
164 break;
165 }
166}
167
168inline void G4QuadrangularFacet::SetVertices(std::vector<G4ThreeVector> *v)
169{
170 fFacet1.SetVertices(v);
171 fFacet2.SetVertices(v);
172}
173
175{
176 return fFacet1.IsDefined();
177}
178
179inline G4int G4QuadrangularFacet::GetVertexIndex (G4int i) const
180{
181 return i == 3 ? fFacet2.GetVertexIndex(2) : fFacet1.GetVertexIndex(i);
182}
183
184
185inline void G4QuadrangularFacet::SetVertexIndex (G4int i, G4int val)
186{
187 switch (i)
188 {
189 case 0:
190 fFacet1.SetVertexIndex(0, val);
191 fFacet2.SetVertexIndex(0, val);
192 break;
193 case 1:
194 fFacet1.SetVertexIndex(1, val);
195 break;
196 case 2:
197 fFacet1.SetVertexIndex(2, val);
198 fFacet2.SetVertexIndex(1, val);
199 break;
200 case 3:
201 fFacet2.SetVertexIndex(2, val);
202 break;
203 }
204}
205
206inline G4int G4QuadrangularFacet::AllocatedMemory()
207{
208 return sizeof(*this) + fFacet1.AllocatedMemory() + fFacet2.AllocatedMemory();
209}
210
211#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4FacetVertexType
Definition: G4VFacet.hh:56
G4ThreeVector Distance(const G4ThreeVector &p)
G4bool Intersect(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool outgoing, G4double &distance, G4double &distFromSurface, G4ThreeVector &normal)
G4double GetRadius() const
void SetVertex(G4int i, const G4ThreeVector &val)
G4int GetNumberOfVertices() const
G4ThreeVector GetSurfaceNormal() const
G4QuadrangularFacet & operator=(const G4QuadrangularFacet &right)
G4ThreeVector GetVertex(G4int i) const
G4ThreeVector GetCircumcentre() const
void SetVertices(std::vector< G4ThreeVector > *v)
G4GeometryType GetEntityType() const
G4double Extent(const G4ThreeVector axis)
G4ThreeVector GetPointOnFace() const
void SetVertex(G4int i, const G4ThreeVector &val)
void SetVertices(std::vector< G4ThreeVector > *v)
G4bool IsDefined() const
void SetVertexIndex(G4int i, G4int j)
G4int GetVertexIndex(G4int i) const
G4ThreeVector GetVertex(G4int i) const