Use is_valid_*_descriptor

This commit is contained in:
Mael Rouxel-Labbé 2022-10-04 22:22:40 +02:00
parent b597aa8aab
commit 34ea88c73d
16 changed files with 155 additions and 55 deletions

View File

@ -43,6 +43,7 @@ join_face(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
halfedge_descriptor hop = opposite(h,g);
halfedge_descriptor hprev = prev(h, g), gprev = prev(hop, g);
@ -117,6 +118,8 @@ join_vertex(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::vertex_descriptor vertex_descriptor;
typedef Halfedge_around_target_iterator<Graph> halfedge_around_vertex_iterator;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
halfedge_descriptor hop = opposite(h, g)
, hprev = prev(hop, g)
, gprev = prev(h, g)
@ -191,8 +194,9 @@ split_vertex(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
typename boost::graph_traits<Graph>::halfedge_descriptor h2,
Graph& g)
{
CGAL_assertion(h1 != h2);
CGAL_assertion(target(h1, g) == target(h2, g));
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
CGAL_precondition(h1 != h2);
CGAL_precondition(target(h1, g) == target(h2, g));
typename boost::graph_traits<Graph>::halfedge_descriptor
hnew = halfedge(add_edge(g), g),
@ -226,8 +230,11 @@ split_vertex(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
template<typename Graph>
typename boost::graph_traits<Graph>::halfedge_descriptor
split_edge(typename boost::graph_traits<Graph>::halfedge_descriptor h, Graph& g)
{ return opposite(split_vertex(prev(h,g), opposite(h,g),g), g); }
{
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
return opposite(split_vertex(prev(h,g), opposite(h,g),g), g);
}
/**
* joins the two faces incident to `h` and `opposite(h,g)`.
@ -288,6 +295,12 @@ split_face(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
typedef typename boost::graph_traits<Graph> Traits;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
CGAL_precondition(h1 != h2);
CGAL_precondition(face(h1, g) == face(h2, g));
CGAL_precondition(next(h1, g) != h2 && next(h2, g) != h1);
halfedge_descriptor hnew = halfedge(add_edge(g), g);
face_descriptor fnew = add_face(g);
internal::insert_tip( hnew, h2, g);
@ -326,7 +339,9 @@ join_loop(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
typedef typename boost::graph_traits<Graph> Traits;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
CGAL_precondition( is_border(h1,g) || face(h1, g) != face(h2, g));
if (! is_border(h1,g))
remove_face(face(h1, g), g);
if (! is_border(h2,g))
@ -400,13 +415,18 @@ split_loop(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) &&
is_valid_halfedge_descriptor(h2, g) &&
is_valid_halfedge_descriptor(h3, g));
halfedge_descriptor h = h1, i = h2, j = h3;
CGAL_precondition( h != i);
CGAL_precondition( h != j);
CGAL_precondition( i != j);
CGAL_precondition( target(h,g) == target(opposite(i,g),g));
CGAL_precondition( target(i,g) == target(opposite(j,g),g));
CGAL_precondition( target(j,g) == target(opposite(h,g),g));
CGAL_precondition(h != i);
CGAL_precondition(h != j);
CGAL_precondition(i != j);
CGAL_precondition(target(h,g) == target(opposite(i,g),g));
CGAL_precondition(target(i,g) == target(opposite(j,g),g));
CGAL_precondition(target(j,g) == target(opposite(h,g),g));
// Create a copy of the triangle.
halfedge_descriptor hnew = internal::copy(h,g);
halfedge_descriptor inew = internal::copy(i,g);
@ -504,6 +524,7 @@ void remove_face(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
CGAL_precondition(! is_border(h,g));
face_descriptor f = face(h, g);
@ -551,6 +572,8 @@ add_edge(typename boost::graph_traits<Graph>::vertex_descriptor s,
typename boost::graph_traits<Graph>::vertex_descriptor t,
Graph& g)
{
CGAL_precondition(is_valid_vertex_descriptor(s, g) && is_valid_vertex_descriptor(t, g));
typename boost::graph_traits<Graph>::edge_descriptor e = add_edge(g);
set_target(halfedge(e, g), t, g);
set_target(opposite(halfedge(e, g), g), s, g);
@ -568,6 +591,9 @@ bool can_add_face(const VertexRange& vrange, const PMesh& sm)
typedef typename boost::graph_traits<PMesh>::vertex_descriptor vertex_descriptor;
typedef typename boost::graph_traits<PMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition_code(for(vertex_descriptor v : vrange))
CGAL_precondition(is_valid_vertex_descriptor(v, sm));
std::vector<typename boost::graph_traits<PMesh>::vertex_descriptor> face(vrange.begin(), vrange.end());
std::size_t N = face.size();
@ -697,6 +723,9 @@ add_face(const VertexRange& vr, Graph& g)
typedef typename boost::graph_traits<Graph>::face_descriptor face_descriptor;
typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
CGAL_precondition_code(for(vertex_descriptor v : vr))
CGAL_precondition(is_valid_vertex_descriptor(v, g));
std::vector<vertex_descriptor> vertices(vr.begin(), vr.end()); // quick and dirty copy
unsigned int n = (unsigned int)vertices.size();
//check that every vertex is unique
@ -1115,7 +1144,9 @@ void make_hole(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::face_descriptor face_descriptor;
typedef Halfedge_around_face_iterator<Graph> halfedge_around_face_iterator;
CGAL_precondition(! is_border(h,g));
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
CGAL_precondition(!is_border(h, g));
face_descriptor fd = face(h, g);
halfedge_around_face_iterator hafib, hafie;
for(boost::tie(hafib, hafie) = halfedges_around_face(h, g);
@ -1139,6 +1170,9 @@ void fill_hole(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::face_descriptor face_descriptor;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
CGAL_precondition(!is_border(h, g));
face_descriptor f = add_face(g);
for(halfedge_descriptor hd : halfedges_around_face(h,g)){
set_face(hd, f,g);
@ -1179,6 +1213,9 @@ add_center_vertex(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
CGAL_precondition(!is_border(h, g));
halfedge_descriptor hnew = halfedge(add_edge(g),g);
vertex_descriptor vnew = add_vertex(g);
internal::close_tip(hnew, vnew, g);
@ -1236,6 +1273,8 @@ remove_center_vertex(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename boost::graph_traits<Graph> Traits;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
// h points to the vertex that gets removed
halfedge_descriptor h2 = opposite(next(h, g), g);
halfedge_descriptor hret = prev(h, g);
@ -1283,14 +1322,28 @@ add_vertex_and_face_to_border(typename boost::graph_traits<Graph>::halfedge_desc
typename boost::graph_traits<Graph>::halfedge_descriptor h2,
Graph& g)
{
typename boost::graph_traits<Graph>::vertex_descriptor v = add_vertex(g);
typename boost::graph_traits<Graph>::face_descriptor f = add_face(g);
typename boost::graph_traits<Graph>::edge_descriptor e1 = add_edge(g);
typename boost::graph_traits<Graph>::edge_descriptor e2 = add_edge(g);
typename boost::graph_traits<Graph>::halfedge_descriptor he1= halfedge(e1, g);
typename boost::graph_traits<Graph>::halfedge_descriptor he2= halfedge(e2, g);
typename boost::graph_traits<Graph>::halfedge_descriptor ohe1= opposite(he1, g);
typename boost::graph_traits<Graph>::halfedge_descriptor ohe2= opposite(he2, g);
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef typename boost::graph_traits<Graph>::halfedge_descriptor halfedge_descriptor;
typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename boost::graph_traits<Graph>::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
CGAL_precondition(is_border(h1, g) && is_border(h2, g));
CGAL_precondition(h1 != h2);
CGAL_precondition_code(halfedge_descriptor h = h1;)
CGAL_precondition_code(const halfedge_descriptor done = h1;)
CGAL_precondition_code(do { if(h == h2) break; h = next(h, g); } while(h != done);)
CGAL_precondition(h != done);
vertex_descriptor v = add_vertex(g);
face_descriptor f = add_face(g);
edge_descriptor e1 = add_edge(g);
edge_descriptor e2 = add_edge(g);
halfedge_descriptor he1 = halfedge(e1, g);
halfedge_descriptor he2 = halfedge(e2, g);
halfedge_descriptor ohe1= opposite(he1, g);
halfedge_descriptor ohe2= opposite(he2, g);
set_next(ohe1, next(h1,g),g);
set_next(h1,he1,g);
@ -1340,6 +1393,7 @@ add_face_to_border(typename boost::graph_traits<Graph>::halfedge_descriptor h1,
typename boost::graph_traits<Graph>::halfedge_descriptor h2,
Graph& g)
{
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
CGAL_precondition(is_border(h1,g) == true);
CGAL_precondition(is_border(h2,g) == true);
CGAL_precondition(h1 != h2);
@ -1409,6 +1463,8 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
typedef typename Traits::vertex_descriptor vertex_descriptor;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_edge_descriptor(e, g));
halfedge_descriptor pq = halfedge(e,g);
halfedge_descriptor qp = opposite(pq, g);
halfedge_descriptor pt = opposite(prev(pq, g), g);
@ -1527,8 +1583,10 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
typedef typename Traits::vertex_descriptor vertex_descriptor;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_edge_descriptor(v0v1, g));
CGAL_precondition(!get(Edge_is_constrained_map, v0v1));
halfedge_descriptor pq = halfedge(v0v1,g);
CGAL_assertion( !get(Edge_is_constrained_map,v0v1) );
halfedge_descriptor qp = opposite(pq,g);
halfedge_descriptor pt = opposite(prev(pq,g),g);
@ -1666,6 +1724,8 @@ flip_edge(typename boost::graph_traits<Graph>::halfedge_descriptor h,
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
typedef typename Traits::face_descriptor face_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, g));
vertex_descriptor s = source(h,g);
vertex_descriptor t = target(h,g);
halfedge_descriptor nh = next(h,g), nnh = next(nh,g), oh = opposite(h,g), noh = next(oh,g), nnoh = next(noh,g);
@ -1706,6 +1766,8 @@ does_satisfy_link_condition(typename boost::graph_traits<Graph>::edge_descriptor
typedef typename boost::graph_traits<Graph>::halfedge_descriptor halfedge_descriptor;
typedef CGAL::Halfedge_around_source_iterator<Graph> out_edge_iterator;
CGAL_precondition(is_valid_edge_descriptor(e, g));
halfedge_descriptor v0_v1 = halfedge(e,g);
halfedge_descriptor v1_v0 = opposite(v0_v1,g);

View File

@ -195,6 +195,11 @@ make_quad(typename boost::graph_traits<Graph>::vertex_descriptor v0,
typename boost::graph_traits<Graph>::vertex_descriptor v3,
Graph& g)
{
CGAL_precondition(is_valid_vertex_descriptor(v0, g) &&
is_valid_vertex_descriptor(v1, g) &&
is_valid_vertex_descriptor(v2, g) &&
is_valid_vertex_descriptor(v3, g));
typedef typename boost::graph_traits<Graph>::halfedge_descriptor halfedge_descriptor;
typedef typename boost::graph_traits<Graph>::face_descriptor face_descriptor;
halfedge_descriptor h0 = halfedge(add_edge(g), g);

View File

@ -803,6 +803,8 @@ bool is_hexahedron(typename boost::graph_traits<FaceGraph>::halfedge_descriptor
{
typedef typename boost::graph_traits<FaceGraph>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(hd, g));
halfedge_descriptor h1 = hd;
if(is_border(h1,g)) return false;
typedef typename boost::graph_traits<FaceGraph>::halfedge_descriptor halfedge_descriptor;
@ -863,6 +865,8 @@ void swap_vertices(typename boost::graph_traits<FaceGraph>::vertex_descriptor& p
{
typedef typename boost::graph_traits<FaceGraph>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_vertex_descriptor(p, g) && is_valid_vertex_descriptor(q, g));
halfedge_descriptor hq=halfedge(q, g);
halfedge_descriptor hp=halfedge(p, g);
for(halfedge_descriptor h : halfedges_around_target(hq, g))
@ -881,6 +885,9 @@ void swap_edges(const typename boost::graph_traits<FaceGraph>::halfedge_descript
typedef typename boost::graph_traits<FaceGraph>::halfedge_descriptor halfedge_descriptor;
typedef typename boost::graph_traits<FaceGraph>::face_descriptor face_descriptor;
typedef typename boost::graph_traits<FaceGraph>::vertex_descriptor vertex_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h1, g) && is_valid_halfedge_descriptor(h2, g));
const halfedge_descriptor oh1 = opposite(h1, g), oh2 = opposite(h2, g);
// backup vertex pointers
@ -1010,6 +1017,8 @@ int vertex_index_in_face(const typename boost::graph_traits<Graph>::vertex_descr
{
typedef typename boost::graph_traits<Graph>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_vertex_descriptor(vd, g) && is_valid_face_descriptor(fd, g));
halfedge_descriptor start = halfedge(fd, g);
halfedge_descriptor current = start;
int counter = 0;
@ -1050,7 +1059,7 @@ int halfedge_index_in_face(typename boost::graph_traits<Graph>::halfedge_descrip
typedef typename boost::graph_traits<Graph>::halfedge_descriptor halfedge_descriptor;
typedef typename boost::graph_traits<Graph>::face_descriptor face_descriptor;
CGAL_precondition(he != boost::graph_traits<Graph>::null_halfedge());
CGAL_precondition(is_valid_halfedge_descriptor(he, g));
CGAL_precondition(!is_border(he, g));
face_descriptor f = face(he, g);

View File

@ -179,6 +179,8 @@ namespace CGAL {
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(is_valid_edge_descriptor(ed, pmesh));
typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(CGAL::vertex_point, pmesh));
@ -234,6 +236,8 @@ namespace CGAL {
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(is_valid_face_descriptor(fd, pmesh));
typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(CGAL::vertex_point, pmesh));

View File

@ -89,6 +89,8 @@ void sum_normals(const PM& pmesh,
typedef typename boost::property_traits<VertexPointMap>::reference Point_ref;
CGAL_precondition(is_valid_face_descriptor(f, pmesh));
halfedge_descriptor he = halfedge(f, pmesh);
vertex_descriptor v = source(he, pmesh);
vertex_descriptor the = target(he,pmesh);
@ -172,6 +174,8 @@ compute_face_normal(typename boost::graph_traits<PolygonMesh>::face_descriptor f
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(is_valid_face_descriptor(f, pmesh));
typedef typename GetGeomTraits<PolygonMesh, NamedParameters>::type GT;
GT traits = choose_parameter<GT>(get_parameter(np, internal_np::geom_traits));
@ -665,6 +669,8 @@ compute_vertex_normal(typename boost::graph_traits<PolygonMesh>::vertex_descript
using parameters::is_default_parameter;
using parameters::get_parameter;
CGAL_precondition(is_valid_vertex_descriptor(v, pmesh));
typedef typename boost::graph_traits<PolygonMesh>::halfedge_descriptor halfedge_descriptor;
typedef typename boost::graph_traits<PolygonMesh>::face_descriptor face_descriptor;

View File

@ -57,6 +57,8 @@ is_sharp(const typename boost::graph_traits<PolygonMesh>::halfedge_descriptor h,
typedef typename boost::graph_traits<PolygonMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_halfedge_descriptor(h, pmesh));
if(is_border_edge(h, pmesh))
return false;

View File

@ -103,7 +103,7 @@ private:
{
for(face_descriptor fd : faces)
{
CGAL_assertion(fd != boost::graph_traits<PolygonMesh>::null_face());
CGAL_assertion(is_valid_face_descriptor(fd, pmesh));
vertex_descriptor vi = target(halfedge(fd,pmesh),pmesh);
vertex_descriptor vj = target(next(halfedge(fd,pmesh),pmesh),pmesh);

View File

@ -442,8 +442,8 @@ random_location_on_face(typename boost::graph_traits<TriangleMesh>::face_descrip
CGAL::Random& rnd = get_default_random())
{
CGAL_USE(tm);
CGAL_precondition(CGAL::is_triangle_mesh(tm));
CGAL_precondition(fd != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(is_valid_face_descriptor(fd, tm));
CGAL_precondition(is_triangle(halfedge(fd, tm), tm));
// calling 'rnd.uniform real' with double in case FT comes from an EPECK kernel (which doesn't seem to work too well)
FT u(rnd.uniform_real(0., 1.));
@ -523,8 +523,8 @@ get_descriptor_from_location(const std::pair<typename boost::graph_traits<Triang
const face_descriptor fd = loc.first;
const Barycentric_coordinates& bar = loc.second;
CGAL_precondition(CGAL::is_triangle_mesh(tm));
CGAL_precondition(fd != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(is_valid_face_descriptor(fd, tm));
CGAL_precondition(is_triangle(halfedge(fd, tm), tm));
CGAL_precondition(is_in_face(loc, tm));
// the first barycentric coordinate corresponds to source(halfedge(fd, tm), tm)
@ -942,11 +942,10 @@ locate_vertex(typename boost::graph_traits<TriangleMesh>::vertex_descriptor vd,
}
}
CGAL_postcondition(!CGAL::is_border(hd, tm)); // must find a 'real' face incident to 'vd'
CGAL_postcondition(!is_border(hd, tm)); // must find a 'real' face incident to 'vd'
CGAL_assertion(target(hd, tm) == vd);
face_descriptor fd = face(hd, tm);
CGAL_assertion(target(hd, tm) == vd);
CGAL_assertion(fd != boost::graph_traits<TriangleMesh>::null_face());
// isolated vertex
@ -989,7 +988,7 @@ locate_vertex(const typename boost::graph_traits<TriangleMesh>::vertex_descripto
const typename boost::graph_traits<TriangleMesh>::face_descriptor fd,
const TriangleMesh& tm)
{
CGAL_precondition(fd != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(is_valid_vertex_descriptor(vd, tm) && is_valid_face_descriptor(fd, tm));
FT coords[3] = { FT(0), FT(0), FT(0) };
std::size_t vertex_local_index = vertex_index_in_face(vd, fd, tm);
@ -1121,14 +1120,14 @@ locate_in_face(const typename internal::Location_traits<TriangleMesh, NamedParam
using parameters::get_parameter;
using parameters::choose_parameter;
CGAL_precondition(is_valid_face_descriptor(fd, tm));
VertexPointMap vpm = parameters::choose_parameter(parameters::get_parameter(np, internal_np::vertex_point),
get_const_property_map(boost::vertex_point, tm));
Geom_traits gt = choose_parameter<Geom_traits>(get_parameter(np, internal_np::geom_traits));
FT snap_tolerance = choose_parameter(get_parameter(np, internal_np::snapping_tolerance), 0);
CGAL_precondition(fd != boost::graph_traits<TriangleMesh>::null_face());
vertex_descriptor vd0 = source(halfedge(fd, tm), tm);
vertex_descriptor vd1 = target(halfedge(fd, tm), tm);
vertex_descriptor vd2 = target(next(halfedge(fd, tm), tm), tm);
@ -1288,10 +1287,9 @@ locate_in_common_face(std::pair<typename boost::graph_traits<TriangleMesh>::face
else if(const halfedge_descriptor* hd_ptr = boost::get<halfedge_descriptor>(&dv))
{
const halfedge_descriptor hd = *hd_ptr;
face_descriptor fd = face(hd, tm);
if(fd != boost::graph_traits<TriangleMesh>::null_face())
if(!is_border(hd, tm))
{
face_descriptor fd = face(hd, tm);
query_location = locate_in_face(query, fd, tm, np);
internal::snap_location_to_border<FT>(query_location, tm, tolerance); // @tmp keep or not ?
is_query_location_in_face = is_in_face(query_location, tm);
@ -1299,7 +1297,7 @@ locate_in_common_face(std::pair<typename boost::graph_traits<TriangleMesh>::face
if(!is_query_location_in_face)
{
fd = face(opposite(hd, tm), tm);
face_descriptor fd = face(opposite(hd, tm), tm);
query_location = locate_in_face(query, fd, tm, np);
is_query_location_in_face = is_in_face(query_location, tm);
}

View File

@ -112,7 +112,7 @@ edge_length(typename boost::graph_traits<PolygonMesh>::halfedge_descriptor h,
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(boost::graph_traits<PolygonMesh>::null_halfedge() != h);
CGAL_precondition(is_valid_halfedge_descriptor(h, pmesh));
typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
@ -132,6 +132,8 @@ edge_length(typename boost::graph_traits<PolygonMesh>::edge_descriptor e,
const PolygonMesh& pmesh,
const NamedParameters& np = parameters::default_values())
{
CGAL_precondition(is_valid_edge_descriptor(e, pmesh));
return edge_length(halfedge(e, pmesh), pmesh, np);
}
@ -187,7 +189,7 @@ squared_edge_length(typename boost::graph_traits<PolygonMesh>::halfedge_descript
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(boost::graph_traits<PolygonMesh>::null_halfedge() != h);
CGAL_precondition(is_valid_halfedge_descriptor(h, pmesh));
typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
@ -208,6 +210,8 @@ squared_edge_length(typename boost::graph_traits<PolygonMesh>::edge_descriptor e
const PolygonMesh& pmesh,
const NamedParameters& np = parameters::default_values())
{
CGAL_precondition(is_valid_edge_descriptor(e, pmesh));
return squared_edge_length(halfedge(e, pmesh), pmesh, np);
}
@ -415,7 +419,7 @@ face_area(typename boost::graph_traits<TriangleMesh>::face_descriptor f,
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(boost::graph_traits<TriangleMesh>::null_face() != f);
CGAL_precondition(is_valid_face_descriptor(f, tmesh));
typename GetVertexPointMap<TriangleMesh, CGAL_NP_CLASS>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
@ -486,7 +490,7 @@ squared_face_area(typename boost::graph_traits<TriangleMesh>::face_descriptor f,
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(boost::graph_traits<TriangleMesh>::null_face() != f);
CGAL_precondition(is_valid_face_descriptor(f, tmesh));
typename GetVertexPointMap<TriangleMesh, CGAL_NP_CLASS>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
@ -741,7 +745,7 @@ face_aspect_ratio(typename boost::graph_traits<TriangleMesh>::face_descriptor f,
const TriangleMesh& tmesh,
const CGAL_NP_CLASS& np = parameters::default_values())
{
CGAL_precondition(f != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(is_valid_face_descriptor(f, tmesh));
CGAL_precondition(is_triangle(halfedge(f, tmesh), tmesh));
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;

View File

@ -292,6 +292,8 @@ void merge_duplicated_vertices_in_boundary_cycle(typename boost::graph_traits<Po
using parameters::get_parameter;
using parameters::choose_parameter;
CGAL_precondition(is_valid_halfedge_descriptor(h, pm));
Vpm vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(vertex_point, pm));

View File

@ -127,9 +127,8 @@ public:
for(std::size_t j = 0; j < size; ++j)
vr[j] = vertices[polygon[j] ];
typename boost::graph_traits<PolygonMesh>::face_descriptor fd =
CGAL::Euler::add_face(vr, pmesh);
CGAL_assertion(fd != boost::graph_traits<PolygonMesh>::null_face());
typename boost::graph_traits<PolygonMesh>::face_descriptor fd = CGAL::Euler::add_face(vr, pmesh);
CGAL_postcondition(is_valid_face_descriptor(fd, pmesh));
*i2f++ = std::make_pair(i, fd);
}
}

View File

@ -80,6 +80,8 @@ bool is_degenerate_edge(typename boost::graph_traits<PolygonMesh>::edge_descript
using parameters::get_parameter;
using parameters::choose_parameter;
CGAL_precondition(is_valid_edge_descriptor(e, pm));
typedef typename GetVertexPointMap<PolygonMesh, NamedParameters>::const_type VertexPointMap;
VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(vertex_point, pm));
@ -190,11 +192,12 @@ bool is_degenerate_triangle_face(typename boost::graph_traits<TriangleMesh>::fac
const TriangleMesh& tm,
const NamedParameters& np = parameters::default_values())
{
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
using parameters::get_parameter;
using parameters::choose_parameter;
CGAL_precondition(is_valid_face_descriptor(f, tm));
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::const_type VertexPointMap;
VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(vertex_point, tm));
@ -396,14 +399,14 @@ is_needle_triangle_face(typename boost::graph_traits<TriangleMesh>::face_descrip
const double threshold,
const NamedParameters& np = parameters::default_values())
{
CGAL_precondition(threshold >= 1.);
CGAL_precondition(f != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
using parameters::get_parameter;
using parameters::choose_parameter;
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_face_descriptor(f, tm));
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
CGAL_precondition(threshold >= 1.);
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::const_type VertexPointMap;
VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),
@ -545,15 +548,15 @@ is_cap_triangle_face(typename boost::graph_traits<TriangleMesh>::face_descriptor
const double threshold,
const NamedParameters& np = parameters::default_values())
{
CGAL_precondition(f != boost::graph_traits<TriangleMesh>::null_face());
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
CGAL_precondition(threshold >= -1.);
CGAL_precondition(threshold <= 0.);
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
using parameters::get_parameter;
using parameters::choose_parameter;
typedef typename boost::graph_traits<TriangleMesh>::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_face_descriptor(f, tm));
CGAL_precondition(CGAL::is_triangle(halfedge(f, tm), tm));
CGAL_precondition(threshold >= -1.);
CGAL_precondition(threshold <= 0.);
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::const_type VertexPointMap;
VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),

View File

@ -1063,7 +1063,7 @@ std::size_t stitch_boundary_cycle(const typename boost::graph_traits<PolygonMesh
typedef typename boost::graph_traits<PolygonMesh>::halfedge_descriptor halfedge_descriptor;
typedef typename std::pair<halfedge_descriptor, halfedge_descriptor> halfedges_pair;
CGAL_precondition(h != boost::graph_traits<PolygonMesh>::null_halfedge());
CGAL_precondition(is_valid_halfedge_descriptor(h, pmesh));
CGAL_precondition(is_border(h, pmesh));
CGAL_precondition(is_valid(pmesh));

View File

@ -66,6 +66,8 @@ triangle(typename boost::graph_traits<TriangleMesh>::face_descriptor fd,
using CGAL::parameters::choose_parameter;
using CGAL::parameters::get_parameter;
CGAL_precondition(is_valid_face_descriptor(fd, tmesh));
typename GetVertexPointMap<TriangleMesh, CGAL_NP_CLASS>::const_type
vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_const_property_map(CGAL::vertex_point, tmesh));

View File

@ -474,6 +474,8 @@ bool triangulate_face(typename boost::graph_traits<PolygonMesh>::face_descriptor
using parameters::choose_parameter;
using parameters::get_parameter;
CGAL_precondition(is_valid_face_descriptor(f, pmesh));
//VertexPointMap
typedef typename GetVertexPointMap<PolygonMesh, NamedParameters>::type VPMap;
VPMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),

View File

@ -468,6 +468,8 @@ namespace Polygon_mesh_processing {
using parameters::choose_parameter;
using parameters::get_parameter_reference;
CGAL_precondition(is_valid_halfedge_descriptor(border_halfedge, pmesh));
std::vector<typename boost::graph_traits<PolygonMesh>::vertex_descriptor> patch;
face_out = triangulate_and_refine_hole
(pmesh, border_halfedge, face_out, std::back_inserter(patch), np).first;