47 Create(phiStart, phiTotal, rz);
68 std::ostringstream message;
69 message <<
"Illegal input parameters - " <<
GetName() << std::endl
70 <<
" All R values must be >= 0 !";
75 double rzArea = rz->
Area();
81 std::ostringstream message;
82 message <<
"Illegal input parameters - " <<
GetName() << std::endl
83 <<
" R/Z Cross section is zero or near zero: " << rzArea;
91 std::ostringstream message;
92 message <<
"Illegal input parameters - " <<
GetName() << std::endl
93 <<
" Too few unique R/Z values !";
100 std::ostringstream message;
101 message <<
"Illegal input parameters - " <<
GetName() << std::endl
102 <<
" R/Z segments Cross !";
113 if (phiTotal <= 0 || phiTotal > 2 * UUtils::kPi - 1E-10)
129 endPhi = phiStart + phiTotal;
147 next->
r = iterRZ.
GetA();
148 next->
z = iterRZ.
GetB();
150 while (++next, iterRZ.
Next());
174 if (corner->
r < 1 / UUtils::kInfinity && next->
r < 1 / UUtils::kInfinity)
continue;
182 if (corner->
z > next->
z)
200 while (prev = corner, corner = next, corner >
corners);
269 if (
this == &source)
return *
this;
322 std::ostringstream message;
323 message <<
"Solid " <<
GetName() <<
" built using generic construct."
324 << std::endl <<
"Not applicable to the generic construct !";
365 return UUtils::kInfinity;
378 return std::string(
"GenericPolycone");
394 int oldprc = os.precision(16);
395 os <<
"-----------------------------------------------------------\n"
396 <<
" *** Dump for solid - " <<
GetName() <<
" ***\n"
397 <<
" ===================================================\n"
398 <<
" Solid type: UGenericPolycone\n"
400 <<
" starting phi angle : " <<
startPhi / (UUtils::kPi / 180.0) <<
" degrees \n"
401 <<
" ending phi angle : " <<
endPhi / (UUtils::kPi / 180.0) <<
" degrees \n";
404 os <<
" number of RZ points: " <<
numCorner <<
"\n"
405 <<
" RZ values (corners): \n";
412 os <<
"-----------------------------------------------------------\n";
413 os.precision(oldprc);
std::ostream & StreamInfo(std::ostream &os) const
UPolyconeSideRZ * corners
UVector3 GetPointOnSurface() const
bool RemoveRedundantVertices(double tolerance)
UGeometryType GetEntityType() const
bool MustBeOutside(const UVector3 &p) const
const std::string & GetName() const
VUSolid::EnumInside Inside(const UVector3 &p) const
UGenericPolycone(const std::string &name, double phiStart, double phiTotal, int numZPlanes, const double zPlane[], const double rInner[], const double rOuter[])
void Create(double phiStart, double phiTotal, UReduciblePolygon *rz)
bool RemoveDuplicateVertices(double tolerance)
bool BisectedBy(double a1, double b1, double a2, double b2, double tolerance)
static double Tolerance()
UEnclosingCylinder * enclosingCylinder
void Extent(UVector3 &aMin, UVector3 &aMax) const
void InitVoxels(UReduciblePolygon &z, double radius)
UVCSGfaceted & operator=(const UVCSGfaceted &source)
virtual ~UGenericPolycone()
void CopyStuff(const UGenericPolycone &source)
bool ShouldMiss(const UVector3 &p, const UVector3 &v) const
bool CrossesItself(double tolerance)
UGenericPolycone & operator=(const UGenericPolycone &source)
std::string UGeometryType
void Exception(const char *originOfException, const char *exceptionCode, ExceptionSeverity severity, int level, const char *description)
void Extent(UVector3 &aMin, UVector3 &aMax) const
UVector3 GetPointOnSurfaceGeneric() const
virtual double DistanceToIn(const UVector3 &p, const UVector3 &v, double aPstep=UUtils::kInfinity) const
virtual VUSolid::EnumInside Inside(const UVector3 &p) const
double DistanceToIn(const UVector3 &p, const UVector3 &v, double aPstep=UUtils::kInfinity) const