update the code to make it compiling again

This commit is contained in:
Sébastien Loriot 2014-12-18 17:22:00 +01:00
parent 220b865c23
commit f36f9aad98
4 changed files with 55 additions and 59 deletions

View File

@ -49,8 +49,10 @@ typedef boost::associative_property_map<GraphPointMap> GraphPoin
typedef CGAL::MCF_default_solver<double>::type Sparse_linear_solver;
typedef CGAL::Mean_curvature_flow_skeletonization<Polyhedron, Graph, Vertex_index_map, Edge_index_map,
GraphVerticesPMap, GraphPointPMap, HalfedgeGraphPointPMap, Sparse_linear_solver>
typedef CGAL::Mean_curvature_flow_skeletonization<Polyhedron,
Vertex_index_map,
Edge_index_map,
HalfedgeGraphPointPMap, Sparse_linear_solver>
Mean_curvature_skeleton;
// The input of the skeletonization algorithm must be a pure triangular closed
@ -123,11 +125,9 @@ int main()
// Iteratively apply step 1 to 3 until convergence.
mcs->contract_until_convergence();
// Convert the contracted mesh into a curve skeleton.
mcs->convert_to_skeleton(g, points);
// Get the correspondent surface points.
mcs->correspondent_vertices(corr);
// Convert the contracted mesh into a curve skeleton and
// get the correspondent surface points
mcs->convert_to_skeleton(g, points, corr);
vertex_iterator vb, ve;

View File

@ -302,12 +302,10 @@ public:
internal::Cotangent_value_minimum_zero<HalfedgeGraph,
internal::Cotangent_value_Meyer_secure<HalfedgeGraph> > > Weight_calculator;
typedef internal::Curve_skeleton<HalfedgeGraph, Graph,
VertexIndexMap, HalfedgeIndexMap,
HalfedgeGraphPointPMap, GraphPointPMap> Skeleton;
// Repeat Graph types
typedef typename boost::graph_traits<Graph>::vertex_descriptor Skeleton_vertex_descriptor;
typedef internal::Curve_skeleton<HalfedgeGraph,
VertexIndexMap,
HalfedgeIndexMap,
HalfedgeGraphPointPMap> Skeleton;
// Mesh simplification types
typedef SMS::Edge_profile<HalfedgeGraph> Profile;
@ -394,9 +392,6 @@ private:
/** Record the correspondence between final surface
* and original surface points. */
std::map<int, std::vector<int> > correspondence;
/** Record the correspondence between skeletal points
* and original surface points. */
std::map<Skeleton_vertex_descriptor, std::vector<int> > skeleton_to_surface_map;
/** Record the corresponding pole of a point. */
std::map<int, int> m_poles;
@ -432,7 +427,7 @@ public:
MCF_skel_args<HalfedgeGraph> Skeleton_args)
: mesh_ptr(NULL), hg_ptr(P),
vertex_id_pmap(Vertex_index_map),
m_edge_id_pmap(Halfedge_index_map),
m_hedge_id_pmap(Halfedge_index_map),
hg_point_pmap(get(vertex_point, *P))
{
owns_hg = false;
@ -706,13 +701,13 @@ public:
* with Graph::vertex_descriptor as key and
* Mean_curvature_flow_skeletonization::Point as value type
*/
template <class Graph, class GraphPointPMap, class GraphVerticesPMap>
void extract_skeleton(Graph& skeleton,
GraphPointPMap& skeleton_points,
GraphVerticesPMap& skeleton_to_hg_vertices)
{
contract_until_convergence();
convert_to_skeleton(skeleton, skeleton_points);
correspondent_vertices(skeleton_to_hg_vertices);
convert_to_skeleton(skeleton, skeleton_points, skeleton_to_hg_vertices);
}
/// @}
@ -951,18 +946,22 @@ public:
* with Graph::vertex_descriptor as key and
* Mean_curvature_flow_skeletonization::Point as value type
*/
template <class Graph, class GraphPointPMap, class GraphVerticesPMap>
template <class Graph, class GraphPointPMap, class GraphVerticesPMap>
void convert_to_skeleton(Graph& skeleton, GraphPointPMap& skeleton_points, GraphVerticesPMap& skeleton_to_hg_vertices)
{
Skeleton skeleton(*hg_ptr, vertex_id_pmap, m_hedge_id_pmap, hg_point_pmap);
skeleton.extract_skeleton(skeleton, skeleton_points, skeleton_to_hg_vertices);
Skeleton skeletonization(*hg_ptr, vertex_id_pmap, m_hedge_id_pmap, hg_point_pmap);
std::map<typename Graph::vertex_descriptor, std::vector<int> > skeleton_to_surface_map;
skeletonization.extract_skeleton(skeleton, skeleton_points, skeleton_to_surface_map);
correspondent_vertices(skeleton_to_surface_map, skeleton_to_hg_vertices);
}
/**
* REMOVE ME
*/
void correspondent_vertices(GraphVerticesPMap& skeleton_to_surface)
template <class Skeleton_vertex_descriptor, class GraphVerticesPMap>
void correspondent_vertices(std::map<Skeleton_vertex_descriptor, std::vector<int> >& skeleton_to_surface_map,
GraphVerticesPMap& skeleton_to_surface)
{
typename std::map<Skeleton_vertex_descriptor, std::vector<int> >::iterator iter;
for (iter = skeleton_to_surface_map.begin();
@ -1743,15 +1742,13 @@ void extract_skeleton(HalfedgeGraph& P,
Graph& g, GraphPointPMap& points,
GraphVerticesPMap& skeleton_to_surface)
{
typedef CGAL::Mean_curvature_flow_skeletonization<HalfedgeGraph, Graph, VertexIndexMap, HalfedgeIndexMap,
GraphVerticesPMap, GraphPointPMap, HalfedgeGraphPointPMap, SparseLinearAlgebraTraits_d> MCFSKEL;
typedef CGAL::Mean_curvature_flow_skeletonization<HalfedgeGraph, VertexIndexMap, HalfedgeIndexMap,
HalfedgeGraphPointPMap, SparseLinearAlgebraTraits_d> MCFSKEL;
MCFSKEL mcs(P, Vertex_index_map, Edge_index_map, Skeleton_args);
mcs.contract_until_convergence();
mcs.convert_to_skeleton(g, points);
mcs.correspondent_vertices(skeleton_to_surface);
mcs.convert_to_skeleton(g, points, skeleton_to_surface);
}
template <class HalfedgeGraph,

View File

@ -40,9 +40,8 @@
namespace CGAL {
namespace internal {
template <class HalfedgeGraph, class Graph,
class VertexIndexMap, class EdgeIndexMap,
class HalfedgeGraphPointPMap, class GraphPointPMap>
template <class HalfedgeGraph, class VertexIndexMap,
class HalfedgeIndexMap, class HalfedgeGraphPointPMap>
class Curve_skeleton
{
// Public types
@ -62,10 +61,6 @@ public:
typedef typename HalfedgeGraph::Facet_iterator Facet_iterator;
typedef typename HalfedgeGraph::Halfedge_around_facet_circulator Halfedge_facet_circulator;
// Repeat Graph types
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_desc;
typedef typename boost::graph_traits<Graph>::edge_descriptor edge_desc;
// Data members
private:
std::vector<std::vector<int> > edge_to_face;
@ -85,7 +80,7 @@ private:
HalfedgeGraph& hg;
VertexIndexMap vertex_id_pmap;
EdgeIndexMap edge_id_pmap;
HalfedgeIndexMap hedge_id_pmap;
HalfedgeGraphPointPMap hg_point_pmap;
std::vector<double> edge_lengths;
@ -115,19 +110,25 @@ private:
public:
Curve_skeleton(HalfedgeGraph& hg,
VertexIndexMap vertex_id_pmap,
EdgeIndexMap edge_id_pmap,
HalfedgeIndexMap hedge_id_pmap,
HalfedgeGraphPointPMap hg_point_pmap) :
hg(hg),
vertex_id_pmap(vertex_id_pmap),
edge_id_pmap(edge_id_pmap),
hedge_id_pmap(hedge_id_pmap),
hg_point_pmap(hg_point_pmap)
{
}
// Extracting the skeleton to a boost::graph data structure.
void extract_skeleton(Graph& curve, GraphPointPMap& points,
std::map<vertex_desc, std::vector<int> >& corr)
template <class Graph, class GraphPointPMap>
void extract_skeleton( Graph& curve,
const GraphPointPMap& points,
std::map< typename Graph::vertex_descriptor, std::vector<int> >& corr)
{
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_desc;
typedef typename boost::graph_traits<Graph>::edge_descriptor edge_desc;
init();
collapse();
@ -271,17 +272,17 @@ private:
idx = 0;
for (boost::tie(eb, ee) = halfedges(hg); eb != ee; ++eb)
{
put(edge_id_pmap, *eb, -1);
put(hedge_id_pmap, *eb, -1);
}
for (boost::tie(eb, ee) = halfedges(hg); eb != ee; ++eb)
{
halfedge_descriptor ed = *eb;
int id = get(edge_id_pmap, ed);
int id = get(hedge_id_pmap, ed);
if (id == -1)
{
put(edge_id_pmap, ed, idx);
put(hedge_id_pmap, ed, idx);
halfedge_descriptor ed_opposite = ed->opposite();
put(edge_id_pmap, ed_opposite, idx);
put(hedge_id_pmap, ed_opposite, idx);
// also cache the length of the edge
vertex_descriptor v1 = ed->vertex();
@ -319,7 +320,7 @@ private:
for (boost::tie(e, e_end) = in_edges(*vb, hg); e != e_end; ++e)
{
halfedge_descriptor ed = halfedge(*e, hg);
int eid = get(edge_id_pmap, ed);
int eid = get(hedge_id_pmap, ed);
vertex_to_edge[vid].push_back(eid);
edge_to_vertex[eid].push_back(vid);
}
@ -340,7 +341,7 @@ private:
for (boost::tie(eb, ee) = halfedges(hg); eb != ee; ++eb)
{
halfedge_descriptor ed = *eb;
int id = get(edge_id_pmap, ed);
int id = get(hedge_id_pmap, ed);
if (is_edge_inserted[id])
{
@ -616,7 +617,7 @@ private:
for (boost::tie(eb, ee) = halfedges(hg); eb != ee; ++eb)
{
halfedge_descriptor ed = *eb;
int id = get(edge_id_pmap, ed);
int id = get(hedge_id_pmap, ed);
if (!is_edge_deleted[id])
{
if (edge_to_face[id].size() > 0)

View File

@ -71,8 +71,8 @@ typedef boost::associative_property_map<GraphPointMap> Grap
typedef CGAL::MCF_default_solver<double>::type Sparse_linear_solver;
typedef CGAL::Mean_curvature_flow_skeletonization<Polyhedron, SkeletonGraph, Vertex_index_map, Edge_index_map,
GraphCorrelationPMap, GraphPointPMap, HalfedgeGraphPointPMap, Sparse_linear_solver> Mean_curvature_skeleton;
typedef CGAL::Mean_curvature_flow_skeletonization<Polyhedron, Vertex_index_map, Edge_index_map,
HalfedgeGraphPointPMap, Sparse_linear_solver> Mean_curvature_skeleton;
typedef Polyhedron::Traits Kernel;
typedef Kernel::Point_3 Point;
@ -359,6 +359,7 @@ private:
SkeletonGraph skeleton_curve;
GraphPointMap skeleton_points_map;
Correspondence_map corr_map;
}; // end Polyhedron_demo_mean_curvature_flow_skeleton_plugin
void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionMCFSkeleton_triggered()
@ -428,11 +429,8 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionSegment()
time.start();
QApplication::setOverrideCursor(Qt::WaitCursor);
Correspondence_map corr_map;
GraphCorrelationPMap corr(corr_map);
mcs->correspondent_vertices(corr);
// add segmentation
vertex_iterator vb, ve;
std::vector<vertex_descriptor> id_to_vd;
@ -549,7 +547,6 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionConvert_to_sk
GraphPointMap points_map;
GraphPointPMap points(points_map);
Correspondence_map corr_map;
GraphCorrelationPMap corr(corr_map);
CGAL::MCF_skel_args<Polyhedron> skeleton_args(tempMesh);
@ -621,8 +618,10 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionConvert_to_me
SkeletonGraph g;
GraphPointMap points_map;
GraphPointPMap points(points_map);
GraphCorrelationPMap corr(corr_map);
temp_mcs->extract_skeleton(g, points);
temp_mcs->extract_skeleton(g, points, corr);
std::cout << "ok (" << time.elapsed() << " ms, " << ")" << std::endl;
@ -733,7 +732,7 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionSplit()
QApplication::setOverrideCursor(Qt::WaitCursor);
update_parameters(mcs);
int num_split = mcs->split_triangles();
int num_split = mcs->split_faces();
std::cout << "split " << num_split << " triangles.\n";
std::cout << "ok (" << time.elapsed() << " ms, " << ")" << std::endl;
@ -945,14 +944,13 @@ void Polyhedron_demo_mean_curvature_flow_skeleton_plugin::on_actionSkeletonize()
update_parameters(mcs);
Correspondence_map corr_map;
GraphCorrelationPMap corr(corr_map);
skeleton_curve.clear();
skeleton_points_map.clear();
GraphPointPMap skeleton_points(skeleton_points_map);
mcs->convert_to_skeleton(skeleton_curve, skeleton_points);
mcs->correspondent_vertices(corr);
mcs->convert_to_skeleton(skeleton_curve, skeleton_points, corr);
std::cout << "ok (" << time.elapsed() << " ms, " << ")" << std::endl;