ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4ExtrudedSolid.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4ExtrudedSolid.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
// G4ExtrudedSolid
27
//
28
// Class description:
29
//
30
// G4ExtrudedSolid is a solid which represents the extrusion of an arbitrary
31
// polygon with fixed outline in the defined Z sections.
32
// The z-sides of the solid are the scaled versions of the same polygon.
33
// The solid is implemented as a specification of G4TessellatedSolid.
34
//
35
// Parameters in the constructor:
36
// const G4String& pName - solid name
37
// std::vector<G4TwoVector> polygon - the vertices of the outlined polygon
38
// defined in clockwise or anti-clockwise order
39
// std::vector<ZSection> - the z-sections defined by
40
// z position, offset and scale
41
// in increasing z-position order
42
//
43
// Parameters in the special constructor (for solid with 2 z-sections:
44
// G4double halfZ - the solid half length in Z
45
// G4TwoVector off1 - offset of the side in -halfZ
46
// G4double scale1 - scale of the side in -halfZ
47
// G4TwoVector off2 - offset of the side in +halfZ
48
// G4double scale2 - scale of the side in -halfZ
49
50
// Author: Ivana Hrivnacova, IPN Orsay
51
// --------------------------------------------------------------------
52
#ifndef G4EXTRUDEDSOLID_HH
53
#define G4EXTRUDEDSOLID_HH
54
55
#include "
G4GeomTypes.hh
"
56
57
#if defined(G4GEOM_USE_USOLIDS)
58
#define G4GEOM_USE_UEXTRUDEDSOLID 1
59
#endif
60
61
#if defined(G4GEOM_USE_UEXTRUDEDSOLID)
62
#define G4UExtrudedSolid G4ExtrudedSolid
63
#include "
G4UExtrudedSolid.hh
"
64
#else
65
66
#include <vector>
67
68
#include "
G4TwoVector.hh
"
69
#include "
G4TessellatedSolid.hh
"
70
71
class
G4ExtrudedSolid
:
public
G4TessellatedSolid
72
{
73
74
public
:
// without description
75
76
struct
ZSection
77
{
78
ZSection
(
G4double
z
,
const
G4TwoVector
&
offset
,
G4double
scale
)
79
:
fZ
(z),
fOffset
(offset),
fScale
(scale) {}
80
81
G4double
fZ
;
82
G4TwoVector
fOffset
;
83
G4double
fScale
;
84
};
85
86
public
:
// with description
87
88
G4ExtrudedSolid
(
const
G4String
& pName,
89
const
std::vector<G4TwoVector>& polygon,
90
const
std::vector<ZSection>& zsections);
91
// General constructor
92
93
G4ExtrudedSolid
(
const
G4String
& pName,
94
const
std::vector<G4TwoVector>& polygon,
95
G4double
halfZ,
96
const
G4TwoVector
& off1,
G4double
scale1,
97
const
G4TwoVector
& off2,
G4double
scale2 );
98
// Special constructor for solid with 2 z-sections
99
100
virtual
~G4ExtrudedSolid
();
101
// Destructor
102
103
// Accessors
104
105
inline
G4int
GetNofVertices
()
const
;
106
inline
G4TwoVector
GetVertex
(
G4int
index)
const
;
107
inline
std::vector<G4TwoVector>
GetPolygon
()
const
;
108
109
inline
G4int
GetNofZSections
()
const
;
110
inline
ZSection
GetZSection
(
G4int
index)
const
;
111
inline
std::vector<ZSection>
GetZSections
()
const
;
112
113
// Solid methods
114
115
EInside
Inside
(
const
G4ThreeVector
&
p
)
const
;
116
G4ThreeVector
SurfaceNormal
(
const
G4ThreeVector
&
p
)
const
;
117
G4double
DistanceToIn
(
const
G4ThreeVector
&
p
,
const
G4ThreeVector
&
v
)
const
;
118
G4double
DistanceToIn
(
const
G4ThreeVector
&
p
)
const
;
119
G4double
DistanceToOut
(
const
G4ThreeVector
&
p
,
120
const
G4ThreeVector
&
v
,
121
const
G4bool
calcNorm =
false
,
122
G4bool
* validNorm =
nullptr
,
123
G4ThreeVector
*
n
=
nullptr
)
const
;
124
G4double
DistanceToOut
(
const
G4ThreeVector
&
p
)
const
;
125
126
void
BoundingLimits
(
G4ThreeVector
&
pMin
,
G4ThreeVector
&
pMax
)
const
;
127
G4bool
CalculateExtent
(
const
EAxis
pAxis,
128
const
G4VoxelLimits
& pVoxelLimit,
129
const
G4AffineTransform
& pTransform,
130
G4double
&
pMin
,
G4double
&
pMax
)
const
;
131
G4GeometryType
GetEntityType
()
const
;
132
G4VSolid
*
Clone
()
const
;
133
134
std::ostream&
StreamInfo
(std::ostream& os)
const
;
135
136
public
:
// without description
137
138
G4ExtrudedSolid
(__void__&);
139
// Fake default constructor for usage restricted to direct object
140
// persistency for clients requiring preallocation of memory for
141
// persistifiable objects.
142
143
G4ExtrudedSolid
(
const
G4ExtrudedSolid
& rhs);
144
G4ExtrudedSolid
&
operator=
(
const
G4ExtrudedSolid
& rhs);
145
// Copy constructor and assignment operator.
146
147
private
:
148
149
void
ComputeProjectionParameters
();
150
void
ComputeLateralPlanes
();
151
inline
G4bool
PointInPolygon
(
const
G4ThreeVector
&
p
)
const
;
152
inline
G4double
DistanceToPolygonSqr
(
const
G4ThreeVector
&
p
)
const
;
153
G4ThreeVector
ApproxSurfaceNormal
(
const
G4ThreeVector
&
p
)
const
;
154
155
G4ThreeVector
GetVertex
(
G4int
iz,
G4int
ind)
const
;
156
G4TwoVector
ProjectPoint
(
const
G4ThreeVector
&
point
)
const
;
157
158
G4bool
IsSameLine
(
const
G4TwoVector
&
p
,
159
const
G4TwoVector
& l1,
160
const
G4TwoVector
& l2)
const
;
161
G4bool
IsSameLineSegment
(
const
G4TwoVector
&
p
,
162
const
G4TwoVector
& l1,
163
const
G4TwoVector
& l2)
const
;
164
G4bool
IsSameSide
(
const
G4TwoVector
& p1,
165
const
G4TwoVector
& p2,
166
const
G4TwoVector
& l1,
167
const
G4TwoVector
& l2)
const
;
168
G4bool
IsPointInside
(
const
G4TwoVector
&
a
,
169
const
G4TwoVector
&
b
,
170
const
G4TwoVector
&
c
,
171
const
G4TwoVector
&
p
)
const
;
172
G4double
GetAngle
(
const
G4TwoVector
& p0,
173
const
G4TwoVector
& pa,
174
const
G4TwoVector
& pb)
const
;
175
176
G4VFacet
*
MakeDownFacet
(
G4int
ind1,
G4int
ind2,
G4int
ind3)
const
;
177
G4VFacet
*
MakeUpFacet
(
G4int
ind1,
G4int
ind2,
G4int
ind3)
const
;
178
179
G4bool
AddGeneralPolygonFacets
();
180
G4bool
MakeFacets
();
181
182
private
:
183
184
G4int
fNv
;
185
G4int
fNz
;
186
std::vector<G4TwoVector>
fPolygon
;
187
std::vector<ZSection>
fZSections
;
188
std::vector< std::vector<G4int> >
fTriangles
;
189
G4bool
fIsConvex
=
false
;
190
G4GeometryType
fGeometryType
;
191
192
G4int
fSolidType
= 0;
193
struct
plane
{
G4double
a
,
b
,
c
,
d
; };
// a*x + b*y + c*z + d = 0
194
std::vector<plane>
fPlanes
;
195
struct
line
{
G4double
k
,
m
; };
// x = k*y + m;
196
std::vector<line>
fLines
;
197
std::vector<G4double>
fLengths
;
// edge lengths
198
199
std::vector<G4double>
fKScales
;
200
std::vector<G4double>
fScale0s
;
201
std::vector<G4TwoVector>
fKOffsets
;
202
std::vector<G4TwoVector>
fOffset0s
;
203
};
204
205
#include "G4ExtrudedSolid.icc"
206
207
#endif
208
209
#endif
geant4
tree
geant4-10.6-release
source
geometry
solids
specific
include
G4ExtrudedSolid.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:19
using
1.8.2 with
ECCE GitHub integration