fix the report of polyline in the visitor

the 2 first nodes were always  reported twice
This commit is contained in:
Sébastien Loriot 2016-12-09 13:33:19 +01:00
parent 23e9095cbc
commit fac4a6add5
4 changed files with 7 additions and 13 deletions

View File

@ -2203,7 +2203,7 @@ public:
P_polylines.push_back(phedge);
Q_polylines.push_back(qhedge);
polyline_lengths.push_back(polyline_info.second-1);
polyline_lengths.push_back(polyline_info.second+1);
}
//store the patch description in a container to avoid recomputing it several times

View File

@ -1771,7 +1771,7 @@ class Intersection_of_Polyhedra_3{
//handle polylines
while(terminal_nodes.any())
{
int i= static_cast<int>(terminal_nodes.find_first());
int i = static_cast<int>(terminal_nodes.find_first());
Graph_node& node_i = graph[i];
std::vector<typename Kernel::Point_3> polyline;
@ -1782,14 +1782,12 @@ class Intersection_of_Polyhedra_3{
if (node_i.empty())
terminal_nodes.reset(i);
polyline.push_back(nodes[i]);
visitor->add_node_to_polyline(i);
while(true){
Graph_node& node_j=graph[j];
CGAL_assertion(!node_j.empty());
node_j.erase(i);
i=j;
polyline.push_back(nodes[i]);
visitor->add_node_to_polyline(i);
if (node_j.is_terminal())
{
if (node_j.empty())
@ -1798,6 +1796,7 @@ class Intersection_of_Polyhedra_3{
}
else{
j=node_j.top();
visitor->add_node_to_polyline(j);
node_j.pop();
CGAL_assertion(node_j.empty());
interior_nodes.reset(i);
@ -1817,7 +1816,6 @@ class Intersection_of_Polyhedra_3{
visitor->start_new_polyline(i,j);
interior_nodes.reset(i);
polyline.push_back(nodes[i]);
visitor->add_node_to_polyline(i);
int first=i;
do{
Graph_node& node_j=graph[j];
@ -1825,11 +1823,10 @@ class Intersection_of_Polyhedra_3{
node_j.erase(i);
i=j;
polyline.push_back(nodes[i]);
visitor->add_node_to_polyline(i);
j=node_j.top();
visitor->add_node_to_polyline(j);
}while(j!=first);
polyline.push_back(nodes[j]);// we duplicate first point for cycles
visitor->add_node_to_polyline(j);
*out++=polyline;
}
}

View File

@ -1006,7 +1006,7 @@ public:
tm1_polylines.push_back(h1);
tm2_polylines.push_back(h2);
polyline_lengths.push_back(polyline_info.second-1);
polyline_lengths.push_back(polyline_info.second+1);
}
typedef Patch_container<TriangleMesh,

View File

@ -741,14 +741,12 @@ class Intersection_of_triangle_meshes
if (node_i.empty())
terminal_nodes.reset(i);
polyline.push_back(nodes[i]);
visitor.add_node_to_polyline(i);
while(true){
Graph_node& node_j=graph[j];
CGAL_assertion(!node_j.empty());
node_j.erase(i);
i=j;
polyline.push_back(nodes[i]);
visitor.add_node_to_polyline(i);
if (node_j.is_terminal())
{
if (node_j.empty())
@ -757,6 +755,7 @@ class Intersection_of_triangle_meshes
}
else{
j=node_j.top();
visitor.add_node_to_polyline(j);
node_j.pop();
CGAL_assertion(node_j.empty());
interior_nodes.reset(i);
@ -776,7 +775,6 @@ class Intersection_of_triangle_meshes
visitor.start_new_polyline(i,j);
interior_nodes.reset(i);
polyline.push_back(nodes[i]);
visitor.add_node_to_polyline(i);
Node_id first=i;
do{
Graph_node& node_j=graph[j];
@ -784,11 +782,10 @@ class Intersection_of_triangle_meshes
node_j.erase(i);
i=j;
polyline.push_back(nodes[i]);
visitor.add_node_to_polyline(i);
j=node_j.top();
visitor.add_node_to_polyline(j);
}while(j!=first);
polyline.push_back(nodes[j]);// we duplicate first point for cycles
visitor.add_node_to_polyline(j);
*out++=polyline;
}
}