<!-- ##### SECTION Title ##### -->
surfaces

<!-- ##### SECTION Short_Description ##### -->
Supports loading of .surf files and drawing of surfaces through OpenGL

<!-- ##### SECTION Long_Description ##### -->
<para>
Originally written by Luc Billard for his Visualize program. This
module allows loading of .surf files to draw scalar fields on top of
the current display scene. .surf files are text files which specs are
the following :
<itemizedlist>
<listitem><para>
1st line is arbitrary
</para></listitem>
<listitem><para>
2nd line must contain 3 real (float) values: dxx dyx dyy
</para></listitem>
<listitem><para>
3rd line must contain 3 real (float) values: dzx dzy dzz
</para></listitem>
<listitem><para>
4th line must contain 3 positive integers which
represents respectively the number of surfaces, the total number of
polys, and the total number of points
</para></listitem>
<listitem><para>
Then, for each of these surfaces :      
    
<itemizedlist> 
<listitem><para>
next line must contain the name of the surface : it is a
string which should match the pattern surface_*
</para></listitem>
<listitem><para>
next line must contain 2 positive integer values: the number of polys
(num_polys) and
the number of points (num_points) used by the surface
</para></listitem>
<listitem><para>
each of the following num_polys lines must match the pattern 
[n i_1 i_2 i_3 ... i_n] where n is the number of vertices in the poly (n >= 3)
and [i_1 i_2 i_3 ... i_n] are the numbering of these vertices (vertices numbered from 1 to num_points)
</para></listitem>
<listitem><para>
each of the following num_points lines must contain 6 real values for the 
successive (1 to num_points) points : [x y z nx ny nz], where x y z are the coordinates of the point
and nx ny nz are the coordinates of the unit normal at the point
</para></listitem>
</itemizedlist>

</para></listitem>
</itemizedlist>

It is the responsibility of the user to guarantee that
dxx, dyx, dyy, dzx, dzy, dzz match the one currently loaded in V_Sim's
current context. Though if you use <link
linkend="v-sim-panelSurfaces">panelSurfaces</link> you can ask
to resize the surfaces so that they fit in the current loaded box.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### MACRO ISOSURFACES_PROPERTY_POTENTIAL ##### -->
<para>

</para>



<!-- ##### STRUCT SurfaceResource_struct ##### -->
<para>

</para>

@surfnom: 
@color: 
@material: 
@rendered: 

<!-- ##### TYPEDEF SurfaceResource ##### -->
<para>

</para>


<!-- ##### STRUCT SurfacesOrder_struct ##### -->
<para>

</para>


<!-- ##### TYPEDEF SurfacesOrder ##### -->
<para>

</para>


<!-- ##### STRUCT Surfaces_struct ##### -->
<para>

</para>

@nsurf: 
@num_polys: 
@num_points: 
@poly_surf_index: 
@poly_num_vertices: 
@poly_vertices: 
@poly_points: 
@poly_normals: 
@local_box: 
@resources: 
@ids: 
@properties: 

<!-- ##### TYPEDEF Surfaces ##### -->
<para>

</para>


<!-- ##### FUNCTION isosurfacesNew ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION isosurfacesAllocate ##### -->
<para>

</para>

@surf: 
@nsurf: 
@npolys: 
@npoints: 


<!-- ##### FUNCTION isosurfacesReallocate ##### -->
<para>

</para>

@surf: 
@nsurf: 
@npolys: 
@npoints: 


<!-- ##### FUNCTION isosurfacesFree ##### -->
<para>

</para>

@surf: 


<!-- ##### FUNCTION isosurfacesRemove ##### -->
<para>

</para>

@surf: 
@idSurf: 
@Returns: 


<!-- ##### FUNCTION isosurfacesLoad_file ##### -->
<para>

</para>

@file: 
@surf: 
@error: 
@Returns: 


<!-- ##### FUNCTION isosurfacesDraw_surfaces ##### -->
<para>

</para>

@openGLId: 
@view: 
@surf: 
@order: 


<!-- ##### FUNCTION isosurfacesCopy_resource ##### -->
<para>

</para>

@res: 
@res_old: 


<!-- ##### FUNCTION isoSurfacesSet_fitToBox ##### -->
<para>

</para>

@data: 
@surf: 


<!-- ##### FUNCTION isosurfacesSet_showAll ##### -->
<para>

</para>

@surf: 
@show: 


<!-- ##### FUNCTION isosurfacesSet_surfaceResource ##### -->
<para>

</para>

@surf: 
@surf_index: 
@res: 


<!-- ##### FUNCTION isosurfacesGet_nbSurfaces ##### -->
<para>

</para>

@surf: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfaceId ##### -->
<para>

</para>

@surf: 
@i: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfacePosition ##### -->
<para>

</para>

@surf: 
@id: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfaceRendered ##### -->
<para>

</para>

@surf: 
@surf_index: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfaceResource ##### -->
<para>

</para>

@surf: 
@surf_index: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfaceName ##### -->
<para>

</para>

@surf: 
@surf_index: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_surfaceSortedById ##### -->
<para>

</para>

@surf: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_resourceFromName ##### -->
<para>

</para>

@surf_name: 
@new: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_newId ##### -->
<para>

</para>

@surf: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_floatProperty ##### -->
<para>

</para>

@surf: 
@name: 
@Returns: 


<!-- ##### FUNCTION isosurfacesAdd_floatProperty ##### -->
<para>

</para>

@surf: 
@name: 
@Returns: 


<!-- ##### FUNCTION isosurfacesGet_floatPropertyValue ##### -->
<para>

</para>

@surf: 
@idSurf: 
@name: 
@value: 
@Returns: 


<!-- ##### FUNCTION isosurfacesOrder_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION isosurfacesOrder_free ##### -->
<para>

</para>

@order: 


<!-- ##### FUNCTION isosurfacesOrder_polygons ##### -->
<para>

</para>

@order: 
@surf: 


<!-- ##### FUNCTION isosurfacesInit ##### -->
<para>

</para>



<!-- ##### FUNCTION isosurfacesCheck_consistency ##### -->
<para>

</para>

@surf: 


