MIXED-INTEGER QUADRANGULATIONS - SUPPLEMENTARY MATERIAL
-------------------------------------------------------
Authors : David Bommes, Henrik Zimmer, Leif Kobbelt
WWW     : http://www.rwth-graphics.de

CONTENTS OF ZIP-FILE
--------------------
This zip-package contains the following model directories

./beetle/
./fandisk/
./fertility/
./rockerarm/

each containing 

* a triangle mesh in .OFF format of the model
* the cross field, singularities and the used input directions (in .NDF format, see below)
* the resulting quad mesh(es) in .OFF format (sometimes both in a coarse and a finer resolution).

Furthermore a directory named "fandisks_robust" exists. In this directory the
triangle meshes and the cross fields of the three fandisks shown in Figure 8 can be found.

The naming convention of the data is here shown, using the beetle model as an example:
./beetle/                           // subdirectory of beetle model
./beetle/beetle_quad.off            // coarse quad mesh
./beetle/beetle_tri.off             // triangle mesh
./beetle/beetle_tri.off.ndf         // cross field, singularities, directional constraints

Some of the triangle meshes supplied here have been remeshed.
The original Fandisk, Fertility and Rockerarm models can be found in the AIM@SHAPE Shape Repository, 
http://shapes.aim-at-shape.net .

THE .NDF FORMAT FOR CROSS FIELDS
--------------------------------
The cross fields are stored in a simple ini-file format. 
It can be very easily parsed using e.g. QSettings from Nokias Qt-framework. 

A .ndf file usually contains 6 sections:
[Comments]
Here e.g. user comments/rating and the date can be stored.

[Information]
Here general information about the mesh, e.g. #edges can be stored.

[Pjumps]
Refers to the integer jumps along an edge, see Equation (1) Section 4.1.
The "values" string contains the integer jumps for all the edges in the mesh
delimited by semi-colons and ordered in the same ordering as the edges.
That is, the first integer corresponds to the first edge of the mesh and so on.

[Theta]
Refers to the angle \theta of a face, see Section 4.1. The reference edge for the angle(s) is the
first half-edge of the respective face.
The angles in the "values" string are delimited by semi-colons, and ordered wrt the faces of the
mesh. Hence, the first value corresponds to the angle in the first face of the mesh and so on.

[Constraints]
Contains two strings, "indices" and "values". The index referes to a face in the mesh and the
corresponding value is the angle of the (constraint) input direction in this face.
E.g. the 5th index is 234 and the 5th value is 3.14, this means that the 234th face of the mesh has
a directional constraint and its angle is Pi (180°) (measured from the reference edge of the face)

[Singularities]
Similar to the section above, here the "indices" string refers to vertex indices of the mesh and
"singularities" holds the index of the (singularitiy at the) respective vertex.

Note: Our implementation uses www.openmesh.org as mesh datastructure.
For reference half-edge of each face, we use the start half-edge of the FaceHalfedgeIter (fh_iter).
For orientation between two faces we use the half-edges of the common edge,
for example: face0 = face_handle( halfedge_handle( common_edge, 0))
             face1 = face_handle( halfedge_handle( common_edge, 1))
