source: trunk/packages/vizservers/nanovis/glui/example2.cpp @ 1358

Last change on this file since 1358 was 1358, checked in by gah, 15 years ago

temporarily add glui to build

File size: 7.1 KB
RevLine 
[1358]1/****************************************************************************
2
3  example2.cpp
4
5  A simple GLUT program using the GLUI User Interface Library
6
7  -----------------------------------------------------------------------
8           
9  9/9/98 Paul Rademacher (rademach@cs.unc.edu)
10
11****************************************************************************/
12
13#include <string.h>
14#include "glut.h"
15#include "glui.h"
16
17float xy_aspect;
18int   last_x, last_y;
19float rotationX = 0.0, rotationY = 0.0;
20int   main_window;
21
22
23/** These are the live variables passed into GLUI ***/
24int   wireframe = 0;
25int   obj = 0;
26int   segments = 8;
27char  text[200] = {"Hello World!"};
28
29GLUI_Checkbox   *checkbox;
30GLUI_Spinner    *spinner;
31GLUI_RadioGroup *radio;
32GLUI_EditText   *edittext;
33
34/**************************************** control_cb() *******************/
35/* GLUI control callback                                                 */
36
37void control_cb( int control )
38{
39  /********************************************************************
40    Here we'll print the user id of the control that generated the
41    callback, and we'll also explicitly get the values of each control.
42    Note that we really didn't have to explicitly get the values, since
43    they are already all contained within the live variables:
44    'wireframe',  'segments',  'obj',  and 'text' 
45    ********************************************************************/
46
47  printf( "callback: %d\n", control );
48  printf( "             checkbox: %d\n", checkbox->get_int_val() );
49  printf( "              spinner: %d\n", spinner->get_int_val() );
50  printf( "          radio group: %d\n", radio->get_int_val() );
51  printf( "                 text: %s\n", edittext->get_text() );
52 
53}
54
55/**************************************** myGlutKeyboard() **********/
56
57void myGlutKeyboard(unsigned char Key, int x, int y)
58{
59  switch(Key)
60  {
61  case 27:
62  case 'q':
63    exit(0);
64    break;
65  };
66 
67  glutPostRedisplay();
68}
69
70
71/***************************************** myGlutMenu() ***********/
72
73void myGlutMenu( int value )
74{
75  myGlutKeyboard( value, 0, 0 );
76}
77
78
79/***************************************** myGlutIdle() ***********/
80
81void myGlutIdle( void )
82{
83  /* According to the GLUT specification, the current window is
84     undefined during an idle callback.  So we need to explicitly change
85     it if necessary */
86  if ( glutGetWindow() != main_window)
87    glutSetWindow(main_window); 
88
89  glutPostRedisplay();
90}
91
92/***************************************** myGlutMouse() **********/
93
94void myGlutMouse(int button, int button_state, int x, int y )
95{
96  if ( button == GLUT_LEFT_BUTTON && button_state == GLUT_DOWN ) {
97    last_x = x;
98    last_y = y;
99  }
100}
101
102
103/***************************************** myGlutMotion() **********/
104
105void myGlutMotion(int x, int y )
106{
107  rotationX += (float) (y - last_y);
108  rotationY += (float) (x - last_x);
109
110  last_x = x;
111  last_y = y;
112
113  glutPostRedisplay();
114}
115
116/**************************************** myGlutReshape() *************/
117
118void myGlutReshape( int x, int y )
119{
120  xy_aspect = (float)x / (float)y;
121  glViewport( 0, 0, x, y );
122
123  glutPostRedisplay();
124}
125
126/***************************************** myGlutDisplay() *****************/
127
128void myGlutDisplay( void )
129{
130  glClearColor( .9f, .9f, .9f, 1.0f );
131  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
132
133  glMatrixMode( GL_PROJECTION );
134  glLoadIdentity();
135  glFrustum( -xy_aspect*.08, xy_aspect*.08, -.08, .08, .1, 15.0 );
136
137  glMatrixMode( GL_MODELVIEW );
138  glLoadIdentity();
139  glTranslatef( 0.0f, 0.0f, -1.6f );
140  glRotatef( rotationY, 0.0, 1.0, 0.0 );
141  glRotatef( rotationX, 1.0, 0.0, 0.0 );
142
143  /*** Now we render object, using the variables 'obj', 'segments', and
144    'wireframe'.  These are _live_ variables, which are transparently
145    updated by GLUI ***/
146 
147  if ( obj == 0 ) {
148    if ( wireframe )     
149      glutWireSphere( .6, segments, segments );
150    else                 
151      glutSolidSphere( .6, segments, segments );
152  }
153  else if ( obj == 1 ) {
154    if ( wireframe )
155      glutWireTorus( .2,.5,16,segments );
156    else
157      glutSolidTorus( .2,.5,16,segments );
158  }
159
160  glDisable( GL_LIGHTING );  /* Disable lighting while we render text */
161  glMatrixMode( GL_PROJECTION );
162  glLoadIdentity();
163  gluOrtho2D( 0.0, 100.0, 0.0, 100.0  );
164  glMatrixMode( GL_MODELVIEW );
165  glLoadIdentity();
166  glColor3ub( 0, 0, 0 );
167  glRasterPos2i( 10, 10 );
168
169  //  printf( "text: %s\n", text );
170
171  /*** Render the live character array 'text' ***/
172  int i;
173  for( i=0; i<(int)strlen( text ); i++ )
174    glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, text[i] );
175
176  glEnable( GL_LIGHTING );
177
178  glutSwapBuffers();
179}
180
181
182/**************************************** main() ********************/
183
184int main(int argc, char* argv[])
185{
186  /****************************************/
187  /*   Initialize GLUT and create window  */
188  /****************************************/
189
190  glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
191  glutInitWindowPosition( 50, 50 );
192  glutInitWindowSize( 300, 300 );
193 
194  main_window = glutCreateWindow( "GLUI Example 2" );
195  glutDisplayFunc( myGlutDisplay );
196  glutReshapeFunc( myGlutReshape ); 
197  glutKeyboardFunc( myGlutKeyboard );
198  glutMotionFunc( myGlutMotion );
199  glutMouseFunc( myGlutMouse );
200
201  /****************************************/
202  /*       Set up OpenGL lights           */
203  /****************************************/
204
205  GLfloat light0_ambient[] =  {0.1f, 0.1f, 0.3f, 1.0f};
206  GLfloat light0_diffuse[] =  {.6f, .6f, 1.0f, 1.0f};
207  GLfloat light0_position[] = {1.0f, 1.0f, 1.0f, 0.0f};
208
209  glEnable(GL_LIGHTING);
210  glEnable(GL_LIGHT0);
211  glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
212  glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
213  glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
214
215  /****************************************/
216  /*          Enable z-buferring          */
217  /****************************************/
218
219  glEnable(GL_DEPTH_TEST);
220
221  /****************************************/
222  /*         Here's the GLUI code         */
223  /****************************************/
224
225  GLUI *glui = GLUI_Master.create_glui( "GLUI", 0, 400, 50 ); /* name, flags,
226                                                                 x, and y */
227  glui->add_statictext( "GLUI Example 2" );
228  glui->add_separator();
229  checkbox = glui->add_checkbox( "Wireframe", &wireframe, 1, control_cb );
230  spinner  = glui->add_spinner( "Segments:",GLUI_SPINNER_INT, &segments,
231                                2, control_cb );
232  spinner->set_int_limits( 3, 60 );
233  edittext = glui->add_edittext( "Text:", GLUI_EDITTEXT_TEXT, text,
234                                 3, control_cb );
235  GLUI_Panel *obj_panel = glui->add_panel( "Object Type" );
236  radio = glui->add_radiogroup_to_panel(obj_panel,&obj,4,control_cb);
237  glui->add_radiobutton_to_group( radio, "Sphere" );
238  glui->add_radiobutton_to_group( radio, "Torus" );
239  glui->add_button( "Quit", 0,(GLUI_Update_CB)exit );
240 
241  glui->set_main_gfx_window( main_window );
242
243  /* We register the idle callback with GLUI, *not* with GLUT */
244  GLUI_Master.set_glutIdleFunc( myGlutIdle );
245
246  glutMainLoop();
247
248  return 0;
249}
Note: See TracBrowser for help on using the repository browser.