74
De la g´ eom´ etrie algorithmique au calcul g´ eom´ etrique l’exemple de la triangulation de Delaunay La biblioth` eque CGAL

De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

De la geometrie algorithmique

au calcul geometrique

l’exemple

de la triangulation de Delaunay

La bibliotheque CGAL

Page 2: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

C++

Page 3: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

C++

Syntaxe de base commune avec C et java

Page 4: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Classe

Page 5: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Classe

class A{

private:

int i;

public:

int get();

void set(int);

};

Page 6: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Classe

int A::get(){

return i;

}

void A::set(int n){

i = n;

}

Page 7: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Classe

class A{

private:

int i;

public:

int get() {return i;}

void set(int n) {i=n;}

} ; // fonctions "inline"

Page 8: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Constructeur, affectation, destruction

Page 9: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Constructeur, affectation, destruction

class A {

int i; // private

public:

A(); // default constructor

A( const A& a); // copy constructor

A( int n); // user defined

~A(); // destructor

};

Page 10: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Constructeur, affectation, destruction

int main() {

A a1; // appelle default c.

A a2 = a1; // copy constructor

A a3(a1); // copy constructor

A a4(1); // user constructor

} // destructor: appel a la sortie.

class A {int i; // private

public:A(); // default constructorA( const A& a); // copy constructorA( int n); // user defined~A(); // destructor

};

Page 11: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Heritage

Surcharge

Fonctions membres virtuelles

Membres statiques

Page 12: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Templates

Page 13: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Templates

template <class T>

void swap( T& a, T& b) {

T tmp = a;

a = b;

b = tmp;

}

Page 14: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Templates

template <class T>

void swap( T& a, T& b) {

T tmp = a;

a = b;

b = tmp;

}

int main() {

int i = 5;

int j = 7;

swap( i, j); // utilise "int" pour T.

}

Page 15: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Templates

template <class T>

void swap( T& a, T& b) {

T tmp = a;

a = b;

b = tmp;

}

int main() {

A i (5);

A j ; j.set(7)

swap( i, j); // utilise "A" pour T.

}

Page 16: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Aller dans une classe quand on y est pas !

Page 17: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Aller dans une classe quand on y est pas !

class A {

static int i=0;

};

int main(){

int j = A::i;

}

Page 18: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Namespace

Page 19: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Namespace

int main(){

int i = CGAL::max(3,4);

}

Page 20: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

STL

Page 21: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

STL

Standard Template Library

Page 22: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Bibliotheque

Page 23: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Bibliotheque

Structures de donnees:

list, vector, set, map

Algorithmes:

find, sort

Page 24: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Iterator

Page 25: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Iterator

Parcourir une structure (container)

Page 26: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Iterator

Parcourir une structure (container)

ressemble a un pointeur

operator*()

operator->()

operator++()

operator--()

...

Page 27: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

exemple: liste

Page 28: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

exemple: liste

list<int> L;

L.push_back(0);

L.push_front(1);

L.insert(++L.begin(), 2);

copy(L.begin(), L.end(),

ostream_iterator<int>(cout, " "));

// The values that are printed are 1 2 0

Page 29: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

CGAL, vue d’ensemble

Page 30: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Computational Geometry Algorithms Library

Page 31: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Computational Geometry Algorithms Library

objets elementaires (points, droites. . . )

Kernel

Page 32: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Computational Geometry Algorithms Library

Basic library

objets elementaires (points, droites. . . )

Kernel

Algorithmes et structures de donnees

Page 33: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Computational Geometry Algorithms Library

Basic library

objets elementaires (points, droites. . . )

Kernel

Algorithmes et structures de donnees

Support library

Extension STL (circulator)Types numeriques

Entrees sorties

Page 34: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

CGAL Support library

Page 35: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Type de nombre

Page 36: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Type de nombre

int main(){

int n1=0;

float n2 = 3.1415927;

double n2bis=5/11;

using namespace CGAL;

Quotient<int> n3(5,11);

MP_Float n4=3.1415926535897932384626433832;

Lazy_exact_nt<Quotient<MP_Float> > n5;

// Core, GMP, Leda

}

Page 37: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Handles

Page 38: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Handles

Encapsulation du pointeur.

juste * et ->

Page 39: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Circulator

Page 40: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Circulator

Variation de l’iterator de STL

template <class Circulator, class T>

bool contains( Circulator c,

Circulator d, const T& value) {

if (c != 0) {

do {

if (*c == value)

return true;

} while (++c != d);

}

return false;

}

Page 41: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Generateurs

Page 42: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Generateurs

de points aleatoires sur un cercle, dans un disque, sur

une grille. . .

Page 43: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Divers

Page 44: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Divers

Timers

Structures de donnees (hashmap)

IO Streams

Couleurs

postscript

Qt

Geomview

Page 45: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

CGAL kernel

Page 46: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Kernel

Page 47: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

KernelSimple_cartesian<double>

Page 48: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

KernelSimple_cartesian<double>

Kernel::Point_2

Kernel::Vector_2

Kernel::Direction_2

Kernel::Line_2

Kernel::Ray_2

Kernel::Segment_2

Kernel::Triangle_2

Kernel::Iso_rectangle_2

Kernel::Circle_2

Kernel::Object_2

Objets

Page 49: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

KernelSimple_cartesian<double>

Compare_x_2

Compare_distance_2

Has_on_2

Side_of_oriented_circle_2

Objets

Page 50: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

KernelSimple_cartesian<double>

Compare_x_2

Compare_distance_2

Has_on_2

Side_of_oriented_circle_2

Objets

Constructions

Page 51: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

CGAL Basic library

Page 52: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Basic library

Page 53: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Basic library

Enveloppe convexe

Polygones Polyhedres

Carte planaire, arrangement

Triangulation

Optimisation

Structures de recherche

Page 54: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Traits class

Page 55: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Traits class

Parametrer un algorithme/structure de donnees

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

Page 56: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

// K_ is the new kernel, and K_Base is the old kernel

template < typename K_, typename K_Base >

class MyCartesian_base

: public K_Base::template Base<K_>::Type

{

typedef typename K_Base::template Base<K_>::Type OldK;

public:

typedef K_ Kernel;

typedef MyPointC2 Point_2;

}

template < typename FT_ >

struct MyKernel

: public MyCartesian_base<MyKernel<FT_>, CGAL::Cartesian<FT_> >

{};

typedef MyKernel<double> MK;

typedef CGAL::Filtered_kernel_without_type_equality<MK> K;

typedef CGAL::Delaunay_triangulation_2<K> Delaunay;

Page 57: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Exemple

Page 58: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Exemple/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndefCGAL_USE_QT

#include

<iostream>

intmain(int,

char*){

std::cout

<<

"Sorry,

thisdemo

needs

QT..."

<<

std::endl;

return

0;}

#else

#include

<CGAL/Cartesian.h>

#include

<CGAL/Point_2.h>

#include

<CGAL/Delaunay_triangulation_2.h>

#include

<CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include

<CGAL/IO/Qt_widget.h>

#include

<CGAL/IO/Qt_widget_layer.h>

#include

<qapplication.h>

typedefCGAL::Cartesian<double>

Rep;

typedefCGAL::Point_2<Rep>

Point;

typedefCGAL::Delaunay_triangulation_2<Rep>

Delaunay;

/////////////////////////////////////////////////////////

//

Lesobjetsaffiches

sontdeclares

icien

variable

globales

//

l’affichage

est

faitdans

la

methode

"draw"

ci

dessous

Delaunay

dt;

Point

the_point=Point(-1,-1);

class

My_layer:

public

CGAL::Qt_widget_layer{

voiddraw(){

*widget<<CGAL::RED<<

dt

<<

CGAL::PointSize(6)<<CGAL::BLUE<<the_point

;

}

};

class

My_window

:publicCGAL::Qt_widget

{

public:

My_window(int

x,

int

y)

{

resize(x,y);

attach(&layer);

};

private:

//this

method

is

called

whenthe

user

pressesthemouse

voidmousePressEvent(QMouseEvent

*e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

//

C’EST

ICIQUECASE

PASSE

QUAND

ONCLIQUE!

//

if

(e->button()

==

Qt::LeftButton)

dt.insert(Point(x_real(e->x()),y_real(e->y())));

if

(e->button()

==

Qt::MidButton)

std::cout

<<

Point(x_real(e->x()),y_real(e->y()))

<<

std::endl;

if

(e->button()

==

Qt::RightButton)

the_point

=Point(x_real(e->x()),y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

} My_layer

layer;

};

intmain(

int

argc,

char**argv)

{

QApplication

app(argc,

argv

);

My_window

*W

=new

My_window(400,400);

app.setMainWidget(W);

W->show();

W->set_window(0,

400,0,400);

returnapp.exec();

} #endif

TD2/initial.C

Page 59: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndef CGAL_USE_QT

#include <iostream>

int main(int, char*){

std::cout << "Sorry, needs QT..." << std::endl; return 0;}

#else

#include <CGAL/Cartesian.h>

#include <CGAL/Point_2.h>

#include <CGAL/Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget.h>

#include <CGAL/IO/Qt_widget_layer.h>

#include <qapplication.h>

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

.............................................................

#endif

Page 60: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndef CGAL_USE_QT

#include <iostream>

int main(int, char*){

std::cout << "Sorry, needs QT..." << std::endl; return 0;}

#else

#include <CGAL/Cartesian.h>

#include <CGAL/Point_2.h>

#include <CGAL/Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget.h>

#include <CGAL/IO/Qt_widget_layer.h>

#include <qapplication.h>

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

.............................................................

#endif

Page 61: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndef CGAL_USE_QT

#include <iostream>

int main(int, char*){

std::cout << "Sorry, needs QT..." << std::endl; return 0;}

#else

#include <CGAL/Cartesian.h>

#include <CGAL/Point_2.h>

#include <CGAL/Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget.h>

#include <CGAL/IO/Qt_widget_layer.h>

#include <qapplication.h>

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

.............................................................

#endif

Page 62: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndef CGAL_USE_QT

#include <iostream>

int main(int, char*){

std::cout << "Sorry, needs QT..." << std::endl; return 0;}

#else

#include <CGAL/Cartesian.h>

#include <CGAL/Point_2.h>

#include <CGAL/Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget.h>

#include <CGAL/IO/Qt_widget_layer.h>

#include <qapplication.h>

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

.............................................................

#endif

Page 63: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/demo/Qt_widget/basic/tutorial3/tutorial3.C

#ifndef CGAL_USE_QT

#include <iostream>

int main(int, char*){

std::cout << "Sorry, needs QT..." << std::endl; return 0;}

#else

#include <CGAL/Cartesian.h>

#include <CGAL/Point_2.h>

#include <CGAL/Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget_Delaunay_triangulation_2.h>

#include <CGAL/IO/Qt_widget.h>

#include <CGAL/IO/Qt_widget_layer.h>

#include <qapplication.h>

typedef CGAL::Cartesian<double> Rep;

typedef CGAL::Point_2<Rep> Point;

typedef CGAL::Delaunay_triangulation_2<Rep> Delaunay;

.............................................................

#endif

Page 64: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/////////////////////////////////////////////////////////

.............

int main( int argc, char **argv )

{

QApplication app( argc, argv );

My_window *W = new My_window(400,400);

app.setMainWidget(W);

W->show();

W->set_window(0, 400, 0, 400);

return app.exec();

}

Page 65: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/////////////////////////////////////////////////////////

.............

int main( int argc, char **argv )

{

QApplication app( argc, argv );

My_window *W = new My_window(400,400);

app.setMainWidget(W);

W->show();

W->set_window(0, 400, 0, 400);

return app.exec();

}

Gestion de la fenetre graphique

Page 66: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 67: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 68: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 69: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 70: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 71: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

private:

//this method is called when the user presses the mouse

void mousePressEvent(QMouseEvent *e)

{

Qt_widget::mousePressEvent(e);

/////////////////////////////////////////////////////////////

// C’EST ICI QUE CA SE PASSE QUAND ON CLIQUE !

//

if (e->button() == Qt::LeftButton)

dt.insert(Point(x_real(e->x()), y_real(e->y())));

if (e->button() == Qt::MidButton)

std::cout<<Point(x_real(e->x()),y_real(e->y()))<<std::endl;

if (e->button() == Qt::RightButton)

the_point = Point(x_real(e->x()), y_real(e->y()));

/////////////////////////////////////////////////////////////

redraw();

}

My_layer layer;

};

Page 72: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

/////////////////////////////////////////////////////////

// Les objets affiches sont declares ici en variable globales

// l’affichage est fait dans la methode "draw" ci dessous

Delaunay dt;

Point the_point=Point(-1,-1);

class My_layer : public CGAL::Qt_widget_layer{

void draw(){

*widget << CGAL::RED << dt << CGAL::PointSize(6)

<< CGAL::BLUE << the_point;

}

};

Page 73: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

Demo CGAL

Demo ddd

Demo Doc CGAL

Demo premier TD CGAL

Page 74: De la g´eom´etrie algorithmique au calcul g´eom´etrique l ... fileDe la g´eom´etrie algorithmique au calcul g´eom´etrique l’exemple de la triangulation de Delaunay La biblioth`eque

C’est tout pour aujourd’hui