Geant4-11
Data Structures | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4GenericPolycone Class Reference

#include <G4GenericPolycone.hh>

Inheritance diagram for G4GenericPolycone:
G4VCSGfaceted G4VSolid

Data Structures

struct  surface_element
 

Public Member Functions

void BoundingLimits (G4ThreeVector &pMin, G4ThreeVector &pMax) const
 
G4bool CalculateExtent (const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pmin, G4double &pmax) const
 
G4VSolidClone () const
 
virtual void ComputeDimensions (G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
 
G4PolyhedronCreatePolyhedron () const
 
virtual void DescribeYourselfTo (G4VGraphicsScene &scene) const
 
G4double DistanceToIn (const G4ThreeVector &p) const
 
G4double DistanceToIn (const G4ThreeVector &p, const G4ThreeVector &v) const
 
virtual G4double DistanceToOut (const G4ThreeVector &p) const
 
virtual G4double DistanceToOut (const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const
 
void DumpInfo () const
 
G4double EstimateCubicVolume (G4int nStat, G4double epsilon) const
 
G4double EstimateSurfaceArea (G4int nStat, G4double ell) const
 
 G4GenericPolycone (__void__ &)
 
 G4GenericPolycone (const G4GenericPolycone &source)
 
 G4GenericPolycone (const G4String &name, G4double phiStart, G4double phiTotal, G4int numRZ, const G4double r[], const G4double z[])
 
G4double GetAreaAccuracy () const
 
G4int GetAreaStatistics () const
 
virtual G4VSolidGetConstituentSolid (G4int no)
 
virtual const G4VSolidGetConstituentSolid (G4int no) const
 
G4PolyconeSideRZ GetCorner (G4int index) const
 
G4double GetCosEndPhi () const
 
G4double GetCosStartPhi () const
 
G4double GetCubicVolume ()
 
G4double GetCubVolEpsilon () const
 
G4int GetCubVolStatistics () const
 
virtual G4DisplacedSolidGetDisplacedSolidPtr ()
 
virtual const G4DisplacedSolidGetDisplacedSolidPtr () const
 
G4double GetEndPhi () const
 
G4GeometryType GetEntityType () const
 
virtual G4VisExtent GetExtent () const
 
G4String GetName () const
 
G4int GetNumRZCorner () const
 
G4ThreeVector GetPointOnSurface () const
 
virtual G4PolyhedronGetPolyhedron () const
 
G4double GetSinEndPhi () const
 
G4double GetSinStartPhi () const
 
G4double GetStartPhi () const
 
G4double GetSurfaceArea ()
 
G4double GetTolerance () const
 
EInside Inside (const G4ThreeVector &p) const
 
G4bool IsOpen () const
 
G4GenericPolyconeoperator= (const G4GenericPolycone &source)
 
G4bool operator== (const G4VSolid &s) const
 
G4bool Reset ()
 
void SetAreaAccuracy (G4double ep)
 
void SetAreaStatistics (G4int st)
 
void SetCubVolEpsilon (G4double ep)
 
void SetCubVolStatistics (G4int st)
 
void SetName (const G4String &name)
 
std::ostream & StreamInfo (std::ostream &os) const
 
virtual G4ThreeVector SurfaceNormal (const G4ThreeVector &p) const
 
virtual ~G4GenericPolycone ()
 

Protected Member Functions

void CalculateClippedPolygonExtent (G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
 
void ClipBetweenSections (G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
 
void ClipCrossSection (G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
 
void ClipPolygon (G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis) const
 
void CopyStuff (const G4GenericPolycone &source)
 
void CopyStuff (const G4VCSGfaceted &source)
 
void Create (G4double phiStart, G4double phiTotal, G4ReduciblePolygon *rz)
 
void DeleteStuff ()
 
virtual G4double DistanceTo (const G4ThreeVector &p, const G4bool outgoing) const
 
G4ThreeVector GetPointOnSurfaceGeneric () const
 
void SetSurfaceElements () const
 

Protected Attributes

G4PolyconeSideRZcorners = nullptr
 
G4EnclosingCylinderenclosingCylinder = nullptr
 
G4double endPhi
 
G4VCSGface ** faces = nullptr
 
G4double fCubicVolume = 0.0
 
std::vector< surface_element > * fElements = nullptr
 
G4PolyhedronfpPolyhedron = nullptr
 
G4bool fRebuildPolyhedron = false
 
G4double fSurfaceArea = 0.0
 
G4double kCarTolerance
 
G4int numCorner
 
G4int numFace = 0
 
G4bool phiIsOpen = false
 
G4double startPhi
 

Private Member Functions

void ClipPolygonToSimpleLimits (G4ThreeVectorList &pPolygon, G4ThreeVectorList &outputPolygon, const G4VoxelLimits &pVoxelLimit) const
 

Private Attributes

G4double fAreaAccuracy
 
G4double fCubVolEpsilon
 
G4String fshapeName
 
G4int fStatistics
 

Detailed Description

Definition at line 65 of file G4GenericPolycone.hh.

Constructor & Destructor Documentation

◆ G4GenericPolycone() [1/3]

G4GenericPolycone::G4GenericPolycone ( const G4String name,
G4double  phiStart,
G4double  phiTotal,
G4int  numRZ,
const G4double  r[],
const G4double  z[] 
)

Definition at line 59 of file G4GenericPolycone.cc.

66{
67
68 G4ReduciblePolygon *rz = new G4ReduciblePolygon( r, z, numRZ );
69
70 Create( phiStart, phiTotal, rz );
71
72 // Set original_parameters struct for consistency
73 //
74 //SetOriginalParameters(rz);
75
76 delete rz;
77}
void Create(G4double phiStart, G4double phiTotal, G4ReduciblePolygon *rz)
G4VCSGfaceted(const G4String &name)
const char * name(G4int ptype)

References Create().

Referenced by Clone().

◆ ~G4GenericPolycone()

G4GenericPolycone::~G4GenericPolycone ( )
virtual

Definition at line 259 of file G4GenericPolycone.cc.

260{
261 delete [] corners;
262 delete enclosingCylinder;
263 delete fElements;
264 delete fpPolyhedron;
265 corners = nullptr;
266 enclosingCylinder = nullptr;
267 fElements = nullptr;
268 fpPolyhedron = nullptr;
269}
G4PolyconeSideRZ * corners
G4EnclosingCylinder * enclosingCylinder
std::vector< surface_element > * fElements
G4Polyhedron * fpPolyhedron

References corners, enclosingCylinder, fElements, and G4VCSGfaceted::fpPolyhedron.

◆ G4GenericPolycone() [2/3]

G4GenericPolycone::G4GenericPolycone ( __void__ &  a)

Definition at line 252 of file G4GenericPolycone.cc.

◆ G4GenericPolycone() [3/3]

G4GenericPolycone::G4GenericPolycone ( const G4GenericPolycone source)

Definition at line 273 of file G4GenericPolycone.cc.

275{
276 CopyStuff( source );
277}
void CopyStuff(const G4GenericPolycone &source)

References CopyStuff().

Member Function Documentation

◆ BoundingLimits()

void G4GenericPolycone::BoundingLimits ( G4ThreeVector pMin,
G4ThreeVector pMax 
) const
virtual

Reimplemented from G4VSolid.

Definition at line 402 of file G4GenericPolycone.cc.

404{
405 G4double rmin = kInfinity, rmax = -kInfinity;
406 G4double zmin = kInfinity, zmax = -kInfinity;
407
408 for (G4int i=0; i<GetNumRZCorner(); ++i)
409 {
410 G4PolyconeSideRZ corner = GetCorner(i);
411 if (corner.r < rmin) rmin = corner.r;
412 if (corner.r > rmax) rmax = corner.r;
413 if (corner.z < zmin) zmin = corner.z;
414 if (corner.z > zmax) zmax = corner.z;
415 }
416
417 if (IsOpen())
418 {
419 G4TwoVector vmin,vmax;
420 G4GeomTools::DiskExtent(rmin,rmax,
423 vmin,vmax);
424 pMin.set(vmin.x(),vmin.y(),zmin);
425 pMax.set(vmax.x(),vmax.y(),zmax);
426 }
427 else
428 {
429 pMin.set(-rmax,-rmax, zmin);
430 pMax.set( rmax, rmax, zmax);
431 }
432
433 // Check correctness of the bounding box
434 //
435 if (pMin.x() >= pMax.x() || pMin.y() >= pMax.y() || pMin.z() >= pMax.z())
436 {
437 std::ostringstream message;
438 message << "Bad bounding box (min >= max) for solid: "
439 << GetName() << " !"
440 << "\npMin = " << pMin
441 << "\npMax = " << pMax;
442 G4Exception("GenericG4Polycone::BoundingLimits()", "GeomMgt0001",
443 JustWarning, message);
444 DumpInfo();
445 }
446}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
static const G4double pMax
static const G4double pMin
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
double x() const
double y() const
G4bool IsOpen() const
G4int GetNumRZCorner() const
G4double GetCosEndPhi() const
G4double GetSinStartPhi() const
G4PolyconeSideRZ GetCorner(G4int index) const
G4double GetSinEndPhi() const
G4double GetCosStartPhi() const
static G4bool DiskExtent(G4double rmin, G4double rmax, G4double startPhi, G4double delPhi, G4TwoVector &pmin, G4TwoVector &pmax)
Definition: G4GeomTools.cc:390
G4String GetName() const
void DumpInfo() const
static const G4double kInfinity
Definition: geomdefs.hh:41

References G4GeomTools::DiskExtent(), G4VSolid::DumpInfo(), G4Exception(), GetCorner(), GetCosEndPhi(), GetCosStartPhi(), G4VSolid::GetName(), GetNumRZCorner(), GetSinEndPhi(), GetSinStartPhi(), IsOpen(), JustWarning, kInfinity, pMax, pMin, G4PolyconeSideRZ::r, CLHEP::Hep2Vector::x(), CLHEP::Hep2Vector::y(), and G4PolyconeSideRZ::z.

Referenced by CalculateExtent().

◆ CalculateClippedPolygonExtent()

void G4VSolid::CalculateClippedPolygonExtent ( G4ThreeVectorList pPolygon,
const G4VoxelLimits pVoxelLimit,
const EAxis  pAxis,
G4double pMin,
G4double pMax 
) const
protectedinherited

Definition at line 489 of file G4VSolid.cc.

494{
495 G4int noLeft,i;
496 G4double component;
497
498 ClipPolygon(pPolygon,pVoxelLimit,pAxis);
499 noLeft = pPolygon.size();
500
501 if ( noLeft )
502 {
503 for (i=0; i<noLeft; ++i)
504 {
505 component = pPolygon[i].operator()(pAxis);
506
507 if (component < pMin)
508 {
509 pMin = component;
510 }
511 if (component > pMax)
512 {
513 pMax = component;
514 }
515 }
516 }
517}
void ClipPolygon(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis) const
Definition: G4VSolid.cc:539

References G4VSolid::ClipPolygon(), pMax, and pMin.

Referenced by G4VSolid::ClipBetweenSections(), and G4VSolid::ClipCrossSection().

◆ CalculateExtent()

G4bool G4GenericPolycone::CalculateExtent ( const EAxis  pAxis,
const G4VoxelLimits pVoxelLimit,
const G4AffineTransform pTransform,
G4double pmin,
G4double pmax 
) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 453 of file G4GenericPolycone.cc.

457{
458 G4ThreeVector bmin, bmax;
459 G4bool exist;
460
461 // Check bounding box (bbox)
462 //
463 BoundingLimits(bmin,bmax);
464 G4BoundingEnvelope bbox(bmin,bmax);
465#ifdef G4BBOX_EXTENT
466 return bbox.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
467#endif
468 if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax))
469 {
470 return exist = (pMin < pMax) ? true : false;
471 }
472
473 // To find the extent, RZ contour of the polycone is subdivided
474 // in triangles. The extent is calculated as cumulative extent of
475 // all sub-polycones formed by rotation of triangles around Z
476 //
477 G4TwoVectorList contourRZ;
478 G4TwoVectorList triangles;
479 G4double eminlim = pVoxelLimit.GetMinExtent(pAxis);
480 G4double emaxlim = pVoxelLimit.GetMaxExtent(pAxis);
481
482 // get RZ contour, ensure anticlockwise order of corners
483 for (G4int i=0; i<GetNumRZCorner(); ++i)
484 {
485 G4PolyconeSideRZ corner = GetCorner(i);
486 contourRZ.push_back(G4TwoVector(corner.r,corner.z));
487 }
488 G4double area = G4GeomTools::PolygonArea(contourRZ);
489 if (area < 0.) std::reverse(contourRZ.begin(),contourRZ.end());
490
491 // triangulate RZ countour
492 if (!G4GeomTools::TriangulatePolygon(contourRZ,triangles))
493 {
494 std::ostringstream message;
495 message << "Triangulation of RZ contour has failed for solid: "
496 << GetName() << " !"
497 << "\nExtent has been calculated using boundary box";
498 G4Exception("G4GenericPolycone::CalculateExtent()",
499 "GeomMgt1002", JustWarning, message);
500 return bbox.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
501 }
502
503 // set trigonometric values
504 const G4int NSTEPS = 24; // number of steps for whole circle
505 G4double astep = twopi/NSTEPS; // max angle for one step
506
507 G4double sphi = GetStartPhi();
508 G4double ephi = GetEndPhi();
509 G4double dphi = IsOpen() ? ephi-sphi : twopi;
510 G4int ksteps = (dphi <= astep) ? 1 : (G4int)((dphi-deg)/astep) + 1;
511 G4double ang = dphi/ksteps;
512
513 G4double sinHalf = std::sin(0.5*ang);
514 G4double cosHalf = std::cos(0.5*ang);
515 G4double sinStep = 2.*sinHalf*cosHalf;
516 G4double cosStep = 1. - 2.*sinHalf*sinHalf;
517
518 G4double sinStart = GetSinStartPhi();
519 G4double cosStart = GetCosStartPhi();
520 G4double sinEnd = GetSinEndPhi();
521 G4double cosEnd = GetCosEndPhi();
522
523 // define vectors and arrays
524 std::vector<const G4ThreeVectorList *> polygons;
525 polygons.resize(ksteps+2);
526 G4ThreeVectorList pols[NSTEPS+2];
527 for (G4int k=0; k<ksteps+2; ++k) pols[k].resize(6);
528 for (G4int k=0; k<ksteps+2; ++k) polygons[k] = &pols[k];
529 G4double r0[6],z0[6]; // contour with original edges of triangle
530 G4double r1[6]; // shifted radii of external edges of triangle
531
532 // main loop along triangles
533 pMin = kInfinity;
534 pMax =-kInfinity;
535 G4int ntria = triangles.size()/3;
536 for (G4int i=0; i<ntria; ++i)
537 {
538 G4int i3 = i*3;
539 for (G4int k=0; k<3; ++k)
540 {
541 G4int e0 = i3+k, e1 = (k<2) ? e0+1 : i3;
542 G4int k2 = k*2;
543 // set contour with original edges of triangle
544 r0[k2+0] = triangles[e0].x(); z0[k2+0] = triangles[e0].y();
545 r0[k2+1] = triangles[e1].x(); z0[k2+1] = triangles[e1].y();
546 // set shifted radii
547 r1[k2+0] = r0[k2+0];
548 r1[k2+1] = r0[k2+1];
549 if (z0[k2+1] - z0[k2+0] <= 0) continue;
550 r1[k2+0] /= cosHalf;
551 r1[k2+1] /= cosHalf;
552 }
553
554 // rotate countour, set sequence of 6-sided polygons
555 G4double sinCur = sinStart*cosHalf + cosStart*sinHalf;
556 G4double cosCur = cosStart*cosHalf - sinStart*sinHalf;
557 for (G4int j=0; j<6; ++j)
558 {
559 pols[0][j].set(r0[j]*cosStart,r0[j]*sinStart,z0[j]);
560 }
561 for (G4int k=1; k<ksteps+1; ++k)
562 {
563 for (G4int j=0; j<6; ++j)
564 {
565 pols[k][j].set(r1[j]*cosCur,r1[j]*sinCur,z0[j]);
566 }
567 G4double sinTmp = sinCur;
568 sinCur = sinCur*cosStep + cosCur*sinStep;
569 cosCur = cosCur*cosStep - sinTmp*sinStep;
570 }
571 for (G4int j=0; j<6; ++j)
572 {
573 pols[ksteps+1][j].set(r0[j]*cosEnd,r0[j]*sinEnd,z0[j]);
574 }
575
576 // set sub-envelope and adjust extent
577 G4double emin,emax;
578 G4BoundingEnvelope benv(polygons);
579 if (!benv.CalculateExtent(pAxis,pVoxelLimit,pTransform,emin,emax)) continue;
580 if (emin < pMin) pMin = emin;
581 if (emax > pMax) pMax = emax;
582 if (eminlim > pMin && emaxlim < pMax) return true; // max possible extent
583 }
584 return (pMin < pMax);
585}
static const G4double e1[44]
std::vector< G4ThreeVector > G4ThreeVectorList
static const G4double emax
std::vector< G4TwoVector > G4TwoVectorList
Definition: G4GeomTools.hh:42
static constexpr double twopi
Definition: G4SIunits.hh:56
static constexpr double deg
Definition: G4SIunits.hh:132
CLHEP::Hep2Vector G4TwoVector
Definition: G4TwoVector.hh:36
bool G4bool
Definition: G4Types.hh:86
G4double GetStartPhi() const
G4double GetEndPhi() const
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
static G4bool TriangulatePolygon(const G4TwoVectorList &polygon, G4TwoVectorList &result)
Definition: G4GeomTools.cc:193
static G4double PolygonArea(const G4TwoVectorList &polygon)
Definition: G4GeomTools.cc:76
G4double GetMinExtent(const EAxis pAxis) const
G4double GetMaxExtent(const EAxis pAxis) const

References G4BoundingEnvelope::BoundingBoxVsVoxelLimits(), BoundingLimits(), G4BoundingEnvelope::CalculateExtent(), deg, e1, emax, G4Exception(), GetCorner(), GetCosEndPhi(), GetCosStartPhi(), GetEndPhi(), G4VoxelLimits::GetMaxExtent(), G4VoxelLimits::GetMinExtent(), G4VSolid::GetName(), GetNumRZCorner(), GetSinEndPhi(), GetSinStartPhi(), GetStartPhi(), IsOpen(), JustWarning, kInfinity, pMax, pMin, G4GeomTools::PolygonArea(), G4PolyconeSideRZ::r, G4GeomTools::TriangulatePolygon(), twopi, G4PolyconeSideRZ::z, and G4InuclParticleNames::z0.

◆ ClipBetweenSections()

void G4VSolid::ClipBetweenSections ( G4ThreeVectorList pVertices,
const G4int  pSectionIndex,
const G4VoxelLimits pVoxelLimit,
const EAxis  pAxis,
G4double pMin,
G4double pMax 
) const
protectedinherited

Definition at line 444 of file G4VSolid.cc.

449{
450 G4ThreeVectorList polygon;
451 polygon.reserve(4);
452 polygon.push_back((*pVertices)[pSectionIndex]);
453 polygon.push_back((*pVertices)[pSectionIndex+4]);
454 polygon.push_back((*pVertices)[pSectionIndex+5]);
455 polygon.push_back((*pVertices)[pSectionIndex+1]);
456 CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
457 polygon.clear();
458
459 polygon.push_back((*pVertices)[pSectionIndex+1]);
460 polygon.push_back((*pVertices)[pSectionIndex+5]);
461 polygon.push_back((*pVertices)[pSectionIndex+6]);
462 polygon.push_back((*pVertices)[pSectionIndex+2]);
463 CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
464 polygon.clear();
465
466 polygon.push_back((*pVertices)[pSectionIndex+2]);
467 polygon.push_back((*pVertices)[pSectionIndex+6]);
468 polygon.push_back((*pVertices)[pSectionIndex+7]);
469 polygon.push_back((*pVertices)[pSectionIndex+3]);
470 CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
471 polygon.clear();
472
473 polygon.push_back((*pVertices)[pSectionIndex+3]);
474 polygon.push_back((*pVertices)[pSectionIndex+7]);
475 polygon.push_back((*pVertices)[pSectionIndex+4]);
476 polygon.push_back((*pVertices)[pSectionIndex]);
477 CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
478 return;
479}
void CalculateClippedPolygonExtent(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
Definition: G4VSolid.cc:489

References G4VSolid::CalculateClippedPolygonExtent(), pMax, and pMin.

◆ ClipCrossSection()

void G4VSolid::ClipCrossSection ( G4ThreeVectorList pVertices,
const G4int  pSectionIndex,
const G4VoxelLimits pVoxelLimit,
const EAxis  pAxis,
G4double pMin,
G4double pMax 
) const
protectedinherited

Definition at line 414 of file G4VSolid.cc.

419{
420
421 G4ThreeVectorList polygon;
422 polygon.reserve(4);
423 polygon.push_back((*pVertices)[pSectionIndex]);
424 polygon.push_back((*pVertices)[pSectionIndex+1]);
425 polygon.push_back((*pVertices)[pSectionIndex+2]);
426 polygon.push_back((*pVertices)[pSectionIndex+3]);
427 CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
428 return;
429}

References G4VSolid::CalculateClippedPolygonExtent(), pMax, and pMin.

◆ ClipPolygon()

void G4VSolid::ClipPolygon ( G4ThreeVectorList pPolygon,
const G4VoxelLimits pVoxelLimit,
const EAxis  pAxis 
) const
protectedinherited

Definition at line 539 of file G4VSolid.cc.

542{
543 G4ThreeVectorList outputPolygon;
544
545 if ( pVoxelLimit.IsLimited() )
546 {
547 if (pVoxelLimit.IsXLimited() ) // && pAxis != kXAxis)
548 {
549 G4VoxelLimits simpleLimit1;
550 simpleLimit1.AddLimit(kXAxis,pVoxelLimit.GetMinXExtent(),kInfinity);
551 ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
552
553 pPolygon.clear();
554
555 if ( !outputPolygon.size() ) return;
556
557 G4VoxelLimits simpleLimit2;
558 simpleLimit2.AddLimit(kXAxis,-kInfinity,pVoxelLimit.GetMaxXExtent());
559 ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
560
561 if ( !pPolygon.size() ) return;
562 else outputPolygon.clear();
563 }
564 if ( pVoxelLimit.IsYLimited() ) // && pAxis != kYAxis)
565 {
566 G4VoxelLimits simpleLimit1;
567 simpleLimit1.AddLimit(kYAxis,pVoxelLimit.GetMinYExtent(),kInfinity);
568 ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
569
570 // Must always clear pPolygon - for clip to simpleLimit2 and in case of
571 // early exit
572
573 pPolygon.clear();
574
575 if ( !outputPolygon.size() ) return;
576
577 G4VoxelLimits simpleLimit2;
578 simpleLimit2.AddLimit(kYAxis,-kInfinity,pVoxelLimit.GetMaxYExtent());
579 ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
580
581 if ( !pPolygon.size() ) return;
582 else outputPolygon.clear();
583 }
584 if ( pVoxelLimit.IsZLimited() ) // && pAxis != kZAxis)
585 {
586 G4VoxelLimits simpleLimit1;
587 simpleLimit1.AddLimit(kZAxis,pVoxelLimit.GetMinZExtent(),kInfinity);
588 ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
589
590 // Must always clear pPolygon - for clip to simpleLimit2 and in case of
591 // early exit
592
593 pPolygon.clear();
594
595 if ( !outputPolygon.size() ) return;
596
597 G4VoxelLimits simpleLimit2;
598 simpleLimit2.AddLimit(kZAxis,-kInfinity,pVoxelLimit.GetMaxZExtent());
599 ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
600
601 // Return after final clip - no cleanup
602 }
603 }
604}
void ClipPolygonToSimpleLimits(G4ThreeVectorList &pPolygon, G4ThreeVectorList &outputPolygon, const G4VoxelLimits &pVoxelLimit) const
Definition: G4VSolid.cc:612
G4bool IsYLimited() const
G4double GetMinZExtent() const
void AddLimit(const EAxis pAxis, const G4double pMin, const G4double pMax)
G4bool IsXLimited() const
G4double GetMaxYExtent() const
G4double GetMaxZExtent() const
G4double GetMinYExtent() const
G4double GetMinXExtent() const
G4bool IsZLimited() const
G4bool IsLimited() const
G4double GetMaxXExtent() const
@ kYAxis
Definition: geomdefs.hh:56
@ kXAxis
Definition: geomdefs.hh:55
@ kZAxis
Definition: geomdefs.hh:57

References G4VoxelLimits::AddLimit(), G4VSolid::ClipPolygonToSimpleLimits(), G4VoxelLimits::GetMaxXExtent(), G4VoxelLimits::GetMaxYExtent(), G4VoxelLimits::GetMaxZExtent(), G4VoxelLimits::GetMinXExtent(), G4VoxelLimits::GetMinYExtent(), G4VoxelLimits::GetMinZExtent(), G4VoxelLimits::IsLimited(), G4VoxelLimits::IsXLimited(), G4VoxelLimits::IsYLimited(), G4VoxelLimits::IsZLimited(), kInfinity, kXAxis, kYAxis, and kZAxis.

Referenced by G4VSolid::CalculateClippedPolygonExtent().

◆ ClipPolygonToSimpleLimits()

void G4VSolid::ClipPolygonToSimpleLimits ( G4ThreeVectorList pPolygon,
G4ThreeVectorList outputPolygon,
const G4VoxelLimits pVoxelLimit 
) const
privateinherited

Definition at line 612 of file G4VSolid.cc.

615{
616 G4int i;
617 G4int noVertices=pPolygon.size();
618 G4ThreeVector vEnd,vStart;
619
620 for (i = 0 ; i < noVertices ; ++i )
621 {
622 vStart = pPolygon[i];
623 if ( i == noVertices-1 ) vEnd = pPolygon[0];
624 else vEnd = pPolygon[i+1];
625
626 if ( pVoxelLimit.Inside(vStart) )
627 {
628 if (pVoxelLimit.Inside(vEnd))
629 {
630 // vStart and vEnd inside -> output end point
631 //
632 outputPolygon.push_back(vEnd);
633 }
634 else
635 {
636 // vStart inside, vEnd outside -> output crossing point
637 //
638 pVoxelLimit.ClipToLimits(vStart,vEnd);
639 outputPolygon.push_back(vEnd);
640 }
641 }
642 else
643 {
644 if (pVoxelLimit.Inside(vEnd))
645 {
646 // vStart outside, vEnd inside -> output inside section
647 //
648 pVoxelLimit.ClipToLimits(vStart,vEnd);
649 outputPolygon.push_back(vStart);
650 outputPolygon.push_back(vEnd);
651 }
652 else // Both point outside -> no output
653 {
654 // outputPolygon.push_back(vStart);
655 // outputPolygon.push_back(vEnd);
656 }
657 }
658 }
659}
G4bool ClipToLimits(G4ThreeVector &pStart, G4ThreeVector &pEnd) const
G4bool Inside(const G4ThreeVector &pVec) const

References G4VoxelLimits::ClipToLimits(), and G4VoxelLimits::Inside().

Referenced by G4VSolid::ClipPolygon().

◆ Clone()

G4VSolid * G4GenericPolycone::Clone ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 598 of file G4GenericPolycone.cc.

599{
600 return new G4GenericPolycone(*this);
601}
G4GenericPolycone(const G4String &name, G4double phiStart, G4double phiTotal, G4int numRZ, const G4double r[], const G4double z[])

References G4GenericPolycone().

◆ ComputeDimensions()

void G4VSolid::ComputeDimensions ( G4VPVParameterisation p,
const G4int  n,
const G4VPhysicalVolume pRep 
)
virtualinherited

Reimplemented in G4TwistedTubs, G4VTwistedFaceted, G4ReflectedSolid, G4DisplacedSolid, G4IntersectionSolid, G4ScaledSolid, G4SubtractionSolid, G4UnionSolid, G4Box, G4Cons, G4Orb, G4Para, G4Sphere, G4Torus, G4Trap, G4Trd, G4Tubs, G4Ellipsoid, G4Hype, G4Polycone, G4Polyhedra, and G4Tet.

Definition at line 137 of file G4VSolid.cc.

140{
141 std::ostringstream message;
142 message << "Illegal call to G4VSolid::ComputeDimensions()" << G4endl
143 << "Method not overloaded by derived class !";
144 G4Exception("G4VSolid::ComputeDimensions()", "GeomMgt0003",
145 FatalException, message);
146}
@ FatalException
#define G4endl
Definition: G4ios.hh:57

References FatalException, G4endl, and G4Exception().

Referenced by G4SmartVoxelHeader::BuildNodes(), G4PVParameterised::CheckOverlaps(), G4VPrimitiveScorer::ComputeSolid(), G4ScoreSplittingProcess::CreateTouchableForSubStep(), G4LogicalVolumeModel::DescribeYourselfTo(), G4VFieldModel::DescribeYourselfTo(), G4LogicalVolume::GetMass(), G4Navigator::GetMotherToDaughterTransform(), G4ITNavigator1::GetMotherToDaughterTransform(), G4ITNavigator2::GetMotherToDaughterTransform(), G4ITNavigator1::LocateGlobalPointAndSetup(), G4ITNavigator2::LocateGlobalPointAndSetup(), G4Navigator::LocateGlobalPointAndSetup(), G4PSFlatSurfaceCurrent::ProcessHits(), G4PSFlatSurfaceFlux::ProcessHits(), G4PSSphereSurfaceFlux::ProcessHits(), G4PSVolumeFlux::ProcessHits(), G4Navigator::SetupHierarchy(), G4ITNavigator1::SetupHierarchy(), and G4ITNavigator2::SetupHierarchy().

◆ CopyStuff() [1/2]

void G4GenericPolycone::CopyStuff ( const G4GenericPolycone source)
protected

Definition at line 300 of file G4GenericPolycone.cc.

301{
302 //
303 // Simple stuff
304 //
305 startPhi = source.startPhi;
306 endPhi = source.endPhi;
307 phiIsOpen = source.phiIsOpen;
308 numCorner = source.numCorner;
309
310 //
311 // The corner array
312 //
314
316 *sourceCorn = source.corners;
317 do // Loop checking, 13.08.2015, G.Cosmo
318 {
319 *corn = *sourceCorn;
320 } while( ++sourceCorn, ++corn < corners+numCorner );
321
322 //
323 // Enclosing cylinder
324 //
325 enclosingCylinder = new G4EnclosingCylinder( *source.enclosingCylinder );
326
327 //
328 // Surface elements
329 //
330 delete fElements;
331 fElements = nullptr;
332
333 // Polyhedron
334 //
335 fRebuildPolyhedron = false;
336 delete fpPolyhedron;
337 fpPolyhedron = nullptr;
338}
G4bool fRebuildPolyhedron

References corners, enclosingCylinder, endPhi, fElements, G4VCSGfaceted::fpPolyhedron, G4VCSGfaceted::fRebuildPolyhedron, numCorner, phiIsOpen, and startPhi.

Referenced by G4GenericPolycone(), and operator=().

◆ CopyStuff() [2/2]

void G4VCSGfaceted::CopyStuff ( const G4VCSGfaceted source)
protectedinherited

Definition at line 125 of file G4VCSGfaceted.cc.

126{
127 numFace = source.numFace;
128 if (numFace == 0) { return; } // odd, but permissable?
129
130 faces = new G4VCSGface*[numFace];
131
132 G4VCSGface **face = faces,
133 **sourceFace = source.faces;
134 do // Loop checking, 13.08.2015, G.Cosmo
135 {
136 *face = (*sourceFace)->Clone();
137 } while( ++sourceFace, ++face < faces+numFace );
138 fCubicVolume = source.fCubicVolume;
139 fSurfaceArea = source.fSurfaceArea;
140 fRebuildPolyhedron = false;
141 fpPolyhedron = nullptr;
142}
virtual G4VCSGface * Clone()=0
G4double fCubicVolume
G4VCSGface ** faces
G4double fSurfaceArea

References G4VCSGface::Clone(), G4VCSGfaceted::faces, G4VCSGfaceted::fCubicVolume, G4VCSGfaceted::fpPolyhedron, G4VCSGfaceted::fRebuildPolyhedron, G4VCSGfaceted::fSurfaceArea, and G4VCSGfaceted::numFace.

Referenced by G4VCSGfaceted::G4VCSGfaceted(), and G4VCSGfaceted::operator=().

◆ Create()

void G4GenericPolycone::Create ( G4double  phiStart,
G4double  phiTotal,
G4ReduciblePolygon rz 
)
protected

Definition at line 84 of file G4GenericPolycone.cc.

87{
88 //
89 // Perform checks of rz values
90 //
91 if (rz->Amin() < 0.0)
92 {
93 std::ostringstream message;
94 message << "Illegal input parameters - " << GetName() << G4endl
95 << " All R values must be >= 0 !";
96 G4Exception("G4GenericPolycone::Create()", "GeomSolids0002",
97 FatalErrorInArgument, message);
98 }
99
100 G4double rzArea = rz->Area();
101 if (rzArea < -kCarTolerance)
102 {
103 rz->ReverseOrder();
104 }
105 else if (rzArea < kCarTolerance)
106 {
107 std::ostringstream message;
108 message << "Illegal input parameters - " << GetName() << G4endl
109 << " R/Z cross section is zero or near zero: " << rzArea;
110 G4Exception("G4GenericPolycone::Create()", "GeomSolids0002",
111 FatalErrorInArgument, message);
112 }
113
116 {
117 std::ostringstream message;
118 message << "Illegal input parameters - " << GetName() << G4endl
119 << " Too few unique R/Z values !";
120 G4Exception("G4GenericPolycone::Create()", "GeomSolids0002",
121 FatalErrorInArgument, message);
122 }
123
124 if (rz->CrossesItself(1/kInfinity))
125 {
126 std::ostringstream message;
127 message << "Illegal input parameters - " << GetName() << G4endl
128 << " R/Z segments cross !";
129 G4Exception("G4GenericPolycone::Create()", "GeomSolids0002",
130 FatalErrorInArgument, message);
131 }
132
133 numCorner = rz->NumVertices();
134
135 //
136 // Phi opening? Account for some possible roundoff, and interpret
137 // nonsense value as representing no phi opening
138 //
139 if (phiTotal <= 0 || phiTotal > twopi-1E-10)
140 {
141 phiIsOpen = false;
142 startPhi = 0;
143 endPhi = twopi;
144 }
145 else
146 {
147 phiIsOpen = true;
148
149 //
150 // Convert phi into our convention
151 //
152 startPhi = phiStart;
153 while( startPhi < 0 ) // Loop checking, 13.08.2015, G.Cosmo
154 startPhi += twopi;
155
156 endPhi = phiStart+phiTotal;
157 while( endPhi < startPhi ) // Loop checking, 13.08.2015, G.Cosmo
158 endPhi += twopi;
159 }
160
161 //
162 // Allocate corner array.
163 //
165
166 //
167 // Copy corners
168 //
170
172 iterRZ.Begin();
173 do // Loop checking, 13.08.2015, G.Cosmo
174 {
175 next->r = iterRZ.GetA();
176 next->z = iterRZ.GetB();
177 } while( ++next, iterRZ.Next() );
178
179 //
180 // Allocate face pointer array
181 //
183 faces = new G4VCSGface*[numFace];
184
185 //
186 // Construct conical faces
187 //
188 // But! Don't construct a face if both points are at zero radius!
189 //
190 G4PolyconeSideRZ *corner = corners,
191 *prev = corners + numCorner-1,
192 *nextNext;
193 G4VCSGface** face = faces;
194 do // Loop checking, 13.08.2015, G.Cosmo
195 {
196 next = corner+1;
197 if (next >= corners+numCorner) next = corners;
198 nextNext = next+1;
199 if (nextNext >= corners+numCorner) nextNext = corners;
200
201 if (corner->r < 1/kInfinity && next->r < 1/kInfinity) continue;
202
203 //
204 // We must decide here if we can dare declare one of our faces
205 // as having a "valid" normal (i.e. allBehind = true). This
206 // is never possible if the face faces "inward" in r.
207 //
208 G4bool allBehind;
209 if (corner->z > next->z)
210 {
211 allBehind = false;
212 }
213 else
214 {
215 //
216 // Otherwise, it is only true if the line passing
217 // through the two points of the segment do not
218 // split the r/z cross section
219 //
220 allBehind = !rz->BisectedBy( corner->r, corner->z,
221 next->r, next->z, kCarTolerance );
222 }
223
224 *face++ = new G4PolyconeSide( prev, corner, next, nextNext,
225 startPhi, endPhi-startPhi, phiIsOpen, allBehind );
226 } while( prev=corner, corner=next, corner > corners );
227
228 if (phiIsOpen)
229 {
230 //
231 // Construct phi open edges
232 //
233 *face++ = new G4PolyPhiFace( rz, startPhi, 0, endPhi );
234 *face++ = new G4PolyPhiFace( rz, endPhi, 0, startPhi );
235 }
236
237 //
238 // We might have dropped a face or two: recalculate numFace
239 //
240 numFace = face-faces;
241
242 //
243 // Make enclosingCylinder
244 //
246 new G4EnclosingCylinder( rz, phiIsOpen, phiStart, phiTotal );
247}
@ FatalErrorInArgument
G4bool BisectedBy(G4double a1, G4double b1, G4double a2, G4double b2, G4double tolerance)
G4double Amin() const
G4bool RemoveDuplicateVertices(G4double tolerance)
G4int NumVertices() const
G4bool RemoveRedundantVertices(G4double tolerance)
G4bool CrossesItself(G4double tolerance)
G4double kCarTolerance
Definition: G4VSolid.hh:299

References G4ReduciblePolygon::Amin(), G4ReduciblePolygon::Area(), G4ReduciblePolygonIterator::Begin(), G4ReduciblePolygon::BisectedBy(), corners, G4ReduciblePolygon::CrossesItself(), enclosingCylinder, endPhi, G4VCSGfaceted::faces, FatalErrorInArgument, G4endl, G4Exception(), G4ReduciblePolygonIterator::GetA(), G4ReduciblePolygonIterator::GetB(), G4VSolid::GetName(), G4VSolid::kCarTolerance, kInfinity, G4ReduciblePolygonIterator::Next(), numCorner, G4VCSGfaceted::numFace, G4ReduciblePolygon::NumVertices(), phiIsOpen, G4PolyconeSideRZ::r, G4ReduciblePolygon::RemoveDuplicateVertices(), G4ReduciblePolygon::RemoveRedundantVertices(), G4ReduciblePolygon::ReverseOrder(), startPhi, twopi, and G4PolyconeSideRZ::z.

Referenced by G4GenericPolycone().

◆ CreatePolyhedron()

G4Polyhedron * G4GenericPolycone::CreatePolyhedron ( ) const
virtual

Implements G4VCSGfaceted.

Definition at line 825 of file G4GenericPolycone.cc.

826{
827 std::vector<G4TwoVector> rz(numCorner);
828 for (G4int i = 0; i < numCorner; ++i)
829 rz[i].set(corners[i].r, corners[i].z);
830 return new G4PolyhedronPcon(startPhi, endPhi - startPhi, rz);
831}

References corners, endPhi, numCorner, and startPhi.

◆ DeleteStuff()

void G4VCSGfaceted::DeleteStuff ( )
protectedinherited

Definition at line 150 of file G4VCSGfaceted.cc.

151{
152 if (numFace)
153 {
154 G4VCSGface **face = faces;
155 do // Loop checking, 13.08.2015, G.Cosmo
156 {
157 delete *face;
158 } while( ++face < faces + numFace );
159
160 delete [] faces;
161 }
162 delete fpPolyhedron; fpPolyhedron = nullptr;
163}

References G4VCSGfaceted::faces, G4VCSGfaceted::fpPolyhedron, and G4VCSGfaceted::numFace.

Referenced by G4VCSGfaceted::operator=(), G4Polycone::Reset(), G4Polyhedra::Reset(), and G4VCSGfaceted::~G4VCSGfaceted().

◆ DescribeYourselfTo()

void G4VCSGfaceted::DescribeYourselfTo ( G4VGraphicsScene scene) const
virtualinherited

Implements G4VSolid.

Definition at line 396 of file G4VCSGfaceted.cc.

397{
398 scene.AddSolid( *this );
399}
virtual void AddSolid(const G4Box &)=0

References G4VGraphicsScene::AddSolid().

◆ DistanceTo()

G4double G4VCSGfaceted::DistanceTo ( const G4ThreeVector p,
const G4bool  outgoing 
) const
protectedvirtualinherited

Definition at line 378 of file G4VCSGfaceted.cc.

380{
381 G4VCSGface **face = faces;
382 G4double best = kInfinity;
383 do // Loop checking, 13.08.2015, G.Cosmo
384 {
385 G4double distance = (*face)->Distance( p, outgoing );
386 if (distance < best) { best = distance; }
387 } while( ++face < faces + numFace );
388
389 return (best < 0.5*kCarTolerance) ? 0. : best;
390}

References G4VCSGfaceted::faces, G4VSolid::kCarTolerance, kInfinity, and G4VCSGfaceted::numFace.

Referenced by G4VCSGfaceted::DistanceToIn(), and G4VCSGfaceted::DistanceToOut().

◆ DistanceToIn() [1/2]

G4double G4GenericPolycone::DistanceToIn ( const G4ThreeVector p) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 392 of file G4GenericPolycone.cc.

393{
395}
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const

References G4VCSGfaceted::DistanceToIn().

◆ DistanceToIn() [2/2]

G4double G4GenericPolycone::DistanceToIn ( const G4ThreeVector p,
const G4ThreeVector v 
) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 375 of file G4GenericPolycone.cc.

377{
378 //
379 // Quick test
380 //
382 return kInfinity;
383
384 //
385 // Long answer
386 //
387 return G4VCSGfaceted::DistanceToIn( p, v );
388}
G4bool ShouldMiss(const G4ThreeVector &p, const G4ThreeVector &v) const

References G4VCSGfaceted::DistanceToIn(), enclosingCylinder, kInfinity, and G4EnclosingCylinder::ShouldMiss().

◆ DistanceToOut() [1/2]

G4double G4VCSGfaceted::DistanceToOut ( const G4ThreeVector p) const
virtualinherited

Implements G4VSolid.

Definition at line 367 of file G4VCSGfaceted.cc.

368{
369 return DistanceTo( p, true );
370}
virtual G4double DistanceTo(const G4ThreeVector &p, const G4bool outgoing) const

References G4VCSGfaceted::DistanceTo().

◆ DistanceToOut() [2/2]

G4double G4VCSGfaceted::DistanceToOut ( const G4ThreeVector p,
const G4ThreeVector v,
const G4bool  calcNorm = false,
G4bool validNorm = nullptr,
G4ThreeVector n = nullptr 
) const
virtualinherited

Implements G4VSolid.

Definition at line 299 of file G4VCSGfaceted.cc.

304{
305 G4bool allBehind = true;
306 G4double distance = kInfinity;
307 G4double distFromSurface = kInfinity;
309
310 G4VCSGface **face = faces;
311 G4VCSGface *bestFace = *face;
312 do // Loop checking, 13.08.2015, G.Cosmo
313 {
314 G4double faceDistance,
315 faceDistFromSurface;
316 G4ThreeVector faceNormal;
317 G4bool faceAllBehind;
318 if ((*face)->Intersect( p, v, true, kCarTolerance/2,
319 faceDistance, faceDistFromSurface,
320 faceNormal, faceAllBehind ) )
321 {
322 //
323 // Intersecting face
324 //
325 if ( (distance < kInfinity) || (!faceAllBehind) ) { allBehind = false; }
326 if (faceDistance < distance)
327 {
328 distance = faceDistance;
329 distFromSurface = faceDistFromSurface;
330 normal = faceNormal;
331 bestFace = *face;
332 if (distFromSurface <= 0.) { break; }
333 }
334 }
335 } while( ++face < faces + numFace );
336
337 if (distance < kInfinity)
338 {
339 if (distFromSurface <= 0.)
340 {
341 distance = 0.;
342 }
343 else if (distFromSurface<kCarTolerance/2)
344 {
345 if (bestFace->Distance(p,true) < kCarTolerance/2) { distance = 0.; }
346 }
347
348 if (calcNorm)
349 {
350 *validNorm = allBehind;
351 *n = normal;
352 }
353 }
354 else
355 {
356 if (Inside(p) == kSurface) { distance = 0.; }
357 if (calcNorm) { *validNorm = false; }
358 }
359
360 return distance;
361}
virtual G4double Distance(const G4ThreeVector &p, G4bool outgoing)=0
virtual EInside Inside(const G4ThreeVector &p) const
@ kSurface
Definition: geomdefs.hh:69
static double normal(HepRandomEngine *eptr)
Definition: RandPoisson.cc:79

References G4VCSGface::Distance(), G4VCSGfaceted::faces, G4VCSGfaceted::Inside(), G4VSolid::kCarTolerance, kInfinity, kSurface, CLHEP::detail::n, CLHEP::normal(), and G4VCSGfaceted::numFace.

◆ DumpInfo()

void G4VSolid::DumpInfo ( ) const
inlineinherited

Referenced by G4Cons::ApproxSurfaceNormal(), G4CutTubs::ApproxSurfaceNormal(), G4Sphere::ApproxSurfaceNormal(), G4Torus::ApproxSurfaceNormal(), G4Tubs::ApproxSurfaceNormal(), G4ReflectedSolid::BoundingLimits(), G4DisplacedSolid::BoundingLimits(), G4IntersectionSolid::BoundingLimits(), G4ScaledSolid::BoundingLimits(), G4SubtractionSolid::BoundingLimits(), G4UnionSolid::BoundingLimits(), G4Box::BoundingLimits(), G4Cons::BoundingLimits(), G4CutTubs::BoundingLimits(), G4Orb::BoundingLimits(), G4Para::BoundingLimits(), G4Sphere::BoundingLimits(), G4Torus::BoundingLimits(), G4Trap::BoundingLimits(), G4Trd::BoundingLimits(), G4Tubs::BoundingLimits(), G4EllipticalCone::BoundingLimits(), G4ExtrudedSolid::BoundingLimits(), BoundingLimits(), G4GenericTrap::BoundingLimits(), G4Hype::BoundingLimits(), G4Paraboloid::BoundingLimits(), G4Polycone::BoundingLimits(), G4Polyhedra::BoundingLimits(), G4TessellatedSolid::BoundingLimits(), G4TwistedTubs::BoundingLimits(), G4ParameterisationBoxX::ComputeDimensions(), G4ParameterisationBoxY::ComputeDimensions(), G4ParameterisationBoxZ::ComputeDimensions(), G4ParameterisationConsRho::ComputeDimensions(), G4ParameterisationConsPhi::ComputeDimensions(), G4ParameterisationConsZ::ComputeDimensions(), G4ParameterisationParaX::ComputeDimensions(), G4ParameterisationParaY::ComputeDimensions(), G4ParameterisationParaZ::ComputeDimensions(), G4ParameterisationPolyconeRho::ComputeDimensions(), G4ParameterisationPolyconePhi::ComputeDimensions(), G4ParameterisationPolyconeZ::ComputeDimensions(), G4ParameterisationPolyhedraRho::ComputeDimensions(), G4ParameterisationPolyhedraPhi::ComputeDimensions(), G4ParameterisationPolyhedraZ::ComputeDimensions(), G4ParameterisationTrdX::ComputeDimensions(), G4ParameterisationTrdY::ComputeDimensions(), G4ParameterisationTrdZ::ComputeDimensions(), G4ParameterisationTubsRho::ComputeDimensions(), G4ParameterisationTubsPhi::ComputeDimensions(), G4ParameterisationTubsZ::ComputeDimensions(), G4ReflectedSolid::ComputeDimensions(), G4DisplacedSolid::ComputeDimensions(), G4ScaledSolid::ComputeDimensions(), G4ParameterisedNavigation::ComputeStep(), G4ReplicaNavigation::ComputeStep(), G4DisplacedSolid::CreatePolyhedron(), G4ScaledSolid::CreatePolyhedron(), G4SubtractionSolid::DistanceToIn(), G4Box::DistanceToOut(), G4Orb::DistanceToOut(), G4Para::DistanceToOut(), G4Trap::DistanceToOut(), G4Trd::DistanceToOut(), G4Paraboloid::DistanceToOut(), G4VTwistedFaceted::DistanceToOut(), G4Cons::DistanceToOut(), G4CutTubs::DistanceToOut(), G4Sphere::DistanceToOut(), G4Torus::DistanceToOut(), G4Tubs::DistanceToOut(), G4Ellipsoid::DistanceToOut(), G4EllipticalCone::DistanceToOut(), G4EllipticalTube::DistanceToOut(), G4GenericTrap::DistanceToOut(), export_G4VSolid(), G4Polycone::G4Polycone(), G4Polyhedra::G4Polyhedra(), G4BooleanSolid::GetConstituentSolid(), G4NavigationLogger::PostComputeStepLog(), G4Box::SurfaceNormal(), G4Para::SurfaceNormal(), G4Trap::SurfaceNormal(), G4Trd::SurfaceNormal(), G4Ellipsoid::SurfaceNormal(), G4EllipticalCone::SurfaceNormal(), G4EllipticalTube::SurfaceNormal(), G4ExtrudedSolid::SurfaceNormal(), and G4Tet::SurfaceNormal().

◆ EstimateCubicVolume()

G4double G4VSolid::EstimateCubicVolume ( G4int  nStat,
G4double  epsilon 
) const
inherited

Definition at line 203 of file G4VSolid.cc.

204{
205 G4int iInside=0;
206 G4double px,py,pz,minX,maxX,minY,maxY,minZ,maxZ,volume,halfepsilon;
208 EInside in;
209
210 // values needed for CalculateExtent signature
211
212 G4VoxelLimits limit; // Unlimited
213 G4AffineTransform origin;
214
215 // min max extents of pSolid along X,Y,Z
216
217 CalculateExtent(kXAxis,limit,origin,minX,maxX);
218 CalculateExtent(kYAxis,limit,origin,minY,maxY);
219 CalculateExtent(kZAxis,limit,origin,minZ,maxZ);
220
221 // limits
222
223 if(nStat < 100) nStat = 100;
224 if(epsilon > 0.01) epsilon = 0.01;
225 halfepsilon = 0.5*epsilon;
226
227 for(auto i = 0; i < nStat; ++i )
228 {
229 px = minX-halfepsilon+(maxX-minX+epsilon)*G4QuickRand();
230 py = minY-halfepsilon+(maxY-minY+epsilon)*G4QuickRand();
231 pz = minZ-halfepsilon+(maxZ-minZ+epsilon)*G4QuickRand();
232 p = G4ThreeVector(px,py,pz);
233 in = Inside(p);
234 if(in != kOutside) ++iInside;
235 }
236 volume = (maxX-minX+epsilon)*(maxY-minY+epsilon)
237 * (maxZ-minZ+epsilon)*iInside/nStat;
238 return volume;
239}
G4double epsilon(G4double density, G4double temperature)
static const G4int maxZ
G4double G4QuickRand()
Definition: G4QuickRand.hh:34
CLHEP::Hep3Vector G4ThreeVector
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const =0
virtual EInside Inside(const G4ThreeVector &p) const =0
EInside
Definition: geomdefs.hh:67
@ kOutside
Definition: geomdefs.hh:68

References G4VSolid::CalculateExtent(), epsilon(), G4QuickRand(), G4VSolid::Inside(), kOutside, kXAxis, kYAxis, kZAxis, and maxZ.

Referenced by G4VSolid::GetCubicVolume(), G4BooleanSolid::GetCubicVolume(), and G4VCSGfaceted::GetCubicVolume().

◆ EstimateSurfaceArea()

G4double G4VSolid::EstimateSurfaceArea ( G4int  nStat,
G4double  ell 
) const
inherited

Definition at line 265 of file G4VSolid.cc.

266{
267 static const G4double s2 = 1./std::sqrt(2.);
268 static const G4double s3 = 1./std::sqrt(3.);
269 static const G4ThreeVector directions[64] =
270 {
271 G4ThreeVector( 0, 0, 0), G4ThreeVector( -1, 0, 0), // ( , , ) ( -, , )
272 G4ThreeVector( 1, 0, 0), G4ThreeVector( -1, 0, 0), // ( +, , ) (-+, , )
273 G4ThreeVector( 0, -1, 0), G4ThreeVector(-s2,-s2, 0), // ( , -, ) ( -, -, )
274 G4ThreeVector( s2, -s2, 0), G4ThreeVector( 0, -1, 0), // ( +, -, ) (-+, -, )
275
276 G4ThreeVector( 0, 1, 0), G4ThreeVector( -s2, s2, 0), // ( , +, ) ( -, +, )
277 G4ThreeVector( s2, s2, 0), G4ThreeVector( 0, 1, 0), // ( +, +, ) (-+, +, )
278 G4ThreeVector( 0, -1, 0), G4ThreeVector( -1, 0, 0), // ( ,-+, ) ( -,-+, )
279 G4ThreeVector( 1, 0, 0), G4ThreeVector( -1, 0, 0), // ( +,-+, ) (-+,-+, )
280
281 G4ThreeVector( 0, 0, -1), G4ThreeVector(-s2, 0,-s2), // ( , , -) ( -, , -)
282 G4ThreeVector( s2, 0,-s2), G4ThreeVector( 0, 0, -1), // ( +, , -) (-+, , -)
283 G4ThreeVector( 0,-s2,-s2), G4ThreeVector(-s3,-s3,-s3), // ( , -, -) ( -, -, -)
284 G4ThreeVector( s3,-s3,-s3), G4ThreeVector( 0,-s2,-s2), // ( +, -, -) (-+, -, -)
285
286 G4ThreeVector( 0, s2,-s2), G4ThreeVector(-s3, s3,-s3), // ( , +, -) ( -, +, -)
287 G4ThreeVector( s3, s3,-s3), G4ThreeVector( 0, s2,-s2), // ( +, +, -) (-+, +, -)
288 G4ThreeVector( 0, 0, -1), G4ThreeVector(-s2, 0,-s2), // ( ,-+, -) ( -,-+, -)
289 G4ThreeVector( s2, 0,-s2), G4ThreeVector( 0, 0, -1), // ( +,-+, -) (-+,-+, -)
290
291 G4ThreeVector( 0, 0, 1), G4ThreeVector(-s2, 0, s2), // ( , , +) ( -, , +)
292 G4ThreeVector( s2, 0, s2), G4ThreeVector( 0, 0, 1), // ( +, , +) (-+, , +)
293 G4ThreeVector( 0,-s2, s2), G4ThreeVector(-s3,-s3, s3), // ( , -, +) ( -, -, +)
294 G4ThreeVector( s3,-s3, s3), G4ThreeVector( 0,-s2, s2), // ( +, -, +) (-+, -, +)
295
296 G4ThreeVector( 0, s2, s2), G4ThreeVector(-s3, s3, s3), // ( , +, +) ( -, +, +)
297 G4ThreeVector( s3, s3, s3), G4ThreeVector( 0, s2, s2), // ( +, +, +) (-+, +, +)
298 G4ThreeVector( 0, 0, 1), G4ThreeVector(-s2, 0, s2), // ( ,-+, +) ( -,-+, +)
299 G4ThreeVector( s2, 0, s2), G4ThreeVector( 0, 0, 1), // ( +,-+, +) (-+,-+, +)
300
301 G4ThreeVector( 0, 0, -1), G4ThreeVector( -1, 0, 0), // ( , ,-+) ( -, ,-+)
302 G4ThreeVector( 1, 0, 0), G4ThreeVector( -1, 0, 0), // ( +, ,-+) (-+, ,-+)
303 G4ThreeVector( 0, -1, 0), G4ThreeVector(-s2,-s2, 0), // ( , -,-+) ( -, -,-+)
304 G4ThreeVector( s2, -s2, 0), G4ThreeVector( 0, -1, 0), // ( +, -,-+) (-+, -,-+)
305
306 G4ThreeVector( 0, 1, 0), G4ThreeVector( -s2, s2, 0), // ( , +,-+) ( -, +,-+)
307 G4ThreeVector( s2, s2, 0), G4ThreeVector( 0, 1, 0), // ( +, +,-+) (-+, +,-+)
308 G4ThreeVector( 0, -1, 0), G4ThreeVector( -1, 0, 0), // ( ,-+,-+) ( -,-+,-+)
309 G4ThreeVector( 1, 0, 0), G4ThreeVector( -1, 0, 0), // ( +,-+,-+) (-+,-+,-+)
310 };
311
312 G4ThreeVector bmin, bmax;
313 BoundingLimits(bmin, bmax);
314
315 G4double dX = bmax.x() - bmin.x();
316 G4double dY = bmax.y() - bmin.y();
317 G4double dZ = bmax.z() - bmin.z();
318
319 // Define statistics and shell thickness
320 //
321 G4int npoints = (nstat < 1000) ? 1000 : nstat;
322 G4double coeff = 0.5 / std::cbrt(G4double(npoints));
323 G4double eps = (ell > 0) ? ell : coeff * std::min(std::min(dX, dY), dZ);
324 G4double del = 1.8 * eps; // shold be more than sqrt(3.)
325
326 G4double minX = bmin.x() - eps;
327 G4double minY = bmin.y() - eps;
328 G4double minZ = bmin.z() - eps;
329
330 G4double dd = 2. * eps;
331 dX += dd;
332 dY += dd;
333 dZ += dd;
334
335 // Calculate surface area
336 //
337 G4int icount = 0;
338 for(auto i = 0; i < npoints; ++i)
339 {
340 G4double px = minX + dX*G4QuickRand();
341 G4double py = minY + dY*G4QuickRand();
342 G4double pz = minZ + dZ*G4QuickRand();
343 G4ThreeVector p = G4ThreeVector(px, py, pz);
344 EInside in = Inside(p);
345 G4double dist = 0;
346 if (in == kInside)
347 {
348 if (DistanceToOut(p) >= eps) continue;
349 G4int icase = 0;
350 if (Inside(G4ThreeVector(px-del, py, pz)) != kInside) icase += 1;
351 if (Inside(G4ThreeVector(px+del, py, pz)) != kInside) icase += 2;
352 if (Inside(G4ThreeVector(px, py-del, pz)) != kInside) icase += 4;
353 if (Inside(G4ThreeVector(px, py+del, pz)) != kInside) icase += 8;
354 if (Inside(G4ThreeVector(px, py, pz-del)) != kInside) icase += 16;
355 if (Inside(G4ThreeVector(px, py, pz+del)) != kInside) icase += 32;
356 if (icase == 0) continue;
357 G4ThreeVector v = directions[icase];
358 dist = DistanceToOut(p, v);
359 G4ThreeVector n = SurfaceNormal(p + v*dist);
360 dist *= v.dot(n);
361 }
362 else if (in == kOutside)
363 {
364 if (DistanceToIn(p) >= eps) continue;
365 G4int icase = 0;
366 if (Inside(G4ThreeVector(px-del, py, pz)) != kOutside) icase += 1;
367 if (Inside(G4ThreeVector(px+del, py, pz)) != kOutside) icase += 2;
368 if (Inside(G4ThreeVector(px, py-del, pz)) != kOutside) icase += 4;
369 if (Inside(G4ThreeVector(px, py+del, pz)) != kOutside) icase += 8;
370 if (Inside(G4ThreeVector(px, py, pz-del)) != kOutside) icase += 16;
371 if (Inside(G4ThreeVector(px, py, pz+del)) != kOutside) icase += 32;
372 if (icase == 0) continue;
373 G4ThreeVector v = directions[icase];
374 dist = DistanceToIn(p, v);
375 if (dist == kInfinity) continue;
376 G4ThreeVector n = SurfaceNormal(p + v*dist);
377 dist *= -(v.dot(n));
378 }
379 if (dist < eps) ++icount;
380 }
381 return dX*dY*dZ*icount/npoints/dd;
382}
static const G4double eps
double z() const
double x() const
double y() const
double dot(const Hep3Vector &) const
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const =0
virtual G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const =0
virtual void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
Definition: G4VSolid.cc:665
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
@ kInside
Definition: geomdefs.hh:70
T min(const T t1, const T t2)
brief Return the smallest of the two arguments

References G4VSolid::BoundingLimits(), G4VSolid::DistanceToIn(), G4VSolid::DistanceToOut(), CLHEP::Hep3Vector::dot(), eps, G4QuickRand(), G4VSolid::Inside(), kInfinity, kInside, kOutside, G4INCL::Math::min(), CLHEP::detail::n, G4VSolid::SurfaceNormal(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4VSolid::GetSurfaceArea(), G4MultiUnion::GetSurfaceArea(), and G4VCSGfaceted::GetSurfaceArea().

◆ GetAreaAccuracy()

G4double G4VCSGfaceted::GetAreaAccuracy ( ) const
inherited

Definition at line 514 of file G4VCSGfaceted.cc.

515{
516 return fAreaAccuracy;
517}
G4double fAreaAccuracy

References G4VCSGfaceted::fAreaAccuracy.

◆ GetAreaStatistics()

G4int G4VCSGfaceted::GetAreaStatistics ( ) const
inherited

Definition at line 505 of file G4VCSGfaceted.cc.

506{
507 return fStatistics;
508}

References G4VCSGfaceted::fStatistics.

◆ GetConstituentSolid() [1/2]

G4VSolid * G4VSolid::GetConstituentSolid ( G4int  no)
virtualinherited

Reimplemented in G4BooleanSolid.

Definition at line 170 of file G4VSolid.cc.

171{ return nullptr; }

◆ GetConstituentSolid() [2/2]

const G4VSolid * G4VSolid::GetConstituentSolid ( G4int  no) const
virtualinherited

Reimplemented in G4BooleanSolid.

Definition at line 167 of file G4VSolid.cc.

168{ return nullptr; }

Referenced by G4BooleanSolid::StackPolyhedron().

◆ GetCorner()

G4PolyconeSideRZ G4GenericPolycone::GetCorner ( G4int  index) const
inline

◆ GetCosEndPhi()

G4double G4GenericPolycone::GetCosEndPhi ( ) const
inline

Referenced by BoundingLimits(), and CalculateExtent().

◆ GetCosStartPhi()

G4double G4GenericPolycone::GetCosStartPhi ( ) const
inline

Referenced by BoundingLimits(), and CalculateExtent().

◆ GetCubicVolume()

G4double G4GenericPolycone::GetCubicVolume ( )
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 636 of file G4GenericPolycone.cc.

637{
638 if (fCubicVolume == 0.)
639 {
640 G4double total = 0.;
641 G4int nrz = GetNumRZCorner();
642 G4PolyconeSideRZ a = GetCorner(nrz - 1);
643 for (G4int i=0; i<nrz; ++i)
644 {
646 total += (b.r*b.r + b.r*a.r + a.r*a.r)*(b.z - a.z);
647 a = b;
648 }
649 fCubicVolume = std::abs(total)*(GetEndPhi() - GetStartPhi())/6.;
650 }
651 return fCubicVolume;
652}
G4double total(Particle const *const p1, Particle const *const p2)

References G4VCSGfaceted::fCubicVolume, GetCorner(), GetEndPhi(), GetNumRZCorner(), GetStartPhi(), G4PolyconeSideRZ::r, G4INCL::CrossSections::total(), and G4PolyconeSideRZ::z.

◆ GetCubVolEpsilon()

G4double G4VCSGfaceted::GetCubVolEpsilon ( ) const
inherited

Definition at line 476 of file G4VCSGfaceted.cc.

477{
478 return fCubVolEpsilon;
479}
G4double fCubVolEpsilon

References G4VCSGfaceted::fCubVolEpsilon.

◆ GetCubVolStatistics()

G4int G4VCSGfaceted::GetCubVolStatistics ( ) const
inherited

Definition at line 467 of file G4VCSGfaceted.cc.

468{
469 return fStatistics;
470}

References G4VCSGfaceted::fStatistics.

◆ GetDisplacedSolidPtr() [1/2]

G4DisplacedSolid * G4VSolid::GetDisplacedSolidPtr ( )
virtualinherited

Reimplemented in G4DisplacedSolid.

Definition at line 176 of file G4VSolid.cc.

177{ return nullptr; }

◆ GetDisplacedSolidPtr() [2/2]

const G4DisplacedSolid * G4VSolid::GetDisplacedSolidPtr ( ) const
virtualinherited

Reimplemented in G4DisplacedSolid.

Definition at line 173 of file G4VSolid.cc.

174{ return nullptr; }

◆ GetEndPhi()

G4double G4GenericPolycone::GetEndPhi ( ) const
inline

◆ GetEntityType()

G4GeometryType G4GenericPolycone::GetEntityType ( ) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 589 of file G4GenericPolycone.cc.

590{
591 return G4String("G4GenericPolycone");
592}

◆ GetExtent()

G4VisExtent G4VCSGfaceted::GetExtent ( ) const
virtualinherited

Reimplemented from G4VSolid.

Definition at line 407 of file G4VCSGfaceted.cc.

408{
409 static const G4ThreeVector xMax(1,0,0), xMin(-1,0,0),
410 yMax(0,1,0), yMin(0,-1,0),
411 zMax(0,0,1), zMin(0,0,-1);
412 static const G4ThreeVector *axes[6] =
413 { &xMin, &xMax, &yMin, &yMax, &zMin, &zMax };
414
415 G4double answers[6] =
417
418 G4VCSGface **face = faces;
419 do // Loop checking, 13.08.2015, G.Cosmo
420 {
421 const G4ThreeVector **axis = axes+5 ;
422 G4double* answer = answers+5;
423 do // Loop checking, 13.08.2015, G.Cosmo
424 {
425 G4double testFace = (*face)->Extent( **axis );
426 if (testFace > *answer) { *answer = testFace; }
427 }
428 while( --axis, --answer >= answers );
429
430 } while( ++face < faces + numFace );
431
432 return G4VisExtent( -answers[0], answers[1],
433 -answers[2], answers[3],
434 -answers[4], answers[5] );
435}

References G4VCSGfaceted::faces, kInfinity, and G4VCSGfaceted::numFace.

◆ GetName()

G4String G4VSolid::GetName ( ) const
inlineinherited

Referenced by G4GMocrenFileSceneHandler::AddDetector(), G4HepRepFileSceneHandler::AddHepRepInstance(), G4GMocrenFileSceneHandler::AddPrimitive(), G4HepRepFileSceneHandler::AddSolid(), G4GMocrenFileSceneHandler::AddSolid(), G4VtkSceneHandler::AddSolid(), G4GDMLWriteSolids::AddSolid(), G4NavigationLogger::AlongComputeStepLog(), G4GDMLWriteSolids::BooleanWrite(), G4ReflectedSolid::BoundingLimits(), G4DisplacedSolid::BoundingLimits(), G4IntersectionSolid::BoundingLimits(), G4ScaledSolid::BoundingLimits(), G4SubtractionSolid::BoundingLimits(), G4UnionSolid::BoundingLimits(), G4Box::BoundingLimits(), G4Cons::BoundingLimits(), G4CutTubs::BoundingLimits(), G4Orb::BoundingLimits(), G4Para::BoundingLimits(), G4Sphere::BoundingLimits(), G4Torus::BoundingLimits(), G4Trap::BoundingLimits(), G4Trd::BoundingLimits(), G4Tubs::BoundingLimits(), G4EllipticalCone::BoundingLimits(), G4ExtrudedSolid::BoundingLimits(), BoundingLimits(), G4GenericTrap::BoundingLimits(), G4Hype::BoundingLimits(), G4Paraboloid::BoundingLimits(), G4Polycone::BoundingLimits(), G4Polyhedra::BoundingLimits(), G4TessellatedSolid::BoundingLimits(), G4TwistedTubs::BoundingLimits(), G4GDMLWriteSolids::BoxWrite(), G4ExtrudedSolid::CalculateExtent(), CalculateExtent(), G4Polycone::CalculateExtent(), G4Polyhedra::CalculateExtent(), G4NavigationLogger::CheckDaughterEntryPoint(), G4VDivisionParameterisation::CheckNDivAndWidth(), G4VDivisionParameterisation::CheckOffset(), G4GenericTrap::CheckOrder(), G4Para::CheckParameters(), G4Trap::CheckParameters(), G4Trd::CheckParameters(), G4Ellipsoid::CheckParameters(), G4EllipticalTube::CheckParameters(), G4ParameterisationPolyconeRho::CheckParametersValidity(), G4ParameterisationPolyconeZ::CheckParametersValidity(), G4ParameterisationPolyhedraRho::CheckParametersValidity(), G4ParameterisationPolyhedraPhi::CheckParametersValidity(), G4ParameterisationPolyhedraZ::CheckParametersValidity(), G4PhantomParameterisation::CheckVoxelsFillContainer(), G4GenericTrap::ComputeIsTwisted(), G4VoxelNavigation::ComputeSafety(), G4VoxelSafety::ComputeSafety(), G4NavigationLogger::ComputeSafetyLog(), G4ParameterisedNavigation::ComputeStep(), G4ReplicaNavigation::ComputeStep(), G4GDMLWriteSolids::ConeWrite(), G4Polyhedra::Create(), Create(), G4Polycone::Create(), G4PhysicalVolumeModel::CreateCurrentAttValues(), G4ReflectedSolid::CreatePolyhedron(), G4ReflectionFactory::CreateReflectedLV(), G4GenericTrap::CreateTessellatedSolid(), G4GDMLWriteSolids::CutTubeWrite(), G4SolidStore::DeRegister(), G4PhysicalVolumeModel::DescribeSolid(), G4SubtractionSolid::DistanceToIn(), G4Paraboloid::DistanceToIn(), G4TessellatedSolid::DistanceToIn(), G4Box::DistanceToOut(), G4Orb::DistanceToOut(), G4Para::DistanceToOut(), G4Trap::DistanceToOut(), G4Trd::DistanceToOut(), G4EllipticalCone::DistanceToOut(), G4TessellatedSolid::DistanceToOut(), G4Ellipsoid::DistanceToOut(), G4EllipticalTube::DistanceToOut(), G4tgbGeometryDumper::DumpMultiUnionVolume(), G4tgbGeometryDumper::DumpScaledVolume(), G4tgbGeometryDumper::DumpSolid(), G4GDMLWriteSolids::ElconeWrite(), G4GDMLWriteSolids::EllipsoidWrite(), G4GDMLWriteSolids::EltubeWrite(), G4PVDivision::ErrorInAxis(), G4ReplicatedSlice::ErrorInAxis(), export_G4VSolid(), G4Box::G4Box(), G4Cons::G4Cons(), G4CutTubs::G4CutTubs(), G4EllipticalCone::G4EllipticalCone(), G4Hype::G4Hype(), G4Para::G4Para(), G4Paraboloid::G4Paraboloid(), G4Polycone::G4Polycone(), G4Polyhedra::G4Polyhedra(), G4Sphere::G4Sphere(), G4Tet::G4Tet(), G4Trap::G4Trap(), G4Tubs::G4Tubs(), G4VParameterisationCons::G4VParameterisationCons(), G4VParameterisationPara::G4VParameterisationPara(), G4VParameterisationPolycone::G4VParameterisationPolycone(), G4VParameterisationPolyhedra::G4VParameterisationPolyhedra(), G4VParameterisationTrd::G4VParameterisationTrd(), G4VTwistedFaceted::G4VTwistedFaceted(), G4GDMLWriteSolids::GenericPolyconeWrite(), G4GDMLWriteSolids::GenTrapWrite(), G4Navigator::GetGlobalExitNormal(), G4Navigator::GetLocalExitNormal(), G4ITNavigator1::GetLocalExitNormal(), G4ITNavigator2::GetLocalExitNormal(), G4BooleanSolid::GetPointOnSurface(), G4PhantomParameterisation::GetReplicaNo(), G4GDMLWriteSolids::HypeWrite(), G4TessellatedSolid::InsideNoVoxels(), G4TessellatedSolid::InsideVoxels(), G4ITNavigator1::LocateGlobalPointAndSetup(), G4ITNavigator2::LocateGlobalPointAndSetup(), G4Navigator::LocateGlobalPointAndSetup(), G4GenericTrap::MakeDownFacet(), G4Trap::MakePlanes(), G4GenericTrap::MakeUpFacet(), G4GDMLWriteSolids::MultiUnionWrite(), G4GDMLWriteSolids::OrbWrite(), G4GDMLWriteSolids::ParaboloidWrite(), G4GDMLWriteParamvol::ParametersWrite(), G4GDMLWriteSolids::ParaWrite(), G4GDMLWriteSolids::PolyconeWrite(), G4GDMLWriteSolids::PolyhedraWrite(), G4NavigationLogger::PostComputeStepLog(), G4NavigationLogger::PreComputeStepLog(), G4NavigationLogger::PrintDaughterLog(), G4PseudoScene::ProcessVolume(), G4SolidStore::Register(), G4tgbVolumeMgr::RegisterMe(), G4NavigationLogger::ReportOutsideMother(), G4ASCIITreeSceneHandler::RequestPrimitives(), G4VSceneHandler::RequestPrimitives(), Reset(), G4Polyhedra::Reset(), G4VoxelSafety::SafetyForVoxelNode(), G4GDMLWriteSolids::ScaledWrite(), G4Torus::SetAllParameters(), G4Tet::SetBoundingLimits(), G4Polycone::SetOriginalParameters(), G4Polyhedra::SetOriginalParameters(), G4TessellatedSolid::SetSolidClosed(), G4Tet::SetVertices(), G4Box::SetXHalfLength(), G4Box::SetYHalfLength(), G4Box::SetZHalfLength(), G4GDMLWriteSolids::SphereWrite(), G4BooleanSolid::StackPolyhedron(), G4ReflectedSolid::StreamInfo(), G4BooleanSolid::StreamInfo(), G4DisplacedSolid::StreamInfo(), G4MultiUnion::StreamInfo(), G4ScaledSolid::StreamInfo(), G4Box::StreamInfo(), G4Cons::StreamInfo(), G4CSGSolid::StreamInfo(), G4CutTubs::StreamInfo(), G4Orb::StreamInfo(), G4Para::StreamInfo(), G4Sphere::StreamInfo(), G4Torus::StreamInfo(), G4Trap::StreamInfo(), G4Trd::StreamInfo(), G4Tubs::StreamInfo(), G4Ellipsoid::StreamInfo(), G4EllipticalCone::StreamInfo(), G4EllipticalTube::StreamInfo(), G4ExtrudedSolid::StreamInfo(), StreamInfo(), G4GenericTrap::StreamInfo(), G4Hype::StreamInfo(), G4Paraboloid::StreamInfo(), G4Polycone::StreamInfo(), G4Polyhedra::StreamInfo(), G4TessellatedSolid::StreamInfo(), G4Tet::StreamInfo(), G4TwistedBox::StreamInfo(), G4TwistedTrap::StreamInfo(), G4TwistedTrd::StreamInfo(), G4TwistedTubs::StreamInfo(), G4VCSGfaceted::StreamInfo(), G4VTwistedFaceted::StreamInfo(), G4GDMLRead::StripNames(), SubstractSolids(), G4UnionSolid::SurfaceNormal(), G4Box::SurfaceNormal(), G4Para::SurfaceNormal(), G4Trap::SurfaceNormal(), G4Trd::SurfaceNormal(), G4Ellipsoid::SurfaceNormal(), G4EllipticalCone::SurfaceNormal(), G4EllipticalTube::SurfaceNormal(), G4ExtrudedSolid::SurfaceNormal(), G4Tet::SurfaceNormal(), G4GDMLWriteSolids::TessellatedWrite(), G4GDMLWriteSolids::TetWrite(), G4GDMLWriteSolids::TorusWrite(), G4GDMLWriteSolids::TrapWrite(), G4GDMLWriteStructure::TraverseVolumeTree(), G4GDMLWriteSolids::TrdWrite(), G4GDMLWriteSolids::TubeWrite(), G4GDMLWriteSolids::TwistedboxWrite(), G4GDMLWriteSolids::TwistedtrapWrite(), G4GDMLWriteSolids::TwistedtrdWrite(), G4GDMLWriteSolids::TwistedtubsWrite(), G4PhysicalVolumeModel::VisitGeometryAndGetVisReps(), and G4GDMLWriteSolids::XtruWrite().

◆ GetNumRZCorner()

G4int G4GenericPolycone::GetNumRZCorner ( ) const
inline

◆ GetPointOnSurface()

G4ThreeVector G4GenericPolycone::GetPointOnSurface ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 760 of file G4GenericPolycone.cc.

761{
762 // Set surface elements
763 if (!fElements)
764 {
767 l.unlock();
768 }
769
770 // Select surface element
772 selem = fElements->back();
773 G4double select = selem.area*G4QuickRand();
774 auto it = std::lower_bound(fElements->begin(), fElements->end(), select,
776 -> G4bool { return x.area < val; });
777
778 // Generate random point
779 G4double r = 0, z = 0, phi = 0;
780 G4double u = G4QuickRand();
781 G4double v = G4QuickRand();
782 G4int i0 = (*it).i0;
783 G4int i1 = (*it).i1;
784 G4int i2 = (*it).i2;
785 if (i2 < 0) // lateral surface
786 {
789 if (p1.r < p0.r)
790 {
791 p0 = GetCorner(i1);
792 p1 = GetCorner(i0);
793 }
794 if (p1.r - p0.r < kCarTolerance) // cylindrical surface
795 {
796 r = (p1.r - p0.r)*u + p0.r;
797 z = (p1.z - p0.z)*u + p0.z;
798 }
799 else // conical surface
800 {
801 r = std::sqrt(p1.r*p1.r*u + p0.r*p0.r*(1. - u));
802 z = p0.z + (p1.z - p0.z)*(r - p0.r)/(p1.r - p0.r);
803 }
804 phi = (GetEndPhi() - GetStartPhi())*v + GetStartPhi();
805 }
806 else // phi cut
807 {
808 G4int nrz = GetNumRZCorner();
809 phi = (i0 < nrz) ? GetStartPhi() : GetEndPhi();
810 if (i0 >= nrz) { i0 -= nrz; }
814 if (u + v > 1.) { u = 1. - u; v = 1. - v; }
815 r = (p1.r - p0.r)*u + (p2.r - p0.r)*v + p0.r;
816 z = (p1.z - p0.z)*u + (p2.z - p0.z)*v + p0.z;
817 }
818 return G4ThreeVector(r*std::cos(phi), r*std::sin(phi), z);
819}
void SetSurfaceElements() const

References G4GenericPolycone::surface_element::area, fElements, G4QuickRand(), GetCorner(), GetEndPhi(), GetNumRZCorner(), GetStartPhi(), G4VSolid::kCarTolerance, G4PolyconeSideRZ::r, SetSurfaceElements(), anonymous_namespace{G4GenericPolycone.cc}::surface_elementsMutex, G4TemplateAutoLock< _Mutex_t >::unlock(), and G4PolyconeSideRZ::z.

◆ GetPointOnSurfaceGeneric()

G4ThreeVector G4VCSGfaceted::GetPointOnSurfaceGeneric ( ) const
protectedinherited

Definition at line 586 of file G4VCSGfaceted.cc.

587{
588 // Preparing variables
589 //
590 G4ThreeVector answer=G4ThreeVector(0.,0.,0.);
591 G4VCSGface **face = faces;
592 G4double area = 0.;
593 G4int i;
594 std::vector<G4double> areas;
595
596 // First step: calculate surface areas
597 //
598 do // Loop checking, 13.08.2015, G.Cosmo
599 {
600 G4double result = (*face)->SurfaceArea( );
601 areas.push_back(result);
602 area=area+result;
603 } while( ++face < faces + numFace );
604
605 // Second Step: choose randomly one surface
606 //
607 G4VCSGface **face1 = faces;
608 G4double chose = area*G4UniformRand();
609 G4double Achose1, Achose2;
610 Achose1=0.; Achose2=0.;
611 i=0;
612
613 do
614 {
615 Achose2+=areas[i];
616 if(chose>=Achose1 && chose<Achose2)
617 {
618 G4ThreeVector point;
619 point= (*face1)->GetPointOnFace();
620 return point;
621 }
622 ++i;
623 Achose1=Achose2;
624 } while( ++face1 < faces + numFace );
625
626 return answer;
627}
#define G4UniformRand()
Definition: Randomize.hh:52
virtual G4double SurfaceArea()=0

References G4VCSGfaceted::faces, G4UniformRand, G4VCSGfaceted::numFace, and G4VCSGface::SurfaceArea().

◆ GetPolyhedron()

G4Polyhedron * G4VCSGfaceted::GetPolyhedron ( ) const
virtualinherited

◆ GetSinEndPhi()

G4double G4GenericPolycone::GetSinEndPhi ( ) const
inline

Referenced by BoundingLimits(), and CalculateExtent().

◆ GetSinStartPhi()

G4double G4GenericPolycone::GetSinStartPhi ( ) const
inline

Referenced by BoundingLimits(), and CalculateExtent().

◆ GetStartPhi()

G4double G4GenericPolycone::GetStartPhi ( ) const
inline

◆ GetSurfaceArea()

G4double G4GenericPolycone::GetSurfaceArea ( )
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 658 of file G4GenericPolycone.cc.

659{
660 if (fSurfaceArea == 0.)
661 {
662 // phi cut area
663 G4int nrz = GetNumRZCorner();
664 G4double scut = 0.;
665 if (IsOpen())
666 {
667 G4PolyconeSideRZ a = GetCorner(nrz - 1);
668 for (G4int i=0; i<nrz; ++i)
669 {
671 scut += a.r*b.z - a.z*b.r;
672 a = b;
673 }
674 scut = std::abs(scut);
675 }
676 // lateral surface area
677 G4double slat = 0;
678 G4PolyconeSideRZ a = GetCorner(nrz - 1);
679 for (G4int i=0; i<nrz; ++i)
680 {
682 G4double h = std::sqrt((b.r - a.r)*(b.r - a.r) + (b.z - a.z)*(b.z - a.z));
683 slat += (b.r + a.r)*h;
684 a = b;
685 }
686 slat *= (GetEndPhi() - GetStartPhi())/2.;
687 fSurfaceArea = scut + slat;
688 }
689 return fSurfaceArea;
690}

References G4VCSGfaceted::fSurfaceArea, GetCorner(), GetEndPhi(), GetNumRZCorner(), GetStartPhi(), IsOpen(), G4PolyconeSideRZ::r, and G4PolyconeSideRZ::z.

◆ GetTolerance()

G4double G4VSolid::GetTolerance ( ) const
inlineinherited

◆ Inside()

EInside G4GenericPolycone::Inside ( const G4ThreeVector p) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 357 of file G4GenericPolycone.cc.

358{
359 //
360 // Quick test
361 //
363
364 //
365 // Long answer
366 //
367 return G4VCSGfaceted::Inside(p);
368}
G4bool MustBeOutside(const G4ThreeVector &p) const

References enclosingCylinder, G4VCSGfaceted::Inside(), kOutside, and G4EnclosingCylinder::MustBeOutside().

◆ IsOpen()

G4bool G4GenericPolycone::IsOpen ( ) const
inline

◆ operator=()

G4GenericPolycone & G4GenericPolycone::operator= ( const G4GenericPolycone source)

Definition at line 282 of file G4GenericPolycone.cc.

283{
284 if (this == &source) return *this;
285
287
288 delete [] corners;
289 // if (original_parameters) delete original_parameters;
290
291 delete enclosingCylinder;
292
293 CopyStuff( source );
294
295 return *this;
296}
G4VCSGfaceted & operator=(const G4VCSGfaceted &source)

References CopyStuff(), corners, enclosingCylinder, and G4VCSGfaceted::operator=().

◆ operator==()

G4bool G4VSolid::operator== ( const G4VSolid s) const
inlineinherited

◆ Reset()

G4bool G4GenericPolycone::Reset ( )

Definition at line 342 of file G4GenericPolycone.cc.

343{
344 std::ostringstream message;
345 message << "Solid " << GetName() << " built using generic construct."
346 << G4endl << "Not applicable to the generic construct !";
347 G4Exception("G4GenericPolycone::Reset()", "GeomSolids1001",
348 JustWarning, message, "Parameters NOT resetted.");
349 return true;
350}

References G4endl, G4Exception(), G4VSolid::GetName(), and JustWarning.

◆ SetAreaAccuracy()

void G4VCSGfaceted::SetAreaAccuracy ( G4double  ep)
inherited

Definition at line 533 of file G4VCSGfaceted.cc.

534{
535 fSurfaceArea=0.;
536 fAreaAccuracy=ep;
537}

References G4VCSGfaceted::fAreaAccuracy, and G4VCSGfaceted::fSurfaceArea.

◆ SetAreaStatistics()

void G4VCSGfaceted::SetAreaStatistics ( G4int  st)
inherited

Definition at line 523 of file G4VCSGfaceted.cc.

524{
525 fSurfaceArea=0.;
526 fStatistics=st;
527}

References G4VCSGfaceted::fStatistics, and G4VCSGfaceted::fSurfaceArea.

◆ SetCubVolEpsilon()

void G4VCSGfaceted::SetCubVolEpsilon ( G4double  ep)
inherited

Definition at line 495 of file G4VCSGfaceted.cc.

496{
497 fCubicVolume=0.;
499}

References G4VCSGfaceted::fCubicVolume, and G4VCSGfaceted::fCubVolEpsilon.

◆ SetCubVolStatistics()

void G4VCSGfaceted::SetCubVolStatistics ( G4int  st)
inherited

Definition at line 485 of file G4VCSGfaceted.cc.

486{
487 fCubicVolume=0.;
488 fStatistics=st;
489}

References G4VCSGfaceted::fCubicVolume, and G4VCSGfaceted::fStatistics.

◆ SetName()

void G4VSolid::SetName ( const G4String name)
inherited

◆ SetSurfaceElements()

void G4GenericPolycone::SetSurfaceElements ( ) const
protected

Definition at line 697 of file G4GenericPolycone.cc.

698{
699 fElements = new std::vector<G4GenericPolycone::surface_element>;
700 G4double sarea = 0.;
701 G4int nrz = GetNumRZCorner();
702
703 // set lateral surface elements
704 G4double dphi = GetEndPhi() - GetStartPhi();
705 G4int ia = nrz - 1;
706 for (G4int ib=0; ib<nrz; ++ib)
707 {
711 selem.i0 = ia;
712 selem.i1 = ib;
713 selem.i2 = -1;
714 ia = ib;
715 if (a.r == 0. && b.r == 0.) continue;
716 G4double h = std::sqrt((b.r - a.r)*(b.r - a.r) + (b.z - a.z)*(b.z - a.z));
717 sarea += 0.5*dphi*(b.r + a.r)*h;
718 selem.area = sarea;
719 fElements->push_back(selem);
720 }
721
722 // set elements for phi cuts
723 if (IsOpen())
724 {
725 G4TwoVectorList contourRZ;
726 std::vector<G4int> triangles;
727 for (G4int i=0; i<nrz; ++i)
728 {
729 G4PolyconeSideRZ corner = GetCorner(i);
730 contourRZ.push_back(G4TwoVector(corner.r, corner.z));
731 }
732 G4GeomTools::TriangulatePolygon(contourRZ, triangles);
733 G4int ntria = triangles.size();
734 for (G4int i=0; i<ntria; i+=3)
735 {
737 selem.i0 = triangles[i];
738 selem.i1 = triangles[i+1];
739 selem.i2 = triangles[i+2];
740 G4PolyconeSideRZ a = GetCorner(selem.i0);
741 G4PolyconeSideRZ b = GetCorner(selem.i1);
742 G4PolyconeSideRZ c = GetCorner(selem.i2);
743 G4double stria =
744 std::abs(G4GeomTools::TriangleArea(a.r, a.z, b.r, b.z, c.r, c.z));
745 sarea += stria;
746 selem.area = sarea;
747 fElements->push_back(selem); // start phi
748 sarea += stria;
749 selem.area = sarea;
750 selem.i0 += nrz;
751 fElements->push_back(selem); // end phi
752 }
753 }
754}
static G4double TriangleArea(G4double Ax, G4double Ay, G4double Bx, G4double By, G4double Cx, G4double Cy)
Definition: G4GeomTools.cc:41

References G4GenericPolycone::surface_element::area, fElements, GetCorner(), GetEndPhi(), GetNumRZCorner(), GetStartPhi(), G4GenericPolycone::surface_element::i0, G4GenericPolycone::surface_element::i1, G4GenericPolycone::surface_element::i2, IsOpen(), G4PolyconeSideRZ::r, G4GeomTools::TriangleArea(), G4GeomTools::TriangulatePolygon(), and G4PolyconeSideRZ::z.

Referenced by GetPointOnSurface().

◆ StreamInfo()

std::ostream & G4GenericPolycone::StreamInfo ( std::ostream &  os) const
virtual

Reimplemented from G4VCSGfaceted.

Definition at line 607 of file G4GenericPolycone.cc.

608{
609 G4int oldprc = os.precision(16);
610 os << "-----------------------------------------------------------\n"
611 << " *** Dump for solid - " << GetName() << " ***\n"
612 << " ===================================================\n"
613 << " Solid type: G4GenericPolycone\n"
614 << " Parameters: \n"
615 << " starting phi angle : " << startPhi/degree << " degrees \n"
616 << " ending phi angle : " << endPhi/degree << " degrees \n";
617 G4int i=0;
618
619 os << " number of RZ points: " << numCorner << "\n"
620 << " RZ values (corners): \n";
621 for (i=0; i<numCorner; i++)
622 {
623 os << " "
624 << corners[i].r << ", " << corners[i].z << "\n";
625 }
626 os << "-----------------------------------------------------------\n";
627 os.precision(oldprc);
628
629 return os;
630}
static constexpr double degree
Definition: G4SIunits.hh:124

References corners, degree, endPhi, G4VSolid::GetName(), numCorner, G4PolyconeSideRZ::r, startPhi, and G4PolyconeSideRZ::z.

◆ SurfaceNormal()

G4ThreeVector G4VCSGfaceted::SurfaceNormal ( const G4ThreeVector p) const
virtualinherited

Implements G4VSolid.

Definition at line 225 of file G4VCSGfaceted.cc.

226{
227 G4ThreeVector answer;
228 G4VCSGface **face = faces;
229 G4double best = kInfinity;
230 do // Loop checking, 13.08.2015, G.Cosmo
231 {
232 G4double distance;
233 G4ThreeVector normal = (*face)->Normal( p, &distance );
234 if (distance < best)
235 {
236 best = distance;
237 answer = normal;
238 }
239 } while( ++face < faces + numFace );
240
241 return answer;
242}

References G4VCSGfaceted::faces, kInfinity, CLHEP::normal(), and G4VCSGfaceted::numFace.

Field Documentation

◆ corners

G4PolyconeSideRZ* G4GenericPolycone::corners = nullptr
protected

◆ enclosingCylinder

G4EnclosingCylinder* G4GenericPolycone::enclosingCylinder = nullptr
protected

◆ endPhi

G4double G4GenericPolycone::endPhi
protected

Definition at line 148 of file G4GenericPolycone.hh.

Referenced by CopyStuff(), Create(), CreatePolyhedron(), and StreamInfo().

◆ faces

G4VCSGface** G4VCSGfaceted::faces = nullptr
protectedinherited

◆ fAreaAccuracy

G4double G4VCSGfaceted::fAreaAccuracy
privateinherited

◆ fCubicVolume

G4double G4VCSGfaceted::fCubicVolume = 0.0
protectedinherited

◆ fCubVolEpsilon

G4double G4VCSGfaceted::fCubVolEpsilon
privateinherited

◆ fElements

std::vector<surface_element>* G4GenericPolycone::fElements = nullptr
mutableprotected

◆ fpPolyhedron

G4Polyhedron* G4VCSGfaceted::fpPolyhedron = nullptr
mutableprotectedinherited

◆ fRebuildPolyhedron

G4bool G4VCSGfaceted::fRebuildPolyhedron = false
mutableprotectedinherited

◆ fshapeName

G4String G4VSolid::fshapeName
privateinherited

Definition at line 312 of file G4VSolid.hh.

Referenced by G4VSolid::operator=(), and G4VSolid::SetName().

◆ fStatistics

G4int G4VCSGfaceted::fStatistics
privateinherited

◆ fSurfaceArea

G4double G4VCSGfaceted::fSurfaceArea = 0.0
protectedinherited

◆ kCarTolerance

G4double G4VSolid::kCarTolerance
protectedinherited

Definition at line 299 of file G4VSolid.hh.

Referenced by G4TessellatedSolid::AddFacet(), G4Polycone::CalculateExtent(), G4Polyhedra::CalculateExtent(), G4Tet::CheckDegeneracy(), G4Para::CheckParameters(), G4Trd::CheckParameters(), G4Ellipsoid::CheckParameters(), G4EllipticalTube::CheckParameters(), G4GenericTrap::ComputeIsTwisted(), G4Polyhedra::Create(), Create(), G4Polycone::Create(), G4CutTubs::CreatePolyhedron(), G4TessellatedSolid::CreateVertexList(), G4VCSGfaceted::DistanceTo(), G4Sphere::DistanceToIn(), G4Ellipsoid::DistanceToIn(), G4Hype::DistanceToIn(), G4Paraboloid::DistanceToIn(), G4VCSGfaceted::DistanceToIn(), G4TessellatedSolid::DistanceToInCore(), G4Cons::DistanceToOut(), G4CutTubs::DistanceToOut(), G4Sphere::DistanceToOut(), G4Torus::DistanceToOut(), G4Tubs::DistanceToOut(), G4GenericTrap::DistanceToOut(), G4Hype::DistanceToOut(), G4Paraboloid::DistanceToOut(), G4VCSGfaceted::DistanceToOut(), G4TessellatedSolid::DistanceToOutCandidates(), G4TessellatedSolid::DistanceToOutCore(), G4TessellatedSolid::DistanceToOutNoVoxels(), G4GenericTrap::DistToPlane(), G4GenericTrap::DistToTriangle(), G4Box::G4Box(), G4Cons::G4Cons(), G4CutTubs::G4CutTubs(), G4EllipticalCone::G4EllipticalCone(), G4ExtrudedSolid::G4ExtrudedSolid(), G4GenericTrap::G4GenericTrap(), G4Hype::G4Hype(), G4Para::G4Para(), G4Sphere::G4Sphere(), G4Tet::G4Tet(), G4Trap::G4Trap(), G4Tubs::G4Tubs(), G4UnionSolid::G4UnionSolid(), G4VSolid::G4VSolid(), G4VTwistedFaceted::G4VTwistedFaceted(), GetPointOnSurface(), G4Polycone::GetPointOnSurface(), G4UnionSolid::Init(), G4Orb::Initialize(), G4TessellatedSolid::Initialize(), G4SubtractionSolid::Inside(), G4Hype::Inside(), G4Paraboloid::Inside(), G4VCSGfaceted::Inside(), G4VTwistedFaceted::Inside(), G4TessellatedSolid::InsideNoVoxels(), G4GenericTrap::InsidePolygone(), G4TessellatedSolid::InsideVoxels(), G4CutTubs::IsCrossingCutPlanes(), G4GenericTrap::IsSegCrossingZ(), G4Trap::MakePlane(), G4GenericTrap::NormalToPlane(), G4VSolid::operator=(), G4TessellatedSolid::SafetyFromInside(), G4TessellatedSolid::SafetyFromOutside(), G4Torus::SetAllParameters(), G4Polycone::SetOriginalParameters(), G4Polyhedra::SetOriginalParameters(), G4Box::SetXHalfLength(), G4Box::SetYHalfLength(), G4Box::SetZHalfLength(), G4Torus::SurfaceNormal(), G4GenericTrap::SurfaceNormal(), and G4Paraboloid::SurfaceNormal().

◆ numCorner

G4int G4GenericPolycone::numCorner
protected

Definition at line 150 of file G4GenericPolycone.hh.

Referenced by CopyStuff(), Create(), CreatePolyhedron(), and StreamInfo().

◆ numFace

G4int G4VCSGfaceted::numFace = 0
protectedinherited

◆ phiIsOpen

G4bool G4GenericPolycone::phiIsOpen = false
protected

Definition at line 149 of file G4GenericPolycone.hh.

Referenced by CopyStuff(), and Create().

◆ startPhi

G4double G4GenericPolycone::startPhi
protected

Definition at line 147 of file G4GenericPolycone.hh.

Referenced by CopyStuff(), Create(), CreatePolyhedron(), and StreamInfo().


The documentation for this class was generated from the following files: