Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/solids/specific/include/G4PolyPhiFace.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /geometry/solids/specific/include/G4PolyPhiFace.hh (Version 11.3.0) and /geometry/solids/specific/include/G4PolyPhiFace.hh (Version 3.0)


                                                   >>   1 // This code implementation is the intellectual property of
                                                   >>   2 // the GEANT4 collaboration.
                                                   >>   3 //
                                                   >>   4 // By copying, distributing or modifying the Program (or any work
                                                   >>   5 // based on the Program) you indicate your acceptance of this statement,
                                                   >>   6 // and all its terms.
                                                   >>   7 //
                                                   >>   8 // $Id: G4PolyPhiFace.hh,v 1.3 2000/11/02 16:54:48 gcosmo Exp $
                                                   >>   9 // GEANT4 tag $Name: geant4-03-00 $
                                                   >>  10 //
                                                   >>  11 // 
                                                   >>  12 // --------------------------------------------------------------------
                                                   >>  13 // GEANT 4 class header file
  1 //                                                 14 //
  2 // ******************************************* << 
  3 // * License and Disclaimer                    << 
  4 // *                                           << 
  5 // * The  Geant4 software  is  copyright of th << 
  6 // * the Geant4 Collaboration.  It is provided << 
  7 // * conditions of the Geant4 Software License << 
  8 // * LICENSE and available at  http://cern.ch/ << 
  9 // * include a list of copyright holders.      << 
 10 // *                                           << 
 11 // * Neither the authors of this software syst << 
 12 // * institutes,nor the agencies providing fin << 
 13 // * work  make  any representation or  warran << 
 14 // * regarding  this  software system or assum << 
 15 // * use.  Please see the license in the file  << 
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                           << 
 18 // * This  code  implementation is the result  << 
 19 // * technical work of the GEANT4 collaboratio << 
 20 // * By using,  copying,  modifying or  distri << 
 21 // * any work based  on the software)  you  ag << 
 22 // * use  in  resulting  scientific  publicati << 
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // ******************************************* << 
 25 //                                                 15 //
 26 // G4PolyPhiFace                                   16 // G4PolyPhiFace
 27 //                                                 17 //
 28 // Class description:                              18 // Class description:
 29 //                                                 19 //
 30 //   Definition of a face that bounds a polyco     20 //   Definition of a face that bounds a polycone or polyhedra when
 31 //   it has a phi opening:                         21 //   it has a phi opening:
 32 //                                                 22 //
 33 //   G4PolyPhiFace( const G4ReduciblePolygon*  <<  23 //   G4PolyPhiFace( const G4ReduciblePolygon *rz,
 34 //                        G4double phi,            24 //                        G4double phi,
 35 //                        G4double deltaPhi,       25 //                        G4double deltaPhi,
 36 //                        G4double phiOther )      26 //                        G4double phiOther )
 37 //                                                 27 //
 38 //   Specifically: a face that lies on a plane     28 //   Specifically: a face that lies on a plane that passes through
 39 //   the z axis. It has boundaries that are st     29 //   the z axis. It has boundaries that are straight lines of arbitrary
 40 //   length and direction, but with corners aw     30 //   length and direction, but with corners aways on the same side of
 41 //   the z axis.                                   31 //   the z axis.
 42                                                    32 
 43 // Author: David C. Williams (davidw@scipp.ucs <<  33 // Author: 
                                                   >>  34 //   David C. Williams (davidw@scipp.ucsc.edu)
 44 // -------------------------------------------     35 // --------------------------------------------------------------------
 45 #ifndef G4POLYPHIFACE_HH                       <<  36 
 46 #define G4POLYPHIFACE_HH 1                     <<  37 #ifndef G4PolyPhiFace_hh
                                                   >>  38 #define G4PolyPhiFace_hh
 47                                                    39 
 48 #include "G4VCSGface.hh"                           40 #include "G4VCSGface.hh"
 49 #include "G4TwoVector.hh"                      << 
 50                                                    41 
 51 class G4ReduciblePolygon;                          42 class G4ReduciblePolygon;
 52                                                    43 
 53 struct G4PolyPhiFaceVertex                     <<  44 typedef struct {
 54 {                                              <<  45         G4double x, y, r, z;          // position
 55   G4double x, y, r, z;   // position           <<  46         G4double rNorm, 
 56   G4double rNorm,                              <<  47                  zNorm;         // r/z normal
 57            zNorm;        // r/z normal         <<  48   G4ThreeVector norm3D; // 3D normal
 58   G4ThreeVector norm3D;  // 3D normal          <<  49 } G4PolyPhiFaceVertex;
 59                                                <<  50 
 60   // Needed for Triangulation Algorithm        <<  51 typedef struct {
 61   //                                           <<  52         G4PolyPhiFaceVertex     *v0, *v1;       // Corners
 62   G4bool ear;                                  <<  53         G4double tr, tz,                        // Unit vector along edge
 63   G4PolyPhiFaceVertex *next,*prev;             <<  54                  length;                        // Length of edge
 64 };                                             <<  55   G4ThreeVector norm3D;     // 3D edge normal vector
 65                                                <<  56 } G4PolyPhiFaceEdge;
 66 struct G4PolyPhiFaceEdge                       << 
 67 {                                              << 
 68   G4PolyPhiFaceEdge() = default;               << 
 69   G4PolyPhiFaceVertex  *v0{nullptr}, *v1{nullp << 
 70   G4double tr{.0}, tz{0.},        // Unit vect << 
 71            length{0.};            // Length of << 
 72   G4ThreeVector norm3D;           // 3D edge n << 
 73 };                                             << 
 74                                                    57 
 75 class G4PolyPhiFace : public G4VCSGface            58 class G4PolyPhiFace : public G4VCSGface
 76 {                                                  59 {
 77                                                    60 
 78   public:                                      <<  61   public:  // with description
 79                                                    62 
 80     G4PolyPhiFace( const G4ReduciblePolygon* r <<  63         G4PolyPhiFace( const G4ReduciblePolygon *rz,
 81                          G4double phi, G4doubl <<  64                        G4double phi, G4double deltaPhi, G4double phiOther );
 82       // Constructor.                          <<  65           // Constructor.
 83       // Points r,z should be supplied in cloc <<  66           // Points r,z should be supplied in clockwise order in r,z.
 84       // For example:                          <<  67           // For example:
 85       //                [1]---------[2]        <<  68           //                [1]---------[2]         ^ R
 86       //                 |           |         <<  69           //                 |           |          |
 87       //                 |           |         <<  70           //                 |           |          +--> z
 88       //                [0]---------[3]        <<  71           //                [0]---------[3]
 89                                                <<  72 
 90     ~G4PolyPhiFace() override;                 <<  73         virtual ~G4PolyPhiFace();
 91       // Destructor. Removes edges and corners <<  74           // Destructor. Removes edges and corners.
 92                                                <<  75 
 93     G4PolyPhiFace( const G4PolyPhiFace &source <<  76   G4PolyPhiFace( const G4PolyPhiFace &source );
 94     G4PolyPhiFace& operator=( const G4PolyPhiF <<  77   G4PolyPhiFace& operator=( const G4PolyPhiFace &source );
 95       // Copy constructor and assgnment operat <<  78     // Copy constructor and assgnment operator.
 96                                                <<  79 
 97     G4bool Intersect( const G4ThreeVector& p,  <<  80   G4bool Intersect( const G4ThreeVector &p, const G4ThreeVector &v,
 98                             G4bool outgoing, G <<  81         G4bool outgoing, G4double surfTolerance,
 99                             G4double& distance <<  82         G4double &distance, G4double &distFromSurface,
100                             G4ThreeVector& nor <<  83         G4ThreeVector &normal, G4bool &allBehind );
101                                                <<  84 
102     G4double Distance( const G4ThreeVector& p, <<  85         G4double Distance( const G4ThreeVector &p, G4bool outgoing );
103                                                <<  86   
104     EInside Inside( const G4ThreeVector& p, G4 <<  87   EInside Inside( const G4ThreeVector &p, G4double tolerance, 
105                           G4double* bestDistan <<  88       G4double *bestDistance );
106                                                <<  89     
107     G4ThreeVector Normal( const G4ThreeVector& <<  90   G4ThreeVector Normal( const G4ThreeVector &p,  G4double *bestDistance );
108                                 G4double* best <<  91 
109                                                <<  92   G4double Extent( const G4ThreeVector axis );
110     G4double Extent( const G4ThreeVector axis  <<  93   
111                                                <<  94   void CalculateExtent( const EAxis axis, 
112     void CalculateExtent( const EAxis axis,    <<  95             const G4VoxelLimits &voxelLimit,
113                           const G4VoxelLimits  <<  96             const G4AffineTransform &tranform,
114                           const G4AffineTransf <<  97             G4SolidExtentList &extentList        );
115                                 G4SolidExtentL <<  98 
116                                                <<  99   inline G4VCSGface *Clone();
117     inline G4VCSGface* Clone() override;       << 100           // Allocates on the heap a clone of this face.
118       // Allocates on the heap a clone of this << 101 
119                                                << 102   public:  // without description
120     G4double SurfaceArea() override;           << 103 
121     G4double SurfaceTriangle( const G4ThreeVec << 104   void Diagnose( G4VSolid *solid );
122                               const G4ThreeVec << 105           // Throw an exception if something is found inconsistent with
123     G4ThreeVector GetPointOnFace() override;   << 106           // the solid. For debugging purposes only
124       // Auxiliary methods for determination o << 
125                                                << 
126     G4PolyPhiFace(__void__&);                  << 
127       // Fake default constructor for usage re << 
128       // persistency for clients requiring pre << 
129       // persistifiable objects.               << 
130                                                << 
131     void Diagnose( G4VSolid* solid );          << 
132       // Throw an exception if something is fo << 
133       // the solid. For debugging purposes onl << 
134                                                   107 
135   protected:                                   << 
136                                                << 
137     G4bool InsideEdgesExact( G4double r, G4dou << 
138                              const G4ThreeVect << 
139       // Decide if the point in r,z is inside  << 
140       // **but** do so consistently with other << 
141                                                << 
142     G4bool InsideEdges( G4double r, G4double z << 
143     G4bool InsideEdges( G4double r, G4double z << 
144                         G4PolyPhiFaceVertex**  << 
145                         G4ThreeVector** head3D << 
146       // Decide if the point in r,z is inside  << 
147                                                << 
148     inline G4double ExactZOrder( G4double z,   << 
149                                  G4double qx,  << 
150                            const G4ThreeVector << 
151                                  G4double norm << 
152                            const G4PolyPhiFace << 
153       // Decide precisely whether a trajectory << 
154       // or exactly passes through the z posit << 
155                                                << 
156     void CopyStuff( const G4PolyPhiFace& sourc << 
157                                                << 
158     // Functions used for Triangulation in Cas << 
159     // The triangulation is used for GetPointO << 
160                                                << 
161     G4double Area2( const G4TwoVector& a, cons << 
162       // Calculation of 2*Area of Triangle wit << 
163                                                << 
164     G4bool Left( const G4TwoVector& a, const G << 
165     G4bool LeftOn( const G4TwoVector& a, const << 
166     G4bool Collinear( const G4TwoVector& a, co << 
167       // Boolean functions for sign of Surface << 
168                                                << 
169     G4bool IntersectProp( const G4TwoVector& a << 
170                           const G4TwoVector& c << 
171       // Boolean function for finding proper i << 
172       // line segments (a,b) and (c,d).        << 
173                                                << 
174     G4bool Between( const G4TwoVector& a, cons << 
175       // Boolean function for determining if p << 
176       // where the three points (a,b,c) are on << 
177                                                << 
178     G4bool Intersect( const G4TwoVector& a, co << 
179                       const G4TwoVector& c, co << 
180       // Boolean function for finding proper i << 
181       // of two line segments (a,b) and (c,d). << 
182                                                << 
183     G4bool Diagonalie( G4PolyPhiFaceVertex* a, << 
184       // Boolean Diagonalie help to determine  << 
185       // of segment (a,b) is convex or reflex. << 
186                                                << 
187     G4bool InCone( G4PolyPhiFaceVertex *a, G4P << 
188       // Boolean function for determining if b << 
189       // where a is the center of the cone.    << 
190                                                << 
191     G4bool Diagonal( G4PolyPhiFaceVertex* a, G << 
192       // Boolean function for determining if D << 
193       // inside Polycone or PolyHedra.         << 
194                                                << 
195     void EarInit();                            << 
196       // Initialisation for Triangulisation by << 
197       // For details see "Computational Geomet << 
198                                                << 
199     void Triangulate();                        << 
200       // Triangularisation by ear tips for Pol << 
201       // For details see "Computational Geomet << 
202       // NOTE: a copy of the shape is made and << 
203       //       order to have a list of triangl << 
204       //       method GetPointOnFace().        << 
205                                                   108 
206   protected:                                      109   protected:
207                                                   110 
208     G4int numEdges = 0;  // Number of edges    << 111   G4PolyPhiFaceEdge *edges;     // The edges of the face
209     G4PolyPhiFaceEdge* edges = nullptr;        << 112         G4PolyPhiFaceVertex     *corners;   // And the corners
210     G4PolyPhiFaceVertex* corners = nullptr;    << 113   G4int     numEdges;   // Number of edges
211     G4ThreeVector normal;        // Normal uni << 114   G4ThreeVector   normal;     // Normal unit vector
212     G4ThreeVector radial;        // Unit vecto << 115   G4ThreeVector   radial;     // Unit vector along radial direction
213     G4ThreeVector surface;       // Point on s << 116   G4ThreeVector   surface;    // Point on surface
214     G4ThreeVector surface_point; // Auxiliary  << 117   G4double    rMin, rMax, // Extent in r
215                                  // method Get << 118         zMin, zMax; // Extent in z
216     G4double rMin, rMax, // Extent in r        << 119   G4bool      allBehind;  // True if the polycone/polyhedra
217              zMin, zMax; // Extent in z        << 120                                             // is behind the place of this face
218     G4bool allBehind = false; // True if the p << 121 
219                               // is behind the << 122         G4bool InsideEdgesExact( G4double r, G4double z, G4double normSign,
220     G4double kCarTolerance;      // Surface th << 123                                  const G4ThreeVector &p, const G4ThreeVector &v );
221     G4double fSurfaceArea = 0.0; // Surface Ar << 124           // Decide if the point in r,z is inside the edges of our face,
222     G4PolyPhiFaceVertex* triangles = nullptr;  << 125           // **but** do so consistently with other faces.
223       // Auxiliary pointer to 'corners' used f << 126 
224       // Copy structure, changing the structur << 127   G4bool InsideEdges( G4double r, G4double z );
                                                   >> 128   G4bool InsideEdges( G4double r, G4double z, G4double *distRZ2,
                                                   >> 129                             G4PolyPhiFaceVertex **base3Dnorm=0,
                                                   >> 130           G4ThreeVector **head3Dnorm=0 );
                                                   >> 131           // Decide if the point in r,z is inside the edges of our face.
                                                   >> 132 
                                                   >> 133   inline G4double ExactZOrder( G4double z, 
                                                   >> 134              G4double qx, G4double qy, G4double qz, 
                                                   >> 135              const G4ThreeVector &v, 
                                                   >> 136              G4double normSign,
                                                   >> 137              const G4PolyPhiFaceVertex *vert ) const;
                                                   >> 138           // Decide precisely whether a trajectory passes to the left, right,
                                                   >> 139           // or exactly passes through the z position of a vertex point in face.
                                                   >> 140 
                                                   >> 141   void CopyStuff( const G4PolyPhiFace &source );
225 };                                                142 };
226                                                   143 
227 #include "G4PolyPhiFace.icc"                      144 #include "G4PolyPhiFace.icc"
228                                                   145 
229 #endif                                            146 #endif
230                                                   147