Page MenuHomec4science

QhullRidge.cpp
No OneTemporary

File Metadata

Created
Wed, Oct 9, 04:15

QhullRidge.cpp

/****************************************************************************
**
** Copyright (c) 2008-2015 C.B. Barber. All rights reserved.
** $Id: //main/2015/qhull/src/libqhullcpp/QhullRidge.cpp#3 $$Change: 2066 $
** $DateTime: 2016/01/18 19:29:17 $$Author: bbarber $
**
****************************************************************************/
#//! QhullRidge -- Qhull's ridge structure, ridgeT, as a C++ class
#include "libqhullcpp/QhullRidge.h"
#include "libqhullcpp/QhullSets.h"
#include "libqhullcpp/QhullVertex.h"
#include "libqhullcpp/Qhull.h"
#ifdef _MSC_VER // Microsoft Visual C++ -- warning level 4
#pragma warning( disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable
#pragma warning( disable : 4996) // function was declared deprecated(strcpy, localtime, etc.)
#endif
namespace orgQhull {
#//!\name Class objects
ridgeT QhullRidge::
s_empty_ridge= {0,0,0,0,0,
0,0};
#//!\name Constructors
QhullRidge::QhullRidge(const Qhull &q)
: qh_ridge(&s_empty_ridge)
, qh_qh(q.qh())
{
}//Default
QhullRidge::QhullRidge(const Qhull &q, ridgeT *r)
: qh_ridge(r ? r : &s_empty_ridge)
, qh_qh(q.qh())
{
}//ridgeT
#//!\name foreach
//! Return True if nextRidge3d
//! Simplicial facets may have incomplete ridgeSets
//! Does not use qh_errexit()
bool QhullRidge::
hasNextRidge3d(const QhullFacet &f) const
{
if(!qh_qh){
return false;
}
vertexT *v= 0;
// Does not call qh_errexit(), TRY_QHULL_ not needed
ridgeT *ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v);
return (ridge!=0);
}//hasNextRidge3d
//! Return next ridge and optional vertex for a 3d facet and ridge
//! Does not use qh_errexit()
QhullRidge QhullRidge::
nextRidge3d(const QhullFacet &f, QhullVertex *nextVertex) const
{
vertexT *v= 0;
ridgeT *ridge= 0;
if(qh_qh){
// Does not call qh_errexit(), TRY_QHULL_ not needed
ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v);
if(!ridge){
throw QhullError(10030, "Qhull error nextRidge3d: missing next ridge for facet %d ridge %d. Does facet contain ridge?", f.id(), id());
}
}
if(nextVertex!=0){
*nextVertex= QhullVertex(qh_qh, v);
}
return QhullRidge(qh_qh, ridge);
}//nextRidge3d
}//namespace orgQhull
#//!\name Global functions
using std::endl;
using std::ostream;
using orgQhull::QhullRidge;
using orgQhull::QhullVertex;
ostream &
operator<<(ostream &os, const QhullRidge &r)
{
os << r.print("");
return os;
}//<< QhullRidge
//! Duplicate of qh_printridge [io_r.c]
ostream &
operator<<(ostream &os, const QhullRidge::PrintRidge &pr)
{
if(*pr.print_message){
os << pr.print_message << " ";
}else{
os << " - ";
}
QhullRidge r= *pr.ridge;
os << "r" << r.id();
if(r.getRidgeT()->tested){
os << " tested";
}
if(r.getRidgeT()->nonconvex){
os << " nonconvex";
}
os << endl;
os << r.vertices().print(" vertices:");
if(r.getRidgeT()->top && r.getRidgeT()->bottom){
os << " between f" << r.topFacet().id() << " and f" << r.bottomFacet().id() << endl;
}else if(r.getRidgeT()->top){
os << " top f" << r.topFacet().id() << endl;
}else if(r.getRidgeT()->bottom){
os << " bottom f" << r.bottomFacet().id() << endl;
}
return os;
}//<< PrintRidge

Event Timeline