Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4Trd 27 // 28 // Class description: 29 // 30 // A G4Trd is a trapezoid with the x and y d 31 // functions: 32 // 33 // Member Data: 34 // 35 // fDx1 Half-length along x at the surf 36 // fDx2 Half-length along x at the surf 37 // fDy1 Half-length along y at the surf 38 // fDy2 Half-length along y at the surf 39 // fDz Half-length along z axis 40 41 // 12.01.95 P.Kent: Old prototype code convert 42 // 21.04.97 J.Apostolakis: Added Set Methods 43 // 19.11.99 V.Grichine: kUndefined was added t 44 // ------------------------------------------- 45 #ifndef G4TRD_HH 46 #define G4TRD_HH 47 48 #include "G4GeomTypes.hh" 49 50 #if defined(G4GEOM_USE_USOLIDS) 51 #define G4GEOM_USE_UTRD 1 52 #endif 53 54 #if defined(G4GEOM_USE_UTRD) 55 #define G4UTrd G4Trd 56 #include "G4UTrd.hh" 57 #else 58 59 #include "G4CSGSolid.hh" 60 #include "G4Polyhedron.hh" 61 62 class G4Trd : public G4CSGSolid 63 { 64 public: 65 66 G4Trd( const G4String& pName, 67 G4double pdx1, G4double pdx2, 68 G4double pdy1, G4double pdy2, 69 G4double pdz ); 70 // 71 // Constructs a trapezoid with name, and 72 73 ~G4Trd() override; 74 // 75 // Destructor 76 77 // Accessors 78 79 inline G4double GetXHalfLength1() const; 80 inline G4double GetXHalfLength2() const; 81 inline G4double GetYHalfLength1() const; 82 inline G4double GetYHalfLength2() const; 83 inline G4double GetZHalfLength() const; 84 85 // Modifiers 86 87 inline void SetXHalfLength1(G4double val); 88 inline void SetXHalfLength2(G4double val); 89 inline void SetYHalfLength1(G4double val); 90 inline void SetYHalfLength2(G4double val); 91 inline void SetZHalfLength(G4double val); 92 93 void SetAllParameters ( G4double pdx1, G4d 94 G4double pdy1, G4d 95 G4double pdz ); 96 97 // Methods of solid 98 99 G4double GetCubicVolume() override; 100 G4double GetSurfaceArea() override; 101 102 void ComputeDimensions( G4VPVParamet 103 const G4int n, 104 const G4VPhysicalV 105 106 void BoundingLimits(G4ThreeVector& pMin, G 107 108 G4bool CalculateExtent(const EAxis pAxis, 109 const G4VoxelLimits 110 const G4AffineTrans 111 G4double& pMi 112 113 EInside Inside( const G4ThreeVector& p ) c 114 115 G4ThreeVector SurfaceNormal( const G4Three 116 117 G4double DistanceToIn( const G4ThreeVector 118 const G4ThreeVector 119 120 G4double DistanceToIn( const G4ThreeVector 121 122 G4double DistanceToOut( const G4ThreeVecto 123 const G4ThreeVecto 124 const G4bool calcN 125 G4bool* vali 126 G4ThreeVecto 127 128 G4double DistanceToOut( const G4ThreeVecto 129 130 G4GeometryType GetEntityType() const overr 131 132 G4ThreeVector GetPointOnSurface() const ov 133 134 G4bool IsFaceted() const override; 135 136 G4VSolid* Clone() const override; 137 138 std::ostream& StreamInfo( std::ostream& os 139 140 // Visualisation functions 141 142 void DescribeYourselfTo (G4VGraph 143 G4Polyhedron* CreatePolyhedron () const 144 145 G4Trd(__void__&); 146 // Fake default constructor for usage re 147 // persistency for clients requiring pre 148 // persistifiable objects. 149 150 G4Trd(const G4Trd& rhs); 151 G4Trd& operator=(const G4Trd& rhs); 152 // Copy constructor and assignment opera 153 154 private: 155 156 void CheckParameters(); 157 // Check parameters 158 159 void MakePlanes(); 160 // Set side planes 161 162 G4ThreeVector ApproxSurfaceNormal( const G 163 // Algorithm for SurfaceNormal() followi 164 // specification for points not on the s 165 166 private: 167 168 G4double halfCarTolerance; 169 G4double fDx1,fDx2,fDy1,fDy2,fDz,fHx,fHy; 170 struct { G4double a,b,c,d; } fPlanes[4]; 171 }; 172 173 #include "G4Trd.icc" 174 175 #endif 176 177 #endif 178