NURBS Topology commands

The following commands describe topological parts of NURBS elements.

NURBSVERT

NURBSVERT x, y, z, hard, tolerance

Vertex, a node of a NURBS body. Different from any vertex created by the VERT command, indexed separately from those. Can be used in NURBS bodies only, excluding planar-face bodies.

x, y, z: coordinates of vertex
hard:
1: if the vertex should define a break when rendering smooth surfaces,
0: otherwise.
tolerance: maximum geometric distance between NURBS vertex and other entities (NURBS edge, NURBS face) which are topologically connected to it. If negative, tolerance will be some predefined default.

NURBSEDGE

NURBSEDGE vert1, vert2, curve, curveDomainBeg, curveDomainEnd, status, tolerance

Edge of a NURBS body. Different from any edge created by the EDGE command, indexed separately from those. Can be used in NURBS bodies only, excluding planar-face bodies.

vert1, vert2: gdl-index of begin and end NURBS vertices
  • vert1 and vert2 can be equal. In this case the edge is a loop edge (and its curve is closed or has a closed part)
  • vert1 and vert2 can be zero for a ring edge (which has no vertices and its curve is closed or has a closed part)
curve: gdl-index of NURBS curve for the geometry of edge. Positive index, orientation of edge always coincide with orientation of the curve.
curveDomainBeg, curveDomainEnd: definition of the part of curve which geometrically represents the edge. The curveDomainEnd
must be greater than curveDomainBeg, they must not coincide, and both value must be in the usable domain of the curve.
status: status control of the edge:
status = j1 + 2*j2 + 4*j3, where each j can be 0 or 1.
j1: invisible edge (may be set only if j2 is not set).
j2: edge only visible if contour (may be set only if j1 is not set).
j3: smooth edge (edge does not define a break when rendering smooth surfaces).

If both j1 and j2 are set, the edge will produce an error causing the whole NURBS-body to vanish.

tolerance: maximum geometric distance between NURBS edge and other entities (NURBS face) which are topologically connected to it. If negative, tolerance will be some predefined default.

 

The curve evaluated at each endpoint should coincide with the position of the appropriate vertex. The edge can be a ring edge with no vertex. In this case the edge restricted to [curveDomainBeg, curveDomainEnd] must be closed, i.e. it evaluates equally at each endpoints. Any number of edges can be attached to a vertex. The color of a NURBS edge is defined by the last PEN statement.

NURBSTRIM

NURBSTRIM edge, curve, curveDomainBeg, curveDomainEnd, tolerance

NURBSTRIMSINGULAR

NURBSTRIMSINGULAR vertex, curve, curveDomainBeg, curveDomainEnd, tolerance

A bounding edge of a face. Used for trimming a face in the parameter space of the surface of the face. NURBSTRIMSINGULAR is used along singular sides of the surface (which side is contracted to one point on the surface). Connects the face to an edge (or to a vertex in singular case).

edge: gdl-index of NURBS edge to which this trim is attached. Positive index, edge and trim are always oriented consistently.
vertex: gdl-index of NURBS vertex to which this trim is attached (singular case).
curve: gdl-index of a 2D NURBS curve. Positive index, curve and trim are always oriented consistently. It is defined on the domain (u-v parameter space) of the surface of the face.
curveDomainBeg, curveDomainEnd: definition of the part of curve which geometrically represents the trim. The curveDomainEnd must be greater than curveDomainBeg, they must not coincide, and both value must be in the usable domain of the curve.
tolerance: maximum geometric distance between 2D curve of NURBS trim and other entities (other NURBS trims) which are topologically connected to it. If negative, tolerance will be some predefined default.

 

The curve restricted to [curveDomainBeg, curveDomainEnd] interval should completely lie within the usable domain of the surface of the face (with given tolerance). For NURBSTRIMSINGULAR the 2D curve must lie along a singular side of the usable domain (u-v parameter space) of the surface of the face.

The composition of the restricted 2D curve and the surface gives a 3D curve which should coincide with the restricted 3D curve of the edge. Therefore the 2D curve evaluated at curveDomainBeg and curveDomainEnd should coincide with the position of the appropriate vertex. In the singular case the composition of the 2D curve and the surface gives a 3D point, which should coincide with the given vertex.

Indexing of singular and non-singular trims is common.

Any number of trims can refer to each edge (so indirectly any number of face can be attached to an edge). The edge can be non-2-manifold. Two trims on one edge may belong to the same face, in this case edge is called a seam edge. For example a mantle of a cylinder can be one face with a seam edge.

NURBSFACE

NURBSFACE n, surface, tolerance,
	trim1, trim2, ..., trimn

Face of a NURBS body. Different from any polygon created by the PGON command, indexed separately from those. Can be used in NURBS bodies only, excluding planar-face bodies.

n: number of bounding edges (including optional hole-separator zeros).
surface: gdl-index of a NURBS surface supporting the face. Positive index, orientation of face is always identical to the orientation of surface.
trimi: gdl-index of NURBS trim bounding the face.
  • The trims are listed in a counter-clockwise (mathematical positive) order on the surface for the outer contour loop and clockwise (negative) for hole contour loop(s).
  • May be zero, which indicates end of contour (hole-separator).
  • Negative index means trim and the contour (of face) have opposite orientation.
tolerance: if negative, tolerance will be some predefined default.

The trims must connect at common vertices: the end vertex of a trim is the same as the begin vertex of the next trim in the face. (The vertices of a trim are the vertices of the edge of the trim for a non-singular trim.)

The consecutive trims – as 2D curves – also connect in the domain (parameter space) of the face, defining one or more closed contour loops on it. The first loop is always an outer loop which separates an infinite outer and a finite inner region on the plane. The potential subsequent loops are hole contours.

The 2D curve of each trim should completely lie inside the usable domain of the surface of the face and should not intersect itself or curves of other trims of the face. Each trim must be used in only one face.

The material and section attributes of a face are determined by the last MATERIAL and SECT_ATTRS (or SECT_FILL) statements respectively. The color of the edges inside the face created for polygonal segmentations is defined by the last PEN statement. This is practically visible on silhouettes coming from the internal of this face.

NURBSFACE{2}

NURBSFACE{2} n, surface, tolerance,
	wrap_method, wrap_flags,
	x1, y1, z1,
	x2, y2, z2,
	x3, y3, z3,
	x4, y4, z4,
	trim1, trim2, ..., trimn

Similar to NURBSFACE command., extended with the ability to describe texture mapping on the NURBS face like in
PGON{3} command.

n, surface, tolerance: same as NURBSFACE command.
wrap_method: same as PGON{3} command.
  • 0: the global wrapping mode is applied (x1 … z4 parameters are required but will be ignored)
  • > 0: same as PGON{3} command.
wrap_flags: similar to the PGON{3}command, except that projection type flags (j3, j4 and j5) are ignored (texture coordinates can not be applied on NURBS faces).
x1, y1, z1 ... x4, y4, z4: coordinates defining the coordinate system of the texture mapping for the NURBS face (these parameters are effective only if wrap_method > 0).
trim1 ... trimn: same as NURBSFACE command.

NURBSLUMP

NURBSLUMP n, face1, face2, ..., facen

Defines a solid part – a geometrically connected subset – of a solid NURBS body.

n: number of bounding faces (including optional void-separator zeros).
facei: gdl-index of NURBS face bounding the lump
  • May be zero, indicating the end of shell and the beginning of another shell (void-separator).
  • Negative index means face is used in opposite direction. For positive index the backward side of the face corresponds to the interior of the lump, for negative index the front side looks to the interior.

The boundary of a lump may fall to several closed shells: one outer shell which separates the lump from the infinite outer region of the space; and zero or more inner – void – shells which separate the lump from cavity regions. The faces of one shell must compose a continuous part of the face list. These different parts for different shells must be separated by a 0 value. The first shell must be the outer shell. The faces of a shell must connect at common edges, but no ordering is assumed in the list.

Note that the faces of a shell may be connected to other faces which are not in the shell or are in another shell (because edges can have more than two faces). Each face must be used in only one lump. Neither shell of a lump can be open – open bodies have no lumps and no shells.

NURBSBODY

NURBSBODY shadowStatus, smoothnessMin, smoothnessMax

Composes a NURBS body defined with the above NURBS primitives.

shadowStatus: status for shadow control:

shadowStatus = 32 * j6 + 64 * j7, where each j can be 0 or 1.
j6: NURBS body always casts shadow independently from automatic preselection algorithm,
j7: NURBS body never casts shadow.
If neither j6 nor j7 are set, the automatic shadow preselection is performed. See the SHADOW command.

smoothnessMin, smoothnessMax: limits of automatically calculated smoothness parameter for tessellation of the surfaces and curves of body. The automatically calculated parameter will be always in the range 0 to 1 inclusive, so that smoothnessMin <= 0 means no lower limit and smoothnessMax >= 1 means no upper limit. If smoothnessMin > smoothnessMax, values will not affect the automatically calculated smoothness.

 
Any non-NURBS primitive statement (VERT, TEVE, EDGE, VECT, PGON, PIPG, BODY) or any compound statement (BRICK, CYLIND, PRISM, REVOLVE, etc.) causes the NURBS body under construction to be finished (implicit NURBSBODY statement). In this case smoothness limits will not be set and shadowStatus will be zero (status parameter of BODY statement will not be passed).