Geant4  10.02.p03
G4ReflectedSolid Class Reference

#include <G4ReflectedSolid.hh>

Inheritance diagram for G4ReflectedSolid:
Collaboration diagram for G4ReflectedSolid:

Public Member Functions

 G4ReflectedSolid (const G4String &pName, G4VSolid *pSolid, const G4Transform3D &transform)
 
virtual ~G4ReflectedSolid ()
 
EInside Inside (const G4ThreeVector &p) const
 
G4bool CalculateExtent (const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const
 
G4ThreeVector SurfaceNormal (const G4ThreeVector &p) const
 
G4double DistanceToIn (const G4ThreeVector &p, const G4ThreeVector &v) const
 
G4double DistanceToIn (const G4ThreeVector &p) const
 
G4double DistanceToOut (const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const
 
G4double DistanceToOut (const G4ThreeVector &p) const
 
void ComputeDimensions (G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
 
G4ThreeVector GetPointOnSurface () const
 
G4VSolidClone () const
 
virtual G4GeometryType GetEntityType () const
 
virtual const G4ReflectedSolidGetReflectedSolidPtr () const
 
virtual G4ReflectedSolidGetReflectedSolidPtr ()
 
G4VSolidGetConstituentMovedSolid () const
 
G4Transform3D GetTransform3D () const
 
void SetTransform3D (G4Transform3D &)
 
G4Transform3D GetDirectTransform3D () const
 
void SetDirectTransform3D (G4Transform3D &)
 
std::ostream & StreamInfo (std::ostream &os) const
 
 G4ReflectedSolid (const G4ReflectedSolid &rhs)
 
G4ReflectedSolidoperator= (const G4ReflectedSolid &rhs)
 
void DescribeYourselfTo (G4VGraphicsScene &scene) const
 
G4PolyhedronCreatePolyhedron () const
 
G4PolyhedronGetPolyhedron () const
 
- Public Member Functions inherited from G4VSolid
 G4VSolid (const G4String &name)
 
virtual ~G4VSolid ()
 
G4bool operator== (const G4VSolid &s) const
 
G4String GetName () const
 
void SetName (const G4String &name)
 
G4double GetTolerance () const
 
virtual G4double GetCubicVolume ()
 
virtual G4double GetSurfaceArea ()
 
void DumpInfo () const
 
virtual G4VisExtent GetExtent () 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

G4AffineTransform GetTransform () const
 
void SetTransform (G4AffineTransform &)
 
G4AffineTransform GetDirectTransform () const
 
void SetDirectTransform (G4AffineTransform &)
 
G4RotationMatrix GetFrameRotation () const
 
void SetFrameRotation (const G4RotationMatrix &)
 
G4ThreeVector GetFrameTranslation () const
 
void SetFrameTranslation (const G4ThreeVector &)
 
G4RotationMatrix GetObjectRotation () const
 
void SetObjectRotation (const G4RotationMatrix &)
 
G4ThreeVector GetObjectTranslation () const
 
void SetObjectTranslation (const G4ThreeVector &)
 
- Protected Member Functions inherited from G4VSolid
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

G4VSolidfPtrSolid
 
G4AffineTransformfPtrTransform
 
G4AffineTransformfDirectTransform
 
G4Transform3DfPtrTransform3D
 
G4Transform3DfDirectTransform3D
 
G4PolyhedronfpPolyhedron
 
- Protected Attributes inherited from G4VSolid
G4double kCarTolerance
 

Detailed Description

Definition at line 51 of file G4ReflectedSolid.hh.

Constructor & Destructor Documentation

◆ G4ReflectedSolid() [1/2]

G4ReflectedSolid::G4ReflectedSolid ( const G4String pName,
G4VSolid pSolid,
const G4Transform3D transform 
)

Definition at line 56 of file G4ReflectedSolid.cc.

59  : G4VSolid(pName), fpPolyhedron(0)
60 {
61  fPtrSolid = pSolid ;
62  G4RotationMatrix rotMatrix ;
63 
65  new G4AffineTransform(rotMatrix, transform.getTranslation()) ;
67  new G4AffineTransform(rotMatrix, transform.getTranslation()) ;
68  fPtrTransform->Invert() ;
69 
70  fDirectTransform3D = new G4Transform3D(transform) ;
71  fPtrTransform3D = new G4Transform3D(transform.inverse()) ;
72 }
CLHEP::Hep3Vector getTranslation() const
G4Transform3D * fDirectTransform3D
G4AffineTransform * fDirectTransform
G4AffineTransform & Invert()
G4Transform3D * fPtrTransform3D
HepGeom::Transform3D G4Transform3D
G4AffineTransform * fPtrTransform
G4Polyhedron * fpPolyhedron
G4VSolid(const G4String &name)
Definition: G4VSolid.cc:60
Transform3D inverse() const
Definition: Transform3D.cc:142
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~G4ReflectedSolid()

G4ReflectedSolid::~G4ReflectedSolid ( )
virtual

Definition at line 77 of file G4ReflectedSolid.cc.

78 {
79  if(fPtrTransform)
80  {
81  delete fPtrTransform; fPtrTransform=0;
83  }
84  if(fPtrTransform3D)
85  {
88  }
89  delete fpPolyhedron;
90 }
G4Transform3D * fDirectTransform3D
G4AffineTransform * fDirectTransform
G4Transform3D * fPtrTransform3D
G4AffineTransform * fPtrTransform
G4Polyhedron * fpPolyhedron

◆ G4ReflectedSolid() [2/2]

G4ReflectedSolid::G4ReflectedSolid ( const G4ReflectedSolid rhs)

Definition at line 95 of file G4ReflectedSolid.cc.

96  : G4VSolid(rhs), fPtrSolid(rhs.fPtrSolid), fpPolyhedron(0)
97 {
102 }
G4Transform3D * fDirectTransform3D
G4AffineTransform * fDirectTransform
G4Transform3D * fPtrTransform3D
HepGeom::Transform3D G4Transform3D
G4AffineTransform * fPtrTransform
G4Polyhedron * fpPolyhedron
G4VSolid(const G4String &name)
Definition: G4VSolid.cc:60

Member Function Documentation

◆ CalculateExtent()

G4bool G4ReflectedSolid::CalculateExtent ( const EAxis  pAxis,
const G4VoxelLimits pVoxelLimit,
const G4AffineTransform pTransform,
G4double pMin,
G4double pMax 
) const
virtual

Implements G4VSolid.

Definition at line 266 of file G4ReflectedSolid.cc.

271 {
272 
273  G4VoxelLimits unLimit;
274  G4AffineTransform unTransform;
275 
277  y1 = -kInfinity, y2 = kInfinity,
278  z1 = -kInfinity, z2 = kInfinity;
279 
280  G4bool existsAfterClip = false ;
281  existsAfterClip =
282  fPtrSolid->CalculateExtent(kXAxis,unLimit,unTransform,x1,x2);
283  existsAfterClip =
284  fPtrSolid->CalculateExtent(kYAxis,unLimit,unTransform,y1,y2);
285  existsAfterClip =
286  fPtrSolid->CalculateExtent(kZAxis,unLimit,unTransform,z1,z2);
287 
288  existsAfterClip = false;
289  pMin = +kInfinity ;
290  pMax = -kInfinity ;
291 
292  G4Transform3D pTransform3D = G4Transform3D(pTransform.NetRotation().inverse(),
293  pTransform.NetTranslation());
294 
295  G4Transform3D transform3D = pTransform3D*(*fDirectTransform3D);
296 
297  G4Point3D tmpPoint;
298 
299  // Calculate rotated vertex coordinates
300 
301  G4ThreeVectorList* vertices = new G4ThreeVectorList();
302 
303  if (vertices)
304  {
305  vertices->reserve(8);
306 
307  G4ThreeVector vertex0(x1,y1,z1) ;
308  tmpPoint = transform3D*G4Point3D(vertex0);
309  vertex0 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
310  vertices->push_back(vertex0);
311 
312  G4ThreeVector vertex1(x2,y1,z1) ;
313  tmpPoint = transform3D*G4Point3D(vertex1);
314  vertex1 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
315  vertices->push_back(vertex1);
316 
317  G4ThreeVector vertex2(x2,y2,z1) ;
318  tmpPoint = transform3D*G4Point3D(vertex2);
319  vertex2 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
320  vertices->push_back(vertex2);
321 
322  G4ThreeVector vertex3(x1,y2,z1) ;
323  tmpPoint = transform3D*G4Point3D(vertex3);
324  vertex3 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
325  vertices->push_back(vertex3);
326 
327  G4ThreeVector vertex4(x1,y1,z2) ;
328  tmpPoint = transform3D*G4Point3D(vertex4);
329  vertex4 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
330  vertices->push_back(vertex4);
331 
332  G4ThreeVector vertex5(x2,y1,z2) ;
333  tmpPoint = transform3D*G4Point3D(vertex5);
334  vertex5 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
335  vertices->push_back(vertex5);
336 
337  G4ThreeVector vertex6(x2,y2,z2) ;
338  tmpPoint = transform3D*G4Point3D(vertex6);
339  vertex6 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
340  vertices->push_back(vertex6);
341 
342  G4ThreeVector vertex7(x1,y2,z2) ;
343  tmpPoint = transform3D*G4Point3D(vertex7);
344  vertex7 = G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
345  vertices->push_back(vertex7);
346  }
347  else
348  {
349  DumpInfo();
350  G4Exception("G4ReflectedSolid::CalculateExtent()",
351  "GeomMgt0003", FatalException,
352  "Error in allocation of vertices. Out of memory !");
353  }
354 
355  ClipCrossSection(vertices,0,pVoxelLimit,pAxis,pMin,pMax) ;
356  ClipCrossSection(vertices,4,pVoxelLimit,pAxis,pMin,pMax) ;
357  ClipBetweenSections(vertices,0,pVoxelLimit,pAxis,pMin,pMax) ;
358 
359  if (pVoxelLimit.IsLimited(pAxis) == false)
360  {
361  if ( pMin != kInfinity || pMax != -kInfinity )
362  {
363  existsAfterClip = true ;
364 
365  // Add 2*tolerance to avoid precision troubles
366 
367  pMin -= kCarTolerance;
368  pMax += kCarTolerance;
369  }
370  }
371  else
372  {
373  G4ThreeVector clipCentre(
374  ( pVoxelLimit.GetMinXExtent()+pVoxelLimit.GetMaxXExtent())*0.5,
375  ( pVoxelLimit.GetMinYExtent()+pVoxelLimit.GetMaxYExtent())*0.5,
376  ( pVoxelLimit.GetMinZExtent()+pVoxelLimit.GetMaxZExtent())*0.5);
377 
378  if ( pMin != kInfinity || pMax != -kInfinity )
379  {
380  existsAfterClip = true ;
381 
382 
383  // Check to see if endpoints are in the solid
384 
385  clipCentre(pAxis) = pVoxelLimit.GetMinExtent(pAxis);
386 
387  if (Inside(transform3D.inverse()*G4Point3D(clipCentre)) != kOutside)
388  {
389  pMin = pVoxelLimit.GetMinExtent(pAxis);
390  }
391  else
392  {
393  pMin -= kCarTolerance;
394  }
395  clipCentre(pAxis) = pVoxelLimit.GetMaxExtent(pAxis);
396 
397  if (Inside(transform3D.inverse()*G4Point3D(clipCentre)) != kOutside)
398  {
399  pMax = pVoxelLimit.GetMaxExtent(pAxis);
400  }
401  else
402  {
403  pMax += kCarTolerance;
404  }
405  }
406  // Check for case where completely enveloping clipping volume
407  // If point inside then we are confident that the solid completely
408  // envelopes the clipping volume. Hence set min/max extents according
409  // to clipping volume extents along the specified axis.
410 
411  else if (Inside(transform3D.inverse()*G4Point3D(clipCentre)) != kOutside)
412  {
413  existsAfterClip = true ;
414  pMin = pVoxelLimit.GetMinExtent(pAxis) ;
415  pMax = pVoxelLimit.GetMaxExtent(pAxis) ;
416  }
417  }
418  delete vertices;
419  return existsAfterClip;
420 }
Double_t y2[nxs]
void ClipBetweenSections(G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
Definition: G4VSolid.cc:378
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const =0
G4double GetMinXExtent() const
Double_t y1[nxs]
static const G4double kInfinity
Definition: geomdefs.hh:42
Double_t x2[nxs]
G4double GetMinYExtent() const
CLHEP::Hep3Vector G4ThreeVector
G4double GetMinZExtent() const
G4bool IsLimited() const
void ClipCrossSection(G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
Definition: G4VSolid.cc:347
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
EInside Inside(const G4ThreeVector &p) const
G4double GetMaxZExtent() const
void DumpInfo() const
G4double GetMaxXExtent() const
G4RotationMatrix NetRotation() const
G4ThreeVector NetTranslation() const
bool G4bool
Definition: G4Types.hh:79
Double_t x1[nxs]
std::vector< G4ThreeVector > G4ThreeVectorList
Definition: G4VSolid.hh:79
HepGeom::Transform3D G4Transform3D
G4double GetMinExtent(const EAxis pAxis) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4double GetMaxExtent(const EAxis pAxis) const
G4double kCarTolerance
Definition: G4VSolid.hh:304
HepRotation inverse() const
double G4double
Definition: G4Types.hh:76
G4double GetMaxYExtent() const
Here is the call graph for this function:

◆ Clone()

G4VSolid * G4ReflectedSolid::Clone ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 559 of file G4ReflectedSolid.cc.

560 {
561  return new G4ReflectedSolid(*this);
562 }
G4ReflectedSolid(const G4String &pName, G4VSolid *pSolid, const G4Transform3D &transform)
Here is the call graph for this function:

◆ ComputeDimensions()

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

Reimplemented from G4VSolid.

Definition at line 532 of file G4ReflectedSolid.cc.

535 {
536  DumpInfo();
537  G4Exception("G4ReflectedSolid::ComputeDimensions()",
538  "GeomMgt0001", FatalException,
539  "Method not applicable in this context!");
540 }
void DumpInfo() const
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:

◆ CreatePolyhedron()

G4Polyhedron * G4ReflectedSolid::CreatePolyhedron ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 606 of file G4ReflectedSolid.cc.

607 {
608  G4Polyhedron* polyhedron = fPtrSolid->CreatePolyhedron();
609  if (polyhedron)
610  {
611  polyhedron->Transform(*fDirectTransform3D);
612  return polyhedron;
613  }
614  else
615  {
616  std::ostringstream message;
617  message << "Solid - " << GetName()
618  << " - original solid has no" << G4endl
619  << "corresponding polyhedron. Returning NULL!";
620  G4Exception("G4ReflectedSolid::CreatePolyhedron()",
621  "GeomMgt1001", JustWarning, message);
622  return 0;
623  }
624 }
HepPolyhedron & Transform(const G4Transform3D &t)
G4Transform3D * fDirectTransform3D
G4String GetName() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
virtual G4Polyhedron * CreatePolyhedron() const
Definition: G4VSolid.cc:639
Here is the call graph for this function:
Here is the caller graph for this function:

◆ DescribeYourselfTo()

void G4ReflectedSolid::DescribeYourselfTo ( G4VGraphicsScene scene) const
virtual

Implements G4VSolid.

Definition at line 596 of file G4ReflectedSolid.cc.

597 {
598  scene.AddSolid (*this);
599 }
virtual void AddSolid(const G4Box &)=0
Here is the call graph for this function:

◆ DistanceToIn() [1/2]

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

Implements G4VSolid.

Definition at line 460 of file G4ReflectedSolid.cc.

462 {
463  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p) ;
464  G4Point3D newDirection = (*fDirectTransform3D)*G4Point3D(v) ;
465  newDirection.unit() ;
466  return fPtrSolid->DistanceToIn(
467  G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z()),
468  G4ThreeVector(newDirection.x(),newDirection.y(),newDirection.z())) ;
469 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
BasicVector3D< T > unit() const
Here is the call graph for this function:

◆ DistanceToIn() [2/2]

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

Implements G4VSolid.

Definition at line 477 of file G4ReflectedSolid.cc.

478 {
479  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p) ;
480  return fPtrSolid->DistanceToIn(
481  G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z())) ;
482 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
Here is the call graph for this function:

◆ DistanceToOut() [1/2]

G4double G4ReflectedSolid::DistanceToOut ( const G4ThreeVector p,
const G4ThreeVector v,
const G4bool  calcNorm = false,
G4bool validNorm = 0,
G4ThreeVector n = 0 
) const
virtual

Implements G4VSolid.

Definition at line 489 of file G4ReflectedSolid.cc.

494 {
495  G4ThreeVector solNorm ;
496 
497  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p) ;
498  G4Point3D newDirection = (*fDirectTransform3D)*G4Point3D(v);
499  newDirection.unit() ;
500 
501  G4double dist =
503  G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z()),
504  G4ThreeVector(newDirection.x(),newDirection.y(),newDirection.z()),
505  calcNorm, validNorm, &solNorm) ;
506  if(calcNorm)
507  {
508  G4Point3D newN = (*fDirectTransform3D)*G4Point3D(solNorm);
509  newN.unit() ;
510  *n = G4ThreeVector(newN.x(),newN.y(),newN.z());
511  }
512  return dist ;
513 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
double G4double
Definition: G4Types.hh:76
BasicVector3D< T > unit() const
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:

◆ DistanceToOut() [2/2]

G4double G4ReflectedSolid::DistanceToOut ( const G4ThreeVector p) const
virtual

Implements G4VSolid.

Definition at line 520 of file G4ReflectedSolid.cc.

521 {
522  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p);
523  return fPtrSolid->DistanceToOut(
524  G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z()));
525 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
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:

◆ GetConstituentMovedSolid()

G4VSolid * G4ReflectedSolid::GetConstituentMovedSolid ( ) const

Definition at line 150 of file G4ReflectedSolid.cc.

151 {
152  return fPtrSolid;
153 }
Here is the caller graph for this function:

◆ GetDirectTransform()

G4AffineTransform G4ReflectedSolid::GetDirectTransform ( ) const
protected

Definition at line 171 of file G4ReflectedSolid.cc.

172 {
173  G4AffineTransform aTransform= *fDirectTransform;
174  return aTransform;
175 }
G4AffineTransform * fDirectTransform

◆ GetDirectTransform3D()

G4Transform3D G4ReflectedSolid::GetDirectTransform3D ( ) const

Definition at line 199 of file G4ReflectedSolid.cc.

200 {
201  G4Transform3D aTransform= *fDirectTransform3D;
202  return aTransform;
203 }
G4Transform3D * fDirectTransform3D

◆ GetEntityType()

G4GeometryType G4ReflectedSolid::GetEntityType ( ) const
virtual

Implements G4VSolid.

Definition at line 135 of file G4ReflectedSolid.cc.

136 {
137  return G4String("G4ReflectedSolid");
138 }
Here is the caller graph for this function:

◆ GetFrameRotation()

G4RotationMatrix G4ReflectedSolid::GetFrameRotation ( ) const
protected

Definition at line 213 of file G4ReflectedSolid.cc.

214 {
216  return InvRotation;
217 }
G4AffineTransform * fDirectTransform
G4RotationMatrix NetRotation() const
Here is the call graph for this function:

◆ GetFrameTranslation()

G4ThreeVector G4ReflectedSolid::GetFrameTranslation ( ) const
protected

Definition at line 226 of file G4ReflectedSolid.cc.

227 {
228  return fPtrTransform->NetTranslation();
229 }
G4ThreeVector NetTranslation() const
G4AffineTransform * fPtrTransform
Here is the call graph for this function:

◆ GetObjectRotation()

G4RotationMatrix G4ReflectedSolid::GetObjectRotation ( ) const
protected

Definition at line 238 of file G4ReflectedSolid.cc.

239 {
241  return Rotation;
242 }
G4RotationMatrix NetRotation() const
G4AffineTransform * fPtrTransform
Here is the call graph for this function:

◆ GetObjectTranslation()

G4ThreeVector G4ReflectedSolid::GetObjectTranslation ( ) const
protected

Definition at line 251 of file G4ReflectedSolid.cc.

252 {
254 }
G4AffineTransform * fDirectTransform
G4ThreeVector NetTranslation() const
Here is the call graph for this function:

◆ GetPointOnSurface()

G4ThreeVector G4ReflectedSolid::GetPointOnSurface ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 547 of file G4ReflectedSolid.cc.

548 {
550  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p);
551 
552  return G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z());
553 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
virtual G4ThreeVector GetPointOnSurface() const
Definition: G4VSolid.cc:152
Here is the call graph for this function:

◆ GetPolyhedron()

G4Polyhedron * G4ReflectedSolid::GetPolyhedron ( ) const
virtual

Reimplemented from G4VSolid.

Definition at line 631 of file G4ReflectedSolid.cc.

632 {
633  if (!fpPolyhedron ||
636  {
637  delete fpPolyhedron;
639  }
640  return fpPolyhedron;
641 }
G4int GetNumberOfRotationStepsAtTimeOfCreation() const
G4Polyhedron * CreatePolyhedron() const
static G4int GetNumberOfRotationSteps()
G4Polyhedron * fpPolyhedron
Here is the call graph for this function:

◆ GetReflectedSolidPtr() [1/2]

const G4ReflectedSolid * G4ReflectedSolid::GetReflectedSolidPtr ( ) const
virtual

Definition at line 140 of file G4ReflectedSolid.cc.

141 {
142  return this;
143 }

◆ GetReflectedSolidPtr() [2/2]

G4ReflectedSolid * G4ReflectedSolid::GetReflectedSolidPtr ( )
virtual

Definition at line 145 of file G4ReflectedSolid.cc.

146 {
147  return this;
148 }

◆ GetTransform()

G4AffineTransform G4ReflectedSolid::GetTransform ( ) const
protected

Definition at line 157 of file G4ReflectedSolid.cc.

158 {
159  G4AffineTransform aTransform = *fPtrTransform;
160  return aTransform;
161 }
G4AffineTransform * fPtrTransform

◆ GetTransform3D()

G4Transform3D G4ReflectedSolid::GetTransform3D ( ) const

Definition at line 185 of file G4ReflectedSolid.cc.

186 {
187  G4Transform3D aTransform = *fPtrTransform3D;
188  return aTransform;
189 }
G4Transform3D * fPtrTransform3D

◆ Inside()

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

Implements G4VSolid.

Definition at line 426 of file G4ReflectedSolid.cc.

427 {
428 
429  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p) ;
430  // G4Point3D newPoint = (*fPtrTransform3D)*G4Point3D(p) ;
431 
432  return fPtrSolid->Inside(G4ThreeVector(newPoint.x(),
433  newPoint.y(),
434  newPoint.z())) ;
435 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
virtual EInside Inside(const G4ThreeVector &p) const =0
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

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

Definition at line 107 of file G4ReflectedSolid.cc.

108 {
109  // Check assignment to self
110  //
111  if (this == &rhs) { return *this; }
112 
113  // Copy base class data
114  //
115  G4VSolid::operator=(rhs);
116 
117  // Copy data
118  //
120  delete fPtrTransform;
122  delete fDirectTransform;
124  delete fPtrTransform3D;
126  delete fDirectTransform3D;
128 
129  return *this;
130 }
G4Transform3D * fDirectTransform3D
G4AffineTransform * fDirectTransform
G4Transform3D * fPtrTransform3D
HepGeom::Transform3D G4Transform3D
G4AffineTransform * fPtrTransform
G4Polyhedron * fpPolyhedron
G4VSolid & operator=(const G4VSolid &rhs)
Definition: G4VSolid.cc:110
Here is the call graph for this function:

◆ SetDirectTransform()

void G4ReflectedSolid::SetDirectTransform ( G4AffineTransform transform)
protected

Definition at line 177 of file G4ReflectedSolid.cc.

178 {
179  fDirectTransform = &transform ;
180  fpPolyhedron = 0;
181 }
G4AffineTransform * fDirectTransform
G4Polyhedron * fpPolyhedron

◆ SetDirectTransform3D()

void G4ReflectedSolid::SetDirectTransform3D ( G4Transform3D transform)

Definition at line 205 of file G4ReflectedSolid.cc.

206 {
207  fDirectTransform3D = &transform ;
208  fpPolyhedron = 0;
209 }
G4Transform3D * fDirectTransform3D
G4Polyhedron * fpPolyhedron

◆ SetFrameRotation()

void G4ReflectedSolid::SetFrameRotation ( const G4RotationMatrix matrix)
protected

Definition at line 219 of file G4ReflectedSolid.cc.

220 {
222 }
G4AffineTransform * fDirectTransform
void SetNetRotation(const G4RotationMatrix &rot)
Here is the call graph for this function:

◆ SetFrameTranslation()

void G4ReflectedSolid::SetFrameTranslation ( const G4ThreeVector vector)
protected

Definition at line 231 of file G4ReflectedSolid.cc.

232 {
234 }
void SetNetTranslation(const G4ThreeVector &tlate)
G4AffineTransform * fPtrTransform
Here is the call graph for this function:

◆ SetObjectRotation()

void G4ReflectedSolid::SetObjectRotation ( const G4RotationMatrix matrix)
protected

Definition at line 244 of file G4ReflectedSolid.cc.

245 {
246  fPtrTransform->SetNetRotation(matrix);
247 }
void SetNetRotation(const G4RotationMatrix &rot)
G4AffineTransform * fPtrTransform
Here is the call graph for this function:

◆ SetObjectTranslation()

void G4ReflectedSolid::SetObjectTranslation ( const G4ThreeVector vector)
protected

Definition at line 256 of file G4ReflectedSolid.cc.

257 {
259 }
G4AffineTransform * fDirectTransform
void SetNetTranslation(const G4ThreeVector &tlate)
Here is the call graph for this function:

◆ SetTransform()

void G4ReflectedSolid::SetTransform ( G4AffineTransform transform)
protected

Definition at line 163 of file G4ReflectedSolid.cc.

164 {
165  fPtrTransform = &transform ;
166  fpPolyhedron = 0;
167 }
G4AffineTransform * fPtrTransform
G4Polyhedron * fpPolyhedron

◆ SetTransform3D()

void G4ReflectedSolid::SetTransform3D ( G4Transform3D transform)

Definition at line 191 of file G4ReflectedSolid.cc.

192 {
193  fPtrTransform3D = &transform ;
194  fpPolyhedron = 0;
195 }
G4Transform3D * fPtrTransform3D
G4Polyhedron * fpPolyhedron

◆ StreamInfo()

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

Implements G4VSolid.

Definition at line 569 of file G4ReflectedSolid.cc.

570 {
571  os << "-----------------------------------------------------------\n"
572  << " *** Dump for Reflected solid - " << GetName() << " ***\n"
573  << " ===================================================\n"
574  << " Solid type: " << GetEntityType() << "\n"
575  << " Parameters of constituent solid: \n"
576  << "===========================================================\n";
577  fPtrSolid->StreamInfo(os);
578  os << "===========================================================\n"
579  << " Transformations: \n"
580  << " Direct transformation - translation : \n"
581  << " " << fDirectTransform->NetTranslation() << "\n"
582  << " - rotation : \n"
583  << " ";
585  os << "\n"
586  << "===========================================================\n";
587 
588  return os;
589 }
G4String GetName() const
G4AffineTransform * fDirectTransform
virtual std::ostream & StreamInfo(std::ostream &os) const =0
G4RotationMatrix NetRotation() const
G4ThreeVector NetTranslation() const
virtual G4GeometryType GetEntityType() const
std::ostream & print(std::ostream &os) const
Definition: RotationIO.cc:21
Here is the call graph for this function:

◆ SurfaceNormal()

G4ThreeVector G4ReflectedSolid::SurfaceNormal ( const G4ThreeVector p) const
virtual

Implements G4VSolid.

Definition at line 442 of file G4ReflectedSolid.cc.

443 {
444  G4Point3D newPoint = (*fDirectTransform3D)*G4Point3D(p) ;
447  newPoint.y(),
448  newPoint.z() ) ) ;
449  G4Point3D newN = (*fDirectTransform3D)*G4Point3D(normal) ;
450  newN.unit() ;
451 
452  return G4ThreeVector(newN.x(),newN.y(),newN.z()) ;
453 }
CLHEP::Hep3Vector G4ThreeVector
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
static double normal(HepRandomEngine *eptr)
Definition: RandPoisson.cc:77
virtual G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const =0
BasicVector3D< T > unit() const
Here is the call graph for this function:

Member Data Documentation

◆ fDirectTransform

G4AffineTransform* G4ReflectedSolid::fDirectTransform
protected

Definition at line 148 of file G4ReflectedSolid.hh.

◆ fDirectTransform3D

G4Transform3D* G4ReflectedSolid::fDirectTransform3D
protected

Definition at line 151 of file G4ReflectedSolid.hh.

◆ fpPolyhedron

G4Polyhedron* G4ReflectedSolid::fpPolyhedron
mutableprotected

Definition at line 153 of file G4ReflectedSolid.hh.

◆ fPtrSolid

G4VSolid* G4ReflectedSolid::fPtrSolid
protected

Definition at line 146 of file G4ReflectedSolid.hh.

◆ fPtrTransform

G4AffineTransform* G4ReflectedSolid::fPtrTransform
protected

Definition at line 147 of file G4ReflectedSolid.hh.

◆ fPtrTransform3D

G4Transform3D* G4ReflectedSolid::fPtrTransform3D
protected

Definition at line 150 of file G4ReflectedSolid.hh.


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