mirror of https://github.com/CGAL/cgal
Bug fix in close operation.
This commit is contained in:
parent
16cc269288
commit
d2e409487e
|
|
@ -872,7 +872,8 @@ namespace CGAL {
|
|||
* @pre 2<=i<=n (TODO case i==1)
|
||||
* @TODO move into Combinatorial_map_operations ?
|
||||
*/
|
||||
unsigned int close(unsigned int i)
|
||||
template<unsigned int i>
|
||||
unsigned int close()
|
||||
{
|
||||
CGAL_assertion( 2<=i && i<=dimension );
|
||||
unsigned int res = 0;
|
||||
|
|
@ -881,44 +882,37 @@ namespace CGAL {
|
|||
for ( typename Dart_range::iterator it(darts().begin());
|
||||
it!=darts().end(); ++it)
|
||||
{
|
||||
if ( it->is_free(i) )
|
||||
if ( it->template is_free<i>() )
|
||||
{
|
||||
d = create_dart();
|
||||
++res;
|
||||
|
||||
// Here we cannot use link_beta as i is not a constant
|
||||
// TODO something to solve this problem ?
|
||||
basic_link_beta_for_involution(it, d, i);
|
||||
// we copy all the non void attribute
|
||||
Helper::template Foreach_enabled_attributes_except
|
||||
<CGAL::internal::Group_attribute_functor_of_dart
|
||||
<Self, dimension+1>, dimension+1>:: run(this,it,d);
|
||||
// we need to remove i-attrib, how to do that ?
|
||||
link_beta_for_involution<i>(it, d);
|
||||
|
||||
// Special cases for 0 and 1
|
||||
if ( !it->template is_free<1>() &&
|
||||
!it->template beta<1>()->is_free(i) )
|
||||
!it->template beta<1>()->template is_free<i>() )
|
||||
link_beta<1>(it->beta(1)->beta(i),d);
|
||||
if ( !it->template is_free<0>() &&
|
||||
!it->template beta<0>()->is_free(i) )
|
||||
link_beta<0>(it->template beta<0>()->beta(i),d);
|
||||
!it->template beta<0>()->template is_free<i>() )
|
||||
link_beta<0>(it->template beta<0>()->template beta<i>(),d);
|
||||
// General case for 2...dimension
|
||||
for ( unsigned int j=2; j<=dimension; ++j)
|
||||
{
|
||||
if ( j+1!=i && j!=i && j!=i+1 &&
|
||||
!it->is_free(j) && !it->beta(j)->is_free(i) )
|
||||
!it->is_free(j) && !it->beta(j)->template is_free<i>() )
|
||||
{
|
||||
basic_link_beta_for_involution(it->beta(j)->beta(i), d, j);
|
||||
}
|
||||
}
|
||||
|
||||
d2 = it;
|
||||
while (d2 != null_dart_handle && !d2->is_free(i-1))
|
||||
{ d2 = d2->beta(i-1)->beta(i); }
|
||||
while (d2 != null_dart_handle && !d2->template is_free<i-1>())
|
||||
{ d2 = d2->beta(i-1)->template beta<i>(); }
|
||||
if (d2 != null_dart_handle)
|
||||
{
|
||||
if (i==2) basic_link_beta<1>(d2, d);
|
||||
else basic_link_beta_for_involution(d2, d, i-1);
|
||||
else basic_link_beta_for_involution<i-1>(d2, d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,8 +167,8 @@ void createAllBasicCases1()
|
|||
|
||||
}
|
||||
|
||||
template<class Map, class Functor>
|
||||
void createAllBasicCases2(int close1, int close2)
|
||||
template<class Map, class Functor, int close1, int close2>
|
||||
void createAllBasicCases2()
|
||||
{
|
||||
Map map;
|
||||
Functor functor;
|
||||
|
|
@ -179,8 +179,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
dh = map.create_dart();
|
||||
dh2 = map.create_dart();
|
||||
map.template sew<2>(dh,dh2);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -189,8 +189,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
dh2 = map.create_dart();
|
||||
map.template sew<1>(dh,dh);
|
||||
map.template sew<2>(dh,dh2);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -200,8 +200,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
dh3 = map.create_dart();
|
||||
map.template sew<1>(dh, dh2);
|
||||
map.template sew<2>(dh2,dh3);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -211,8 +211,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
dh3 = map.create_dart();
|
||||
map.template sew<1>(dh, dh2);
|
||||
map.template sew<2>(dh2,dh3);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh2);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -223,8 +223,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
map.template sew<1>(dh, dh2);
|
||||
map.template sew<1>(dh2, dh);
|
||||
map.template sew<2>(dh2,dh3);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -237,8 +237,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
map.template sew<2>(dh2,dh3);
|
||||
dh3 = map.create_dart();
|
||||
map.template sew<2>(dh,dh3);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh2);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -252,8 +252,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
map.template sew<2>(dh2,dh4);
|
||||
dh4 = map.create_dart();
|
||||
map.template sew<2>(dh3,dh4);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -267,8 +267,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
map.template sew<2>(dh2,dh4);
|
||||
dh4 = map.create_dart();
|
||||
map.template sew<2>(dh3,dh4);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh2);
|
||||
map.clear();
|
||||
|
||||
|
|
@ -281,8 +281,8 @@ void createAllBasicCases2(int close1, int close2)
|
|||
map.template sew<1>(dh3, dh);
|
||||
dh4 = map.create_dart();
|
||||
map.template sew<2>(dh,dh4);
|
||||
if (close1!=-1) map.close(close1);
|
||||
if (close2!=-1) map.close(close2);
|
||||
if (close1!=-1) map.template close<close1>();
|
||||
if (close2!=-1) map.template close<close2>();
|
||||
functor(map,dh);
|
||||
map.clear();
|
||||
}
|
||||
|
|
@ -795,10 +795,10 @@ bool test3D()
|
|||
createAllBasicCases1<Map,InsertVertex<Map> >();
|
||||
|
||||
std::cout<<"************************* Test createAllBasicCases2 *************************"<<std::endl;
|
||||
createAllBasicCases2<Map,InsertVertex<Map> >(-1,-1);
|
||||
createAllBasicCases2<Map,InsertVertex<Map>,-1,-1>();
|
||||
|
||||
std::cout<<"************************* Test createAllBasicCases2<3> *************************"<<std::endl;
|
||||
createAllBasicCases2<Map,InsertVertex<Map> >(-1,3);
|
||||
createAllBasicCases2<Map,InsertVertex<Map>,-1,3>();
|
||||
|
||||
std::cout<<"************************* Test different cases *************************"<<std::endl;
|
||||
d1 = map.create_dart();
|
||||
|
|
|
|||
|
|
@ -595,7 +595,7 @@ void MainWindow::on_actionClose_volume_triggered()
|
|||
timer.start();
|
||||
#endif
|
||||
|
||||
if ( scene.lcc->close(3) > 0 )
|
||||
if ( scene.lcc->close<3>() > 0 )
|
||||
{
|
||||
init_all_new_volumes();
|
||||
statusBar ()->showMessage (QString ("All volume(s) closed"),
|
||||
|
|
|
|||
Loading…
Reference in New Issue