summaryrefslogtreecommitdiffstats
path: root/hacks/glx/extrusion-screw.c
diff options
context:
space:
mode:
Diffstat (limited to 'hacks/glx/extrusion-screw.c')
-rw-r--r--hacks/glx/extrusion-screw.c114
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 ================== */