Aucune modif cette fois-ci.

Voici déjà 1 mois jour pour jour que j'ai écrit cette
page. J'étais sur le point de commiter ma version quand on m'a appris
que mon mois d'octobre risquait de ne pas être payé. Glups ! Maintenant,
la situation est presque réglée mais je préfère
ne pas encore commiter mes développements d'octobre (j'attends d'avoir
reçu l'équivalent de mon salaire).
Bref, je commite aujourd'hui tout sauf les Nurbs que je garde précieusement
chez moi (c'est à la mode à l'heure actuelle). Les Nurbs sont
sous forme de librairie et il fallait de toutes façons trouver un moyen
de compiler sans.
Nouveautés :
- Uniformisation des iostream : J'ai introduit 4 fichiers (oo_iostream.h,
oo_fstream.h, oo_iomanip.h
et oo_strstream.h) qui doivent
être utilisés à la place des fichiers d'entête standard
C++. Cela permet d'uniformiser le code et cela m'a permis de tester
les iostream de la STL (sans succès).
- Un petit bonus pour les developpeurs Metafor : Il suffit maintenant
de définir :
- _WITHOUT_OO_ELEMS_ : pour compiler sans
les éléments oofelie (tous ceux de "basic_cl/oo_fe/elements").
- _WITHOUT_META_OLD_ELEMS_ : pour
compiler sans les anciens éléments metafor (non optimisés).
- _WITHOUT_META_ELEMS_ : pour compiler sans
les éléments Metafor optimisés (templates).
Ca marche bien et on gagne un temps fou à la compilation ! Youpi !
- Ecriture d'un Sloan par noeuds : j'ai écrit une nouvelle méthode
d'optimisation de largeur de bande (SLOAN_BY_NODE)
qui permet de gagner un facteur 4.5 sur le test du S-Rail ! L'ancienne méthode
SLOAN optimisait la largeur de bande en essayant
de regrouper les éléments et cela conduisait à une plus
grande largeur de bande.
- Convection 2D pour l'ALE : En gros, la suite de l'ALE (et pas encore
la fin). Le schéma de Godunov a été introduit et testé
avec succès. J'ai modifié un peu le DrawableElemset
pour afficher le maillage en "position remaillée". Certaines couleurs
ont aussi changé.
- Bug fixation/interaction sur face : il est corrigé. Il n'était
pas possible de fixer correctement une face (certains noeuds n'étaient
pas fixés). Il n'est toujours pas possible de faire du contact avec
une face possédant un seul élément (et donc pas de noeud
interne).
- Projection sur surface - test d'appartenance : Ludo a modifié
dans ma version le test d'appartenance qui est pas vraiment adapté
lorsque la surface est fort courbe. Il faudrait, pour bien faire, étendre
l'algorithme actuel (test de triangles) au cas de surfaces totalement aléatoires.
- Nettoyage de VizWin : J'ai nettoyé les classes du répertoire
"viz". Toutes les classes ont été splittées
et les destructeurs ont été écrits (ils ne sont pas encore
appelés). J'ai ré-écrit la visualisation des objets géométriques
(labels, tubes, sphères pour les points, ...). C'est pas terminé
mais il y a un net progrès.
- Utilisation des headers précompilés : la compilation
des classes "Drawable"
est très longue. J'ai tiré parti des fichiers d'entête
précompilés du Visual pour gagner du temps sur la compilation.
Ca marche bien. Demandez-moi mon projet (3 sec par fichiers au lieu de 30
sec).
Dans ma version personnelle :
- Introduction des Nurbs : Après avoir recherché
longement la meilleure lib disponible sur le web pour gérer des
nurbs, je me suis décide pour Nurbs++
qui à l'air d'être utilisée par plusieurs gros projets
GNU (notamment MindsEye,
un modeleur 3D). La lib n'a pas l'air d'être entretenue (depuis
1999) mais elle est assez complète. De plus, elle compile sur un
grand nombre de plateformes.
Pour ceux qui voudraient de la doc sur les nurbs : lien1,
lien2.
D'autres libs existent :
- GUL : Geometry Utility
Library : Super bien codé mais pas de doc, même dans
le source.
- DT_NURBS
: Une lib qui ne peut être utilisée gratuitement et commercialement.
- Manchester
Nurbs Library : Une lib écrite en C qui est une référence
mais j'ai pas réussi àla compiler sous Visual.
Bref, c'etait Nurbs++ ou rien de simple.
Concrètement: 4 nouvelles classes: NurbsCurve
et NurbsSurface pour les
Nurbs générales et BezierCurve
et BezierSurface pour la
particularisation aux Béziers.
Les nouveaux objets géométriques peuvent être visualisés
sous VizWin (autrement dit, j'ai fait des DrawableNurbsCurve,
etc.).
Il est possible de créer des sphères et des tores automatiquement
via l'interpreteur (1 seule ligne de commande).
J'ai dû bidouiller la lib pour qu'on puisse la linker avec oofelie
sous Visual. Le problème venait des iostream STL utilisées
par la lib de manière assez maladroite (un include suivit d'une
using-directive dans les fichiers d'entête). Maintenant, la lib
modifiée utilise les anciennes iostreams tout comme oofelie.
J'ai dû un peu bidouiller la lib pour qu'elle compile avec "cxx".
Là le probleme venait d'une incompatibile complète entre
les objets créés par défaut par le Makefile de la
lib (utilisant gcc) et les objets créés par cxx. J'étais
assez naïf pour croire que les deux compilateurs (gcc et cxx) produisaient
des objets compatibles. Ce n'est pas le cas. En bref, j'ai dû enlever
toutes les extensions gcc du code source.
- Contact avec Nurbs : Les nouveaux objets Nurbs peuvent être
utilisés comme matrices de contact rigides. Toutes les routines
utilisées par l'élément de contact et les routines
de projection ont été implementées. Ca a été
assez facile vu les nombreuses fonctionnalités de la librairie
Nurbs++. Pour les projections, j'ai décide d'utiliser les routines
génériques de Curve et Surface au lieu de celles de la librairie.