mirror of https://github.com/CGAL/cgal
fixed namespace of boost related constructs and functions
This commit is contained in:
parent
f0893c0b3f
commit
0fabc7efcd
|
|
@ -16,6 +16,8 @@
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
// Author(s) : Baruch Zukerman <baruchzu@post.tau.ac.il>
|
||||||
|
// Efi Fogel <efif@post.tau.ac.il>
|
||||||
|
|
||||||
#ifndef CGAL_TYPEDEFS_H
|
#ifndef CGAL_TYPEDEFS_H
|
||||||
#define CGAL_TYPEDEFS_H
|
#define CGAL_TYPEDEFS_H
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
//! \file examples/Envelope_3/ex_envelope_spheres.cpp
|
//! \file examples/Envelope_3/ex_envelope_spheres.cpp
|
||||||
// Constructing the lower envelope of a set of spheres read from a file.
|
// Constructing the lower envelope of a set of spheres read from a file.
|
||||||
|
|
||||||
#include <CGAL/basic.h>
|
#include <CGAL/basic.h>
|
||||||
|
|
||||||
#ifndef CGAL_USE_CORE
|
#ifndef CGAL_USE_CORE
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
int main ()
|
int main()
|
||||||
{
|
{
|
||||||
std::cout << "Sorry, this example needs CORE ..." << std::endl;
|
std::cout << "Sorry, this example needs CORE ..." << std::endl;
|
||||||
return (0);
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
@ -35,7 +36,7 @@ typedef CGAL::Env_sphere_traits_3<Conic_traits_2> Traits_3;
|
||||||
typedef Traits_3::Surface_3 Sphere_3;
|
typedef Traits_3::Surface_3 Sphere_3;
|
||||||
typedef CGAL::Envelope_diagram_2<Traits_3> Envelope_diagram_2;
|
typedef CGAL::Envelope_diagram_2<Traits_3> Envelope_diagram_2;
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
// Get the name of the input file from the command line, or use the default
|
// Get the name of the input file from the command line, or use the default
|
||||||
// fan_grids.dat file if no command-line parameters are given.
|
// fan_grids.dat file if no command-line parameters are given.
|
||||||
|
|
@ -45,12 +46,12 @@ int main (int argc, char **argv)
|
||||||
filename = argv[1];
|
filename = argv[1];
|
||||||
|
|
||||||
// Open the input file.
|
// Open the input file.
|
||||||
std::ifstream in_file (filename);
|
std::ifstream in_file(filename);
|
||||||
|
|
||||||
if (! in_file.is_open())
|
if (! in_file.is_open())
|
||||||
{
|
{
|
||||||
std::cerr << "Failed to open " << filename << " ..." << std::endl;
|
std::cerr << "Failed to open " << filename << " ..." << std::endl;
|
||||||
return (1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the spheres from the file.
|
// Read the spheres from the file.
|
||||||
|
|
@ -66,12 +67,10 @@ int main (int argc, char **argv)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
in_file >> n;
|
in_file >> n;
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; ++i)
|
||||||
{
|
{
|
||||||
in_file >> x >> y >> z >> sqr_r;
|
in_file >> x >> y >> z >> sqr_r;
|
||||||
|
spheres.push_back(Sphere_3(Rat_point_3(x, y, z), Rational(sqr_r)));
|
||||||
spheres.push_back (Sphere_3 (Rat_point_3 (x, y, z),
|
|
||||||
Rational (sqr_r)));
|
|
||||||
}
|
}
|
||||||
in_file.close();
|
in_file.close();
|
||||||
|
|
||||||
|
|
@ -83,8 +82,7 @@ int main (int argc, char **argv)
|
||||||
<< n << " spheres." << std::endl;
|
<< n << " spheres." << std::endl;
|
||||||
|
|
||||||
timer.start();
|
timer.start();
|
||||||
CGAL::lower_envelope_3 (spheres.begin(), spheres.end(),
|
CGAL::lower_envelope_3(spheres.begin(), spheres.end(), min_diag);
|
||||||
min_diag);
|
|
||||||
timer.stop();
|
timer.stop();
|
||||||
|
|
||||||
// Print the dimensions of the minimization diagram.
|
// Print the dimensions of the minimization diagram.
|
||||||
|
|
@ -95,7 +93,7 @@ int main (int argc, char **argv)
|
||||||
std::cout << "Construction took " << timer.time()
|
std::cout << "Construction took " << timer.time()
|
||||||
<< " seconds." << std::endl;
|
<< " seconds." << std::endl;
|
||||||
|
|
||||||
return (0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
//
|
//
|
||||||
// Author(s) : Michal Meyerovitch <gorgymic@post.tau.ac.il>
|
// Author(s) : Michal Meyerovitch <gorgymic@post.tau.ac.il>
|
||||||
// Baruch Zukerman <baruchzu@post.tau.ac.il>
|
// Baruch Zukerman <baruchzu@post.tau.ac.il>
|
||||||
|
// Efi Fogel <efif@post.tau.ac.il>
|
||||||
|
|
||||||
#ifndef CGAL_ENVELOPE_DIVIDE_AND_CONQUER_3_H
|
#ifndef CGAL_ENVELOPE_DIVIDE_AND_CONQUER_3_H
|
||||||
#define CGAL_ENVELOPE_DIVIDE_AND_CONQUER_3_H
|
#define CGAL_ENVELOPE_DIVIDE_AND_CONQUER_3_H
|
||||||
|
|
@ -23,20 +24,6 @@
|
||||||
#define CGAL_ENVELOPE_SAVE_COMPARISONS
|
#define CGAL_ENVELOPE_SAVE_COMPARISONS
|
||||||
#define CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
#define CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
||||||
|
|
||||||
#include <CGAL/Envelope_3/Envelope_base.h>
|
|
||||||
#include <CGAL/Object.h>
|
|
||||||
#include <CGAL/enum.h>
|
|
||||||
#include <CGAL/Arr_observer.h>
|
|
||||||
#include <CGAL/Envelope_3/Env_overlay_2.h>
|
|
||||||
#include <CGAL/Envelope_3/Envelope_element_visitor_3.h>
|
|
||||||
#include <CGAL/Envelope_3/set_dividors.h>
|
|
||||||
|
|
||||||
#ifdef CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
|
||||||
#include <boost/graph/dijkstra_shortest_paths.hpp>
|
|
||||||
#include <CGAL/graph_traits_Dual_Arrangement_2.h>
|
|
||||||
#include <CGAL/Arr_face_map.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
@ -45,6 +32,20 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
#include <CGAL/Object.h>
|
||||||
|
#include <CGAL/enum.h>
|
||||||
|
#include <CGAL/Arr_observer.h>
|
||||||
|
#include <CGAL/Envelope_3/Envelope_base.h>
|
||||||
|
#include <CGAL/Envelope_3/Env_overlay_2.h>
|
||||||
|
#include <CGAL/Envelope_3/Envelope_element_visitor_3.h>
|
||||||
|
#include <CGAL/Envelope_3/set_dividors.h>
|
||||||
|
|
||||||
|
#ifdef CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
||||||
|
#include <CGAL/Arr_face_map.h>
|
||||||
|
#include <CGAL/graph_traits_Dual_Arrangement_2.h>
|
||||||
|
#include <boost/graph/dijkstra_shortest_paths.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
// this base divide & conquer algorithm splits the input into 2 groups,
|
// this base divide & conquer algorithm splits the input into 2 groups,
|
||||||
// calculates the result over the 2 groups, and then merges the results like
|
// calculates the result over the 2 groups, and then merges the results like
|
||||||
// this:
|
// this:
|
||||||
|
|
@ -113,24 +114,37 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
typedef typename Minimization_diagram_2::Halfedge_const_iterator Halfedge_const_iterator;
|
typedef typename Minimization_diagram_2::Halfedge_const_iterator
|
||||||
typedef typename Minimization_diagram_2::Halfedge_handle Halfedge_handle;
|
Halfedge_const_iterator;
|
||||||
typedef typename Minimization_diagram_2::Halfedge_iterator Halfedge_iterator;
|
typedef typename Minimization_diagram_2::Halfedge_handle
|
||||||
typedef typename Minimization_diagram_2::Face_handle Face_handle;
|
Halfedge_handle;
|
||||||
typedef typename Minimization_diagram_2::Edge_iterator Edge_iterator;
|
typedef typename Minimization_diagram_2::Halfedge_iterator
|
||||||
typedef typename Minimization_diagram_2::Face_iterator Face_iterator;
|
Halfedge_iterator;
|
||||||
typedef typename Minimization_diagram_2::Vertex_handle Vertex_handle;
|
typedef typename Minimization_diagram_2::Face_handle
|
||||||
typedef typename Minimization_diagram_2::Vertex_iterator Vertex_iterator;
|
Face_handle;
|
||||||
typedef typename Minimization_diagram_2::Hole_iterator Hole_iterator;
|
typedef typename Minimization_diagram_2::Edge_iterator
|
||||||
typedef typename Minimization_diagram_2::Ccb_halfedge_circulator Ccb_halfedge_circulator;
|
Edge_iterator;
|
||||||
|
typedef typename Minimization_diagram_2::Face_iterator
|
||||||
|
Face_iterator;
|
||||||
|
typedef typename Minimization_diagram_2::Vertex_handle
|
||||||
|
Vertex_handle;
|
||||||
|
typedef typename Minimization_diagram_2::Vertex_iterator
|
||||||
|
Vertex_iterator;
|
||||||
|
typedef typename Minimization_diagram_2::Hole_iterator
|
||||||
|
Hole_iterator;
|
||||||
|
typedef typename Minimization_diagram_2::Ccb_halfedge_circulator
|
||||||
|
Ccb_halfedge_circulator;
|
||||||
typedef typename Minimization_diagram_2::Halfedge_around_vertex_circulator
|
typedef typename Minimization_diagram_2::Halfedge_around_vertex_circulator
|
||||||
|
|
||||||
Halfedge_around_vertex_circulator;
|
Halfedge_around_vertex_circulator;
|
||||||
|
|
||||||
typedef Arr_observer<Minimization_diagram_2> Md_observer;
|
typedef Arr_observer<Minimization_diagram_2> Md_observer;
|
||||||
typedef typename Minimization_diagram_2::Dcel::Dcel_data_iterator Envelope_data_iterator;
|
typedef typename Minimization_diagram_2::Dcel::Dcel_data_iterator
|
||||||
|
Envelope_data_iterator;
|
||||||
|
|
||||||
#ifdef CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
#ifdef CGAL_ENVELOPE_USE_BFS_FACE_ORDER
|
||||||
typedef CGAL::Dual<Minimization_diagram_2> Dual_Minimization_diagram_2;
|
typedef CGAL::Dual<Minimization_diagram_2>
|
||||||
|
Dual_Minimization_diagram_2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -195,9 +209,9 @@ public:
|
||||||
|
|
||||||
// make the general surfaces xy-monotone
|
// make the general surfaces xy-monotone
|
||||||
std::list<Xy_monotone_surface_3> xy_monotones;
|
std::list<Xy_monotone_surface_3> xy_monotones;
|
||||||
for(; begin != end; ++begin)
|
for (; begin != end; ++begin)
|
||||||
traits->make_xy_monotone_3_object()
|
traits->make_xy_monotone_3_object()(*begin, m_is_lower,
|
||||||
(*begin, m_is_lower, std::back_inserter(xy_monotones));
|
std::back_inserter(xy_monotones));
|
||||||
|
|
||||||
// recursively construct the envelope of the xy-monotone parts
|
// recursively construct the envelope of the xy-monotone parts
|
||||||
construct_lu_envelope_xy_monotones(xy_monotones.begin(),
|
construct_lu_envelope_xy_monotones(xy_monotones.begin(),
|
||||||
|
|
@ -234,15 +248,15 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Access the traits object (const version). */
|
/*! Access the traits object (const version). */
|
||||||
const Traits* get_traits () const
|
const Traits* get_traits() const
|
||||||
{
|
{
|
||||||
return (traits);
|
return traits;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Access the traits object (non-const version). */
|
/*! Access the traits object (non-const version). */
|
||||||
Traits* get_traits ()
|
Traits* get_traits()
|
||||||
{
|
{
|
||||||
return (traits);
|
return traits;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
|
|
@ -250,8 +264,6 @@ public:
|
||||||
resolver->reset();
|
resolver->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// compute the envelope of xy-monotone surfaces in 3D
|
// compute the envelope of xy-monotone surfaces in 3D
|
||||||
|
|
@ -277,15 +289,18 @@ protected:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// divide the surfaces into 2 groups (insert surface to each group alternately)
|
// divide the surfaces into 2 groups (insert surface to each group
|
||||||
|
// alternately)
|
||||||
std::list<Xy_monotone_surface_3> group1, group2;
|
std::list<Xy_monotone_surface_3> group1, group2;
|
||||||
dividor(first, end,
|
dividor(first, end,
|
||||||
std::back_inserter(group1), std::back_inserter(group2));
|
std::back_inserter(group1), std::back_inserter(group2));
|
||||||
|
|
||||||
// recursively calculate the LU_envelope of the 2 groups
|
// recursively calculate the LU_envelope of the 2 groups
|
||||||
Minimization_diagram_2 result1(traits), result2(traits);
|
Minimization_diagram_2 result1(traits), result2(traits);
|
||||||
construct_lu_envelope_xy_monotones(group1.begin(), group1.end(), result1, dividor);
|
construct_lu_envelope_xy_monotones(group1.begin(), group1.end(),
|
||||||
construct_lu_envelope_xy_monotones(group2.begin(), group2.end(), result2, dividor);
|
result1, dividor);
|
||||||
|
construct_lu_envelope_xy_monotones(group2.begin(), group2.end(),
|
||||||
|
result2, dividor);
|
||||||
|
|
||||||
// merge the results:
|
// merge the results:
|
||||||
merge_envelopes(result1, result2, result);
|
merge_envelopes(result1, result2, result);
|
||||||
|
|
@ -296,14 +311,17 @@ protected:
|
||||||
CGAL_assertion(is_envelope_valid(result));
|
CGAL_assertion(is_envelope_valid(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
void deal_with_one_surface(Xy_monotone_surface_3& surf, Minimization_diagram_2& result)
|
void deal_with_one_surface(Xy_monotone_surface_3& surf,
|
||||||
|
Minimization_diagram_2& result)
|
||||||
{
|
{
|
||||||
typedef std::list<Object> Boundary_list;
|
typedef std::list<Object> Boundary_list;
|
||||||
typedef std::pair<X_monotone_curve_2, Oriented_side> Boundary_xcurve;
|
typedef std::pair<X_monotone_curve_2, Oriented_side> Boundary_xcurve;
|
||||||
typedef Boundary_list::iterator Boundary_iterator;
|
typedef Boundary_list::iterator Boundary_iterator;
|
||||||
|
|
||||||
Boundary_list boundary;
|
Boundary_list boundary;
|
||||||
traits->construct_projected_boundary_2_object()(surf, std::back_inserter(boundary));
|
traits->
|
||||||
|
construct_projected_boundary_2_object()(surf,
|
||||||
|
std::back_inserter(boundary));
|
||||||
|
|
||||||
if(boundary.empty())
|
if(boundary.empty())
|
||||||
{
|
{
|
||||||
|
|
@ -312,7 +330,7 @@ protected:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Boundary_iterator boundary_it = boundary.begin();
|
for (Boundary_iterator boundary_it = boundary.begin();
|
||||||
boundary_it != boundary.end();
|
boundary_it != boundary.end();
|
||||||
++boundary_it)
|
++boundary_it)
|
||||||
{
|
{
|
||||||
|
|
@ -321,7 +339,8 @@ protected:
|
||||||
if(assign(boundary_cv, obj))
|
if(assign(boundary_cv, obj))
|
||||||
{
|
{
|
||||||
Oriented_side side = boundary_cv.second;
|
Oriented_side side = boundary_cv.second;
|
||||||
Halfedge_handle he = insert_non_intersecting_curve(result, boundary_cv.first);
|
Halfedge_handle he =
|
||||||
|
insert_non_intersecting_curve(result, boundary_cv.first);
|
||||||
|
|
||||||
if(side == ON_ORIENTED_BOUNDARY)
|
if(side == ON_ORIENTED_BOUNDARY)
|
||||||
{
|
{
|
||||||
|
|
@ -335,8 +354,8 @@ protected:
|
||||||
if(he->face() != he->twin()->face())
|
if(he->face() != he->twin()->face())
|
||||||
{
|
{
|
||||||
// new face created.
|
// new face created.
|
||||||
// 'he' is directed from left to right, so the face to the left of 'he'
|
// 'he' is directed from left to right, so the face to the left
|
||||||
// is above 'cv.
|
// of 'he' is above 'cv.
|
||||||
Face_handle f;
|
Face_handle f;
|
||||||
if(side == ON_NEGATIVE_SIDE) // the surface is below cv.
|
if(side == ON_NEGATIVE_SIDE) // the surface is below cv.
|
||||||
{
|
{
|
||||||
|
|
@ -382,18 +401,18 @@ protected:
|
||||||
// update information in all the edges & vertices to indicate that
|
// update information in all the edges & vertices to indicate that
|
||||||
// this surface is the envelope
|
// this surface is the envelope
|
||||||
Halfedge_iterator hi = result.halfedges_begin();
|
Halfedge_iterator hi = result.halfedges_begin();
|
||||||
for(; hi != result.halfedges_end(); ++hi)
|
for (; hi != result.halfedges_end(); ++hi)
|
||||||
{
|
{
|
||||||
hi->set_data(surf);
|
hi->set_data(surf);
|
||||||
// since all the edges & vertices have their envelope data equal to the
|
// since all the edges & vertices have their envelope data equal to the
|
||||||
// current surface, we can set is/has equal_data_in_target of all halfedges
|
// current surface, we can set is/has equal_data_in_target of all
|
||||||
// to true
|
// halfedges to true
|
||||||
hi->set_is_equal_data_in_target(true);
|
hi->set_is_equal_data_in_target(true);
|
||||||
hi->set_has_equal_data_in_target(true);
|
hi->set_has_equal_data_in_target(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
vi->set_data(surf);
|
vi->set_data(surf);
|
||||||
if (vi->is_isolated())
|
if (vi->is_isolated())
|
||||||
|
|
@ -418,7 +437,8 @@ public:
|
||||||
Overlay_2 overlay;
|
Overlay_2 overlay;
|
||||||
overlay(result1, result2, result);
|
overlay(result1, result2, result);
|
||||||
|
|
||||||
CGAL_expensive_assertion_msg(is_valid(result), "after overlay result is not valid");
|
CGAL_expensive_assertion_msg(is_valid(result),
|
||||||
|
"after overlay result is not valid");
|
||||||
|
|
||||||
// make sure the aux flags are correctly set by the overlay
|
// make sure the aux flags are correctly set by the overlay
|
||||||
//CGAL_assertion(verify_aux_flags(result));
|
//CGAL_assertion(verify_aux_flags(result));
|
||||||
|
|
@ -435,10 +455,11 @@ public:
|
||||||
// edge can be split as surfaces can intersect (or touch) over it
|
// edge can be split as surfaces can intersect (or touch) over it
|
||||||
std::list<Halfedge_handle> edges_to_resolve;
|
std::list<Halfedge_handle> edges_to_resolve;
|
||||||
Edge_iterator ei = result.edges_begin();
|
Edge_iterator ei = result.edges_begin();
|
||||||
for(; ei != result.edges_end(); ++ei)
|
for (; ei != result.edges_end(); ++ei)
|
||||||
{
|
{
|
||||||
Halfedge_handle hh = ei;
|
Halfedge_handle hh = ei;
|
||||||
// there must be data from at least one map, because all the surfaces are continous
|
// there must be data from at least one map, because all the surfaces
|
||||||
|
// are continous
|
||||||
if (!get_aux_is_set(hh, 0) || !get_aux_is_set(hh, 1))
|
if (!get_aux_is_set(hh, 0) || !get_aux_is_set(hh, 1))
|
||||||
continue;
|
continue;
|
||||||
CGAL_assertion(get_aux_is_set(hh, 0));
|
CGAL_assertion(get_aux_is_set(hh, 0));
|
||||||
|
|
@ -502,17 +523,18 @@ public:
|
||||||
// Perform breadth-first search from the unbounded face, and use the BFS
|
// Perform breadth-first search from the unbounded face, and use the BFS
|
||||||
// visitor to associate each arrangement face with its discover time.
|
// visitor to associate each arrangement face with its discover time.
|
||||||
Faces_order_bfs_visitor<CGAL::Arr_face_index_map<Minimization_diagram_2> >
|
Faces_order_bfs_visitor<CGAL::Arr_face_index_map<Minimization_diagram_2> >
|
||||||
bfs_visitor (index_map, faces_to_split, this);
|
bfs_visitor(index_map, faces_to_split, this);
|
||||||
Face_handle first_face = result.faces_begin();
|
Face_handle first_face = result.faces_begin();
|
||||||
/*if (result.number_of_faces() > 1)
|
/*if (result.number_of_faces() > 1)
|
||||||
first_face = ++(result.faces_begin());*/
|
first_face = ++(result.faces_begin());
|
||||||
|
*/
|
||||||
|
|
||||||
boost::breadth_first_search (Dual_Minimization_diagram_2(result),
|
boost::breadth_first_search(Dual_Minimization_diagram_2(result),
|
||||||
first_face,
|
first_face,
|
||||||
boost::vertex_index_map(index_map).
|
boost::vertex_index_map(index_map).
|
||||||
visitor (bfs_visitor));
|
visitor(bfs_visitor));
|
||||||
index_map.detach();
|
index_map.detach();
|
||||||
#else
|
#else
|
||||||
// traverse the faces in arbitrary order
|
// traverse the faces in arbitrary order
|
||||||
Face_iterator fi = result.faces_begin();
|
Face_iterator fi = result.faces_begin();
|
||||||
for (; fi != result.faces_end(); ++fi)
|
for (; fi != result.faces_end(); ++fi)
|
||||||
|
|
@ -538,8 +560,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// here, we have both surfaces.
|
// here, we have both surfaces.
|
||||||
// we save the face in a list for a later treatment, because the face can change
|
// we save the face in a list for a later treatment, because the
|
||||||
// and destroy the iterator
|
// face can change and destroy the iterator
|
||||||
faces_to_split.push_back(fh);
|
faces_to_split.push_back(fh);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -548,7 +570,7 @@ public:
|
||||||
|
|
||||||
// #ifndef CGAL_ENVELOPE_SAVE_COMPARISONS
|
// #ifndef CGAL_ENVELOPE_SAVE_COMPARISONS
|
||||||
// hi = result.halfedges_begin();
|
// hi = result.halfedges_begin();
|
||||||
// for(; hi != result.halfedges_end(); ++hi, ++hi)
|
// for (; hi != result.halfedges_end(); ++hi, ++hi)
|
||||||
// {
|
// {
|
||||||
// if (!hi->is_decision_set())
|
// if (!hi->is_decision_set())
|
||||||
// resolver->resolve(hi, result);
|
// resolver->resolve(hi, result);
|
||||||
|
|
@ -560,12 +582,13 @@ public:
|
||||||
|
|
||||||
// compute the surface on the envelope for each vertex
|
// compute the surface on the envelope for each vertex
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = vi;
|
Vertex_handle vh = vi;
|
||||||
if (vh->is_decision_set())
|
if (vh->is_decision_set())
|
||||||
continue;
|
continue;
|
||||||
// there must be data from at least one map, because all the surfaces are continous
|
// there must be data from at least one map, because all the surfaces
|
||||||
|
// are continous
|
||||||
CGAL_assertion(get_aux_is_set(vh, 0));
|
CGAL_assertion(get_aux_is_set(vh, 0));
|
||||||
CGAL_assertion(get_aux_is_set(vh, 1));
|
CGAL_assertion(get_aux_is_set(vh, 1));
|
||||||
CGAL_assertion(!aux_has_no_data(vh, 1) || !aux_has_no_data(vh, 0));
|
CGAL_assertion(!aux_has_no_data(vh, 1) || !aux_has_no_data(vh, 0));
|
||||||
|
|
@ -583,7 +606,8 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CGAL_expensive_assertion_msg(result.is_valid(), "after resolve result is not valid");
|
CGAL_expensive_assertion_msg(result.is_valid(),
|
||||||
|
"after resolve result is not valid");
|
||||||
|
|
||||||
// make sure that aux_source and decision are set at all features
|
// make sure that aux_source and decision are set at all features
|
||||||
// after all resolvings
|
// after all resolvings
|
||||||
|
|
@ -605,8 +629,9 @@ public:
|
||||||
CGAL_expensive_assertion_msg(result.is_valid(),
|
CGAL_expensive_assertion_msg(result.is_valid(),
|
||||||
"after remove vertices result is not valid");
|
"after remove vertices result is not valid");
|
||||||
|
|
||||||
// update is_equal_data and has_equal_data of halfedge->face and vertex->face
|
// update is_equal_data and has_equal_data of halfedge->face and
|
||||||
// relations, according to the decision, and the aux similar flags
|
// vertex->face relations, according to the decision, and the aux
|
||||||
|
// similar flags
|
||||||
update_flags(result);
|
update_flags(result);
|
||||||
|
|
||||||
// update the envelope surfaces according to the decision and the aux
|
// update the envelope surfaces according to the decision and the aux
|
||||||
|
|
@ -615,15 +640,18 @@ public:
|
||||||
|
|
||||||
// make sure that all the flags are correctly set on the envelope result
|
// make sure that all the flags are correctly set on the envelope result
|
||||||
//CGAL_assertion(verify_flags(result));
|
//CGAL_assertion(verify_flags(result));
|
||||||
CGAL_expensive_assertion_msg(is_valid(result), "after merge result is not valid");
|
CGAL_expensive_assertion_msg(is_valid(result),
|
||||||
|
"after merge result is not valid");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void deal_with_faces_to_split(std::list<Face_handle>& faces_to_split, Minimization_diagram_2& result)
|
void deal_with_faces_to_split(std::list<Face_handle>& faces_to_split,
|
||||||
|
Minimization_diagram_2& result)
|
||||||
{
|
{
|
||||||
// for each face in faces_to_split, find the intersection over the face, and split the face
|
// for each face in faces_to_split, find the intersection over the face,
|
||||||
|
// and split the face
|
||||||
typename std::list<Face_handle>::iterator li;
|
typename std::list<Face_handle>::iterator li;
|
||||||
for (li = faces_to_split.begin(); li != faces_to_split.end(); ++li)
|
for (li = faces_to_split.begin(); li != faces_to_split.end(); ++li)
|
||||||
{
|
{
|
||||||
|
|
@ -669,7 +697,8 @@ protected:
|
||||||
}
|
}
|
||||||
// todo: should remove the uses of this method from this class
|
// todo: should remove the uses of this method from this class
|
||||||
template <class FeatureHandle1, class FeatureHandle2>
|
template <class FeatureHandle1, class FeatureHandle2>
|
||||||
bool has_equal_aux_data(unsigned int id, FeatureHandle1 fh1, FeatureHandle2 fh2)
|
bool has_equal_aux_data(unsigned int id, FeatureHandle1 fh1,
|
||||||
|
FeatureHandle2 fh2)
|
||||||
{
|
{
|
||||||
Envelope_data_iterator begin1, end1, begin2, end2;
|
Envelope_data_iterator begin1, end1, begin2, end2;
|
||||||
get_aux_data_iterators(id, fh1, begin1, end1);
|
get_aux_data_iterators(id, fh1, begin1, end1);
|
||||||
|
|
@ -696,7 +725,8 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(typename std::list<Halfedge_handle>::iterator ci = edges.begin(); ci != edges.end(); ++ci)
|
for (typename std::list<Halfedge_handle>::iterator ci = edges.begin();
|
||||||
|
ci != edges.end(); ++ci)
|
||||||
{
|
{
|
||||||
// if the endpoints become isolated after the removal we need to remove
|
// if the endpoints become isolated after the removal we need to remove
|
||||||
// them if they have the same data as the edge
|
// them if they have the same data as the edge
|
||||||
|
|
@ -713,8 +743,10 @@ protected:
|
||||||
h->get_is_equal_aux_data_in_target(0));
|
h->get_is_equal_aux_data_in_target(0));
|
||||||
bool trg_is_equal_1 = (h->get_is_equal_aux_data_in_face(1) &&
|
bool trg_is_equal_1 = (h->get_is_equal_aux_data_in_face(1) &&
|
||||||
h->get_is_equal_aux_data_in_target(1));
|
h->get_is_equal_aux_data_in_target(1));
|
||||||
bool src_has_equal_0 = h->twin()->get_has_equal_aux_data_in_target_and_face(0);
|
bool src_has_equal_0 =
|
||||||
bool src_has_equal_1 = h->twin()->get_has_equal_aux_data_in_target_and_face(1);
|
h->twin()->get_has_equal_aux_data_in_target_and_face(0);
|
||||||
|
bool src_has_equal_1 =
|
||||||
|
h->twin()->get_has_equal_aux_data_in_target_and_face(1);
|
||||||
bool trg_has_equal_0 = h->get_has_equal_aux_data_in_target_and_face(0);
|
bool trg_has_equal_0 = h->get_has_equal_aux_data_in_target_and_face(0);
|
||||||
bool trg_has_equal_1 = h->get_has_equal_aux_data_in_target_and_face(1);
|
bool trg_has_equal_1 = h->get_has_equal_aux_data_in_target_and_face(1);
|
||||||
|
|
||||||
|
|
@ -724,14 +756,17 @@ protected:
|
||||||
// handle is invalid
|
// handle is invalid
|
||||||
if (!remove_src && src->is_isolated())
|
if (!remove_src && src->is_isolated())
|
||||||
{
|
{
|
||||||
// to be precise we copy from the halfedge-face and halfedge-target relations
|
// to be precise we copy from the halfedge-face and halfedge-target
|
||||||
|
// relations
|
||||||
src->set_is_equal_aux_data_in_face(0, src_is_equal_0);
|
src->set_is_equal_aux_data_in_face(0, src_is_equal_0);
|
||||||
src->set_is_equal_aux_data_in_face(1, src_is_equal_1);
|
src->set_is_equal_aux_data_in_face(1, src_is_equal_1);
|
||||||
// todo: the has_equal flags should be updated also
|
// todo: the has_equal flags should be updated also
|
||||||
// make sure h_face is also src face
|
// make sure h_face is also src face
|
||||||
CGAL_assertion(h_face == src->face());
|
CGAL_assertion(h_face == src->face());
|
||||||
// CGAL_assertion(src_has_equal_0 == has_equal_aux_data(0, src, h_face));
|
// CGAL_assertion(src_has_equal_0 ==
|
||||||
// CGAL_assertion(src_has_equal_1 == has_equal_aux_data(1, src, h_face));
|
// has_equal_aux_data(0, src, h_face));
|
||||||
|
// CGAL_assertion(src_has_equal_1 ==
|
||||||
|
// has_equal_aux_data(1, src, h_face));
|
||||||
src->set_has_equal_aux_data_in_face(0, src_has_equal_0);
|
src->set_has_equal_aux_data_in_face(0, src_has_equal_0);
|
||||||
src->set_has_equal_aux_data_in_face(1, src_has_equal_1);
|
src->set_has_equal_aux_data_in_face(1, src_has_equal_1);
|
||||||
}
|
}
|
||||||
|
|
@ -741,8 +776,10 @@ protected:
|
||||||
trg->set_is_equal_aux_data_in_face(1, trg_is_equal_1);
|
trg->set_is_equal_aux_data_in_face(1, trg_is_equal_1);
|
||||||
// make sure h_face is also trg face
|
// make sure h_face is also trg face
|
||||||
CGAL_assertion(h_face == trg->face());
|
CGAL_assertion(h_face == trg->face());
|
||||||
// CGAL_assertion(trg_has_equal_0 == has_equal_aux_data(0, trg, h_face));
|
// CGAL_assertion(trg_has_equal_0 ==
|
||||||
// CGAL_assertion(trg_has_equal_1 == has_equal_aux_data(1, trg, h_face));
|
// has_equal_aux_data(0, trg, h_face));
|
||||||
|
// CGAL_assertion(trg_has_equal_1 ==
|
||||||
|
// has_equal_aux_data(1, trg, h_face));
|
||||||
trg->set_has_equal_aux_data_in_face(0, trg_has_equal_0);
|
trg->set_has_equal_aux_data_in_face(0, trg_has_equal_0);
|
||||||
trg->set_has_equal_aux_data_in_face(1, trg_has_equal_1);
|
trg->set_has_equal_aux_data_in_face(1, trg_has_equal_1);
|
||||||
}
|
}
|
||||||
|
|
@ -798,7 +835,8 @@ protected:
|
||||||
|
|
||||||
// we check if the decision done on the edge is equal to the decision
|
// we check if the decision done on the edge is equal to the decision
|
||||||
// done on the faces. if not, then the envelope surfaces must differ
|
// done on the faces. if not, then the envelope surfaces must differ
|
||||||
CGAL_assertion(hh->is_decision_set() && f1->is_decision_set() && f2->is_decision_set());
|
CGAL_assertion(hh->is_decision_set() && f1->is_decision_set() &&
|
||||||
|
f2->is_decision_set());
|
||||||
if (hh->get_decision() != f1->get_decision() ||
|
if (hh->get_decision() != f1->get_decision() ||
|
||||||
hh->get_decision() != f2->get_decision())
|
hh->get_decision() != f2->get_decision())
|
||||||
{
|
{
|
||||||
|
|
@ -909,8 +947,8 @@ protected:
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
CGAL_assertion(vh->is_decision_set());
|
CGAL_assertion(vh->is_decision_set());
|
||||||
// if the decision done on the vertex and its incident halfedges are different,
|
// if the decision done on the vertex and its incident halfedges are
|
||||||
// the envelope differs too.
|
// different, the envelope differs too.
|
||||||
CGAL_assertion(vh == he1->target() && vh == he2->target());
|
CGAL_assertion(vh == he1->target() && vh == he2->target());
|
||||||
if (vh->get_decision() != he1->get_decision() ||
|
if (vh->get_decision() != he1->get_decision() ||
|
||||||
vh->get_decision() != he2->get_decision())
|
vh->get_decision() != he2->get_decision())
|
||||||
|
|
@ -955,7 +993,7 @@ protected:
|
||||||
std::list<Vertex_handle> isolated_to_remove;
|
std::list<Vertex_handle> isolated_to_remove;
|
||||||
|
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = vi;
|
Vertex_handle vh = vi;
|
||||||
if (!vh->is_decision_set() || vh->degree() == 2)
|
if (!vh->is_decision_set() || vh->degree() == 2)
|
||||||
|
|
@ -970,7 +1008,7 @@ protected:
|
||||||
|
|
||||||
// check the candidates and remove if necessary
|
// check the candidates and remove if necessary
|
||||||
typename std::list<Vertex_handle>::iterator ci;
|
typename std::list<Vertex_handle>::iterator ci;
|
||||||
for(ci = candidates_to_remove.begin();
|
for (ci = candidates_to_remove.begin();
|
||||||
ci != candidates_to_remove.end(); ++ci)
|
ci != candidates_to_remove.end(); ++ci)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = *ci;
|
Vertex_handle vh = *ci;
|
||||||
|
|
@ -1036,7 +1074,7 @@ protected:
|
||||||
// remove isolated vertices
|
// remove isolated vertices
|
||||||
|
|
||||||
typename std::list<Vertex_handle>::iterator li;
|
typename std::list<Vertex_handle>::iterator li;
|
||||||
for(li = isolated_to_remove.begin(); li != isolated_to_remove.end(); ++li)
|
for (li = isolated_to_remove.begin(); li != isolated_to_remove.end(); ++li)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = *li;
|
Vertex_handle vh = *li;
|
||||||
CGAL_assertion(vh->is_isolated());
|
CGAL_assertion(vh->is_isolated());
|
||||||
|
|
@ -1080,21 +1118,21 @@ protected:
|
||||||
{
|
{
|
||||||
// vertices
|
// vertices
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
update_envelope_surfaces_by_decision(vi);
|
update_envelope_surfaces_by_decision(vi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// edges
|
// edges
|
||||||
Halfedge_iterator hi = result.halfedges_begin();
|
Halfedge_iterator hi = result.halfedges_begin();
|
||||||
for(; hi != result.halfedges_end(); ++hi)
|
for (; hi != result.halfedges_end(); ++hi)
|
||||||
{
|
{
|
||||||
update_envelope_surfaces_by_decision(hi);
|
update_envelope_surfaces_by_decision(hi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// faces
|
// faces
|
||||||
Face_iterator fi = result.faces_begin();
|
Face_iterator fi = result.faces_begin();
|
||||||
for(; fi != result.faces_end(); ++fi)
|
for (; fi != result.faces_end(); ++fi)
|
||||||
update_envelope_surfaces_by_decision(fi);
|
update_envelope_surfaces_by_decision(fi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1269,7 +1307,7 @@ protected:
|
||||||
{
|
{
|
||||||
// edges
|
// edges
|
||||||
Halfedge_iterator hi = result.halfedges_begin();
|
Halfedge_iterator hi = result.halfedges_begin();
|
||||||
for(; hi != result.halfedges_end(); ++hi)
|
for (; hi != result.halfedges_end(); ++hi)
|
||||||
{
|
{
|
||||||
update_edge_face_flags(hi);
|
update_edge_face_flags(hi);
|
||||||
update_edge_target_flags(hi);
|
update_edge_target_flags(hi);
|
||||||
|
|
@ -1278,7 +1316,7 @@ protected:
|
||||||
|
|
||||||
// vertices
|
// vertices
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
if (vi->is_isolated())
|
if (vi->is_isolated())
|
||||||
update_vertex_face_flags(vi, vi->face());
|
update_vertex_face_flags(vi, vi->face());
|
||||||
|
|
||||||
|
|
@ -1316,8 +1354,6 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//***************************************************************************
|
//***************************************************************************
|
||||||
|
|
@ -1395,7 +1431,7 @@ protected:
|
||||||
void print_decisions(Minimization_diagram_2& result)
|
void print_decisions(Minimization_diagram_2& result)
|
||||||
{
|
{
|
||||||
Face_iterator fi = result.faces_begin();
|
Face_iterator fi = result.faces_begin();
|
||||||
for(; fi != result.faces_end(); ++fi)
|
for (; fi != result.faces_end(); ++fi)
|
||||||
{
|
{
|
||||||
if (fi->is_unbounded())
|
if (fi->is_unbounded())
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -1425,11 +1461,12 @@ protected:
|
||||||
{
|
{
|
||||||
bool all_ok = true;
|
bool all_ok = true;
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = vi;
|
Vertex_handle vh = vi;
|
||||||
/*if (vh->get_is_fake())
|
/*if (vh->get_is_fake())
|
||||||
continue;*/
|
continue;
|
||||||
|
*/
|
||||||
|
|
||||||
all_ok &= (vh->get_aux_is_set(0));
|
all_ok &= (vh->get_aux_is_set(0));
|
||||||
CGAL_assertion_msg(all_ok, "aux source (0) not set over vertex");
|
CGAL_assertion_msg(all_ok, "aux source (0) not set over vertex");
|
||||||
|
|
@ -1440,11 +1477,12 @@ protected:
|
||||||
|
|
||||||
}
|
}
|
||||||
Halfedge_iterator hi = result.halfedges_begin();
|
Halfedge_iterator hi = result.halfedges_begin();
|
||||||
for(; hi != result.halfedges_end(); ++hi)
|
for (; hi != result.halfedges_end(); ++hi)
|
||||||
{
|
{
|
||||||
Halfedge_handle hh = hi;
|
Halfedge_handle hh = hi;
|
||||||
/* if (hh->get_is_fake())
|
/* if (hh->get_is_fake())
|
||||||
continue;*/
|
* continue;
|
||||||
|
*/
|
||||||
|
|
||||||
all_ok &= (hh->get_aux_is_set(0));
|
all_ok &= (hh->get_aux_is_set(0));
|
||||||
CGAL_assertion_msg(all_ok, "aux source (0) not set over edge");
|
CGAL_assertion_msg(all_ok, "aux source (0) not set over edge");
|
||||||
|
|
@ -1454,7 +1492,7 @@ protected:
|
||||||
CGAL_assertion_msg(all_ok, "decision was not set over edge");
|
CGAL_assertion_msg(all_ok, "decision was not set over edge");
|
||||||
}
|
}
|
||||||
Face_iterator fi = result.faces_begin();
|
Face_iterator fi = result.faces_begin();
|
||||||
for(; fi != result.faces_end(); ++fi)
|
for (; fi != result.faces_end(); ++fi)
|
||||||
{
|
{
|
||||||
Face_handle fh = fi;
|
Face_handle fh = fi;
|
||||||
|
|
||||||
|
|
@ -1474,7 +1512,7 @@ protected:
|
||||||
{
|
{
|
||||||
bool all_ok = true;
|
bool all_ok = true;
|
||||||
Vertex_iterator vi = result.vertices_begin();
|
Vertex_iterator vi = result.vertices_begin();
|
||||||
for(; vi != result.vertices_end(); ++vi)
|
for (; vi != result.vertices_end(); ++vi)
|
||||||
{
|
{
|
||||||
Vertex_handle vh = vi;
|
Vertex_handle vh = vi;
|
||||||
|
|
||||||
|
|
@ -1487,7 +1525,7 @@ protected:
|
||||||
CGAL_assertion_msg(all_ok, "fake vertex in envelope");
|
CGAL_assertion_msg(all_ok, "fake vertex in envelope");
|
||||||
}
|
}
|
||||||
Halfedge_iterator hi = result.halfedges_begin();
|
Halfedge_iterator hi = result.halfedges_begin();
|
||||||
for(; hi != result.halfedges_end(); ++hi)
|
for (; hi != result.halfedges_end(); ++hi)
|
||||||
{
|
{
|
||||||
Halfedge_handle hh = hi;
|
Halfedge_handle hh = hi;
|
||||||
|
|
||||||
|
|
@ -1505,7 +1543,7 @@ protected:
|
||||||
CGAL_assertion_msg(all_ok, "fake edge in envelope");
|
CGAL_assertion_msg(all_ok, "fake edge in envelope");
|
||||||
}
|
}
|
||||||
Face_iterator fi = result.faces_begin();
|
Face_iterator fi = result.faces_begin();
|
||||||
for(; fi != result.faces_end(); ++fi)
|
for (; fi != result.faces_end(); ++fi)
|
||||||
{
|
{
|
||||||
Face_handle fh = fi;
|
Face_handle fh = fi;
|
||||||
all_ok &= (fh->get_is_set());
|
all_ok &= (fh->get_is_set());
|
||||||
|
|
@ -1614,7 +1652,8 @@ protected:
|
||||||
/*new_vertex->set_is_fake(org_he->get_is_fake());*/
|
/*new_vertex->set_is_fake(org_he->get_is_fake());*/
|
||||||
|
|
||||||
// update all new bools
|
// update all new bools
|
||||||
new_he->set_is_equal_aux_data_in_face(0, org_he->get_is_equal_aux_data_in_face(0));
|
new_he->
|
||||||
|
set_is_equal_aux_data_in_face(0, org_he->get_is_equal_aux_data_in_face(0));
|
||||||
new_he->twin()->set_is_equal_aux_data_in_face(0, org_he->twin()->get_is_equal_aux_data_in_face(0));
|
new_he->twin()->set_is_equal_aux_data_in_face(0, org_he->twin()->get_is_equal_aux_data_in_face(0));
|
||||||
new_he->set_is_equal_aux_data_in_face(1, org_he->get_is_equal_aux_data_in_face(1));
|
new_he->set_is_equal_aux_data_in_face(1, org_he->get_is_equal_aux_data_in_face(1));
|
||||||
new_he->twin()->set_is_equal_aux_data_in_face(1, org_he->twin()->get_is_equal_aux_data_in_face(1));
|
new_he->twin()->set_is_equal_aux_data_in_face(1, org_he->twin()->get_is_equal_aux_data_in_face(1));
|
||||||
|
|
@ -1679,8 +1718,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructor.
|
// Constructor.
|
||||||
Faces_order_bfs_visitor(const IndexMap& imap,
|
Faces_order_bfs_visitor(const IndexMap& imap, std::list<Face_handle>& f,
|
||||||
std::list<Face_handle>& f,
|
|
||||||
Self* b = NULL) :
|
Self* b = NULL) :
|
||||||
index_map (&imap),
|
index_map (&imap),
|
||||||
faces(f),
|
faces(f),
|
||||||
|
|
@ -1708,8 +1746,8 @@ protected:
|
||||||
fh->set_decision(FIRST);
|
fh->set_decision(FIRST);
|
||||||
else
|
else
|
||||||
// here, we have both surfaces.
|
// here, we have both surfaces.
|
||||||
// we save the face in a list for a later treatment, because the face can change
|
// we save the face in a list for a later treatment, because the
|
||||||
// and destroy the iterator
|
// face can change and destroy the iterator
|
||||||
faces.push_back(fh);
|
faces.push_back(fh);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue