source: trunk/source/visualization/modeling/src/G4ModelingParameters.cc@ 1242

Last change on this file since 1242 was 954, checked in by garnier, 17 years ago

remise a jour

File size: 6.8 KB
Line 
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// $Id: G4ModelingParameters.cc,v 1.15 2006/11/14 14:42:08 allison Exp $
28// GEANT4 tag $Name: $
29//
30//
31// John Allison 31st December 1997.
32// Parameters associated with the modeling of GEANT4 objects.
33
34#include "G4ModelingParameters.hh"
35
36#include "G4ios.hh"
37#include "G4VisAttributes.hh"
38#include "G4ExceptionSeverity.hh"
39#include "G4Polyhedron.hh"
40
41G4ModelingParameters::G4ModelingParameters ():
42 fWarning (true),
43 fpDefaultVisAttributes (0),
44 fDrawingStyle (wf),
45 fCulling (false),
46 fCullInvisible (false),
47 fDensityCulling (false),
48 fVisibleDensity (0.01 * g / cm3),
49 fCullCovered (false),
50 fExplodeFactor (1.),
51 fNoOfSides (24),
52 fpSectionPolyhedron (0),
53 fpCutawayPolyhedron (0),
54 fpEvent (0)
55{}
56
57G4ModelingParameters::G4ModelingParameters
58(const G4VisAttributes* pDefaultVisAttributes,
59 G4ModelingParameters::DrawingStyle drawingStyle,
60 G4bool isCulling,
61 G4bool isCullingInvisible,
62 G4bool isDensityCulling,
63 G4double visibleDensity,
64 G4bool isCullingCovered,
65 G4int noOfSides
66 ):
67 fWarning (true),
68 fpDefaultVisAttributes (pDefaultVisAttributes),
69 fDrawingStyle (drawingStyle),
70 fCulling (isCulling),
71 fCullInvisible (isCullingInvisible),
72 fDensityCulling (isDensityCulling),
73 fVisibleDensity (visibleDensity),
74 fCullCovered (isCullingCovered),
75 fExplodeFactor (1.),
76 fNoOfSides (noOfSides),
77 fpSectionPolyhedron (0),
78 fpCutawayPolyhedron (0),
79 fpEvent (0)
80{}
81
82G4ModelingParameters::~G4ModelingParameters ()
83{
84 delete fpSectionPolyhedron;
85 delete fpCutawayPolyhedron;
86}
87
88void G4ModelingParameters::SetVisibleDensity (G4double visibleDensity) {
89 const G4double reasonableMaximum = 10.0 * g / cm3;
90 if (visibleDensity < 0 && fWarning) {
91 G4cout << "G4ModelingParameters::SetVisibleDensity: attempt to set negative "
92 "density - ignored." << G4endl;
93 }
94 else {
95 if (fVisibleDensity > reasonableMaximum && fWarning) {
96 G4cout << "G4ModelingParameters::SetVisibleDensity: density > "
97 << reasonableMaximum
98 << " g / cm3 - did you mean this?"
99 << G4endl;
100 }
101 fVisibleDensity = visibleDensity;
102 }
103}
104
105G4int G4ModelingParameters::SetNoOfSides (G4int nSides) {
106 const G4int nSidesMin = 12;
107 if (nSides < nSidesMin) {
108 nSides = nSidesMin;
109 if (fWarning)
110 G4cout << "G4ModelingParameters::SetNoOfSides: attempt to set the"
111 "\nnumber of sides per circle < " << nSidesMin
112 << "; forced to" << nSides << G4endl;
113 }
114 fNoOfSides = nSides;
115 return fNoOfSides;
116}
117
118std::ostream& operator << (std::ostream& os, const G4ModelingParameters& mp)
119{
120 os << "Modeling parameters (warning ";
121 if (mp.fWarning) os << "true";
122 else os << "false";
123 os << "):";
124
125 const G4VisAttributes* va = mp.fpDefaultVisAttributes;
126 os << "\n Default vis. attributes: ";
127 if (va) os << *va;
128 else os << "none";
129
130 os << "\n Current requested drawing style: ";
131 switch (mp.fDrawingStyle) {
132 case G4ModelingParameters::wf:
133 os << "wireframe"; break;
134 case G4ModelingParameters::hlr:
135 os << "hidden line removal (hlr)"; break;
136 case G4ModelingParameters::hsr:
137 os << "surface (hsr)"; break;
138 case G4ModelingParameters::hlhsr:
139 os << "surface and edges (hlhsr)"; break;
140 default: os << "unrecognised"; break;
141 }
142
143 os << "\n Culling: ";
144 if (mp.fCulling) os << "on";
145 else os << "off";
146
147 os << "\n Culling invisible objects: ";
148 if (mp.fCullInvisible) os << "on";
149 else os << "off";
150
151 os << "\n Density culling: ";
152 if (mp.fDensityCulling) {
153 os << "on - invisible if density less than "
154 << mp.fVisibleDensity / (1. * g / cm3) << " g cm^-3";
155 }
156 else os << "off";
157
158 os << "\n Culling daughters covered by opaque mothers: ";
159 if (mp.fCullCovered) os << "on";
160 else os << "off";
161
162 os << "\n Explode factor: " << mp.fExplodeFactor
163 << " about centre: " << mp.fExplodeCentre;
164
165 os << "\n No. of sides used in circle polygon approximation: "
166 << mp.fNoOfSides;
167
168 os << "\n Section (DCUT) polyhedron pointer: ";
169 if (!mp.fpSectionPolyhedron) os << "non-";
170 os << "null";
171
172 os << "\n Cutaway (DCUT) polyhedron pointer: ";
173 if (!mp.fpCutawayPolyhedron) os << "non-";
174 os << "null";
175
176 os << "\n Event pointer: " << mp.fpEvent;
177
178 return os;
179}
180
181G4bool G4ModelingParameters::operator !=
182(const G4ModelingParameters& mp) const {
183
184 if (
185 (fWarning != mp.fWarning) ||
186 (*fpDefaultVisAttributes != *mp.fpDefaultVisAttributes) ||
187 (fCulling != mp.fCulling) ||
188 (fCullInvisible != mp.fCullInvisible) ||
189 (fDensityCulling != mp.fDensityCulling) ||
190 (fCullCovered != mp.fCullCovered) ||
191 (fExplodeFactor != mp.fExplodeFactor) ||
192 (fExplodeCentre != mp.fExplodeCentre) ||
193 (fNoOfSides != mp.fNoOfSides) ||
194 (fpSectionPolyhedron != mp.fpSectionPolyhedron) ||
195 (fpCutawayPolyhedron != mp.fpCutawayPolyhedron) ||
196 (fpEvent != mp.fpEvent)
197 )
198 return true;
199
200 if (fDensityCulling &&
201 (fVisibleDensity != mp.fVisibleDensity)) return true;
202
203 return false;
204}
Note: See TracBrowser for help on using the repository browser.