Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4VSolid Class Referenceabstract

#include <G4VSolid.hh>

Inheritance diagram for G4VSolid:

Public Member Functions

 G4VSolid (const G4String &name)
 
virtual ~G4VSolid ()
 
G4bool operator== (const G4VSolid &s) const
 
G4String GetName () const
 
void SetName (const G4String &name)
 
G4double GetTolerance () const
 
virtual void Extent (G4ThreeVector &pMin, G4ThreeVector &pMax) const
 
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
 
virtual G4ThreeVector SurfaceNormal (const G4ThreeVector &p) const =0
 
virtual G4double DistanceToIn (const G4ThreeVector &p, const G4ThreeVector &v) const =0
 
virtual G4double DistanceToIn (const G4ThreeVector &p) const =0
 
virtual G4double DistanceToOut (const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
 
virtual G4double DistanceToOut (const G4ThreeVector &p) const =0
 
virtual void ComputeDimensions (G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
 
virtual G4double GetCubicVolume ()
 
virtual G4double GetSurfaceArea ()
 
virtual G4GeometryType GetEntityType () const =0
 
virtual G4ThreeVector GetPointOnSurface () const
 
virtual G4VSolidClone () const
 
virtual std::ostream & StreamInfo (std::ostream &os) const =0
 
void DumpInfo () const
 
virtual void DescribeYourselfTo (G4VGraphicsScene &scene) const =0
 
virtual G4VisExtent GetExtent () const
 
virtual G4PolyhedronCreatePolyhedron () const
 
virtual G4PolyhedronGetPolyhedron () const
 
virtual const G4VSolidGetConstituentSolid (G4int no) const
 
virtual G4VSolidGetConstituentSolid (G4int no)
 
virtual const G4DisplacedSolidGetDisplacedSolidPtr () const
 
virtual G4DisplacedSolidGetDisplacedSolidPtr ()
 
 G4VSolid (__void__ &)
 
 G4VSolid (const G4VSolid &rhs)
 
G4VSolidoperator= (const G4VSolid &rhs)
 
G4double EstimateCubicVolume (G4int nStat, G4double epsilon) const
 
G4double EstimateSurfaceArea (G4int nStat, G4double ell) const
 

Protected Member Functions

void CalculateClippedPolygonExtent (G4ThreeVectorList &pPolygon, 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 ClipBetweenSections (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
 

Protected Attributes

G4double kCarTolerance
 

Friends

std::ostream & operator<< (std::ostream &os, const G4VSolid &e)
 

Detailed Description

Definition at line 87 of file G4VSolid.hh.

Constructor & Destructor Documentation

G4VSolid::G4VSolid ( const G4String name)

Definition at line 61 of file G4VSolid.cc.

62  : fshapeName(name)
63 {
65 
66  // Register to store
67  //
69 }
static void Register(G4VSolid *pSolid)
G4double GetSurfaceTolerance() const
static G4SolidStore * GetInstance()
G4double kCarTolerance
Definition: G4VSolid.hh:307
static G4GeometryTolerance * GetInstance()

Here is the call graph for this function:

G4VSolid::~G4VSolid ( )
virtual

Definition at line 102 of file G4VSolid.cc.

103 {
105 }
static void DeRegister(G4VSolid *pSolid)
static G4SolidStore * GetInstance()

Here is the call graph for this function:

G4VSolid::G4VSolid ( __void__ &  )

Definition at line 89 of file G4VSolid.cc.

90  : fshapeName("")
91 {
92  // Register to store
93  //
95 }
static void Register(G4VSolid *pSolid)
static G4SolidStore * GetInstance()

Here is the call graph for this function:

G4VSolid::G4VSolid ( const G4VSolid rhs)

Definition at line 76 of file G4VSolid.cc.

77  : kCarTolerance(rhs.kCarTolerance), fshapeName(rhs.fshapeName)
78 {
79  // Register to store
80  //
82 }
static void Register(G4VSolid *pSolid)
static G4SolidStore * GetInstance()
G4double kCarTolerance
Definition: G4VSolid.hh:307

Here is the call graph for this function:

Member Function Documentation

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

Definition at line 428 of file G4VSolid.cc.

433 {
434  G4int noLeft,i;
435  G4double component;
436  /*
437  G4cout<<G4endl;
438  for(i = 0 ; i < pPolygon.size() ; i++ )
439  {
440  G4cout << i << "\t"
441  << "p.x = " << pPolygon[i].operator()(pAxis) << "\t"
442  // << "p.y = " << pPolygon[i].y() << "\t"
443  // << "p.z = " << pPolygon[i].z() << "\t"
444  << G4endl;
445  }
446  G4cout<<G4endl;
447  */
448  ClipPolygon(pPolygon,pVoxelLimit,pAxis);
449  noLeft = pPolygon.size();
450 
451  if ( noLeft )
452  {
453  // G4cout<<G4endl;
454  for (i=0;i<noLeft;i++)
455  {
456  component = pPolygon[i].operator()(pAxis);
457  // G4cout <<i<<"\t"<<component<<G4endl;
458 
459  if (component < pMin)
460  {
461  // G4cout <<i<<"\t"<<"Pmin = "<<component<<G4endl;
462  pMin = component;
463  }
464  if (component > pMax)
465  {
466  // G4cout <<i<<"\t"<<"PMax = "<<component<<G4endl;
467  pMax = component;
468  }
469  }
470  // G4cout<<G4endl;
471  }
472  // G4cout<<"pMin = "<<pMin<<"\t"<<"pMax = "<<pMax<<G4endl;
473 }
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76
void ClipPolygon(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis) const
Definition: G4VSolid.cc:495

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 379 of file G4VSolid.cc.

384 {
385  G4ThreeVectorList polygon;
386  polygon.reserve(4);
387  polygon.push_back((*pVertices)[pSectionIndex]);
388  polygon.push_back((*pVertices)[pSectionIndex+4]);
389  polygon.push_back((*pVertices)[pSectionIndex+5]);
390  polygon.push_back((*pVertices)[pSectionIndex+1]);
391  // G4cout<<"ClipBetweenSections: 0-4-5-1"<<G4endl;
392  CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
393  polygon.clear();
394 
395  polygon.push_back((*pVertices)[pSectionIndex+1]);
396  polygon.push_back((*pVertices)[pSectionIndex+5]);
397  polygon.push_back((*pVertices)[pSectionIndex+6]);
398  polygon.push_back((*pVertices)[pSectionIndex+2]);
399  // G4cout<<"ClipBetweenSections: 1-5-6-2"<<G4endl;
400  CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
401  polygon.clear();
402 
403  polygon.push_back((*pVertices)[pSectionIndex+2]);
404  polygon.push_back((*pVertices)[pSectionIndex+6]);
405  polygon.push_back((*pVertices)[pSectionIndex+7]);
406  polygon.push_back((*pVertices)[pSectionIndex+3]);
407  // G4cout<<"ClipBetweenSections: 2-6-7-3"<<G4endl;
408  CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
409  polygon.clear();
410 
411  polygon.push_back((*pVertices)[pSectionIndex+3]);
412  polygon.push_back((*pVertices)[pSectionIndex+7]);
413  polygon.push_back((*pVertices)[pSectionIndex+4]);
414  polygon.push_back((*pVertices)[pSectionIndex]);
415  // G4cout<<"ClipBetweenSections: 3-7-4-0"<<G4endl;
416  CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
417  return;
418 }
void CalculateClippedPolygonExtent(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
Definition: G4VSolid.cc:428
std::vector< G4ThreeVector > G4ThreeVectorList

Here is the call graph for this function:

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

Definition at line 348 of file G4VSolid.cc.

353 {
354 
355  G4ThreeVectorList polygon;
356  polygon.reserve(4);
357  polygon.push_back((*pVertices)[pSectionIndex]);
358  polygon.push_back((*pVertices)[pSectionIndex+1]);
359  polygon.push_back((*pVertices)[pSectionIndex+2]);
360  polygon.push_back((*pVertices)[pSectionIndex+3]);
361  // G4cout<<"ClipCrossSection: 0-1-2-3"<<G4endl;
362  CalculateClippedPolygonExtent(polygon,pVoxelLimit,pAxis,pMin,pMax);
363  return;
364 }
void CalculateClippedPolygonExtent(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
Definition: G4VSolid.cc:428
std::vector< G4ThreeVector > G4ThreeVectorList

Here is the call graph for this function:

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

Definition at line 495 of file G4VSolid.cc.

498 {
499  G4ThreeVectorList outputPolygon;
500 
501  if ( pVoxelLimit.IsLimited() )
502  {
503  if (pVoxelLimit.IsXLimited() ) // && pAxis != kXAxis)
504  {
505  G4VoxelLimits simpleLimit1;
506  simpleLimit1.AddLimit(kXAxis,pVoxelLimit.GetMinXExtent(),kInfinity);
507  // G4cout<<"MinXExtent()"<<G4endl;
508  ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
509 
510  pPolygon.clear();
511 
512  if ( !outputPolygon.size() ) return;
513 
514  G4VoxelLimits simpleLimit2;
515  // G4cout<<"MaxXExtent()"<<G4endl;
516  simpleLimit2.AddLimit(kXAxis,-kInfinity,pVoxelLimit.GetMaxXExtent());
517  ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
518 
519  if ( !pPolygon.size() ) return;
520  else outputPolygon.clear();
521  }
522  if ( pVoxelLimit.IsYLimited() ) // && pAxis != kYAxis)
523  {
524  G4VoxelLimits simpleLimit1;
525  simpleLimit1.AddLimit(kYAxis,pVoxelLimit.GetMinYExtent(),kInfinity);
526  ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
527 
528  // Must always clear pPolygon - for clip to simpleLimit2 and in case of
529  // early exit
530 
531  pPolygon.clear();
532 
533  if ( !outputPolygon.size() ) return;
534 
535  G4VoxelLimits simpleLimit2;
536  simpleLimit2.AddLimit(kYAxis,-kInfinity,pVoxelLimit.GetMaxYExtent());
537  ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
538 
539  if ( !pPolygon.size() ) return;
540  else outputPolygon.clear();
541  }
542  if ( pVoxelLimit.IsZLimited() ) // && pAxis != kZAxis)
543  {
544  G4VoxelLimits simpleLimit1;
545  simpleLimit1.AddLimit(kZAxis,pVoxelLimit.GetMinZExtent(),kInfinity);
546  ClipPolygonToSimpleLimits(pPolygon,outputPolygon,simpleLimit1);
547 
548  // Must always clear pPolygon - for clip to simpleLimit2 and in case of
549  // early exit
550 
551  pPolygon.clear();
552 
553  if ( !outputPolygon.size() ) return;
554 
555  G4VoxelLimits simpleLimit2;
556  simpleLimit2.AddLimit(kZAxis,-kInfinity,pVoxelLimit.GetMaxZExtent());
557  ClipPolygonToSimpleLimits(outputPolygon,pPolygon,simpleLimit2);
558 
559  // Return after final clip - no cleanup
560  }
561  }
562 }
static const G4double kInfinity
Definition: geomdefs.hh:42
G4double GetMinYExtent() const
G4bool IsYLimited() const
G4bool IsXLimited() const
G4double GetMaxXExtent() const
void AddLimit(const EAxis pAxis, const G4double pMin, const G4double pMax)
G4double GetMinZExtent() const
G4bool IsLimited() const
std::vector< G4ThreeVector > G4ThreeVectorList
G4double GetMinXExtent() const
G4double GetMaxZExtent() const
G4double GetMaxYExtent() const
G4bool IsZLimited() const

Here is the call graph for this function:

Here is the caller graph for this function:

G4VSolid * G4VSolid::Clone ( ) const
virtual

Reimplemented in G4Trap, G4TessellatedSolid, G4TwistedTubs, G4Sphere, G4Cons, G4Torus, G4Tubs, G4Trd, G4Para, G4ExtrudedSolid, G4EllipticalCone, G4GenericTrap, G4Paraboloid, G4Polycone, G4Polyhedra, G4Hype, G4TwistedTrap, G4Orb, G4DisplacedSolid, G4OTubs, G4Box, G4Tet, G4Ellipsoid, G4CutTubs, G4ScaledSolid, G4GenericPolycone, G4ReflectedSolid, G4EllipticalTube, G4TwistedTrd, G4TwistedBox, G4IntersectionSolid, G4SubtractionSolid, and G4UnionSolid.

Definition at line 325 of file G4VSolid.cc.

326 {
327  std::ostringstream message;
328  message << "Clone() method not implemented for type: "
329  << GetEntityType() << "!" << G4endl
330  << "Returning NULL pointer!";
331  G4Exception("G4VSolid::Clone()", "GeomMgt1001", JustWarning, message);
332  return 0;
333 }
virtual G4GeometryType GetEntityType() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

Definition at line 138 of file G4VSolid.cc.

141 {
142  std::ostringstream message;
143  message << "Illegal call to G4VSolid::ComputeDimensions()" << G4endl
144  << "Method not overloaded by derived class !";
145  G4Exception("G4VSolid::ComputeDimensions()", "GeomMgt0003",
146  FatalException, message);
147 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61

Here is the call graph for this function:

Here is the caller graph for this function:

virtual G4double G4VSolid::DistanceToOut ( const G4ThreeVector p,
const G4ThreeVector v,
const G4bool  calcNorm = false,
G4bool validNorm = 0,
G4ThreeVector n = 0 
) const
pure virtual
void G4VSolid::DumpInfo ( ) const
inline
G4double G4VSolid::EstimateCubicVolume ( G4int  nStat,
G4double  epsilon 
) const

Definition at line 204 of file G4VSolid.cc.

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

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 264 of file G4VSolid.cc.

265 {
266  G4int inside=0;
267  G4double px,py,pz,minX,maxX,minY,maxY,minZ,maxZ,surf;
269  EInside in;
270 
271  // values needed for CalculateExtent signature
272 
273  G4VoxelLimits limit; // Unlimited
274  G4AffineTransform origin;
275 
276  // min max extents of pSolid along X,Y,Z
277 
278  this->CalculateExtent(kXAxis,limit,origin,minX,maxX);
279  this->CalculateExtent(kYAxis,limit,origin,minY,maxY);
280  this->CalculateExtent(kZAxis,limit,origin,minZ,maxZ);
281 
282  // limits
283 
284  if(nStat < 100) { nStat = 100; }
285 
286  G4double dX=maxX-minX;
287  G4double dY=maxY-minY;
288  G4double dZ=maxZ-minZ;
289  if(ell<=0.) // Automatic definition of skin thickness
290  {
291  G4double minval=dX;
292  if(dY<dX) { minval=dY; }
293  if(dZ<minval) { minval=dZ; }
294  ell=.01*minval;
295  }
296 
297  G4double dd=2*ell;
298  minX-=ell; minY-=ell; minZ-=ell; dX+=dd; dY+=dd; dZ+=dd;
299 
300  for(G4int i = 0; i < nStat; i++ )
301  {
302  px = minX+dX*G4UniformRand();
303  py = minY+dY*G4UniformRand();
304  pz = minZ+dZ*G4UniformRand();
305  p = G4ThreeVector(px,py,pz);
306  in = this->Inside(p);
307  if(in != kOutside)
308  {
309  if (DistanceToOut(p)<ell) { inside++; }
310  }
311  else if(DistanceToIn(p)<ell) { inside++; }
312  }
313  // @@ The conformal correction can be upgraded
314  surf = dX*dY*dZ*inside/dd/nStat;
315  return surf;
316 }
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const =0
CLHEP::Hep3Vector G4ThreeVector
const char * p
Definition: xmltok.h:285
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:97
virtual EInside Inside(const G4ThreeVector &p) const =0
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
EInside
Definition: geomdefs.hh:58
double G4double
Definition: G4Types.hh:76
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0

Here is the call graph for this function:

Here is the caller graph for this function:

void G4VSolid::Extent ( G4ThreeVector pMin,
G4ThreeVector pMax 
) const
virtual

Reimplemented in G4Trap, G4TessellatedSolid, G4Sphere, G4Torus, G4ExtrudedSolid, G4Cons, G4Tubs, G4GenericTrap, G4Para, G4Trd, G4EllipticalCone, G4Polyhedra, G4Polycone, G4Paraboloid, G4TwistedTubs, G4OTubs, G4GenericPolycone, G4IntersectionSolid, G4SubtractionSolid, G4Ellipsoid, G4UnionSolid, G4Orb, G4Hype, G4Tet, G4VTwistedFaceted, G4CutTubs, G4DisplacedSolid, G4Box, G4EllipticalTube, G4ReflectedSolid, and G4ScaledSolid.

Definition at line 626 of file G4VSolid.cc.

627 {
628  std::ostringstream message;
629  message << "Not implemented for solid: "
630  << GetEntityType() << " !"
631  << "\nReturning infinite boundinx box.";
632  G4Exception("G4VSolid::Extent()", "GeomMgt1001", JustWarning, message);
633 
634  pMin.set(-kInfinity,-kInfinity,-kInfinity);
635  pMax.set( kInfinity, kInfinity, kInfinity);
636 }
void set(double x, double y, double z)
static const G4double kInfinity
Definition: geomdefs.hh:42
virtual G4GeometryType GetEntityType() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41

Here is the call graph for this function:

Here is the caller graph for this function:

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

Reimplemented in G4BooleanSolid.

Definition at line 168 of file G4VSolid.cc.

169 { return 0; }

Here is the caller graph for this function:

G4VSolid * G4VSolid::GetConstituentSolid ( G4int  no)
virtual

Reimplemented in G4BooleanSolid.

Definition at line 171 of file G4VSolid.cc.

172 { return 0; }
G4double G4VSolid::GetCubicVolume ( )
virtual

Reimplemented in G4Trap, G4TessellatedSolid, G4TwistedTubs, G4GenericTrap, G4Sphere, G4Torus, G4Cons, G4Tubs, G4Hype, G4Para, G4VTwistedFaceted, G4EllipticalCone, G4Tet, G4Trd, G4VCSGfaceted, G4Box, G4EllipticalTube, G4Paraboloid, G4OTubs, G4Ellipsoid, G4Orb, G4BooleanSolid, and G4CutTubs.

Definition at line 189 of file G4VSolid.cc.

190 {
191  G4int cubVolStatistics = 1000000;
192  G4double cubVolEpsilon = 0.001;
193  return EstimateCubicVolume(cubVolStatistics, cubVolEpsilon);
194 }
G4double EstimateCubicVolume(G4int nStat, G4double epsilon) const
Definition: G4VSolid.cc:204
int G4int
Definition: G4Types.hh:78
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

const G4DisplacedSolid * G4VSolid::GetDisplacedSolidPtr ( ) const
virtual

Reimplemented in G4DisplacedSolid.

Definition at line 174 of file G4VSolid.cc.

175 { return 0; }
G4DisplacedSolid * G4VSolid::GetDisplacedSolidPtr ( )
virtual

Reimplemented in G4DisplacedSolid.

Definition at line 177 of file G4VSolid.cc.

178 { return 0; }
G4VisExtent G4VSolid::GetExtent ( ) const
virtual

Reimplemented in G4TessellatedSolid, G4Sphere, G4TwistedTubs, G4EllipticalCone, G4GenericTrap, G4VTwistedFaceted, G4Hype, G4Tet, G4Box, G4Ellipsoid, G4EllipticalTube, and G4VCSGfaceted.

Definition at line 642 of file G4VSolid.cc.

643 {
644  G4VisExtent extent;
645  G4VoxelLimits voxelLimits; // Defaults to "infinite" limits.
646  G4AffineTransform affineTransform;
647  G4double vmin, vmax;
648  CalculateExtent(kXAxis,voxelLimits,affineTransform,vmin,vmax);
649  extent.SetXmin (vmin);
650  extent.SetXmax (vmax);
651  CalculateExtent(kYAxis,voxelLimits,affineTransform,vmin,vmax);
652  extent.SetYmin (vmin);
653  extent.SetYmax (vmax);
654  CalculateExtent(kZAxis,voxelLimits,affineTransform,vmin,vmax);
655  extent.SetZmin (vmin);
656  extent.SetZmax (vmax);
657  return extent;
658 }
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const =0
void SetXmax(G4double xmax)
Definition: G4VisExtent.hh:102
void SetYmax(G4double ymax)
Definition: G4VisExtent.hh:106
void SetZmin(G4double zmin)
Definition: G4VisExtent.hh:108
void SetZmax(G4double zmax)
Definition: G4VisExtent.hh:110
void SetXmin(G4double xmin)
Definition: G4VisExtent.hh:100
double G4double
Definition: G4Types.hh:76
void SetYmin(G4double ymin)
Definition: G4VisExtent.hh:104

Here is the call graph for this function:

Here is the caller graph for this function:

G4String G4VSolid::GetName ( ) const
inline
G4ThreeVector G4VSolid::GetPointOnSurface ( ) const
virtual

Reimplemented in G4Trap, G4TwistedTubs, G4TessellatedSolid, G4Sphere, G4Cons, G4Torus, G4Tubs, G4Trd, G4Para, G4EllipticalCone, G4GenericTrap, G4Paraboloid, G4Polyhedra, G4Hype, G4Polycone, G4Tet, G4Orb, G4Ellipsoid, G4OTubs, G4Box, G4DisplacedSolid, G4VTwistedFaceted, G4CutTubs, G4EllipticalTube, G4BooleanSolid, G4GenericPolycone, G4ReflectedSolid, and G4ScaledSolid.

Definition at line 153 of file G4VSolid.cc.

154 {
155  std::ostringstream message;
156  message << "Not implemented for solid: "
157  << this->GetEntityType() << " !" << G4endl
158  << "Returning origin.";
159  G4Exception("G4VSolid::GetPointOnSurface()", "GeomMgt1001",
160  JustWarning, message);
161  return G4ThreeVector(0,0,0);
162 }
CLHEP::Hep3Vector G4ThreeVector
virtual G4GeometryType GetEntityType() const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61

Here is the call graph for this function:

Here is the caller graph for this function:

G4Polyhedron * G4VSolid::GetPolyhedron ( ) const
virtual

Reimplemented in G4TessellatedSolid, G4DisplacedSolid, G4EllipticalCone, G4GenericTrap, G4Paraboloid, G4TwistedTubs, G4Hype, G4ReflectedSolid, G4Tet, G4ScaledSolid, G4Ellipsoid, G4VTwistedFaceted, G4EllipticalTube, G4VCSGfaceted, G4BooleanSolid, and G4CSGSolid.

Definition at line 665 of file G4VSolid.cc.

666 {
667  return 0;
668 }

Here is the caller graph for this function:

G4double G4VSolid::GetSurfaceArea ( )
virtual

Reimplemented in G4Trap, G4TessellatedSolid, G4TwistedTubs, G4GenericTrap, G4Sphere, G4Torus, G4Cons, G4Tubs, G4Hype, G4Para, G4VTwistedFaceted, G4EllipticalCone, G4Tet, G4Trd, G4VCSGfaceted, G4Box, G4EllipticalTube, G4Paraboloid, G4OTubs, G4Ellipsoid, G4Orb, G4BooleanSolid, and G4CutTubs.

Definition at line 251 of file G4VSolid.cc.

252 {
253  G4int stat = 1000000;
254  G4double ell = -1.;
255  return EstimateSurfaceArea(stat,ell);
256 }
int G4int
Definition: G4Types.hh:78
G4double EstimateSurfaceArea(G4int nStat, G4double ell) const
Definition: G4VSolid.cc:264
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

Here is the caller graph for this function:

G4double G4VSolid::GetTolerance ( ) const
inline

Here is the caller graph for this function:

G4VSolid & G4VSolid::operator= ( const G4VSolid rhs)

Definition at line 111 of file G4VSolid.cc.

112 {
113  // Check assignment to self
114  //
115  if (this == &rhs) { return *this; }
116 
117  // Copy data
118  //
120  fshapeName = rhs.fshapeName;
121 
122  return *this;
123 }
G4double kCarTolerance
Definition: G4VSolid.hh:307

Here is the caller graph for this function:

G4bool G4VSolid::operator== ( const G4VSolid s) const
inline
void G4VSolid::SetName ( const G4String name)
inline

Here is the caller graph for this function:

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const G4VSolid e 
)
friend

Definition at line 129 of file G4VSolid.cc.

130 {
131  return e.StreamInfo(os);
132 }
virtual std::ostream & StreamInfo(std::ostream &os) const =0

Member Data Documentation

G4double G4VSolid::kCarTolerance
protected

Definition at line 307 of file G4VSolid.hh.


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