Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. >> 3 // >> 4 // By copying, distributing or modifying the Program (or any work >> 5 // based on the Program) you indicate your acceptance of this statement, >> 6 // and all its terms. >> 7 // >> 8 // $Id: G4Trd.hh,v 1.5 2000/04/11 16:04:27 johna Exp $ >> 9 // GEANT4 tag $Name: geant4-02-00 $ >> 10 // >> 11 // >> 12 // -------------------------------------------------------------------- >> 13 // GEANT 4 class header file 1 // 14 // 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 // 15 // 26 // G4Trd 16 // G4Trd 27 // 17 // 28 // Class description: 18 // Class description: 29 // 19 // 30 // A G4Trd is a trapezoid with the x and y d << 20 // A Trd is a trapezoid with the x and y dimensions varying along z 31 // functions: 21 // functions: 32 // 22 // >> 23 // As inherited from G4CSGSolid + >> 24 // >> 25 // G4Trd( const G4String& pName, >> 26 // G4double pdx1, G4double pdx2, >> 27 // G4double pdy1, G4double pdy2, >> 28 // G4double pdz ) >> 29 // >> 30 // - Construct a trapezoid with name, and half lengths >> 31 // dpx1,dpx2,dpy1,dpy2,dpz >> 32 // >> 33 // G4double GetXHalfLength1() const >> 34 // G4double GetXHalfLength2() const >> 35 // G4double GetYHalfLength1() const >> 36 // G4double GetYHalfLength2() const >> 37 // G4double GetZHalfLength() const >> 38 // >> 39 // - Return the respective parameter >> 40 // >> 41 // void SetXHalfLength1(G4double) >> 42 // void SetXHalfLength2(G4double) >> 43 // void SetYHalfLength1(G4double) >> 44 // void SetYHalfLength2(G4double) >> 45 // void SetZHalfLength(G4double) >> 46 // >> 47 // - Set the respective parameter >> 48 // >> 49 // Protected: >> 50 // >> 51 // G4ThreeVectorList* >> 52 // CreateRotatedVertices(const G4AffineTransform& pTransform) const >> 53 // >> 54 // - Create the List of transformed vertices in the format required >> 55 // for G4CSGSolid:: ClipCrossSection and ClipBetweenSections. >> 56 // >> 57 // 33 // Member Data: 58 // Member Data: 34 // 59 // 35 // fDx1 Half-length along x at the surf 60 // fDx1 Half-length along x at the surface positioned at -dz 36 // fDx2 Half-length along x at the surf 61 // fDx2 Half-length along x at the surface positioned at +dz 37 // fDy1 Half-length along y at the surf 62 // fDy1 Half-length along y at the surface positioned at -dz 38 // fDy2 Half-length along y at the surf 63 // fDy2 Half-length along y at the surface positioned at +dz 39 // fDz Half-length along z axis 64 // fDz Half-length along z axis 40 65 41 // 12.01.95 P.Kent: Old prototype code convert << 66 // History: 42 // 21.04.97 J.Apostolakis: Added Set Methods << 67 // 19.11.99 V.Grichine, kUndefined was added to Eside enum 43 // 19.11.99 V.Grichine: kUndefined was added t << 68 // 21.04.97 J. Apostolakis Added Set Methods. >> 69 // 19.08.96 P. Kent, V. Grichine ->Fs in accordance with G4Box >> 70 // 17.02.95 P.Kent Exiting normal return >> 71 // 12.01.95 P.Kent Old prototype code converted to thick geometry 44 // ------------------------------------------- 72 // -------------------------------------------------------------------- >> 73 45 #ifndef G4TRD_HH 74 #ifndef G4TRD_HH 46 #define G4TRD_HH 75 #define G4TRD_HH 47 76 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" 77 #include "G4CSGSolid.hh" 60 #include "G4Polyhedron.hh" << 61 78 62 class G4Trd : public G4CSGSolid << 79 class G4Trd : public G4CSGSolid 63 { 80 { 64 public: 81 public: 65 82 66 G4Trd( const G4String& pName, 83 G4Trd( const G4String& pName, 67 G4double pdx1, G4double pdx2, << 84 G4double pdx1, G4double pdx2, 68 G4double pdy1, G4double pdy2, << 85 G4double pdy1, G4double pdy2, 69 G4double pdz ); << 86 G4double pdz); 70 // << 87 71 // Constructs a trapezoid with name, and << 88 virtual ~G4Trd(); 72 << 89 73 ~G4Trd() override; << 90 // Access functions 74 // << 91 G4double GetXHalfLength1() const 75 // Destructor << 92 { 76 << 93 return fDx1; 77 // Accessors << 94 } 78 << 95 79 inline G4double GetXHalfLength1() const; << 96 G4double GetXHalfLength2() const 80 inline G4double GetXHalfLength2() const; << 97 { 81 inline G4double GetYHalfLength1() const; << 98 return fDx2; 82 inline G4double GetYHalfLength2() const; << 99 } 83 inline G4double GetZHalfLength() const; << 100 84 << 101 G4double GetYHalfLength1() const 85 // Modifiers << 102 { 86 << 103 return fDy1; 87 inline void SetXHalfLength1(G4double val); << 104 } 88 inline void SetXHalfLength2(G4double val); << 105 89 inline void SetYHalfLength1(G4double val); << 106 G4double GetYHalfLength2() const 90 inline void SetYHalfLength2(G4double val); << 107 { 91 inline void SetZHalfLength(G4double val); << 108 return fDy2; 92 << 109 } 93 void SetAllParameters ( G4double pdx1, G4d << 110 94 G4double pdy1, G4d << 111 G4double GetZHalfLength() const 95 G4double pdz ); << 112 { 96 << 113 return fDz; 97 // Methods of solid << 114 } 98 << 115 99 G4double GetCubicVolume() override; << 116 void SetXHalfLength1(G4double val) 100 G4double GetSurfaceArea() override; << 117 { 101 << 118 fDx1= val; 102 void ComputeDimensions( G4VPVParamet << 119 } 103 const G4int n, << 120 void SetXHalfLength2(G4double val) 104 const G4VPhysicalV << 121 { 105 << 122 fDx2= val; 106 void BoundingLimits(G4ThreeVector& pMin, G << 123 } >> 124 void SetYHalfLength1(G4double val) >> 125 { >> 126 fDy1= val; >> 127 } >> 128 void SetYHalfLength2(G4double val) >> 129 { >> 130 fDy2= val; >> 131 } >> 132 void SetZHalfLength(G4double val) >> 133 { >> 134 fDz= val; >> 135 } >> 136 >> 137 void ComputeDimensions(G4VPVParameterisation* p, >> 138 const G4int n, >> 139 const G4VPhysicalVolume* pRep); 107 140 108 G4bool CalculateExtent(const EAxis pAxis, 141 G4bool CalculateExtent(const EAxis pAxis, 109 const G4VoxelLimits << 142 const G4VoxelLimits& pVoxelLimit, 110 const G4AffineTrans << 143 const G4AffineTransform& pTransform, 111 G4double& pMi << 144 G4double& pMin, G4double& pMax) const; >> 145 >> 146 >> 147 EInside Inside(const G4ThreeVector& p) const; 112 148 113 EInside Inside( const G4ThreeVector& p ) c << 149 G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; 114 150 115 G4ThreeVector SurfaceNormal( const G4Three << 151 G4double DistanceToIn(const G4ThreeVector& p, >> 152 const G4ThreeVector& v) const; 116 153 117 G4double DistanceToIn( const G4ThreeVector << 154 G4double DistanceToIn(const G4ThreeVector& p) const; 118 const G4ThreeVector << 119 155 120 G4double DistanceToIn( const G4ThreeVector << 156 G4double DistanceToOut(const G4ThreeVector& p, >> 157 const G4ThreeVector& v, >> 158 const G4bool calcNorm=false, >> 159 G4bool *validNorm=0, >> 160 G4ThreeVector *n=0) const; 121 161 122 G4double DistanceToOut( const G4ThreeVecto << 162 G4double DistanceToOut(const G4ThreeVector& p) const; 123 const G4ThreeVecto << 124 const G4bool calcN << 125 G4bool* vali << 126 G4ThreeVecto << 127 163 128 G4double DistanceToOut( const G4ThreeVecto << 164 // Naming method (pseudo-RTTI : run-time type identification 129 165 130 G4GeometryType GetEntityType() const overr << 166 virtual G4GeometryType GetEntityType() const { return G4String("G4Trd"); } 131 167 132 G4ThreeVector GetPointOnSurface() const ov << 168 // Visualisation functions 133 169 134 G4bool IsFaceted() const override; << 170 void DescribeYourselfTo (G4VGraphicsScene& scene) const; >> 171 G4Polyhedron* CreatePolyhedron () const; >> 172 G4NURBS* CreateNURBS () const; 135 173 136 G4VSolid* Clone() const override; << 174 void CheckAndSetAllParameters (G4double pdx1, G4double pdx2, >> 175 G4double pdy1, G4double pdy2, >> 176 G4double pdz); 137 177 138 std::ostream& StreamInfo( std::ostream& os << 178 void SetAllParameters (G4double pdx1, G4double pdx2, >> 179 G4double pdy1, G4double pdy2, >> 180 G4double pdz); 139 181 140 // Visualisation functions << 182 protected: 141 183 142 void DescribeYourselfTo (G4VGraph << 184 G4ThreeVectorList* 143 G4Polyhedron* CreatePolyhedron () const << 185 CreateRotatedVertices(const G4AffineTransform& pTransform) const; >> 186 >> 187 G4double fDx1,fDx2,fDy1,fDy2,fDz; 144 188 145 G4Trd(__void__&); << 189 // Codes for faces (kPX=plus x face,kMY= minus y face etc) 146 // Fake default constructor for usage re << 147 // persistency for clients requiring pre << 148 // persistifiable objects. << 149 190 150 G4Trd(const G4Trd& rhs); << 191 enum ESide {kUndefined, kPX,kMX,kPY,kMY,kPZ,kMZ}; 151 G4Trd& operator=(const G4Trd& rhs); << 152 // Copy constructor and assignment opera << 153 192 154 private: << 193 }; 155 194 156 void CheckParameters(); << 195 #endif 157 // Check parameters << 158 196 159 void MakePlanes(); << 160 // Set side planes << 161 197 162 G4ThreeVector ApproxSurfaceNormal( const G << 163 // Algorithm for SurfaceNormal() followi << 164 // specification for points not on the s << 165 198 166 private: << 167 199 168 G4double halfCarTolerance; << 169 G4double fDx1,fDx2,fDy1,fDy2,fDz,fHx,fHy; << 170 struct { G4double a,b,c,d; } fPlanes[4]; << 171 }; << 172 200 173 #include "G4Trd.icc" << 174 201 175 #endif << 176 202 177 #endif << 178 203