2008-12-08 04:36:27 +00:00
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
#define OPENGL_10
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* some types */
|
|
|
|
#define gleDouble double
|
|
|
|
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 ======================= */
|