gle/tube.h

/* 
 * tube.h
 *
 * FUNCTION:
 * Tubing and Extrusion header file.
 * This file provides protypes and defines for the extrusion 
 * and tubing primitives.
 *
 * HISTORY:
 * Linas Vepstas 1990, 1991
 */
 
#ifndef __TUBE_H__
#define __TUBE_H__
 
#ifdef __cplusplus
extern "C" {
#endif
 
/**
 GLE API revision history:
 
 GLE_API_VERSION is updated to reflect GLE API changes (interface
 changes, semantic changes, deletions, or additions).
 
 GLE_API_VERSION=228  GLUT 3.7 release of GLE.
**/
#ifndef GLE_API_VERSION  /* allow this to be overriden */
#define GLE_API_VERSION                228
#endif
 
/* some types */
#ifndef gleDouble
    #define gleDouble double
#endif
typedef gleDouble gleAffine[2][3];
 
/* ====================================================== */
 
/* defines for tubing join styles */
#define TUBE_JN_RAW          0x1
#define TUBE_JN_ANGLE        0x2
#define TUBE_JN_CUT          0x3
#define TUBE_JN_ROUND        0x4
#define TUBE_JN_MASK         0xf    /* mask bits */
#define TUBE_JN_CAP          0x10
 
/* determine how normal vectors are to be handled */
#define TUBE_NORM_FACET      0x100
#define TUBE_NORM_EDGE       0x200
#define TUBE_NORM_PATH_EDGE  0x400 /* for spiral, lathe, helix primitives */
#define TUBE_NORM_MASK       0xf00    /* mask bits */
 
/* closed or open countours */
#define TUBE_CONTOUR_CLOSED 0x1000
 
#define GLE_TEXTURE_ENABLE  0x10000
#define GLE_TEXTURE_STYLE_MASK  0xff
#define GLE_TEXTURE_VERTEX_FLAT     1
#define GLE_TEXTURE_NORMAL_FLAT     2
#define GLE_TEXTURE_VERTEX_CYL      3
#define GLE_TEXTURE_NORMAL_CYL      4
#define GLE_TEXTURE_VERTEX_SPH      5
#define GLE_TEXTURE_NORMAL_SPH      6
#define GLE_TEXTURE_VERTEX_MODEL_FLAT   7
#define GLE_TEXTURE_NORMAL_MODEL_FLAT   8
#define GLE_TEXTURE_VERTEX_MODEL_CYL    9
#define GLE_TEXTURE_NORMAL_MODEL_CYL    10
#define GLE_TEXTURE_VERTEX_MODEL_SPH    11
#define GLE_TEXTURE_NORMAL_MODEL_SPH    12
 
#ifdef GL_32
/* HACK for GL 3.2 -- needed because no way to tell if lighting is on.  */
#define TUBE_LIGHTING_ON    0x80000000
 
#define gleExtrusion        extrusion
#define gleSetJoinStyle     setjoinstyle
#define gleGetJoinStyle     getjoinstyle
#define glePolyCone     polycone
#define glePolyCylinder     polycylinder
#define gleSuperExtrusion   super_extrusion
#define gleTwistExtrusion   twist_extrusion
#define gleSpiral       spiral
#define gleLathe        lathe
#define gleHelicoid     helicoid
#define gleToroid       toroid
#define gleScrew        screw
 
#endif /* GL_32 */
 
extern int gleGetJoinStyle (void);
extern void gleSetJoinStyle (int style);    /* bitwise OR of flags */
extern int gleGetNumSlices(void);
extern void gleSetNumSlices(int slices);
 
/* draw polyclinder, specified as a polyline */
extern void glePolyCylinder (int npoints,   /* num points in polyline */
                   gleDouble point_array[][3],  /* polyline vertces */
                   float color_array[][3],  /* colors at polyline verts */
                   gleDouble radius);       /* radius of polycylinder */
 
/* draw polycone, specified as a polyline with radii */
extern void glePolyCone (int npoints,    /* numpoints in poly-line */
                   gleDouble point_array[][3],  /* polyline vertices */
                   float color_array[][3],  /* colors at polyline verts */
                   gleDouble radius_array[]); /* cone radii at polyline verts */
 
/* extrude arbitrary 2D contour along arbitrary 3D path */
extern void gleExtrusion (int ncp,         /* number of contour points */
                gleDouble contour[][2],     /* 2D contour */
                gleDouble cont_normal[][2], /* 2D contour normals */
                gleDouble up[3],            /* up vector for contour */
                int npoints,            /* numpoints in poly-line */
                gleDouble point_array[][3], /* polyline vertices */
                float color_array[][3]); /* colors at polyline verts */
 
/* extrude 2D contour, specifying local rotations (twists) */
extern void gleTwistExtrusion (int ncp,         /* number of contour points */
                gleDouble contour[][2],    /* 2D contour */
                gleDouble cont_normal[][2], /* 2D contour normals */
                gleDouble up[3],           /* up vector for contour */
                int npoints,           /* numpoints in poly-line */
                gleDouble point_array[][3],        /* polyline vertices */
                float color_array[][3],        /* color at polyline verts */
                gleDouble twist_array[]);   /* countour twists (in degrees) */
 
/* extrude 2D contour, specifying local affine tranformations */
extern void gleSuperExtrusion (int ncp,  /* number of contour points */
                gleDouble contour[][2],    /* 2D contour */
                gleDouble cont_normal[][2], /* 2D contour normals */
                gleDouble up[3],           /* up vector for contour */
                int npoints,           /* numpoints in poly-line */
                gleDouble point_array[][3],        /* polyline vertices */
                float color_array[][3],        /* color at polyline verts */
                gleDouble xform_array[][2][3]);   /* 2D contour xforms */
 
/* spiral moves contour along helical path by parallel transport */
extern void gleSpiral (int ncp,        /* number of contour points */
             gleDouble contour[][2],    /* 2D contour */
             gleDouble cont_normal[][2], /* 2D contour normals */
             gleDouble up[3],           /* up vector for contour */
             gleDouble startRadius, /* spiral starts in x-y plane */
             gleDouble drdTheta,        /* change in radius per revolution */
             gleDouble startZ,      /* starting z value */
             gleDouble dzdTheta,        /* change in Z per revolution */
             gleDouble startXform[2][3], /* starting contour affine xform */
             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
             gleDouble startTheta,  /* start angle in x-y plane */
             gleDouble sweepTheta); /* degrees to spiral around */
 
/* lathe moves contour along helical path by helically shearing 3D space */
extern void gleLathe (int ncp,        /* number of contour points */
             gleDouble contour[][2],    /* 2D contour */
             gleDouble cont_normal[][2], /* 2D contour normals */
             gleDouble up[3],           /* up vector for contour */
             gleDouble startRadius, /* spiral starts in x-y plane */
             gleDouble drdTheta,        /* change in radius per revolution */
             gleDouble startZ,      /* starting z value */
             gleDouble dzdTheta,        /* change in Z per revolution */
             gleDouble startXform[2][3], /* starting contour affine xform */
             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
             gleDouble startTheta,  /* start angle in x-y plane */
             gleDouble sweepTheta); /* degrees to spiral around */
 
/* similar to spiral, except contour is a circle */
extern void gleHelicoid (gleDouble rToroid, /* circle contour (torus) radius */
             gleDouble startRadius, /* spiral starts in x-y plane */
             gleDouble drdTheta,        /* change in radius per revolution */
             gleDouble startZ,      /* starting z value */
             gleDouble dzdTheta,        /* change in Z per revolution */
             gleDouble startXform[2][3], /* starting contour affine xform */
             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
             gleDouble startTheta,  /* start angle in x-y plane */
             gleDouble sweepTheta); /* degrees to spiral around */
 
/* similar to lathe, except contour is a circle */
extern void gleToroid (gleDouble rToroid, /* circle contour (torus) radius */
             gleDouble startRadius, /* spiral starts in x-y plane */
             gleDouble drdTheta,        /* change in radius per revolution */
             gleDouble startZ,      /* starting z value */
             gleDouble dzdTheta,        /* change in Z per revolution */
             gleDouble startXform[2][3], /* starting contour affine xform */
             gleDouble dXformdTheta[2][3], /* tangent change xform per revoln */
             gleDouble startTheta,  /* start angle in x-y plane */
             gleDouble sweepTheta); /* degrees to spiral around */
 
/* draws a screw shape */
extern void gleScrew (int ncp,          /* number of contour points */
             gleDouble contour[][2],    /* 2D contour */
             gleDouble cont_normal[][2], /* 2D contour normals */
             gleDouble up[3],           /* up vector for contour */
             gleDouble startz,          /* start of segment */
             gleDouble endz,            /* end of segment */
             gleDouble twist);          /* number of rotations */
 
extern void gleTextureMode (int mode);
 
#ifdef __cplusplus
}
 
#endif
#endif /* __TUBE_H__ */
/* ================== END OF FILE ======================= */