Fix compilation of mesh_polyhedral_domain.cpp with Polyhedron_3

This commit is contained in:
Laurent Rineau 2017-09-08 18:30:49 +02:00
parent ebf8db64e9
commit 578889e801
5 changed files with 54 additions and 13 deletions

View File

@ -154,6 +154,25 @@ struct Polyhedron_property_map<CGAL::face_patch_id_t<CGAL::Tag_true> >
};
};
// Compatibility: when the `Patch_id` template argument of
// `Polyhedron_mesh_domain` is `Tag_false` (because that argument was named
// `UsePatchId` in previous versions of CGAL.
template <>
struct Polyhedron_property_map<CGAL::face_patch_id_t<CGAL::Tag_false> >
: public Polyhedron_property_map<CGAL::face_patch_id_t<void> >
{
};
template <class Gt, class I, CGAL_HDS_PARAM_, class A>
typename boost::lazy_enable_if<
internal::has_Plane_3<Gt>,
internal::Get_static_property_map<Gt, I, HDS, A>
>::type
get(CGAL::face_patch_id_t<Tag_false>, const Polyhedron_3<Gt,I,HDS,A>& p)
{
return get(CGAL::face_patch_id_t<void>(), p);
}
struct Polyhedron_num_feature_edges_pmap {
typedef void key_type;
typedef int value_type;

View File

@ -880,7 +880,6 @@ detect_features(FT angle_in_degree,
BOOST_FOREACH(Polyhedron_type& p, poly)
{
PIDMap pid_map = get(face_patch_id_t<Patch_id>(), p);
VIPMap vip_map = get(vertex_incident_patches_t<Patch_id>(), p);
EIFMap eif = get(CGAL::edge_is_feature, p);
const std::size_t polyhedron_id = &p - &poly[0];
BOOST_FOREACH(face_descriptor f, faces(p))

View File

@ -32,8 +32,7 @@
#include <CGAL/Mesh_3/global_parameters.h>
#include <CGAL/Mesh_3/Robust_intersection_traits_3.h>
#include <CGAL/boost/graph/Graph_with_descriptor_with_graph.h>
#include <CGAL/Surface_mesh/Surface_mesh_fwd.h>
#include <CGAL/Mesh_3/properties_Polyhedron_3.h>
#include <CGAL/Side_of_triangle_mesh.h>
#include <CGAL/AABB_tree.h>
@ -53,6 +52,8 @@
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/or.hpp>
#include <boost/type_traits/is_same.hpp>
#include <CGAL/tuple.h>
#include <boost/format.hpp>
#include <boost/variant.hpp>
@ -188,8 +189,8 @@ public:
struct Primitive {
typedef typename boost::graph_traits<P>::face_descriptor face_descriptor_t;
const P* graph;
face_descriptor_t face_descriptor;
const P* graph;
typedef Triangle_from_face_descriptor_map<P> Triangle_pmap;
typedef One_point_from_face_descriptor_map<P> Point_pmap;
@ -223,18 +224,37 @@ public:
typedef Primitive<P> type;
static Surface_patch_index get_index(const typename type::Id primitive_id) {
return get(get(face_patch_id_t<Surface_patch_index>(),
return get(get(face_patch_id_t<Patch_id>(),
*primitive_id.graph),
primitive_id.face_descriptor);
}
};
}; // Primitive_type (for non-Polyhedron_3)
template <typename P> struct Primitive_type<P, true> {
typedef AABB_face_graph_triangle_primitive<P > type;
static Surface_patch_index get_index(const typename type::Id face_handle) {
return face_handle->patch_id();
static Surface_patch_index get_index(const typename type::Id face_handle,
Tag_false)
{
typename boost::property_map<P, face_patch_id_t<Patch_id> >::type pmap;
return get(pmap, face_handle);
}
};
static Surface_patch_index get_index(const typename type::Id,
Tag_true)
{
return Surface_patch_index(0,1);
}
static Surface_patch_index get_index(const typename type::Id face_handle)
{
namespace m = boost::mpl;
return get_index(face_handle,
Boolean_tag<m::or_<boost::is_same<Patch_id, void>,
boost::is_same<Patch_id, Tag_false>
>::value>());
}
}; // Primitive_type specialized for CGAL::Polyehdron_3
public:
typedef typename Primitive_type<Polyhedron>::type Ins_fctor_primitive;

View File

@ -463,11 +463,11 @@ detect_features(FT angle_in_degree, std::vector<Polyhedron>& poly)
face_ids[f] = id++;
}
typedef typename boost::property_map<Polyhedron,CGAL::face_patch_id_t<Patch_id> >::type PIDMap;
typedef typename boost::property_map<Polyhedron,CGAL::face_patch_id_t<Tag_> >::type PIDMap;
typedef typename boost::property_map<Polyhedron,CGAL::vertex_incident_patches_t<P_id> >::type VIPMap;
typedef typename boost::property_map<Polyhedron, CGAL::edge_is_feature_t>::type EIFMap;
PIDMap pid_map = get(face_patch_id_t<Patch_id>(), p);
PIDMap pid_map = get(face_patch_id_t<Tag_>(), p);
VIPMap vip_map = get(vertex_incident_patches_t<P_id>(), p);
EIFMap eif_map = get(CGAL::edge_is_feature, p);
@ -572,8 +572,8 @@ add_featured_edges_to_graph(const Polyhedron& p,
}
}
typedef typename boost::property_map<Polyhedron,face_patch_id_t<Patch_id> >::type Face_patch_id_pmap;
Face_patch_id_pmap fpm = get(face_patch_id_t<Patch_id>(),p);
typedef typename boost::property_map<Polyhedron,face_patch_id_t<Tag_> >::type Face_patch_id_pmap;
Face_patch_id_pmap fpm = get(face_patch_id_t<Tag_>(),p);
BOOST_FOREACH(Graph_edge_descriptor e, edges(graph)){
vertex_descriptor vs = p2vmap[get(vpm,source(e,graph))];

View File

@ -44,10 +44,13 @@ namespace CGAL {
template <typename K, typename V>
class Static_property_map
{
public:
typedef K key_type;
typedef V value_type;
typedef const V& reference;
typedef boost::read_write_property_map_tag category;
private:
V v;
public: