polymerge - merge coincident vertices, collinear edges, coplanar
faces in an OOGL OFF object
polymerge [-v vertex_thresh] [-e
edge_thresh] [-f face_thresh] [-V] [-E]
[-F] [-d] [-b] [inputfile.off]
Polymerge eliminates redundancies from polyhedral objects
in OOGL's OFF format, and writes another OFF object to its standard output.
(Optionally it can produce instead an input file for Brakke's Evolver.)
Specifically, it combines nearly-coincident vertices, nearly-collinear
edges, and nearly-coplanar faces. Vertices which aren't used on any face are
deleted, as are faces with less than three vertices. Thresholds for
approximate equality are adjustable from the command line. Options are:
- -v
vertex_thresh
- Merge vertices when they're closer than vertex_thresh apart; the
default is .00001.
- -V
- Don't attempt to merge vertices.
- -e
edge_thresh
- Merge edges where |sin(vertex_angle)| < edge_thresh; the default
is When edges are merged, the corresponding vertex is removed.
- -E
- Don't attempt to merge edges. (4OFF edges are never merged.)
- -f
face_thresh
- Merge faces sharing an edge where the faces are nearly coplanar: when
|sin(angle_between_face_normal_vectors)| < face_thresh. The
default is .03, or about two degrees. Note that merging can create faces
which are concave polygons.
- -F
- Don't attempt to merge faces. (4OFF faces are never merged.)
- -b
- Produce an output file in .fe format for Brakke's Surface Evolver, instead
of a new OFF file.
- -d
- Include debugging information as comments in the new OFF object. The
comments indicate which vertices and faces in the original object
correspond to which in the new one. Messages include:
- # Vtx nnn->mmm
- Merged vertices nnn and mmm (both indices in the original
object).
- # Merged face nnn into mmm (vertices vvv www)
n1.n2 s
- Faces nnn and mmm in the original object were merged; their
common edge joined original vertices vvv and www. The cosine
of the angle between the face normals was s.
- vertex coordinates
# newvertno [order] # oldvertno
- Each vertex written appears with its new index, its order (number of edges
touching that vertex), and its old index (index of a corresponding vertex
in the original object).
- face description #
oldvertno ...
- For each new face, with N vertices after reduction, the comment
indicates N corresponding vertices in the original object.
Stuart Levy, Geometry Center, University of Minnesota
Coplanar faces are merged even if they were assigned different
colors. Should be able to handle binary OFF objects, but this hasn't been
tested.