mirror of https://github.com/CGAL/cgal
update the code to make it compiling again
This commit is contained in:
parent
220b865c23
commit
f36f9aad98
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue