add a static bool map and use it when possible

also remove Static_property_map that is a duplicate of Constant_property_map
This commit is contained in:
Sébastien Loriot 2020-05-15 18:27:33 +02:00
parent 577ea40394
commit fbd9628307
13 changed files with 34 additions and 69 deletions

View File

@ -936,13 +936,6 @@ void keep_connected_components(PolygonMesh& pmesh
namespace internal { namespace internal {
template <typename G>
struct No_mark
{
friend bool get(No_mark<G>, typename boost::graph_traits<G>::edge_descriptor) { return false; }
friend void put(No_mark<G>, typename boost::graph_traits<G>::edge_descriptor, bool) { }
};
template < class PolygonMesh, class PolygonMeshRange, template < class PolygonMesh, class PolygonMeshRange,
class FIMap, class VIMap, class FIMap, class VIMap,
class HIMap, class Ecm, class NamedParameters > class HIMap, class Ecm, class NamedParameters >
@ -1039,17 +1032,19 @@ void split_connected_components(const PolygonMesh& pm,
PolygonMeshRange& cc_meshes, PolygonMeshRange& cc_meshes,
const NamedParameters& np) const NamedParameters& np)
{ {
typedef Static_boolean_property_map<
typename boost::graph_traits<PolygonMesh>::edge_descriptor, false> Default_ecm;
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::edge_is_constrained_t, internal_np::edge_is_constrained_t,
NamedParameters, NamedParameters,
internal::No_mark<PolygonMesh>//default Default_ecm//default
> ::type Ecm; > ::type Ecm;
using parameters::choose_parameter; using parameters::choose_parameter;
using parameters::get_parameter; using parameters::get_parameter;
Ecm ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), Ecm ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained),
internal::No_mark<PolygonMesh>()); Default_ecm());
internal::split_connected_components_impl(CGAL::get_initialized_face_index_map(pm, np), internal::split_connected_components_impl(CGAL::get_initialized_face_index_map(pm, np),
CGAL::get_initialized_halfedge_index_map(pm, np), CGAL::get_initialized_halfedge_index_map(pm, np),

View File

@ -1524,7 +1524,7 @@ private:
// update status using constrained edge map // update status using constrained edge map
if (!boost::is_same<EdgeIsConstrainedMap, if (!boost::is_same<EdgeIsConstrainedMap,
Constant_property_map<edge_descriptor, bool> >::value) Static_boolean_property_map<edge_descriptor, false> >::value)
{ {
for(edge_descriptor e : edges(mesh_)) for(edge_descriptor e : edges(mesh_))
{ {

View File

@ -174,10 +174,10 @@ std::size_t make_umbrella_manifold(typename boost::graph_traits<PolygonMesh>::ha
typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_is_constrained_t, typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<vertex_descriptor, bool> // default (no constraint pmap) Static_boolean_property_map<vertex_descriptor, false> // default (no constraint pmap)
>::type VerticesMap; >::type VerticesMap;
VerticesMap cmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), VerticesMap cmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained),
Constant_property_map<vertex_descriptor, bool>(false)); Static_boolean_property_map<vertex_descriptor, false>());
std::size_t nb_new_vertices = 0; std::size_t nb_new_vertices = 0;

View File

@ -1216,7 +1216,7 @@ bool does_bound_a_volume(const TriangleMesh& tm, const NamedParameters& np)
CGAL_precondition(is_closed(tm)); CGAL_precondition(is_closed(tm));
CGAL_precondition(is_triangle_mesh(tm)); CGAL_precondition(is_triangle_mesh(tm));
Static_property_map<face_descriptor, std::size_t> vidmap(0); // dummy map not used Constant_property_map<face_descriptor, std::size_t> vidmap(0); // dummy map not used
std::size_t res = std::size_t res =
volume_connected_components(tm, vidmap, np.do_orientation_tests(true) volume_connected_components(tm, vidmap, np.do_orientation_tests(true)
.i_used_as_a_predicate(true)); .i_used_as_a_predicate(true));
@ -1297,7 +1297,7 @@ void orient_to_bound_a_volume(TriangleMesh& tm,
std::vector<std::size_t> face_cc(num_faces(tm), std::size_t(-1)); std::vector<std::size_t> face_cc(num_faces(tm), std::size_t(-1));
std::vector<std::size_t> nesting_levels; std::vector<std::size_t> nesting_levels;
std::vector<bool> is_cc_outward_oriented; std::vector<bool> is_cc_outward_oriented;
Static_property_map<face_descriptor, std::size_t> vidmap(0); // dummy map not used Constant_property_map<face_descriptor, std::size_t> vidmap(0); // dummy map not used
volume_connected_components(tm, vidmap, volume_connected_components(tm, vidmap,
parameters::vertex_point_map(vpm) parameters::vertex_point_map(vpm)

View File

@ -163,10 +163,10 @@ void random_perturbation(VertexRange vertices
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::vertex_is_constrained_t, internal_np::vertex_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<vertex_descriptor, bool> // default Static_boolean_property_map<vertex_descriptor, false> // default
> ::type VCMap; > ::type VCMap;
VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained),
Constant_property_map<vertex_descriptor, bool>(false)); Static_boolean_property_map<vertex_descriptor, false>());
unsigned int seed = choose_parameter(get_parameter(np, internal_np::random_seed), -1); unsigned int seed = choose_parameter(get_parameter(np, internal_np::random_seed), -1);
bool do_project = choose_parameter(get_parameter(np, internal_np::do_project), true); bool do_project = choose_parameter(get_parameter(np, internal_np::do_project), true);

View File

@ -165,18 +165,18 @@ void isotropic_remeshing(const FaceRange& faces
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::edge_is_constrained_t, internal_np::edge_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<edge_descriptor, bool> // default (no constraint pmap) Static_boolean_property_map<edge_descriptor, false> // default (no constraint pmap)
> ::type ECMap; > ::type ECMap;
ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained),
Constant_property_map<edge_descriptor, bool>(false)); Static_boolean_property_map<edge_descriptor, bool>());
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::vertex_is_constrained_t, internal_np::vertex_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<vertex_descriptor, bool> // default (no constraint pmap) Static_boolean_property_map<vertex_descriptor, false> // default (no constraint pmap)
> ::type VCMap; > ::type VCMap;
VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained),
Constant_property_map<vertex_descriptor, bool>(false)); Static_boolean_property_map<vertex_descriptor, false>());
bool protect = choose_parameter(get_parameter(np, internal_np::protect_constraints), false); bool protect = choose_parameter(get_parameter(np, internal_np::protect_constraints), false);
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
@ -342,18 +342,18 @@ void split_long_edges(const EdgeRange& edges
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::edge_is_constrained_t, internal_np::edge_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<edge_descriptor, bool> // default (no constraint pmap) Static_boolean_property_map<edge_descriptor, false> // default (no constraint pmap)
> ::type ECMap; > ::type ECMap;
ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained),
Constant_property_map<edge_descriptor, bool>(false)); Static_boolean_property_map<edge_descriptor, false>());
typename internal::Incremental_remesher<PM, VPMap, GT, ECMap, typename internal::Incremental_remesher<PM, VPMap, GT, ECMap,
Constant_property_map<vertex_descriptor, bool>, // no constraint pmap Static_boolean_property_map<vertex_descriptor, false>, // no constraint pmap
internal::Connected_components_pmap<PM, FIMap>, internal::Connected_components_pmap<PM, FIMap>,
FIMap FIMap
> >
remesher(pmesh, vpmap, gt, false/*protect constraints*/, ecmap, remesher(pmesh, vpmap, gt, false/*protect constraints*/, ecmap,
Constant_property_map<vertex_descriptor, bool>(false), Static_boolean_property_map<vertex_descriptor, false>(),
internal::Connected_components_pmap<PM, FIMap>(faces(pmesh), pmesh, ecmap, fimap, false), internal::Connected_components_pmap<PM, FIMap>(faces(pmesh), pmesh, ecmap, fimap, false),
fimap, fimap,
false/*need aabb_tree*/); false/*need aabb_tree*/);

View File

@ -353,17 +353,17 @@ bool remove_almost_degenerate_faces(const FaceRange& face_range,
typedef typename boost::graph_traits<TriangleMesh>::edge_descriptor edge_descriptor; typedef typename boost::graph_traits<TriangleMesh>::edge_descriptor edge_descriptor;
typedef typename boost::graph_traits<TriangleMesh>::face_descriptor face_descriptor; typedef typename boost::graph_traits<TriangleMesh>::face_descriptor face_descriptor;
typedef Constant_property_map<vertex_descriptor, bool> Default_VCM; typedef Static_boolean_property_map<vertex_descriptor, false> Default_VCM;
typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_is_constrained_t, typedef typename internal_np::Lookup_named_param_def<internal_np::vertex_is_constrained_t,
NamedParameters, NamedParameters,
Default_VCM>::type VCM; Default_VCM>::type VCM;
VCM vcm_np = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), Default_VCM(false)); VCM vcm_np = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), Default_VCM());
typedef Constant_property_map<edge_descriptor, bool> Default_ECM; typedef Static_boolean_property_map<edge_descriptor, false> Default_ECM;
typedef typename internal_np::Lookup_named_param_def<internal_np::edge_is_constrained_t, typedef typename internal_np::Lookup_named_param_def<internal_np::edge_is_constrained_t,
NamedParameters, NamedParameters,
Default_ECM>::type ECM; Default_ECM>::type ECM;
ECM ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), Default_ECM(false)); ECM ecm = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), Default_ECM());
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::const_type VPM; typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::const_type VPM;
VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point),

View File

@ -122,7 +122,7 @@ void smooth_mesh(const FaceRange& faces,
typedef typename internal_np::Lookup_named_param_def<internal_np::edge_is_constrained_t, typedef typename internal_np::Lookup_named_param_def<internal_np::edge_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<edge_descriptor, bool> // default Static_boolean_property_map<edge_descriptor, false> // default
> ::type ECMap; > ::type ECMap;
typedef internal::Area_smoother<TriangleMesh, VertexPointMap, GeomTraits> Area_optimizer; typedef internal::Area_smoother<TriangleMesh, VertexPointMap, GeomTraits> Area_optimizer;
@ -182,7 +182,7 @@ void smooth_mesh(const FaceRange& faces,
} }
ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained), ECMap ecmap = choose_parameter(get_parameter(np, internal_np::edge_is_constrained),
Constant_property_map<edge_descriptor, bool>(false)); Static_boolean_property_map<edge_descriptor, false>());
// a constrained edge has constrained extremities // a constrained edge has constrained extremities
for(face_descriptor f : faces) for(face_descriptor f : faces)

View File

@ -92,7 +92,7 @@ void smooth_shape(const FaceRange& faces,
typedef typename internal_np::Lookup_named_param_def< typedef typename internal_np::Lookup_named_param_def<
internal_np::vertex_is_constrained_t, internal_np::vertex_is_constrained_t,
NamedParameters, NamedParameters,
Constant_property_map<vertex_descriptor, bool> >::type VCMap; Static_boolean_property_map<vertex_descriptor, false> >::type VCMap;
using parameters::choose_parameter; using parameters::choose_parameter;
using parameters::get_parameter; using parameters::get_parameter;
@ -101,7 +101,7 @@ void smooth_shape(const FaceRange& faces,
VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point), VertexPointMap vpmap = choose_parameter(get_parameter(np, internal_np::vertex_point),
get_property_map(CGAL::vertex_point, tmesh)); get_property_map(CGAL::vertex_point, tmesh));
VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained), VCMap vcmap = choose_parameter(get_parameter(np, internal_np::vertex_is_constrained),
Constant_property_map<vertex_descriptor, bool>(false)); Static_boolean_property_map<vertex_descriptor, false>());
const unsigned int nb_iterations = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 1); const unsigned int nb_iterations = choose_parameter(get_parameter(np, internal_np::number_of_iterations), 1);
#if defined(CGAL_EIGEN3_ENABLED) #if defined(CGAL_EIGEN3_ENABLED)

View File

@ -378,7 +378,7 @@ public Q_SLOTS:
*selection_item->polyhedron(), *selection_item->polyhedron(),
selection_item->constrained_edges_pmap(), selection_item->constrained_edges_pmap(),
get(CGAL::vertex_point, *selection_item->polyhedron()), get(CGAL::vertex_point, *selection_item->polyhedron()),
CGAL::Static_property_map<face_descriptor, std::size_t>(1), CGAL::Constant_property_map<face_descriptor, std::size_t>(1),
4. / 3. * target_length)) 4. / 3. * target_length))
{ {
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
@ -578,7 +578,7 @@ public Q_SLOTS:
pmesh, pmesh,
ecm, ecm,
get(CGAL::vertex_point, pmesh), get(CGAL::vertex_point, pmesh),
CGAL::Static_property_map<face_descriptor, std::size_t>(1), CGAL::Constant_property_map<face_descriptor, std::size_t>(1),
4. / 3. * target_length)) 4. / 3. * target_length))
{ {
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();

View File

@ -27,8 +27,8 @@ BOOST_MPL_HAS_XXX_TRAIT_DEF(Plane_3)
template <class Gt, class I, CGAL_HDS_PARAM_, class A> template <class Gt, class I, CGAL_HDS_PARAM_, class A>
struct Get_static_property_map { struct Get_static_property_map {
typedef boost::graph_traits<CGAL::Polyhedron_3<Gt,I,HDS,A> > Graph_traits; typedef boost::graph_traits<CGAL::Polyhedron_3<Gt,I,HDS,A> > Graph_traits;
typedef CGAL::Static_property_map<typename Graph_traits::face_descriptor, typedef CGAL::Constant_property_map<typename Graph_traits::face_descriptor,
std::pair<int,int> > type; std::pair<int,int> > type;
}; };
} // end namespace internal } // end namespace internal

View File

@ -35,37 +35,7 @@ namespace CGAL {
/// \cond SKIP_DOXYGEN /// \cond SKIP_DOXYGEN
/// This class is almost the same as boost::static_property_map /// A boolean property map return a const value at compile time
/// The difference is that it is writable, although put() does nothing
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:
Static_property_map(V pv)
:v(pv){}
inline friend
value_type
get(const Static_property_map& pm, const key_type&)
{
return pm.v;
}
inline friend
void
put(Static_property_map&, const key_type&, const value_type&)
{}
};
/// Similar to Static_property_map but retricted to bool and the value is const at compile time
template <typename Key, bool default_value> template <typename Key, bool default_value>
class Static_boolean_property_map class Static_boolean_property_map
{ {

View File

@ -36,7 +36,7 @@ struct property_map<CGAL::Surface_mesh<P>, CGAL::face_patch_id_t<void> >
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor face_descriptor; typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor face_descriptor;
typedef CGAL::Static_property_map<typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor,std::pair<int,int> > type; typedef CGAL::Constant_property_map<typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor,std::pair<int,int> > type;
typedef type const_type; typedef type const_type;
}; };
@ -111,7 +111,7 @@ template <typename P>
CGAL_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::face_patch_id_t<void>) CGAL_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::face_patch_id_t<void>)
inline get(CGAL::face_patch_id_t<void>, const Surface_mesh<P> &) inline get(CGAL::face_patch_id_t<void>, const Surface_mesh<P> &)
{ {
typedef CGAL::Static_property_map<typename boost::graph_traits<Surface_mesh<P> >::face_descriptor,std::pair<int,int> > Pmap; typedef CGAL::Constant_property_map<typename boost::graph_traits<Surface_mesh<P> >::face_descriptor,std::pair<int,int> > Pmap;
return Pmap(std::make_pair(0,1)); return Pmap(std::make_pair(0,1));
} }