 /**
 * @page ToolsIvFix ivFix tool
 *
 * @B ivFix @b restructures an Open Inventor scene graph for improved rendering performance.
 *
 * @H3 SYNOPSIS: @h3
 *    @B ivFix [-afhmnptv][-d dir] [infile] [outfile] @b
 *
 * @H3 DESCRIPTION: @h3
 * @B ivFix @b reads binary or ascii Inventor input from a file or stdin,
 * restructures the scene graph and writes it out to a file or standard
 * output. By default the output file is a binary file.
 *
 * @H3 WHAT IT DOES @h3
 * ivFix processes a scene graph in two phases. The first phase figures
 * out how the scene graph is organized, and tries to sort it a better
 * way to take advantage of coherence. For example, it tries to organize
 * subgraphs by common textures, since switching textures is expensive.
 * Once sorted, it also tries to combine subgraphs so that the final
 * result has fewer nodes.
 *
 * The second phase consists of "flattening" the subgraphs that result
 * from the first phase. This tessellates all shapes into little triangles
 * that are then organized into triangle strips.
 *
 * 
 * @H2 Phase 1 @h2
 * @TABLE_0B
 * @TR Collecting @TD All shapes in the scene are found and stored with their properties in specialized Shape data structures.
 * @TR Sorting    @TD The Shape data structures are sorted based on differences in properties, ranked by frequency of change and cost.
 * @TR Merging    @TD Some shapes can be merged into the same group if certain conditions hold.
 * @TR Building   @TD A scene graph is constructed from the sorted, merged list of Shape data structures. Phase 2 is then applied to the leaf groups of this graph.
 * @TABLE_END
 *
 * @H2 Phase 2 @h2
 * @TABLE_0B
 * @TR Flattening @TD This applies a callback action to tessellate all shapes into little triangles.
 * @TR Condensing @TD This removes duplicate coordinates created in the flattening process.
 * @TR Stripping  @TD This produces triangle strips from the individual triangles.
 * @TR Matching   @TD This tries to match up and align the coordinate, normal, and texture coordinate index arrays.
 * @TABLE_END
 *
 * Under the following circumstances, several shapes can be combined into a single indexed triangle strip:
 * @UL
 * @LI The input shapes are indexed shapes (e.g., SoIndexedFaceSet). @li
 * @LI They have the same material properties. @li
 * @LI The material binding is PER_VERTEX_INDEXED. @li
 * @ul
 *
 * Otherwise, the shapes will be output as individual indexed triangle strip sets or individual indexed face sets.
 *
 * @H3 WHAT IT DOES NOT @h3
 * ivfix does not try to preserve any non-appearance attributes, such as names. It will also remove most engines, animation nodes, and field-to-field connections. ivfix is best run on individual objects, not on entire scenes. When rendered, the output object will be equivalent to the original file, but much of the scene graph hierarchy will be lost.
 * Note also that the output file may be larger than the input file. For example, a sphere node will be converted into triangle strips.
 *
 *
 * @H3 TIP: @h3
 * Sometimes processing a file through ivfix twice can produce very good results. The first time through, the objects are organized into indexed shapes. The second time through, depending on the material and material binding of the shapes, the indexed shapes may be collected into larger indexed triangle strip sets.
 *
 * @H3 USAGE: @h3
 * The following command line options are allowed:
 *
 * @TABLE_1B
 * @TR -a       @TD Write an ASCII file. The output file is binary by default.
 * @TR -d dir   @TD Add dir to the list of directories to search, e.g. for file nodes.
 * @TR -f       @TD	Produce independent faces rather than triangle strips.
 * @TR -h     	@TD	Print the usage message.
 * @TR -m 	    @TD	Do not try to match up index arrays. By default, ivfix will attempt to generate arrays of normals, vertices, and texture coordinates suitable for the OpenGL VertexArray primitive. This optimization was added by Mercury Computer Systems.
 * @TR -n 	    @TD	Do not generate any normals.
 * @TR -p 	    @TD	Do not produce SoVertexProperty nodes for properties.
 * @TR -t 	    @TD	Do not generate any texture coordinates.
 * @TR -v 	    @TD	(Verbose) Display status information during processing.
 * @TABLE_END
 *
 * @H3 EXAMPLES @h3
 *
 * @code
 *   ivFix slowObject.iv quickObject.iv
 * @endcode
 *
 *
 * @FILE_LIST
 * @UL
 * @LI tools/source/ivFix/ivFix.cxx       @li
 * @LI tools/source/ivFix/getopt/getopt.c @li
 * @LI tools/source/ivFix/getopt/getopt.h @li
 * @ul
 *
 */
