12. Utilities Quadric Surfaces - Quadric
The utility module, Quadric is designed to complement the low level drawing functions by creating and tesselating higher level graphics objects. In particular, the Quadric module facilitates the drawing of spheres, cylinders, disks, etc. The graphics primitives generated by this modules are suitable to be rendered by the low level device interfaces.
The Quadric module is provided to draw simple quadric surfaces, in particular disks, cones, cylinders and spheres. The resolution of the tesselation, type of surface normal generation, texture coordinate generation, etc. may be specified.
- 
    Begin and end an instance of an object, return object error flag
    *vgl_QuadricBegin - create an instance of a Quadric object vgl_QuadricEnd - destroy an instance of a Quadric object vgl_QuadricError - return Quadric object error flag
- 
    Set objects, drawing functions, etc.
    vgl_QuadricCylinder - draw variations of a cylinder vgl_QuadricSetObject - set pointers to attribute objects. vgl_QuadricSetParamf - set drawing parameters. vgl_QuadricSetParamfv - set drawing parameters. vgl_QuadricSetParami - set drawing parameters. vgl_QuadricSphere - draw a sphere
12.1 Attribute Objects
A Quadric object requires a conventional DrawFun object to output its contents. Use vgl_QuadricSetObject to set a DrawFun object as an attribute.12.2 Function Descriptions
The currently available Quadric functions are described in detail in this section.Quadric
NAME
*vgl_QuadricBegin - create an instance of a Quadric objectC SPECIFICATION
    vgl_Quadric *vgl_QuadricBegin ()
    
    ARGUMENTS
    None
    
    FUNCTION RETURN VALUE
The function returns a pointer to the newly created Quadric object. If the object creation fails, NULL is returned.ERRORS
VGL_ERROR_MEMORY is generated if the initial display list memory block allocation fails.DESCRIPTION
Create an instance of a Quadric object. Memory is allocated for the object private data and the pointer to the data is returned. By default shading is flat, texture coordinate generation is off, the azimuth angle start and stop are 0., and 360. degrees, the number of slices is 17 and the number of stacks is 9. The drawing style is filled.Destroy an instance of a Quadric object using
         void vgl_QuadricEnd (vgl_Quadric *quadric)
    
    Return the current value of a Quadric object error flag using
         Vint vgl_QuadricError (vgl_Quadric *quadric)
    
    
Quadric
NAME
vgl_QuadricCylinder - draw variations of a cylinderC SPECIFICATION
    void vgl_QuadricCylinder (vgl_Quadric *quadric,
                              Vfloat baserad,
                              Vfloat toprad,
                              Vfloat height)
    
    INPUT ARGUMENTS
    quadric      Pointer to Quadric object.
    baserad      Radius of base of cylinder
    toprad       Radius of top of cylinder
    height       Height of cylinder
    
    OUTPUT ARGUMENTS
    None
    
    DESCRIPTION
Draw a cylinder oriented along the z axis. The base of the cylinder is at the origin, the top of the cylinder is at z = height. A cone may be drawn by specifying different radii at the base and top. A disk may be drawn by specifying different radii at the base and top with a height of zero. The circumferential angle is zero at the positive x axis and follows the right hand rule about the z axis. Texture coordinates vary from 0. to 1. in the circumferential direction and from 0. to 1. from the base to the top.
Quadric
NAME
vgl_QuadricSetObject - set pointers to attribute objectsC SPECIFICATION
    void vgl_QuadricSetObject (vgl_Quadric *quadric,
                              Vint objecttype,
                              Vobject *object)
    
    INPUT ARGUMENTS
    quadric      Pointer to Quadric object.
    objecttype   The name of the object type to be set.
                 =VGL_DRAWFUN            DrawFun object
    object       Pointer to the object to be set.
    
    OUTPUT ARGUMENTS
    None
    
    ERRORS
VGL_ERROR_OBJECTTYPE is generated if an improper objecttype is specified.DESCRIPTION
Set a pointer to an attribute object. The DrawFun attribute object is required.
Quadric
NAME
vgl_QuadricSetParam - set drawing style parametersC SPECIFICATION
    void vgl_QuadricSetParamf (vgl_Quadric *quadric,
                               Vint ptype,
                               Vfloat fparam)
    
    void vgl_QuadricSetParami (vgl_Quadric *quadric,
                               Vint ptype,
                               Vint iparam)
    
    INPUT ARGUMENTS
    quadric      Pointer to Quadric object.
    ptype        Type of drawing parameter to set
                 =QUADRIC_AZIMUTHSTART    Starting value of azimuthal angle
                 =QUADRIC_AZIMUTHSTOP     Stopping value of azimuthal angle
                 =QUADRIC_LINE            Feature line flag
                 =QUADRIC_FILL            Fill flag
                 =QUADRIC_SHADE           Type of normals to generate
                 =QUADRIC_SLICES          Resolution along azimuth.
                 =QUADRIC_STACKS          Resolution along elevation.
                 =QUADRIC_TEXTURECOORD    Texture coordinate generation flag
    fparam       Specifies the float value that ptype will be set to.
    iparam       Specifies the integer value that ptype will be set to.
    
    OUTPUT ARGUMENTS
    None
    
    ERRORS
VIS_ERROR_ENUM is generated if an improper node ptype is specified.DESCRIPTION
Set drawing parameters. The QUADRIC_AZIMUTHSTART and QUADRIC_AZIMUTHSTOP parameters allow portions of the quadric surface to be drawn bound by the specified azimuthal angle. The values are specified in degrees. The default start and stop values are 0. and 360.The QUADRIC_FILL parameter enables polygon generation By default QUADRIC_FILL is enabled. The QUADRIC_LINE parameter enables feature polyline generation By default QUADRIC_LINE is disabled.
The QUADRIC_SHADE parameter specifies the type of normals generated for light source shading. Possible values are VGL_NOSHADE, VGL_FLATSHADE and VGL_VERTEXSHADE. The default normal generation is VGL_FLATSHADE.
The QUADRIC_SLICES and QUADRIC_STACKS parameters specify the resolution of the surface tesselation. The default slices and stacks are 17 and 9. This resolution generates 128 quadrilateral polygons.
The QUADRIC_TEXTURECOORD parameter enables texture coordinate generation. The default is off.
Quadric
NAME
vgl_QuadricSetParamfv - set drawing parameters.C SPECIFICATION
    void vgl_QuadricSetParamfv (vgl_Quadric *quadric,
                                Vint ptype,
                                Vfloat fparam[])
    
    INPUT ARGUMENTS
    quadric      Pointer to Quadric object.
    ptype        Type of drawing parameter to set
                 =QUADRIC_ORIGIN          Origin of quadric
    fparam       Specifies the float values that ptype will be set to.
    
    OUTPUT ARGUMENTS
    None
    
    ERRORS
VIS_ERROR_ENUM is generated if an improper node ptype is specified.DESCRIPTION
Set drawing parameters. The QUADRIC_ORIGIN parameter defines the world coordinate origin of the quadric.
Quadric
NAME
vgl_QuadricSphere - draw a sphereC SPECIFICATION
    void vgl_QuadricSphere (vgl_Quadric *quadric,
                            Vfloat rad),
    
    INPUT ARGUMENTS
    quadric      Pointer to Quadric object.
    rad          Radius of sphere
    
    OUTPUT ARGUMENTS
    None
    
    DESCRIPTION
Draw a sphere of radius rad oriented along the z axis. The center of the sphere is at the origin. The circumferential angle is zero at the positive x axis and follows the right hand rule about the z axis. The azimuthal angle is -90. degrees at the negative z axis and 90. degrees at the positive z axis. Texture coordinates vary from 0. to 1. in the circumferential direction and from 0. to 1. from the azimuthal direction.
