Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 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 // 7 // 26 // G4VoxelLimits << 8 // $Id: G4VoxelLimits.hh,v 1.4 2000/04/20 16:49:48 gcosmo Exp $ >> 9 // GEANT4 tag $Name: geant4-03-00 $ >> 10 // >> 11 // class G4VoxelLimits 27 // 12 // 28 // Class description: 13 // Class description: 29 // 14 // 30 // Represents limitation/restrictions of space 15 // Represents limitation/restrictions of space, where restrictions 31 // are only made perpendicular to the cartesia 16 // are only made perpendicular to the cartesian axes. 32 // 17 // >> 18 // 33 // Member data: 19 // Member data: 34 // 20 // 35 // G4double fxAxisMin,fxAxisMax 21 // G4double fxAxisMin,fxAxisMax 36 // G4double fyAxisMin,fyAxisMax 22 // G4double fyAxisMin,fyAxisMax 37 // G4double fzAxisMin,fzAxisMax 23 // G4double fzAxisMin,fzAxisMax 38 // - The min and max values along each axis. + << 24 // - The min and max values along each axis. +-kInfinity if not restricted. >> 25 // >> 26 // >> 27 // Notes: >> 28 // >> 29 // Beware no break statements after returns in switch(pAxis)s. >> 30 >> 31 // History: >> 32 // 13.07.95 P.Kent Initial version. 39 33 40 // 13.07.95, P.Kent - Initial version. << 41 // ------------------------------------------- << 42 #ifndef G4VOXELLIMITS_HH 34 #ifndef G4VOXELLIMITS_HH 43 #define G4VOXELLIMITS_HH 1 << 35 #define G4VOXELLIMITS_HH 44 36 45 #include "G4Types.hh" << 37 #include "globals.hh" 46 #include "geomdefs.hh" 38 #include "geomdefs.hh" 47 39 48 #include "G4ThreeVector.hh" 40 #include "G4ThreeVector.hh" >> 41 #include "g4std/iostream" 49 42 50 #include <assert.h> 43 #include <assert.h> 51 44 52 class G4VoxelLimits 45 class G4VoxelLimits 53 { 46 { 54 public: << 47 public: // with description 55 48 56 G4VoxelLimits() = default; << 49 G4VoxelLimits() : fxAxisMin(-kInfinity),fxAxisMax(kInfinity), >> 50 fyAxisMin(-kInfinity),fyAxisMax(kInfinity), >> 51 fzAxisMin(-kInfinity),fzAxisMax(kInfinity) {;} 57 // Constructor - initialise to be unlimi 52 // Constructor - initialise to be unlimited. Volume unrestricted. 58 53 59 ~G4VoxelLimits() = default; << 54 ~G4VoxelLimits() {;} 60 // Destructor. No actions. 55 // Destructor. No actions. 61 56 62 void AddLimit(const EAxis pAxis, const G4d << 57 void AddLimit(const EAxis pAxis, const G4double pMin,const G4double pMax); 63 // Restrict the volume to between specif 58 // Restrict the volume to between specified min and max along the 64 // given axis. Cartesian axes only, pMin 59 // given axis. Cartesian axes only, pMin<=pMax. 65 60 66 G4double GetMaxXExtent() const; 61 G4double GetMaxXExtent() const; 67 // Return maximum x extent. 62 // Return maximum x extent. 68 G4double GetMaxYExtent() const; 63 G4double GetMaxYExtent() const; 69 // Return maximum y extent. 64 // Return maximum y extent. 70 G4double GetMaxZExtent() const; 65 G4double GetMaxZExtent() const; 71 // Return maximum z extent. 66 // Return maximum z extent. 72 67 73 G4double GetMinXExtent() const; 68 G4double GetMinXExtent() const; 74 // Return minimum x extent. 69 // Return minimum x extent. 75 G4double GetMinYExtent() const; 70 G4double GetMinYExtent() const; 76 // Return minimum y extent. 71 // Return minimum y extent. 77 G4double GetMinZExtent() const; 72 G4double GetMinZExtent() const; 78 // Return minimum z extent. 73 // Return minimum z extent. 79 74 80 G4double GetMaxExtent(const EAxis pAxis) c 75 G4double GetMaxExtent(const EAxis pAxis) const; 81 // Return maximum extent of volume along 76 // Return maximum extent of volume along specified axis. 82 G4double GetMinExtent(const EAxis pAxis) c 77 G4double GetMinExtent(const EAxis pAxis) const; 83 // Return minimum extent of volume along 78 // Return minimum extent of volume along specified axis. 84 79 85 G4bool IsXLimited() const; 80 G4bool IsXLimited() const; 86 // Return true if the x axis is limited. 81 // Return true if the x axis is limited. 87 G4bool IsYLimited() const; 82 G4bool IsYLimited() const; 88 // Return true if the y axis is limited. 83 // Return true if the y axis is limited. 89 G4bool IsZLimited() const; 84 G4bool IsZLimited() const; 90 // Return true if the z axis is limited. 85 // Return true if the z axis is limited. 91 86 92 G4bool IsLimited() const; 87 G4bool IsLimited() const; 93 // Return true if limited along any axis 88 // Return true if limited along any axis 94 G4bool IsLimited(const EAxis pAxis) const; 89 G4bool IsLimited(const EAxis pAxis) const; 95 // Return true if the specified axis is 90 // Return true if the specified axis is restricted/limited. 96 91 97 G4bool ClipToLimits(G4ThreeVector& pStart, << 92 G4bool ClipToLimits(G4ThreeVector& pStart,G4ThreeVector& pEnd) const; 98 // Clip the line segment pStart->pEnd to 93 // Clip the line segment pStart->pEnd to the volume described by the 99 // current limits. Return true if the li 94 // current limits. Return true if the line remains after clipping, 100 // else false, and leave the vectors in 95 // else false, and leave the vectors in an undefined state. 101 96 102 G4bool Inside(const G4ThreeVector& pVec) c 97 G4bool Inside(const G4ThreeVector& pVec) const; 103 // Return true if the specified vector i 98 // Return true if the specified vector is inside/on boundaries of limits. 104 99 105 G4int OutCode(const G4ThreeVector& pVec) c 100 G4int OutCode(const G4ThreeVector& pVec) const; 106 // Calculate the `outcode' for the speci 101 // Calculate the `outcode' for the specified vector. 107 // Intended for use during clipping agai 102 // Intended for use during clipping against the limits 108 // The bits are set given the following 103 // The bits are set given the following conditions: 109 // 0 pVec.x()<fxAxisMin && IsXLim 104 // 0 pVec.x()<fxAxisMin && IsXLimited() 110 // 1 pVec.x()>fxAxisMax && IsXLim 105 // 1 pVec.x()>fxAxisMax && IsXLimited() 111 // 2 pVec.y()<fyAxisMin && IsYLim 106 // 2 pVec.y()<fyAxisMin && IsYLimited() 112 // 3 pVec.y()>fyAxisMax && IsYLim 107 // 3 pVec.y()>fyAxisMax && IsYLimited() 113 // 4 pVec.z()<fzAxisMin && IsZLim 108 // 4 pVec.z()<fzAxisMin && IsZLimited() 114 // 5 pVec.z()>fzAxisMax && IsZLim 109 // 5 pVec.z()>fzAxisMax && IsZLimited() 115 110 116 private: 111 private: 117 112 118 G4double fxAxisMin = -kInfinity, fxAxisMax << 113 G4double fxAxisMin,fxAxisMax; 119 G4double fyAxisMin = -kInfinity, fyAxisMax << 114 G4double fyAxisMin,fyAxisMax; 120 G4double fzAxisMin = -kInfinity, fzAxisMax << 115 G4double fzAxisMin,fzAxisMax; 121 }; 116 }; 122 117 123 #include "G4VoxelLimits.icc" 118 #include "G4VoxelLimits.icc" 124 119 125 std::ostream& operator << (std::ostream& os, c << 120 G4std::ostream& operator << (G4std::ostream& os, const G4VoxelLimits& pLim); 126 // Print the limits to the stream in the for 121 // Print the limits to the stream in the form: 127 // "{(xmin,xmax) (ymin,ymax) (zmin,zmax)}" 122 // "{(xmin,xmax) (ymin,ymax) (zmin,zmax)}" 128 // Replace (xmin,xmax) by (-,-) when not li 123 // Replace (xmin,xmax) by (-,-) when not limited. 129 124 130 #endif 125 #endif 131 126