Merge pull request #5498 from GilesBathgate/cleanup-index-adder

Cleanup index adder in polygon_mesh_to_nef_3
This commit is contained in:
Laurent Rineau 2021-03-24 15:05:22 +01:00
commit 45800d2ab6
12 changed files with 51 additions and 105 deletions

View File

@ -107,8 +107,7 @@ class Ray_hit_generator : public Modifier_base<typename Nef_::SNC_and_PL> {
e->twin() = svb; e->twin() = svb;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
svb->set_index(e->get_index()); svb->set_index(e->get_index());
svf->set_index(); svf->twin()->set_index(svf->new_index());
svf->twin()->set_index(svf->get_index());
#endif #endif
} else { } else {
svf->twin() = e; svf->twin() = e;
@ -117,8 +116,7 @@ class Ray_hit_generator : public Modifier_base<typename Nef_::SNC_and_PL> {
e->twin() = svf; e->twin() = svf;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
svf->set_index(e->get_index()); svf->set_index(e->get_index());
svb->set_index(); svb->twin()->set_index(svb->new_index());
svb->twin()->set_index(svb->get_index());
#endif #endif
} }
@ -165,8 +163,7 @@ class Ray_hit_generator : public Modifier_base<typename Nef_::SNC_and_PL> {
SM_walls smw(&*v_new); SM_walls smw(&*v_new);
sv2 = smw.add_ray_svertex(Sphere_point(-dir)); sv2 = smw.add_ray_svertex(Sphere_point(-dir));
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
sv1->set_index(); sv2->set_index(sv1->new_index());
sv2->set_index(sv1->get_index());
#endif #endif
} }
} }

View File

@ -112,8 +112,7 @@ class Ray_hit_generator2 : public Modifier_base<typename Nef_::SNC_and_PL> {
e->twin() = svb; e->twin() = svb;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
svb->set_index(e->get_index()); svb->set_index(e->get_index());
svf->set_index(); svf->twin()->set_index(svf->new_index());
svf->twin()->set_index(svf->get_index());
#endif #endif
} else { } else {
svf->twin() = e; svf->twin() = e;
@ -122,8 +121,7 @@ class Ray_hit_generator2 : public Modifier_base<typename Nef_::SNC_and_PL> {
e->twin() = svf; e->twin() = svf;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
svf->set_index(e->get_index()); svf->set_index(e->get_index());
svb->set_index(); svb->twin()->set_index(svb->new_index());
svb->twin()->set_index(svb->get_index());
#endif #endif
} }
@ -182,8 +180,7 @@ class Ray_hit_generator2 : public Modifier_base<typename Nef_::SNC_and_PL> {
sv1->twin() = sv2; // TODO: why is this necessary? sv1->twin() = sv2; // TODO: why is this necessary?
sv2->twin() = sv1; // these edges should not go into the Edge_sorter sv2->twin() = sv1; // these edges should not go into the Edge_sorter
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
sv1->set_index(); sv2->set_index(sv1->new_index());
sv2->set_index(sv1->get_index());
#endif #endif
} }
} }

View File

@ -529,10 +529,8 @@ class SM_walls : SM_decorator<SMap> {
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
CGAL_assertion(index1==0 || index1!=index2); CGAL_assertion(index1==0 || index1!=index2);
if(index1==0) { if(index1==0) {
se_new->set_index(); index1 = se_new->new_index();
se_new->twin()->set_index(); index2 = se_new->twin()->new_index();
index1 = se_new->get_index();
index2 = se_new->twin()->get_index();
} else { } else {
se_new->set_index(index1); se_new->set_index(index1);
se_new->twin()->set_index(index2); se_new->twin()->set_index(index2);

View File

@ -204,8 +204,7 @@ class Single_wall_creator : public Modifier_base<typename Nef_::SNC_and_PL> {
opp->twin() = lateral_svertex; opp->twin() = lateral_svertex;
lateral_svertex->twin() = opp; lateral_svertex->twin() = opp;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_svertex->set_index(opp->new_index());
lateral_svertex->set_index(opp->get_index());
#endif #endif
pl->add_edge(lateral_svertex); pl->add_edge(lateral_svertex);
@ -237,8 +236,7 @@ class Single_wall_creator : public Modifier_base<typename Nef_::SNC_and_PL> {
lateral_svertex->twin() = opp; lateral_svertex->twin() = opp;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_svertex->set_index(opp->new_index());
lateral_svertex->set_index(opp->get_index());
#endif #endif
pl->add_edge(lateral_svertex); pl->add_edge(lateral_svertex);
@ -275,8 +273,7 @@ class Single_wall_creator : public Modifier_base<typename Nef_::SNC_and_PL> {
opp->twin() = lateral_svertex; opp->twin() = lateral_svertex;
lateral_svertex->twin() = opp; lateral_svertex->twin() = opp;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_svertex->set_index(opp->new_index());
lateral_svertex->set_index(opp->get_index());
#endif #endif
pl->add_edge(lateral_svertex); pl->add_edge(lateral_svertex);
@ -308,8 +305,7 @@ class Single_wall_creator : public Modifier_base<typename Nef_::SNC_and_PL> {
opp->twin() = lateral_svertex; opp->twin() = lateral_svertex;
lateral_svertex->twin() = opp; lateral_svertex->twin() = opp;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_svertex->set_index(opp->new_index());
lateral_svertex->set_index(opp->get_index());
#endif #endif
pl->add_edge(lateral_svertex); pl->add_edge(lateral_svertex);

View File

@ -163,8 +163,7 @@ class Single_wall_creator2 : public Modifier_base<typename Nef_::SNC_and_PL> {
lateral_sv_tgt[0]->twin() = lateral_sv_tgt[1]; lateral_sv_tgt[0]->twin() = lateral_sv_tgt[1];
lateral_sv_tgt[1]->twin() = lateral_sv_tgt[0]; lateral_sv_tgt[1]->twin() = lateral_sv_tgt[0];
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
lateral_sv_tgt[0]->set_index(); lateral_sv_tgt[1]->set_index(lateral_sv_tgt[0]->new_index());
lateral_sv_tgt[1]->set_index(lateral_sv_tgt[0]->get_index());
#endif #endif
return; return;
} }
@ -174,8 +173,7 @@ class Single_wall_creator2 : public Modifier_base<typename Nef_::SNC_and_PL> {
opp->twin() = lateral_sv_tgt[0]; opp->twin() = lateral_sv_tgt[0];
lateral_sv_tgt[0]->twin() = opp; lateral_sv_tgt[0]->twin() = opp;
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_sv_tgt[0]->set_index(opp->new_index());
lateral_sv_tgt[0]->set_index(opp->get_index());
#endif #endif
lateral_sv_tgt[0] = lateral_sv_tgt[0] =
SMW_tgt.add_lateral_svertex(Sphere_segment(lateral_sv_tgt[0]->point().antipode(), SMW_tgt.add_lateral_svertex(Sphere_segment(lateral_sv_tgt[0]->point().antipode(),

View File

@ -169,8 +169,7 @@ class Single_wall_creator3 : public Modifier_base<typename Nef_::SNC_and_PL> {
lateral_sv_tgt[0]->twin() = lateral_sv_tgt[1]; lateral_sv_tgt[0]->twin() = lateral_sv_tgt[1];
lateral_sv_tgt[1]->twin() = lateral_sv_tgt[0]; lateral_sv_tgt[1]->twin() = lateral_sv_tgt[0];
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
lateral_sv_tgt[0]->set_index(); lateral_sv_tgt[1]->set_index(lateral_sv_tgt[0]->new_index());
lateral_sv_tgt[1]->set_index(lateral_sv_tgt[0]->get_index());
#endif #endif
pl->add_edge(lateral_sv_tgt[0]); pl->add_edge(lateral_sv_tgt[0]);
return; return;
@ -182,8 +181,7 @@ class Single_wall_creator3 : public Modifier_base<typename Nef_::SNC_and_PL> {
lateral_sv_tgt[0]->twin() = opp; lateral_sv_tgt[0]->twin() = opp;
pl->add_edge(opp); pl->add_edge(opp);
#ifndef CGAL_NEF_NO_INDEXED_ITEMS #ifndef CGAL_NEF_NO_INDEXED_ITEMS
opp->set_index(); lateral_sv_tgt[0]->set_index(opp->new_index());
lateral_sv_tgt[0]->set_index(opp->get_index());
#endif #endif
lateral_sv_tgt[0] = lateral_sv_tgt[0] =
SMW_tgt.add_lateral_svertex(Sphere_segment(lateral_sv_tgt[0]->point().antipode(), SMW_tgt.add_lateral_svertex(Sphere_segment(lateral_sv_tgt[0]->point().antipode(),

View File

@ -78,8 +78,7 @@ class ID_support_handler<SNC_indexed_items, Decorator> {
<< " " << f2->plane() << &f2); << " " << f2->plane() << &f2);
if(f2m[f1][f2]==0) { if(f2m[f1][f2]==0) {
sv->set_index(); f2m[f1][f2] = sv->new_index();
f2m[f1][f2] = sv->get_index();
CGAL_NEF_TRACEN("insert " << sv->point() << &*sv CGAL_NEF_TRACEN("insert " << sv->point() << &*sv
<< ": " << f2m[f1][f2]); << ": " << f2m[f1][f2]);
CGAL_NEF_TRACEN("not defined, yet"); CGAL_NEF_TRACEN("not defined, yet");

View File

@ -2129,16 +2129,14 @@ class SNC_constructor<SNC_indexed_items, SNC_structure_>
Halfedge_iterator e; Halfedge_iterator e;
CGAL_forall_edges(e, *this->sncp()) { CGAL_forall_edges(e, *this->sncp()) {
e->set_index(); e->twin()->set_index(e->new_index());
e->twin()->set_index(e->get_index());
} }
Halffacet_iterator f; Halffacet_iterator f;
CGAL_forall_halffacets(f, *this->sncp()) { CGAL_forall_halffacets(f, *this->sncp()) {
Halffacet_cycle_iterator fci(f->facet_cycles_begin()); Halffacet_cycle_iterator fci(f->facet_cycles_begin());
SHalfedge_handle se(fci); SHalfedge_handle se(fci);
se->set_index(); int index(se->new_index());
int index(se->get_index());
for(; fci != f->facet_cycles_end(); ++fci) { for(; fci != f->facet_cycles_end(); ++fci) {
if(fci.is_shalfedge()) { if(fci.is_shalfedge()) {
SHalfedge_around_facet_circulator c1(fci), c2(c1); SHalfedge_around_facet_circulator c1(fci), c2(c1);

View File

@ -116,8 +116,9 @@ class SNC_indexed_items {
init_ifacet = sl.init_ifacet; init_ifacet = sl.init_ifacet;
return *this; return *this;
} }
int new_index()
void set_index(int idx = Index_generator::get_unique_index()) { index = Index_generator::get_unique_index(); return index; }
void set_index(int idx)
{ index = idx; } { index = idx; }
int get_index() const { return index; } int get_index() const { return index; }
Halffacet_const_handle get_index_facet() const { Halffacet_const_handle get_index_facet() const {
@ -151,8 +152,9 @@ class SNC_indexed_items {
init_ifacet = se.init_ifacet; init_ifacet = se.init_ifacet;
return *this; return *this;
} }
int new_index()
void set_index(int idx = Index_generator::get_unique_index()) { index = index2 = Index_generator::get_unique_index(); return index; }
void set_index(int idx)
{ index = index2 = idx; } { index = index2 = idx; }
int get_index() const { int get_index() const {
return index; return index;
@ -186,8 +188,9 @@ class SNC_indexed_items {
index = sv.index; index = sv.index;
return *this; return *this;
} }
int new_index()
void set_index(int idx = Index_generator::get_unique_index()) { index = Index_generator::get_unique_index(); return index; }
void set_index(int idx)
{ index = idx; } { index = idx; }
int get_index() const { return index; } int get_index() const { return index; }
}; };

View File

@ -112,7 +112,7 @@ class Face_graph_index_adder {
typedef typename boost::graph_traits<Polyhedron>::halfedge_descriptor halfedge_descriptor; typedef typename boost::graph_traits<Polyhedron>::halfedge_descriptor halfedge_descriptor;
public: public:
Face_graph_index_adder(Polyhedron&, HalfedgeIndexMap ) {} Face_graph_index_adder(Polyhedron&, HalfedgeIndexMap ) {}
void set_hash(halfedge_descriptor, void set_edge(halfedge_descriptor,
SHalfedge_handle) {} SHalfedge_handle) {}
void resolve_indexes() {} void resolve_indexes() {}
}; };
@ -126,21 +126,21 @@ class Face_graph_index_adder<CGAL::SNC_indexed_items, PolygonMesh, SNC_structure
typedef Halfedge_around_face_circulator<PolygonMesh> typedef Halfedge_around_face_circulator<PolygonMesh>
Halfedge_around_facet_const_circulator; Halfedge_around_facet_const_circulator;
typedef std::vector<SHalfedge_handle> Hash; typedef std::vector<SHalfedge_handle> SHalfedges;
PolygonMesh& P; PolygonMesh& P;
HalfedgeIndexMap him; HalfedgeIndexMap him;
Hash hash; SHalfedges shalfedges;
public: public:
Face_graph_index_adder(PolygonMesh& P_, HalfedgeIndexMap him) : P(P_), him(him) Face_graph_index_adder(PolygonMesh& P_, HalfedgeIndexMap him) : P(P_), him(him)
{ {
hash.resize(num_halfedges(P)); shalfedges.resize(num_halfedges(P));
} }
void set_hash(halfedge_descriptor evc, void set_edge(halfedge_descriptor evc,
SHalfedge_handle se) { SHalfedge_handle se) {
hash[get(him,evc)] = se; shalfedges[get(him,evc)] = se;
} }
void resolve_indexes() void resolve_indexes()
@ -148,26 +148,22 @@ public:
for(face_descriptor fi : faces(P)) { for(face_descriptor fi : faces(P)) {
Halfedge_around_facet_const_circulator Halfedge_around_facet_const_circulator
fc(halfedge(fi,P),P), end(fc); fc(halfedge(fi,P),P), end(fc);
typename boost::property_traits<HalfedgeIndexMap>::value_type SHalfedge_handle s = shalfedges[get(him,*fc)];
index = get(him,*fc); int se = s->new_index();
hash[index]->set_index(); int set = s->twin()->new_index();
hash[index]->twin()->set_index(); int sv = s->twin()->source()->new_index();
hash[index]->twin()->source()->set_index();
int se = hash[index]->get_index();
int set = hash[index]->twin()->get_index();
int sv = hash[index]->twin()->source()->get_index();
++fc; ++fc;
CGAL_For_all(fc, end) { CGAL_For_all(fc, end) {
index = get(him,*fc); SHalfedge_handle n = shalfedges[get(him,*fc)];
hash[index]->set_index(se); n->set_index(se);
hash[index]->twin()->set_index(set); n->twin()->set_index(set);
hash[index]->source()->set_index(sv); n->source()->set_index(sv);
hash[index]->twin()->source()->set_index(); sv = n->twin()->source()->new_index();
sv = hash[index]->twin()->source()->get_index();
} }
hash[get(him,*fc)]->source()->set_index(sv); s->source()->set_index(sv);
} }
} }
}; };
@ -266,7 +262,7 @@ void polygon_mesh_to_nef_3(PolygonMesh& P, SNC_structure& S, FaceIndexMap fimap,
e->twin()->circle() = ss_circle.opposite(); e->twin()->circle() = ss_circle.opposite();
e->mark() = e->twin()->mark() = true; e->mark() = e->twin()->mark() = true;
index_adder.set_hash(pe_prev, e); index_adder.set_edge(pe_prev, e);
} }
sv_prev = sv; sv_prev = sv;
@ -300,7 +296,7 @@ void polygon_mesh_to_nef_3(PolygonMesh& P, SNC_structure& S, FaceIndexMap fimap,
e->twin()->circle() = ss_circle.opposite(); e->twin()->circle() = ss_circle.opposite();
e->mark() = e->twin()->mark() = true; e->mark() = e->twin()->mark() = true;
index_adder.set_hash(pe_prev, e); index_adder.set_edge(pe_prev, e);
} }
// create faces // create faces

View File

@ -35,37 +35,6 @@
namespace CGAL { namespace CGAL {
/*
template<typename Items>
class Index_assigner {
Index_assigner() {}
template<typename Handle>
void assign_index(Handle& ) const {}
template<typename Handle>
void assign_first_index() const {}
template<typename Handle>
void assign_new_index() {}
};
template<> class Index_assigner<CGAL::SNC_indexed_items> {
int first;
int index;
public:
Index_assigner() :
first(Index_generator::get_unique_index()), index(first) {}
template<typename Handle>
void assign_index(Handle& h) const
{ h->set_index(index); }
template<typename Handle>
void assign_first_index(Handle& h) const
{ h->set_index(first); }
template<typename Handle>
void assign_new_index(Handle& h)
{ h->set_index(); index = h->get_index(); }
};
*/
//template<typename Items> class Index_matcher; //template<typename Items> class Index_matcher;
template<typename Vertex> template<typename Vertex>
@ -121,11 +90,10 @@ template<typename Edge, typename CompareEdges>
h->set_index(ei->second); h->set_index(ei->second);
if(plusTwin) h->twin()->set_index(h->get_index()+1); if(plusTwin) h->twin()->set_index(h->get_index()+1);
} else { } else {
int new_index = Index_generator::get_unique_index(); int new_index = h->new_index();
edge2int.insert(std::make_pair(e,new_index)); edge2int.insert(std::make_pair(e,new_index));
h->set_index(new_index);
if(plusTwin) if(plusTwin)
h->twin()->set_index(); h->twin()->new_index();
} }
} }
}; };

View File

@ -496,8 +496,7 @@ protected:
SFace_handle sf(v->new_sface()); SFace_handle sf(v->new_sface());
SM.link_as_isolated_vertex(sv,sf); SM.link_as_isolated_vertex(sv,sf);
if(first) { if(first) {
sv->set_index(); index = sv->new_index();
index = sv->get_index();
first = false; first = false;
} else } else
sv->set_index(index); sv->set_index(index);
@ -518,8 +517,7 @@ protected:
SM.link_as_isolated_vertex(sv1,sf); SM.link_as_isolated_vertex(sv1,sf);
SM.link_as_isolated_vertex(sv2,sf); SM.link_as_isolated_vertex(sv2,sf);
sv1->set_index(index); sv1->set_index(index);
sv2->set_index(); index = sv2->new_index();
index = sv2->get_index();
} }
}; };