Skip to content
Open
Show file tree
Hide file tree
Changes from 105 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
697e1bb
test
Apr 30, 2025
03ea8ce
deleted test
Apr 30, 2025
4b99485
feat: std::optional<Anchor> instead of using a boolean
Apr 30, 2025
73aece8
remmoved use of stdd:optional
Jun 5, 2025
52bcd3a
fix: removed precondition has_anchor() in to_stream method
Jun 5, 2025
1a1bf4c
feat: lift function to compute lift from a given anchor
Jun 10, 2025
ebe6a3e
add
Jun 10, 2025
e331f86
added demos
Jun 11, 2025
da4489a
fix: bug in flip
Jun 11, 2025
7a2fcae
renaming
Jun 17, 2025
4375791
use BFS algo in set_anchors()
Jun 17, 2025
581ab30
renamed some variables in epsilon net demo
Jun 17, 2025
85b4869
feat: locate method with boolean to choose between visibility and str…
Jun 18, 2025
a76531d
misc code cleaning
Jun 18, 2025
f5f8c41
feat: locate now returns an Anchor only, the count is passed as a ref…
Jun 18, 2025
76e73c2
syntaxe locate
Jun 24, 2025
4a1dafd
renamed insert methods
Jun 26, 2025
ad8e802
changed arguments order in straight walk algorithm to be more clear
Jun 30, 2025
dba70f5
changed arguments order in visibility walk algorithm to be more clear
Jun 30, 2025
606c126
changed some return types
Jul 1, 2025
33caeb2
test large with exact circumcenter instead of approx
Jul 2, 2025
d1b7399
fix: figures were upside down
Jul 3, 2025
6e77280
dirichlet domains
Jul 3, 2025
ff976e1
feat: dirichlet domains
Jul 3, 2025
05ccbeb
Merge branch 'Triangulation_on_hyperbolic_surface_2-Delaunay_triangul…
Jul 3, 2025
1c8fbaf
details
Jul 4, 2025
59023d7
tests modifs push_triangle
Jul 7, 2025
10d6b2b
feat: shortest_edge
Jul 8, 2025
52d7a54
added assertion to check that the approx circum is in the POincaré disk
Jul 10, 2025
c2ca187
cleaned includes in demo
Jul 10, 2025
22202b1
fix: is_epsilon_... functions are now const
Sep 5, 2025
4e43c37
insertion functions now return vector of Anchor* instead of Anchor
Sep 11, 2025
3ff72be
used shered_ptr instead of * for memory safety
Sep 11, 2025
ac21cd7
used vectors of darts instead of pointers
Sep 12, 2025
1da7024
début méthode de Héron
Sep 29, 2025
0c0d6c6
supprimé commentaires
Sep 30, 2025
22ae940
feat: use of gmpfr to refine precision of approx for circumcenters
Oct 10, 2025
6e06870
cleaned code
Oct 10, 2025
3489230
make_Delaunay is private
Oct 10, 2025
76b9156
hyperbolic_orientation_2 moved to Hyperbolic traits class
Oct 23, 2025
378799b
fixed forgotten type declaration
Oct 23, 2025
92d2e33
updated Dirichlet demo
Oct 29, 2025
cc9fa6b
use Triangulation instead of Delaunay_triangulation in Hyperbolic_Dir…
Oct 30, 2025
d4c0c44
fix: actually have to use Delaunay_triangulation
Oct 30, 2025
2366124
compute_dirichlet_vertices -> Dirichlet_vertices
Oct 30, 2025
09d6329
Merge branch 'CGAL:main' into Triangulation_on_hyperbolic_surface_2-D…
camille-lanuel Oct 30, 2025
999be75
flip is now private
Oct 30, 2025
280cce1
moved some stuff in private
Oct 30, 2025
f333261
init doc
Oct 30, 2025
70949bc
doc
Nov 3, 2025
600dd18
cleaned code
Nov 6, 2025
9913849
removed code for periodic drawing
Nov 6, 2025
92024de
assertions
Nov 6, 2025
21666c5
fin doc classe Delaunay
Nov 12, 2025
08ba1b2
added Delaunay triangulation example
Nov 17, 2025
c72b88d
moved operators >> and << to IO file
Nov 17, 2025
57db66f
doc operators << and >>
Nov 17, 2025
2882fde
precondition -> assertion where needed
Nov 17, 2025
9485489
préconditions
Nov 17, 2025
0efb9a2
add Hyperbolic Dirichlet domain
Nov 18, 2025
baf82ed
def group
Nov 18, 2025
d7a7bd5
removed operator=
Nov 18, 2025
fd1857e
epsilon_net: handles bad approximated circumcenters
Nov 19, 2025
d427341
update lift method
Nov 19, 2025
534ac83
removed useless comment
Nov 19, 2025
70766f2
fixed call to chc
Nov 19, 2025
0189186
used CGAL::Gmpq to for consitency with other demos
Nov 19, 2025
57fee73
added hyperbolic Dirichlet domain demao
Nov 19, 2025
19c4f7f
cleaned demo
Nov 19, 2025
746e367
cleaned
Nov 19, 2025
279350a
added Delaunay triangulation demo
Nov 19, 2025
548b659
updated package description
Nov 19, 2025
83df694
intro user manual
Nov 19, 2025
9bd6fa6
doc DS for Delaunay triangulations
Nov 20, 2025
b657e6a
minor modifs
Nov 20, 2025
d14f80e
added red for new things in the doc
Nov 20, 2025
5d12293
added red for new things in the doc
Nov 20, 2025
c9f6e37
début epsilon_nets
Nov 20, 2025
3354de2
update demo
Nov 21, 2025
9d6ec59
added epsilon_net demo fig
Nov 21, 2025
a9cf4b3
citation
Nov 21, 2025
8a4f320
add Hyperbolic_orientation_2
Nov 21, 2025
17afeff
removed useless URL
Nov 21, 2025
7c833b4
update user manual
Nov 24, 2025
6410dd7
ignore prec when not gmpq
Nov 24, 2025
47c7547
update doc
Nov 25, 2025
de28e77
misc cleaning
Nov 25, 2025
ed270f9
test epsilon_net
Nov 25, 2025
155930a
tests for new class
Nov 25, 2025
7e3ec7e
fix: changed name of second delta fonction
Nov 27, 2025
eded205
uses Hyperbolic_Delaunay_triangulation_traits_2 instead of CK_traits
Nov 27, 2025
5ac28bb
feat: displays text for how to use the demo when no args are given
Nov 27, 2025
b360494
fix: shortest_loop returns 0 when there is no loop
Nov 27, 2025
f77260f
add fig Dirichlet
Nov 27, 2025
769939d
typo
Nov 27, 2025
38ca529
commentaire
Nov 27, 2025
cadeb15
removed demos that i don't want to keep here
Nov 28, 2025
d5403e0
added shortest_loop and shortest_non_loop_edge in test
Nov 28, 2025
9b0fabe
removed old demos from CMakeList
Nov 28, 2025
5af26fd
added include directive of the package license header
Nov 28, 2025
f635b4d
converted indentation to spaces
Nov 28, 2025
86e483f
update package info
Nov 28, 2025
2eaa19a
update copyright IO functions
Nov 28, 2025
f78984b
delete trailing white space
Nov 28, 2025
d72629d
fixed bad name
Nov 28, 2025
23c0c26
should be the same -> is the same
Nov 28, 2025
7c1a23a
added FT typedef
Nov 28, 2025
ba621ce
update dependencies
Nov 28, 2025
c857a5c
fixed epsilon in HTML
Nov 28, 2025
e44cf33
typo
Nov 28, 2025
215d30b
used @param
Nov 28, 2025
bf2e6c7
added Kernel_23 in dependencies
Nov 28, 2025
4b626a3
fix shortest_non_loop_edge
Nov 29, 2025
21b63cf
renamed shortest_loop_edge
pougetma Dec 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions Documentation/doc/biblio/cgal_manual.bib
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,23 @@ @article{cgal:dljjaw-sisp-15
publisher={ACM New York, NY, USA}
}

@InProceedings{cgal:dlpt-naihs-25,
author = {Despr\'{e}, Vincent and Lanuel, Camille and Pouget, Marc and Teillaud, Monique},
title = {{\epsilon-Net Algorithm Implementation on Hyperbolic Surfaces}},
booktitle = {33rd Annual European Symposium on Algorithms (ESA 2025)},
pages = {61:1--61:18},
series = {Leibniz International Proceedings in Informatics (LIPIcs)},
ISBN = {978-3-95977-395-9},
ISSN = {1868-8969},
year = {2025},
volume = {351},
editor = {Benoit, Anne and Kaplan, Haim and Wild, Sebastian and Herman, Grzegorz},
publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
address = {Dagstuhl, Germany},
doi = {10.4230/LIPIcs.ESA.2025.61},
annote = {Keywords: Hyperbolic surface, Delaunay triangulation, Data structure, Combinatorial map, Implementation, CGAL}
}

@article{cgal:dfg-cvtaa-99t,
title={{Centroidal Voronoi Tessellations: Applications and Algorithms}},
author={Du, Q. and Faber, V. and Gunzburger, M.},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class HyperbolicDelaunayTriangulationTraits_2 {
A predicate object. Must provide the function operator

`Oriented_side operator()(Hyperbolic_point_2 p, Hyperbolic_point_2 q, Hyperbolic_point_2 query),`
which returns the position of the point `query` relative to the oriented hyperbolic
which returns the position of the point `query` relative to the circle supporting the hyperbolic
segment with vertices `p` and `q`.
*/
typedef unspecified_type Side_of_oriented_hyperbolic_segment_2;
Expand All @@ -105,6 +105,17 @@ class HyperbolicDelaunayTriangulationTraits_2 {
*/
typedef unspecified_type Is_Delaunay_hyperbolic;

/*!
A predicate object. Must provide the function operator

`Orientation operator()(Hyperbolic_point_2 p, Hyperbolic_point_2 q, Hyperbolic_point_2 query),`

which returns the position of the point `query` relative to the oriented hyperbolic
segment with vertices `p` and `q`.

*/
typedef unspecified_type Hyperbolic_orientation_2;

/// @}

/// \name Construction Types
Expand Down Expand Up @@ -167,6 +178,7 @@ class HyperbolicDelaunayTriangulationTraits_2 {
Side_of_oriented_circle_2 side_of_oriented_circle_2_object();
Side_of_oriented_hyperbolic_segment_2 side_of_oriented_hyperbolic_segment_2_object();
Is_Delaunay_hyperbolic is_Delaunay_hyperbolic_object();
Hyperbolic_orientation_2 hyperbolic_orientation_2();
/// @}

/// \name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ namespace internal {
const Hyperbolic_point_2& q,
const Hyperbolic_point_2& r) const
{

Construct_circle_or_line_supporting_bisector<Traits> cclsb(_gt);

Hyperbolic_point_2 po(CGAL::ORIGIN);
Expand All @@ -76,6 +75,7 @@ namespace internal {
typedef typename CK2_Intersection_traits<Traits, Circle_2, Circle_2>::type Intersection_result;
std::vector< Intersection_result > inters;
intersection(*c_pq, *c_qr, std::back_inserter(inters));
CGAL_assertion(inters.size() != 0);

CGAL_assertion_code(bool ok=)
assign(pair, inters[0]);
Expand Down Expand Up @@ -107,6 +107,7 @@ namespace internal {
typedef typename CK2_Intersection_traits<Traits, Euclidean_line_2, Circle_2>::type Intersection_result;
std::vector< Intersection_result > inters;
intersection(*l, *c, std::back_inserter(inters));
CGAL_assertion(inters.size() != 0);

CGAL_assertion_code(bool ok=)
assign(pair,inters[0]);
Expand Down Expand Up @@ -366,6 +367,7 @@ class Hyperbolic_Delaunay_triangulation_CK_traits_2
typedef typename internal::Construct_circle_or_line_supporting_bisector<Self> Construct_circle_or_line_supporting_bisector;
typedef internal::Construct_hyperbolic_segment_2<Self> Construct_hyperbolic_segment_2;
typedef typename Base::Construct_segment_2 Construct_segment_2;
typedef typename internal::Hyperbolic_orientation_2<Self> Hyperbolic_orientation_2;

public:
Hyperbolic_Delaunay_triangulation_CK_traits_2(const Base& kernel = Base()) : Base(kernel) {}
Expand Down Expand Up @@ -411,6 +413,10 @@ class Hyperbolic_Delaunay_triangulation_CK_traits_2
compute_squared_Euclidean_distance_2_object() const
{ return this->Base::compute_squared_distance_2_object(); }

Hyperbolic_orientation_2
hyperbolic_orientation_2() const
{ return Hyperbolic_orientation_2(*this); }

};

// Take out the code below to some separate file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@ class Hyperbolic_Delaunay_triangulation_traits_2
typedef internal::Construct_hyperbolic_bisector_2<Self> Construct_hyperbolic_bisector_2;
typedef internal::Is_Delaunay_hyperbolic<Self> Is_Delaunay_hyperbolic;
typedef internal::Side_of_oriented_hyperbolic_segment_2<Self> Side_of_oriented_hyperbolic_segment_2;
typedef typename internal::Hyperbolic_orientation_2<Self> Hyperbolic_orientation_2;

// Needed for P4HT2
typedef typename Kernel::Construct_bisector_2 Construct_Euclidean_bisector_2;
Expand Down Expand Up @@ -549,6 +550,10 @@ class Hyperbolic_Delaunay_triangulation_traits_2
compute_squared_Euclidean_distance_2_object() const
{ return this->Base::compute_squared_distance_2_object(); }

Hyperbolic_orientation_2
hyperbolic_orientation_2() const
{ return Hyperbolic_orientation_2(*this); }

}; // class Hyperbolic_Delaunay_triangulation_traits_2

} // namespace CGAL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,45 @@ class Side_of_oriented_hyperbolic_segment_2
const Traits& _gt;
};

template <typename Traits>
class Hyperbolic_orientation_2
{
typedef typename Traits::FT FT;
typedef typename Traits::Hyperbolic_point_2 Hyperbolic_point_2;
typedef typename Traits::Side_of_oriented_hyperbolic_segment_2 Side_of_oriented_hyperbolic_segment_2;

public:
Hyperbolic_orientation_2(const Traits& gt = Traits()) : _gt(gt) {}

Orientation operator()(const Hyperbolic_point_2& p,
const Hyperbolic_point_2& q,
const Hyperbolic_point_2& query) const
{
Hyperbolic_point_2 origin = Hyperbolic_point_2(FT(0), FT(0));
Orientation orientation_to_origin = orientation(p, origin, q);
if (orientation_to_origin == COLLINEAR) {
return orientation(p, q, query);
}

Side_of_oriented_hyperbolic_segment_2 orientation_test = _gt.side_of_oriented_hyperbolic_segment_2_object();
Oriented_side orientation_to_disk = orientation_test(p, q, query);
if (orientation_to_disk == ON_POSITIVE_SIDE) {
return orientation_to_origin;
} else if (orientation_to_disk == ON_NEGATIVE_SIDE) {
if (orientation_to_origin == LEFT_TURN) {
return RIGHT_TURN;
} else {
return LEFT_TURN;
}
} else {
return COLLINEAR;
}
}

private:
const Traits& _gt;
};

} // end namespace internal

} // end namespace CGAL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,32 @@ set(CMAKE_AUTOMOC ON)
# CGAL and its components
find_package(CGAL REQUIRED COMPONENTS Core Qt6)
find_package(Qt6 QUIET COMPONENTS Widgets)
find_package(Qt6 QUIET COMPONENTS Svg)

if (NOT CGAL_Qt6_FOUND OR NOT Qt6_FOUND)
message(STATUS "This project requires the Qt6 library, and will not be compiled.")
return()
endif()

# Boost and its components
find_package( Boost REQUIRED )

if ( NOT Boost_FOUND )
message(STATUS "This project requires the Boost library, and will not be compiled.")
return()
endif()

# ui files, created with Qt Designer
qt6_wrap_ui(UIS drawing_window_description.ui)

add_executable( Triangulation_on_hyperbolic_surface_2_demo Triangulation_on_hyperbolic_surface_2_demo.cpp window.cpp ${UIS})
target_link_libraries(Triangulation_on_hyperbolic_surface_2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets )
target_link_libraries(Triangulation_on_hyperbolic_surface_2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets Qt6::Svg)
cgal_add_compilation_test(Triangulation_on_hyperbolic_surface_2_demo)

add_executable( Delaunay_triangulation_on_hyperbolic_surface_2_demo Delaunay_triangulation_on_hyperbolic_surface_2_demo.cpp window.cpp ${UIS})
target_link_libraries(Delaunay_triangulation_on_hyperbolic_surface_2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets Qt6::Svg)

add_executable( Hyperbolic_Dirichlet_domain_2_demo Hyperbolic_Dirichlet_domain_2_demo.cpp window.cpp ${UIS})
target_link_libraries(Hyperbolic_Dirichlet_domain_2_demo PRIVATE CGAL::CGAL CGAL::CGAL_Qt6 Qt6::Widgets Qt6::Svg)

set(CMAKE_BUILD_TYPE "Release")
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#include "window.h"

#include <CGAL/Gmpq.h>
#include <CGAL/Circular_kernel_2.h>
#include <CGAL/Algebraic_kernel_for_circles_2_2.h>
#include <CGAL/Hyperbolic_Delaunay_triangulation_CK_traits_2.h>
#include <CGAL/Hyperbolic_surface_traits_2.h>
#include <CGAL/Hyperbolic_fundamental_domain_factory_2.h>
#include <CGAL/Delaunay_triangulation_on_hyperbolic_surface_2.h>

#include <CGAL/Timer.h>

using namespace CGAL;

typedef Gmpq NumberType;
typedef Circular_kernel_2<Simple_cartesian<NumberType>,Algebraic_kernel_for_circles_2_2<NumberType>> Kernel;
typedef Hyperbolic_Delaunay_triangulation_CK_traits_2<Kernel> ParentTraits;
typedef Hyperbolic_surface_traits_2<ParentTraits> Traits;

typedef Hyperbolic_fundamental_domain_2<Traits> Domain;
typedef Hyperbolic_isometry_2<Traits> Isometry;
typedef Hyperbolic_fundamental_domain_factory_2<Traits> Factory;
typedef Delaunay_triangulation_on_hyperbolic_surface_2<Traits> Delaunay_triangulation;

/*
HOW TO USE THIS DEMO
./Delaunay_triangulation_on_hyperbolic_surface_2_demo [epsilon] [surface seed] [precision]
Without arguments, uses the default values defined below.
*/

// DEFAULT VALUES
double epsilon = 0.25;
int seed = time(NULL);
int p = 1;

int main(int argc, char *argv[])
{
if(argc == 1) {
std::cout << "HOW TO USE THIS DEMO:\n"
<< "./Delaunay_triangulation_on_hyperbolic_surface_2_demo [epsilon] [surface seed] [precision]\n"
<< "Without arguments, uses default values: epsilon = 0.25, random seed, precision = 1.\n"
<< "WARNING: when not using the CGAL::Gmpq number type, precision is ignored and, instead, to_double is used to round coordinates of circumcenters.\n"
<< "--------------------"
<< std::endl;
}
// 1. Parse args and generate the input
if (argc > 1) {
epsilon = std::stod(argv[1]);
}

Domain domain;
if (argc <= 2) {
std::cout << "Using random seed " << seed << std::endl;
} else {
seed = atoi(argv[2]);
}
Factory factory;
std::cout << "Generating surface with seed " << seed << "..." << std::endl;
domain = factory.make_hyperbolic_fundamental_domain_g2(seed);
Delaunay_triangulation dt = Delaunay_triangulation(domain);

if (argc > 3) {
p = atoi(argv[3]);
}

// 2. Get a vertex
// So that if you run the demo on a same surface but with different values of epsilon,
// the drawing will be centered at the same vertex and it will look similar.
Point v0 = dt.anchor().vertices[0];

// 3. Compute epsilon-net and display useful info
if constexpr(!std::is_same<NumberType, Gmpq>::value) {
std::cout << "WARNING: Not using the CGAL::Gmpq number type. Precision will be ignored and to_double approximation will be used instead." << std::endl;
}
std::cout << "Computing a " << epsilon << "-net with floating-point precision " << p*53 << "..." << std::endl;
Timer timer;
timer.start();
std::cout << "Is epsilon-net? " << dt.epsilon_net(epsilon, p) << std::endl;
timer.stop();
std::cout << "Done in " << timer.time() << " seconds." << std::endl;
dt.combinatorial_map().display_characteristics(std::cout) << std::endl;

// 4. SET THE FIRST ANCHOR OF THE DRAWING
Anchor anchor = dt.locate(v0);
int index = 0;
for (int i = 0; i < 3; i++) {
if (v0 == anchor.vertices[i]) {
index = i;
}
}

Anchor start = Anchor();
start.dart = anchor.dart;
for (int i = 0; i < 3; i++) {
start.vertices[i] = anchor.vertices[(i + index) % 3];
if (i < index) {
start.dart = dt.Base::ccw(start.dart);
}
}

// 5. DRAW
QApplication app(argc, argv);
app.setApplicationName("Delaunay triangulation on hyperbolic surface 2 Demo");
DemoWindow window;
window.item().draw_triangulation(dt, start);
window.show();
QStringList args = app.arguments();
args.removeAt(0);
return app.exec();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include "window.h"

#include <CGAL/Simple_cartesian.h>
#include <CGAL/Circular_kernel_2.h>
#include <CGAL/Algebraic_kernel_for_circles_2_2.h>
#include <CGAL/Hyperbolic_Delaunay_triangulation_CK_traits_2.h>
#include <CGAL/Hyperbolic_surface_traits_2.h>

#include <CGAL/Hyperbolic_Dirichlet_domain_2.h>
#include <CGAL/Hyperbolic_fundamental_domain_factory_2.h>

typedef CGAL::Gmpq NumberType;
typedef CGAL::Circular_kernel_2<CGAL::Simple_cartesian<NumberType>,CGAL::Algebraic_kernel_for_circles_2_2<NumberType>> Kernel;
typedef CGAL::Hyperbolic_Delaunay_triangulation_CK_traits_2<Kernel> ParentTraits;
typedef CGAL::Hyperbolic_surface_traits_2<ParentTraits> Traits;

typedef CGAL::Hyperbolic_fundamental_domain_2<Traits> Domain;
typedef CGAL::Hyperbolic_fundamental_domain_factory_2<Traits> Factory;

int main(int argc, char **argv)
{
int seed = time(NULL);
std::cout << "Using seed " << seed << std::endl;
Factory factory;
Domain domain = factory.make_hyperbolic_fundamental_domain_g2(seed);

QApplication app(argc, argv);
app.setApplicationName("Hyperbolic Dirichlet domain 2 Demo");
DemoWindow window;
window.item().draw_Dirichlet(domain);
window.show();
QStringList args = app.arguments();
args.removeAt(0);
return app.exec();
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
#include "window.h"

#include <CGAL/Exact_rational.h>
#include <CGAL/Gmpq.h>
#include <CGAL/Simple_cartesian.h>

#include <CGAL/Hyperbolic_Delaunay_triangulation_traits_2.h>
#include <CGAL/Hyperbolic_Delaunay_triangulation_CK_traits_2.h>
#include <CGAL/Hyperbolic_surface_traits_2.h>
#include <CGAL/Hyperbolic_fundamental_domain_factory_2.h>
#include <CGAL/Triangulation_on_hyperbolic_surface_2.h>

using namespace CGAL;

typedef Simple_cartesian<Exact_rational> Kernel;
typedef Hyperbolic_Delaunay_triangulation_traits_2<Kernel> ParentTraits;
typedef Gmpq NumberType;
typedef Circular_kernel_2<Simple_cartesian<NumberType>, Algebraic_kernel_for_circles_2_2<NumberType>> Kernel;
typedef Hyperbolic_Delaunay_triangulation_CK_traits_2<Kernel> ParentTraits;

// typedef Simple_cartesian<NumberType> Kernel;
// typedef Hyperbolic_Delaunay_triangulation_traits_2<Kernel> ParentTraits;
typedef Hyperbolic_surface_traits_2<ParentTraits> Traits;
typedef Hyperbolic_fundamental_domain_2<Traits> Domain;
typedef Hyperbolic_fundamental_domain_factory_2<Traits> Factory;
Expand All @@ -31,7 +36,7 @@ int main(int argc, char** argv)

// 2. Draw the triangulation
QApplication app(argc, argv);
app.setApplicationName("Hyperbolic surfaces triangulation 2 Demo");
app.setApplicationName("Triangulation on hyperbolic surface 2 Demo");

DemoWindow window;
window.item().draw_triangulation(triangulation);
Expand Down
Loading
Loading