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 // 27 // 28 // 29 // John Allison 31st December 1997. 30 // 31 // Class Description: 32 // 33 // Parameters associated with the modeling of GEANT4 objects. 34 35 #ifndef G4MODELINGPARAMETERS_HH 36 #define G4MODELINGPARAMETERS_HH 37 38 #include "globals.hh" 39 #include "G4VisExtent.hh" 40 #include "G4VisAttributes.hh" 41 #include "G4VPhysicalVolume.hh" 42 43 #include <vector> 44 #include <utility> 45 46 class G4LogicalVolume; 47 class G4VisAttributes; 48 class G4VSolid; 49 class G4DisplacedSolid; 50 class G4Event; 51 52 class G4ModelingParameters { 53 54 public: // With description 55 56 // Currently requested drawing style. 57 enum DrawingStyle { 58 wf, // Draw edges - no hidden line removal (wireframe). 59 hlr, // Draw edges - hidden lines removed. 60 hsr, // Draw surfaces - hidden surfaces removed. 61 hlhsr, // Draw surfaces and edges - hidden removed. 62 cloud // Draw as a cloud of points 63 }; 64 65 enum CutawayMode { 66 cutawayUnion, // Union (addition) of result of each cutaway plane. 67 cutawayIntersection // Intersection (multiplication). 68 }; 69 70 // enums and nested class for communicating a modification to the vis 71 // attributes for a specfic touchable defined by PVNameCopyNoPath. 72 enum VisAttributesSignifier { 73 VASVisibility, 74 VASDaughtersInvisible, 75 VASColour, 76 VASLineStyle, 77 VASLineWidth, 78 VASForceWireframe, 79 VASForceSolid, 80 VASForceCloud, 81 VASForceNumberOfCloudPoints, 82 VASForceAuxEdgeVisible, 83 VASForceLineSegmentsPerCircle 84 }; 85 86 class PVNameCopyNo { 87 public: 88 // Normal constructor 89 PVNameCopyNo(const G4String& name, G4int copyNo) 90 : fName(name), fCopyNo(copyNo) {} 91 const G4String& GetName() const {return fName;} 92 G4int GetCopyNo() const {return fCopyNo;} 93 G4bool operator!=(const PVNameCopyNo&) const; 94 G4bool operator==(const PVNameCopyNo& rhs) const {return !operator!=(rhs);} 95 private: 96 G4String fName; 97 G4int fCopyNo; 98 }; 99 typedef std::vector<PVNameCopyNo> PVNameCopyNoPath; 100 typedef PVNameCopyNoPath::const_iterator PVNameCopyNoPathConstIterator; 101 102 class PVPointerCopyNo { 103 public: 104 // Normal constructor 105 PVPointerCopyNo(G4VPhysicalVolume* pPV, G4int copyNo) 106 : fpPV(pPV), fCopyNo(copyNo) {} 107 const G4String& GetName() const; 108 const G4VPhysicalVolume* GetPVPointer() const {return fpPV;} 109 G4int GetCopyNo() const {return fCopyNo;} 110 G4bool operator!=(const PVPointerCopyNo&) const; 111 G4bool operator==(const PVPointerCopyNo& rhs) const {return !operator!=(rhs);} 112 private: 113 G4VPhysicalVolume* fpPV; 114 G4int fCopyNo; 115 }; 116 typedef std::vector<PVPointerCopyNo> PVPointerCopyNoPath; 117 typedef PVPointerCopyNoPath::const_iterator PVPointerCopyNoPathConstIterator; 118 119 class VisAttributesModifier { 120 public: 121 VisAttributesModifier 122 (const G4VisAttributes& visAtts, 123 VisAttributesSignifier signifier, 124 const PVNameCopyNoPath& path): 125 fVisAtts(visAtts), fSignifier(signifier), fPVNameCopyNoPath(path) {} 126 const G4VisAttributes& GetVisAttributes() const 127 {return fVisAtts;} 128 VisAttributesSignifier GetVisAttributesSignifier() const 129 {return fSignifier;} 130 const PVNameCopyNoPath& GetPVNameCopyNoPath() const 131 {return fPVNameCopyNoPath;} 132 void SetVisAttributes(const G4VisAttributes& visAtts) 133 {fVisAtts = visAtts;} 134 void SetVisAttributesSignifier(VisAttributesSignifier signifier) 135 {fSignifier = signifier;} 136 void SetPVNameCopyNoPath(const PVNameCopyNoPath& PVNameCopyNoPath) 137 {fPVNameCopyNoPath = PVNameCopyNoPath;} 138 G4bool operator!=(const VisAttributesModifier&) const; 139 G4bool operator==(const VisAttributesModifier& rhs) const 140 {return !operator!=(rhs);} 141 private: 142 G4VisAttributes fVisAtts; 143 VisAttributesSignifier fSignifier; 144 PVNameCopyNoPath fPVNameCopyNoPath; 145 }; 146 147 G4ModelingParameters (); 148 149 G4ModelingParameters (const G4VisAttributes* pDefaultVisAttributes, 150 DrawingStyle drawingStyle, 151 G4bool isCulling, 152 G4bool isCullingInvisible, 153 G4bool isDensityCulling, 154 G4double visibleDensity, 155 G4bool isCullingCovered, 156 G4int noOfSides); 157 // Culling and clipping policy for G4PhysicalVolumeModel. 158 159 ~G4ModelingParameters (); 160 161 // Note: uses default assignment operator and copy constructor. 162 163 G4bool operator != (const G4ModelingParameters&) const; 164 165 // Get and Is functions... 166 G4bool IsWarning () const; 167 const G4VisAttributes* GetDefaultVisAttributes () const; 168 DrawingStyle GetDrawingStyle () const; 169 G4int GetNumberOfCloudPoints () const; 170 G4bool IsCulling () const; 171 G4bool IsCullingInvisible () const; 172 G4bool IsDensityCulling () const; 173 G4double GetVisibleDensity () const; 174 G4bool IsCullingCovered () const; 175 G4int GetCBDAlgorithmNumber () const; 176 const std::vector<G4double>& GetCBDParameters () const; 177 G4bool IsExplode () const; 178 G4double GetExplodeFactor () const; 179 const G4Point3D& GetExplodeCentre () const; 180 G4int GetNoOfSides () const; 181 G4DisplacedSolid* GetSectionSolid () const; 182 CutawayMode GetCutawayMode () const; 183 G4DisplacedSolid* GetCutawaySolid () const; 184 const G4Event* GetEvent () const; 185 const std::vector<VisAttributesModifier>& GetVisAttributesModifiers() const; 186 G4bool IsSpecialMeshRendering () const; 187 const std::vector<PVNameCopyNo>& GetSpecialMeshVolumes() const; 188 189 // Set functions... 190 void SetWarning (G4bool); 191 void SetDefaultVisAttributes (const G4VisAttributes* pDefaultVisAttributes); 192 void SetDrawingStyle (DrawingStyle); 193 void SetNumberOfCloudPoints (G4int); 194 void SetCulling (G4bool); 195 void SetCullingInvisible (G4bool); 196 void SetDensityCulling (G4bool); 197 void SetVisibleDensity (G4double); 198 void SetCullingCovered (G4bool); 199 void SetCBDAlgorithmNumber (G4int); 200 void SetCBDParameters (const std::vector<G4double>&); 201 void SetExplodeFactor (G4double explodeFactor); 202 void SetExplodeCentre (const G4Point3D& explodeCentre); 203 G4int SetNoOfSides (G4int); // Returns actual number set. 204 void SetSectionSolid (G4DisplacedSolid* pSectionSolid); 205 void SetCutawayMode (CutawayMode); 206 void SetCutawaySolid (G4DisplacedSolid* pCutawaySolid); 207 void SetEvent (const G4Event* pEvent); 208 void SetVisAttributesModifiers(const std::vector<VisAttributesModifier>&); 209 void SetSpecialMeshRendering (G4bool); 210 void SetSpecialMeshVolumes (const std::vector<PVNameCopyNo>&); 211 212 friend std::ostream& operator << 213 (std::ostream& os, const G4ModelingParameters&); 214 215 friend std::ostream& operator << 216 (std::ostream& os, const PVNameCopyNoPath&); 217 218 friend std::ostream& operator << 219 (std::ostream& os, const PVPointerCopyNoPath&); 220 221 friend std::ostream& operator << 222 (std::ostream& os, 223 const std::vector<VisAttributesModifier>&); 224 225 private: 226 227 // Data members... 228 G4bool fWarning; // Print warnings if true. 229 const G4VisAttributes* fpDefaultVisAttributes; 230 DrawingStyle fDrawingStyle; // Drawing style. 231 G4int fNumberOfCloudPoints; // For drawing in cloud style. 232 // <= 0 means use viewer default. 233 G4bool fCulling; // Culling requested. 234 G4bool fCullInvisible; // Cull (don't Draw) invisible objects. 235 G4bool fDensityCulling; // Density culling requested. If so... 236 G4double fVisibleDensity; // ...density lower than this not drawn. 237 G4bool fCullCovered; // Cull daughters covered by opaque mothers. 238 G4int fCBDAlgorithmNumber; // Colour by density algorithm number. 239 std::vector<G4double> fCBDParameters; // Colour by density parameters. 240 G4double fExplodeFactor; // Explode along radius by this factor... 241 G4Point3D fExplodeCentre; // ...about this centre. 242 G4int fNoOfSides; // ...if polygon approximates circle. 243 G4DisplacedSolid* fpSectionSolid; // For generic section (DCUT). 244 CutawayMode fCutawayMode; // Cutaway mode. 245 G4DisplacedSolid* fpCutawaySolid; // For generic cutaways. 246 const G4Event* fpEvent; // Event being processed. 247 std::vector<VisAttributesModifier> fVisAttributesModifiers; 248 G4bool fSpecialMeshRendering; // Request special rendering of parameterised volumes 249 std::vector<PVNameCopyNo> fSpecialMeshVolumes; // If empty, all meshes. 250 }; 251 252 std::ostream& operator << 253 (std::ostream& os, const G4ModelingParameters&); 254 255 std::ostream& operator << 256 (std::ostream& os, const G4ModelingParameters::PVNameCopyNoPath&); 257 258 std::ostream& operator << 259 (std::ostream& os, const G4ModelingParameters::PVPointerCopyNoPath&); 260 261 std::ostream& operator << 262 (std::ostream& os, 263 const std::vector<G4ModelingParameters::VisAttributesModifier>&); 264 265 #include "G4ModelingParameters.icc" 266 267 #endif 268