gluBeginTrim.3gl




Name

  gluBeginTrim,	gluEndTrim - delimit a NURBS trimming loop definition


C Specification

  void gluBeginTrim( GLUnurbsObj *nobj )

  void gluEndTrim( GLUnurbsObj *nobj )


Parameters


  nobj	Specifies the NURBS object (created with gluNewNurbsRenderer).


Description

  Use gluBeginTrim to mark the beginning of a trimming loop, and gluEndTrim
  to mark the end of a trimming	loop.  A trimming loop is a set	of oriented
  curve	segments (forming a closed curve) that define boundaries of a NURBS
  surface.  You	include	these trimming loops in	the definition of a NURBS
  surface, between calls to gluBeginSurface and	gluEndSurface.

  The definition for a NURBS surface can contain many trimming loops.  For
  example, if you wrote	a definition for a NURBS surface that resembled	a
  rectangle with a hole	punched	out, the definition would contain two
  trimming loops.  One loop would define the outer edge	of the rectangle;
  the other would define the hole punched out of the rectangle.	 The
  definitions of each of these trimming	loops would be bracketed by a
  gluBeginTrim/gluEndTrim pair.

  The definition of a single closed trimming loop can consist of multiple
  curve	segments, each described as a piecewise	linear curve (see
  gluPwlCurve) or as a single NURBS curve (see gluNurbsCurve), or as a
  combination of both in any order.  The only library calls that can appear
  in a trimming	loop definition	(between the calls to gluBeginTrim and
  gluEndTrim) are gluPwlCurve and gluNurbsCurve.

  The area of the NURBS	surface	that is	displayed is the region	in the domain
  to the left of the trimming curve as the curve parameter increases.  Thus,
  the retained region of the NURBS surface is inside a counterclockwise
  trimming loop	and outside a clockwise	trimming loop.	For the	rectangle
  mentioned earlier, the trimming loop for the outer edge of the rectangle
  runs counterclockwise, while the trimming loop for the punched-out hole
  runs clockwise.

  If you use more than one curve to define a single trimming loop, the curve
  segments must	form a closed loop (that is, the endpoint of each curve	must
  be the starting point	of the next curve, and the endpoint of the final
  curve	must be	the starting point of the first	curve).	 If the	endpoints of
  the curve are	sufficiently close together but	not exactly coincident,	they
  will be coerced to match.  If	the endpoints are not sufficiently close, an
  error	results	(see gluNurbsCallback).

  If a trimming	loop definition	contains multiple curves, the direction	of
  the curves must be consistent	(that is, the inside must be to	the left of
  all of the curves).  Nested trimming loops are legal as long as the curve
  orientations alternate correctly.  Trimming curves cannot be self-
  intersecting,	nor can	they intersect one another (or an error	results).

  If no	trimming information is	given for a NURBS surface, the entire surface
  is drawn.


Example

  This code fragment defines a trimming	loop that consists of one piecewise
  linear curve,	and two	NURBS curves:

  gluBeginTrim(nobj);
     gluPwlCurve(..., GLU_MAP1_TRIM_2);
     gluNurbsCurve(...,	GLU_MAP1_TRIM_2);
     gluNurbsCurve(...,	GLU_MAP1_TRIM_3); gluEndTrim(nobj);


See Also

  gluBeginSurface, gluNewNurbsRenderer,	gluNurbsCallback, gluNurbsCurve,
  gluPwlCurve




Introduction | Alphabetic | Specification

Last Edited: Mon, May 22, 1995

AFV