mirror of https://github.com/CGAL/cgal
mark functions in Triangulation_face.h as required by the Concept. Add precondition that Face be of dim strictly smaller than ambient_dim; fix bug due to this precondition, in Triangulation.h
This commit is contained in:
parent
dcf05ce797
commit
8280eccd6a
|
|
@ -26,6 +26,7 @@ Regular_complex Regular_triangulation
|
||||||
*) code not done :
|
*) code not done :
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
/IN_SIMPLEX/IN_FULL_CELL
|
||||||
/is_finite/! is_infinite/
|
/is_finite/! is_infinite/
|
||||||
flag stuff, really documented ? : is_boundary_facet
|
flag stuff, really documented ? : is_boundary_facet
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,9 @@ of the face in the cell \ccVar.\ccc{full_cell()}. \ccPrecond $0\leq i\leq$\ccVar
|
||||||
\ccc{Full_cell_handle}.}
|
\ccc{Full_cell_handle}.}
|
||||||
|
|
||||||
\ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th
|
\ccMethod{void set_index(int i, int j);}{Sets the index of the \ccc{i}-th
|
||||||
vertex of the face. \ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->ambient_dimension()}.}
|
vertex of the face.
|
||||||
|
\ccPrecond $0\leq i<$\ccVar.\ccc{full_cell()->ambient_dimension()}.
|
||||||
|
\ccPrecond $0\leq j\leq$\ccVar.\ccc{full_cell()->ambient_dimension()}.}
|
||||||
|
|
||||||
\ccSeeAlso
|
\ccSeeAlso
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -909,7 +909,7 @@ Triangulation<TT, TDS>
|
||||||
face.set_full_cell(s);
|
face.set_full_cell(s);
|
||||||
int num(0);
|
int num(0);
|
||||||
int verts(0);
|
int verts(0);
|
||||||
for(int i = 0; i <= cur_dim; ++i)
|
for(int i = 0; i < cur_dim; ++i)
|
||||||
{
|
{
|
||||||
if( orientations_[i] == COPLANAR )
|
if( orientations_[i] == COPLANAR )
|
||||||
{
|
{
|
||||||
|
|
@ -919,6 +919,17 @@ Triangulation<TT, TDS>
|
||||||
else
|
else
|
||||||
face.set_index(verts++, i);
|
face.set_index(verts++, i);
|
||||||
}
|
}
|
||||||
|
//-- We could put if{}else{} below in the loop above, but then we would
|
||||||
|
// need to test if (verts < cur_dim) many times... we do it only once
|
||||||
|
// here:
|
||||||
|
if( orientations_[cur_dim] == COPLANAR )
|
||||||
|
{
|
||||||
|
++num;
|
||||||
|
facet = Facet(s, cur_dim);
|
||||||
|
}
|
||||||
|
else if( verts < cur_dim )
|
||||||
|
face.set_index(verts, cur_dim);
|
||||||
|
//--//
|
||||||
if( 0 == num )
|
if( 0 == num )
|
||||||
{
|
{
|
||||||
loc_type = IN_SIMPLEX;
|
loc_type = IN_SIMPLEX;
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ class Triangulation_face
|
||||||
{
|
{
|
||||||
typedef typename internal::Dimen_plus_one<typename TDS::Ambient_dimension>::type Dimen_plus;
|
typedef typename internal::Dimen_plus_one<typename TDS::Ambient_dimension>::type Dimen_plus;
|
||||||
public:
|
public:
|
||||||
typedef typename TDS::Full_cell_handle Full_cell_handle;
|
typedef typename TDS::Full_cell_handle Full_cell_handle; /* Concept */
|
||||||
typedef typename TDS::Vertex_handle Vertex_handle;
|
typedef typename TDS::Vertex_handle Vertex_handle; /* Concept */
|
||||||
typedef internal::S_or_D_array<int, Dimen_plus> Indices;
|
typedef internal::S_or_D_array<int, Dimen_plus> Indices;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -37,42 +37,42 @@ protected:
|
||||||
Indices indices_;
|
Indices indices_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Triangulation_face(Full_cell_handle s)
|
explicit Triangulation_face(Full_cell_handle s) /* Concept */
|
||||||
: full_cell_(s), indices_(s->ambient_dimension()+1)
|
: full_cell_(s), indices_(s->ambient_dimension()+1)
|
||||||
{
|
{
|
||||||
CGAL_assertion( Full_cell_handle() != s );
|
CGAL_assertion( Full_cell_handle() != s );
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit Triangulation_face(const int ambient_dim)
|
explicit Triangulation_face(const int ambient_dim) /* Concept */
|
||||||
: full_cell_(), indices_(ambient_dim+1)
|
: full_cell_(), indices_(ambient_dim+1)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Triangulation_face(const Triangulation_face & f)
|
Triangulation_face(const Triangulation_face & f) /* Concept */
|
||||||
: full_cell_(f.full_cell_), indices_(f.indices_)
|
: full_cell_(f.full_cell_), indices_(f.indices_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int feature_dimension() const
|
int feature_dimension() const /* Concept */
|
||||||
{
|
{
|
||||||
int i(0);
|
int i(0);
|
||||||
while( -1 != indices_[i] ) ++i;
|
while( -1 != indices_[i] ) ++i;
|
||||||
return (i-1);
|
return (i-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Full_cell_handle full_cell() const
|
Full_cell_handle full_cell() const /* Concept */
|
||||||
{
|
{
|
||||||
return full_cell_;
|
return full_cell_;
|
||||||
}
|
}
|
||||||
|
|
||||||
int index(const int i) const
|
int index(const int i) const /* Concept */
|
||||||
{
|
{
|
||||||
CGAL_precondition( (0 <= i) && (i <= feature_dimension()) );
|
CGAL_precondition( (0 <= i) && (i <= feature_dimension()) );
|
||||||
return indices_[i];
|
return indices_[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex_handle vertex(const int i) const
|
Vertex_handle vertex(const int i) const /* Concept */
|
||||||
{
|
{
|
||||||
int j = index(i);
|
int j = index(i);
|
||||||
if( j == -1 )
|
if( j == -1 )
|
||||||
|
|
@ -82,21 +82,22 @@ public:
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - UPDATE FUNCTIONS
|
// - - - - - - - - - - - - - - - - - - UPDATE FUNCTIONS
|
||||||
|
|
||||||
void clear()
|
void clear() /* Concept */
|
||||||
{
|
{
|
||||||
const int d = indices_.size();
|
const int d = indices_.size();
|
||||||
for(int i = 0; i < d; ++i )
|
for(int i = 0; i < d; ++i )
|
||||||
indices_[i] = -1;
|
indices_[i] = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_full_cell(Full_cell_handle s)
|
void set_full_cell(Full_cell_handle s) /* Concept */
|
||||||
{
|
{
|
||||||
CGAL_precondition( Full_cell_handle() != s );
|
CGAL_precondition( Full_cell_handle() != s );
|
||||||
full_cell_ = s;
|
full_cell_ = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_index(const int i, const int idx)
|
void set_index(const int i, const int idx) /* Concept */
|
||||||
{
|
{
|
||||||
|
CGAL_precondition( (0 <= i) && ((size_t)i+1 < indices_.size()) );
|
||||||
CGAL_precondition( (0 <= idx) && ((size_t)idx < indices_.size()) );
|
CGAL_precondition( (0 <= idx) && ((size_t)idx < indices_.size()) );
|
||||||
indices_[i] = idx;
|
indices_[i] = idx;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue