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 // G4VoxelLimits 27 // 28 // Class description: 29 // 30 // Represents limitation/restrictions of space 31 // are only made perpendicular to the cartesia 32 // 33 // Member data: 34 // 35 // G4double fxAxisMin,fxAxisMax 36 // G4double fyAxisMin,fyAxisMax 37 // G4double fzAxisMin,fzAxisMax 38 // - The min and max values along each axis. + 39 40 // 13.07.95, P.Kent - Initial version. 41 // ------------------------------------------- 42 #ifndef G4VOXELLIMITS_HH 43 #define G4VOXELLIMITS_HH 1 44 45 #include "G4Types.hh" 46 #include "geomdefs.hh" 47 48 #include "G4ThreeVector.hh" 49 50 #include <assert.h> 51 52 class G4VoxelLimits 53 { 54 public: 55 56 G4VoxelLimits() = default; 57 // Constructor - initialise to be unlimi 58 59 ~G4VoxelLimits() = default; 60 // Destructor. No actions. 61 62 void AddLimit(const EAxis pAxis, const G4d 63 // Restrict the volume to between specif 64 // given axis. Cartesian axes only, pMin 65 66 G4double GetMaxXExtent() const; 67 // Return maximum x extent. 68 G4double GetMaxYExtent() const; 69 // Return maximum y extent. 70 G4double GetMaxZExtent() const; 71 // Return maximum z extent. 72 73 G4double GetMinXExtent() const; 74 // Return minimum x extent. 75 G4double GetMinYExtent() const; 76 // Return minimum y extent. 77 G4double GetMinZExtent() const; 78 // Return minimum z extent. 79 80 G4double GetMaxExtent(const EAxis pAxis) c 81 // Return maximum extent of volume along 82 G4double GetMinExtent(const EAxis pAxis) c 83 // Return minimum extent of volume along 84 85 G4bool IsXLimited() const; 86 // Return true if the x axis is limited. 87 G4bool IsYLimited() const; 88 // Return true if the y axis is limited. 89 G4bool IsZLimited() const; 90 // Return true if the z axis is limited. 91 92 G4bool IsLimited() const; 93 // Return true if limited along any axis 94 G4bool IsLimited(const EAxis pAxis) const; 95 // Return true if the specified axis is 96 97 G4bool ClipToLimits(G4ThreeVector& pStart, 98 // Clip the line segment pStart->pEnd to 99 // current limits. Return true if the li 100 // else false, and leave the vectors in 101 102 G4bool Inside(const G4ThreeVector& pVec) c 103 // Return true if the specified vector i 104 105 G4int OutCode(const G4ThreeVector& pVec) c 106 // Calculate the `outcode' for the speci 107 // Intended for use during clipping agai 108 // The bits are set given the following 109 // 0 pVec.x()<fxAxisMin && IsXLim 110 // 1 pVec.x()>fxAxisMax && IsXLim 111 // 2 pVec.y()<fyAxisMin && IsYLim 112 // 3 pVec.y()>fyAxisMax && IsYLim 113 // 4 pVec.z()<fzAxisMin && IsZLim 114 // 5 pVec.z()>fzAxisMax && IsZLim 115 116 private: 117 118 G4double fxAxisMin = -kInfinity, fxAxisMax 119 G4double fyAxisMin = -kInfinity, fyAxisMax 120 G4double fzAxisMin = -kInfinity, fzAxisMax 121 }; 122 123 #include "G4VoxelLimits.icc" 124 125 std::ostream& operator << (std::ostream& os, c 126 // Print the limits to the stream in the for 127 // "{(xmin,xmax) (ymin,ymax) (zmin,zmax)}" 128 // Replace (xmin,xmax) by (-,-) when not li 129 130 #endif 131