ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ScaledSolid.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ScaledSolid.hh
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 
43 class G4ScaleTransform;
44 
45 class G4ScaledSolid : public G4VSolid
46 {
47  public: // with description
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 
58 
59  G4bool CalculateExtent(const EAxis pAxis,
60  const G4VoxelLimits& pVoxelLimit,
61  const G4AffineTransform& pTransform,
62  G4double& pMin, G4double& pMax) const;
63 
64  G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const;
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 
86  void CleanTransformations();
87 
89 
91  void SetScaleTransform(const G4Scale3D& scale);
92 
93  G4VSolid* GetUnscaledSolid() const;
94 
96  G4VSolid* Clone() const;
97 
98  std::ostream& StreamInfo(std::ostream& os) const;
99 
100  public: // without description
101 
102  G4ScaledSolid(__void__&);
103  // Fake default constructor for usage restricted to direct object
104  // persistency for clients requiring preallocation of memory for
105  // persistifiable objects.
106 
107  G4ScaledSolid(const G4ScaledSolid& rhs);
109  // Copy constructor and assignment operator.
110 
111  void DescribeYourselfTo ( G4VGraphicsScene& scene ) const;
112  G4Polyhedron* CreatePolyhedron () const;
113  G4Polyhedron* GetPolyhedron () const;
114  // For creating graphical representations (i.e. for visualisation).
115 
116  private:
117 
118  G4VSolid* fPtrSolid = nullptr;
122  mutable G4bool fRebuildPolyhedron = false;
123  mutable G4Polyhedron* fpPolyhedron = nullptr;
124 } ;
125 
126 #endif