Import Geant4 10.6.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2019-06-28 11:59:04 +02:00
parent 28a70706e0
commit d0f911957d
1056 changed files with 95168 additions and 78160 deletions
+38
View File
@@ -16,6 +16,44 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
13 June 2019 John Allison (OpenGL-V10-05-06)
- Part of vis-V10-05-20.
- Final changes for introduction of cloud drawing:
o Follow change of accessor name: GetNumberOfCloudPoints.
10 June 2019 John Allison (OpenGL-V10-05-05)
- Part of vis-V10-05-19.
- G4OpenGLImmediateXViewer:
Force double buffer context. (This can happen anyway when the display
list limit is reached in stored mode. Seems to be no problem.) We were
finding that the single buffer visual gave an X Error (BadMatch) on
some systems, so let us force the use if a double buffer. All systems
have double buffers nowadays.
- G4OpenGLStoredViewer and StoredQtViewer:
Force kernel visit on change of number of cloud points.
29 March 2019 John Allison (opengl-V10-05-04)
- G4OpenGLSceneHandler.cc: Fix Coverity warning. Minor tidying.
- G4OpenGLStoredViewer.cc and G4OpenGLStoredQtViewer.cc:
In CompareForKernelVisit require kernel visit if section plane changes.
Note this is required since *for now* sections are made in the base class
by using Boolean Processor.
24 March 2019 John Allison (opengl-V10-05-03)
- Fix bug in /vis/viewer/set/sectionPlane.
Involves using G4DisplacedSolid instead of plain G4VSolid.
18 March 2019 Gabriele Cosmo (opengl-V10-05-02)
- Corrected few typos in printout/comments.
10 March 2019 John Allison (opengl-V10-05-01)
- G4OpenGLStoredSceneHandler.cc: Tidy.
08 March 2019 John Allison (opengl-V10-05-00)
- G4OpenGLStoredSceneHandler.cc:
o Avoid re-using display lists for markers. They may have their own
position relative to the overall object transformation.
5 October 2018 John Allison (opengl-V10-04-10)
- In all header files, change
#ifdef G4VIS_BUILD_OPENGL_DRIVER
@@ -141,8 +141,8 @@ protected:
virtual ~G4OpenGLSceneHandler ();
void ProcessScene();
G4VSolid* CreateSectionSolid ();
G4VSolid* CreateCutawaySolid ();
G4DisplacedSolid* CreateSectionSolid ();
G4DisplacedSolid* CreateCutawaySolid ();
void ClearAndDestroyAtts(); // Destroys att holders and clears pick map.
@@ -61,7 +61,13 @@ G4OpenGLImmediateXViewer::~G4OpenGLImmediateXViewer () {}
void G4OpenGLImmediateXViewer::Initialise () {
CreateGLXContext (vi_immediate);
// CreateGLXContext (vi_immediate);
// Force double buffer context. (This can happen anyway when the display
// list limit is reached in stored mode. Seems to be no problem. We were
// finding that the single buffer visual gave an X Error (BadMatch) on
// some systems, so let us force the use if a double buffer. All systems
// have double buffers nowadays.
CreateGLXContext (vi_stored);
CreateMainWindow ();
CreateFontLists ();
@@ -321,19 +321,22 @@ void G4OpenGLSceneHandler::EndPrimitives2D ()
G4VSceneHandler::EndPrimitives2D ();
}
G4VSolid* G4OpenGLSceneHandler::CreateSectionSolid ()
G4DisplacedSolid* G4OpenGLSceneHandler::CreateSectionSolid ()
{
return G4VSceneHandler::CreateSectionSolid();
// If clipping done in G4OpenGLViewer::SetView
// return 0;
// Note: if you change this, you must also change
// G4OpenGLStoredViewer::CompareForKernelVisit
}
G4VSolid* G4OpenGLSceneHandler::CreateCutawaySolid ()
G4DisplacedSolid* G4OpenGLSceneHandler::CreateCutawaySolid ()
{
// Cutaway done in G4OpenGLViewer::SetView.
return 0;
// Else
// return G4VSceneHandler::CreateCutawaySolid();
// If cutaway done in G4OpenGLViewer::SetView.
return 0;
// Note: if you change this, you must also change
// G4OpenGLStoredViewer::CompareForKernelVisit
}
void G4OpenGLSceneHandler::AddPrimitive (const G4Polyline& line)
@@ -588,7 +591,8 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) {
// even if the colour is changed, for example, by interaction with a Qt
// window, current_colour does not change.
GLfloat* painting_colour;
GLfloat current_colour [4];
GLfloat clear_colour[4];
GLfloat current_colour[4];
glGetFloatv (GL_CURRENT_COLOR, current_colour);
G4bool isTransparent = false;
@@ -596,10 +600,8 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) {
isTransparent = true;
}
if (drawing_style == G4ViewParameters::hlr) {
// This is the colour used to paint surfaces in hlr mode.
GLfloat clear_colour[4];
glGetFloatv (GL_COLOR_CLEAR_VALUE, clear_colour);
painting_colour = clear_colour;
} else { // drawing_style == G4ViewParameters::hlhsr
@@ -676,7 +678,7 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) {
#ifndef G4OPENGL_VERSION_2
glEnable(GL_COLOR_MATERIAL);
#endif
glEnable (GL_CULL_FACE);
glEnable (GL_CULL_FACE);
glCullFace (GL_BACK);
glPolygonMode (GL_FRONT, GL_FILL);
}
@@ -870,14 +872,14 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) {
fEdgeFlag = false;
}
}
glNormal3d (normals[edgeCount].x(),
normals[edgeCount].y(),
normals[edgeCount].z());
glNormal3d (normals[edgeCount].x(),
normals[edgeCount].y(),
normals[edgeCount].z());
glVertex3d (vertex[edgeCount].x(),
vertex[edgeCount].y(),
vertex[edgeCount].z());
#else
fOglVertex.push_back(vertex[edgeCount].x());
fOglVertex.push_back(vertex[edgeCount].x());
fOglVertex.push_back(vertex[edgeCount].y());
fOglVertex.push_back(vertex[edgeCount].z());
@@ -71,7 +71,7 @@ G4bool G4OpenGLStoredQtSceneHandler::ExtraPOProcessing
// This call comes from a G4PhysicalVolumeModel. drawnPVPath is
// the path of the current drawn (non-culled) volume in terms of
// drawn (non-culled) ancesters. Each node is identified by a
// drawn (non-culled) ancestors. Each node is identified by a
// PVNodeID object, which is a physical volume and copy number. It
// is a vector of PVNodeIDs corresponding to the geometry hierarchy
// actually selected, i.e., not culled.
@@ -113,6 +113,7 @@ G4bool G4OpenGLStoredQtViewer::CompareForKernelVisit(G4ViewParameters& lastVP)
// modifiers (fTreeItemModels, etc.).
if (
(lastVP.GetDrawingStyle () != fVP.GetDrawingStyle ()) ||
(lastVP.GetNumberOfCloudPoints() != fVP.GetNumberOfCloudPoints()) ||
(lastVP.IsAuxEdgeVisible () != fVP.IsAuxEdgeVisible ()) ||
(lastVP.IsCulling () != fVP.IsCulling ()) ||
(lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) ||
@@ -153,17 +154,15 @@ G4bool G4OpenGLStoredQtViewer::CompareForKernelVisit(G4ViewParameters& lastVP)
(lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ()))
return true;
/**************************************************************
Section (DCUT) implemented locally. No need to visit kernel if
section plane itself changes.
if (lastVP.IsSection () &&
(lastVP.GetSectionPlane () != fVP.GetSectionPlane ()))
return true;
***************************************************************/
// /**************************************************************
// If section (DCUT) is implemented locally, comment this out.
if (lastVP.IsSection () &&
(lastVP.GetSectionPlane () != fVP.GetSectionPlane ()))
return true;
// ***************************************************************/
/**************************************************************
Cutaways implemented locally. No need to visit kernel if cutaway
planes themselves change.
If cutaways are implemented locally, comment this out.
if (lastVP.IsCutaway ()) {
if (lastVP.GetCutawayPlanes ().size () !=
fVP.GetCutawayPlanes ().size ()) return true;
@@ -181,7 +180,7 @@ G4bool G4OpenGLStoredQtViewer::CompareForKernelVisit(G4ViewParameters& lastVP)
if (lastVP.IsExplode () &&
(lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ()))
return true;
return false;
}
@@ -274,64 +274,69 @@ G4bool G4OpenGLStoredSceneHandler::AddPrimitivePreambleInternal
fPickMap[fPickName] = holder;
}
// Can we re-use a display list?
const G4VSolid* pSolid = 0;
G4PhysicalVolumeModel* pPVModel =
dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
// Can we re-use a display list?
if (isMarker)
// It is a marker, which may have its own position relative to fObjectTransformation
goto end_of_display_list_reuse_test;
if (fpViewer->GetViewParameters().GetVisAttributesModifiers().size())
// Touchables have been modified - don't risk re-using display list.
goto end_of_display_list_reuse_test;
if (pPVModel) {
// Check that it isn't a G4LogicalVolumeModel (which is a sub-class of
// G4PhysicalVolumeModel).
G4LogicalVolumeModel* pLVModel =
dynamic_cast<G4LogicalVolumeModel*>(pPVModel);
if (pLVModel)
// Logical volume model - don't re-use.
goto end_of_display_list_reuse_test;
// If part of the geometry hierarchy, i.e., from a
// G4PhysicalVolumeModel, check if a display list already exists for
// this solid, re-use it if possible. We could be smarter, and
// recognise repeated branches of the geometry hierarchy, for
// example. But this algorithm should be secure, I think...
G4VPhysicalVolume* pPV = pPVModel->GetCurrentPV();
if (!pPV)
// It's probably a dummy model, e.g., for a user-drawn hit?
goto end_of_display_list_reuse_test;
G4LogicalVolume* pLV = pPV->GetLogicalVolume();
if (!pLV)
// Dummy model again?
goto end_of_display_list_reuse_test;
pSolid = pLV->GetSolid();
EAxis axis = kRho;
G4VPhysicalVolume* pCurrentPV = pPVModel->GetCurrentPV();
if (pCurrentPV -> IsReplicated ()) {
G4int nReplicas;
G4double width;
G4double offset;
G4bool consuming;
pCurrentPV->GetReplicationData(axis,nReplicas,width,offset,consuming);
}
// Provided it is not parametrised (because if so, the
// solid's parameters might have been changed)...
if (!(pCurrentPV -> IsParameterised ()) &&
// Provided it is not replicated radially (because if so, the
// solid's parameters will have been changed)...
!(pCurrentPV -> IsReplicated () && axis == kRho) &&
// ...and if the solid has already been rendered...
(fSolidMap.find (pSolid) != fSolidMap.end ())) {
fDisplayListId = fSolidMap [pSolid];
PO po(fDisplayListId,fObjectTransformation);
if (isPicking) po.fPickName = fPickName;
po.fColour = c;
po.fMarkerOrPolyline = isMarkerOrPolyline;
fPOList.push_back(po);
// No need to test if gl commands are used (result of
// ExtraPOProcessing) because we have already decided they will
// not, at least not here. Also, pass a dummy G4Visible since
// not relevant for G4PhysicalVolumeModel.
(void) ExtraPOProcessing(G4Visible(), fPOList.size() - 1);
return false; // No further processing.
{ // It is a viable candidate for display list re-use
G4PhysicalVolumeModel* pPVModel = dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
if (pPVModel) {
// Check that it isn't a G4LogicalVolumeModel (which is a sub-class of
// G4PhysicalVolumeModel).
G4LogicalVolumeModel* pLVModel =
dynamic_cast<G4LogicalVolumeModel*>(pPVModel);
if (pLVModel)
// Logical volume model - don't re-use.
goto end_of_display_list_reuse_test;
// If part of the geometry hierarchy, i.e., from a
// G4PhysicalVolumeModel, check if a display list already exists for
// this solid, re-use it if possible. We could be smarter, and
// recognise repeated branches of the geometry hierarchy, for
// example. But this algorithm should be secure, I think...
G4VPhysicalVolume* pPV = pPVModel->GetCurrentPV();
if (!pPV)
// It's probably a dummy model, e.g., for a user-drawn hit?
goto end_of_display_list_reuse_test;
G4LogicalVolume* pLV = pPV->GetLogicalVolume();
if (!pLV)
// Dummy model again?
goto end_of_display_list_reuse_test;
pSolid = pLV->GetSolid();
EAxis axis = kRho;
G4VPhysicalVolume* pCurrentPV = pPVModel->GetCurrentPV();
if (pCurrentPV -> IsReplicated ()) {
G4int nReplicas;
G4double width;
G4double offset;
G4bool consuming;
pCurrentPV->GetReplicationData(axis,nReplicas,width,offset,consuming);
}
// Provided it is not parametrised (because if so, the
// solid's parameters might have been changed)...
if (!(pCurrentPV -> IsParameterised ()) &&
// Provided it is not replicated radially (because if so, the
// solid's parameters will have been changed)...
!(pCurrentPV -> IsReplicated () && axis == kRho) &&
// ...and if the solid has already been rendered...
(fSolidMap.find (pSolid) != fSolidMap.end ())) {
fDisplayListId = fSolidMap [pSolid];
PO po(fDisplayListId,fObjectTransformation);
if (isPicking) po.fPickName = fPickName;
po.fColour = c;
po.fMarkerOrPolyline = isMarkerOrPolyline;
fPOList.push_back(po);
// No need to test if gl commands are used (result of
// ExtraPOProcessing) because we have already decided they will
// not, at least not here. Also, pass a dummy G4Visible since
// not relevant for G4PhysicalVolumeModel.
(void) ExtraPOProcessing(G4Visible(), fPOList.size() - 1);
return false; // No further processing.
}
}
}
end_of_display_list_reuse_test:
@@ -72,6 +72,7 @@ G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) {
if (
(lastVP.GetDrawingStyle () != fVP.GetDrawingStyle ()) ||
(lastVP.GetNumberOfCloudPoints() != fVP.GetNumberOfCloudPoints()) ||
(lastVP.IsAuxEdgeVisible () != fVP.IsAuxEdgeVisible ()) ||
(lastVP.IsCulling () != fVP.IsCulling ()) ||
(lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) ||
@@ -103,17 +104,15 @@ G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) {
(lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ()))
return true;
/**************************************************************
Section (DCUT) implemented locally. No need to visit kernel if
section plane itself changes.
if (lastVP.IsSection () &&
(lastVP.GetSectionPlane () != fVP.GetSectionPlane ()))
return true;
***************************************************************/
// /**************************************************************
// If section (DCUT) is implemented locally, comment this out.
if (lastVP.IsSection () &&
(lastVP.GetSectionPlane () != fVP.GetSectionPlane ()))
return true;
// ***************************************************************/
/**************************************************************
Cutaways implemented locally. No need to visit kernel if cutaway
planes themselves change.
If cutaways are implemented locally, comment this out.
if (lastVP.IsCutaway ()) {
if (lastVP.GetCutawayPlanes ().size () !=
fVP.GetCutawayPlanes ().size ()) return true;
@@ -130,7 +129,7 @@ G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) {
if (lastVP.IsExplode () &&
(lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ()))
return true;
return true;
// Time window parameters operate on the existing database so no need
// to rebuild even if they change.
@@ -277,7 +277,7 @@ G4OpenGLViewerMessenger::G4OpenGLViewerMessenger()
new G4UIcommand("/vis/ogl/set/printSize", this);
fpCommandPrintSize->SetGuidance ("Set print size");
fpCommandPrintSize->SetGuidance ("Tip : -1 will mean 'print size' = 'window size'");
fpCommandPrintSize->SetGuidance (" Setting size greatter than your maximum graphic card capacity , will set the size to maximum size.");
fpCommandPrintSize->SetGuidance (" Setting size greater than your maximum graphic card capacity , will set the size to maximum size.");
G4UIparameter* parameterPrintSize;
parameterPrintSize = new G4UIparameter ("width", 'd', omitable = false);
parameterPrintSize->SetDefaultValue(-1);