Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Analysis.AlgorithmBehavior/qhull-2012.1/src/libqhullcpp/QhullRidge.h @ 10207

Last change on this file since 10207 was 10207, checked in by ascheibe, 11 years ago

#1886 added a unit test for volume calculation and the qhull library

File size: 4.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (c) 2008-2012 C.B. Barber. All rights reserved.
4** $Id: //main/2011/qhull/src/libqhullcpp/QhullRidge.h#6 $$Change: 1464 $
5** $DateTime: 2012/01/25 22:58:41 $$Author: bbarber $
6**
7****************************************************************************/
8
9#ifndef QHULLRIDGE_H
10#define QHULLRIDGE_H
11
12#include "QhullSet.h"
13#include "QhullVertex.h"
14#include "QhullVertexSet.h"
15#include "QhullFacet.h"
16extern "C" {
17    #include "libqhull/qhull_a.h"
18}
19
20#include <ostream>
21
22namespace orgQhull {
23
24#//ClassRef
25    class QhullVertex;
26    class QhullVertexSet;
27    class QhullFacet;
28
29#//Types
30    //! QhullRidge -- Qhull's ridge structure, ridgeT [libqhull.h], as a C++ class
31    class QhullRidge;
32    typedef QhullSet<QhullRidge>  QhullRidgeSet;
33    typedef QhullSetIterator<QhullRidge>  QhullRidgeSetIterator;
34
35    // see QhullSets.h for QhullRidgeSet and QhullRidgeSetIterator -- avoids circular references
36
37/************************
38a ridge is hull_dim-1 simplex between two neighboring facets.  If the
39facets are non-simplicial, there may be more than one ridge between
40two facets.  E.G. a 4-d hypercube has two triangles between each pair
41of neighboring facets.
42
43topological information:
44    vertices            a set of vertices
45    top,bottom          neighboring facets with orientation
46
47geometric information:
48    tested              True if ridge is clearly convex
49    nonconvex           True if ridge is non-convex
50*/
51
52class QhullRidge {
53
54#//Fields
55    ridgeT             *qh_ridge;
56
57#//Class objects
58    static ridgeT       s_empty_ridge;
59
60public:
61#//Constants
62
63#//Constructors
64                        QhullRidge() : qh_ridge(&s_empty_ridge) {}
65                        // Creates an alias.  Does not copy QhullRidge.  Needed for return by value and parameter passing
66                        QhullRidge(const QhullRidge &o) : qh_ridge(o.qh_ridge) {}
67                        // Creates an alias.  Does not copy QhullRidge.  Needed for vector<QhullRidge>
68    QhullRidge         &operator=(const QhullRidge &o) { qh_ridge= o.qh_ridge; return *this; }
69                       ~QhullRidge() {}
70
71#//Conversion
72                        //Implicit conversion from ridgeT
73                        QhullRidge(ridgeT *r) : qh_ridge(r ? r : &s_empty_ridge) {}
74    ridgeT             *getRidgeT() const { return qh_ridge; }
75
76#//QhullSet<QhullRidge>
77    ridgeT             *getBaseT() const { return getRidgeT(); }
78
79#//getSet
80    QhullFacet          bottomFacet() const { return QhullFacet(qh_ridge->bottom); }
81    int                 dimension() const { return QhullSetBase::count(qh_ridge->vertices); }
82    int                 id() const { return qh_ridge->id; }
83    bool                isDefined() const { return qh_ridge != &s_empty_ridge; }
84    bool                operator==(const QhullRidge &o) const { return qh_ridge==o.qh_ridge; }
85    bool                operator!=(const QhullRidge &o) const { return !operator==(o); }
86    QhullFacet          otherFacet(QhullFacet f) const { return QhullFacet(qh_ridge->top==f.getFacetT() ? qh_ridge->bottom : qh_ridge->top); }
87    QhullFacet          topFacet() const { return QhullFacet(qh_ridge->top); }
88
89#//forEach
90    bool                hasNextRidge3d(const QhullFacet f) const;
91    QhullRidge          nextRidge3d(const QhullFacet f) const { return nextRidge3d(f, 0); }
92    QhullRidge          nextRidge3d(const QhullFacet f, QhullVertex *nextVertex) const;
93    QhullVertexSet      vertices() const { return QhullVertexSet(qh_ridge->vertices); }
94
95#//IO
96
97    struct PrintRidge{
98        const QhullRidge *ridge;
99        int             run_id;
100                        PrintRidge(int qhRunId, const QhullRidge &r) : ridge(&r), run_id(qhRunId) {}
101    };//PrintRidge
102    PrintRidge          print(int qhRunId) const { return PrintRidge(qhRunId, *this); }
103};//class QhullRidge
104
105}//namespace orgQhull
106
107std::ostream &operator<<(std::ostream &os, const orgQhull::QhullRidge &r);
108std::ostream &operator<<(std::ostream &os, const orgQhull::QhullRidge::PrintRidge &pr);
109
110#endif // QHULLRIDGE_H
Note: See TracBrowser for help on using the repository browser.