mirror of https://github.com/CGAL/cgal
Add a first example in Surface_mesh_topology package.
This commit is contained in:
parent
1e13cc9b9d
commit
fdb34027c4
|
|
@ -0,0 +1,59 @@
|
||||||
|
#include <CGAL/Linear_cell_complex_for_combinatorial_map.h>
|
||||||
|
#include <CGAL/Linear_cell_complex_constructors.h>
|
||||||
|
#include <CGAL/Surface_mesh_curve_topology.h>
|
||||||
|
|
||||||
|
#include <CGAL/Path_generators.h>
|
||||||
|
#include <CGAL/Path_on_surface.h>
|
||||||
|
|
||||||
|
/* If you want to use a viewer, you can use qglviewer. Enable only if CGAL
|
||||||
|
was compile with Qt5. */
|
||||||
|
#include <CGAL/draw_lcc_with_paths.h>
|
||||||
|
|
||||||
|
typedef CGAL::Linear_cell_complex_for_combinatorial_map<2,3> LCC_3_cmap;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
LCC_3_cmap lcc;
|
||||||
|
if (!CGAL::load_off(lcc, "data/double-torus-example.off"))
|
||||||
|
{
|
||||||
|
std::cout<<"ERROR reading file data/double-torus-example.off"<<std::endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGAL::Surface_mesh_curve_topology<LCC_3_cmap> smct(lcc);
|
||||||
|
|
||||||
|
CGAL::Path_on_surface<LCC_3_cmap> p1(lcc); // A first path
|
||||||
|
p1.push_back_by_index(14); // Its starting dart
|
||||||
|
for (int i=0; i<7; ++i)
|
||||||
|
{ p1.extend_positive_turn(2); } // Extend the path
|
||||||
|
|
||||||
|
CGAL::Path_on_surface<LCC_3_cmap> p2(lcc); // A second path
|
||||||
|
std::vector<std::size_t> indices={56,59,303,305,314,335,206,202}; // All the indices of the darts
|
||||||
|
for (int i=0; i<indices.size(); ++i)
|
||||||
|
{ p2.push_back_by_index(indices[i]); }
|
||||||
|
|
||||||
|
CGAL::Path_on_surface<LCC_3_cmap> p3(lcc); // A third path
|
||||||
|
p3.push_back_by_index(470); // Its starting dart
|
||||||
|
for (int i=0; i<15; ++i)
|
||||||
|
{ p3.extend_positive_turn(2); } // Extend the path
|
||||||
|
|
||||||
|
bool res1=smct.is_contractible(p1);
|
||||||
|
std::cout<<"First path p1 "<<(res1?"IS":"IS NOT")<<" contractible."<<std::endl;
|
||||||
|
|
||||||
|
bool res2=smct.are_freely_homotopic(p1, p2);
|
||||||
|
std::cout<<"The two paths p1 and p2 "<<(res2?"ARE":"ARE NOT")<<" homotopic."<<std::endl;
|
||||||
|
|
||||||
|
bool res3=smct.are_freely_homotopic(p1, p3);
|
||||||
|
std::cout<<"The two paths p1 and p3 "<<(res3?"ARE":"ARE NOT")<<" homotopic."<<std::endl;
|
||||||
|
|
||||||
|
#ifdef CGAL_USE_BASIC_VIEWER
|
||||||
|
std::vector<CGAL::Path_on_surface<LCC_3_cmap> > paths;
|
||||||
|
paths.push_back(p1);
|
||||||
|
paths.push_back(p2);
|
||||||
|
paths.push_back(p3);
|
||||||
|
CGAL::draw(lcc, paths); // Enable only if CGAL was compiled with Qt5
|
||||||
|
#endif // CGAL_USE_BASIC_VIEWER
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue