Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h
Original file line number Diff line number Diff line change
Expand Up @@ -1334,8 +1334,8 @@ refine_balls()
restart = false;
boost::unordered_map<Vertex_handle, FT, Hash_fct> new_sizes;

for(typename Tr::Finite_edges_iterator eit = tr.finite_edges_begin(),
end = tr.finite_edges_end(); eit != end; ++eit)
for(typename Tr::Finite_marking_edges_iterator eit = tr.finite_marking_edges_begin(),
end = tr.finite_marking_edges_end(); eit != end; ++eit)
{
if(forced_stop()) break;
const Vertex_handle& va = eit->first->vertex(eit->second);
Expand Down Expand Up @@ -1384,6 +1384,10 @@ refine_balls()
}
}
}

tr.clear_marked_edges();


if(forced_stop()) new_sizes.clear();

// The std::map with Vertex_handle as the key is not robust, because
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class Periodic_3_regular_triangulation_3_wrapper
typedef typename Base::Cell_iterator Finite_cells_iterator;
typedef typename Base::Facet_iterator Finite_facets_iterator;
typedef typename Base::Edge_iterator Finite_edges_iterator;
typedef typename Base::Marking_edge_iterator Finite_marking_edges_iterator;
typedef typename Base::Vertex_iterator Finite_vertices_iterator;

typedef typename Base::Vertex_handle Vertex_handle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class Periodic_3_regular_triangulation_3

typedef typename Tr_Base::Vertex_iterator Vertex_iterator;
typedef typename Tr_Base::Edge_iterator Edge_iterator;
typedef typename Tr_Base::Marking_edge_iterator Marking_edge_iterator;
typedef typename Tr_Base::Facet_iterator Facet_iterator;
typedef typename Tr_Base::Facet_circulator Facet_circulator;
typedef typename Tr_Base::Cell_iterator Cell_iterator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ class Periodic_3_triangulation_3
typedef typename TDS::Cell_iterator Cell_iterator;
typedef typename TDS::Facet_iterator Facet_iterator;
typedef typename TDS::Edge_iterator Edge_iterator;
typedef typename TDS::Marking_edge_iterator Marking_edge_iterator;
typedef typename TDS::Vertex_iterator Vertex_iterator;

typedef typename TDS::Cell_circulator Cell_circulator;
Expand Down Expand Up @@ -225,6 +226,7 @@ class Periodic_3_triangulation_3
typedef Cell_iterator Finite_cells_iterator;
typedef Facet_iterator Finite_facets_iterator;
typedef Edge_iterator Finite_edges_iterator;
typedef Marking_edge_iterator Finite_marking_edges_iterator;
typedef Vertex_iterator Finite_vertices_iterator;

int dimension() const { return (number_of_vertices() == 0) ? -2 : 3; }
Expand Down Expand Up @@ -1501,6 +1503,14 @@ class Periodic_3_triangulation_3
return _tds.vertices_end();
}

Finite_marking_edges_iterator finite_marking_edges_begin() const { return _tds.marking_edges_begin(); }
Finite_marking_edges_iterator finite_marking_edges_end() const { return _tds.marking_edges_end(); }

void clear_marked_edges()
{
_tds.clear_marked_edges();
}

All_edges_iterator all_edges_begin() const {
return _tds.edges_begin();
}
Expand Down
94 changes: 85 additions & 9 deletions TDS_3/include/CGAL/Triangulation_data_structure_3.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,76 @@ class Triangulation_data_structure_3

class Cell_data {
unsigned char conflict_state;

public:
Cell_data() : conflict_state(0) {}
Cell_data() : conflict_state(0)
{}

void clear()
{
conflict_state &= 0B11111100 ;
}

void mark_in_conflict()
{
conflict_state |= 0B00000001 ;
conflict_state &= 0B11111101 ;
}

void mark_on_boundary()
{
conflict_state &= 0B11111110 ;
conflict_state |= 0B00000010 ;

}

void mark_processed()
{
conflict_state |= 0B00000001 ;
conflict_state &= 0B11111101 ;
}

bool is_clear() const
{
return (conflict_state & 3) == 0;
}

bool is_in_conflict() const
{
return (conflict_state & 3) == 1;
}

bool is_on_boundary() const
{
return (conflict_state & 3) == 2;
}

void clear() { conflict_state = 0; }
void mark_in_conflict() { conflict_state = 1; }
void mark_on_boundary() { conflict_state = 2; }
void mark_processed() { conflict_state = 1; }
bool processed() const
{
return (conflict_state & 3) == 1;
}

void set_edge(int i)
{
conflict_state |= (1 << (i+2));
}

bool edge(int i)
{
return (conflict_state >> (i+2)) & 0B00000001;
}

bool is_clear() const { return conflict_state == 0; }
bool is_in_conflict() const { return conflict_state == 1; }
bool is_on_boundary() const { return conflict_state == 2; }
bool processed() const { return conflict_state == 1; }
void clear_edges()
{
conflict_state &= 0B00000011;
}
};

private:

friend class internal::Triangulation_ds_facet_iterator_3<Tds>;
friend class internal::Triangulation_ds_edge_iterator_3<Tds>;
friend class internal::Triangulation_ds_marking_edge_iterator_3<Tds>;

friend class internal::Triangulation_ds_cell_circulator_3<Tds>;
friend class internal::Triangulation_ds_facet_circulator_3<Tds>;
Expand Down Expand Up @@ -156,6 +208,7 @@ class Triangulation_data_structure_3

typedef internal::Triangulation_ds_facet_iterator_3<Tds> Facet_iterator;
typedef internal::Triangulation_ds_edge_iterator_3<Tds> Edge_iterator;
typedef internal::Triangulation_ds_marking_edge_iterator_3<Tds> Marking_edge_iterator;

typedef internal::Triangulation_ds_cell_circulator_3<Tds> Cell_circulator;
typedef internal::Triangulation_ds_facet_circulator_3<Tds> Facet_circulator;
Expand Down Expand Up @@ -678,6 +731,25 @@ class Triangulation_data_structure_3
return Edge_iterator(this,1);
}

Marking_edge_iterator marking_edges_begin() const
{
if ( dimension() < 1 )
return marking_edges_end();
return Marking_edge_iterator(this);
}

Marking_edge_iterator marking_edges_end() const
{
return Marking_edge_iterator(this,1);
}

void clear_marked_edges()
{
for(Cell_handle ch : cell_handles()){
ch->tds_data().clear_edges();
}
}

Edges edges() const
{
return Edges(edges_begin(), edges_end());
Expand Down Expand Up @@ -4084,6 +4156,10 @@ count_edges(size_type & i, bool verbose, int level) const
if (verbose)
std::cerr << "invalid edge" << std::endl;
CGAL_triangulation_assertion(false);

for(Cell_iterator aci = cells_begin(); aci != cells_end(); ++aci){
aci->tds_data().clear_edges();
}
return false;
}
++i;
Expand Down
9 changes: 9 additions & 0 deletions TDS_3/include/CGAL/Triangulation_utils_3.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ namespace CGAL {
template < class T = void >
struct Triangulation_utils_base_3
{
static const int tab_edge_index[4][4];
static const char tab_next_around_edge[4][4];
static const int tab_vertex_triple_index[4][3];

Expand All @@ -33,6 +34,10 @@ struct Triangulation_utils_base_3
static const int cw_map[3];
};

template < class T >
const int Triangulation_utils_base_3<T>::tab_edge_index[4][4] = {
{ -1, 0, 2, 3 }, { 0, -1, 1, 4}, {2, 1, -1, 5}, {3, 4, 5, -1} };

template < class T >
const char Triangulation_utils_base_3<T>::tab_next_around_edge[4][4] = {
{5, 2, 3, 1},
Expand Down Expand Up @@ -93,6 +98,10 @@ struct Triangulation_utils_3
return tab_vertex_triple_index[i][j];
}

static int edge_index(const int i, const int j)
{
return tab_edge_index[i][j];
}
};

} //namespace CGAL
Expand Down
Loading