Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ScaledSolid.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4ScaledSolid
27//
28// Class description:
29//
30// A scaled solid is a solid that has been scaled in dimensions
31// in X, Y or Z, from its original description.
32
33// 27.10.15 G.Cosmo: created
34// --------------------------------------------------------------------
35#ifndef G4SCALEDSOLID_HH
36#define G4SCALEDSOLID_HH
37
38#include "G4VSolid.hh"
39#include "G4ThreeVector.hh"
40#include "G4Transform3D.hh"
41#include "G4AffineTransform.hh"
42
44
45class G4ScaledSolid : public G4VSolid
46{
47 public:
48
49 G4ScaledSolid( const G4String& pName,
50 G4VSolid* pSolid ,
51 const G4Scale3D& pScale );
52
53 virtual ~G4ScaledSolid();
54
55 EInside Inside( const G4ThreeVector& p ) const;
56
57 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const;
58
59 G4bool CalculateExtent(const EAxis pAxis,
60 const G4VoxelLimits& pVoxelLimit,
61 const G4AffineTransform& pTransform,
62 G4double& pMin, G4double& pMax) const;
63
65
67 const G4ThreeVector& v ) const;
68
69 G4double DistanceToIn( const G4ThreeVector& p) const;
70
72 const G4ThreeVector& v,
73 const G4bool calcNorm = false,
74 G4bool* validNorm = nullptr,
75 G4ThreeVector* n = nullptr ) const;
76
77 G4double DistanceToOut( const G4ThreeVector& p ) const;
78
80 const G4int n,
81 const G4VPhysicalVolume* pRep );
82
85
87
89
91 void SetScaleTransform(const G4Scale3D& scale);
92
94
96 G4VSolid* Clone() const;
97
98 std::ostream& StreamInfo(std::ostream& os) const;
99
100 G4ScaledSolid(__void__&);
101 // Fake default constructor for usage restricted to direct object
102 // persistency for clients requiring preallocation of memory for
103 // persistifiable objects.
104
105 G4ScaledSolid(const G4ScaledSolid& rhs);
107 // Copy constructor and assignment operator.
108
109 void DescribeYourselfTo ( G4VGraphicsScene& scene ) const;
111 G4Polyhedron* GetPolyhedron () const;
112 // For creating graphical representations (i.e. for visualisation).
113
114 private:
115
116 G4VSolid* fPtrSolid = nullptr;
117 G4ScaleTransform* fScale = nullptr;
118 G4double fCubicVolume = -1.0;
119 G4double fSurfaceArea = -1.0;
120 mutable G4bool fRebuildPolyhedron = false;
121 mutable G4Polyhedron* fpPolyhedron = nullptr;
122};
123
124#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4VSolid * GetUnscaledSolid() const
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pMin, G4double &pMax) const
G4double GetCubicVolume()
G4ScaledSolid & operator=(const G4ScaledSolid &rhs)
G4double GetSurfaceArea()
G4VSolid * Clone() const
G4Scale3D GetScaleTransform() const
std::ostream & StreamInfo(std::ostream &os) const
G4ThreeVector GetPointOnSurface() const
EInside Inside(const G4ThreeVector &p) const
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const
void SetScaleTransform(const G4Scale3D &scale)
G4Polyhedron * CreatePolyhedron() const
G4GeometryType GetEntityType() const
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const
virtual ~G4ScaledSolid()
G4Polyhedron * GetPolyhedron() const
void CleanTransformations()
void DescribeYourselfTo(G4VGraphicsScene &scene) const
EAxis
Definition: geomdefs.hh:54
EInside
Definition: geomdefs.hh:67