Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4OpenGLStoredViewer.cc
이 파일의 문서화 페이지로 가기
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: G4OpenGLStoredViewer.cc 109510 2018-04-26 07:15:57Z gcosmo $
28 //
29 //
30 // Andrew Walkden 7th February 1997
31 // Class G4OpenGLStoredViewer : Encapsulates the `storedness' of
32 // an OpenGL view, for inheritance by
33 // derived (X, Xm...) classes.
34 
35 #ifdef G4VIS_BUILD_OPENGL_DRIVER
36 
37 #include "G4OpenGLStoredViewer.hh"
38 
39 #include "G4PhysicalConstants.hh"
41 #include "G4Text.hh"
42 #include "G4Circle.hh"
43 #include "G4UnitsTable.hh"
44 #include "G4Scene.hh"
45 #include "G4OpenGLTransform3D.hh"
46 
47 G4OpenGLStoredViewer::G4OpenGLStoredViewer
48 (G4OpenGLStoredSceneHandler& sceneHandler):
49 G4VViewer (sceneHandler, -1),
50 G4OpenGLViewer (sceneHandler),
51 fG4OpenGLStoredSceneHandler (sceneHandler),
52 fDepthTestEnable(true)
53 {
54  fLastVP = fDefaultVP; // Not sure if this gets executed before or
55  // after G4VViewer::G4VViewer!! Doesn't matter much.
56 }
57 
58 G4OpenGLStoredViewer::~G4OpenGLStoredViewer () {}
59 
60 void G4OpenGLStoredViewer::KernelVisitDecision () {
61 
62  // If there's a significant difference with the last view parameters
63  // of either the scene handler or this viewer, trigger a rebuild.
64 
65  if (!fG4OpenGLStoredSceneHandler.fTopPODL ||
66  CompareForKernelVisit(fLastVP)) {
67  NeedKernelVisit ();
68  }
69  fLastVP = fVP;
70 }
71 
72 G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) {
73 
74  if (
75  (lastVP.GetDrawingStyle () != fVP.GetDrawingStyle ()) ||
76  (lastVP.IsAuxEdgeVisible () != fVP.IsAuxEdgeVisible ()) ||
77  (lastVP.IsCulling () != fVP.IsCulling ()) ||
78  (lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) ||
79  (lastVP.IsDensityCulling () != fVP.IsDensityCulling ()) ||
80  (lastVP.IsCullingCovered () != fVP.IsCullingCovered ()) ||
81  (lastVP.GetCBDAlgorithmNumber() !=
82  fVP.GetCBDAlgorithmNumber()) ||
83  (lastVP.IsSection () != fVP.IsSection ()) ||
84  // Section (DCUT) implemented locally. But still need to visit
85  // kernel if status changes so that back plane culling can be
86  // switched.
87  (lastVP.IsCutaway () != fVP.IsCutaway ()) ||
88  // Cutaways implemented locally. But still need to visit kernel
89  // if status changes so that back plane culling can be switched.
90  (lastVP.IsExplode () != fVP.IsExplode ()) ||
91  (lastVP.GetNoOfSides () != fVP.GetNoOfSides ()) ||
92  (lastVP.GetDefaultVisAttributes()->GetColour() !=
93  fVP.GetDefaultVisAttributes()->GetColour()) ||
95  fVP.GetDefaultTextVisAttributes()->GetColour()) ||
96  (lastVP.GetBackgroundColour ()!= fVP.GetBackgroundColour ())||
97  (lastVP.IsPicking () != fVP.IsPicking ()) ||
98  (lastVP.GetVisAttributesModifiers() !=
99  fVP.GetVisAttributesModifiers())
100  )
101  return true;
102 
103  if (lastVP.IsDensityCulling () &&
104  (lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ()))
105  return true;
106 
107  /**************************************************************
108  Section (DCUT) implemented locally. No need to visit kernel if
109  section plane itself changes.
110  if (lastVP.IsSection () &&
111  (lastVP.GetSectionPlane () != fVP.GetSectionPlane ()))
112  return true;
113  ***************************************************************/
114 
115  /**************************************************************
116  Cutaways implemented locally. No need to visit kernel if cutaway
117  planes themselves change.
118  if (lastVP.IsCutaway ()) {
119  if (lastVP.GetCutawayPlanes ().size () !=
120  fVP.GetCutawayPlanes ().size ()) return true;
121  for (size_t i = 0; i < lastVP.GetCutawayPlanes().size(); ++i)
122  if (lastVP.GetCutawayPlanes()[i] != fVP.GetCutawayPlanes()[i])
123  return true;
124  }
125  ***************************************************************/
126 
127  if (lastVP.GetCBDAlgorithmNumber() > 0) {
128  if (lastVP.GetCBDParameters().size() != fVP.GetCBDParameters().size()) return true;
129  else if (lastVP.GetCBDParameters() != fVP.GetCBDParameters()) return true;
130  }
131 
132  if (lastVP.IsExplode () &&
133  (lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ()))
134  return true;
135 
136  // Time window parameters operate on the existing database so no need
137  // to rebuild even if they change.
138 
139  return false;
140 }
141 
142 void G4OpenGLStoredViewer::DrawDisplayLists () {
143 
144  // We moved these from G4OpenGLViewer to G4ViewParamaters. To avoid
145  // editing many lines below we introduce these convenient aliases.
146 #define CONVENIENT_DOUBLE_ALIAS(q) const G4double& f##q = fVP.Get##q();
147 #define CONVENIENT_BOOL_ALIAS(q) const G4bool& f##q = fVP.Is##q();
148  CONVENIENT_DOUBLE_ALIAS(StartTime)
149  CONVENIENT_DOUBLE_ALIAS(EndTime)
150  CONVENIENT_DOUBLE_ALIAS(FadeFactor)
151  CONVENIENT_BOOL_ALIAS(DisplayHeadTime)
152  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeX)
153  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeY)
154  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeSize)
155  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeRed)
156  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeGreen)
157  CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeBlue)
158  CONVENIENT_BOOL_ALIAS(DisplayLightFront)
159  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontX)
160  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontY)
161  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontZ)
162  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontT)
163  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontRed)
164  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontGreen)
165  CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontBlue)
166 
167  const G4Planes& cutaways = fVP.GetCutawayPlanes();
168  G4bool cutawayUnion = fVP.IsCutaway() &&
169  fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion;
170  const size_t nCutaways = cutawayUnion? cutaways.size(): 1;
171  G4int iPass = 1;
172  G4bool secondPassForTransparencyRequested = false;
173  G4bool thirdPassForNonHiddenMarkersRequested = false;
174  fDepthTestEnable = true;
175  glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);
176  do {
177  for (size_t iCutaway = 0; iCutaway < nCutaways; ++iCutaway) {
178 
179  if (cutawayUnion) {
180  double a[4];
181  a[0] = cutaways[iCutaway].a();
182  a[1] = cutaways[iCutaway].b();
183  a[2] = cutaways[iCutaway].c();
184  a[3] = cutaways[iCutaway].d();
185  glClipPlane (GL_CLIP_PLANE2, a);
186  glEnable (GL_CLIP_PLANE2);
187  }
188 
189  G4bool isPicking = fVP.IsPicking();
190 
191  for (size_t iPO = 0;
192  iPO < fG4OpenGLStoredSceneHandler.fPOList.size(); ++iPO) {
193  if (POSelected(iPO)) {
194  G4OpenGLStoredSceneHandler::PO& po =
195  fG4OpenGLStoredSceneHandler.fPOList[iPO];
196  G4Colour c = po.fColour;
197  DisplayTimePOColourModification(c,iPO);
198  const G4bool isTransparent = c.GetAlpha() < 1.;
199  if ( iPass == 1) {
200  if (isTransparent && transparency_enabled) {
201  secondPassForTransparencyRequested = true;
202  continue;
203  }
204  if (po.fMarkerOrPolyline && fVP.IsMarkerNotHidden()) {
205  thirdPassForNonHiddenMarkersRequested = true;
206  continue;
207  }
208  } else if (iPass == 2) { // Second pass for transparency.
209  if (!isTransparent) {
210  continue;
211  }
212  } else { // Third pass for non-hidden markers
213  if (!po.fMarkerOrPolyline) {
214  continue;
215  }
216  }
217  if (isPicking) glLoadName(po.fPickName);
218  if (transparency_enabled) {
219  glColor4d(c.GetRed(),c.GetGreen(),c.GetBlue(),c.GetAlpha());
220  } else {
221  glColor3d(c.GetRed(),c.GetGreen(),c.GetBlue());
222  }
223  if (po.fMarkerOrPolyline && fVP.IsMarkerNotHidden()) {
224  if (fDepthTestEnable !=false) {
225  glDisable (GL_DEPTH_TEST);
226  fDepthTestEnable = false;
227  }
228  } else {
229  if (fDepthTestEnable !=true) {
230  glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);
231  fDepthTestEnable = true;
232  }
233  }
234  if (po.fpG4TextPlus) {
235  if (po.fpG4TextPlus->fProcessing2D) {
236  glMatrixMode (GL_PROJECTION);
237  glPushMatrix();
238  glLoadIdentity();
239  g4GlOrtho (-1., 1., -1., 1., -G4OPENGL_FLT_BIG, G4OPENGL_FLT_BIG);
240  glMatrixMode (GL_MODELVIEW);
241  glPushMatrix();
242  glLoadIdentity();
243  G4OpenGLTransform3D oglt (po.fTransform);
244  glMultMatrixd (oglt.GetGLMatrix ());
245  // This text is from a PODL. We don't want to create a new PODL.
246  AddPrimitiveForASingleFrame(po.fpG4TextPlus->fG4Text);
247  } else {
248  glPushMatrix();
249  G4OpenGLTransform3D oglt (po.fTransform);
250  glMultMatrixd (oglt.GetGLMatrix ());
251  // This text is from a PODL. We don't want to create a new PODL.
252  AddPrimitiveForASingleFrame(po.fpG4TextPlus->fG4Text);
253  glPopMatrix();
254  }
255 
256  if (po.fpG4TextPlus->fProcessing2D) {
257  glMatrixMode (GL_PROJECTION);
258  glPopMatrix();
259  glMatrixMode (GL_MODELVIEW);
260  glPopMatrix();
261  }
262  } else {
263  glPushMatrix();
264  G4OpenGLTransform3D oglt (po.fTransform);
265  glMultMatrixd (oglt.GetGLMatrix ());
266  glCallList (po.fDisplayListId);
267  glPopMatrix();
268  }
269  }
270  }
271 
272  G4Transform3D lastMatrixTransform;
273  G4bool first = true;
274 
275  for (size_t iTO = 0;
276  iTO < fG4OpenGLStoredSceneHandler.fTOList.size(); ++iTO) {
277  if (TOSelected(iTO)) {
278  G4OpenGLStoredSceneHandler::TO& to =
279  fG4OpenGLStoredSceneHandler.fTOList[iTO];
280  const G4Colour& c = to.fColour;
281  const G4bool isTransparent = c.GetAlpha() < 1.;
282  if ( iPass == 1) {
283  if (isTransparent && transparency_enabled) {
284  secondPassForTransparencyRequested = true;
285  continue;
286  }
287  if (to.fMarkerOrPolyline && fVP.IsMarkerNotHidden()) {
288  thirdPassForNonHiddenMarkersRequested = true;
289  continue;
290  }
291  } else if (iPass == 2) { // Second pass for transparency.
292  if (!isTransparent) {
293  continue;
294  }
295  } else { // Third pass for non-hidden markers
296  if (!to.fMarkerOrPolyline) {
297  continue;
298  }
299  }
300  if (to.fMarkerOrPolyline && fVP.IsMarkerNotHidden()) {
301  if (fDepthTestEnable !=false) {
302  glDisable (GL_DEPTH_TEST);
303  fDepthTestEnable = false;
304  }
305  } else {
306  if (fDepthTestEnable !=true) {
307  glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);
308  fDepthTestEnable = true;
309  }
310  }
311  if (to.fEndTime >= fStartTime && to.fStartTime <= fEndTime) {
312  if (fVP.IsPicking()) glLoadName(to.fPickName);
313  if (to.fpG4TextPlus) {
314  if (to.fpG4TextPlus->fProcessing2D) {
315  glMatrixMode (GL_PROJECTION);
316  glPushMatrix();
317  glLoadIdentity();
318  g4GlOrtho (-1., 1., -1., 1., -G4OPENGL_FLT_BIG, G4OPENGL_FLT_BIG);
319  glMatrixMode (GL_MODELVIEW);
320  glPushMatrix();
321  glLoadIdentity();
322  }
323  G4OpenGLTransform3D oglt (to.fTransform);
324  glMultMatrixd (oglt.GetGLMatrix ());
325  if (transparency_enabled) {
326  glColor4d(c.GetRed(),c.GetGreen(),c.GetBlue(),c.GetAlpha());
327  } else {
328  glColor3d(c.GetRed(),c.GetGreen(),c.GetBlue());
329  }
330  // This text is from a TODL. We don't want to create a new TODL.
331  AddPrimitiveForASingleFrame(to.fpG4TextPlus->fG4Text);
332  if (to.fpG4TextPlus->fProcessing2D) {
333  glMatrixMode (GL_PROJECTION);
334  glPopMatrix();
335  glMatrixMode (GL_MODELVIEW);
336  glPopMatrix();
337  }
338  } else {
339  if (to.fTransform != lastMatrixTransform) {
340  if (! first) {
341  glPopMatrix();
342  }
343  first = false;
344  glPushMatrix();
345  G4OpenGLTransform3D oglt (to.fTransform);
346  glMultMatrixd (oglt.GetGLMatrix ());
347  }
348  const G4Colour& cc = to.fColour;
349  if (fFadeFactor > 0. && to.fEndTime < fEndTime) {
350  // Brightness scaling factor
351  G4double bsf = 1. - fFadeFactor *
352  ((fEndTime - to.fEndTime) / (fEndTime - fStartTime));
353  const G4Colour& bg = fVP.GetBackgroundColour();
354  if (transparency_enabled) {
355  glColor4d
356  (bsf * cc.GetRed() + (1. - bsf) * bg.GetRed(),
357  bsf * cc.GetGreen() + (1. - bsf) * bg.GetGreen(),
358  bsf * cc.GetBlue() + (1. - bsf) * bg.GetBlue(),
359  bsf * cc.GetAlpha() + (1. - bsf) * bg.GetAlpha());
360  } else {
361  glColor3d
362  (bsf * cc.GetRed() + (1. - bsf) * bg.GetRed(),
363  bsf * cc.GetGreen() + (1. - bsf) * bg.GetGreen(),
364  bsf * cc.GetBlue() + (1. - bsf) * bg.GetBlue());
365  }
366  } else {
367  if (transparency_enabled) {
368  glColor4d(cc.GetRed(),cc.GetGreen(),cc.GetBlue(),cc.GetAlpha());
369  } else {
370  glColor3d(cc.GetRed(),cc.GetGreen(),cc.GetBlue());
371  }
372  }
373  glCallList (to.fDisplayListId);
374  }
375  if (to.fTransform != lastMatrixTransform) {
376  lastMatrixTransform = to.fTransform;
377  }
378  }
379  }
380  }
381  if (! first) {
382  glPopMatrix();
383  }
384 
385  if (cutawayUnion) glDisable (GL_CLIP_PLANE2);
386  } // iCutaway
387 
388  if (iPass == 2) secondPassForTransparencyRequested = false; // Done.
389  if (iPass == 3) thirdPassForNonHiddenMarkersRequested = false; // Done.
390 
391  if (secondPassForTransparencyRequested) iPass = 2;
392  else if (thirdPassForNonHiddenMarkersRequested) iPass = 3;
393  else break;
394 
395  } while (true);
396 
397  // Display time at "head" of time range, which is fEndTime...
398  if (fDisplayHeadTime && fEndTime < G4VisAttributes::fVeryLongTime) {
399  glMatrixMode (GL_PROJECTION);
400  glPushMatrix();
401  glLoadIdentity();
402  g4GlOrtho (-1., 1., -1., 1., -G4OPENGL_FLT_BIG, G4OPENGL_FLT_BIG);
403  glMatrixMode (GL_MODELVIEW);
404  glPushMatrix();
405  glLoadIdentity();
406  G4Text headTimeText(G4BestUnit(fEndTime,"Time"),
407  G4Point3D(fDisplayHeadTimeX, fDisplayHeadTimeY, 0.));
408  headTimeText.SetScreenSize(fDisplayHeadTimeSize);
409  G4VisAttributes visAtts (G4Colour
410  (fDisplayHeadTimeRed,
411  fDisplayHeadTimeGreen,
412  fDisplayHeadTimeBlue));
413  headTimeText.SetVisAttributes(&visAtts);
414  AddPrimitiveForASingleFrame(headTimeText);
415  glMatrixMode (GL_PROJECTION);
416  glPopMatrix();
417  glMatrixMode (GL_MODELVIEW);
418  glPopMatrix();
419  }
420 
421  // Display light front...
422  if (fDisplayLightFront && fEndTime < G4VisAttributes::fVeryLongTime) {
423  G4double lightFrontRadius = (fEndTime - fDisplayLightFrontT) * c_light;
424  if (lightFrontRadius > 0.) {
425  G4Point3D lightFrontCentre(fDisplayLightFrontX, fDisplayLightFrontY, fDisplayLightFrontZ);
426  G4Point3D circleCentre = lightFrontCentre;
427  G4double circleRadius = lightFrontRadius;
428  if (fVP.GetFieldHalfAngle() > 0.) {
429  // Perspective view. Find horizon centre and radius...
430  G4Point3D targetPoint = fSceneHandler.GetScene()->GetStandardTargetPoint() +
431  fVP.GetCurrentTargetPoint();
432  G4double sceneRadius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius();
433  if(sceneRadius <= 0.) sceneRadius = 1.;
434  G4double cameraDistance = fVP.GetCameraDistance(sceneRadius);
435  G4Point3D cameraPosition = targetPoint + cameraDistance * fVP.GetViewpointDirection().unit();
436  G4Vector3D lightFrontToCameraDirection = cameraPosition - lightFrontCentre;
437  G4double lightFrontCentreDistance = lightFrontToCameraDirection.mag();
438  /*
439  G4cout << "cameraPosition: " << cameraPosition
440  << ", lightFrontCentre: " << lightFrontCentre
441  << ", lightFrontRadius: " << lightFrontRadius
442  << ", lightFrontCentreDistance: " << lightFrontCentreDistance
443  << ", dot: " << lightFrontToCameraDirection * fVP.GetViewpointDirection()
444  << G4endl;
445  */
446  if (lightFrontToCameraDirection * fVP.GetViewpointDirection() > 0. && lightFrontRadius < lightFrontCentreDistance) {
447  // Light front in front of camera...
448  G4double sineHorizonAngle = lightFrontRadius / lightFrontCentreDistance;
449  circleCentre = lightFrontCentre + (lightFrontRadius * sineHorizonAngle) * lightFrontToCameraDirection.unit();
450  circleRadius = lightFrontRadius * std::sqrt(1. - std::pow(sineHorizonAngle, 2));
451  /*
452  G4cout << "sineHorizonAngle: " << sineHorizonAngle
453  << ", circleCentre: " << circleCentre
454  << ", circleRadius: " << circleRadius
455  << G4endl;
456  */
457  } else {
458  circleRadius = -1.;
459  }
460  }
461  if (circleRadius > 0.) {
462  G4Circle lightFront(circleCentre);
463  lightFront.SetWorldRadius(circleRadius);
464  glColor3d(fDisplayLightFrontRed,
465  fDisplayLightFrontGreen,
466  fDisplayLightFrontBlue);
467  AddPrimitiveForASingleFrame(lightFront);
468  }
469  }
470  }
471 }
472 
473 void G4OpenGLStoredViewer::AddPrimitiveForASingleFrame(const G4Text& text)
474 {
475  // We don't want this to get into a display list or a TODL or a PODL so
476  // use the fMemoryForDisplayLists flag.
477  G4bool memoryForDisplayListsKeep = fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists;
478  fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists = false;
479  fG4OpenGLStoredSceneHandler.G4OpenGLStoredSceneHandler::AddPrimitive(text);
480  fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists = memoryForDisplayListsKeep;
481 }
482 
483 void G4OpenGLStoredViewer::AddPrimitiveForASingleFrame(const G4Circle& circle)
484 {
485  // We don't want this to get into a display list or a TODL or a PODL so
486  // use the fMemoryForDisplayLists flag.
487  G4bool memoryForDisplayListsKeep = fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists;
488  fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists = false;
489  fG4OpenGLStoredSceneHandler.G4OpenGLStoredSceneHandler::AddPrimitive(circle);
490  fG4OpenGLStoredSceneHandler.fMemoryForDisplayLists = memoryForDisplayListsKeep;
491 }
492 
493 #endif
const std::vector< G4ModelingParameters::VisAttributesModifier > & GetVisAttributesModifiers() const
G4double GetExplodeFactor() const
std::vector< ExP01TrackerHit * > a
Definition: ExP01Classes.hh:33
static constexpr G4double fVeryLongTime
G4bool IsDensityCulling() const
BasicVector3D< T > unit() const
G4bool IsAuxEdgeVisible() const
const std::vector< G4double > & GetCBDParameters() const
G4bool IsCulling() const
G4bool IsPicking() const
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4bool IsExplode() const
Definition: G4Text.hh:73
G4int GetCBDAlgorithmNumber() const
G4bool IsCutaway() const
const G4VisAttributes * GetDefaultVisAttributes() const
G4int GetNoOfSides() const
G4bool IsCullingInvisible() const
G4double GetRed() const
Definition: G4Colour.hh:151
const G4ThreeVector const G4double const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
DrawingStyle GetDrawingStyle() const
int G4int
Definition: G4Types.hh:78
static constexpr double c_light
const G4Colour & GetBackgroundColour() const
G4double GetAlpha() const
Definition: G4Colour.hh:154
const G4VisAttributes * GetDefaultTextVisAttributes() const
G4double GetBlue() const
Definition: G4Colour.hh:153
G4double GetGreen() const
Definition: G4Colour.hh:152
G4bool IsCullingCovered() const
G4double GetVisibleDensity() const
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
std::vector< G4Plane3D > G4Planes
const G4Colour & GetColour() const
static G4bool GetColour(const G4String &key, G4Colour &result)
Definition: G4Colour.cc:163
G4bool IsSection() const