diff options
Diffstat (limited to 'hacks/glx/extrusion-screw.c')
-rw-r--r-- | hacks/glx/extrusion-screw.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/hacks/glx/extrusion-screw.c b/hacks/glx/extrusion-screw.c new file mode 100644 index 0000000..6724476 --- /dev/null +++ b/hacks/glx/extrusion-screw.c @@ -0,0 +1,114 @@ +/* + * screw.c + * + * FUNCTION: + * Draws a screw shape. + * + * HISTORY: + * -- created by Linas Vepstas October 1991 + * -- heavily modified to draw more texas shapes, Feb 1993, Linas + * -- converted to use GLUT -- December 1995, Linas + * + */ + +#include "extrusion.h" +#include <stdlib.h> +#include <math.h> + +/* =========================================================== */ + +#define SCALE 1.3 +#define CONTOUR(x,y) { \ + double ax, ay, alen; \ + contour[i][0] = SCALE * (x); \ + contour[i][1] = SCALE * (y); \ + if (i!=0) { \ + ax = contour[i][0] - contour[i-1][0]; \ + ay = contour[i][1] - contour[i-1][1]; \ + alen = 1.0 / sqrt (ax*ax + ay*ay); \ + ax *= alen; ay *= alen; \ + norms [i-1][0] = ay; \ + norms [i-1][1] = -ax; \ + } \ + i++; \ +} + +#define NUM_PTS (25) + +static double contour [NUM_PTS][2]; +static double norms [NUM_PTS][2]; + +static void init_contour (void) +{ + int i; + + /* outline of extrusion */ + i=0; + CONTOUR (1.0, 1.0); + CONTOUR (1.0, 2.9); + CONTOUR (0.9, 3.0); + CONTOUR (-0.9, 3.0); + CONTOUR (-1.0, 2.9); + + CONTOUR (-1.0, 1.0); + CONTOUR (-2.9, 1.0); + CONTOUR (-3.0, 0.9); + CONTOUR (-3.0, -0.9); + CONTOUR (-2.9, -1.0); + + CONTOUR (-1.0, -1.0); + CONTOUR (-1.0, -2.9); + CONTOUR (-0.9, -3.0); + CONTOUR (0.9, -3.0); + CONTOUR (1.0, -2.9); + + CONTOUR (1.0, -1.0); + CONTOUR (2.9, -1.0); + CONTOUR (3.0, -0.9); + CONTOUR (3.0, 0.9); + CONTOUR (2.9, 1.0); + + CONTOUR (1.0, 1.0); /* repeat so that last normal is computed */ +} + +/* =========================================================== */ + +/* controls shape of object */ +extern float lastx; +extern float lasty; + +void InitStuff_screw (void) +{ + int style; + + /* configure the pipeline */ + style = TUBE_JN_CAP; + style |= TUBE_CONTOUR_CLOSED; + style |= TUBE_NORM_FACET; + style |= TUBE_JN_ANGLE; + gleSetJoinStyle (style); + + init_contour(); +} + +/* =========================================================== */ + +void DrawStuff_screw (void) { + + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glColor3f (0.5, 0.6, 0.6); + + /* set up some matrices so that the object spins with the mouse */ + glPushMatrix (); + /* glTranslatef (0.0, 0.0, -80.0); */ + /* glRotatef (130.0, 0.0, 1.0, 0.0); */ + /* glRotatef (65.0, 1.0, 0.0, 0.0); */ + + /* draw the brand and the handle */ + gleScrew (20, contour, norms, + NULL, -6.0, 9.0, lasty); + + glPopMatrix (); +} + +/* ===================== END OF FILE ================== */ |