72 fLowerEndcap(0), fUpperEndcap(0), fLatterTwisted(0),
73 fFormerTwisted(0), fInnerHype(0), fOuterHype(0),
74 fCubicVolume(0.), fSurfaceArea(0.), fpPolyhedron(0)
78 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
82 G4double sinhalftwist = std::sin(0.5 * twistedangle);
84 G4double endinnerradX = endinnerrad * sinhalftwist;
85 G4double innerrad = std::sqrt( endinnerrad * endinnerrad
86 - endinnerradX * endinnerradX );
88 G4double endouterradX = endouterrad * sinhalftwist;
89 G4double outerrad = std::sqrt( endouterrad * endouterrad
90 - endouterradX * endouterradX );
93 SetFields(twistedangle, innerrad, outerrad, -halfzlen, halfzlen);
105 fLowerEndcap(0), fUpperEndcap(0), fLatterTwisted(0),
106 fFormerTwisted(0), fInnerHype(0), fOuterHype(0),
107 fCubicVolume(0.), fSurfaceArea(0.), fpPolyhedron(0)
112 std::ostringstream message;
113 message <<
"Invalid number of segments." <<
G4endl
114 <<
" nseg = " << nseg;
115 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
120 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
124 G4double sinhalftwist = std::sin(0.5 * twistedangle);
126 G4double endinnerradX = endinnerrad * sinhalftwist;
127 G4double innerrad = std::sqrt( endinnerrad * endinnerrad
128 - endinnerradX * endinnerradX );
130 G4double endouterradX = endouterrad * sinhalftwist;
131 G4double outerrad = std::sqrt( endouterrad * endouterrad
132 - endouterradX * endouterradX );
135 fDPhi = totphi / nseg;
136 SetFields(twistedangle, innerrad, outerrad, -halfzlen, halfzlen);
148 fLowerEndcap(0), fUpperEndcap(0), fLatterTwisted(0),
149 fFormerTwisted(0), fInnerHype(0), fOuterHype(0),
150 fCubicVolume(0.), fSurfaceArea(0.), fpPolyhedron(0)
154 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
158 SetFields(twistedangle, innerrad, outerrad, negativeEndz, positiveEndz);
171 fLowerEndcap(0), fUpperEndcap(0), fLatterTwisted(0),
172 fFormerTwisted(0), fInnerHype(0), fOuterHype(0),
173 fCubicVolume(0.), fSurfaceArea(0.), fpPolyhedron(0)
177 std::ostringstream message;
178 message <<
"Invalid number of segments." <<
G4endl
179 <<
" nseg = " << nseg;
180 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
185 G4Exception(
"G4TwistedTubs::G4TwistedTubs()",
"GeomSolids0002",
189 fDPhi = totphi / nseg;
190 SetFields(twistedangle, innerrad, outerrad, negativeEndz, positiveEndz);
198 :
G4VSolid(a), fPhiTwist(0.), fInnerRadius(0.), fOuterRadius(0.), fDPhi(0.),
199 fZHalfLength(0.), fInnerStereo(0.), fOuterStereo(0.), fTanInnerStereo(0.),
200 fTanOuterStereo(0.), fKappa(0.), fInnerRadius2(0.), fOuterRadius2(0.),
201 fTanInnerStereo2(0.), fTanOuterStereo2(0.), fLowerEndcap(0), fUpperEndcap(0),
202 fLatterTwisted(0), fFormerTwisted(0), fInnerHype(0), fOuterHype(0),
203 fCubicVolume(0.), fSurfaceArea(0.), fpPolyhedron(0)
205 fEndZ[0] = 0.; fEndZ[1] = 0.;
206 fEndInnerRadius[0] = 0.; fEndInnerRadius[1] = 0.;
207 fEndOuterRadius[0] = 0.; fEndOuterRadius[1] = 0.;
208 fEndPhi[0] = 0.; fEndPhi[1] = 0.;
209 fEndZ2[0] = 0.; fEndZ2[1] = 0.;
217 if (fLowerEndcap) {
delete fLowerEndcap; }
218 if (fUpperEndcap) {
delete fUpperEndcap; }
219 if (fLatterTwisted) {
delete fLatterTwisted; }
220 if (fFormerTwisted) {
delete fFormerTwisted; }
221 if (fInnerHype) {
delete fInnerHype; }
222 if (fOuterHype) {
delete fOuterHype; }
223 if (fpPolyhedron) {
delete fpPolyhedron; }
230 :
G4VSolid(rhs), fPhiTwist(rhs.fPhiTwist),
231 fInnerRadius(rhs.fInnerRadius), fOuterRadius(rhs.fOuterRadius),
232 fDPhi(rhs.fDPhi), fZHalfLength(rhs.fZHalfLength),
233 fInnerStereo(rhs.fInnerStereo), fOuterStereo(rhs.fOuterStereo),
234 fTanInnerStereo(rhs.fTanInnerStereo), fTanOuterStereo(rhs.fTanOuterStereo),
235 fKappa(rhs.fKappa), fInnerRadius2(rhs.fInnerRadius2),
236 fOuterRadius2(rhs.fOuterRadius2), fTanInnerStereo2(rhs.fTanInnerStereo2),
237 fTanOuterStereo2(rhs.fTanOuterStereo2),
238 fLowerEndcap(0), fUpperEndcap(0), fLatterTwisted(0), fFormerTwisted(0),
239 fInnerHype(0), fOuterHype(0),
240 fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea),
241 fpPolyhedron(0), fLastInside(rhs.fLastInside), fLastNormal(rhs.fLastNormal),
242 fLastDistanceToIn(rhs.fLastDistanceToIn),
243 fLastDistanceToOut(rhs.fLastDistanceToOut),
244 fLastDistanceToInWithV(rhs.fLastDistanceToInWithV),
245 fLastDistanceToOutWithV(rhs.fLastDistanceToOutWithV)
247 for (
size_t i=0; i<2; ++i)
249 fEndZ[i] = rhs.fEndZ[i];
250 fEndInnerRadius[i] = rhs.fEndInnerRadius[i];
251 fEndOuterRadius[i] = rhs.fEndOuterRadius[i];
252 fEndPhi[i] = rhs.fEndPhi[i];
253 fEndZ2[i] = rhs.fEndZ2[i];
266 if (
this == &rhs) {
return *
this; }
274 fPhiTwist= rhs.fPhiTwist;
275 fInnerRadius= rhs.fInnerRadius; fOuterRadius= rhs.fOuterRadius;
276 fDPhi= rhs.fDPhi; fZHalfLength= rhs.fZHalfLength;
277 fInnerStereo= rhs.fInnerStereo; fOuterStereo= rhs.fOuterStereo;
278 fTanInnerStereo= rhs.fTanInnerStereo; fTanOuterStereo= rhs.fTanOuterStereo;
279 fKappa= rhs.fKappa; fInnerRadius2= rhs.fInnerRadius2;
280 fOuterRadius2= rhs.fOuterRadius2; fTanInnerStereo2= rhs.fTanInnerStereo2;
281 fTanOuterStereo2= rhs.fTanOuterStereo2;
282 fLowerEndcap= fUpperEndcap= fLatterTwisted= fFormerTwisted= 0;
283 fInnerHype= fOuterHype= 0;
284 fCubicVolume= rhs.fCubicVolume; fSurfaceArea= rhs.fSurfaceArea;
286 fLastInside= rhs.fLastInside; fLastNormal= rhs.fLastNormal;
287 fLastDistanceToIn= rhs.fLastDistanceToIn;
288 fLastDistanceToOut= rhs.fLastDistanceToOut;
289 fLastDistanceToInWithV= rhs.fLastDistanceToInWithV;
290 fLastDistanceToOutWithV= rhs.fLastDistanceToOutWithV;
292 for (
size_t i=0; i<2; ++i)
294 fEndZ[i] = rhs.fEndZ[i];
295 fEndInnerRadius[i] = rhs.fEndInnerRadius[i];
296 fEndOuterRadius[i] = rhs.fEndOuterRadius[i];
297 fEndPhi[i] = rhs.fEndPhi[i];
298 fEndZ2[i] = rhs.fEndZ2[i];
315 "G4TwistedTubs does not support Parameterisation.");
330 G4double maxEndOuterRad = (fEndOuterRadius[0] > fEndOuterRadius[1] ?
331 fEndOuterRadius[0] : fEndOuterRadius[1]);
332 G4double maxEndInnerRad = (fEndInnerRadius[0] > fEndInnerRadius[1] ?
333 fEndInnerRadius[0] : fEndInnerRadius[1]);
334 G4double maxphi = (std::fabs(fEndPhi[0]) > std::fabs(fEndPhi[1]) ?
335 std::fabs(fEndPhi[0]) : std::fabs(fEndPhi[1]));
343 G4double rFudge = 1.0/std::cos(0.5*sigPhi);
344 G4double fudgeEndOuterRad = rFudge * maxEndOuterRad;
374 G4bool splitOuter = (fOuterRadius/maxEndOuterRad < 0.95);
375 G4bool splitInner = (fInnerRadius/maxEndInnerRad < 0.95);
391 G4double phimax = maxphi + 0.5*fDPhi;
392 if ( phimax >
pi/2) { phimax =
pi-phimax; }
408 G4ThreeVector(fudgeEndOuterRad*cosPhi, fudgeEndOuterRad*sinPhi,
411 G4ThreeVector(fudgeEndOuterRad*cosPhi, fudgeEndOuterRad*sinPhi,
416 G4ThreeVector(fudgeEndOuterRad*cosPhi, fudgeEndOuterRad*sinPhi, 0));
433 G4double dr = fZHalfLength * fTanInnerStereo2;
435 zInnerSplit = fZHalfLength + (fInnerRadius - maxEndInnerRad) * dz / dr;
459 cosPhi = std::cos(phimax);
460 sinPhi = std::sin(phimax);
465 G4ThreeVector(fudgeEndOuterRad*cosPhi, fudgeEndOuterRad*sinPhi,
468 G4ThreeVector(fudgeEndOuterRad*cosPhi, fudgeEndOuterRad*sinPhi,
476 AddPolyToExtent( v0, v4, w4, w0, voxelLimit, axis, extentList );
477 AddPolyToExtent( v4, v1, w1, w4, voxelLimit, axis, extentList );
481 AddPolyToExtent( v0, v1, w1, w0, voxelLimit, axis, extentList );
502 AddPolyToExtent( v3, v6, w6, w3, voxelLimit, axis, extentList );
503 AddPolyToExtent( v6, v5, w5, w6, voxelLimit, axis, extentList );
504 AddPolyToExtent( v5, v2, w2, w5, voxelLimit, axis, extentList );
516 AddPolyToExtent( v3, v2, w2, w3, voxelLimit, axis, extentList );
522 AddPolyToExtent( v1, v3, w3, w1, voxelLimit, axis, extentList );
523 AddPolyToExtent( v2, v0, w0, w2, voxelLimit, axis, extentList );
535 void G4TwistedTubs::AddPolyToExtent(
const G4ThreeVector &v0,
554 phiPoly.
SetNormal( (v1-v0).cross(w0-v0).unit() );
574 if (fLastInside.p == p)
576 return fLastInside.inside;
581 tmpinside =
const_cast<EInside*
>(&(fLastInside.inside));
582 tmpp->
set(p.
x(), p.
y(), p.
z());
589 if ((outerhypearea ==
kOutside) || (distanceToOut < -halftol))
599 if (distanceToOut <= halftol)
609 return fLastInside.inside;
624 if (fLastNormal.p == p)
626 return fLastNormal.vec;
634 tmpp->
set(p.
x(), p.
y(), p.
z());
639 surfaces[0] = fLatterTwisted;
640 surfaces[1] = fFormerTwisted;
641 surfaces[2] = fInnerHype;
642 surfaces[3] = fOuterHype;
643 surfaces[4] = fLowerEndcap;
644 surfaces[5] = fUpperEndcap;
653 if (tmpdistance < distance)
655 distance = tmpdistance;
661 tmpsurface[0] = surfaces[besti];
662 *tmpnormal = tmpsurface[0]->
GetNormal(bestxx,
true);
664 return fLastNormal.vec;
687 if ((fLastDistanceToInWithV.p == p) && (fLastDistanceToInWithV.vec == v))
689 return fLastDistanceToIn.value;
693 tmpp =
const_cast<G4ThreeVector*
>(&(fLastDistanceToInWithV.p));
694 tmpv =
const_cast<G4ThreeVector*
>(&(fLastDistanceToInWithV.vec));
695 tmpdist =
const_cast<G4double*
>(&(fLastDistanceToInWithV.value));
696 tmpp->
set(p.
x(), p.
y(), p.
z());
697 tmpv->
set(v.
x(), v.
y(), v.
z());
720 return fLastDistanceToInWithV.value;
734 surfaces[0] = fLowerEndcap;
735 surfaces[1] = fUpperEndcap;
736 surfaces[2] = fLatterTwisted;
737 surfaces[3] = fFormerTwisted;
738 surfaces[4] = fInnerHype;
739 surfaces[5] = fOuterHype;
747 if (tmpdistance < distance)
749 distance = tmpdistance;
755 return fLastDistanceToInWithV.value;
773 if (fLastDistanceToIn.p == p)
775 return fLastDistanceToIn.value;
780 tmpdist =
const_cast<G4double*
>(&(fLastDistanceToIn.value));
781 tmpp->
set(p.
x(), p.
y(), p.
z());
797 return fLastDistanceToIn.value;
806 surfaces[0] = fLowerEndcap;
807 surfaces[1] = fUpperEndcap;
808 surfaces[2] = fLatterTwisted;
809 surfaces[3] = fFormerTwisted;
810 surfaces[4] = fInnerHype;
811 surfaces[5] = fOuterHype;
819 if (tmpdistance < distance)
821 distance = tmpdistance;
826 return fLastDistanceToIn.value;
830 G4Exception(
"G4TwistedTubs::DistanceToIn(p)",
"GeomSolids0003",
860 if ((fLastDistanceToOutWithV.p == p) && (fLastDistanceToOutWithV.vec == v) )
862 return fLastDistanceToOutWithV.value;
866 tmpp =
const_cast<G4ThreeVector*
>(&(fLastDistanceToOutWithV.p));
867 tmpv =
const_cast<G4ThreeVector*
>(&(fLastDistanceToOutWithV.vec));
868 tmpdist =
const_cast<G4double*
>(&(fLastDistanceToOutWithV.value));
869 tmpp->
set(p.
x(), p.
y(), p.
z());
870 tmpv->
set(v.
x(), v.
y(), v.
z());
895 *norm = (blockedsurface->
GetNormal(p,
true));
899 return fLastDistanceToOutWithV.value;
913 surfaces[0] = fLatterTwisted;
914 surfaces[1] = fFormerTwisted;
915 surfaces[2] = fInnerHype;
916 surfaces[3] = fOuterHype;
917 surfaces[4] = fLowerEndcap;
918 surfaces[5] = fUpperEndcap;
927 if (tmpdistance < distance)
929 distance = tmpdistance;
939 *norm = (surfaces[besti]->
GetNormal(p,
true));
946 return fLastDistanceToOutWithV.value;
965 if (fLastDistanceToOut.p == p)
967 return fLastDistanceToOut.value;
972 tmpdist =
const_cast<G4double*
>(&(fLastDistanceToOut.value));
973 tmpp->
set(p.
x(), p.
y(), p.
z());
990 return fLastDistanceToOut.value;
999 surfaces[0] = fLatterTwisted;
1000 surfaces[1] = fFormerTwisted;
1001 surfaces[2] = fInnerHype;
1002 surfaces[3] = fOuterHype;
1003 surfaces[4] = fLowerEndcap;
1004 surfaces[5] = fUpperEndcap;
1009 for (i=0; i< 6; i++)
1012 if (tmpdistance < distance)
1014 distance = tmpdistance;
1018 *tmpdist = distance;
1020 return fLastDistanceToOut.value;
1024 G4Exception(
"G4TwistedTubs::DistanceToOut(p)",
"GeomSolids0003",
1040 G4int oldprc = os.precision(16);
1041 os <<
"-----------------------------------------------------------\n"
1042 <<
" *** Dump for solid - " <<
GetName() <<
" ***\n"
1043 <<
" ===================================================\n"
1044 <<
" Solid type: G4TwistedTubs\n"
1045 <<
" Parameters: \n"
1046 <<
" -ve end Z : " << fEndZ[0]/
mm <<
" mm \n"
1047 <<
" +ve end Z : " << fEndZ[1]/
mm <<
" mm \n"
1048 <<
" inner end radius(-ve z): " << fEndInnerRadius[0]/
mm <<
" mm \n"
1049 <<
" inner end radius(+ve z): " << fEndInnerRadius[1]/
mm <<
" mm \n"
1050 <<
" outer end radius(-ve z): " << fEndOuterRadius[0]/
mm <<
" mm \n"
1051 <<
" outer end radius(+ve z): " << fEndOuterRadius[1]/
mm <<
" mm \n"
1052 <<
" inner radius (z=0) : " << fInnerRadius/
mm <<
" mm \n"
1053 <<
" outer radius (z=0) : " << fOuterRadius/
mm <<
" mm \n"
1054 <<
" twisted angle : " << fPhiTwist/
degree <<
" degrees \n"
1055 <<
" inner stereo angle : " << fInnerStereo/
degree <<
" degrees \n"
1056 <<
" outer stereo angle : " << fOuterStereo/
degree <<
" degrees \n"
1057 <<
" phi-width of a piece : " << fDPhi/
degree <<
" degrees \n"
1058 <<
"-----------------------------------------------------------\n";
1059 os.precision(oldprc);
1080 G4double maxEndOuterRad = (fEndOuterRadius[0] > fEndOuterRadius[1] ? 0 : 1);
1081 return G4VisExtent( -maxEndOuterRad, maxEndOuterRad,
1082 -maxEndOuterRad, maxEndOuterRad,
1083 -fZHalfLength, fZHalfLength );
1099 const G4int nnodes = 4*(k-1)*(n-2) + 2*k*k ;
1100 const G4int nfaces = 4*(k-1)*(n-1) + 2*(k-1)*(k-1) ;
1104 typedef G4int G4int4[4];
1105 G4double3* xyz =
new G4double3[nnodes];
1106 G4int4* faces =
new G4int4[nfaces] ;
1107 fLowerEndcap->
GetFacets(k,k,xyz,faces,0) ;
1108 fUpperEndcap->
GetFacets(k,k,xyz,faces,1) ;
1109 fInnerHype->
GetFacets(k,n,xyz,faces,2) ;
1110 fFormerTwisted->
GetFacets(k,n,xyz,faces,3) ;
1111 fOuterHype->
GetFacets(k,n,xyz,faces,4) ;
1112 fLatterTwisted->
GetFacets(k,n,xyz,faces,5) ;
1127 if ((!fpPolyhedron) ||
1131 delete fpPolyhedron;
1134 return fpPolyhedron;
1140 void G4TwistedTubs::CreateSurfaces()
1148 fEndInnerRadius, fEndOuterRadius,
1149 fDPhi, fEndPhi, fEndZ, -1) ;
1152 fEndInnerRadius, fEndOuterRadius,
1153 fDPhi, fEndPhi, fEndZ, 1) ;
1156 rotHalfDPhi.
rotateZ(0.5*fDPhi);
1159 fEndInnerRadius, fEndOuterRadius,
1160 fDPhi, fEndPhi, fEndZ,
1161 fInnerRadius, fOuterRadius, fKappa,
1164 fEndInnerRadius, fEndOuterRadius,
1165 fDPhi, fEndPhi, fEndZ,
1166 fInnerRadius, fOuterRadius, fKappa,
1170 fEndInnerRadius, fEndOuterRadius,
1171 fDPhi, fEndPhi, fEndZ,
1172 fInnerRadius, fOuterRadius,fKappa,
1173 fTanInnerStereo, fTanOuterStereo, -1) ;
1175 fEndInnerRadius, fEndOuterRadius,
1176 fDPhi, fEndPhi, fEndZ,
1177 fInnerRadius, fOuterRadius,fKappa,
1178 fTanInnerStereo, fTanOuterStereo, 1) ;
1184 fOuterHype, fFormerTwisted);
1186 fOuterHype, fFormerTwisted);
1188 fOuterHype, fUpperEndcap);
1190 fOuterHype, fUpperEndcap);
1192 fFormerTwisted, fUpperEndcap);
1194 fFormerTwisted, fUpperEndcap);
1219 if(fCubicVolume != 0.) {;}
1220 else { fCubicVolume = fDPhi*fZHalfLength*(fOuterRadius*fOuterRadius
1221 -fInnerRadius*fInnerRadius); }
1222 return fCubicVolume;
1230 if(fSurfaceArea != 0.) {;}
1232 return fSurfaceArea;
1265 else if ( (chose >= a1) && (chose < a1 + a2 ) )
1275 else if ( (chose >= a1 + a2 ) && (chose < a1 + a2 + a3 ) )
1285 else if ( (chose >= a1 + a2 + a3 ) && (chose < a1 + a2 + a3 + a4 ) )
1294 else if( (chose >= a1 + a2 + a3 + a4 )&&(chose < a1 + a2 + a3 + a4 + a5 ) )
void set(double x, double y, double z)
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double GetEndInnerRadius() const
CLHEP::Hep3Vector G4ThreeVector
G4ThreeVector GetPointOnSurface() const
virtual G4ThreeVector GetNormal(const G4ThreeVector &xx, G4bool isGlobal)=0
G4int createPolyhedron(G4int Nnodes, G4int Nfaces, const G4double xyz[][3], const G4int faces[][4])
std::ostream & StreamInfo(std::ostream &os) const
G4bool GetExtent(G4double &min, G4double &max) const
G4Polyhedron * CreatePolyhedron() 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) const
virtual void AddSolid(const G4Box &)=0
void ComputeDimensions(G4VPVParameterisation *, const G4int, const G4VPhysicalVolume *)
G4bool IsValidNorm() const
G4GeometryType GetEntityType() const
virtual G4double DistanceToIn(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
G4double GetEndOuterRadius() const
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const
virtual G4double GetSurfaceArea()=0
void SetNeighbours(G4VTwistSurface *axis0min, G4VTwistSurface *axis1min, G4VTwistSurface *axis0max, G4VTwistSurface *axis1max)
virtual G4double DistanceTo(const G4ThreeVector &gp, G4ThreeVector &gxx)
void DescribeYourselfTo(G4VGraphicsScene &scene) const
virtual G4double DistanceToOut(const G4ThreeVector &gp, const G4ThreeVector &gv, G4ThreeVector &gxxbest)
virtual G4ThreeVector SurfacePoint(G4double, G4double, G4bool isGlobal=false)=0
G4double GetRadialTolerance() const
void AddSurface(const G4ClippablePolygon &surface)
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcnorm=G4bool(false), G4bool *validnorm=0, G4ThreeVector *n=0) const
virtual G4double GetBoundaryMax(G4double)=0
G4double GetSurfaceArea()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual void GetFacets(G4int m, G4int n, G4double xyz[][3], G4int faces[][4], G4int iside)=0
virtual G4double GetBoundaryMin(G4double)=0
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
static G4int GetNumberOfRotationSteps()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
HepRotation & rotateZ(double delta)
G4TwistedTubs(const G4String &pname, G4double twistedangle, G4double endinnerrad, G4double endouterrad, G4double halfzlen, G4double dphi)
G4VSolid & operator=(const G4VSolid &rhs)
G4int GetNumberOfRotationStepsAtTimeOfCreation() const
G4double GetCubicVolume()
G4VisExtent GetExtent() const
virtual G4double GetSurfaceArea()
static G4GeometryTolerance * GetInstance()
G4Polyhedron * GetPolyhedron() const
G4bool CalculateExtent(const EAxis paxis, const G4VoxelLimits &pvoxellimit, const G4AffineTransform &ptransform, G4double &pmin, G4double &pmax) const
G4TwistedTubs & operator=(const G4TwistedTubs &rhs)