$Id: TODO,v 1.121 2006/01/27 23:35:35 geuzaine Exp $


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

pfgshield-freebsd@yahoo.com:

On the FreeBSD port, unfortunately, the licensing issues prohibit us from
redistributing gmsh with tetgen and triangle. Of course this is a problem
derived from the license in both utilities and not really gmsh's fault. 
One thing could be done to alleviate the problem though: Adding exceptions to
the GPL for linking with these libraries as explained in the GPL FAQ would
permit people to make distributions of the package and libraries, although
without charging any fee with it.
http://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs

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

bug: triangle orientations with the anisotropic algo can change from
element to element in a single surface? (TO BE CONFIRMED)

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

recompute bbox/axes depending on what is which entities are
visible. (For meshes with no geometry: either store a bbox for each
curve/surface/volume or loop over all elements.)

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

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

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

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

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

Create a plugin that computes the normals of a surface view; could be
used to remove SphericalRaise...

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

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. Maybe would
be good enough to add another mode in the "background gradient" stuff
to display an image in the background

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

Add a way to draw arrows in annotations?

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

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)

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

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 internally 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 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
(intrinstic parameterization?). See e.g. work by Desbrun et al.

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

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.
