From: Tim R. <ti...@us...> - 2004-07-18 20:42:02
|
Update of /cvsroot/csdopenglnet/csdOpenGL/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21347 Modified Files: Makefile Added Files: gtkGears.cs Log Message: gears example in Gtk# widget --- NEW FILE: gtkGears.cs --- using csDragons.OpenGL; using GLib; using Gtk; using GtkSharp; using System; public class GtkGears : csdGL { GtkGLArea glarea; protected double rotAng = 0.0f; protected uint gear1; protected uint gear2; protected uint gear3; protected const double view_rotx = 20.0; protected const double view_roty = 30.0; protected const double view_rotz = 0.0; protected bool stop = false; public GtkGears() { Application.Init(); Gtk.Window window = new Gtk.Window( "Gtk Gears" ); window.ReallocateRedraws = true; window.DeleteEvent += new DeleteEventHandler( OnDeleteEvent ); glarea = new GtkGLArea(); glarea.Realized += new EventHandler (OnRealized); glarea.ConfigureEvent += new ConfigureEventHandler (OnConfigure); glarea.ExposeEvent += new ExposeEventHandler (OnExpose); glarea.MapEvent += new MapEventHandler (OnMap); glarea.UnmapEvent += new UnmapEventHandler (OnUnmap); Table table = new Table( 10, 20, true ); table.Attach( glarea, 1, 19, 1, 9 ); window.Add( table ); glarea.Show (); window.ShowAll (); Application.Run (); } protected void OnDeleteEvent (object obj, DeleteEventArgs args) { Application.Quit (); } protected void OnMap (object obj, MapEventArgs args) { GLib.Idle.Add (new IdleHandler (Animate)); stop = false; } protected void OnUnmap (object obj, UnmapEventArgs args) { stop = true; } protected bool Animate () { rotAng += 0.5f; glarea.QueueDraw (); return !stop; } protected void OnExpose (object obj, ExposeEventArgs args) { if (glarea.MakeCurrent()) { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glRotated( view_rotx, 1.0, 0.0, 0.0 ); glRotated( view_roty + 0.1 * rotAng, 0.0, 1.0, 0.0 ); glRotated( view_rotz, 0.0, 0.0, 1.0 ); glPushMatrix(); glTranslated( -3.0, -2.0, 0.0 ); glRotated( rotAng, 0.0, 0.0, 1.0 ); glCallList( gear1 ); glPopMatrix(); glPushMatrix(); glTranslated( 3.1, -2.0, 0.0 ); glRotated( -2.0 * rotAng - 9.0, 0.0, 0.0, 1.0 ); glCallList( gear2 ); glPopMatrix(); glPushMatrix(); glTranslated( -3.1, 4.2, 0.0 ); glRotated( -2.0 * rotAng - 25.0, 0.0, 0.0, 1.0 ); glCallList( gear3 ); glPopMatrix(); glPopMatrix(); glarea.SwapBuffers(); } } protected void OnConfigure (object obj, ConfigureEventArgs args) { if (glarea.MakeCurrent()) { float h = (float) glarea.Allocation.Height / (float) (glarea.Allocation.Width); glViewport(0, 0, glarea.Allocation.Width, glarea.Allocation.Height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum( -1.0, 1.0, -h, h, 5.0, 60.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glTranslatef( 0.0f, 0.0f, -50.0f ); } } protected void initGL() { float[] pos = { 5.0f, 5.0f, 10.0f, 0.0f }; float[] red = { 0.8f, 0.1f, 0.0f, 1.0f }; float[] green = { 0.0f, 0.8f, 0.2f, 1.0f }; float[] blue = { 0.2f, 0.2f, 1.0f, 1.0f }; glShadeModel( GL_SMOOTH ); glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClearDepth( 1.0f ); glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); glLightfv( GL_LIGHT0, GL_POSITION, pos ); glEnable( GL_CULL_FACE ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glEnable( GL_DEPTH_TEST ); /* gears */ gear1 = glGenLists( 1 ); glNewList( gear1, GL_COMPILE ); glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red ); gear( 1.0, 4.0, 1.0, 20, 0.7 ); glEndList(); gear2 = glGenLists( 1 ); glNewList( gear2, GL_COMPILE ); glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green ); gear( 0.5, 2.0, 2.0, 10, 0.7 ); glEndList(); gear3 = glGenLists( 1 ); glNewList( gear3, GL_COMPILE ); glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue ); gear( 1.3, 2.0, 0.5, 10, 0.7 ); glEndList(); glEnable( GL_NORMALIZE ); } protected void OnRealized (object obj, EventArgs args) { initGL(); } protected void gear( double inner_radius, double outer_radius, double width, int teeth, double tooth_depth ) { int i; double r0, r1, r2, angle, da, u, v, len; r0 = inner_radius; r1 = outer_radius - tooth_depth / 2.0; r2 = outer_radius + tooth_depth / 2.0; da = 2.0 * Math.PI / teeth / 4.0; glShadeModel( GL_FLAT ); glNormal3d( 0.0, 0.0, 1.0 ); /* front face */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<= teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); if ( i<teeth ) { glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); } } glEnd(); /* front sides of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), width * 0.5 ); glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); } glEnd(); glNormal3d( 0.0, 0.0, -1.0 ); /* back face */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); if (i<teeth) { glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); } } glEnd(); /* back sides of teeth */ glBegin( GL_QUADS ); da = 2.0 * Math.PI / teeth / 4.0; for ( i=0; i<teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), -width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), -width * 0.5 ); glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); } glEnd(); /* outward faces of teeth */ glBegin( GL_QUAD_STRIP ); for ( i=0; i<teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), width * 0.5 ); glVertex3d( r1 * Math.Cos( angle ), r1 * Math.Sin( angle ), -width * 0.5 ); u = r2 * Math.Cos( angle + da ) - r1 * Math.Cos( angle ); v = r2 * Math.Sin( angle + da ) - r1 * Math.Sin( angle ); len = Math.Sqrt( u * u + v * v ); u /= len; v /= len; glNormal3d( v, -u, 0.0 ); glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + da ), r2 * Math.Sin( angle + da ), -width * 0.5 ); glNormal3d( Math.Cos( angle ), Math.Sin( angle ), 0.0 ); glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), width * 0.5 ); glVertex3d( r2 * Math.Cos( angle + 2 * da ), r2 * Math.Sin( angle + 2 * da ), -width * 0.5 ); u = r1 * Math.Cos( angle + 3 * da ) - r2 * Math.Cos( angle + 2 * da ); v = r1 * Math.Sin( angle + 3 * da ) - r2 * Math.Sin( angle + 2 * da ); glNormal3d( v, -u, 0.0 ); glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), width * 0.5 ); glVertex3d( r1 * Math.Cos( angle + 3 * da ), r1 * Math.Sin( angle + 3 * da ), -width * 0.5 ); glNormal3d( Math.Cos( angle ), Math.Sin( angle ), 0.0 ); } glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), width * 0.5 ); glVertex3d( r1 * Math.Cos( 0 ), r1 * Math.Sin( 0 ), -width * 0.5 ); glEnd(); glShadeModel( GL_SMOOTH ); glBegin( GL_QUAD_STRIP ); for ( i=0; i<=teeth; i++ ) { angle = i * 2.0 * Math.PI / teeth; glNormal3d( -Math.Cos( angle ), -Math.Sin( angle ), 0.0 ); glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), -width * 0.5 ); glVertex3d( r0 * Math.Cos( angle ), r0 * Math.Sin( angle ), width * 0.5 ); } glEnd(); } public static void Main( string[] args) { GtkGears gl = new GtkGears(); } } Index: Makefile =================================================================== RCS file: /cvsroot/csdopenglnet/csdOpenGL/samples/Makefile,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Makefile 17 Jul 2004 18:37:49 -0000 1.3 --- Makefile 18 Jul 2004 20:41:52 -0000 1.4 *************** *** 10,14 **** LIBOPTS=$(foreach lib,$(LIBS),-r $(lib)) ! all: $(LIBS) triangle.exe texture.exe gtkWidget.exe gears.exe csdGL.dll: libcsdGL.so --- 10,14 ---- LIBOPTS=$(foreach lib,$(LIBS),-r $(lib)) ! all: $(LIBS) triangle.exe texture.exe gtkWidget.exe gears.exe gtkGears.exe csdGL.dll: libcsdGL.so *************** *** 30,33 **** --- 30,36 ---- $(MCS) -r:glib-sharp.dll -r:gtk-sharp.dll -r:csdGL_Gtk.dll -r:System.Drawing gtkWidget.cs -o $@ + gtkGears.exe:gtkGears.cs csdGL_Gtk.dll + $(MCS) -r:glib-sharp.dll -r:gtk-sharp.dll -r:csdGL_Gtk.dll -r:System.Drawing gtkGears.cs -o $@ + %.exe:%.cs $(MCS) -r:csdGL.dll -r:csdGLtools.dll -r:csdMath.dll -r:System.Drawing $^ -o $@ |