27 #ifdef _MSC_VER // Microsoft Visual C++ -- warning level 4 28 #pragma warning( disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable 29 #pragma warning( disable : 4996) // function was declared deprecated(strcpy, localtime, etc.) 36 s_empty_facet= {0,0,0,0,{0},
49 : qh_facet(&s_empty_facet)
138 throw QhullError(10018,
"Qhull error: facetArea() or qh_getarea() previously called. triCoplanarOwner() is not available.");
149 throw QhullError(10052,
"Error: QhullFacet.voronoiVertex() requires option 'v' (qh_ASvoronoi)");
224 os <<
" NULLfacet" << endl;
228 os <<
" MERGEridge" << endl;
232 os <<
" DUPLICATEridge" << endl;
248 facetT *f= pr.facet->getFacetT();
257 numCoords= pr.facet->qh()->hull_dim-1;
262 for(
int k=0; k<numCoords; k++){
263 os << f->
center[k] <<
" ";
266 for(
int k=0; k<numCoords; k++){
271 numCoords= pr.facet->qh()->hull_dim;
278 for(
int k=0; k<numCoords; k++){
279 os << f->
center[k] <<
" ";
293 const facetT *f= p.facet->getFacetT();
298 os << (p.facet->isTopOrient() ?
" top" :
" bottom");
299 if(p.facet->isSimplicial()){
302 if(p.facet->isTriCoplanar()){
303 os <<
" tricoplanar";
305 if(p.facet->isUpperDelaunay()){
306 os <<
" upperDelaunay";
327 os <<
" mergehorizon";
330 os <<
" keepcentrum";
336 os <<
" mergeridge1";
339 os <<
" mergeridge2";
348 os <<
" notfurthest";
366 os <<
"- f" << facet.
id() << endl;
369 os <<
" - area: " << f->
f.
area << endl;
371 os <<
" - replacement: f" << f->
f.
replace->
id << endl;
374 os <<
" - shares same visible/horizon as f" << f->
f.
samecycle->
id << endl;
378 os <<
" - owner of normal & centrum is facet f" << f->
f.
triowner->
id << endl;
381 os <<
" - was horizon to f" << f->
f.
newcycle->
id << endl;
384 os <<
" - merges: " << f->
nummerge << endl;
391 if(f->
maxoutside > pr.facet->qh()->DISTround){
392 os <<
" - maxoutside: " << f->
maxoutside << endl;
399 os <<
" - outside set(furthest p" << furthest.
id() <<
"):" << endl;
400 for(QhullPointSet::iterator i=ps.
begin(); i!=ps.
end(); ++i){
404 }
else if(ps.
size()<21){
405 os << ps.
print(
" - outside set:");
407 os <<
" - outside set: " << ps.
size() <<
" points.";
408 os << furthest.
print(
" Furthest");
410 #if !qh_COMPUTEfurthest 411 os <<
" - furthest distance= " << f->
furthestdist << endl;
418 os <<
" - coplanar set(furthest p" << furthest.
id() <<
"):" << endl;
419 for(QhullPointSet::iterator i=cs.
begin(); i!=cs.
end(); ++i){
423 }
else if(cs.
size()<21){
424 os << cs.
print(
" - coplanar set:");
426 os <<
" - coplanar set: " << cs.
size() <<
" points.";
427 os << furthest.
print(
" Furthest");
431 os <<
" furthest distance= " << d << endl;
435 os << vs.
print(
" - vertices:");
454 if(f->
visible && pr.facet->qh()->NEWfacets){
455 os <<
" - ridges(ids may be garbage):";
456 for(QhullRidgeSet::iterator i=rs.begin(); i!=rs.end(); ++i){
458 os <<
" r" << r.
id();
462 os <<
" - ridges:" << endl;
466 for(QhullRidgeSet::iterator i=rs.begin(); i!=rs.end(); ++i){
472 for(
QhullRidge r= rs.first(); !
r.getRidgeT()->seen;
r=
r.nextRidge3d(facet)){
473 r.getRidgeT()->seen=
true;
476 if(!
r.hasNextRidge3d(facet)){
482 for(QhullFacetSet::iterator i=ns.begin(); i!=ns.end(); ++i){
485 for(QhullRidgeSet::iterator j=nrs.begin(); j!=nrs.end(); ++j){
495 if(ridgeCount!=rs.count()){
496 os <<
" - all ridges:";
497 for(QhullRidgeSet::iterator i=rs.begin(); i!=rs.end(); ++i){
499 os <<
" r" << r.
id();
503 for(QhullRidgeSet::iterator i=rs.begin(); i!=rs.end(); ++i){
QhullRidgeSet ridges() const
QhullFacet otherFacet(const QhullFacet &f) const
QhullHyperplane hyperplane() const
QhullHyperplane innerplane() const
QhullRidge – Qhull's ridge structure, ridgeT, as a C++ class.
void maybeThrowQhullMessage(int exitCode)
ridgeT * getRidgeT() const
A QhullFacet is the C++ equivalent to Qhull's facetT*.
QhullPointSet coplanarPoints() const
ostream & operator<<(ostream &os, const QhullFacet::PrintFacet &pr)
QhullPoint voronoiVertex()
PrintHyperplane print(const char *message) const
double facetArea()
Disables tricoplanarOwner()
facetT * getFacetT() const
QhullVertexSet vertices() const
#define qh_DUPLICATEridge
PrintFlags printFlags(const char *message) const
realT qh_facetarea(facetT *facet)
QhullQh * qh_qh
QhullQh/qhT for facetT, may be 0.
static facetT s_empty_facet
facetT * qh_facet
Corresponding facetT, may be 0 for corner cases (e.g., *facetSet.end()==0) and tricoplanarOwner() ...
const PrintVertexSet print(const char *message) const
pointT * qh_getcentrum(facetT *facet)
PrintRidges printRidges()
QhullSet< QhullRidge > QhullRidgeSet
QhullFacetSet neighborFacets() const
Interface to Qhull from C++.
PrintHeader printHeader()
PrintPointSet print(const char *message) const
PrintRidge print(const char *message) const
PrintIdentifiers printIdentifiers(const char *message) const
QhullHyperplane outerplane() const
double distance(const Coordinates &c) const
Undefined if c.size() != dimension()
void selectAll()
operator==() does not depend on isGood()
void qh_outerinner(facetT *facet, realT *outerplane, realT *innerplane)
PrintPoint print(const char *message) const
PrintFacet print(const char *message)
QhullPointSet outsidePoints() const
PrintCenter printCenter(qh_PRINT printFormat, const char *message)
void setOffset(coordT hyperplaneOffset)
QhullFacet tricoplanarOwner() const
pointT * qh_facetcenter(setT *vertices)