mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-19 08:52:09 +00:00
Refactor folder (#10475)
Move many third-party components' source codes from the src folder to a new folder called deps_src. The goal is to make the code structure clearer and easier to navigate.
This commit is contained in:
124
deps_src/qhull/src/libqhullcpp/QhullRidge.cpp
Normal file
124
deps_src/qhull/src/libqhullcpp/QhullRidge.cpp
Normal file
@@ -0,0 +1,124 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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
|
||||
Reference in New Issue
Block a user