UF_BREP_topology_s (view source)
 
Defined in: uf_brep_types.h
 
Also known as:
 
Overview
Describes an item of topology. A tree of topology items (connected via the
children pointers) describes a body or face. If the tree's root item is a body
the type is one of UF_BREP_SOLID_TOPO, UF_BREP_SHEET_TOPO, or
UF_BREP_TRIMSURF_TOPO. If the body topology element is not present, the first
one must be UF_BREP_FACE_TOPO and there can only be one. It is assumed to be a
UF_BREP_TRIMSURF_TOPO. The face may be part of a body topology.

If there is more than one shell, the outer shell must be the first in the body's
child list. Only vertices cannot have children. Faces are the children of
shells, loops are the children of faces, edges are the children of loops, and
vertices are the children of edges. If fins are present, the fins are children
of the loops and edges are children of the fins. Edges may be absent only in a
trimmed surface topology. Vertices may be children of edges or loops but not of
fins. A loop may have fins or edges as children, or only one vertex. Such a
vertex is is used to represent a loop at a singularity, like the tip of a cone.

The sense of geometry with respect to its topology (faces, fins, edges) is
specified when it is attached, using the sense argument to the attach function.

The order of children also matters for loops and edges. Edges are oriented in
the order given by their child vertices. The edges or fins of a loop must be
listed in order, and the curves must match end to start after accommodating the
fin or edge orientation (the end vertex of one curve must be the same as the
start vertex of the next curve). All loops in a solid or sheet body are ordered
such that the material in the face (the surface of the body) is on the left
when walking the loop with one's head outside the body. Thus, an outer loop
(peripheral border of a face) is counterclockwise when looking from the outside
into the body. Hole loops are clockwise. Sometimes a loop cannot be classified;
it is the left-hand material rule that applies.

The orientation member of the child structure is used for the children of loops
and the children of fins. (All other uses should set the value to
UF_BREP_ORIENTATION_NONE.) Fins are considered always to be positively oriented
with respect to their loop; thus the orientation of the edge is what is
specified, either where the fin is the child of the loop, where the edge is the
child of the loop, or where the edge is the child of the fin. It indicates if
the edge is traced from its first vertex to its second (forward) or from its
second vertex to its first reverse) for the loop in which the edge is used. An
edge must be used in two loops, unless it is a border edge of a sheet body. If
the orientation of an edge is specified (i.e., not NONE) both in its fin and in
its loop, the two values must agree.

On input, fins may be specified. SP curves may be attached directly.

The tag and extension members must be set to NULL_TAG and NULL, respectively.
Use the UF_BREP_INITIALIZE_TOPOLOGY macro.

You can access an identifier for all topology entities using
UF_BREP_ask_identifier. Vertices, fins, and shells do not have NX tags, but do
have identifiers, which are unique within the body.

A fin is where a face joins an edge. The geometry for a fin is the SP curve
that shapes the surface to match the 3D edge. On output from NX, not all edges
in a solid model have fin curves; only tolerant edges do. Other edges do not
have any fin curves and only have a 3D edge curve.

On input to NX, SP curves and 3D curves may be specified for the same edge. All
the information available is used to construct the final edge, which conforms
to the above description of tolerant and non-tolerant edges.

NOTE: SP curves may not be used for creating an edge in V15.0. They may be
specified but are ignored.

Use the macro UF_BREP_INITIALIZE_TOPOLOGY to set all the input fields:

UF_BREP_INITIALIZE_TOPOLOGY(topology, children, nchildren, type).


Data Members

type
UF_BREP_topo_type_t
See UF_BREP_topo_type_s, e.g.,
solid, sheet, trimmed surface, shell,
face, loop, fin, edge, and vertex.

tag
tag_t
NX tag, except for shells, fins,
and vertices, in which case `tag'
is NULL_TAG. If you need unique
identifiers for all topologies in
a body, use the value from
UF_BREP_ask_identifier.

num_children
int
Number of child indices in the
children array. This can be zero
if the parent topology structure
is a vertex.

children
UF_BREP_oriented_child_t *
An array of oriented child
structures designating the
children of this topology item.
This may be NULL if the parent
topology structure is a vertex.
For example loops are children of
a face, vertices are children of
an edge. The outer shell, if any,
must be the first child. Fins,
if any, are always children of
loops while the corresponding
edges are children of the fins.
Only trimmed surfaces may omit
edge topologies. A loop may have
as children: one or more fins,
one or more edges, or even one
vertex (e.g., tip of cone).
Children order matters for fins
and edges, e.g., child vertex
order orients edges. A loop's
edges (fins) must be in order,
i.e., the end of one edge (fin)
must be the start of the next
edge (fin). All loops (except
those in trimmed surfaces) have a
left hand rule orientation, i.e.,
the face material is on the left
while traveling the loop with `up'
pointing in the face normal
direction, which for bodies points
away from the inside. Unless on
the border of a sheet body, an
edge must appear in two loops
with an opposite orientation in
each loop.

u
UF_BREP_t


extension
void *
Opaque pointer reserved for
UF_BREP module internal data.
Do not modify (except indirectly
via UF_BREP_INITIALIZE_TOPOLOGY).