Restore the PMP_properties_Surface_mesh.h and remove the private copy constructor of Gwdwg to let the default one be used, as it does not allow memory. This allows Surface only meshing to work with surface_mesh.

This commit is contained in:
Maxime Gimeno 2017-05-12 15:21:30 +02:00
parent 95960c3b58
commit 360031a14a
6 changed files with 254 additions and 201 deletions

View File

@ -146,11 +146,6 @@ struct Graph_with_descriptor_with_graph
Graph_with_descriptor_with_graph(Graph& graph) Graph_with_descriptor_with_graph(Graph& graph)
: graph(&graph) : graph(&graph)
{} {}
// private:
// disable copy-constructor to avoid non-wanted copies
// AF: Why was this private??
Graph_with_descriptor_with_graph(const Graph_with_descriptor_with_graph&){}
}; };

View File

@ -7,6 +7,7 @@
#include <CGAL/Bbox_3.h> #include <CGAL/Bbox_3.h>
#include "CGAL/boost/graph/Graph_with_descriptor_with_graph.h" #include "CGAL/boost/graph/Graph_with_descriptor_with_graph.h"
#include <Polyhedron_type.h> #include <Polyhedron_type.h>
#include <CGAL/boost/graph/PMP_properties_Surface_mesh.h>
#include <Scene_c3t3_item.h> #include <Scene_c3t3_item.h>

View File

@ -8,6 +8,7 @@
#include "Kernel_type.h" #include "Kernel_type.h"
#include "Meshing_thread.h" #include "Meshing_thread.h"
#include "Scene_surface_mesh_item.h" #include "Scene_surface_mesh_item.h"
namespace CGAL namespace CGAL
{ {
template<typename Graph_> template<typename Graph_>

View File

@ -18,200 +18,4 @@ typedef boost::graph_traits<SMesh>::face_descriptor face_descriptor;
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor; typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits<SMesh>::halfedge_descriptor halfedge_descriptor; typedef boost::graph_traits<SMesh>::halfedge_descriptor halfedge_descriptor;
namespace CGAL{
SMesh::Property_map<boost::graph_traits<SMesh>::halfedge_descriptor,bool>
inline get(CGAL::halfedge_is_feature_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::halfedge_descriptor halfedge_descriptor;
return smesh.add_property_map<halfedge_descriptor,bool>("h:is_feature").first;
}
template < typename I>
SMesh::Property_map< boost::graph_traits<SMesh >::face_descriptor,I>
inline get(CGAL::face_patch_id_t<I>, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::face_descriptor face_descriptor;
return smesh.add_property_map<face_descriptor,I>("f:patch_id").first;
}
CGAL::static_property_map<boost::graph_traits<SMesh> ::face_descriptor,std::pair<int,int> >
inline get(CGAL::face_patch_id_t<void>, SMesh & smesh)
{
typedef CGAL::static_property_map<boost::graph_traits<SMesh>::face_descriptor,
std::pair<int,int> > Pmap;
return Pmap(std::make_pair(0,1));
}
SMesh::Property_map< boost::graph_traits<SMesh >::face_descriptor,int>
inline get(CGAL::face_selection_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::face_descriptor face_descriptor;
return smesh.add_property_map<face_descriptor,int>("f:selection").first;
}
SMesh::Property_map< boost::graph_traits<SMesh >::vertex_descriptor,int>
inline get(CGAL::vertex_selection_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::vertex_descriptor vertex_descriptor;
return smesh.add_property_map<vertex_descriptor,int>("v:selection").first;
}
SMesh::Property_map< boost::graph_traits<SMesh >::vertex_descriptor,int>
inline get(CGAL::vertex_num_feature_edges_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::vertex_descriptor vertex_descriptor;
return smesh.add_property_map<vertex_descriptor,int>("v:nfe").first;
}
template < typename Patch_ID>
SMesh::Property_map< boost::graph_traits<SMesh >::vertex_descriptor,std::set<int> >
inline get(CGAL::vertex_incident_patches_t<Patch_ID>, SMesh& smesh)
{
typedef boost::graph_traits<SMesh >::vertex_descriptor vertex_descriptor;
return smesh.add_property_map<vertex_descriptor,std::set<int> >("v:ip").first;
}
SMesh::Property_map< boost::graph_traits<SMesh >::vertex_descriptor,std::size_t>
inline get(CGAL::vertex_time_stamp_t, SMesh & smesh)
{
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
return smesh.add_property_map<vertex_descriptor,std::size_t>("v:time_stamp").first;
}
SMesh::Property_map< boost::graph_traits<SMesh>::halfedge_descriptor,std::size_t>
inline get(CGAL::halfedge_time_stamp_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh>::halfedge_descriptor halfedge_descriptor;
return smesh.add_property_map<halfedge_descriptor,std::size_t>("h:time_stamp").first;
}
SMesh::Property_map< boost::graph_traits<SMesh>::face_descriptor,std::size_t>
inline get(CGAL::face_time_stamp_t, SMesh& smesh)
{
typedef boost::graph_traits<SMesh>::face_descriptor face_descriptor;
return smesh.add_property_map<face_descriptor,std::size_t>("v:time_stamp").first;
}
}
namespace boost
{
template<>
struct property_map<SMesh, CGAL::halfedge_is_feature_t>
{
typedef boost::graph_traits<SMesh>::halfedge_descriptor halfedge_descriptor;
typedef SMesh::Property_map<halfedge_descriptor, bool> type;
typedef type const_type;
};
template<typename I>
struct property_map<SMesh, CGAL::face_patch_id_t<I> >
{
typedef boost::graph_traits<SMesh>::face_descriptor face_descriptor;
typedef SMesh::Property_map<face_descriptor, I> type;
typedef type const_type;
};
template <>
struct property_map<SMesh, CGAL::face_patch_id_t<void> >
{
typedef typename boost::graph_traits<SMesh>::face_descriptor face_descriptor;
typedef CGAL::static_property_map< boost::graph_traits<SMesh>::face_descriptor,std::pair<int,int> > type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::vertex_selection_t>
{
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
typedef SMesh::Property_map<vertex_descriptor, int> type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::face_selection_t>
{
typedef boost::graph_traits<SMesh>::face_descriptor face_descriptor;
typedef SMesh::Property_map<face_descriptor, int> type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::vertex_num_feature_edges_t>
{
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
typedef SMesh::Property_map<vertex_descriptor, int> type;
typedef type const_type;
};
template<typename Patch_ID>
struct property_map<SMesh, CGAL::vertex_incident_patches_t<Patch_ID>>
{
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
typedef SMesh::Property_map<vertex_descriptor, std::set<int>> type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::vertex_time_stamp_t>
{
typedef boost::graph_traits<SMesh>::vertex_descriptor vertex_descriptor;
typedef SMesh::Property_map<vertex_descriptor, std::size_t> type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::halfedge_time_stamp_t>
{
typedef boost::graph_traits<SMesh >::halfedge_descriptor halfedge_descriptor;
typedef SMesh::Property_map<halfedge_descriptor, std::size_t> type;
typedef type const_type;
};
template<>
struct property_map<SMesh, CGAL::face_time_stamp_t>
{
typedef boost::graph_traits<SMesh >::face_descriptor face_descriptor;
typedef SMesh::Property_map<face_descriptor, std::size_t> type;
typedef type const_type;
};
} //boost
#endif // SMESH_TYPE_H #endif // SMESH_TYPE_H

View File

@ -7,6 +7,7 @@
#ifdef USE_SURFACE_MESH #ifdef USE_SURFACE_MESH
#include "Scene_surface_mesh_item.h" #include "Scene_surface_mesh_item.h"
#include <CGAL/boost/graph/PMP_properties_Surface_mesh.h>
#else #else
#include "Polyhedron_type.h" #include "Polyhedron_type.h"
#include <CGAL/boost/graph/PMP_properties_Polyhedron_3.h> #include <CGAL/boost/graph/PMP_properties_Polyhedron_3.h>

View File

@ -0,0 +1,251 @@
// Copyright (c) 2017 GeometryFactory (France). All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 3 of the License,
// or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Andreas Fabri
#ifndef CGAL_PMP_PROPERTIES_SURFACE_MESH_H
#define CGAL_PMP_PROPERTIES_SURFACE_MESH_H
#include <CGAL/license/Surface_mesh.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Polygon_mesh_processing/properties.h>
namespace boost {
template <typename P, typename I>
struct property_map<CGAL::Surface_mesh<P>, CGAL::face_patch_id_t<I> >
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor face_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<face_descriptor, I> type;
typedef type const_type;
};
template <typename P>
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 CGAL::static_property_map<typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor,std::pair<int,int> > type;
typedef type const_type;
};
template<typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::halfedge_is_feature_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::halfedge_descriptor halfedge_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<halfedge_descriptor, bool> type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::vertex_selection_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<vertex_descriptor, int> type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::face_selection_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor face_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<face_descriptor, int> type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::vertex_num_feature_edges_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<vertex_descriptor, int> type;
typedef type const_type;
};
template <typename P, typename I>
struct property_map<CGAL::Surface_mesh<P>, CGAL::vertex_incident_patches_t<I> >
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<vertex_descriptor, std::set<I> > type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::vertex_time_stamp_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<vertex_descriptor, std::size_t> type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::halfedge_time_stamp_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::halfedge_descriptor halfedge_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<halfedge_descriptor, std::size_t> type;
typedef type const_type;
};
template <typename P>
struct property_map<CGAL::Surface_mesh<P>, CGAL::face_time_stamp_t>
{
typedef typename boost::graph_traits<CGAL::Surface_mesh<P> >::face_descriptor face_descriptor;
typedef typename CGAL::Surface_mesh<P>::template Property_map<face_descriptor, std::size_t> type;
typedef type const_type;
};
} // namespace boost
namespace CGAL {
template <typename P, typename Property_tag>
struct Get_pmap_of_surface_mesh {
typedef typename boost::property_map<Surface_mesh<P>, Property_tag >::type type;
};
template <typename P, typename I>
typename boost::lazy_disable_if<
boost::is_const<P>,
Get_pmap_of_surface_mesh<P, CGAL::face_patch_id_t<I> >
>::type
inline get(CGAL::face_patch_id_t<I>, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::face_descriptor face_descriptor;
return smesh. template add_property_map<face_descriptor,I>("f:patch_id").first;
}
#define CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(Tag) \
typename boost::lazy_disable_if< \
boost::is_const<P>, \
Get_pmap_of_surface_mesh<P, Tag > \
>::type
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::face_patch_id_t<void>)
inline get(CGAL::face_patch_id_t<void>, Surface_mesh<P> & smesh)
{
typedef CGAL::static_property_map<typename boost::graph_traits<Surface_mesh<P> >::face_descriptor,std::pair<int,int> > Pmap;
return Pmap(std::make_pair(0,1));
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::halfedge_is_feature_t)
inline get(CGAL::halfedge_is_feature_t, Surface_mesh<P>& smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::halfedge_descriptor halfedge_descriptor;
return smesh. template add_property_map<halfedge_descriptor,bool>("h:is_feature").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::face_selection_t)
inline get(CGAL::face_selection_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::face_descriptor face_descriptor;
return smesh. template add_property_map<face_descriptor,int>("f:selection").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::vertex_selection_t)
inline get(CGAL::vertex_selection_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
return smesh. template add_property_map<vertex_descriptor,int>("v:selection").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::vertex_num_feature_edges_t)
inline get(CGAL::vertex_num_feature_edges_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
return smesh. template add_property_map<vertex_descriptor,int>("v:nfe").first;
}
template <typename P, typename I>
typename boost::lazy_disable_if<
boost::is_const<P>,
Get_pmap_of_surface_mesh<P, CGAL::vertex_incident_patches_t<I> >
>::type
inline get(CGAL::vertex_incident_patches_t<I>, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
return smesh. template add_property_map<vertex_descriptor,std::set<I> >("v:ip").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::vertex_time_stamp_t)
inline get(CGAL::vertex_time_stamp_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::vertex_descriptor vertex_descriptor;
return smesh. template add_property_map<vertex_descriptor,std::size_t>("v:time_stamp").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::halfedge_time_stamp_t)
inline get(CGAL::halfedge_time_stamp_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::halfedge_descriptor halfedge_descriptor;
return smesh. template add_property_map<halfedge_descriptor,std::size_t>("h:time_stamp").first;
}
template <typename P>
CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE(CGAL::face_time_stamp_t)
inline get(CGAL::face_time_stamp_t, Surface_mesh<P> & smesh)
{
typedef typename boost::graph_traits<Surface_mesh<P> >::face_descriptor face_descriptor;
return smesh. template add_property_map<face_descriptor,std::size_t>("v:time_stamp").first;
}
} // namespace CGAL
#undef CGAL_PMP_PROPERTY_SURFACE_MESH_RETURN_TYPE
#endif //CGAL_PMP_PROPERTIES_SURFACE_MESH_H