65#if defined(G4GEOM_USE_USOLIDS)
66#define G4GEOM_USE_USPHERE 1
69#if defined(G4GEOM_USE_USPHERE)
70 #define G4USphere G4Sphere
149 const G4bool calcNorm =
false,
150 G4bool* validNorm =
nullptr,
161 std::ostream&
StreamInfo(std::ostream& os)
const override;
182 inline void Initialize();
187 inline void CheckSPhiAngle(
G4double sPhi);
188 inline void CheckDPhiAngle(
G4double dPhi);
193 inline void InitializePhiTrigonometry();
194 inline void InitializeThetaTrigonometry();
207 enum ESide {kNull,kRMin,kRMax,kSPhi,kEPhi,kSTheta,kETheta};
211 enum ENorm {kNRMin,kNRMax,kNSPhi,kNEPhi,kNSTheta,kNETheta};
213 G4double fRminTolerance, fRmaxTolerance, kAngTolerance,
214 kRadTolerance, fEpsilon = 2.e-11;
218 G4double fRmin, fRmax, fSPhi, fDPhi, fSTheta, fDTheta;
222 G4double sinCPhi, cosCPhi, cosHDPhi, cosHDPhiOT, cosHDPhiIT,
223 sinSPhi, cosSPhi, sinEPhi, cosEPhi, hDPhi, cPhi, ePhi;
227 G4double sinSTheta, cosSTheta, sinETheta, cosETheta,
228 tanSTheta, tanSTheta2, tanETheta, tanETheta2, eTheta;
232 G4bool fFullPhiSphere=
false, fFullThetaSphere=
false, fFullSphere=
true;
236 G4double halfCarTolerance, halfAngTolerance;
241#include "G4Sphere.icc"
G4ThreeVector SurfaceNormal(const G4ThreeVector &p) const override
G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const override
EInside Inside(const G4ThreeVector &p) const override
G4double GetStartPhiAngle() const
void SetDeltaPhiAngle(G4double newDphi)
void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep) override
G4Sphere(const G4String &pName, G4double pRmin, G4double pRmax, G4double pSPhi, G4double pDPhi, G4double pSTheta, G4double pDTheta)
G4VSolid * Clone() const override
G4double GetSinStartTheta() const
G4VisExtent GetExtent() const override
G4double GetCosStartPhi() const
void SetStartThetaAngle(G4double newSTheta)
G4ThreeVector GetPointOnSurface() const override
G4double GetCubicVolume() override
G4double GetDeltaPhiAngle() const
G4double GetCosEndTheta() const
void SetOuterRadius(G4double newRmax)
void SetDeltaThetaAngle(G4double newDTheta)
void SetInnerRadius(G4double newRMin)
G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits &pVoxelLimit, const G4AffineTransform &pTransform, G4double &pmin, G4double &pmax) const override
G4Sphere(const G4Sphere &rhs)
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetCosEndPhi() const
G4double GetSinEndTheta() const
G4double GetDeltaThetaAngle() const
G4double GetSinEndPhi() const
void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const override
G4double GetSinStartPhi() const
G4Sphere & operator=(const G4Sphere &rhs)
G4double GetStartThetaAngle() const
void DescribeYourselfTo(G4VGraphicsScene &scene) const override
G4double GetCosStartTheta() const
G4double GetSurfaceArea() override
G4GeometryType GetEntityType() const override
G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const override
void SetStartPhiAngle(G4double newSphi, G4bool trig=true)
std::ostream & StreamInfo(std::ostream &os) const override
G4Polyhedron * CreatePolyhedron() const override