Geant4 Cross Reference |
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 // G4UExtrudedSolid 27 // 28 // Class description: 29 // 30 // Wrapper class for G4ExtrudedSolid to make use of VecGeom ExtrudedSolid. 31 32 // 17.11.17 G.Cosmo, CERN 33 // -------------------------------------------------------------------- 34 #ifndef G4UEXTRUDEDSOLID_HH 35 #define G4UEXTRUDEDSOLID_HH 36 37 #include "G4UAdapter.hh" 38 39 #if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) ) 40 41 #include <VecGeom/volumes/UnplacedExtruded.h> 42 #include "G4TwoVector.hh" 43 44 #include "G4Polyhedron.hh" 45 46 class G4UExtrudedSolid : public G4UAdapter<vecgeom::UnplacedExtruded> 47 { 48 using Shape_t = vecgeom::UnplacedExtruded; 49 using Base_t = G4UAdapter<vecgeom::UnplacedExtruded>; 50 51 public: 52 53 struct ZSection 54 { 55 ZSection() : fZ(0.), fOffset(0.,0.), fScale(1.) {} 56 ZSection(G4double z, const G4TwoVector& offset, G4double scale) 57 : fZ(z), fOffset(offset), fScale(scale) {} 58 59 G4double fZ; 60 G4TwoVector fOffset; 61 G4double fScale; 62 }; 63 64 G4UExtrudedSolid(const G4String& pName, 65 const std::vector<G4TwoVector>& polygon, 66 const std::vector<ZSection>& zsections); 67 // General constructor 68 69 G4UExtrudedSolid(const G4String& pName, 70 const std::vector<G4TwoVector>& polygon, 71 G4double halfZ, 72 const G4TwoVector& off1 = G4TwoVector(0.,0.), 73 G4double scale1 = 1., 74 const G4TwoVector& off2 = G4TwoVector(0.,0.), 75 G4double scale2 = 1. ); 76 // Special constructor for solid with 2 z-sections 77 78 ~G4UExtrudedSolid() override; 79 80 G4int GetNofVertices() const; 81 G4TwoVector GetVertex(G4int index) const; 82 std::vector<G4TwoVector> GetPolygon() const; 83 G4int GetNofZSections() const; 84 ZSection GetZSection(G4int index) const; 85 std::vector<ZSection> GetZSections() const; 86 87 inline G4GeometryType GetEntityType() const override; 88 89 inline G4bool IsFaceted() const override; 90 91 G4UExtrudedSolid(__void__&); 92 // Fake default constructor for usage restricted to direct object 93 // persistency for clients requiring preallocation of memory for 94 // persistifiable objects. 95 96 G4UExtrudedSolid( const G4UExtrudedSolid& source ); 97 G4UExtrudedSolid &operator=(const G4UExtrudedSolid& source); 98 // Copy constructor and assignment operator. 99 100 void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; 101 G4bool CalculateExtent(const EAxis pAxis, 102 const G4VoxelLimits& pVoxelLimit, 103 const G4AffineTransform& pTransform, 104 G4double& pMin, G4double& pMax) const override; 105 106 G4Polyhedron* CreatePolyhedron() const override; 107 }; 108 109 // -------------------------------------------------------------------- 110 // Inline methods 111 // -------------------------------------------------------------------- 112 113 inline G4GeometryType G4UExtrudedSolid::GetEntityType() const 114 { 115 return "G4ExtrudedSolid"; 116 } 117 118 inline G4bool G4UExtrudedSolid::IsFaceted() const 119 { 120 return true; 121 } 122 123 #endif // G4GEOM_USE_USOLIDS 124 125 #endif 126