47 #ifndef __G4VTWISTSURFACE__ 
   48 #define __G4VTWISTSURFACE__ 
   50 #include <CLHEP/Units/SystemOfUnits.h> 
   57 #define G4VSURFACENXX 10 
  111                                              G4int         areacode[]) = 0;
 
  123                                                G4int &boundarytype) 
const;
 
  173                                       G4bool isGlobal = 
false ) = 0 ;
 
  207                             const G4int         &boundarytype);
 
  304                      const G4int         &boundarytype);
 
  311                                          G4int         &boundarytype) 
const;
 
static const G4int sAxisZ
 
G4int GetAreacode(G4int i) const 
 
void SetCorner(G4int areacode, G4double x, G4double y, G4double z)
 
static const G4int sC0Min1Max
 
static const G4int sAxisPhi
 
static const G4double kInfinity
 
CLHEP::Hep3Vector G4ThreeVector
 
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const 
 
CLHEP::HepRotation G4RotationMatrix
 
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const 
 
G4SurfCurNormal fCurrentNormal
 
virtual G4ThreeVector GetNormal(const G4ThreeVector &xx, G4bool isGlobal)=0
 
G4ThreeVector fXX[G4VSURFACENXX]
 
virtual G4int DistanceToSurface(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)=0
 
G4double DistanceToPlaneWithV(const G4ThreeVector &p, const G4ThreeVector &v, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
 
G4ThreeVector GetCorner(G4int areacode) const 
 
G4bool GetBoundaryParameters(const G4int &areacode, G4ThreeVector &d, G4ThreeVector &x0, G4int &boundarytype) const 
 
G4bool IsAxis0(G4int areacode) const 
 
static const G4int sOutside
 
G4VTwistSurface * fNeighbours[4]
 
virtual G4ThreeVector GetBoundaryAtPZ(G4int areacode, const G4ThreeVector &p) const 
 
static const G4int sAreaMask
 
virtual void SetBoundaries()=0
 
G4bool IsBoundary(G4int areacode, G4bool testbitmode=false) const 
 
G4ThreeVector fBoundaryDirection
 
G4bool IsSameBoundary(G4VTwistSurface *surface1, G4int areacode1, G4VTwistSurface *surface2, G4int areacode2) const 
 
G4SurfSideQuery fAmIOnLeftSide
 
static const G4int sAxisMask
 
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const 
 
static const G4int sAxisX
 
G4bool IsValidNorm() const 
 
virtual G4double DistanceToIn(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
 
static const G4int sC0Min1Min
 
virtual G4double GetSurfaceArea()=0
 
virtual void GetBoundaryParameters(const G4int &areacode, G4ThreeVector &d, G4ThreeVector &x0, G4int &boundarytype) const 
 
G4VTwistSurface ** GetNeighbours()
 
G4bool IsOutside(G4int areacode) const 
 
void SetNeighbours(G4VTwistSurface *axis0min, G4VTwistSurface *axis1min, G4VTwistSurface *axis0max, G4VTwistSurface *axis1max)
 
virtual G4double DistanceTo(const G4ThreeVector &gp, G4ThreeVector &gxx)
 
G4double GetDistance(G4int i) const 
 
static const G4int sAxis1
 
static const G4int sC0Max1Max
 
static const G4int sBoundary
 
virtual G4double DistanceToOut(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
 
virtual G4ThreeVector SurfacePoint(G4double, G4double, G4bool isGlobal=false)=0
 
G4double DistanceToLine(const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &d, G4ThreeVector &xx)
 
void SetCurrentStatus(G4int i, G4ThreeVector &xx, G4double &dist, G4int &areacode, G4bool &isvalid, G4int nxx, EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
 
virtual G4double DistanceToBoundary(G4int areacode, G4ThreeVector &xx, const G4ThreeVector &p)
 
G4bool IsValid(G4int i) const 
 
G4double DistanceToPlane(const G4ThreeVector &p, const G4ThreeVector &x0, const G4ThreeVector &n0, G4ThreeVector &xx)
 
static const G4int sAxis0
 
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const 
 
virtual void SetCorners()=0
 
static const G4int sAxisMin
 
static const G4int sAxisY
 
G4double fDistance[G4VSURFACENXX]
 
G4bool IsCorner(G4int areacode, G4bool testbitmode=false) const 
 
static const G4int sInside
 
virtual G4double GetBoundaryMax(G4double)=0
 
G4VTwistSurface(const G4String &name)
 
virtual void GetFacets(G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)=0
 
G4ThreeVector fCorners[4]
 
virtual G4double GetBoundaryMin(G4double)=0
 
static const G4int sCorner
 
void GetBoundaryAxis(G4int areacode, EAxis axis[]) const 
 
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
 
void SetFields(const G4int &areacode, const G4ThreeVector &d, const G4ThreeVector &x0, const G4int &boundarytype)
 
static const G4int sAxisMax
 
G4ThreeVector GetXX(G4int i) const 
 
void GetBoundaryLimit(G4int areacode, G4double limit[]) const 
 
virtual G4String GetName() const 
 
virtual void SetBoundary(const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
 
virtual G4int AmIOnLeftSide(const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
 
void SetAxis(G4int i, const EAxis axis)
 
G4int GetAxisType(G4int areacode, G4int whichaxis) const 
 
G4bool EqualIntersection(const Intersection &a, const Intersection &b)
 
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
 
static const G4int sSizeMask
 
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const 
 
G4bool IsAxis1(G4int areacode) const 
 
G4ThreeVector fBoundaryX0
 
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
 
virtual ~G4VTwistSurface()
 
G4bool fIsValid[G4VSURFACENXX]
 
G4bool DistanceSort(const Intersection &a, const Intersection &b)
 
G4int fAreacode[G4VSURFACENXX]
 
virtual G4int GetAreaCode(const G4ThreeVector &xx, G4bool withtol=true)=0
 
static const G4int sC0Max1Min
 
CurrentStatus fCurStatWithV
 
void ResetfDone(EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
 
static const G4int sAxisRho