Import Geant4 9.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 17:01:34 +02:00
parent b1eb5424d2
commit e2d2f9810a
10384 changed files with 698580 additions and 628834 deletions
@@ -24,8 +24,7 @@
// ********************************************************************
//
//
// $Id: G4OpenGLImmediateSceneHandler.cc,v 1.35 2010-06-03 20:35:19 allison Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
//
// Andrew Walkden 10th February 1997
@@ -53,6 +52,9 @@
#include "G4Square.hh"
#include "G4Scale.hh"
#include "G4Polyhedron.hh"
#include "G4AttHolder.hh"
#include <typeinfo>
G4OpenGLImmediateSceneHandler::G4OpenGLImmediateSceneHandler
(G4VGraphicsSystem& system,const G4String& name):
@@ -64,69 +66,163 @@ G4OpenGLImmediateSceneHandler::~G4OpenGLImmediateSceneHandler ()
#include <iomanip>
void G4OpenGLImmediateSceneHandler::AddPrimitivePreamble(const G4Visible& visible)
G4bool G4OpenGLImmediateSceneHandler::AddPrimitivePreamble(const G4Visible& visible)
{
if (fpViewer->GetViewParameters().IsPicking()) {
glLoadName(++fPickName);
fPickMap[fPickName] = 0;
const G4Colour& c = GetColour (visible);
G4double opacity = c.GetAlpha ();
G4bool transparency_enabled = true;
G4bool isMarkerNotHidden = true;
G4OpenGLViewer* pViewer = dynamic_cast<G4OpenGLViewer*>(fpViewer);
if (pViewer) {
transparency_enabled = pViewer->transparency_enabled;
isMarkerNotHidden = pViewer->fVP.IsMarkerNotHidden();
}
G4bool isMarker = false;
try {
(void) dynamic_cast<const G4VMarker&>(visible);
isMarker = true;
}
catch (std::bad_cast) {}
G4bool isPolyline = false;
try {
(void) dynamic_cast<const G4Polyline&>(visible);
isPolyline = true;
}
catch (std::bad_cast) {}
G4bool isMarkerOrPolyline = isMarker || isPolyline;
G4bool treatAsTransparent = transparency_enabled && opacity < 1.;
G4bool treatAsNotHidden = isMarkerNotHidden && (isMarker || isPolyline);
if (fProcessing2D) glDisable (GL_DEPTH_TEST);
else {
if (isMarkerOrPolyline && isMarkerNotHidden)
glDisable (GL_DEPTH_TEST);
else {glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);}
}
const G4Colour& c = GetColour (visible);
glColor3d (c.GetRed (), c.GetGreen (), c.GetBlue ());
if (fThreePassCapable) {
// Ensure transparent objects are drawn opaque ones and before
// non-hidden markers. The problem of blending/transparency/alpha
// is quite a tricky one - see History of opengl-V07-01-01/2/3.
if (!(fSecondPassForTransparency || fThirdPassForNonHiddenMarkers)) {
// First pass...
if (treatAsTransparent) { // Request pass for transparent objects...
fSecondPassForTransparencyRequested = true;
}
if (treatAsNotHidden) { // Request pass for non-hidden markers...
fThirdPassForNonHiddenMarkersRequested = true;
}
// On first pass, transparent objects and non-hidden markers are not drawn...
if (treatAsTransparent || treatAsNotHidden) {
return false;
}
}
// On second pass, only transparent objects are drawn...
if (fSecondPassForTransparency) {
if (!treatAsTransparent) {
return false;
}
}
// On third pass, only non-hidden markers are drawn...
if (fThirdPassForNonHiddenMarkers) {
if (!treatAsNotHidden) {
return false;
}
}
} // fThreePassCapable
// Loads G4Atts for picking...
if (fpViewer->GetViewParameters().IsPicking()) {
glLoadName(++fPickName);
G4AttHolder* holder = new G4AttHolder;
LoadAtts(visible, holder);
fPickMap[fPickName] = holder;
}
if (transparency_enabled) {
glColor4d(c.GetRed(),c.GetGreen(),c.GetBlue(),c.GetAlpha());
} else {
glColor3d(c.GetRed(),c.GetGreen(),c.GetBlue());
}
return true;
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Polyline& polyline)
{
AddPrimitivePreamble(polyline);
G4OpenGLSceneHandler::AddPrimitive(polyline);
G4bool furtherprocessing = AddPrimitivePreamble(polyline);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(polyline);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Polymarker& polymarker)
{
AddPrimitivePreamble(polymarker);
G4OpenGLSceneHandler::AddPrimitive(polymarker);
G4bool furtherprocessing = AddPrimitivePreamble(polymarker);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(polymarker);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Text& text)
{
// Note: colour is still handled in
// G4OpenGLSceneHandler::AddPrimitive(const G4Text&).
AddPrimitivePreamble(text);
G4OpenGLSceneHandler::AddPrimitive(text);
G4bool furtherprocessing = AddPrimitivePreamble(text);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(text);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Circle& circle)
{
AddPrimitivePreamble(circle);
G4OpenGLSceneHandler::AddPrimitive(circle);
G4bool furtherprocessing = AddPrimitivePreamble(circle);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(circle);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Square& square)
{
AddPrimitivePreamble(square);
G4OpenGLSceneHandler::AddPrimitive(square);
G4bool furtherprocessing = AddPrimitivePreamble(square);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(square);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Scale& scale)
{
AddPrimitivePreamble(scale);
G4OpenGLSceneHandler::AddPrimitive(scale);
G4bool furtherprocessing = AddPrimitivePreamble(scale);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(scale);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron)
{
// Note: colour is still handled in
// G4OpenGLSceneHandler::AddPrimitive(const G4Polyhedron&).
AddPrimitivePreamble(polyhedron);
G4OpenGLSceneHandler::AddPrimitive(polyhedron);
G4bool furtherprocessing = AddPrimitivePreamble(polyhedron);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(polyhedron);
}
}
void G4OpenGLImmediateSceneHandler::AddPrimitive (const G4NURBS& nurbs)
{
// Note: colour is still handled in
// G4OpenGLSceneHandler::AddPrimitive(const G4NURBS&).
AddPrimitivePreamble(nurbs);
G4OpenGLSceneHandler::AddPrimitive(nurbs);
G4bool furtherprocessing = AddPrimitivePreamble(nurbs);
if (furtherprocessing) {
G4OpenGLSceneHandler::AddPrimitive(nurbs);
}
}
void G4OpenGLImmediateSceneHandler::BeginPrimitives
@@ -177,6 +273,8 @@ void G4OpenGLImmediateSceneHandler::BeginPrimitives2D
glLoadIdentity();
G4OpenGLTransform3D oglt (objectTransformation);
glMultMatrixd (oglt.GetGLMatrix ());
glDisable(GL_DEPTH_TEST); // But see parent scene handler!! In
glDisable (GL_LIGHTING); // some cases, we need to re-iterate this.
}
void G4OpenGLImmediateSceneHandler::EndPrimitives2D()
@@ -201,11 +299,9 @@ void G4OpenGLImmediateSceneHandler::EndModeling () {
G4VSceneHandler::EndModeling ();
}
void G4OpenGLImmediateSceneHandler::ClearTransientStore () {
G4VSceneHandler::ClearTransientStore ();
// Make sure screen corresponds to graphical database...
void G4OpenGLImmediateSceneHandler::ClearTransientStore ()
{
// Nothing to do except redraw the scene ready for the next event.
if (fpViewer) {
fpViewer -> SetView ();
fpViewer -> ClearView ();
@@ -213,45 +309,6 @@ void G4OpenGLImmediateSceneHandler::ClearTransientStore () {
}
}
void G4OpenGLImmediateSceneHandler::RequestPrimitives (const G4VSolid& solid)
{
if (fReadyForTransients) {
// Always draw transient solids, e.g., hits represented as solids.
// (As we have no control over the order of drawing of transient
// objects, we cannot do anything about transparent ones, as
// below, so always draw them.)
G4VSceneHandler::RequestPrimitives (solid);
return;
}
// For non-transient (run-duration) objects, ensure transparent
// objects are drawn last. The problem of
// blending/transparency/alpha is quite a tricky one - see History
// of opengl-V07-01-01/2/3.
// Get vis attributes - pick up defaults if none.
const G4VisAttributes* pVA =
fpViewer -> GetApplicableVisAttributes(fpVisAttribs);
const G4Colour& c = pVA -> GetColour ();
G4double opacity = c.GetAlpha ();
if (!fSecondPass) {
G4bool transparency_enabled = true;
G4OpenGLViewer* pViewer = dynamic_cast<G4OpenGLViewer*>(fpViewer);
if (pViewer) transparency_enabled = pViewer->transparency_enabled;
if (transparency_enabled && opacity < 1.) {
// On first pass, transparent objects are not drawn, but flag is set...
fSecondPassRequested = true;
return;
}
}
// On second pass, opaque objects are not drwan...
if (fSecondPass && opacity >= 1.) return;
// Else invoke base class method...
G4VSceneHandler::RequestPrimitives (solid);
}
G4int G4OpenGLImmediateSceneHandler::fSceneIdCount = 0;
#endif