Import Geant4 10.0.0 source tree
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * This Software is part of the AIDA Unified Solids Library package *
|
||||
// * See: https://aidasoft.web.cern.ch/USolids *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id:$
|
||||
//
|
||||
// --------------------------------------------------------------------
|
||||
//
|
||||
// UOrb
|
||||
//
|
||||
// Class description:
|
||||
//
|
||||
// A simple Orb defined by half-lengths on the three axis.
|
||||
// The center of the Orb matches the origin of the local reference frame.
|
||||
//
|
||||
// 19.10.12 Marek Gayer
|
||||
// Created from original implementation in Geant4
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
#ifndef USOLIDS_UOrb
|
||||
#define USOLIDS_UOrb
|
||||
|
||||
#include "VUSolid.hh"
|
||||
#include "UUtils.hh"
|
||||
|
||||
class UOrb : public VUSolid
|
||||
{
|
||||
|
||||
public:
|
||||
UOrb() : VUSolid(), fR(0), fRTolerance(0) {}
|
||||
UOrb(const std::string& name, double pRmax);
|
||||
~UOrb() {}
|
||||
|
||||
UOrb(const UOrb& rhs);
|
||||
UOrb& operator=(const UOrb& rhs);
|
||||
|
||||
// Accessors
|
||||
inline double GetRadius() const;
|
||||
// Modifiers
|
||||
inline void SetRadius(double newRmax);
|
||||
|
||||
// Navigation methods
|
||||
EnumInside Inside(const UVector3& aPo6int) const;
|
||||
|
||||
double SafetyFromInside(const UVector3& aPoint,
|
||||
bool aAccurate = false) const;
|
||||
double SafetyFromOutside(const UVector3& aPoint,
|
||||
bool aAccurate = false) const;
|
||||
double DistanceToIn(const UVector3& aPoint,
|
||||
const UVector3& aDirection,
|
||||
double aPstep = UUtils::kInfinity) const;
|
||||
|
||||
double DistanceToOut(const UVector3& aPoint,
|
||||
const UVector3& aDirection,
|
||||
UVector3& aNormalVector,
|
||||
bool& aConvex,
|
||||
double aPstep = UUtils::kInfinity) const;
|
||||
|
||||
bool Normal(const UVector3& aPoint, UVector3& aNormal) const;
|
||||
void Extent(UVector3& aMin, UVector3& aMax) const;
|
||||
inline double Capacity();
|
||||
inline double SurfaceArea();
|
||||
UGeometryType GetEntityType() const;
|
||||
|
||||
void ComputeBBox(UBBox* /*aBox*/, bool /*aStore = false*/) {}
|
||||
|
||||
//G4Visualisation
|
||||
void GetParametersList(int /*aNumber*/, double* /*aArray*/) const;
|
||||
|
||||
VUSolid* Clone() const;
|
||||
|
||||
double GetRadialTolerance()
|
||||
{
|
||||
return fRTolerance;
|
||||
}
|
||||
|
||||
UVector3 GetPointOnSurface() const;
|
||||
|
||||
std::ostream& StreamInfo(std::ostream& os) const;
|
||||
|
||||
private:
|
||||
double fR;
|
||||
double fRTolerance;
|
||||
double fCubicVolume; // Cubic Volume
|
||||
double fSurfaceArea; // Surface Area
|
||||
|
||||
double DistanceToOutForOutsidePoints(const UVector3& p, const UVector3& v, UVector3& n) const;
|
||||
|
||||
};
|
||||
|
||||
inline double UOrb::GetRadius() const
|
||||
{
|
||||
return fR;
|
||||
}
|
||||
inline void UOrb::SetRadius(double newRmax)
|
||||
{
|
||||
fR = newRmax;
|
||||
}
|
||||
|
||||
inline double UOrb::Capacity()
|
||||
{
|
||||
if (fCubicVolume != 0.)
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
fCubicVolume = (4 * UUtils::kPi / 3) * fR * fR * fR;
|
||||
}
|
||||
return fCubicVolume;
|
||||
}
|
||||
|
||||
inline double UOrb::SurfaceArea()
|
||||
{
|
||||
if (fSurfaceArea != 0.)
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
fSurfaceArea = (4 * UUtils::kPi) * fR * fR;
|
||||
}
|
||||
return fSurfaceArea;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user