Import Geant4 11.2.2 source tree
This commit is contained in:
@@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-02-01 Gabriele Cosmo (geom-specific-V11-01-07)
|
||||
- Use std::size_t for array sizes in G4PolyhedraSide and G4PolyPhiFace.
|
||||
|
||||
## 2023-07-10 Evgueni Tcherniaev (geom-specific-V11-01-06)
|
||||
- Fixed bounding box calculation in G4VTwistedFaceted::BoundingLimits().
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
// Author: David C. Williams (davidw@scipp.ucsc.edu)
|
||||
// --------------------------------------------------------------------
|
||||
#ifndef G4POLYPHIFACE_HH
|
||||
#define G4POLYPHIFACE_HH
|
||||
#define G4POLYPHIFACE_HH 1
|
||||
|
||||
#include "G4VCSGface.hh"
|
||||
#include "G4TwoVector.hh"
|
||||
@@ -65,7 +65,7 @@ struct G4PolyPhiFaceVertex
|
||||
|
||||
struct G4PolyPhiFaceEdge
|
||||
{
|
||||
G4PolyPhiFaceEdge() {}
|
||||
G4PolyPhiFaceEdge() = default;
|
||||
G4PolyPhiFaceVertex *v0{nullptr}, *v1{nullptr}; // Corners
|
||||
G4double tr{.0}, tz{0.}, // Unit vector along edge
|
||||
length{0.}; // Length of edge
|
||||
@@ -205,7 +205,7 @@ class G4PolyPhiFace : public G4VCSGface
|
||||
|
||||
protected:
|
||||
|
||||
G4int numEdges; // Number of edges
|
||||
G4int numEdges = 0; // Number of edges
|
||||
G4PolyPhiFaceEdge* edges = nullptr; // The edges of the face
|
||||
G4PolyPhiFaceVertex* corners = nullptr; // And the corners
|
||||
G4ThreeVector normal; // Normal unit vector
|
||||
|
||||
@@ -56,7 +56,7 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance();
|
||||
|
||||
numEdges = rz->NumVertices();
|
||||
|
||||
|
||||
rMin = rz->Amin();
|
||||
rMax = rz->Amax();
|
||||
zMin = rz->Bmin();
|
||||
@@ -92,7 +92,8 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
//
|
||||
// Allocate corners
|
||||
//
|
||||
corners = new G4PolyPhiFaceVertex[numEdges];
|
||||
const std::size_t maxEdges = numEdges>0 ? numEdges : 1;
|
||||
corners = new G4PolyPhiFaceVertex[maxEdges];
|
||||
//
|
||||
// Fill them
|
||||
//
|
||||
@@ -112,13 +113,13 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
// Add pointer on prev corner
|
||||
//
|
||||
if( corn == corners )
|
||||
{ corn->prev = corners+numEdges-1;}
|
||||
{ corn->prev = corners+maxEdges-1;}
|
||||
else
|
||||
{ corn->prev = helper; }
|
||||
|
||||
// Add pointer on next corner
|
||||
//
|
||||
if( corn < corners+numEdges-1 )
|
||||
if( corn < corners+maxEdges-1 )
|
||||
{ corn->next = corn+1;}
|
||||
else
|
||||
{ corn->next = corners; }
|
||||
@@ -129,7 +130,7 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
//
|
||||
// Allocate edges
|
||||
//
|
||||
edges = new G4PolyPhiFaceEdge[numEdges];
|
||||
edges = new G4PolyPhiFaceEdge[maxEdges];
|
||||
|
||||
//
|
||||
// Fill them
|
||||
@@ -137,7 +138,7 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
G4double rFact = std::cos(0.5*deltaPhi);
|
||||
G4double rFactNormalize = 1.0/std::sqrt(1.0+rFact*rFact);
|
||||
|
||||
G4PolyPhiFaceVertex* prev = corners+numEdges-1,
|
||||
G4PolyPhiFaceVertex* prev = corners+maxEdges-1,
|
||||
* here = corners;
|
||||
G4PolyPhiFaceEdge* edge = edges;
|
||||
do // Loop checking, 13.08.2015, G.Cosmo
|
||||
@@ -176,12 +177,12 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
sideNorm += normal;
|
||||
|
||||
edge->norm3D = sideNorm.unit();
|
||||
} while( edge++, prev=here, ++here < corners+numEdges );
|
||||
} while( edge++, prev=here, ++here < corners+maxEdges );
|
||||
|
||||
//
|
||||
// Go back and fill in corner "normals"
|
||||
//
|
||||
G4PolyPhiFaceEdge* prevEdge = edges+numEdges-1;
|
||||
G4PolyPhiFaceEdge* prevEdge = edges+maxEdges-1;
|
||||
edge = edges;
|
||||
do // Loop checking, 13.08.2015, G.Cosmo
|
||||
{
|
||||
@@ -238,7 +239,7 @@ G4PolyPhiFace::G4PolyPhiFace( const G4ReduciblePolygon* rz,
|
||||
// Combine it with the r/z direction from the face
|
||||
//
|
||||
edge->v0->norm3D = rNorm*xyVector.unit() + G4ThreeVector( 0, 0, zNorm );
|
||||
} while( prevEdge=edge, ++edge < edges+numEdges );
|
||||
} while( prevEdge=edge, ++edge < edges+maxEdges );
|
||||
|
||||
//
|
||||
// Build point on surface
|
||||
@@ -335,23 +336,25 @@ void G4PolyPhiFace::CopyStuff( const G4PolyPhiFace& source )
|
||||
kCarTolerance = source.kCarTolerance;
|
||||
fSurfaceArea = source.fSurfaceArea;
|
||||
|
||||
const std::size_t maxEdges = (numEdges > 0) ? numEdges : 1;
|
||||
|
||||
//
|
||||
// Corner dynamic array
|
||||
//
|
||||
corners = new G4PolyPhiFaceVertex[numEdges];
|
||||
corners = new G4PolyPhiFaceVertex[maxEdges];
|
||||
G4PolyPhiFaceVertex *corn = corners,
|
||||
*sourceCorn = source.corners;
|
||||
do // Loop checking, 13.08.2015, G.Cosmo
|
||||
{
|
||||
*corn = *sourceCorn;
|
||||
} while( ++sourceCorn, ++corn < corners+numEdges );
|
||||
} while( ++sourceCorn, ++corn < corners+maxEdges );
|
||||
|
||||
//
|
||||
// Edge dynamic array
|
||||
//
|
||||
edges = new G4PolyPhiFaceEdge[numEdges];
|
||||
edges = new G4PolyPhiFaceEdge[maxEdges];
|
||||
|
||||
G4PolyPhiFaceVertex* prev = corners+numEdges-1,
|
||||
G4PolyPhiFaceVertex* prev = corners+maxEdges-1,
|
||||
* here = corners;
|
||||
G4PolyPhiFaceEdge* edge = edges,
|
||||
* sourceEdge = source.edges;
|
||||
@@ -360,7 +363,7 @@ void G4PolyPhiFace::CopyStuff( const G4PolyPhiFace& source )
|
||||
*edge = *sourceEdge;
|
||||
edge->v0 = prev;
|
||||
edge->v1 = here;
|
||||
} while( ++sourceEdge, ++edge, prev=here, ++here < corners+numEdges );
|
||||
} while( ++sourceEdge, ++edge, prev=here, ++here < corners+maxEdges );
|
||||
}
|
||||
|
||||
// Intersect
|
||||
@@ -1095,7 +1098,8 @@ void G4PolyPhiFace::Triangulate()
|
||||
// The copy of Polycone is made and this copy is reordered in order to
|
||||
// have a list of triangles. This list is used for GetPointOnFace().
|
||||
|
||||
auto tri_help = new G4PolyPhiFaceVertex[numEdges];
|
||||
const std::size_t maxEdges = (numEdges > 0) ? numEdges : 1;
|
||||
auto tri_help = new G4PolyPhiFaceVertex[maxEdges];
|
||||
triangles = tri_help;
|
||||
G4PolyPhiFaceVertex* triang = triangles;
|
||||
|
||||
@@ -1114,18 +1118,18 @@ void G4PolyPhiFace::Triangulate()
|
||||
triang->r = helper->r;
|
||||
triang->z = helper->z;
|
||||
triang->x = helper->x;
|
||||
triang->y= helper->y;
|
||||
triang->y = helper->y;
|
||||
|
||||
// add pointer on prev corner
|
||||
//
|
||||
if( helper==corners )
|
||||
{ triang->prev=triangles+numEdges-1; }
|
||||
{ triang->prev=triangles+maxEdges-1; }
|
||||
else
|
||||
{ triang->prev=helper2; }
|
||||
|
||||
// add pointer on next corner
|
||||
//
|
||||
if( helper<corners+numEdges-1 )
|
||||
if( helper<corners+maxEdges-1 )
|
||||
{ triang->next=triang+1; }
|
||||
else
|
||||
{ triang->next=triangles; }
|
||||
@@ -1229,11 +1233,11 @@ void G4PolyPhiFace::Triangulate()
|
||||
if(chose>=Achose1 && chose<Achose2)
|
||||
{
|
||||
G4ThreeVector point;
|
||||
point=points[i] ;
|
||||
surface_point=point;
|
||||
break;
|
||||
point=points[i];
|
||||
surface_point=point;
|
||||
break;
|
||||
}
|
||||
i++; Achose1=Achose2;
|
||||
++i; Achose1=Achose2;
|
||||
} while( i<numEdges-2 );
|
||||
|
||||
delete [] tri_help;
|
||||
|
||||
@@ -108,13 +108,13 @@ G4PolyhedraSide::G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ,
|
||||
//
|
||||
// Construct side plane vector set
|
||||
//
|
||||
numSide = theNumSide;
|
||||
deltaPhi = phiTotal/theNumSide;
|
||||
numSide = theNumSide>0 ? theNumSide : 1;
|
||||
deltaPhi = phiTotal/numSide;
|
||||
endPhi = startPhi+phiTotal;
|
||||
|
||||
vecs = new G4PolyhedraSideVec[numSide];
|
||||
|
||||
edges = new G4PolyhedraSideEdge[phiIsOpen ? numSide+1 : numSide];
|
||||
|
||||
const std::size_t maxSides = numSide;
|
||||
vecs = new G4PolyhedraSideVec[maxSides];
|
||||
edges = new G4PolyhedraSideEdge[phiIsOpen ? maxSides+1 : maxSides];
|
||||
|
||||
//
|
||||
// ...this is where we start
|
||||
@@ -207,7 +207,7 @@ G4PolyhedraSide::G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ,
|
||||
b1 = b2;
|
||||
c1 = c2;
|
||||
d1 = d2;
|
||||
} while( ++vec < vecs+numSide );
|
||||
} while( ++vec < vecs+maxSides );
|
||||
|
||||
//
|
||||
// Clean up hanging edge
|
||||
@@ -219,14 +219,14 @@ G4PolyhedraSide::G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ,
|
||||
}
|
||||
else
|
||||
{
|
||||
vecs[numSide-1].edges[1] = edges;
|
||||
vecs[maxSides-1].edges[1] = edges;
|
||||
}
|
||||
|
||||
//
|
||||
// Go back and fill in remaining fields in edges
|
||||
//
|
||||
vec = vecs;
|
||||
G4PolyhedraSideVec *prev = vecs+numSide-1;
|
||||
G4PolyhedraSideVec *prev = vecs+maxSides-1;
|
||||
do // Loop checking, 13.08.2015, G.Cosmo
|
||||
{
|
||||
edge = vec->edges[0]; // The edge between prev and vec
|
||||
@@ -249,7 +249,7 @@ G4PolyhedraSide::G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ,
|
||||
|
||||
eNorm = vec->edgeNorm[1] + prev->edgeNorm[1];
|
||||
edge->cornNorm[1] = eNorm.unit();
|
||||
} while( prev=vec, ++vec < vecs + numSide );
|
||||
} while( prev=vec, ++vec < vecs + maxSides );
|
||||
|
||||
if (phiIsOpen)
|
||||
{
|
||||
@@ -279,7 +279,7 @@ G4PolyhedraSide::G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ,
|
||||
//
|
||||
// Repeat for ending phi
|
||||
//
|
||||
vec = vecs + numSide - 1;
|
||||
vec = vecs + maxSides - 1;
|
||||
|
||||
normvec = vec->edges[1]->corner[0] - vec->edges[1]->corner[1];
|
||||
normvec = normvec.cross(vec->normal);
|
||||
@@ -356,11 +356,11 @@ void G4PolyhedraSide::CopyStuff( const G4PolyhedraSide& source )
|
||||
//
|
||||
// The simple stuff
|
||||
//
|
||||
numSide = source.numSide;
|
||||
r[0] = source.r[0];
|
||||
r[1] = source.r[1];
|
||||
z[0] = source.z[0];
|
||||
z[1] = source.z[1];
|
||||
numSide = source.numSide;
|
||||
startPhi = source.startPhi;
|
||||
deltaPhi = source.deltaPhi;
|
||||
endPhi = source.endPhi;
|
||||
@@ -380,7 +380,8 @@ void G4PolyhedraSide::CopyStuff( const G4PolyhedraSide& source )
|
||||
//
|
||||
// Duplicate edges
|
||||
//
|
||||
G4int numEdges = phiIsOpen ? numSide+1 : numSide;
|
||||
const std::size_t numSides = (numSide > 0) ? numSide : 1;
|
||||
const std::size_t numEdges = phiIsOpen ? numSides+1 : numSides;
|
||||
edges = new G4PolyhedraSideEdge[numEdges];
|
||||
|
||||
G4PolyhedraSideEdge *edge = edges,
|
||||
@@ -393,7 +394,7 @@ void G4PolyhedraSide::CopyStuff( const G4PolyhedraSide& source )
|
||||
//
|
||||
// Duplicate vecs
|
||||
//
|
||||
vecs = new G4PolyhedraSideVec[numSide];
|
||||
vecs = new G4PolyhedraSideVec[numSides];
|
||||
|
||||
G4PolyhedraSideVec *vec = vecs,
|
||||
*sourceVec = source.vecs;
|
||||
@@ -402,7 +403,7 @@ void G4PolyhedraSide::CopyStuff( const G4PolyhedraSide& source )
|
||||
*vec = *sourceVec;
|
||||
vec->edges[0] = edges + (sourceVec->edges[0] - source.edges);
|
||||
vec->edges[1] = edges + (sourceVec->edges[1] - source.edges);
|
||||
} while( ++sourceVec, ++vec < vecs + numSide );
|
||||
} while( ++sourceVec, ++vec < vecs + numSides );
|
||||
}
|
||||
|
||||
// Intersect
|
||||
|
||||
Reference in New Issue
Block a user