proj home

Files   Classes   Functions   Hierarchy  

cubegui.cpp

Go to the documentation of this file.
00001 #include <GL/gl.h>
00002 #include <GL/glut.h>
00003 
00004 #include <commandline.h>
00005 #include <cubegui.h>
00006 #include <gobj.h>
00007 #include <graphmisc.h>
00008 #include <menusystem.h>
00009 #include <zpr.h>
00010 
00011 
00012 
00013 cubegui * cubegui::member = 0;
00014 
00015 cubegui::cubegui()
00016   : menuhelp(true), display2D(true), display3D(true), cb(), 
00017     cb2d(cb,1.0), cb3d(cb,1.0), cbperm(cb) 
00018 {
00019 }
00020 
00021 void cubegui::keyboard01(unsigned char k, int x, int y)
00022 {
00023   assert(member!=0);
00024 
00025   switch (k) 
00026   {
00027     case 27: exit(0); break;
00028     case 'S': member->cbperm.save(); break;
00029     case 'h': member->menuhelp = ! member->menuhelp; break;
00030     case '2': member->display2D = ! member->display2D; break;
00031     case '3': member->display3D = ! member->display3D; break;
00032 
00033     case '0': member->cb.reset(); break;
00034 
00035     case 'p':
00036       cout << member->cb << endl;
00037       break;
00038 
00039     // Move Cursor
00040     case 'a': member->cb.cs.left(); break;
00041     case 's': member->cb.cs.right(); break;
00042     case 'w': member->cb.cs.up(); break;
00043     case 'z': member->cb.cs.down(); break;
00044 
00045     // Rotate
00046     case 'd': member->cb.left(); break;
00047     case 'f': member->cb.right(); break;
00048     case 'r': member->cb.up(); break;
00049     case 'c': member->cb.down(); break;
00050 
00051     // Rotate face
00052     case 'j': member->cb.faceleft(); break;
00053     case 'k': member->cb.faceright(); break;
00054     case 'i': member->cb.faceup(); break;
00055     case 'm': member->cb.facedown(); break;
00056 
00057     default:
00058       return;
00059   }
00060 
00061   glutPostRedisplay();
00062 }
00063 
00064 /*
00065 void setOrthographicProjection() 
00066 {
00067   glMatrixMode(GL_PROJECTION);
00068   glPushMatrix();
00069   glLoadIdentity();
00070 
00071   gluOrtho2D(-0.5, 639.5, 479.5, -1.0);
00072 
00073   glMatrixMode(GL_MODELVIEW);
00074   glPushMatrix();
00075   glLoadIdentity();
00076 }
00077 
00078 void resetPerspectiveProjection() 
00079 {
00080   glPopMatrix();
00081 
00082   glMatrixMode(GL_PROJECTION);
00083   glPopMatrix();
00084   glMatrixMode(GL_MODELVIEW);
00085 }
00086 */
00087 
00088 
00089 
00090 
00091 void cubegui::display01()
00092 {
00093   assert(member!=0);
00094 
00095   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00096 
00097 //  if (member->display3D)
00098 //    member->cb3d.draw();
00099 
00100 /*
00101 
00102   setOrthographicProjection();
00103 
00104   glRasterPos2i(300,20);
00105   printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help");
00106 
00107   resetPerspectiveProjection();
00108 */
00109 
00110 //  glPushMatrix();
00111 //  glLoadIdentity();
00112 
00113 //  if (member->display2D)
00114 //    member->cb2d.draw();
00115 
00116 //  glPopMatrix();
00117 
00118   assert(gobj::global!=0);
00119 
00120   gobj::global->draw();
00121 
00122   glerrordisplay();
00123  
00124   glutSwapBuffers();
00125 }
00126 
00127 
00128 void cubegui::prog01(int argc, char** argv)
00129 {
00130   commandline cmd(argc,argv);
00131 
00132   int width=600;
00133   int height=800;
00134 
00135   cmd.mapvar(width,"width");
00136   cmd.mapvar(height,"height");
00137 
00138   glutInit(&argc,argv);
00139   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
00140   glutInitWindowSize(width,height);
00141   glutCreateWindow("");
00142   glutDisplayFunc(display01);
00143   glutKeyboardFunc(keyboard01);
00144 
00145   zpr zz;
00146 
00147   OpenGLinitialisation();
00148 
00149   glEnable(GL_DEPTH_TEST);
00150 
00151   glEnable(GL_CULL_FACE);
00152   glEnable(GL_NORMALIZE);
00153 
00154 
00155   glMatrixMode(GL_MODELVIEW);
00156   glLoadIdentity();
00157   gluLookAt
00158   (
00159     3.0,0.0,6.0,  // Eye
00160     3.0,0.0,0.0,  // Center
00161     0.0,1.0,0.0   // Up
00162   );
00163 
00164   member = this;
00165 
00166   xGraphics.set();
00167 
00168   menusystem * menu = 
00169     new menusystem(0,0,true,point2<GLint>(60,30),10);
00170   menu->fontcolor = point4<float>(218.0/255.0,165.0/255.0,32.0/255.0,0.75);
00171 
00172   gobjpush( new gobjSwitch<bool &>(menu,menuhelp) );
00173 
00174   gobjpush( new gobjSwitch<bool &>(&cb3d,display3D,false) );
00175   gobjpush( new gobjSwitch<bool &>(&cb2d,display2D,false) );
00176 
00177   menu->addfont12("Cube",2);
00178 
00179   menu->addfont10("Cursor",1);
00180   menu->addfont10("a   left",1);
00181   menu->addfont10("s   right",1);
00182   menu->addfont10("w   up",1);
00183   menu->addfont10("z   down",2);
00184 
00185   menu->addfont10("Move",1);
00186   menu->addfont10("d   left",1);
00187   menu->addfont10("f   right",1);
00188   menu->addfont10("r   up",1);
00189   menu->addfont10("c   down",2);
00190 
00191   menu->addfont10("Face",1);
00192   menu->addfont10("j   left",1);
00193   menu->addfont10("k   right",1);
00194   menu->addfont10("i   up",1);
00195   menu->addfont10("m   down",2);
00196 
00197   menu->addfont10("0   Reset",1);
00198   menu->addfont10("2   Toggle 2D display",1);
00199   menu->addfont10("3   Toggle 3D display",1);
00200   menu->addfont10("S   Save",2);
00201 
00202   menu->addfont10("h   toggle this help menu",1);
00203   menu->addfont10("ESC quit");  
00204 
00205   zz.update();
00206 
00207   // Never return.
00208   glutMainLoop();
00209 }
00210 
00211 

Generated on Fri Mar 4 00:49:26 2011 for Chelton Evans Source by  doxygen 1.5.8