96 :
G4VSolid(rhs), fPtrSolid(rhs.fPtrSolid), fpPolyhedron(0)
111 if (
this == &rhs) {
return *
this; }
137 return G4String(
"G4ReflectedSolid");
280 G4bool existsAfterClip = false ;
288 existsAfterClip =
false;
295 G4Transform3D transform3D = pTransform3D*(*fDirectTransform3D);
305 vertices->reserve(8);
308 tmpPoint = transform3D*
G4Point3D(vertex0);
309 vertex0 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
310 vertices->push_back(vertex0);
313 tmpPoint = transform3D*
G4Point3D(vertex1);
314 vertex1 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
315 vertices->push_back(vertex1);
318 tmpPoint = transform3D*
G4Point3D(vertex2);
319 vertex2 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
320 vertices->push_back(vertex2);
323 tmpPoint = transform3D*
G4Point3D(vertex3);
324 vertex3 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
325 vertices->push_back(vertex3);
328 tmpPoint = transform3D*
G4Point3D(vertex4);
329 vertex4 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
330 vertices->push_back(vertex4);
333 tmpPoint = transform3D*
G4Point3D(vertex5);
334 vertex5 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
335 vertices->push_back(vertex5);
338 tmpPoint = transform3D*
G4Point3D(vertex6);
339 vertex6 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
340 vertices->push_back(vertex6);
343 tmpPoint = transform3D*
G4Point3D(vertex7);
344 vertex7 =
G4ThreeVector(tmpPoint.x(),tmpPoint.y(),tmpPoint.z());
345 vertices->push_back(vertex7);
352 "Error in allocation of vertices. Out of memory !");
359 if (pVoxelLimit.
IsLimited(pAxis) ==
false)
363 existsAfterClip = true ;
380 existsAfterClip = true ;
413 existsAfterClip = true ;
419 return existsAfterClip;
449 G4Point3D newN = (*fDirectTransform3D)*
G4Point3D(normal) ;
464 G4Point3D newDirection = (*fDirectTransform3D)*
G4Point3D(v) ;
465 newDirection.unit() ;
468 G4ThreeVector(newDirection.x(),newDirection.y(),newDirection.z())) ;
498 G4Point3D newDirection = (*fDirectTransform3D)*
G4Point3D(v);
499 newDirection.unit() ;
504 G4ThreeVector(newDirection.x(),newDirection.y(),newDirection.z()),
505 calcNorm, validNorm, &solNorm) ;
508 G4Point3D newN = (*fDirectTransform3D)*
G4Point3D(solNorm);
537 G4Exception(
"G4ReflectedSolid::ComputeDimensions()",
539 "Method not applicable in this context!");
552 return G4ThreeVector(newPoint.x(),newPoint.y(),newPoint.z());
571 os <<
"-----------------------------------------------------------\n"
572 <<
" *** Dump for Reflected solid - " <<
GetName() <<
" ***\n"
573 <<
" ===================================================\n"
575 <<
" Parameters of constituent solid: \n"
576 <<
"===========================================================\n";
578 os <<
"===========================================================\n"
579 <<
" Transformations: \n"
580 <<
" Direct transformation - translation : \n"
582 <<
" - rotation : \n"
586 <<
"===========================================================\n";
616 std::ostringstream message;
617 message <<
"Solid - " <<
GetName()
618 <<
" - original solid has no" <<
G4endl
619 <<
"corresponding polyhedron. Returning NULL!";
620 G4Exception(
"G4ReflectedSolid::CreatePolyhedron()",
void ClipCrossSection(G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
virtual G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const =0
G4ThreeVector GetObjectTranslation() const
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const
void SetTransform(G4AffineTransform &)
static const G4double kInfinity
G4double GetMinYExtent() const
void SetDirectTransform3D(G4Transform3D &)
G4RotationMatrix GetObjectRotation() const
CLHEP::Hep3Vector G4ThreeVector
std::ostream & StreamInfo(std::ostream &os) const
CLHEP::HepRotation G4RotationMatrix
G4RotationMatrix GetFrameRotation() const
G4Polyhedron * GetPolyhedron() const
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
EInside Inside(const G4ThreeVector &p) const
G4AffineTransform GetDirectTransform() const
HepGeom::Point3D< G4double > G4Point3D
void SetFrameTranslation(const G4ThreeVector &)
G4ReflectedSolid & operator=(const G4ReflectedSolid &rhs)
virtual void AddSolid(const G4Box &)=0
G4Transform3D * fDirectTransform3D
void SetObjectTranslation(const G4ThreeVector &)
static double normal(HepRandomEngine *eptr)
G4AffineTransform * fDirectTransform
void DescribeYourselfTo(G4VGraphicsScene &scene) const
G4Transform3D GetTransform3D() const
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
G4double GetMaxXExtent() const
G4double GetMinZExtent() const
virtual std::ostream & StreamInfo(std::ostream &os) const =0
void SetDirectTransform(G4AffineTransform &)
virtual ~G4ReflectedSolid()
virtual EInside Inside(const G4ThreeVector &p) const =0
void SetTransform3D(G4Transform3D &)
virtual G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const =0
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const
G4Transform3D * fPtrTransform3D
void SetFrameRotation(const G4RotationMatrix &)
std::vector< G4ThreeVector > G4ThreeVectorList
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
virtual G4Polyhedron * CreatePolyhedron() const
virtual G4GeometryType GetEntityType() const
G4VSolid * GetConstituentMovedSolid() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetMinXExtent() const
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const
G4double GetMaxZExtent() const
virtual G4ThreeVector GetPointOnSurface() const
G4AffineTransform * fPtrTransform
void SetObjectRotation(const G4RotationMatrix &)
G4Polyhedron * fpPolyhedron
G4ReflectedSolid(const G4String &pName, G4VSolid *pSolid, const G4Transform3D &transform)
G4double GetMaxYExtent() const
G4VSolid & operator=(const G4VSolid &rhs)
G4int GetNumberOfRotationStepsAtTimeOfCreation() const
G4AffineTransform GetTransform() const
G4Polyhedron * CreatePolyhedron() const
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
G4double GetMaxExtent(const EAxis pAxis) const
G4ThreeVector GetPointOnSurface() const
G4ThreeVector GetFrameTranslation() const
G4Transform3D GetDirectTransform3D() const
void ClipBetweenSections(G4ThreeVectorList *pVertices, const G4int pSectionIndex, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
G4double GetMinExtent(const EAxis pAxis) const
virtual const G4ReflectedSolid * GetReflectedSolidPtr() const