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);
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;
}
return res;
@ -979,28 +979,26 @@ namespace CGAL {
if ( dg1!=NULL )
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.
for ( it=to_erase.begin(); it!=to_erase.end(); ++it )
{
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));
modified_darts.push_back((*it)->beta(0));
if ( (*it)->beta(1)!=*it )
{
/* 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
{
// TODO todegroup.push(Dart_pair((*it)->beta(0), *it));
(*it)->beta(0)->unlink_beta(1);
modified_darts.push_back((*it)->beta(0));
(*it)->beta(0)->unlink_beta(1);
}
}
else
@ -1008,8 +1006,8 @@ namespace CGAL {
if ( !(*it)->is_free(1) )
{
// TODO todegroup.push(Dart_pair((*it)->beta(1), *it));
(*it)->beta(1)->unlink_beta(0);
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
// void 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> >::
run(&amap,
&modified_darts, -1); //mark_modified_darts);

View File

@ -82,7 +82,7 @@ typename LCC::Dart_handle make_face_two_edges(LCC& lcc,
{
typename LCC::Dart_handle dh1 = lcc.create_dart(p1);
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;
}
@ -357,7 +357,7 @@ bool test_LCC_3()
dh2 = lcc.make_triangle(Point(5,4,3),Point(7,4,3),Point(6,3,3));
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);
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) )
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 ) )
return false;
lcc.clear();
@ -614,16 +614,44 @@ bool test_LCC_3()
return false;
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);
if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) )
return false;
lcc.clear();
dh1 = lcc.make_segment(Point(0,0,0),Point(1,0,0));
lcc.template sew<1>(dh1, dh1); lcc.template sew<1>(dh1->beta(2), dh1->beta(2));
CGAL::contract_cell<LCC,3>(lcc,dh1);
if ( !check_number_of_cells_3(lcc, 0, 0, 0, 0, 0) )
dh1 = lcc.
make_hexahedron(Point(0,0,0),Point(1,0,0),Point(1,1,0),Point(0,1,0),
Point(0,1,1),Point(0,0,1),Point(1,0,1),Point(1,1,1));
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;
lcc.clear();
@ -649,71 +677,24 @@ bool test_LCC_3()
if ( !check_number_of_cells_3(lcc, 12, 24, 16, 3, 1) )
return false;
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,2,1));
if ( !check_number_of_cells_3(lcc, 10, 16, 10, 2, 2 ) )
CGAL::contract_cell<LCC,2>(lcc,lcc.beta(dh2,0,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;
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
{
CGAL::Polyhedron_3<typename LCC::Traits> P;