Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/modeling/include/G4ModelingParameters.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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