42 Create(phiStart, phiTotal, rz);
63 std::ostringstream message;
64 message <<
"Illegal input parameters - " <<
GetName() << std::endl
65 <<
" All R values must be >= 0 !";
70 double rzArea = rz->
Area();
76 std::ostringstream message;
77 message <<
"Illegal input parameters - " <<
GetName() << std::endl
78 <<
" R/Z Cross section is zero or near zero: " << rzArea;
86 std::ostringstream message;
87 message <<
"Illegal input parameters - " <<
GetName() << std::endl
88 <<
" Too few unique R/Z values !";
95 std::ostringstream message;
96 message <<
"Illegal input parameters - " <<
GetName() << std::endl
97 <<
" R/Z segments Cross !";
108 if (phiTotal <= 0 || phiTotal > 2 *
UUtils::kPi - 1E-10)
124 endPhi = phiStart + phiTotal;
142 next->
r = iterRZ.
GetA();
143 next->
z = iterRZ.
GetB();
145 while (++next, iterRZ.
Next());
177 if (corner->
z > next->
z)
195 while (prev = corner, corner = next, corner >
corners);
264 if (
this == &source)
return *
this;
317 std::ostringstream message;
318 message <<
"Solid " <<
GetName() <<
" built using generic construct."
319 << std::endl <<
"Not applicable to the generic construct !";
354 const UVector3& v,
double aPstep)
const
373 return std::string(
"GenericPolycone");
389 int oldprc = os.precision(16);
390 os <<
"-----------------------------------------------------------\n"
391 <<
" *** Dump for solid - " <<
GetName() <<
" ***\n"
392 <<
" ===================================================\n"
393 <<
" Solid type: UGenericPolycone\n"
399 os <<
" number of RZ points: " <<
numCorner <<
"\n"
400 <<
" RZ values (corners): \n";
407 os <<
"-----------------------------------------------------------\n";
408 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
static const double kInfinity
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)
void Exception(const char *originOfException, const char *exceptionCode, UExceptionSeverity severity, int level, const char *description)
std::string UGeometryType
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