$Id: TODO,v 1.109 2005/11/27 23:09:49 geuzaine Exp $

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

- Fix nodes of surface elements in Tetgen (easy)
- Extend Tetgen to multiple-volume geometries (hard)
- Tetgen+partitions -> crash in BDS transfer

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

Would be nice to have a routine to save a post-processing view as a
mesh file (in MSH format)

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

Add a way to select multiple entities using a lasso + add a way to
remove entities from a selection by clicking on them

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

On Windows without Cygwin:
- rewrite solver interface (GmshServer and GmshClient)
- Functions in parser don't seem to work
- fix compilation issues in triangle (timezone) and gl2ps (zlib??)
- need alternative timer functions (Timer.cpp, ParUtils.cpp)
- there is a bug in fwrite/fread as used for binary post-processing
  views (need to investigate "premature end of file" message)

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

allow mixed 1st/2nd order meshes (2nd order only where the geometry
requires it). Add this as an advanced option since it will create
meshes with hanging nodes.

From: Julian Swartz <swartzjp@gmail.com>
> I think that the feature may also fit under:
> 
> menu: Tool -> Options
> select "Mesh"
> tab "General"
> then perhaps under "Generate second order elements" there could be an 
> additional check box for "Generate second order elements only along 
> curved boundaries".
>

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

automatic exterior orientation of boundary surfaces (would greatly
enhance Netgen/Frontal integration). One way is to compute the solid
angle using the discretized surface. Another (probably more efficient
way) is to select one element per surface loop, shoot a ray in both
normal directions, and count the intersections with all other elements
in the same surface: if we get 0 or an even number, the normal points
outside. If we get an even number, it points inside.

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

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...)

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

color selected surface/line/point on the fly (instead of just showing
the entity number)

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

Would be nice to have Plugin(CutBox) and Plugin(CutCylinder) (Box:
using Xc, Yc, Zc, Xl, Yl, Zl, Xr, Yr, Zr, or 4 points. 4 points is
more general: can be wedge. Cylinder should be able to degenerate
into cone)

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

fill TrsfPoint list in surfaces in 3D_Extrude, so that we can use 
extruded+recombined surfaces to create Transfinite Volumes

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

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

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

read inria's mesh and solution file formats? ALMOST DONE with new BDS
code.

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

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)

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

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 or a niver
background. Oddly enough, people seem to want that kind of stuff.

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

Would be nice to have gradients (cf. visit) in the background?
--Just save as PNG with a "strong" background colorand use e.g.
Gimp to replace the bg with whatever gradient you like. You can
even do it in batch with a gimp script.

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

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

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

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

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

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?

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

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). PARTIALLY DONE by Nicolas. Needs testing + regenerate
surface mesh.

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

Include the 2D Netgen algorithms?

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

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.
