• Aucun résultat trouvé

Fenêtres dédiées aux imports

Dans le document The DART-Europe E-theses Portal (Page 173-200)

La fenêtre dédiée aux imports permet, quant à elle, de faire le lien entre le logiciel et les données dont dispose l’utilisateur. C’est ici qu’il pourra y renseigner les informations nécessaires à la simulation dont la liste est équivalente à celle présentée dans les choix de visualisation dans le panneau qui s’y rapporte, c’est-à-dire :

— les bâtiments,

— les routes,

— la végétation (arbres et/ou surfaces herbacées),

— les zones d’eau (lacs, rivières,...),

— la topographie.

Pour chacune des données, les fichiers sont vérifiés pour la conversion future en 3D. En effet, chaque donnée SIG est attendue avec un certain type d’objet géométrique : les bâtiments, la végétation et les surfaces d’eau sont attendus avec des éléments de type polygone alors que les routes doivent être en ligne. La topographie doit être en format raster.

Figure 109 – Capture de la fenêtre d’import des fichiers sources

Annexe B

Notice d’utilisation

Proposer un logiciel OpenSource implique alors de s’intéresser à la façon de diffuser les informations nécessaires à son utilisation (via une interface intuitive, cf. annexe A) et également à son adaptabilité et sa lisibilité (avec la création d’une notice). Cette notice doit à la fois répertorier les différentes classes générées, mais également leurs relations entre elles, comme par exemple l’hérédité. De plus cette notice doit directement s’intégrer au code développé pour pouvoir être modifiée rapidement (voire automatiquement) selon les changements réalisés lors du développement. Au cours de cette étude nous avons choisi d’utiliser la documentation Doxygen. Cette documentation en version html se trouve en ligne à l’url suivante :

http://juliorichard.free.fr/TrafficCity3D/index.html Elle est également consultable en scannant ce QR code :

B.1 Doxygen

Le logiciel Doxygen est un outil développé principalement par M. Dimitri van Heesch et proposé sous licence libre. Il est capable de générer une documentation logicielle en s’intégrant directement au code source du programme développé en prenant en compte un certain nombre d’éléments comme par exemple certains commentaires ou encore la grammaire générale du langage de programmation utilisé. De plus il est possible d’utiliser un certain nombre de tags supplémentaires pour renseigner diverses informations complémentaires comme par exemple :

— struct pour documenter une structure en C,

— fn pour documenter une fonction,

— parampour référencer les paramètres d’une fonction,

— returnpour mettre en avant l’argument en sortie d’une fonction,

— warning pour créer une alerte,...

Cette documentation, via cet outil, peut être faite à partir d’un grand nombre de langages très divers et en particulier le C++. De plus elle peut être proposée sous divers formats, permettant alors une meilleure diffusion de l’information, ce qui est un avantage lors du développement d’un logiciel OpenSource comme le nôtre. On peut noter par exemple une diffusion HTML, LaTeX ou encore PDF pour ne citer que les plus utilisés.

B.2 Quelques exemples

Afin de simplifier la lecture de ce rapport, il ne sera présenté, dans les paragraphes suivants, qu’un certain nombre de cas d’intérêt notés dans cette notice : la description d’une classe et un graphe d’appel. Cependant l’intégralité de la documentation, représentant plusieurs centaines de pages, est accessible dans le tome 2 de ce présent manuscrit (tome intitulé ”Manuel Utilisateur”).

Figure 110 – Page d’accueil de la notice HTML

Exemples de descriptions de classes

Pour chacune des classes et fonctions réalisées, il a été nécessaire d’y intégrer un ensemble de descriptions directement intégrables à la notice Doxygen. Ci-après sont présentées quelques unes de ces descriptions (Figure 111).

Exemples de graphes d’appels

De plus, il existe un certains nombre de modules qui font appel à d’autres classes pour pouvoir fonctionner. Ce sont ces relations qui sont mises en avant par la réalisation de graphes d’appels. L’outil de documentation utilisé permet de générer automatiquement ces graphes d’appels à partir de ces dépendances et certains de ces schémas sont présentés dans la figure 112.

Les graphes ont plusieurs fonctionnalités dans cette documentation :

— Créer une représentation des relations directes et indirectes entre les classes,

— Montre les relations d’interdépendance des classes et structures (ex : un membre de classe A est du type classe B ),

— Créer les diagrammes représentant la hiérarchie des classes,

— Créer les graphes de dépendances des fonctions,

— Créer les graphes des fonctions dont dépendent directement et indirectement les fonctions documentées,

— Créer les graphes d’appel direct et indirect des fonctions

— Créer les graphes des fonctions appelées directement et indirectement par les fonctions documentées.

(a)

(b)

(c)

Figure 111 – Exemples de documentation sur les descriptions de classes réalisées au cours de cette étude

Figure 112 – Exemples de documentation sur les graphes d’appels de classes programmées au cours de ces travaux

Annexes Algorithmes

Annexe C

Algorithme G3D

Figure 113 – Algorithme de Bouillé permettant de rechercher les points environnants la position à interpoler

Annexe D

Algorithme INTERXY

.

Figure 114 – Transcription en ADL du code source de Laporte en Fortran CDC (de l’IFP)

Annexe E

Algorithme Création de triangles

Figure 115 – Algorithme pour créer les triangles de route à partir d’un segment créé par Julien Richard

Annexe F

Algorithme Topologie

Figure 116 – Algorithme appliquant une topologie sur un réseau de tronçon créé par Julien Richard

Annexe G

Algorithme AppartenanceTriangle

Figure 117 – Algorithme pour connaître l’appartenance d’un point P à un triangle ABC

Annexe H

Algorithme Intersection

FINDING INTERSECTION (M

Ë

AT, D

Ë

X, D

Ë

Y, X

Ë

0, Y

Ë

0, NC

Ë

OL, NR

Ë

OW, TX

Ë

YZ, NT

Ë

XYZ,

Â

We calculate the line equation of the diagonal to know if the 2 points are in the same triangle

Ã

a_diag

Ä

NEW_TXYZ NEW_NTXYZ,3

Ä

Z2 ;

NEW_NTXYZ

Ä

NEW_NTXYZ +1 ;

©

2

¡ Â

the second point is in the second triangle, we have to know the coordinate of the intersection point between the diagonal and the line

Ã

X_INTER

Ä

to know the coordinate of the intersection point between the diagonal and the line

Ã

X_INTER

Ä

NEW_TXYZ NEW_NTXYZ,2

Ä

Y_INTER ; NEW_TXYZ NEW_NTXYZ,3

Ä

Z ;

NEW_NTXYZ

Ä

NEW_NTXYZ +1;

Â

we add the last point in the table

Ã

NEW_TXYZ NEW_NTXYZ,1

Ä

X2;

NEW_TXYZ NEW_NTXYZ,2

Ä

Y2 ; NEW_TXYZ NEW_NTXYZ,3

Ä

Z2 ;

NEW_NTXYZ

Ä

NEW_NTXYZ +1

©

2

¢ ¢ ¡ Â

the 2 points are not in the same cell

à Â

we test the position of the 1rst point from the diagonal (upper or lower)

Ã

a_diag

Ä

the position of the 2nd point from the diagonal (upper or lower)

Ã

Y2 < a_diag * (X0 + DX * J) + b_diag

Ù Â

the 2nd point is lower than the diagonal

Ã

Â

Calculation of the intersection

Ã

X_INTER

Ä

Â

if this intersection is well in the I J cell, it is our intersection!

Ã

I_TEST

Ä

Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Y2_CELL

Ä

Y0 + DY*J ;

Â

Calculation of the intersection

Ã

X_INTER

Ä

Â

We can interpolate the z value and add this new point to the table

Ã

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Â

Calculation of the intersection

Ã

X_INTER

Ä

I_TEST

Ä

Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Â

Calculation of the intersection

Ã

X_INTER

Ä Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Y2_CELL

Ä

Y0 + DY*J + DY ;

Â

Calculation of the intersection

Ã

X_INTER

Ä

Â

if this intersection is well in the I J cell, it is our intersection!

Ã

I_TEST

Ä

Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Â

Calculation of the intersection

Ã

X_INTER

Ä

a1

Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Â

We add this new point to the table

Ã

Â

Calculation of the intersection

Ã

X_INTER

Ä

a1

Â

We can interpolate the z value and add this new point to the table

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

Â

Calculation of the intersection

Ã

X_INTER

Ä

Â

We can interpolate the z value and add this new point to the table

Ã

G3D(M

Ë

AT, D

Ë

X, D

Ë

Y, NC

Ë

OL, NR

Ë

OW, X

Ë

0, Y

Ë

0,

Ë

X_INTER,

Ë

Y_INTER,

É

Z) ;

NEW_TXYZ NEW_NTXYZ,1

Ä

X_INTER ; NEW_TXYZ NEW_NTXYZ,2

Ä

Y_INTER ; NEW_TXYZ NEW_NTXYZ,3

Ä

Z ;

NEW_NTXYZ

Ä

NEW_NTXYZ +1 ;

NEXT_I

Ä

I – 1 ; NEXT_J

Ä

J NEXT_X1

Ä

X_INTER ; NEXT_Y1

Ä

Y_INTER;

¢

¢ Â

end of the test to know the position of the second point

Ã

¢ Â

end of the test to know the position of the first point

Ã

¢ Â

end of the test to know if the 2 points are in the same cell

à Î

k

/ NEXT_I = I_END ³ NEXT_J = J_END

Î

i

/ i<NTXYZ

Ð

Skeleton:

Ï Í Í Ù¡¢ÙÙ©

2

¡©

2

¢Ù©

2

¡©

2

¢¡ÙÙÙ¡¢¡Ù¡¢¢¡ÙÙ¡¢¡Ù¡¢¢¢¢ ÎÎ Ð

Tome 2 :

Traffic city3D créé par Julien Richard

v1.0

Manuel utilisateur

Un CD contenant une présentation vidéo est disponible avec ce manuel

Dans le document The DART-Europe E-theses Portal (Page 173-200)