Add test for contraction<3>

This commit is contained in:
Guillaume Damiand 2013-02-08 21:36:41 +01:00
parent 1817476e2b
commit 9a0b1d17e9
2 changed files with 77 additions and 98 deletions

View File

@ -779,7 +779,7 @@ namespace CGAL {
for (CMap_dart_const_iterator_of_cell<Map,i> it(amap, adart); for (CMap_dart_const_iterator_of_cell<Map,i> it(amap, adart);
res && it.cont(); ++it) res && it.cont(); ++it)
{ {
if (it->beta(i-2)->beta(i-1) != it->beta_inv(i-2)->beta(i-1) ) if ( it->beta(i-2)->beta(i-1)!=it->beta(i-1)->beta_inv(i-2) )
res = false; res = false;
} }
return res; return res;
@ -979,28 +979,26 @@ namespace CGAL {
if ( dg1!=NULL ) if ( dg1!=NULL )
amap.template group_attribute<0>(dg1, dg2); amap.template group_attribute<0>(dg1, dg2);
// 3) We modify the darts of the cells incident to the edge
// when they are marked to remove.
for (it=to_erase.begin(); it!=to_erase.end(); ++it)
{ amap.update_dart_of_all_attributes(*it, mark); }
// 4) For each dart of the cell, we modify link of neighbors. // 4) For each dart of the cell, we modify link of neighbors.
for ( it=to_erase.begin(); it!=to_erase.end(); ++it ) for ( it=to_erase.begin(); it!=to_erase.end(); ++it )
{ {
if ( !(*it)->is_free(0) ) if ( !(*it)->is_free(0) )
{ {
if ( !(*it)->is_free(1) && (*it)->beta(0)!=(*it) ) if ( !(*it)->is_free(1) )
{ {
amap.template basic_link_beta<1>((*it)->beta(0), (*it)->beta(1)); if ( (*it)->beta(1)!=*it )
modified_darts.push_back((*it)->beta(0)); {
modified_darts.push_back((*it)->beta(1)); /* modified_darts.push_back((*it)->beta(0));
if ( (*it)->beta(0)!=(*it)->beta(1) )*/
modified_darts.push_back((*it)->beta(1));
amap.template basic_link_beta<1>((*it)->beta(0), (*it)->beta(1));
}
} }
else else
{ {
// TODO todegroup.push(Dart_pair((*it)->beta(0), *it)); // TODO todegroup.push(Dart_pair((*it)->beta(0), *it));
(*it)->beta(0)->unlink_beta(1);
modified_darts.push_back((*it)->beta(0)); modified_darts.push_back((*it)->beta(0));
(*it)->beta(0)->unlink_beta(1);
} }
} }
else else
@ -1008,8 +1006,8 @@ namespace CGAL {
if ( !(*it)->is_free(1) ) if ( !(*it)->is_free(1) )
{ {
// TODO todegroup.push(Dart_pair((*it)->beta(1), *it)); // TODO todegroup.push(Dart_pair((*it)->beta(1), *it));
(*it)->beta(1)->unlink_beta(0);
modified_darts.push_back((*it)->beta(1)); modified_darts.push_back((*it)->beta(1));
(*it)->beta(1)->unlink_beta(0);
} }
} }
} }
@ -1017,7 +1015,7 @@ namespace CGAL {
// We test the split of all the incident cells for all the non // We test the split of all the incident cells for all the non
// void attributes. // void attributes.
Map::Helper::template Foreach_enabled_attributes Map::Helper::template Foreach_enabled_attributes
<internal::Test2_split_with_deque<Map,0> >:: <internal::Test2_split_with_deque<Map,1> >::
// <internal::Test_split_with_deque<Map,0> >:: // <internal::Test_split_with_deque<Map,0> >::
run(&amap, run(&amap,
&modified_darts, -1); //mark_modified_darts); &modified_darts, -1); //mark_modified_darts);

View File

@ -38,7 +38,7 @@ bool check_number_of_cells_3(LCC& lcc, unsigned int nbv, unsigned int nbe,
assert(false); assert(false);
return false; return false;
} }
std::vector<unsigned int> nbc; std::vector<unsigned int> nbc;
nbc=lcc.count_all_cells(); nbc=lcc.count_all_cells();
@ -63,7 +63,7 @@ bool check_number_of_cells_3(LCC& lcc, unsigned int nbv, unsigned int nbe,
assert(false); assert(false);
return false; return false;
} }
return true; return true;
} }
@ -82,7 +82,7 @@ typename LCC::Dart_handle make_face_two_edges(LCC& lcc,
{ {
typename LCC::Dart_handle dh1 = lcc.create_dart(p1); typename LCC::Dart_handle dh1 = lcc.create_dart(p1);
lcc.template sew<1>(dh1, lcc.create_dart(p2)); lcc.template sew<1>(dh1, lcc.create_dart(p2));
lcc.template sew<1>(dh1, dh1->beta(1)); lcc.template sew<0>(dh1, dh1->beta(1));
return dh1; return dh1;
} }
@ -93,21 +93,21 @@ bool test_LCC_3()
typedef typename LCC::Dart_handle Dart_handle; typedef typename LCC::Dart_handle Dart_handle;
typedef typename LCC::Point Point; typedef typename LCC::Point Point;
// Construction operations // Construction operations
Dart_handle dh1=lcc.make_segment(Point(0,0,0),Point(1,0,0)); Dart_handle dh1=lcc.make_segment(Point(0,0,0),Point(1,0,0));
Dart_handle dh2=lcc.make_segment(Point(2,0,0),Point(2,1,0)); Dart_handle dh2=lcc.make_segment(Point(2,0,0),Point(2,1,0));
Dart_handle dh3=lcc.make_segment(Point(2,2,0),Point(3,1,0)); Dart_handle dh3=lcc.make_segment(Point(2,2,0),Point(3,1,0));
if ( !check_number_of_cells_3(lcc, 6, 3, 6, 3, 3) ) if ( !check_number_of_cells_3(lcc, 6, 3, 6, 3, 3) )
return false; return false;
lcc.template sew<0>(dh2,dh1); lcc.template sew<0>(dh2,dh1);
lcc.template sew<1>(dh2,dh3); lcc.template sew<1>(dh2,dh3);
if ( !check_number_of_cells_3(lcc, 4, 3, 4, 1, 1) ) if ( !check_number_of_cells_3(lcc, 4, 3, 4, 1, 1) )
return false; return false;
Dart_handle dh5=lcc.make_triangle(Point(5,5,3),Point(7,5,3),Point(6,6,3)); Dart_handle dh5=lcc.make_triangle(Point(5,5,3),Point(7,5,3),Point(6,6,3));
Dart_handle dh6=lcc.make_triangle(Point(5,4,3),Point(7,4,3),Point(6,3,3)); Dart_handle dh6=lcc.make_triangle(Point(5,4,3),Point(7,4,3),Point(6,3,3));
if ( !check_number_of_cells_3(lcc, 10, 9, 6, 3, 3) ) if ( !check_number_of_cells_3(lcc, 10, 9, 6, 3, 3) )
return false; return false;
@ -164,7 +164,7 @@ bool test_LCC_3()
CGAL::remove_cell<LCC,1>(lcc, dh14); CGAL::remove_cell<LCC,1>(lcc, dh14);
if ( !check_number_of_cells_3(lcc, 18, 26, 17, 4, 3) ) if ( !check_number_of_cells_3(lcc, 18, 26, 17, 4, 3) )
return false; return false;
lcc.template unsew<3>(dh12); lcc.template unsew<3>(dh12);
if ( !check_number_of_cells_3(lcc, 21, 29, 18, 4, 4) ) if ( !check_number_of_cells_3(lcc, 21, 29, 18, 4, 4) )
return false; return false;
@ -173,7 +173,7 @@ bool test_LCC_3()
CGAL::remove_cell<LCC,3>(lcc, dh12); CGAL::remove_cell<LCC,3>(lcc, dh12);
if ( !check_number_of_cells_3(lcc, 13, 17, 10, 2, 2) ) if ( !check_number_of_cells_3(lcc, 13, 17, 10, 2, 2) )
return false; return false;
CGAL::remove_cell<LCC,1>(lcc, dh11); CGAL::remove_cell<LCC,1>(lcc, dh11);
if ( !check_number_of_cells_3(lcc, 12, 16, 10, 2, 2) ) if ( !check_number_of_cells_3(lcc, 12, 16, 10, 2, 2) )
return false; return false;
@ -184,14 +184,14 @@ bool test_LCC_3()
itend=lcc.template darts_of_cell<0,2>(dh10).end(); itend=lcc.template darts_of_cell<0,2>(dh10).end();
it!=itend; ++it ) it!=itend; ++it )
toremove.push_back( it ); toremove.push_back( it );
for ( typename std::vector<Dart_handle>::iterator for ( typename std::vector<Dart_handle>::iterator
it=toremove.begin(), itend=toremove.end(); it!=itend; ++it ) it=toremove.begin(), itend=toremove.end(); it!=itend; ++it )
CGAL::remove_cell<LCC,1>(lcc, *it); CGAL::remove_cell<LCC,1>(lcc, *it);
toremove.clear(); toremove.clear();
if ( !check_number_of_cells_3(lcc, 11, 13, 8, 2, 2) ) if ( !check_number_of_cells_3(lcc, 11, 13, 8, 2, 2) )
return false; return false;
CGAL::remove_cell<LCC,0>(lcc, dh9); CGAL::remove_cell<LCC,0>(lcc, dh9);
if ( !check_number_of_cells_3(lcc, 10, 12, 8, 2, 2) ) if ( !check_number_of_cells_3(lcc, 10, 12, 8, 2, 2) )
return false; return false;
@ -201,14 +201,14 @@ bool test_LCC_3()
itend=lcc.template darts_of_cell<0,2>(dh8).end(); itend=lcc.template darts_of_cell<0,2>(dh8).end();
it!=itend; ++it ) it!=itend; ++it )
toremove.push_back( it ); toremove.push_back( it );
for ( typename std::vector<Dart_handle>::iterator for ( typename std::vector<Dart_handle>::iterator
it=toremove.begin(), itend=toremove.end(); it!=itend; ++it ) it=toremove.begin(), itend=toremove.end(); it!=itend; ++it )
CGAL::remove_cell<LCC,1>(lcc, *it); CGAL::remove_cell<LCC,1>(lcc, *it);
toremove.clear(); toremove.clear();
if ( !check_number_of_cells_3(lcc, 9, 9, 6, 2, 2) ) if ( !check_number_of_cells_3(lcc, 9, 9, 6, 2, 2) )
return false; return false;
CGAL::remove_cell<LCC,0>(lcc, dh7); CGAL::remove_cell<LCC,0>(lcc, dh7);
if ( !check_number_of_cells_3(lcc, 8, 8, 6, 2, 2) ) if ( !check_number_of_cells_3(lcc, 8, 8, 6, 2, 2) )
return false; return false;
@ -226,13 +226,13 @@ bool test_LCC_3()
if ( !check_number_of_cells_3(lcc, 5, 3, 5, 2, 2) ) if ( !check_number_of_cells_3(lcc, 5, 3, 5, 2, 2) )
return false; return false;
lcc.template unsew<0>(dh2); lcc.template unsew<0>(dh2);
if ( !check_number_of_cells_3(lcc, 6, 3, 6, 3, 3) ) if ( !check_number_of_cells_3(lcc, 6, 3, 6, 3, 3) )
return false; return false;
CGAL::remove_cell<LCC,1>(lcc, dh1); CGAL::remove_cell<LCC,1>(lcc, dh1);
CGAL::remove_cell<LCC,1>(lcc, dh2); CGAL::remove_cell<LCC,1>(lcc, dh2);
CGAL::remove_cell<LCC,1>(lcc, dh3); CGAL::remove_cell<LCC,1>(lcc, dh3);
if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) ) if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) )
return false; return false;
@ -357,7 +357,7 @@ bool test_LCC_3()
dh2 = lcc.make_triangle(Point(5,4,3),Point(7,4,3),Point(6,3,3)); dh2 = lcc.make_triangle(Point(5,4,3),Point(7,4,3),Point(6,3,3));
lcc.template sew<2>(dh1, dh2); lcc.template sew<2>(dh1, dh2);
dh2 = lcc.make_triangle(Point(5,5,4),Point(7,5,4),Point(6,6,4)); dh3 = lcc.make_triangle(Point(5,5,4),Point(7,5,4),Point(6,6,4));
lcc.template sew<3>(dh1, dh3); lcc.template sew<3>(dh1, dh3);
dh3 = lcc.make_triangle(Point(5,4,4),Point(7,4,4),Point(6,3,4)); dh3 = lcc.make_triangle(Point(5,4,4),Point(7,4,4),Point(6,3,4));
@ -442,7 +442,7 @@ bool test_LCC_3()
if ( !check_number_of_cells_3(lcc, 9, 17, 11, 2, 1) ) if ( !check_number_of_cells_3(lcc, 9, 17, 11, 2, 1) )
return false; return false;
CGAL::contract_cell<LCC,1>(lcc,dh1->beta(1)); CGAL::contract_cell<LCC,1>(lcc,dh1);
if ( !check_number_of_cells_3(lcc, 10, 16, 10, 2, 2 ) ) if ( !check_number_of_cells_3(lcc, 10, 16, 10, 2, 2 ) )
return false; return false;
lcc.clear(); lcc.clear();
@ -614,16 +614,44 @@ bool test_LCC_3()
return false; return false;
dh1 = lcc.make_segment(Point(0,0,0),Point(1,0,0)); dh1 = lcc.make_segment(Point(0,0,0),Point(1,0,0));
lcc.template sew<1>(dh1, dh1); lcc.template sew<1>(dh1, dh1); lcc.template sew<1>(dh1->beta(2), dh1->beta(2));
CGAL::contract_cell<LCC,3>(lcc,dh1); CGAL::contract_cell<LCC,3>(lcc,dh1);
if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) ) if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) )
return false; return false;
lcc.clear(); lcc.clear();
dh1 = lcc.make_segment(Point(0,0,0),Point(1,0,0)); dh1 = lcc.
lcc.template sew<1>(dh1, dh1); lcc.template sew<1>(dh1->beta(2), dh1->beta(2)); make_hexahedron(Point(0,0,0),Point(1,0,0),Point(1,1,0),Point(0,1,0),
CGAL::contract_cell<LCC,3>(lcc,dh1); Point(0,1,1),Point(0,0,1),Point(1,0,1),Point(1,1,1));
if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) ) dh2 = lcc.
make_hexahedron(Point(0,3,0),Point(1,3,0),Point(1,4,0),Point(0,4,0),
Point(0,4,1),Point(0,3,1),Point(1,3,1),Point(1,4,1));
dh2 = lcc.beta(dh2, 2,1,1,2);
lcc.template sew<3>(dh1,dh2);
CGAL::contract_cell<LCC,1>(lcc,lcc.beta(dh2,2,1));
CGAL::contract_cell<LCC,1>(lcc,lcc.beta(dh2,2,0));
CGAL::contract_cell<LCC,1>(lcc,lcc.beta(dh2,1,1,2,0));
CGAL::contract_cell<LCC,1>(lcc,lcc.beta(dh2,1,1,2,1));
if ( !check_number_of_cells_3(lcc, 8, 16, 11, 2, 1) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,0,2));
if ( !check_number_of_cells_3(lcc, 8, 15, 10, 2, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,1,1,2));
if ( !check_number_of_cells_3(lcc, 8, 14, 9, 2, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,1,2));
if ( !check_number_of_cells_3(lcc, 8, 13, 8, 2, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,2));
if ( !check_number_of_cells_3(lcc, 8, 12, 7, 2, 1 ) )
return false;
CGAL::contract_cell<LCC,3>(lcc,dh2);
if ( !check_number_of_cells_3(lcc, 8, 12, 6, 1, 1 ) )
return false; return false;
lcc.clear(); lcc.clear();
@ -649,71 +677,24 @@ bool test_LCC_3()
if ( !check_number_of_cells_3(lcc, 12, 24, 16, 3, 1) ) if ( !check_number_of_cells_3(lcc, 12, 24, 16, 3, 1) )
return false; return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,2,1)); CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,0,2));
if ( !check_number_of_cells_3(lcc, 10, 16, 10, 2, 2 ) ) if ( !check_number_of_cells_3(lcc, 12, 23, 15, 3, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,1,1,2));
if ( !check_number_of_cells_3(lcc, 12, 22, 14, 3, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,1,2));
if ( !check_number_of_cells_3(lcc, 12, 21, 13, 3, 1 ) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,2));
if ( !check_number_of_cells_3(lcc, 12, 20, 12, 3, 1 ) )
return false;
CGAL::contract_cell<LCC,3>(lcc,dh2);
if ( !check_number_of_cells_3(lcc, 12, 20, 11, 2, 1 ) )
return false; return false;
lcc.clear(); lcc.clear();
/*
dh1 = make_triangle(lcc,, , );
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract volume5: " << flush; CGAL::contract_cell<LCC,3>(lcc,dh1);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
lcc.clear();
dh1 = make_triangle(lcc,, , );
dh2 = make_triangle(lcc,, , );
lcc.template sew<2>(dh1, dh2);lcc.template sew<2>(dh1->beta(0), dh2->beta(1));
lcc.template sew<2>(dh1->beta(1), dh2->beta(0));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract volume6: " << flush; CGAL::contract_cell<LCC,3>(lcc,dh1);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
lcc.clear();
dh1 = make_triangle(lcc,, , );
dh2 = make_triangle(lcc,, , );
lcc.template sew<3>(dh1, dh2);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract volume7: " << flush; CGAL::contract_cell<LCC,3>(lcc,dh1);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
lcc.clear();
dh1 = make_combinatorial_tetrahedron(lcc,, , ,
);
dh2 = make_combinatorial_tetrahedron(lcc,, , ,
);
lcc.template sew<3>(dh1, dh2);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract edge8: " << flush; CGAL::contract_cell<LCC,1>(lcc,dh1->beta(1,2,1));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract facet8: " << flush; CGAL::contract_cell<LCC,2>(lcc,dh1->beta(2));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract facet8: " << flush; CGAL::contract_cell<LCC,2>(lcc,dh1->beta(1,2));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract volume8: " << flush; CGAL::contract_cell<LCC,3>(lcc,dh1);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
lcc.clear();
dh1 = make_combinatorial_tetrahedron(lcc,, , ,
);
dh2 = make_combinatorial_tetrahedron(lcc,, , ,
);
dh3 = make_combinatorial_tetrahedron(lcc,, , ,
);
lcc.template sew<3>(dh1, dh2); lcc.template sew<3>(dh1->beta(2), dh3);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract edge9: " << flush; CGAL::contract_cell<LCC,1>(lcc,dh1->beta(1,2,1));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract facet9: " << flush; CGAL::contract_cell<LCC,2>(lcc,dh1->beta(2));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract facet9: " << flush; CGAL::contract_cell<LCC,2>(lcc,dh1->beta(1,2));
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
cout << "contract volume8: " << flush; CGAL::contract_cell<LCC,3>(lcc,dh1);
lcc.display_characteristics(cout) << ", valid=" << lcc.is_valid() << endl;
lcc.clear();
*/
// Construction from Polyhedron_3 // Construction from Polyhedron_3
{ {
CGAL::Polyhedron_3<typename LCC::Traits> P; CGAL::Polyhedron_3<typename LCC::Traits> P;
@ -748,7 +729,7 @@ bool test_LCC_3()
return false; return false;
lcc.clear(); lcc.clear();
} }
return true; return true;
} }