00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef G4MODELINGPARAMETERS_HH
00037 #define G4MODELINGPARAMETERS_HH
00038
00039 #include "globals.hh"
00040 #include "G4VisExtent.hh"
00041 #include "G4VisAttributes.hh"
00042 #include "G4PhysicalVolumeModel.hh"
00043
00044 #include <vector>
00045 #include <utility>
00046
00047 class G4LogicalVolume;
00048 class G4VisAttributes;
00049 class G4VSolid;
00050 class G4Event;
00051
00052 class G4ModelingParameters {
00053
00054 public:
00055
00056
00057 enum DrawingStyle {
00058 wf,
00059 hlr,
00060 hsr,
00061 hlhsr
00062 };
00063
00064
00065
00066 enum VisAttributesSignifier {
00067 VASVisibility,
00068 VASDaughtersInvisible,
00069 VASColour,
00070 VASLineStyle,
00071 VASLineWidth,
00072 VASForceWireframe,
00073 VASForceSolid,
00074 VASForceAuxEdgeVisible,
00075 VASForceLineSegmentsPerCircle
00076 };
00077 class PVNameCopyNo {
00078 public:
00079 PVNameCopyNo(G4String name, G4int copyNo):
00080 fName(name), fCopyNo(copyNo) {}
00081 const G4String& GetName() const {return fName;}
00082 G4int GetCopyNo() const {return fCopyNo;}
00083 private:
00084 G4String fName;
00085 G4int fCopyNo;
00086 };
00087 typedef std::vector<PVNameCopyNo> PVNameCopyNoPath;
00088 typedef PVNameCopyNoPath::const_iterator PVNameCopyNoPathConstIterator;
00089 class VisAttributesModifier {
00090 public:
00091 VisAttributesModifier
00092 (const G4VisAttributes& visAtts,
00093 VisAttributesSignifier signifier,
00094 const PVNameCopyNoPath& path):
00095 fVisAtts(visAtts), fSignifier(signifier), fPVNameCopyNoPath(path) {}
00096 VisAttributesModifier
00097 (const G4VisAttributes& visAtts,
00098 VisAttributesSignifier signifier,
00099 const std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>& path);
00100 const G4VisAttributes& GetVisAttributes() const
00101 {return fVisAtts;}
00102 VisAttributesSignifier GetVisAttributesSignifier() const
00103 {return fSignifier;}
00104 const PVNameCopyNoPath& GetPVNameCopyNoPath() const
00105 {return fPVNameCopyNoPath;}
00106 private:
00107 G4VisAttributes fVisAtts;
00108 VisAttributesSignifier fSignifier;
00109 PVNameCopyNoPath fPVNameCopyNoPath;
00110 };
00111
00112 G4ModelingParameters ();
00113
00114 G4ModelingParameters (const G4VisAttributes* pDefaultVisAttributes,
00115 DrawingStyle drawingStyle,
00116 G4bool isCulling,
00117 G4bool isCullingInvisible,
00118 G4bool isDensityCulling,
00119 G4double visibleDensity,
00120 G4bool isCullingCovered,
00121 G4int noOfSides);
00122
00123
00124 ~G4ModelingParameters ();
00125
00126
00127
00128 G4bool operator != (const G4ModelingParameters&) const;
00129
00130
00131 G4bool IsWarning () const;
00132 const G4VisAttributes* GetDefaultVisAttributes () const;
00133 DrawingStyle GetDrawingStyle () const;
00134 G4bool IsCulling () const;
00135 G4bool IsCullingInvisible () const;
00136 G4bool IsDensityCulling () const;
00137 G4double GetVisibleDensity () const;
00138 G4bool IsCullingCovered () const;
00139 G4bool IsExplode () const;
00140 G4double GetExplodeFactor () const;
00141 const G4Point3D& GetExplodeCentre () const;
00142 G4int GetNoOfSides () const;
00143 G4VSolid* GetSectionSolid () const;
00144 G4VSolid* GetCutawaySolid () const;
00145 const G4Event* GetEvent () const;
00146 const std::vector<VisAttributesModifier>& GetVisAttributesModifiers() const;
00147
00148
00149 void SetWarning (G4bool);
00150 void SetDefaultVisAttributes (const G4VisAttributes* pDefaultVisAttributes);
00151 void SetDrawingStyle (DrawingStyle);
00152 void SetCulling (G4bool);
00153 void SetCullingInvisible (G4bool);
00154 void SetDensityCulling (G4bool);
00155 void SetVisibleDensity (G4double);
00156 void SetCullingCovered (G4bool);
00157 void SetExplodeFactor (G4double explodeFactor);
00158 void SetExplodeCentre (const G4Point3D& explodeCentre);
00159 G4int SetNoOfSides (G4int);
00160 void SetSectionSolid (G4VSolid* pSectionSolid);
00161 void SetCutawaySolid (G4VSolid* pCutawaySolid);
00162 void SetEvent (const G4Event* pEvent);
00163 void SetVisAttributesModifiers(const std::vector<VisAttributesModifier>);
00164
00165 static G4bool PVNameCopyNoPathNotEqual
00166 (const PVNameCopyNoPath&,
00167 const PVNameCopyNoPath&);
00168
00169 static G4bool VAMSNotEqual
00170 (const std::vector<VisAttributesModifier>&,
00171 const std::vector<VisAttributesModifier>&);
00172
00173 friend std::ostream& operator <<
00174 (std::ostream& os, const G4ModelingParameters&);
00175
00176 friend std::ostream& operator <<
00177 (std::ostream& os, const PVNameCopyNoPath&);
00178
00179 friend std::ostream& operator <<
00180 (std::ostream& os,
00181 const std::vector<VisAttributesModifier>&);
00182
00183 private:
00184
00185
00186 G4bool fWarning;
00187 const G4VisAttributes* fpDefaultVisAttributes;
00188 DrawingStyle fDrawingStyle;
00189 G4bool fCulling;
00190 G4bool fCullInvisible;
00191 G4bool fDensityCulling;
00192 G4double fVisibleDensity;
00193 G4bool fCullCovered;
00194 G4double fExplodeFactor;
00195 G4Point3D fExplodeCentre;
00196 G4int fNoOfSides;
00197 G4VSolid* fpSectionSolid;
00198 G4VSolid* fpCutawaySolid;
00199 const G4Event* fpEvent;
00200 std::vector<VisAttributesModifier> fVisAttributesModifiers;
00201 };
00202
00203 std::ostream& operator <<
00204 (std::ostream& os, const G4ModelingParameters&);
00205
00206 std::ostream& operator <<
00207 (std::ostream& os, const G4ModelingParameters::PVNameCopyNoPath&);
00208
00209 std::ostream& operator <<
00210 (std::ostream& os,
00211 const std::vector<G4ModelingParameters::VisAttributesModifier>&);
00212
00213 #include "G4ModelingParameters.icc"
00214
00215 #endif