Garfield++ 4.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Garfield::SolidExtrusion Class Reference

Extrusion. More...

#include <SolidExtrusion.hh>

+ Inheritance diagram for Garfield::SolidExtrusion:

Public Member Functions

 SolidExtrusion (const double lz, const std::vector< double > &xp, const std::vector< double > &yp)
 Constructor from half-length and profile.
 
 SolidExtrusion (const double lz, const std::vector< double > &xp, const std::vector< double > &yp, const double cx, const double cy, const double cz, const double dx, const double dy, const double dz)
 Constructor from half-length, profile, offset and orientation.
 
 ~SolidExtrusion ()
 Destructor.
 
bool IsInside (const double x, const double y, const double z, const bool tesselated) const override
 
bool GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const override
 Return the bounding box of the solid.
 
bool IsExtrusion () const override
 Return true if the solid is an extrusion.
 
double GetHalfLengthZ () const override
 Return the half-length along z.
 
bool GetProfile (std::vector< double > &xp, std::vector< double > &yp) const override
 Get the vertices defining an extrusion.
 
void SetHalfLengthZ (const double lz)
 Set the half-length of the extrusion.
 
void SetProfile (const std::vector< double > &xp, const std::vector< double > &yp)
 Set the coordinates of the extrusion profile.
 
void SetTopLid (const bool closed)
 Request the extrusion to be closed with a lid at +z.
 
void SetBottomLid (const bool closed)
 Request the extrusion to be closed with a lid at -z.
 
bool SolidPanels (std::vector< Panel > &panels) override
 Retrieve the surface panels of the solid.
 
void SetDiscretisationLevel (const double dis) override
 Set the discretisation level (for all panels).
 
double GetDiscretisationLevel (const Panel &panel) override
 Retrieve the discretisation level of a panel.
 
void Cut (const double x0, const double y0, const double z0, const double xn, const double yn, const double zn, std::vector< Panel > &panels) override
 
- Public Member Functions inherited from Garfield::Solid
 Solid ()=delete
 Default constructor.
 
 Solid (const double cx, const double cy, const double cz, const std::string &name)
 Constructor.
 
virtual ~Solid ()
 Destructor.
 
virtual bool IsInside (const double x, const double y, const double z, const bool tesselated=false) const =0
 
virtual bool GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const =0
 Return the bounding box of the solid.
 
virtual bool IsBox () const
 Return true if the solid is a box.
 
virtual bool IsTube () const
 Return true if the solid is a tube.
 
virtual bool IsSphere () const
 Return true if the solid is a sphere.
 
virtual bool IsHole () const
 Return true if the solid is a hole.
 
virtual bool IsRidge () const
 Return true if the solid is a ridge.
 
virtual bool IsExtrusion () const
 Return true if the solid is an extrusion.
 
virtual bool IsWire () const
 Return true if the solid is a wire.
 
void SetLabel (const std::string &label)
 Set a label.
 
std::string GetLabel () const
 Return the label.
 
bool GetCentre (double &x, double &y, double &z) const
 Retrieve the centre point of the solid.
 
bool GetDirection (double &dx, double &dy, double &dz) const
 Retrieve the direction vector.
 
bool GetOrientation (double &ctheta, double &stheta, double &cphi, double &sphi) const
 Retrieve the orientation (azimuthal and polar angles) of the solid.
 
virtual double GetHalfLengthX () const
 Return the half-length along x.
 
virtual double GetHalfLengthY () const
 Return the half-length along y.
 
virtual double GetHalfLengthZ () const
 Return the half-length along z.
 
virtual double GetInnerRadius () const
 Return the inner radius.
 
virtual double GetOuterRadius () const
 Return the outer radius.
 
virtual double GetRadius () const
 Return the radius.
 
virtual double GetLowerRadius () const
 Return the lower radius (of a hole).
 
virtual double GetUpperRadius () const
 Return the upper radius (of a hole).
 
virtual double GetRidgeOffset () const
 Return the x-offset of a ridge.
 
virtual double GetRidgeHeight () const
 Return the height of a ridge.
 
virtual bool GetProfile (std::vector< double > &xv, std::vector< double > &yv) const
 Get the vertices defining an extrusion.
 
unsigned int GetId () const
 Get the ID of the solid.
 
virtual bool SolidPanels (std::vector< Panel > &panels)=0
 Retrieve the surface panels of the solid.
 
virtual void SetDiscretisationLevel (const double dis)=0
 Set the discretisation level (for all panels).
 
virtual double GetDiscretisationLevel (const Panel &panel)=0
 Retrieve the discretisation level of a panel.
 
virtual void Cut (const double x0, const double y0, const double z0, const double xn, const double yn, const double zn, std::vector< Panel > &panels)=0
 
void SetBoundaryPotential (const double v)
 Apply Dirichlet boundary conditions (fixed voltage).
 
void SetBoundaryChargeDensity (const double q)
 Apply fixed-charge boundary conditions.
 
void SetBoundaryFloat ()
 Make the potential at the surface of the solid floating.
 
void SetBoundaryDielectric ()
 Make the surfaces of the solid dielectric-dielectric interfaces.
 
void SetBoundaryParallelField ()
 
void SetBoundaryPerpendicularField ()
 
BoundaryCondition GetBoundaryConditionType () const
 Retrieve the type of boundary condition.
 
double GetBoundaryPotential () const
 Retrieve the potential.
 
double GetBoundaryChargeDensity () const
 Retrieve the surface charge density.
 
void EnableDebugging (const bool on=true)
 Switch debugging messages on/off.
 
void SetColour (const int col)
 Set the colour of the solid.
 
int GetColour () const
 Get the colour of the solid.
 

Additional Inherited Members

- Public Types inherited from Garfield::Solid
enum  BoundaryCondition {
  Unknown = 0 , Voltage , Charge , Float ,
  Dielectric , DielectricCharge , ParallelField , PerpendicularField
}
 
- Static Public Member Functions inherited from Garfield::Solid
static bool Intersect (const double x1, const double y1, const double z1, const double x2, const double y2, const double z2, const double x0, const double y0, const double z0, const double a, const double b, const double c, double &xc, double &yc, double &zc)
 
- Protected Member Functions inherited from Garfield::Solid
void ToLocal (const double x, const double y, const double z, double &u, double &v, double &w) const
 
void ToGlobal (const double u, const double v, const double w, double &x, double &y, double &z) const
 
void VectorToLocal (const double x, const double y, const double z, double &u, double &v, double &w)
 Transform a vector from global to local coordinates.
 
void SetDirection (const double dx, const double dy, const double dz)
 
- Protected Attributes inherited from Garfield::Solid
double m_cX = 0.
 Centre of the solid.
 
double m_cY = 0.
 
double m_cZ = 0.
 
double m_dX = 0.
 Direction vector.
 
double m_dY = 0.
 
double m_dZ = 1.
 
double m_cPhi = 1.
 Azimuthal angle.
 
double m_sPhi = 0.
 
double m_cTheta = 1.
 Polar angle.
 
double m_sTheta = 0.
 
std::string m_className = "Solid"
 Class name.
 
std::string m_label = ""
 Label.
 
bool m_debug = false
 Debug flag.
 
BoundaryCondition m_bctype = Unknown
 Type of boundary condition.
 
double m_volt = 0.
 Potential at the surface.
 
double m_charge = 0.
 Surface charge density.
 
double m_eps = 0.
 Dielectric constant.
 
int m_colour = -1
 Colour.
 

Detailed Description

Extrusion.

Definition at line 10 of file SolidExtrusion.hh.

Constructor & Destructor Documentation

◆ SolidExtrusion() [1/2]

Garfield::SolidExtrusion::SolidExtrusion ( const double  lz,
const std::vector< double > &  xp,
const std::vector< double > &  yp 
)

Constructor from half-length and profile.

Definition at line 10 of file SolidExtrusion.cc.

13 : Solid(0, 0, 0, "SolidExtrusion"), m_lZ(lz) {
14 SetProfile(xp, yp);
15}
void SetProfile(const std::vector< double > &xp, const std::vector< double > &yp)
Set the coordinates of the extrusion profile.
Solid()=delete
Default constructor.

◆ SolidExtrusion() [2/2]

Garfield::SolidExtrusion::SolidExtrusion ( const double  lz,
const std::vector< double > &  xp,
const std::vector< double > &  yp,
const double  cx,
const double  cy,
const double  cz,
const double  dx,
const double  dy,
const double  dz 
)

Constructor from half-length, profile, offset and orientation.

Definition at line 17 of file SolidExtrusion.cc.

24 : SolidExtrusion(lz, xp, yp) {
25 m_cX = cx;
26 m_cY = cy;
27 m_cZ = cz;
28 SetDirection(dx, dy, dz);
29}
SolidExtrusion(const double lz, const std::vector< double > &xp, const std::vector< double > &yp)
Constructor from half-length and profile.
double m_cZ
Definition: Solid.hh:202
void SetDirection(const double dx, const double dy, const double dz)
Definition: Solid.cc:12
double m_cY
Definition: Solid.hh:202
double m_cX
Centre of the solid.
Definition: Solid.hh:202

◆ ~SolidExtrusion()

Garfield::SolidExtrusion::~SolidExtrusion ( )
inline

Destructor.

Definition at line 21 of file SolidExtrusion.hh.

21{}

Member Function Documentation

◆ Cut()

void Garfield::SolidExtrusion::Cut ( const double  x0,
const double  y0,
const double  z0,
const double  xn,
const double  yn,
const double  zn,
std::vector< Panel > &  panels 
)
overridevirtual

Implements Garfield::Solid.

Definition at line 235 of file SolidExtrusion.cc.

237 {
238
239 //-----------------------------------------------------------------------
240 // PLAEXC - Cuts extrusion with a plane.
241 //-----------------------------------------------------------------------
242
243 std::vector<double> xv;
244 std::vector<double> yv;
245 std::vector<double> zv;
246 const unsigned int np = m_xp.size();
247 // Go through the lines of the top lid, first point.
248 double x1, y1, z1;
249 ToGlobal(m_xp.back(), m_yp.back(), m_lZ, x1, y1, z1);
250 // Loop over the points.
251 for (unsigned int i = 0; i < np; ++i) {
252 double x2, y2, z2;
253 ToGlobal(m_xp[i], m_yp[i], m_lZ, x2, y2, z2);
254 // Cut with the plane.
255 double xc, yc, zc;
256 if (Intersect(x1, y1, z1, x2, y2, z2,
257 x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
258 xv.push_back(xc);
259 yv.push_back(yc);
260 zv.push_back(zc);
261 }
262 // Shift the coordinates.
263 x1 = x2;
264 y1 = y2;
265 z1 = z2;
266 }
267
268 if (m_lZ > 0.) {
269 // Go through the lines of the bottom lid, first point.
270 ToGlobal(m_xp.back(), m_yp.back(), -m_lZ, x1, y1, z1);
271 // Loop over the points.
272 for (unsigned int i = 0; i < np; ++i) {
273 double x2, y2, z2;
274 ToGlobal(m_xp[i], m_yp[i], -m_lZ, x2, y2, z2);
275 double xc, yc, zc;
276 if (Intersect(x1, y1, z1, x2, y2, z2,
277 x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
278 xv.push_back(xc);
279 yv.push_back(yc);
280 zv.push_back(zc);
281 }
282 // Shift the coordinates.
283 x1 = x2;
284 y1 = y2;
285 z1 = z2;
286 }
287 // Go through the ribs.
288 for (unsigned int i = 0; i < np; ++i) {
289 // Bottom and top of the line along the axis of the extrusion.
290 ToGlobal(m_xp[i], m_yp[i], +m_lZ, x1, y1, z1);
291 double x2, y2, z2;
292 ToGlobal(m_xp[i], m_yp[i], -m_lZ, x2, y2, z2);
293 double xc, yc, zc;
294 if (Intersect(x1, y1, z1, x2, y2, z2,
295 x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
296 xv.push_back(xc);
297 yv.push_back(yc);
298 zv.push_back(zc);
299 }
300 }
301 }
302 // Get rid of butterflies.
304 if (xv.size() >= 3) {
305 Panel panel;
306 panel.a = xn;
307 panel.b = yn;
308 panel.c = zn;
309 panel.xv = xv;
310 panel.yv = yv;
311 panel.zv = zv;
312 panel.colour = m_colour;
313 panel.volume = GetId();
314 panels.push_back(std::move(panel));
315 }
316}
static bool Intersect(const double x1, const double y1, const double z1, const double x2, const double y2, const double z2, const double x0, const double y0, const double z0, const double a, const double b, const double c, double &xc, double &yc, double &zc)
Definition: Solid.cc:52
unsigned int GetId() const
Get the ID of the solid.
Definition: Solid.hh:137
int m_colour
Colour.
Definition: Solid.hh:230
void ToGlobal(const double u, const double v, const double w, double &x, double &y, double &z) const
Definition: Solid.hh:246
void EliminateButterflies(std::vector< double > &xp, std::vector< double > &yp, std::vector< double > &zp)
Definition: Polygon.cc:355

◆ GetBoundingBox()

bool Garfield::SolidExtrusion::GetBoundingBox ( double &  xmin,
double &  ymin,
double &  zmin,
double &  xmax,
double &  ymax,
double &  zmax 
) const
overridevirtual

Return the bounding box of the solid.

Implements Garfield::Solid.

Definition at line 44 of file SolidExtrusion.cc.

45 {
46
47 if (m_xp.empty()) return false;
48 const double x0 = *std::min_element(m_xp.begin(), m_xp.end());
49 const double x1 = *std::max_element(m_xp.begin(), m_xp.end());
50 const double y0 = *std::min_element(m_yp.begin(), m_yp.end());
51 const double y1 = *std::max_element(m_yp.begin(), m_yp.end());
52 // Take the margins wide.
53 const double r = std::max({fabs(x0), fabs(y0), fabs(x1), fabs(y1)});
54 const double d = sqrt(r * r + m_lZ * m_lZ);
55 xmin = m_cX - d;
56 xmax = m_cX + d;
57 ymin = m_cY - d;
58 ymax = m_cY + d;
59 zmin = m_cZ - d;
60 zmax = m_cZ + d;
61 return true;
62}
DoubleAc fabs(const DoubleAc &f)
Definition: DoubleAc.h:615
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:314

◆ GetDiscretisationLevel()

double Garfield::SolidExtrusion::GetDiscretisationLevel ( const Panel panel)
overridevirtual

Retrieve the discretisation level of a panel.

Implements Garfield::Solid.

Definition at line 221 of file SolidExtrusion.cc.

221 {
222
223 // Transform the normal vector to local coordinates.
224 double u = 0., v = 0., w = 0.;
225 VectorToLocal(panel.a, panel.b, panel.c, u, v, w);
226 // Identify the vector.
227 if (w > std::max(fabs(u), fabs(v))) {
228 return m_dis[0];
229 } else if (w < -std::max(fabs(u), fabs(v))) {
230 return m_dis[1];
231 }
232 return m_dis[2];
233}
void VectorToLocal(const double x, const double y, const double z, double &u, double &v, double &w)
Transform a vector from global to local coordinates.
Definition: Solid.hh:253

◆ GetHalfLengthZ()

double Garfield::SolidExtrusion::GetHalfLengthZ ( ) const
inlineoverridevirtual

Return the half-length along z.

Reimplemented from Garfield::Solid.

Definition at line 29 of file SolidExtrusion.hh.

29{ return m_lZ; }

◆ GetProfile()

bool Garfield::SolidExtrusion::GetProfile ( std::vector< double > &  xv,
std::vector< double > &  yv 
) const
inlineoverridevirtual

Get the vertices defining an extrusion.

Reimplemented from Garfield::Solid.

Definition at line 30 of file SolidExtrusion.hh.

31 {
32 xp = m_xp;
33 yp = m_yp;
34 return !m_xp.empty();
35 }

◆ IsExtrusion()

bool Garfield::SolidExtrusion::IsExtrusion ( ) const
inlineoverridevirtual

Return true if the solid is an extrusion.

Reimplemented from Garfield::Solid.

Definition at line 27 of file SolidExtrusion.hh.

27{ return true; }

◆ IsInside()

bool Garfield::SolidExtrusion::IsInside ( const double  x,
const double  y,
const double  z,
const bool  tesselated 
) const
overridevirtual

Check whether a given point is inside the solid. If requested, use the tesselated approximation of the solid (if applicable).

Implements Garfield::Solid.

Definition at line 31 of file SolidExtrusion.cc.

32 {
33
34 if (m_xp.empty()) return false;
35 // Transform the point to local coordinates.
36 double u = x, v = y, w = z;
37 ToLocal(x, y, z, u, v, w);
38 if (fabs(w) > m_lZ) return false;
39 bool inside = false, edge = false;
40 Polygon::Inside(m_xp, m_yp, u, v, inside, edge);
41 return inside;
42}
void ToLocal(const double x, const double y, const double z, double &u, double &v, double &w) const
Definition: Solid.hh:234
void Inside(const std::vector< double > &xpl, const std::vector< double > &ypl, const double x, const double y, bool &inside, bool &edge)
Definition: Polygon.cc:187

◆ SetBottomLid()

void Garfield::SolidExtrusion::SetBottomLid ( const bool  closed)
inline

Request the extrusion to be closed with a lid at -z.

Definition at line 44 of file SolidExtrusion.hh.

44{ m_botlid = closed; }

◆ SetDiscretisationLevel()

void Garfield::SolidExtrusion::SetDiscretisationLevel ( const double  dis)
inlineoverridevirtual

Set the discretisation level (for all panels).

Implements Garfield::Solid.

Definition at line 47 of file SolidExtrusion.hh.

47 {
48 m_dis.fill(dis);
49 }

◆ SetHalfLengthZ()

void Garfield::SolidExtrusion::SetHalfLengthZ ( const double  lz)

Set the half-length of the extrusion.

Definition at line 64 of file SolidExtrusion.cc.

64 {
65 if (lz > 0.) {
66 m_lZ = lz;
67 } else {
68 std::cerr << "SolidExtrusion::SetHalfLengthZ: Half-length must be > 0.\n";
69 }
70}

◆ SetProfile()

void Garfield::SolidExtrusion::SetProfile ( const std::vector< double > &  xp,
const std::vector< double > &  yp 
)

Set the coordinates of the extrusion profile.

Definition at line 72 of file SolidExtrusion.cc.

73 {
74
75 if (xp.size() != yp.size()) {
76 std::cerr << "SolidExtrusion::SetProfile:\n"
77 << " Mismatch between number of x and y coordinates.\n";
78 return;
79 }
80 const auto np = xp.size();
81 if (np < 3) {
82 std::cerr << "SolidExtrusion::SetProfile: Too few points; rejected.\n";
83 return;
84 }
85 if (!Polygon::NonTrivial(xp, yp)) {
86 std::cerr << "SolidExtrusion::SetProfile: Not a valid polygon.\n";
87 return;
88 }
89 const auto it = std::max_element(xp.begin(), xp.end());
90 const unsigned int i0 = std::distance(xp.begin(), it);
91 const unsigned int i1 = i0 < np - 1 ? i0 + 1 : 0;
92 const unsigned int i2 = i1 < np - 1 ? i1 + 1 : 0;
93 const double det = (xp[i1] - xp[i0]) * (yp[i2] - yp[i0]) -
94 (xp[i2] - xp[i0]) * (yp[i1] - yp[i0]);
95 if (det < 0.) {
96 m_clockwise = true;
97 } else if (det > 0.) {
98 m_clockwise = false;
99 } else {
100 std::cerr << "SolidExtrusion::SetProfile:\n"
101 << " Unable to determine profile orientation;"
102 << " assuming it is clockwise.\n";
103 m_clockwise = true;
104 }
105 m_xp = xp;
106 m_yp = yp;
107}
bool NonTrivial(const std::vector< double > &xp, const std::vector< double > &yp)
Check whether a set of points builds a non-trivial polygon.
Definition: Polygon.cc:285

Referenced by SolidExtrusion().

◆ SetTopLid()

void Garfield::SolidExtrusion::SetTopLid ( const bool  closed)
inline

Request the extrusion to be closed with a lid at +z.

Definition at line 42 of file SolidExtrusion.hh.

42{ m_toplid = closed; }

◆ SolidPanels()

bool Garfield::SolidExtrusion::SolidPanels ( std::vector< Panel > &  panels)
overridevirtual

Retrieve the surface panels of the solid.

Implements Garfield::Solid.

Definition at line 109 of file SolidExtrusion.cc.

109 {
110 // -----------------------------------------------------------------------
111 // PLAEXP - Generates a table of polygons for an extrusion.
112 // -----------------------------------------------------------------------
113 const auto id = GetId();
114 const auto nPanels = panels.size();
115 if (m_xp.empty()) {
116 std::cerr << "SolidExtrusion::SolidPanels: Profile is not defined.\n";
117 return false;
118 }
119 // Direction vector.
120 const double fnorm = sqrt(m_dX * m_dX + m_dY * m_dY + m_dZ * m_dZ);
121 if (fnorm <= 0) {
122 std::cerr << "SolidExtrusion::SolidPanels:\n"
123 << " Zero norm direction vector; no panels generated.\n";
124 return false;
125 }
126 const double a = m_dX / fnorm;
127 const double b = m_dY / fnorm;
128 const double c = m_dZ / fnorm;
129 // Number of points
130 const unsigned int np = m_xp.size();
131 // Create the top lid.
132 if (m_toplid) {
133 Panel panel;
134 panel.a = a;
135 panel.b = b;
136 panel.c = c;
137 for (unsigned int i = 0; i < np; ++i) {
138 // Rotate into place.
139 double x, y, z;
140 ToGlobal(m_xp[i], m_yp[i], m_lZ, x, y, z);
141 panel.xv.push_back(x);
142 panel.yv.push_back(y);
143 panel.zv.push_back(z);
144 }
145 panel.colour = m_colour;
146 panel.volume = id;
147 panels.push_back(std::move(panel));
148 }
149 // Create the bottom lid.
150 if (m_botlid) {
151 Panel panel;
152 panel.a = -a;
153 panel.b = -b;
154 panel.c = -c;
155 for (unsigned int i = 0; i < np; ++i) {
156 // Rotate into place.
157 double x, y, z;
158 ToGlobal(m_xp[i], m_yp[i], -m_lZ, x, y, z);
159 panel.xv.push_back(x);
160 panel.yv.push_back(y);
161 panel.zv.push_back(z);
162 }
163 panel.colour = m_colour;
164 panel.volume = id;
165 panels.push_back(std::move(panel));
166 }
167 // Create the side panels.
168 if (m_lZ > 0) {
169 double x0, y0, z0;
170 ToGlobal(m_xp.back(), m_yp.back(), -m_lZ, x0, y0, z0);
171 double x1, y1, z1;
172 ToGlobal(m_xp.back(), m_yp.back(), +m_lZ, x1, y1, z1);
173 // Go around the extrusion.
174 for (unsigned int i = 0; i < np; ++i) {
175 // Bottom and top of the line along the axis of the extrusion.
176 double x2, y2, z2;
177 ToGlobal(m_xp[i], m_yp[i], +m_lZ, x2, y2, z2);
178 double x3, y3, z3;
179 ToGlobal(m_xp[i], m_yp[i], -m_lZ, x3, y3, z3);
180 // Compute the normal vector.
181 const unsigned int k = i == 0 ? np - 1 : i - 1;
182 double xn = m_yp[k] - m_yp[i];
183 double yn = m_xp[i] - m_xp[k];
184 const double fn = sqrt(xn * xn + yn * yn);
185 if (fn <= 0) {
186 std::cerr << "SolidExtrusion::SolidPanels: Zero norm edge (warning).\n";
187 continue;
188 }
189 if (m_clockwise) {
190 xn = xn / fn;
191 yn = yn / fn;
192 } else {
193 xn = -xn / fn;
194 yn = -yn / fn;
195 }
196 Panel panel;
197 panel.a = m_cPhi * m_cTheta * xn - m_sPhi * yn;
198 panel.b = m_sPhi * m_cTheta * xn + m_cPhi * yn;
199 panel.c = -m_sTheta * xn;
200 panel.xv = {x0, x1, x2, x3};
201 panel.yv = {y0, y1, y2, y3};
202 panel.zv = {z0, z1, z2, z3};
203 panel.colour = m_colour;
204 panel.volume = id;
205 panels.push_back(std::move(panel));
206 // Shift the points.
207 x0 = x3;
208 y0 = y3;
209 z0 = z3;
210 x1 = x2;
211 y1 = y2;
212 z1 = z2;
213 }
214 }
215 // Done, check panel count.
216 std::cout << "SolidExtrusion::SolidPanels: " << panels.size() - nPanels
217 << " panels.\n";
218 return true;
219}
double m_dZ
Definition: Solid.hh:205
double m_cTheta
Polar angle.
Definition: Solid.hh:209
double m_dX
Direction vector.
Definition: Solid.hh:205
double m_sPhi
Definition: Solid.hh:207
double m_sTheta
Definition: Solid.hh:209
double m_dY
Definition: Solid.hh:205
double m_cPhi
Azimuthal angle.
Definition: Solid.hh:207

The documentation for this class was generated from the following files: