58#if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) )
60#include <VecGeom/base/Global.h>
61#include <VecGeom/base/Vector3D.h>
71template <
class UnplacedVolume_t>
72class G4UAdapter :
public G4VSolid,
protected UnplacedVolume_t
76 using U3Vector = vecgeom::Vector3D<G4double>;
80 using UnplacedVolume_t::operator
delete;
81 using UnplacedVolume_t::operator
new;
87 G4UAdapter(
const G4String& name);
94 template <
typename... T>
95 G4UAdapter(
const G4String& name,
const T &... params);
100 virtual ~G4UAdapter();
105 G4UAdapter(
const G4UAdapter& rhs);
106 G4UAdapter&
operator=(
const G4UAdapter& rhs);
124 const G4VoxelLimits& pVoxelLimit,
125 const G4AffineTransform& pTransform,
185 const G4bool calcNorm =
false,
202 virtual void ComputeDimensions(G4VPVParameterisation* p,
204 const G4VPhysicalVolume* pRep)
override;
213 virtual G4double GetCubicVolume()
override;
222 virtual G4double GetSurfaceArea()
override;
233 virtual G4int GetNumOfConstituents()
const override;
238 virtual G4bool IsFaceted()
const override;
251 virtual G4VSolid* Clone()
const override;
256 virtual std::ostream& StreamInfo(std::ostream& os)
const override;
262 virtual void DescribeYourselfTo(G4VGraphicsScene& scene)
const override;
267 virtual G4VisExtent GetExtent()
const override;
272 virtual G4Polyhedron* CreatePolyhedron()
const override;
278 virtual G4Polyhedron* GetPolyhedron()
const override;
284 DistanceToOut(U3Vector
const& position, U3Vector
const& direction,
285 vecgeom::Precision stepMax = kInfinity)
const override
287 return UnplacedVolume_t::DistanceToOut(position, direction, stepMax);
291 Inside(U3Vector
const& aPoint)
const override
293 return UnplacedVolume_t::Inside(aPoint);
297 DistanceToIn(U3Vector
const& position, U3Vector
const& direction,
298 const vecgeom::Precision step_max = kInfinity)
const override
300 return UnplacedVolume_t::DistanceToIn(position, direction, step_max);
303 G4bool Normal(U3Vector
const& aPoint, U3Vector& aNormal)
const override
305 return UnplacedVolume_t::Normal(aPoint, aNormal);
308 void Extent(U3Vector& aMin, U3Vector& aMax)
const override
310 return UnplacedVolume_t::Extent(aMin, aMax);
313 U3Vector SamplePointOnSurface()
const override
315 return UnplacedVolume_t::SamplePointOnSurface();
320 mutable G4bool fRebuildPolyhedron =
false;
321 mutable G4Polyhedron* fPolyhedron =
nullptr;
326 using UnplacedVolume_t::DistanceToOut;
327 using UnplacedVolume_t::DistanceToIn;
332#include "G4UAdapter.icc"
G4bool operator==(const G4GeometryCell &k1, const G4GeometryCell &k2)
G4PVDivision & operator=(const G4PVDivision &)=delete
CLHEP::Hep3Vector G4ThreeVector
G4VPVParameterisation ia an abstract base class for Parameterisation, able to compute the transformat...
G4VSolid is an abstract base class for solids, physical shapes that can be tracked through....