Import Geant4 10.0.0 source tree
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * This Software is part of the AIDA Unified Solids Library package *
|
||||
// * See: https://aidasoft.web.cern.ch/USolids *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id:$
|
||||
//
|
||||
// --------------------------------------------------------------------
|
||||
//
|
||||
// UTrd
|
||||
//
|
||||
// Class description:
|
||||
//
|
||||
// A UTrd is a trapezoid with the x and y dimensions varying along z
|
||||
// functions.
|
||||
//
|
||||
// 19.10.12 Marek Gayer
|
||||
// Created from original implementation in Geant4
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
#ifndef USOLIDS_UTrd
|
||||
#define USOLIDS_UTrd
|
||||
|
||||
#include "VUSolid.hh"
|
||||
#include "UUtils.hh"
|
||||
|
||||
class UTrd : public VUSolid
|
||||
{
|
||||
enum ESide {kUndefined, kPX, kMX, kPY, kMY, kPZ, kMZ};
|
||||
public:
|
||||
UTrd() : VUSolid(), fDx1(0), fDx2(0), fDy1(0), fDy2(0), fDz(0) {}
|
||||
UTrd(const std::string& pName, double pdx1, double pdx2, double pdy1, double pdy2, double pdz);
|
||||
virtual ~UTrd() {}
|
||||
|
||||
UTrd(const UTrd& rhs);
|
||||
UTrd& operator=(const UTrd& rhs);
|
||||
|
||||
// Copy constructor and assignment operator
|
||||
|
||||
// Accessors
|
||||
|
||||
inline double GetXHalfLength1() const;
|
||||
inline double GetXHalfLength2() const;
|
||||
inline double GetYHalfLength1() const;
|
||||
inline double GetYHalfLength2() const;
|
||||
inline double GetZHalfLength() const;
|
||||
|
||||
// Modifiers
|
||||
|
||||
inline void SetXHalfLength1(double val);
|
||||
inline void SetXHalfLength2(double val);
|
||||
inline void SetYHalfLength1(double val);
|
||||
inline void SetYHalfLength2(double val);
|
||||
inline void SetZHalfLength(double val);
|
||||
// Navigation methods
|
||||
EnumInside Inside(const UVector3& aPoint) const;
|
||||
|
||||
virtual double SafetyFromInside(const UVector3& aPoint, bool aAccurate = false) const;
|
||||
|
||||
inline double SafetyFromInsideAccurate(const UVector3& aPoint) const;
|
||||
|
||||
virtual double SafetyFromOutside(const UVector3& aPoint, bool aAccurate = false) const;
|
||||
|
||||
inline double SafetyFromOutsideAccurate(const UVector3& aPoint) const;
|
||||
|
||||
virtual double DistanceToIn(const UVector3& aPoint,
|
||||
const UVector3& aDirection,
|
||||
// UVector3 &aNormalVector,
|
||||
double aPstep = UUtils::kInfinity) const;
|
||||
|
||||
|
||||
virtual double DistanceToOut(const UVector3& aPoint,
|
||||
const UVector3& aDirection,
|
||||
UVector3& aNormalVector,
|
||||
bool& aConvex,
|
||||
double aPstep = UUtils::kInfinity) const;
|
||||
|
||||
virtual bool Normal(const UVector3& aPoint, UVector3& aNormal) const;
|
||||
|
||||
void CheckAndSetAllParameters ( double pdx1, double pdx2,
|
||||
double pdy1, double pdy2,
|
||||
double pdz );
|
||||
|
||||
void SetAllParameters ( double pdx1, double pdx2,
|
||||
double pdy1, double pdy2,
|
||||
double pdz );
|
||||
|
||||
// virtual void Extent ( EAxisType aAxis, double &aMin, double &aMax ) const;
|
||||
void Extent(UVector3& aMin, UVector3& aMax) const;
|
||||
inline double Capacity();
|
||||
inline double SurfaceArea();
|
||||
inline VUSolid* Clone() const
|
||||
{
|
||||
return new UTrd(GetName(), fDx1, fDx2, fDy1, fDy2, fDz);
|
||||
}
|
||||
UGeometryType GetEntityType() const;
|
||||
|
||||
virtual void ComputeBBox(UBBox* /*aBox*/, bool /*aStore = false*/) {}
|
||||
|
||||
//G4Visualisation
|
||||
virtual void GetParametersList(int /*aNumber*/, double* /*aArray*/) const;
|
||||
std::ostream& StreamInfo(std::ostream& os) const;
|
||||
|
||||
UVector3 GetPointOnSurface() const;
|
||||
|
||||
private:
|
||||
inline UVector3 ApproxSurfaceNormal(const UVector3& p) const;
|
||||
inline double amin(int n, const double* a) const;
|
||||
inline double amax(int n, const double* a)const;
|
||||
double fDx1, fDx2, fDy1, fDy2, fDz;
|
||||
double fCubicVolume; // Cubic Volume
|
||||
double fSurfaceArea; // Surface Area
|
||||
};
|
||||
|
||||
#include "UTrd.icc"
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user