61 axis0min, axis1min, axis0max, axis1max)
63 if (axis0 ==
kPhi && axis1 ==
kRho) {
64 G4Exception(
"G4TwistTubsFlatSide::G4TwistTubsFlatSide()",
66 "Should swap axis0 and axis1!");
94 G4int i = (handedness < 0 ? 0 : 1);
108 fSurfaceArea = 0.5*DPhi * (EndOuterRadius[i]*EndOuterRadius[i]
109 - EndInnerRadius[i]*EndInnerRadius[i] ) ;
168 for (i=0; i<2; i++) {
169 distance[i] = kInfinity;
172 gxx[i].
set(kInfinity, kInfinity, kInfinity);
184 if (std::fabs(p.
z()) == 0.) {
213 isvalid[0], 0, validate, &gp, &gv);
217 distance[0] = - (p.
z() / v.
z());
225 if (distance[0] >= 0) isvalid[0] =
true;
230 if (distance[0] >= 0) isvalid[0] =
true;
234 if (distance[0] >= 0) isvalid[0] =
true;
238 isvalid[0], 1, validate, &gp, &gv);
241 G4cerr <<
"ERROR - G4TwistTubsFlatSide::DistanceToSurface(p,v)" <<
G4endl;
277 for (i=0; i<2; i++) {
278 distance[i] = kInfinity;
280 gxx[i].
set(kInfinity, kInfinity, kInfinity);
293 distance[0] = std::fabs(p.
z());
294 xx.
set(p.
x(), p.
y(), 0);
369 G4int tmpareacode = areacode & (~sInside);
370 areacode = tmpareacode;
407 std::ostringstream message;
408 message <<
"Feature NOT implemented !" <<
G4endl
410 <<
" fAxis[1] = " <<
fAxis[1];
411 G4Exception(
"G4TwistTubsFlatSide::GetAreaCode()",
"GeomSolids0001",
421void G4TwistTubsFlatSide::SetCorners()
453 std::ostringstream message;
454 message <<
"Feature NOT implemented !" <<
G4endl
456 <<
" fAxis[1] = " <<
fAxis[1];
457 G4Exception(
"G4TwistTubsFlatSide::SetCorners()",
"GeomSolids0001",
465void G4TwistTubsFlatSide::SetBoundaries()
475 direction = direction.
unit();
481 direction = direction.
unit();
487 direction = direction.
unit();
493 direction = direction.
unit();
497 std::ostringstream message;
498 message <<
"Feature NOT implemented !" <<
G4endl
500 <<
" fAxis[1] = " <<
fAxis[1];
501 G4Exception(
"G4TwistTubsFlatSide::SetBoundaries()",
"GeomSolids0001",
525 for ( i = 0 ; i<n ; i++ ) {
527 r = rmin + i*(rmax-rmin)/(n-1) ;
532 for ( j = 0 ; j<k ; j++ )
534 phi = phimin + j*(phimax-phimin)/(k-1) ;
536 nnode =
GetNode(i,j,k,n,iside) ;
539 xyz[nnode][0] = p.
x() ;
540 xyz[nnode][1] = p.
y() ;
541 xyz[nnode][2] = p.
z() ;
543 if ( i<n-1 && j<k-1 ) {
545 nface =
GetFace(i,j,k,n,iside) ;
G4DLLIMPORT std::ostream G4cerr
void set(double x, double y, double z)
HepRotation inverse() const
HepRotation & rotateZ(double delta)
G4double GetRadialTolerance() const
static G4GeometryTolerance * GetInstance()
virtual void GetFacets(G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)
virtual G4int DistanceToSurface(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector gxx[], G4double distance[], G4int areacode[], G4bool isvalid[], EValidate validate=kValidateWithTol)
G4TwistTubsFlatSide(const G4String &name, const G4RotationMatrix &rot, const G4ThreeVector &tlate, const G4ThreeVector &n, const EAxis axis1=kRho, const EAxis axis2=kPhi, G4double axis0min=-kInfinity, G4double axis1min=-kInfinity, G4double axis0max=kInfinity, G4double axis1max=kInfinity)
virtual ~G4TwistTubsFlatSide()
virtual G4double GetBoundaryMin(G4double phi)
virtual G4int GetAreaCode(const G4ThreeVector &xx, G4bool withTol=true)
virtual G4ThreeVector GetNormal(const G4ThreeVector &, G4bool isGlobal=false)
virtual G4double GetBoundaryMax(G4double phi)
virtual G4ThreeVector SurfacePoint(G4double, G4double, G4bool isGlobal=false)
G4int GetAreacode(G4int i) const
G4double GetDistance(G4int i) const
void SetCurrentStatus(G4int i, G4ThreeVector &xx, G4double &dist, G4int &areacode, G4bool &isvalid, G4int nxx, EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
G4bool IsValid(G4int i) const
G4ThreeVector GetXX(G4int i) const
void ResetfDone(EValidate validate, const G4ThreeVector *p, const G4ThreeVector *v=0)
virtual G4int AmIOnLeftSide(const G4ThreeVector &me, const G4ThreeVector &vec, G4bool withTol=true)
static const G4int sC0Min1Min
static const G4int sC0Min1Max
G4int GetNode(G4int i, G4int j, G4int m, G4int n, G4int iside)
static const G4int sOutside
G4ThreeVector ComputeGlobalDirection(const G4ThreeVector &lp) const
static const G4int sAxisMax
static const G4int sAxis0
G4int GetFace(G4int i, G4int j, G4int m, G4int n, G4int iside)
G4int GetEdgeVisibility(G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation)
G4ThreeVector ComputeLocalDirection(const G4ThreeVector &gp) const
static const G4int sAxisPhi
static const G4int sAxisMin
static const G4int sC0Max1Max
static const G4int sAxis1
G4bool IsInside(G4int areacode, G4bool testbitmode=false) const
virtual void SetBoundary(const G4int &axiscode, const G4ThreeVector &direction, const G4ThreeVector &x0, const G4int &boundarytype)
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &gp) const
static const G4int sAxisRho
void SetCorner(G4int areacode, G4double x, G4double y, G4double z)
G4ThreeVector GetCorner(G4int areacode) const
static const G4int sBoundary
G4bool IsOutside(G4int areacode) const
static const G4int sCorner
static const G4int sC0Max1Min
static const G4int sInside
virtual G4String GetName() const
CurrentStatus fCurStatWithV
G4ThreeVector ComputeGlobalPoint(const G4ThreeVector &lp) const
G4SurfCurNormal fCurrentNormal
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)