58 #define G4MT_pcphi ((subInstanceManager.offset[instanceID]).fPhi) 
   64   return subInstanceManager;
 
   81   : ncorners(0), corners(0)
 
   94   r[0] = tail->
r; 
z[0] = tail->
z;
 
   95   r[1] = head->
r; 
z[1] = head->
z;
 
  161   zNormEdge[0] /= lAdj;
 
  173   zNormEdge[1] /= lAdj;
 
  182   : startPhi(0.), deltaPhi(0.), phiIsOpen(false), allBehind(false),
 
  183     cone(0), rNorm(0.), zNorm(0.), rS(0.), zS(0.), length(0.),
 
  184     prevRS(0.), prevZS(0.), nextRS(0.), nextZS(0.), ncorners(0), corners(0),
 
  221   if (
this == &source)  { 
return *
this; }
 
  247   kCarTolerance = source.kCarTolerance;
 
  248   fSurfaceArea = source.fSurfaceArea;
 
  293   G4double normSign = outgoing ? +1 : -1;
 
  301   if (nside == 0) 
return false;
 
  313     if (normSign*v.dot(normal) > 0)
 
  330       if (normSign*v.dot(pNormal) > 0)
 
  336         distFromSurface = -normSign*
DistanceAway( p, 
false, distOutside2 );
 
  337         if (distOutside2 < surfTolerance*surfTolerance)
 
  339           if (distFromSurface > -surfTolerance)
 
  351         distFromSurface = s1;
 
  364   if (nside==1) 
return false;
 
  376     if (normSign*v.dot(normal) > 0)
 
  381       if (normSign*v.dot(pNormal) > 0)
 
  384         distFromSurface = -normSign*
DistanceAway( p, 
false, distOutside2 );
 
  385         if (distOutside2 < surfTolerance*surfTolerance)
 
  387           if (distFromSurface > -surfTolerance)
 
  395         distFromSurface = s2;
 
  417   G4double normSign = outgoing ? -1 : +1;
 
  424   if (distFrom > -0.5*kCarTolerance )
 
  430       return std::sqrt( distFrom*distFrom + distOut2 );
 
  432       return std::fabs(distFrom);
 
  439   if (distFrom > -0.5*kCarTolerance)
 
  443       return std::sqrt( distFrom*distFrom + distOut2 );
 
  445       return std::fabs(distFrom);
 
  463   dist2 = distFrom*distFrom + distOut2;
 
  465   *bestDistance = std::sqrt( dist2);
 
  469   if ( (std::fabs(edgeRZnorm) < tolerance)
 
  470     && (distOut2< tolerance*tolerance) )
 
  472   else if (edgeRZnorm < 0)
 
  491   *bestDistance = std::sqrt( dFrom*dFrom + dOut2 );
 
  539       if (bd > ad) ad = bd;
 
  540       if (
cd > ad) ad = 
cd;
 
  541       if (dd > ad) ad = dd;
 
  596   G4double rFudge = 1.0/std::cos(0.5*sigPhi);
 
  726            cosPhi = std::cos(phi), 
 
  727            sinPhi = std::sin(phi);
 
  730                     v1( r1*cosPhi, r1*sinPhi, z1 ),
 
  745     cosPhi = std::cos(phi), 
 
  746     sinPhi = std::sin(phi);
 
  809   } 
while( --numPhi > 0 );
 
  823                   a1( 
r[1]*cosPhi, 
r[1]*sinPhi, 
z[1] ),
 
  824                   b0( r0*cosPhi, r0*sinPhi, 
z[0] ),
 
  825                   b1( r1*cosPhi, r1*sinPhi, 
z[1] );
 
  935   if (opposite) rx = -rx;
 
  940   G4double deltaR  = rx - 
r[0], deltaZ = zx - 
z[0];
 
  965     if (edgeRZnorm) *edgeRZnorm = answer;
 
  987       if (d2 < d1) d1 = 
d2;
 
  994       distOutside2 += dist*dist;
 
  997         *edgeRZnorm = 
std::max(std::fabs(*edgeRZnorm),std::fabs(dist));
 
 1025   if (rx < 0) part = -1;
 
 1030   G4double deltaR  = rx - 
r[0]*part, deltaZ = zx - 
z[0];
 
 1050       deltaR = rx - 
r[1]*part;
 
 1058     if (edgeRZnorm) *edgeRZnorm = answer;
 
 1080       if (d2 < d1) d1 = 
d2;
 
 1087       distOutside2 += dist*dist;
 
 1090         *edgeRZnorm = 
std::max(std::fabs(*edgeRZnorm),std::fabs(dist));
 
 1114   if (!
cone->
HitOn( rx, hit.
z() )) 
return false;
 
 1118     G4double phiTolerant = 2.0*kCarTolerance/(rx+kCarTolerance);
 
 1125     while( phi < 
startPhi-phiTolerant )   
 
 1137               qb = qx - corners[3];
 
 1140       if (normSign*qacb.
dot(v) < 0) 
return false;
 
 1142     else if (phi < phiTolerant)
 
 1146               qb = qx - corners[0];
 
 1149       if (normSign*qacb.
dot(v) < 0) 
return false;
 
 1183   G4double deter = tx1*ty2 - tx2*ty1;
 
 1185   G4double s1 = ((x2-x1)*ty2 - tx2*(y2-y1))/deter;
 
 1186   G4double s2 = ((x2-x1)*ty1 - tx1*(y2-y1))/deter;
 
 1192   x = 0.5*( x1+s1*tx1 + x2+s2*tx2 );
 
 1193   y = 0.5*( y1+s1*ty1 + y2+s2*ty2 );
 
 1204     fSurfaceArea = (
r[0]+
r[1])* std::sqrt(
sqr(
r[0]-
r[1])+
sqr(
z[0]-
z[1]));
 
 1207   return fSurfaceArea;
 
 1218   dr=
r[1]-
r[0];dz=
z[1]-
z[0];
 
 1239       zz = z[0]+(rr-r[0])*dz/dr;
 
G4ThreeVector GetPointOnFace()
 
static const G4double kInfinity
 
CLHEP::Hep3Vector G4ThreeVector
 
double dot(const Hep3Vector &) const 
 
G4bool Intersect(const G4ThreeVector &p, const G4ThreeVector &v, G4bool outgoing, G4double surfTolerance, G4double &distance, G4double &distFromSurface, G4ThreeVector &normal, G4bool &isAllBehind)
 
G4double GetSurfaceTolerance() const 
 
void SetNormal(const G4ThreeVector &newNormal)
 
virtual G4bool PartialClip(const G4VoxelLimits &voxelLimit, const EAxis IgnoreMe)
 
virtual void AddVertexInOrder(const G4ThreeVector vertex)
 
EInside Inside(const G4ThreeVector &p, G4double tolerance, G4double *bestDistance)
 
virtual void ClearAllVertices()
 
G4bool HitOn(const G4double r, const G4double z)
 
G4double Extent(const G4ThreeVector axis)
 
G4ThreeVector Normal(const G4ThreeVector &p, G4double *bestDistance)
 
G4int LineHitsCone(const G4ThreeVector &p, const G4ThreeVector &v, G4double *s1, G4double *s2)
 
const G4int kMinMeshSections
 
G4int CreateSubInstance()
 
void CopyStuff(const G4PolyconeSide &source)
 
static void FindLineIntersect(G4double x1, G4double y1, G4double tx1, G4double ty1, G4double x2, G4double y2, G4double tx2, G4double ty2, G4double &x, G4double &y)
 
static constexpr double twopi
 
virtual ~G4PolyconeSide()
 
static double normal(HepRandomEngine *eptr)
 
void CalculateExtent(const EAxis axis, const G4VoxelLimits &voxelLimit, const G4AffineTransform &tranform, G4SolidExtentList &extentList)
 
G4PolyconeSide(const G4PolyconeSideRZ *prevRZ, const G4PolyconeSideRZ *tail, const G4PolyconeSideRZ *head, const G4PolyconeSideRZ *nextRZ, G4double phiStart, G4double deltaPhi, G4bool phiIsOpen, G4bool isAllBehind=false)
 
void AddSurface(const G4ClippablePolygon &surface)
 
static const G4PlSideManager & GetSubInstanceManager()
 
const G4double kCarTolerance
 
G4IntersectingCone * cone
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4double GetPhi(const G4ThreeVector &p)
 
G4double DistanceAway(const G4ThreeVector &p, G4bool opposite, G4double &distOutside2, G4double *rzNorm=0)
 
G4bool PointOnCone(const G4ThreeVector &hit, G4double normSign, const G4ThreeVector &p, const G4ThreeVector &v, G4ThreeVector &normal)
 
Hep3Vector cross(const Hep3Vector &) const 
 
G4double Distance(const G4ThreeVector &p, G4bool outgoing)
 
G4PolyconeSide & operator=(const G4PolyconeSide &source)
 
const G4double kMeshAngleDefault
 
static G4GeometryTolerance * GetInstance()
 
const G4int kMaxMeshSections