文件:linear_cell_complex_3_operations.cpp
事先创建的三个六面体
缝合结果
插入的结果
完整代码
#include <CGAL/Linear_cell_complex_for_combinatorial_map.h>
#include <CGAL/Linear_cell_complex_for_generalized_map.h>
#include <vector>
#ifdef _DEBUG
#include <CGAL/draw_linear_cell_complex.h>
#endif // _DEBUG
typedef CGAL::Linear_cell_complex_for_combinatorial_map<3> LCC_3_cmap;
typedef CGAL::Linear_cell_complex_for_generalized_map<3> LCC_3_gmap;
template<typename LCC,
typename Map = typename LCC::Combinatorial_data_structure>
struct Alpha1
{
static typename LCC::Dart_handle run(LCC&, typename LCC::Dart_handle dh)
{
return dh;
}
};
template<typename LCC>
struct Alpha1<LCC, CGAL::Generalized_map_tag>
{
static typename LCC::Dart_handle run(LCC& lcc, typename LCC::Dart_handle dh)
{
return lcc.template alpha<1>(dh);
}
};
template<typename LCC>
void run_test()
{
typedef typename LCC::Point Point;
typedef typename LCC::Dart_handle Dart_handle;
LCC lcc;
//创建三个六面体
Dart_handle dh1 = lcc.
make_hexahedron(Point(0, 0, 0), Point(1, 0, 0),
Point(1, 2, 0), Point(0, 2, 0),
Point(0, 3, 4), Point(0, 0, 4),
Point(6, 0, 4), Point(6, 3, 4));
Dart_handle dh2 = lcc.
make_hexahedron(Point(0, -5, 0), Point(2, -5, 0),
Point(2, -2, 0), Point(0, -2, 0),
Point(1, -1, 5), Point(1, -2, 5),
Point(5, -2, 5), Point(5, -2, 5));
Dart_handle dh3 = lcc.
make_hexahedron(Point(1, 0, 5), Point(0, 0, 6),
Point(0, 2, 5), Point(1, 2, 6),
Point(1, 3, 8), Point(0, 0, 8),
Point(5, 0, 9), Point(7, 3, 9));
#ifdef _DEBUG
CGAL::draw(lcc);
#endif // _DEBUG
//缝合
lcc.template sew<3>(dh1, lcc.other_orientation
(lcc.template opposite<2>
(lcc.next(lcc.next(lcc.template opposite<2>(dh2))))));
lcc.template sew<3>(lcc.template opposite<2>(lcc.next(dh1)),
lcc.other_orientation(lcc.template opposite<2>(lcc.previous(dh3))));
#ifdef _DEBUG
CGAL::draw(lcc);
#endif // _DEBUG
lcc.insert_cell_1_in_cell_2(lcc.next(dh1),
Alpha1<LCC>::run(lcc, lcc.previous(dh1)));
dh2 = lcc.template opposite<2>(lcc.next(lcc.next
(lcc.template opposite<2>(dh1))));
lcc.insert_cell_1_in_cell_2(dh2, Alpha1<LCC>::run
(lcc, lcc.next(lcc.next(dh2))));
std::vector<Dart_handle> path;
path.push_back(lcc.next(dh1));
path.push_back(lcc.next(lcc.template opposite<2>(lcc.previous(dh1))));
path.push_back(lcc.previous(dh2));
path.push_back(lcc.next(lcc.template opposite<2>(dh2)));
lcc.insert_cell_2_in_cell_3(path.begin(), path.end());
lcc.display_characteristics(std::cout) << ", valid="
<< lcc.is_valid() << std::endl;
#ifdef _DEBUG
CGAL::draw(lcc);
#endif // _DEBUG
}
int main()
{
//组合地图
run_test<LCC_3_cmap>();
//广义地图
//run_test<LCC_3_gmap>();
return EXIT_SUCCESS;
}