$Id: TODO,v 1.91 2005/03/14 21:19:32 geuzaine Exp $

********************************************************************

add a mode to pick a mesh element with the mouse (a la medit)

********************************************************************

add option to cutmesh to cap the mesh instead of displaying "whole"
elements

********************************************************************

use inria's mesh and solution file formats?

********************************************************************

add general extrusion along parametric curve

********************************************************************

add option to draw "filled isos" using 1D textures?

********************************************************************

add GUI for 

- translate+rotate extrusions
- mesh extrusion (layer stuff)

********************************************************************

add vertex arrays for isolines in post-pro

********************************************************************

Labels:
- add dynamic variables? E.g., if a string contains %string.string,
replace it dynamically in Draw_Text2D/3D by calling
Get_OptionsCategory/Get_OptionValue. (provide a global option to
disable all replacements)
- position with the mouse
- select/move once positioned?
- add ability to add arrows

********************************************************************

Add a "bitmap" object in the views, e.g. to add a logo

********************************************************************

reduce cpu during 'sleep' by using small 'usleep' calls instead of a
simple while(1) loop

********************************************************************

add an option to enable lighting of wireframe plots?

********************************************************************

keep a table (stack) with the N last file positions when add_infile()
is called; we could then easily implement a simple (but real) UNDO
strategy

********************************************************************

add an interactive way to choose the orientation of surfaces in
surface loops and lines in line loops

(To make things simple, all line loops should be oriented "aire a
gauche", and all surface loops whould be oriented with exterior
normals...)

********************************************************************

template the view handling/drawing routines so that we can actually
use post-pro files with float values (50% file savings can be nice
for very large maps; would bring the format up to par with an 
index-based format)

********************************************************************

Test and reintroduce the cylindrical surfaces (cylinder, cone, torus)

********************************************************************

fix the orientation of hexas, prisms and pyramids (reorder nodes
according to Orientation())

********************************************************************

add parameter to transformation operations to copy the meshes

********************************************************************

add transformations on volumes

********************************************************************

add/restore Parametric curve type (use MathEval!)

********************************************************************

add ternary operator and <,>,<=,>=,== tests in MathEval

********************************************************************

on Macs, datasets with a bounding box < 1.e-06 don't display properly
(probably because all the OpenGL stuff is done ineternally in single
precision...). Rescale?

********************************************************************

add the capability to mesh some entities using 1st order and some
other using 2nd order elements (in the same geometry)?
<gerard.fleury@inrs.fr>

********************************************************************

find a better way to display the time/timestep in the scale... (would
be solved if we had dynamic labels)

********************************************************************

make Recombine work the same as "Second order"? (i.e., allow for
interactive use?)

********************************************************************

The "Symmetry" operation should be renamed "Reflection" (?)

********************************************************************

Attractors in the 2D aniso algo are extremely buggy

********************************************************************

Memory leaks, memory leaks

- in the old 2D code: mesh_domain()...

- check all calls to Tree_Replace: we shouldn't use it with trees of
  pointers, since we loose the original pointer when we actually do a
  'replace'

- check all calls to Tree_Insert, and test the return value (if we
  don't do the insert, free the data!)

********************************************************************

Rewrite the geometry module in C++: we should have

Point.cpp
Curve.cpp
Surface.cpp
Volume.cpp

It's much shorter than one may think. We could just keep a C interface
like in Vertex.cpp and Simplex.cpp.

********************************************************************

Rewrite the View and ColorTable interface in C++

********************************************************************

Include Tetgen (the same way we did it with Triangle--the license is
the same).

********************************************************************

Include the 2D Netgen algorithms and improve the integration of the 3D
algorithm (would be nice to have automatic exterior orientation of
surfaces...)

********************************************************************

All surface meshes are made in a mean plane. If your surface cannot be
projected into a plane with a 1-to-1 correspondance between the nodes,
then gmsh will fail. 

We should definitely use a better projection algorithm
(e.g. intrinstic parameterization). See the work by Desbrun et al. in
CS for this.

********************************************************************

post-processing file format:
- add an integer per simplex (region num)?
- add a format similar to the msh format (node list + simplex list)?
- add a structured format?

...or implement one of the "industry-standard" formats?

********************************************************************

Create "Volume visualization" range type? (interpolate on regular grid
+ create cut planes // to viewpoint with transparency; can be done in
a straightforward way or using 3D textures)

********************************************************************

Yves Krahenbuhl wrote:

> Lors de la creation des elements du 2eme ordre, et selon la courbure
> du contour exterieur, le jacobien de l'element peut devenir negatif.
> Cependant le programme genere le maillage sans protester. Il
> faudrait peut-etre faire apparaitre un message d'erreurs / ou se
> restreindre (automatiquement ou non) a une interpolation lineaire
> entre les points en question.

********************************************************************

Pb avec View->Reload si plusieurs vues dans le meme fichier

> > Hmm, je viens de tester sous Linux et je n'arrive pas a reproduire le
> > bug. A moins que... Aurais-tu toutes tes vues stockees dans le meme
> > fichier ? Car 'reload' relit simplement le fichier duquel provient la
> > vue (et il le relit entierement).
> 
> Tout a fait, toutes les vues sont dans un fichier unique.

C'est de la que vient le probleme. Le 'reload' recharge en fait le
fichier duquel provient la vue, en *forcant* sa position dans la liste
des vues chargees. Si le fichier contient plusieurs vues, il va
recharger la premiere, lui affecter la position de celle que tu veux
recharger, puis la deuxieme, en lui affectant le meme position, et
ainsi de suite. Ca fait donc un supeeer memory leak : tu recharges
bien toutes les vues, mais tu ne sais acceder qu'a la derniere... Pour
corriger ca, il faudrait que l'on garde comme info supplementaire dans
chaque vue quelle etait sa position dans le fichier.
