mirror of https://github.com/CGAL/cgal
Triangulation_2 new scheme - first trial
This commit is contained in:
parent
2ffbb9a22a
commit
461f4e4dee
File diff suppressed because it is too large
Load Diff
|
|
@ -137,21 +137,28 @@ public:
|
|||
|
||||
// CHECKING
|
||||
bool is_valid(bool verbose = false, int level = 0) const;
|
||||
|
||||
|
||||
// HELPING
|
||||
bool has_vertex(const Vertex* v) const;
|
||||
//bool has_edge(const Vertex* v1, const Vertex* v2) const;
|
||||
//bool has_face(const Vertex* v1, const Vertex* v2, const Vertex* v3) const;
|
||||
//Edge has_edge(const Vertex* v1, const Vertex* v2) const;
|
||||
//Face* has_face(const Vertex* v1, const Vertex* v2, const Vertex* v3) const;
|
||||
|
||||
void copy_tds(const Tds &tds);
|
||||
Vertex* copy_tds(const Tds &tds, const Vertex*);
|
||||
|
||||
Vertex* file_input(std::istream& is);
|
||||
void file_output(std::ostream& os,
|
||||
Vertex* v = infinite_vertex()) const;
|
||||
|
||||
private:
|
||||
// SETTING
|
||||
void set_number_of_vertices(int n) {_number_of_vertices = n;}
|
||||
void set_dimension (int n) {_dimension = n ;}
|
||||
void set_infinite_vertex(Vertex* v) { _infinite_vertex = v;}
|
||||
|
||||
//HELPING fUNCTIONS
|
||||
std::istream& file_input(std::istream& is);
|
||||
std::ostream& file_output(std::ostream& os,
|
||||
Vertex* v = infinite_vertex()) const;
|
||||
void copy_tds(const Tds &tds);
|
||||
|
||||
// INFINITE FEATURES
|
||||
// INFINITE FEATURES
|
||||
Vertex* infinite_vertex() const {return _infinite_vertex; }
|
||||
Face* infinite_face() const { return _infinite_vertex->face();}
|
||||
bool is_infinite(const Face* f) const;
|
||||
|
|
@ -834,21 +841,37 @@ is_valid(bool verbose, int level) const
|
|||
// return;
|
||||
// }
|
||||
|
||||
template < class Gt , class Vb, class Fb>
|
||||
bool
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::
|
||||
has_vertex(const Vertex* v) const
|
||||
{
|
||||
if (v == infinite_vertex()) return true; //short cut for frequent case
|
||||
if (number_of_vertices() == 0) return false;
|
||||
for (Vertex_iterator vit = vertices_begin();
|
||||
vit != vertices_end(); ++vit) {
|
||||
if ( v == &(*vit)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
template < class Gt , class Vb, class Fb>
|
||||
void
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::Vertex*
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::
|
||||
copy_tds(const Tds &tds)
|
||||
copy_tds(const Tds &tds, const Vertex* v)
|
||||
{
|
||||
CGAL_triangulation_precondition( tds.has_vertex(v));
|
||||
_number_of_vertices = tds.number_of_vertices();
|
||||
_geom_traits = tds.geom_traits();
|
||||
//the class Geom_traits is required to have a pertinent operator=
|
||||
_dimension = tds.dimension();
|
||||
|
||||
if(tds.number_of_vertices() == 0){return;}
|
||||
if(tds.number_of_vertices() == 0){return static_cast<Vertex*>(NULL);}
|
||||
|
||||
std::map< void*, void*, less<void*> > V;
|
||||
std::map< void*, void*, less<void*> > F;
|
||||
std::map< const void*, void*, less<const void*> > V;
|
||||
std::map< const void*, void*, less<const void*> > F;
|
||||
|
||||
Vertex* v2;
|
||||
Face* f2;
|
||||
|
|
@ -859,7 +882,7 @@ copy_tds(const Tds &tds)
|
|||
V[&(*it)] = new Vertex( it->point() );
|
||||
}
|
||||
//set infinite_vertex
|
||||
v2 = (Vertex*)V[tds.infinite_vertex()];
|
||||
v2 = static_cast<Vertex*>(V[v]);
|
||||
set_infinite_vertex(v2);
|
||||
|
||||
// create the faces
|
||||
|
|
@ -887,7 +910,20 @@ copy_tds(const Tds &tds)
|
|||
}
|
||||
|
||||
CGAL_triangulation_postcondition( is_valid() );
|
||||
return;
|
||||
return v2;
|
||||
}
|
||||
|
||||
template < class Gt , class Vb, class Fb>
|
||||
void
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::
|
||||
copy_tds(const Tds &tds)
|
||||
{
|
||||
_number_of_vertices = tds.number_of_vertices();
|
||||
_geom_traits = tds.geom_traits();
|
||||
_dimension = tds.dimension();
|
||||
|
||||
if(tds.number_of_vertices() == 0){return;}
|
||||
copy_tds(tds, tds.infinite_vertex());
|
||||
}
|
||||
|
||||
template < class Gt , class Vb, class Fb>
|
||||
|
|
@ -948,7 +984,7 @@ clear()
|
|||
}
|
||||
|
||||
template <class Gt , class Vb, class Fb>
|
||||
std::ostream&
|
||||
void
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::
|
||||
file_output( std::ostream& os, Vertex* v) const
|
||||
{
|
||||
|
|
@ -961,7 +997,7 @@ file_output( std::ostream& os, Vertex* v) const
|
|||
int m = number_of_full_dim_faces();
|
||||
if(is_ascii(os)) os << n << ' ' << m << ' ' << dimension() << endl;
|
||||
else os << n << m << dimension();
|
||||
if (n==0) return os;
|
||||
if (n==0) return;
|
||||
|
||||
std::map< void*, int, less<void*> > V;
|
||||
std::map< void*, int, less<void*> > F;
|
||||
|
|
@ -1008,22 +1044,25 @@ file_output( std::ostream& os, Vertex* v) const
|
|||
}
|
||||
}
|
||||
|
||||
return os;
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
template <class Gt , class Vb, class Fb>
|
||||
std::istream&
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::Vertex*
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>::
|
||||
file_input( std::istream& is)
|
||||
{
|
||||
//input from file
|
||||
// set the first vertex as infinite_Vertex
|
||||
//return a pointer to the first vertex
|
||||
//set this first vertex as infinite_Vertex
|
||||
if(number_of_vertices() != 0) clear();
|
||||
|
||||
int n, m, d;
|
||||
is >> n >> m >> d;
|
||||
|
||||
if (n==0) return NULL;
|
||||
|
||||
set_number_of_vertices(n);
|
||||
set_dimension(d);
|
||||
|
||||
|
|
@ -1058,7 +1097,8 @@ file_input( std::istream& is)
|
|||
F[i]->set_neighbor(j, F[index]);
|
||||
}
|
||||
}
|
||||
return is;
|
||||
|
||||
return V[0];
|
||||
}
|
||||
|
||||
template <class Gt , class Vb, class Fb>
|
||||
|
|
@ -1083,7 +1123,8 @@ std::istream&
|
|||
operator>>(std::istream& is,
|
||||
Triangulation_default_data_structure_2<Gt,Vb,Fb>& tds)
|
||||
{
|
||||
return tds.file_input(is);
|
||||
tds.file_input(is);
|
||||
return is;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1092,7 +1133,8 @@ std::ostream&
|
|||
operator<<(std::ostream& os,
|
||||
const Triangulation_default_data_structure_2<Gt,Vb,Fb> &tds)
|
||||
{
|
||||
return tds.file_output(os,tds.infinite_vertex());
|
||||
tds.file_output(os,tds.infinite_vertex());
|
||||
return os;
|
||||
}
|
||||
|
||||
CGAL_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -67,27 +67,11 @@ public:
|
|||
Face& operator*() const ;
|
||||
Face* operator->() const ;
|
||||
|
||||
bool operator==(const Face_circulator &fc) const
|
||||
{ return (_v == fc._v) && (pos == fc.pos); }
|
||||
|
||||
bool operator!=(const Face_circulator &fc) const
|
||||
{ return ! (*this == fc); }
|
||||
|
||||
bool is_empty() const
|
||||
{ return ((_v == NULL) || (pos == NULL)); }
|
||||
|
||||
bool operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL || pos == NULL);
|
||||
}
|
||||
|
||||
bool operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return ! (*this == NULL);
|
||||
}
|
||||
|
||||
bool operator==(const Face_circulator &fc) const ;
|
||||
bool operator!=(const Face_circulator &fc) const;
|
||||
bool is_empty() const;
|
||||
bool operator==(CGAL_NULL_TYPE n) const;
|
||||
bool operator!=(CGAL_NULL_TYPE n) const;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -99,15 +83,6 @@ class Triangulation_ds_vertex_circulator_2 :
|
|||
public Triangulation_cw_ccw_2
|
||||
{
|
||||
public:
|
||||
// typedef Vertex value_type;
|
||||
// typedef std:: ptrdiff_t difference_type;
|
||||
// typedef std::size_t size_type;
|
||||
// typedef Vertex* pointer;
|
||||
// typedef const Vertex* const_pointer;
|
||||
// typedef Vertex& reference;
|
||||
// typedef const Vertex& const_reference;
|
||||
// typedef CGAL::Bidirectional_circulator_tag iterator_category;
|
||||
|
||||
typedef Triangulation_ds_vertex_circulator_2<Vertex, Face>
|
||||
Vertex_circulator;
|
||||
private:
|
||||
|
|
@ -126,51 +101,20 @@ public:
|
|||
: _v(vc._v), pos(vc.pos), _ri(vc._ri)
|
||||
{}
|
||||
|
||||
Vertex_circulator &operator=(const Vertex_circulator &vc)
|
||||
{
|
||||
_v = vc._v;
|
||||
_ri = vc._ri;
|
||||
pos = vc.pos;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Vertex_circulator &operator=(const Vertex_circulator &vc);
|
||||
|
||||
Vertex_circulator& operator++();
|
||||
Vertex_circulator operator++(int);
|
||||
Vertex_circulator& operator--();
|
||||
Vertex_circulator operator--(int);
|
||||
|
||||
Vertex& operator*() const ;
|
||||
Vertex* operator->() const;
|
||||
|
||||
bool operator==(const Vertex_circulator &vc) const
|
||||
{
|
||||
return (_v == vc._v) && (_ri == vc._ri) && (pos == vc.pos);
|
||||
}
|
||||
|
||||
bool operator!=(const Vertex_circulator &vc) const
|
||||
{
|
||||
return ! (*this == vc);
|
||||
}
|
||||
|
||||
bool is_empty() const
|
||||
{
|
||||
return ((_v == NULL) || (pos == NULL));
|
||||
}
|
||||
|
||||
|
||||
bool operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL) || (pos == NULL);
|
||||
}
|
||||
|
||||
|
||||
bool operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return !(*this == NULL);
|
||||
}
|
||||
|
||||
bool operator==(const Vertex_circulator &vc) const;
|
||||
bool operator!=(const Vertex_circulator &vc) const;
|
||||
bool is_empty() const;
|
||||
bool operator==(CGAL_NULL_TYPE n) const;
|
||||
bool operator!=(CGAL_NULL_TYPE n) const;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -186,15 +130,6 @@ public:
|
|||
typedef Triangulation_ds_edge_circulator_2<Vertex,Face> Edge_circulator;
|
||||
typedef std::pair<Face*, int> Edge;
|
||||
|
||||
// typedef Edge value_type;
|
||||
// typedef std:: ptrdiff_t difference_type;
|
||||
// typedef std::size_t size_type;
|
||||
// typedef Edge* pointer;
|
||||
// typedef const Edge* const_pointer;
|
||||
// typedef Edge& reference;
|
||||
// typedef const Edge& const_reference;
|
||||
// typedef CGAL::Bidirectional_circulator_tag iterator_category;
|
||||
|
||||
private:
|
||||
int _ri;
|
||||
const Vertex* _v;
|
||||
|
|
@ -211,49 +146,19 @@ public:
|
|||
: _ri(vc._ri), _v(vc._v), pos(vc.pos)
|
||||
{}
|
||||
|
||||
Edge_circulator &operator=(const Edge_circulator &vc)
|
||||
{
|
||||
_v = vc._v;
|
||||
_ri = vc._ri;
|
||||
pos = vc.pos;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Edge_circulator &operator=(const Edge_circulator &vc);
|
||||
|
||||
Edge operator*() const ;
|
||||
Edge_circulator& operator++();
|
||||
Edge_circulator operator++(int);
|
||||
Edge_circulator& operator--();
|
||||
Edge_circulator operator--(int);
|
||||
|
||||
|
||||
bool operator==(const Edge_circulator &vc) const
|
||||
{
|
||||
return (_v == vc._v) && (_ri == vc._ri) && (pos == vc.pos);
|
||||
}
|
||||
|
||||
bool operator!=(const Edge_circulator &vc) const
|
||||
{
|
||||
return ! (*this == vc);
|
||||
}
|
||||
|
||||
bool is_empty() const
|
||||
{
|
||||
return ((_v == NULL) || (pos == NULL));
|
||||
}
|
||||
|
||||
bool operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL) || (pos == NULL);
|
||||
}
|
||||
|
||||
bool operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return !(*this == NULL);
|
||||
}
|
||||
|
||||
bool operator==(const Edge_circulator &vc) const;
|
||||
bool operator!=(const Edge_circulator &vc) const;
|
||||
bool is_empty() const;
|
||||
bool operator==(CGAL_NULL_TYPE n) const;
|
||||
bool operator!=(CGAL_NULL_TYPE n) const;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -333,6 +238,48 @@ operator->() const
|
|||
}
|
||||
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_face_circulator_2<Vertex,Face> ::
|
||||
operator==(const Face_circulator &fc) const
|
||||
{
|
||||
return (_v == fc._v) && (pos == fc.pos);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_face_circulator_2<Vertex,Face> ::
|
||||
operator!=(const Face_circulator &fc) const
|
||||
{
|
||||
return ! (*this == fc);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_face_circulator_2<Vertex,Face> ::
|
||||
is_empty() const
|
||||
{
|
||||
return ((_v == NULL) || (pos == NULL));
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_face_circulator_2<Vertex,Face> ::
|
||||
operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL || pos == NULL);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_face_circulator_2<Vertex,Face> ::
|
||||
operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return ! (*this == NULL);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
Triangulation_ds_vertex_circulator_2 (const Vertex* v, const Face* f)
|
||||
|
|
@ -348,6 +295,19 @@ Triangulation_ds_vertex_circulator_2 (const Vertex* v, const Face* f)
|
|||
return;
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face>&
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
operator=(const Vertex_circulator &vc)
|
||||
{
|
||||
_v = vc._v;
|
||||
_ri = vc._ri;
|
||||
pos = vc.pos;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template < class Vertex, class Face >
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face>&
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
|
|
@ -427,6 +387,49 @@ operator->() const
|
|||
return pos->vertex(_ri);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
operator==(const Vertex_circulator &vc) const
|
||||
{
|
||||
return (_v == vc._v) && (_ri == vc._ri) && (pos == vc.pos);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
operator!=(const Vertex_circulator &vc) const
|
||||
{
|
||||
return ! (*this == vc);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
is_empty() const
|
||||
{
|
||||
return ((_v == NULL) || (pos == NULL));
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL) || (pos == NULL);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_vertex_circulator_2<Vertex,Face> ::
|
||||
operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return !(*this == NULL);
|
||||
}
|
||||
|
||||
|
||||
template < class Vertex, class Face >
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
Triangulation_ds_edge_circulator_2(const Vertex* v, const Face* f)
|
||||
|
|
@ -442,6 +445,18 @@ Triangulation_ds_edge_circulator_2(const Vertex* v, const Face* f)
|
|||
return;
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face>&
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
operator=(const Edge_circulator &vc)
|
||||
{
|
||||
_v = vc._v;
|
||||
_ri = vc._ri;
|
||||
pos = vc.pos;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline std::pair<Face*, int>
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
|
|
@ -513,6 +528,49 @@ operator--(int)
|
|||
return tmp;
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
operator==(const Edge_circulator &vc) const
|
||||
{
|
||||
return (_v == vc._v) && (_ri == vc._ri) && (pos == vc.pos);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
operator!=(const Edge_circulator &vc) const
|
||||
{
|
||||
return ! (*this == vc);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
is_empty() const
|
||||
{
|
||||
return ((_v == NULL) || (pos == NULL));
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
operator==(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return (_v == NULL) || (pos == NULL);
|
||||
}
|
||||
|
||||
template < class Vertex, class Face >
|
||||
inline bool
|
||||
Triangulation_ds_edge_circulator_2<Vertex,Face> ::
|
||||
operator!=(CGAL_NULL_TYPE n) const
|
||||
{
|
||||
CGAL_triangulation_assertion( n == NULL);
|
||||
return !(*this == NULL);
|
||||
}
|
||||
|
||||
|
||||
CGAL_END_NAMESPACE
|
||||
|
||||
#endif //CGAL_TRIANGULATION_DS_CIRCULATORS_2_H
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ public:
|
|||
|
||||
//Vertex Access Member Functions
|
||||
Vertex* vertex(int i) const;
|
||||
Vertex* opposite_vertex(int i) const;
|
||||
bool has_vertex(const Vertex* v) const;
|
||||
bool has_vertex(const Vertex* v, int& i) const;
|
||||
int index(const Vertex* v) const;
|
||||
|
|
@ -76,6 +77,7 @@ public:
|
|||
bool has_neighbor(const Face* n) const;
|
||||
bool has_neighbor(const Face* n, int& i) const;
|
||||
int index(const Face* n) const;
|
||||
int opposite_index(int i) const;
|
||||
|
||||
//Miscelleanous
|
||||
int dimension() const;
|
||||
|
|
@ -128,6 +130,23 @@ vertex(int i) const
|
|||
return( (Vertex*) (Fb::vertex(i)));
|
||||
}
|
||||
|
||||
template < class Vb, class Fb >
|
||||
inline
|
||||
Triangulation_ds_vertex_2<Vb,Fb> *
|
||||
Triangulation_ds_face_2<Vb,Fb>::
|
||||
opposite_vertex(int i) const
|
||||
{
|
||||
return neighbor(i)->vertex(neighbor(i)->index(this));
|
||||
}
|
||||
|
||||
template < class Vb, class Fb >
|
||||
inline int
|
||||
Triangulation_ds_face_2<Vb,Fb>::
|
||||
opposite_index(int i) const
|
||||
{
|
||||
return neighbor(i)->index(this);
|
||||
}
|
||||
|
||||
template < class Vb, class Fb >
|
||||
inline bool
|
||||
Triangulation_ds_face_2<Vb,Fb>::
|
||||
|
|
|
|||
|
|
@ -51,8 +51,10 @@ public:
|
|||
Triangulation_ds_vertex_2(const Point & p) : Vb(p) {}
|
||||
Triangulation_ds_vertex_2(const Point & p, Face * f) : Vb(p, f ) {}
|
||||
|
||||
|
||||
//SETTING
|
||||
void set_face(Face* f) { Vb::set_face(f); }
|
||||
|
||||
//ACCESS
|
||||
Face* face() const {return ( (Face *) (Vb::face()) );}
|
||||
int degree() const ;
|
||||
Vertex_circulator incident_vertices() const;
|
||||
|
|
|
|||
|
|
@ -44,8 +44,6 @@ template < class Gt, class Tds >
|
|||
class Triangulation_face_2 : public Tds::Face
|
||||
{
|
||||
public:
|
||||
// typedef Tds Tds;
|
||||
|
||||
typedef Gt Geom_traits;
|
||||
typedef typename Geom_traits::Point Point;
|
||||
typedef typename Geom_traits::Segment Segment;
|
||||
|
|
@ -62,26 +60,22 @@ public:
|
|||
// typedef std::pair<Face_handle, int> Edge;
|
||||
|
||||
|
||||
inline
|
||||
Triangulation_face_2()
|
||||
: Fa()
|
||||
{ }
|
||||
|
||||
inline
|
||||
Triangulation_face_2(const Vertex_handle& v0,
|
||||
const Vertex_handle& v1,
|
||||
const Vertex_handle& v2)
|
||||
const Vertex_handle& v1,
|
||||
const Vertex_handle& v2)
|
||||
: Fa(&(*v0), &(*v1), &(*v2))
|
||||
{}
|
||||
|
||||
|
||||
inline
|
||||
Triangulation_face_2(const Vertex_handle& v0,
|
||||
const Vertex_handle& v1,
|
||||
const Vertex_handle& v2,
|
||||
const Face_handle& n0,
|
||||
const Face_handle& n1,
|
||||
const Face_handle& n2)
|
||||
const Vertex_handle& v1,
|
||||
const Vertex_handle& v2,
|
||||
const Face_handle& n0,
|
||||
const Face_handle& n1,
|
||||
const Face_handle& n2)
|
||||
: Fa(&(*v0), &(*v1), &(*v2),&(*n0), &(*n1), &(*n2))
|
||||
{}
|
||||
|
||||
|
|
@ -93,7 +87,11 @@ public:
|
|||
return ((Vertex *)(Fa::vertex(i)));
|
||||
}
|
||||
|
||||
|
||||
inline Vertex_handle opposite_vertex(int i) const
|
||||
{
|
||||
return ((Vertex *)(Fa::opposite_vertex(i)));
|
||||
}
|
||||
|
||||
inline bool has_vertex(const Vertex_handle& v) const
|
||||
{
|
||||
return (Fa::has_vertex( & (*v)) );
|
||||
|
|
@ -135,7 +133,11 @@ public:
|
|||
return Fa::has_neighbor( &(*f), i);
|
||||
}
|
||||
|
||||
|
||||
inline int opposite_index(int i) const
|
||||
{
|
||||
return Fa::opposite_index(i);
|
||||
}
|
||||
|
||||
inline Face_handle handle() const
|
||||
{
|
||||
return Face_handle(this);
|
||||
|
|
|
|||
|
|
@ -35,27 +35,9 @@
|
|||
|
||||
CGAL_BEGIN_NAMESPACE
|
||||
|
||||
template < class Gt, class Tds >
|
||||
class Triangulation_face_2;
|
||||
|
||||
template < class Gt, class Tds >
|
||||
class Triangulation_vertex_2;
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_face_iterator_2;
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_vertex_iterator_2;
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_edge_iterator_2;
|
||||
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_face_iterator_2
|
||||
:
|
||||
//public bidirectional_iterator<Triangulation_face_2<Gt,Tds>,ptrdiff_t>,
|
||||
public Triangulation_cw_ccw_2
|
||||
class Triangulation_all_faces_iterator_2
|
||||
: public typename Tds::Face_iterator
|
||||
{
|
||||
public:
|
||||
typedef Triangulation_face_2<Gt,Tds> value_type;
|
||||
|
|
@ -65,130 +47,135 @@ public:
|
|||
typedef std::ptrdiff_t difference_type;
|
||||
typedef std::bidirectional_iterator_tag iterator_category;
|
||||
|
||||
typedef typename Tds::Vertex Ve;
|
||||
typedef typename Tds::Face Fa;
|
||||
typedef typename Tds::Face_iterator Iterator_base;
|
||||
|
||||
typedef typename Tds::Face_iterator Base;
|
||||
typedef Triangulation_2<Gt,Tds> Triangulation;
|
||||
typedef typename Triangulation::Face Face;
|
||||
typedef typename Triangulation::Vertex Vertex;
|
||||
typedef typename Triangulation::Vertex_handle Vertex_handle;
|
||||
typedef typename Triangulation::Face_handle Face_handle;
|
||||
typedef typename Triangulation::Edge Edge;
|
||||
typedef Triangulation_All_faces_iterator_2<Gt,Tds> All_faces_iterator;
|
||||
|
||||
|
||||
typedef Triangulation_face_iterator_2<Gt,Tds> Face_iterator;
|
||||
typedef Triangulation_edge_iterator_2<Gt,Tds> Edge_iterator;
|
||||
typedef Triangulation_vertex_iterator_2<Gt,Tds> Vertex_iterator;
|
||||
|
||||
|
||||
|
||||
private:
|
||||
Iterator_base _ib;
|
||||
Triangulation* _tr;
|
||||
|
||||
public:
|
||||
Triangulation_face_iterator_2()
|
||||
: _ib(), _tr(NULL)
|
||||
Triangulation_All_faces_iterator_2()
|
||||
: Base()
|
||||
{}
|
||||
|
||||
Triangulation_face_iterator_2(Triangulation_2<Gt,Tds> *tr)
|
||||
: _ib( &(tr->_tds)), _tr(tr)
|
||||
{
|
||||
if (tr->dimension() == 0 ||tr->dimension() ==1){
|
||||
_ib = Iterator_base(&(tr->_tds),1);
|
||||
return;
|
||||
}
|
||||
while ( _ib != Iterator_base(&(tr->_tds),1) && _tr->is_infinite((Face *) &(*_ib))){
|
||||
++_ib;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Triangulation_face_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: _ib( &(tr->_tds), i), _tr(tr)
|
||||
Triangulation_All_faces_iterator_2(const Triangulation_2<Gt,Tds> *tr)
|
||||
: Base(tr)
|
||||
|
||||
Triangulation_All_faces_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: Base(tr,1)
|
||||
{ }
|
||||
|
||||
Triangulation_face_iterator_2(const Face_iterator& fi)
|
||||
: _ib(fi._ib), _tr(fi._tr)
|
||||
{}
|
||||
|
||||
|
||||
Face_iterator&
|
||||
operator=(const Face_iterator& fi)
|
||||
{
|
||||
_ib = fi._ib;
|
||||
_tr = fi._tr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool
|
||||
operator==(const Face_iterator& fi) const
|
||||
{
|
||||
return ( _tr == fi._tr && _ib == fi._ib);
|
||||
}
|
||||
|
||||
bool
|
||||
operator!=(const Face_iterator& fi)
|
||||
All_Faces_iterator& operator++()
|
||||
{
|
||||
return !(*this == fi);
|
||||
}
|
||||
|
||||
Face_iterator&
|
||||
operator++()
|
||||
{
|
||||
++_ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) && _tr->is_infinite((Face *)&( *_ib))){
|
||||
++_ib;
|
||||
}
|
||||
Base::operator++();
|
||||
return *this;
|
||||
}
|
||||
|
||||
Face_iterator&
|
||||
operator--()
|
||||
All_Faces_iterator& operator--()
|
||||
{
|
||||
--ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) && _tr->is_infinite((Face *) &(*_ib))){
|
||||
--_ib;
|
||||
}
|
||||
return *this;
|
||||
Base::operator--()
|
||||
return *this;
|
||||
}
|
||||
|
||||
Face_iterator
|
||||
operator++(int)
|
||||
All_Faces_iterator operator++(int)
|
||||
{
|
||||
Face_iterator tmp(*this);
|
||||
All_Faces_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Face_iterator
|
||||
operator--(int)
|
||||
All_Faces_iterator operator--(int)
|
||||
{
|
||||
Face_iterator tmp(*this);
|
||||
All_Faces_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
inline Face& operator*() const
|
||||
Faces& operator*() const
|
||||
{
|
||||
return (Face &)(*_ib);
|
||||
return static_cast<Faces &>(Base::operator*());
|
||||
}
|
||||
|
||||
inline Face* operator->() const
|
||||
Faces* operator->() const
|
||||
{
|
||||
return (Face*)( & (*_ib));
|
||||
return static_cast<Faces *>(Base::operator->());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_vertex_iterator_2
|
||||
:
|
||||
//public bidirectional_iterator<Triangulation_vertex_2<Gt,Tds>,ptrdiff_t>,
|
||||
public Triangulation_cw_ccw_2
|
||||
class Triangulation_Finite_faces_iterator_2
|
||||
: public Triangulation_All_faces_iterator_2<Gt,Tds>
|
||||
{
|
||||
public:
|
||||
typedef Triangulation_2<Gt,Tds> Triangulation;
|
||||
typedef Triangulation_All_faces_iterator_2<Gt,Tds> All;
|
||||
typedef Triangulation_Finite_faces_iterator_2<Gt,Tds> Finite_faces_iterator;
|
||||
|
||||
private:
|
||||
const Triangulation* _tr;
|
||||
|
||||
public:
|
||||
Triangulation_Finite_faces_iterator_2()
|
||||
: All(), _tr()
|
||||
{}
|
||||
|
||||
Triangulation_Finite_faces_iterator_2(const Triangulation* tr)
|
||||
: All(tr), _tr(tr)
|
||||
{
|
||||
while ( *this != All(tr,1) && ( _tr->is_infinite(& **this)))
|
||||
All::operator++();
|
||||
return;
|
||||
}
|
||||
|
||||
Triangulation_Finite_faces_iterator_2(const Triangulation* tr, int i)
|
||||
: All(tr,i), _tr(tr)
|
||||
{ }
|
||||
|
||||
|
||||
Finite_faces_iterator& operator++()
|
||||
{
|
||||
All::operator++();
|
||||
while ( *this != All(_tr,1) && _tr->is_infinite(&**this){
|
||||
All::operator++();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_faces_iterator& operator--()
|
||||
{
|
||||
All::operator--();
|
||||
while ( *this != All(_tr,1) &&
|
||||
_tr->is_infinite(&**this)){
|
||||
All::operator--();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_faces_iterator operator++(int)
|
||||
{
|
||||
Finite_Faces_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Finite_faces_iterator operator--(int)
|
||||
{
|
||||
Finite_Faces_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_all_vertices_iterator_2
|
||||
: public typename Tds::Vertex_iterator
|
||||
{
|
||||
public:
|
||||
typedef Triangulation_vertex_2<Gt,Tds> value_type;
|
||||
|
|
@ -198,249 +185,260 @@ public:
|
|||
typedef std::ptrdiff_t difference_type;
|
||||
typedef std::bidirectional_iterator_tag iterator_category;
|
||||
|
||||
typedef typename Tds::Vertex Ve;
|
||||
typedef typename Tds::Face Fa;
|
||||
typedef typename Tds::Vertex_iterator Iterator_base;
|
||||
|
||||
typedef typename Tds::Vertex_iterator Base;
|
||||
typedef Triangulation_2<Gt,Tds> Triangulation;
|
||||
typedef typename Triangulation::Face Face;
|
||||
typedef typename Triangulation::Vertex Vertex;
|
||||
typedef typename Triangulation::Vertex_handle Vertex_handle;
|
||||
typedef typename Triangulation::Face_handle Face_handle;
|
||||
typedef typename Triangulation::Edge Edge;
|
||||
|
||||
typedef Triangulation_face_iterator_2<Gt,Tds> Face_iterator;
|
||||
typedef Triangulation_edge_iterator_2<Gt,Tds> Edge_iterator;
|
||||
typedef Triangulation_vertex_iterator_2<Gt,Tds> Vertex_iterator;
|
||||
|
||||
|
||||
private:
|
||||
Iterator_base _ib;
|
||||
Triangulation* _tr;
|
||||
typedef Triangulation_all_vertices_iterator_2<Gt,Tds> All_vertices_iterator;
|
||||
|
||||
public:
|
||||
Triangulation_vertex_iterator_2()
|
||||
: _ib(),_tr(NULL)
|
||||
Triangulation_all_vertices_iterator_2()
|
||||
: Base()
|
||||
{}
|
||||
|
||||
Triangulation_vertex_iterator_2(Triangulation_2<Gt,Tds> *tr)
|
||||
: _ib( &(tr->_tds)), _tr(tr)
|
||||
{
|
||||
if (_tr->number_of_vertices() == 0) { _ib = Iterator_base(&(tr->_tds),1);}
|
||||
//else if ( _tr->is_infinite( (Vertex &) *_ib) ) { ++_ib;}
|
||||
else if ( _tr->is_infinite( (Vertex *) &(*_ib)) ){ ++_ib;}
|
||||
return;
|
||||
}
|
||||
Triangulation_all_vertices_iterator_2(Triangulation * tr)
|
||||
: Base(tr)
|
||||
{ }
|
||||
|
||||
Triangulation_vertex_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: _ib( &(tr->_tds), i), _tr(tr)
|
||||
{ }
|
||||
Triangulation_vertex_iterator_2(Triangulation *tr, int i)
|
||||
: Base(tr,i)
|
||||
{ }
|
||||
|
||||
Triangulation_vertex_iterator_2(const Vertex_iterator& vi)
|
||||
: _ib(vi._ib), _tr(vi._tr)
|
||||
{}
|
||||
|
||||
|
||||
Vertex_iterator&
|
||||
operator=(const Vertex_iterator& vi)
|
||||
{
|
||||
_tr = vi._tr;
|
||||
_ib = vi._ib;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool
|
||||
operator==(const Vertex_iterator& vi) const
|
||||
All_vertices_iterator& operator++()
|
||||
{
|
||||
return ( _tr == vi._tr && _ib == vi._ib);
|
||||
}
|
||||
|
||||
bool
|
||||
operator!=(const Vertex_iterator& vi)
|
||||
{
|
||||
return !(*this == vi);
|
||||
}
|
||||
|
||||
Vertex_iterator&
|
||||
operator++()
|
||||
{
|
||||
++_ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) &&
|
||||
_tr->is_infinite((Vertex *) &(*_ib))){
|
||||
++_ib;
|
||||
}
|
||||
Base::operator++();
|
||||
return *this;
|
||||
}
|
||||
|
||||
Vertex_iterator&
|
||||
operator--()
|
||||
All_vertices_iterator& operator--()
|
||||
{
|
||||
--_ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) &&
|
||||
_tr->is_infinite((Vertex *) &(*_ib))){
|
||||
--_ib;
|
||||
}
|
||||
Base::operator--();
|
||||
return *this;
|
||||
}
|
||||
|
||||
Vertex_iterator
|
||||
operator++(int)
|
||||
All_vertices_iterator operator++(int)
|
||||
{
|
||||
Vertex_iterator tmp(*this);
|
||||
All_Vertices_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Vertex_iterator
|
||||
operator--(int)
|
||||
|
||||
All_vertices_iterator operator--(int)
|
||||
{
|
||||
Vertex_iterator tmp(*this);
|
||||
All_Vertices_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
inline Vertex& operator*() const
|
||||
Vertex& operator*() const
|
||||
{
|
||||
return (Vertex &)(*_ib);
|
||||
return static_cast<Vertex&>(Base::operator*());
|
||||
}
|
||||
|
||||
inline Vertex* operator->() const
|
||||
Vertex* operator->() const
|
||||
{
|
||||
return (Vertex*)( & (*_ib));
|
||||
return static_cast<Vertex*>(Base::operator->());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_edge_iterator_2
|
||||
:
|
||||
// public bidirectional_iterator<typename
|
||||
// Triangulation_2<Gt,Tds>::Edge ,ptrdiff_t>,
|
||||
public Triangulation_cw_ccw_2
|
||||
class Triangulation_Finite_vertices_iterator_2
|
||||
: public Triangulation_All_vertices_iterator_2<Gt,Tds>
|
||||
{
|
||||
public:
|
||||
typedef typename Tds::Vertex Ve;
|
||||
typedef typename Tds::Face Fa;
|
||||
typedef typename Tds::Edge_iterator Iterator_base;
|
||||
typedef Triangulation_All_vertices_iterator_2<Gt,Tds> All;
|
||||
typedef Triangulation_Finite_vertices_iterator_2<Gt,Tds>
|
||||
Finite_vertice_iterator;
|
||||
private:
|
||||
Triangulation* _tr;
|
||||
|
||||
typedef Triangulation_2<Gt,Tds> Triangulation;
|
||||
typedef typename Triangulation::Face Face;
|
||||
typedef typename Triangulation::Vertex Vertex;
|
||||
typedef typename Triangulation::Vertex_handle Vertex_handle;
|
||||
typedef typename Triangulation::Face_handle Face_handle;
|
||||
typedef typename Triangulation::Edge Edge;
|
||||
public:
|
||||
Triangulation_finite_vertices_iterator_2()
|
||||
: All(),_tr(NULL)
|
||||
{}
|
||||
|
||||
Triangulation_finite_vertices_iterator_2(Triangulation *tr)
|
||||
: All(tr), _tr(tr)
|
||||
{
|
||||
while ( *this != All(tr,int) && ( _tr->is_infinite(& **this)))
|
||||
All::operator++();
|
||||
return;
|
||||
}
|
||||
|
||||
typedef Triangulation_face_iterator_2<Gt,Tds> Face_iterator;
|
||||
typedef Triangulation_edge_iterator_2<Gt,Tds> Edge_iterator;
|
||||
typedef Triangulation_vertex_iterator_2<Gt,Tds> Vertex_iterator;
|
||||
Triangulation_finite_vertices_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: All(tr,i), _tr(tr)
|
||||
{ }
|
||||
|
||||
|
||||
Finite_vertices_iterator& operator++()
|
||||
{
|
||||
All::operator++();
|
||||
while ( *this != All(_tr,1) && _tr->is_infinite(&**this)){
|
||||
All::operator++();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_vertices_iterator& operator--()
|
||||
{
|
||||
All::operator--();
|
||||
while ( *this != All(_tr,1) && _tr->is_infinite(&**this)){
|
||||
All::operator--();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_vertices_iterator
|
||||
operator++(int)
|
||||
{
|
||||
Finite_vertices_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Finite_vertices_iterator
|
||||
operator--(int)
|
||||
{
|
||||
Finite_Vertices_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
};
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_all_edges_iterator_2
|
||||
: public typename Tds::Edge_iterator
|
||||
{
|
||||
public:
|
||||
typedef Edge value_type;
|
||||
typedef Edge * pointer;
|
||||
typedef Edge & reference;
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef std::bidirectional_iterator_tag iterator_category;
|
||||
|
||||
typedef Triangulation_2<Gt,Tds> Triangulation;
|
||||
typedef Triangulation::Edge Edge;
|
||||
typedef Triangulation::Face Face;
|
||||
typedef Triangulation::Face_handle Face_handle;
|
||||
typedef typename Tds::Edge_iterator Base;
|
||||
typedef Triangulation_all_edges_iterator_2<Gt,Tds> All_edges_iterator;
|
||||
|
||||
|
||||
private:
|
||||
Iterator_base _ib;
|
||||
Triangulation* _tr;
|
||||
|
||||
public:
|
||||
Triangulation_edge_iterator_2()
|
||||
: _ib(), _tr(NULL)
|
||||
{}
|
||||
Triangulation_all_edges_iterator_2()
|
||||
: Base()
|
||||
{}
|
||||
|
||||
Triangulation_edge_iterator_2(CGAL_Triangulation_2<Gt,Tds> *tr)
|
||||
: _ib( &(tr->_tds)), _tr(tr)
|
||||
{
|
||||
if (_tr->dimension() == 0 ) {
|
||||
_ib = Iterator_base(&(tr->_tds),1);
|
||||
return;
|
||||
}
|
||||
while ( _ib != Iterator_base(&(tr->_tds),1) &&
|
||||
_tr->is_infinite((Face *)((*_ib).first), (*_ib).second)){
|
||||
++_ib;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Triangulation_edge_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: _ib( &(tr->_tds), i), _tr(tr)
|
||||
Triangulation_all_edges_iterator_2(Triangulation *tr)
|
||||
: Base(tr)
|
||||
{}
|
||||
|
||||
Triangulation_all_edges_iterator_2(Triangulation *tr, int i)
|
||||
: Base(tr,i)
|
||||
{ }
|
||||
|
||||
Triangulation_edge_iterator_2(const Edge_iterator& ei)
|
||||
: _ib(ei._ib), _tr(ei._tr)
|
||||
{}
|
||||
|
||||
|
||||
Edge_iterator&
|
||||
operator=(const Edge_iterator& ei)
|
||||
{
|
||||
_tr = ei._tr;
|
||||
_ib = ei._ib;
|
||||
All_edges_iterator& operator++()
|
||||
{
|
||||
Base::operator++();
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool
|
||||
operator==(const Edge_iterator& ei) const
|
||||
{
|
||||
return ( _tr == ei._tr && _ib == ei._ib);
|
||||
}
|
||||
|
||||
bool
|
||||
operator!=(const Edge_iterator& ei)
|
||||
{
|
||||
return !(*this == ei);
|
||||
}
|
||||
|
||||
Edge_iterator&
|
||||
operator++()
|
||||
{
|
||||
++_ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) &&
|
||||
_tr->is_infinite((Face *)((*_ib).first), (*_ib).second)){
|
||||
++_ib;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Edge_iterator&
|
||||
All_edges_iterator&
|
||||
operator--()
|
||||
{
|
||||
--_ib;
|
||||
while ( _ib != Iterator_base(&(_tr->_tds),1) &&
|
||||
_tr->is_infinite((Face *)((*_ib).first), *_ib.second)){
|
||||
--_ib;
|
||||
}
|
||||
return *this;
|
||||
Base::operator--();
|
||||
return *this;
|
||||
}
|
||||
|
||||
Edge_iterator
|
||||
All_edges_iterator
|
||||
operator++(int)
|
||||
{
|
||||
Edge_iterator tmp(*this);
|
||||
All_edges_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Edge_iterator
|
||||
All_edges_iterator
|
||||
operator--(int)
|
||||
{
|
||||
Edge_iterator tmp(*this);
|
||||
All_Edges_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
inline Edge operator*() const
|
||||
Edge operator*() const
|
||||
{
|
||||
Face_handle fh = (Face *)((*_ib).first);
|
||||
return std::make_pair( fh , (*_ib).second );
|
||||
Face_handle fh = static_cast<Face *>(Base::operator*().first);
|
||||
return std::make_pair( fh , Base::operator*().second );
|
||||
}
|
||||
|
||||
template < class Gt, class Tds>
|
||||
class Triangulation_finite_edges_iterator_2
|
||||
: public Triangulation_all_edges_iterator_2<Gt,Tds>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef Triangulation_all_edges_iterator_2<Gt,Tds> All;
|
||||
typedef Triangulation_finite_edges_iterator_2<Gt,Tds> Finite_edges_iterator;
|
||||
|
||||
private:
|
||||
Triangulation* _tr;
|
||||
|
||||
public:
|
||||
Triangulation_finite_edges_iterator_2()
|
||||
: All(), _tr(NULL)
|
||||
{}
|
||||
|
||||
Triangulation_finite_edges_iterator_2(Triangulation *tr)
|
||||
: All(),_tr(NULL)
|
||||
{
|
||||
while ( *this != All(tr,int) && ( _tr->is_infinite(& **this)))
|
||||
All::operator++();
|
||||
return;
|
||||
}
|
||||
|
||||
Triangulation_finite_edges_iterator_2(Triangulation_2<Gt,Tds> *tr, int i)
|
||||
: All(tr,i), _tr(tr)
|
||||
{ }
|
||||
|
||||
Finite_edges_iterator& operator++()
|
||||
{
|
||||
All::operator++()
|
||||
while ( *this != All(_tr,1) && _tr->is_infinite(&**this)){
|
||||
All::operator++()
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_edges_iterator&
|
||||
operator--()
|
||||
{
|
||||
All::operator--();
|
||||
while ( *this != All(_tr,1) && _tr->is_infinite(&**this)){
|
||||
All::operator--();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Finite_Edges_iterator
|
||||
operator++(int)
|
||||
{
|
||||
Finite_Edges_iterator tmp(*this);
|
||||
++(*this);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
Finite_Edges_iterator
|
||||
operator--(int)
|
||||
{
|
||||
Finite_Edges_iterator tmp(*this);
|
||||
--(*this);
|
||||
return tmp;
|
||||
}
|
||||
};
|
||||
|
||||
CGAL_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -27,31 +27,38 @@
|
|||
|
||||
//Define shorter names to please linker (g++/egcs)
|
||||
|
||||
#define Triangulation_default_data_structure_2 Tdds
|
||||
#define Triangulation_vertex_base_2 Tvb
|
||||
#define Triangulation_face_base_2 Tfb
|
||||
#define Triangulation_euclidean_traits_2 Et2
|
||||
#define Triangulation_euclidean_traits_xy_3 Etxy3
|
||||
#define Triangulation_euclidean_traits_xz_3 Etxz3
|
||||
#define Triangulation_euclidean_traits_yz_3 Etyz3
|
||||
#define Triangulation_default_data_structure_2 Tdds
|
||||
#define Triangulation_vertex_base_2 Tvb
|
||||
#define Triangulation_face_base_2 Tfb
|
||||
#define Triangulation_euclidean_traits_2 Et2
|
||||
#define Triangulation_euclidean_traits_xy_3 Etxy3
|
||||
#define Triangulation_euclidean_traits_xz_3 Etxz3
|
||||
#define Triangulation_euclidean_traits_yz_3 Etyz3
|
||||
|
||||
#define Constrained_triangulation_face_base_2 Ctfb
|
||||
#define Regular_triangulation_euclidean_traits_2 Rtet2
|
||||
|
||||
#define Triangulation_ds_vertex_2 Tdsv
|
||||
#define Triangulation_ds_face_2 Tdsf
|
||||
#define Triangulation_vertex_2 Tv
|
||||
#define Triangulation_face_2 Tf
|
||||
#define Triangulation_vertex_handle_2 Tvh
|
||||
#define Triangulation_face_handle_2 Tfh
|
||||
#define Triangulation_vertex_iterator_2 Tvi
|
||||
#define Triangulation_face_iterator_2 Tfi
|
||||
#define Triangulation_edge_iterator_2 Tei
|
||||
#define Triangulation_vertex_circulator_2 Tvc
|
||||
#define Triangulation_face_circulator_2 Tfc
|
||||
#define Triangulation_edge_circulator_2 Tec
|
||||
|
||||
#define Regular_triangulation_face_base_2 Rtfb
|
||||
#define Triangulation_ds_vertex_2 Tdsv
|
||||
#define Triangulation_ds_face_2 Tdsf
|
||||
#define Triangulation_vertex_2 Tv
|
||||
#define Triangulation_face_2 Tf
|
||||
#define Triangulation_vertex_handle_2 Tvh
|
||||
#define Triangulation_face_handle_2 Tfh
|
||||
#define Triangulation_vertex_iterator_2 Tvi
|
||||
#define Triangulation_face_iterator_2 Tfi
|
||||
#define Triangulation_edge_iterator_2 Tei
|
||||
#define Triangulation_all_faces_iterator_2 Tafi
|
||||
#define Triangulation_all_edges_iterator_2 Taei
|
||||
#define Triangulation_all_vertices_iterator_2 Tavi
|
||||
#define Triangulation_finite_faces_iterator_2 Tffi
|
||||
#define Triangulation_finite_edges_iterator_2 Tfei
|
||||
#define Triangulation_finite_vertices_iterator_2 Tfvi
|
||||
#define Triangulation_vertex_circulator_2 Tvc
|
||||
#define Triangulation_face_circulator_2 Tfc
|
||||
#define Triangulation_edge_circulator_2 Tec
|
||||
|
||||
#define Constrained_triangulation_face_base_2 Ctfb
|
||||
#define Regular_triangulation_euclidean_traits_2 Rtet2
|
||||
#define Regular_triangulation_face_base_2 Rtfb
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue