/* * 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 #include /* =========================================================== */ #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 ================== */