Update of /cvsroot/playerstage/code/stage/libstage
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10238
Modified Files:
Tag: opengl
Makefile.manual block.cc gl.c model.cc model_laser.cc stage.hh
stest.cc world.cc
Added Files:
Tag: opengl
Makefile.fl worldgui.cc
Log Message:
moved to fltk. gui 75% there
--- NEW FILE: worldgui.cc ---
#include "stage.hh"
#include <FL/fl_draw.H>
#include <FL/Fl_Menu_Button.H>
extern void glPolygonOffsetEXT (GLfloat, GLfloat);
void dummy_cb(Fl_Widget*, void* v)
{
}
void view_toggle_cb(Fl_Widget* w, bool* view )
{
assert(view);
*view = !(*view);
Fl_Menu_Item* item = (Fl_Menu_Item*)((Fl_Menu_*)w)->mvalue();
*view ? item->check() : item->clear();
}
void timer_cb( void* v)
{
StgWorldGui* w = (StgWorldGui*)v;
w->redraw();
if( w->show_clock )
w->redraw_overlay();
Fl::repeat_timeout(0.1, timer_cb, v);
}
StgWorldGui::StgWorldGui(int W,int H,const char*L)
: Fl_Gl_Window(0,0,W,H,L)
{
//Fl_Menu_Bar* menubar = new Fl_Menu_Bar(0,0, W, 30);// 640, 30);
//menubar->menu(menuitems);
//menubar->show();
selected_models = NULL;
graphics = true;
dragging = false;
startx = starty = 0;
panx = pany = stheta = sphi = 0.0;
scale = 15.0;
fg = 1.0;
bg = 0.0;
resizable(this);
end();
follow_selection = false;
show_clock = true;
show_quadtree = false;
show_occupancy = false;
show_geom = false;
show_boxes = true;
show_grid = false;
show_data = true;
show_cfg = false;
show_cmd = false;
show_thumbnail = false;
show_trails = false;
// build the menus
menu = new Fl_Menu_Button( 0,0,0,0 );
menu->type( Fl_Menu_Button::POPUP3 );
//menu->add( "&File", 0, 0, 0, FL_SUBMENU );
//menu->add( "File/&Save File", FL_CTRL + 's', (Fl_Callback *)dummy_cb );
//menu->add( "File/Save File &As...", FL_CTRL + FL_SHIFT + 's', (Fl_Callback
*)dummy_cb, 0, FL_MENU_DIVIDER );
//menu->add( "File/E&xit", FL_CTRL + 'q', (Fl_Callback *)dummy_cb, 0 );
//menu->add( "&View", 0, 0, 0, FL_SUBMENU );
menu->add( "Data", FL_CTRL+'z', (Fl_Callback *)view_toggle_cb, &show_data,
FL_MENU_TOGGLE|FL_MENU_VALUE );
menu->add( "Blocks", FL_CTRL+'b', (Fl_Callback *)view_toggle_cb, &show_boxes,
FL_MENU_TOGGLE|FL_MENU_VALUE );
//menu->add( "View/Clock", FL_CTRL+'c', (Fl_Callback *)view_toggle_cb,
&show_clock, FL_MENU_TOGGLE|FL_MENU_VALUE );
menu->add( "Grid", FL_CTRL + 'c', (Fl_Callback *)view_toggle_cb,
&show_grid, FL_MENU_TOGGLE|FL_MENU_VALUE );
menu->add( "Occupancy", FL_CTRL + 'o', (Fl_Callback *)view_toggle_cb,
&show_occupancy, FL_MENU_TOGGLE|FL_MENU_VALUE );
menu->add( "Tree", FL_CTRL + 't', (Fl_Callback *)view_toggle_cb,
&show_quadtree, FL_MENU_TOGGLE|FL_MENU_VALUE );
//menu->add( "Help", 0, 0, 0, FL_SUBMENU );
//menu->add( "Help/About Stage...", FL_CTRL + 'f', (Fl_Callback *)dummy_cb );
//menu->add( "Help/HTML Documentation", FL_CTRL + 'g', (Fl_Callback
*)dummy_cb );
show(); // must do this so that the GL context is created before configuring
GL
// set gl state that won't change every redraw
glClearColor ( 0.7, 0.7, 0.8, 1.0);
glDisable(GL_LIGHTING);
glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_LESS);
glCullFace( GL_BACK );
glEnable (GL_CULL_FACE);
glEnable( GL_BLEND );
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_LINE_SMOOTH );
glHint (GL_LINE_SMOOTH_HINT, GL_FASTEST);
glDepthMask(GL_TRUE);
// install a font
gl_font( FL_HELVETICA, 12 );
// start the timer that causes regular redraws
Fl::add_timeout( 0.1, timer_cb, this);
}
bool StgWorldGui::RealTimeUpdate()
{
// puts( "RTU" );
bool res = StgWorld::RealTimeUpdate();
Fl::check();
return res;
}
bool StgWorldGui::Update()
{
// puts( "RTU" );
bool res = StgWorld::Update();
Fl::check();
return res;
}
void StgWorldGui::AddModel( StgModel* mod )
{
mod->InitGraphics();
StgWorld::AddModel( mod );
}
StgModel* StgWorldGui::Select( int x, int y )
{
// render all models in a unique color
make_current(); // make sure the GL context is current
glClearColor ( 0,0,0,1 );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glDisable(GL_DITHER);
// render all top-level, draggable models in a color that is their
// id + a 100% alpha value
for( GList* it=StgWorld::children; it; it=it->next )
{
StgModel* mod = (StgModel*)it->data;
if( mod->gui_mask & STG_MOVE_TRANS )
{
uint32_t col = (mod->id | 0xFF000000);
glColor4ubv( (GLubyte*)&col );
mod->DrawPicker();
}
}
// read the color of the pixel in the back buffer under the mouse
// pointer
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT,viewport);
uint32_t id;
glReadPixels( x,viewport[3]-y,1,1,
GL_RGBA,GL_UNSIGNED_BYTE,(void*)&id );
// strip off the alpha channel byte to retrieve the model id
id &= 0x00FFFFFF;
StgModel* mod = (StgModel*)
g_hash_table_lookup( models_by_id, &id );
printf("%p %s %d\n", mod, mod ? mod->Token() : "", id );
glEnable(GL_DITHER);
glClearColor ( 0.7, 0.7, 0.8, 1.0);
if( mod ) // we clicked on a root model
{
// if it's already selected
if( GList* link = g_list_find( selected_models, mod ) )
{
// remove it from the selected list
selected_models =
g_list_remove_link( selected_models, link );
mod->disabled = false;
}
else
{
selected_models = g_list_prepend( selected_models, mod );
mod->disabled = true;
}
invalidate();
}
return mod;
}
void StgWorldGui::CanvasToWorld( int px, int py,
double *wx, double *wy, double* wz )
{
// convert from window pixel to world coordinates
//int width = widget->allocation.width;
int viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
GLdouble modelview[16];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
GLdouble projection[16];
glGetDoublev(GL_PROJECTION_MATRIX, projection);
GLfloat pz;
glReadPixels( px, h()-py, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &pz );
gluUnProject( px, w()-py, pz, modelview, projection, viewport, wx,wy,wz );
//printf( "Z: %.2f\n", pz );
//printf( "FINAL: x:%.2f y:%.2f z:%.2f\n",
// *wx,*wy,zz );
}
int StgWorldGui::handle(int event)
{
switch(event)
{
case FL_MOUSEWHEEL:
if( selected_models )
{
// rotate all selected models
for( GList* it = selected_models; it; it=it->next )
{
StgModel* mod = (StgModel*)it->data;
mod->AddToPose( 0,0,0, 0.1*(double)Fl::event_dy() );
}
redraw();
}
else
{
scale -= 0.5 * (double)Fl::event_dy();
if( scale < 1 )
scale = 1;
invalidate();
}
return 1;
case FL_MOVE: // moused moved while no button was pressed
//printf( "mouse moved %d %d\n", Fl::event_x(), Fl::event_y() );
//printf( "mouse delta %d %d\n", Fl::event_dx(), Fl::event_dy() );
if( Fl::event_state( FL_CTRL ) )
{
int dx = Fl::event_x() - startx;
int dy = Fl::event_y() - starty;
stheta -= 0.01 * (double)dy;
sphi += 0.01 * (double)dx;
stheta = constrain( stheta, 0, M_PI/2.0 );
invalidate();
}
if( Fl::event_state( FL_ALT ) )
{
int dx = Fl::event_x() - startx;
int dy = Fl::event_y() - starty;
panx -= dx;
pany += dy;
invalidate();
}
startx = Fl::event_x();
starty = Fl::event_y();
return 1;
case FL_PUSH: // button pressed
puts( "PUSH" );
switch( Fl::event_button() )
{
case 1:
startx = Fl::event_x();
starty = Fl::event_y();
if( Select( startx, starty ) )
dragging = true;
return 1;
case 3:
{
puts( "POPUP" );
menu->popup();
return 1;
}
default:
return 0;
}
case FL_DRAG: // mouse moved while button was pressed
{
int dx = Fl::event_x() - startx;
int dy = Fl::event_y() - starty;
if( Fl::event_button() == 1 )
{
if( selected_models && dragging )
{
double sx,sy,sz;
CanvasToWorld( startx, starty,
&sx, &sy, &sz );
double x,y,z;
CanvasToWorld( Fl::event_x(), Fl::event_y(),
&x, &y, &z );
// move all selected models to the mouse pointer
for( GList* it = selected_models; it; it=it->next )
{
StgModel* mod = (StgModel*)it->data;
mod->AddToPose( x-sx, y-sy, 0, 0 );
}
}
else
{
panx -= dx;
pany += dy;
}
}
startx = Fl::event_x();
starty = Fl::event_y();
invalidate();
}
return 1;
case FL_RELEASE: // mouse button released
// unselect everyone unless shift is pressed
if( ! Fl::event_state( FL_SHIFT ) )
{
for( GList* it=selected_models; it; it=it->next )
((StgModel*)it->data)->disabled = false;
g_list_free( selected_models );
selected_models = NULL;
dragging = false;
invalidate();
}
return 1;
case FL_FOCUS :
case FL_UNFOCUS :
//.... Return 1 if you want keyboard events, 0 otherwise
return 1;
case FL_KEYBOARD:
switch( Fl::event_key() )
{
case 'p': // pause
paused = !paused;
break;
case ' ': // space bar
sphi = stheta = 0.0;
invalidate();
break;
case FL_Left: panx += 10; break;
case FL_Right: panx -= 10; break;
case FL_Down: pany += 10; break;
case FL_Up: pany -= 10; break;
default:
return 0; // keypress unhandled
}
invalidate();
return 1;
//case FL_SHORTCUT:
///... shortcut, key is in Fl::event_key(), ascii in Fl::event_text()
// ... Return 1 if you understand/use the shortcut event, 0 otherwise...
//return 1;
default:
// pass other events to the base class...
printf( "EVENT %d\n", event );
return Fl_Gl_Window::handle(event);
}
}
void StgWorldGui::FixViewport(int W,int H)
{
glLoadIdentity();
glViewport(0,0,W,H);
}
void StgWorldGui::draw()
{
if (!valid())
{
valid(1);
FixViewport(w(), h());
double zclip = hypot(width, height) * scale;
double pixels_width = w();//canvas->allocation.width;
double pixels_height = h();//canvas->allocation.height ;
//double width = w() / scale;
//double height = h() / scale;
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
// map the viewport to pixel units by scaling it the same as the window
// glOrtho( 0, pixels_width,
// 0, pixels_height,
glOrtho( -pixels_width/2.0, pixels_width/2.0,
-pixels_height/2.0, pixels_height/2.0,
0, zclip );
/* glFrustum( 0, pixels_width, */
/* 0, pixels_height, */
/* 0.1, zclip ); */
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
glTranslatef( -panx,
-pany,
-zclip / 2.0 );
glRotatef( RTOD(-stheta), 1,0,0);
//glTranslatef( -panx * cos(sphi) - pany*sin(sphi),
// panx*sin(sphi) - pany*cos(sphi), 0 );
glRotatef( RTOD(sphi), 0.0, 0.0, 1.0); // rotate about z - pitch
// meter scale
glScalef ( scale, scale, scale ); // zoom
}
// Clear screen to bg color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
// Draw 'X' in fg color
//glColor3f(fg, fg, fg);
//glBegin(GL_LINE_STRIP); glVertex2f(w(), h()); glVertex2f(-w(),-h());
glEnd();
//glBegin(GL_LINE_STRIP); glVertex2f(w(),-h()); glVertex2f(-w(), h());
glEnd();
//gluLookAt( 0,0,10,
// 0,0,0,
// 0,1,0 );
/* gluLookAt( win->panx, */
/* win->pany + win->stheta, */
/* 10, */
/* win->panx, */
/* win->pany, */
/* 0, */
/* sin(win->sphi), */
/* cos(win->sphi), */
/* 0 ); */
// if( follow_selection && selected_models )
// {
// glTranslatef( 0,0,-zclip/2.0 );
// // meter scale
// glScalef ( scale, scale, scale ); // zoom
// // get the pose of the model at the head of the selected models
// // list
// stg_pose_t gpose;
// ((StgModel*)selected_models->data)->GetGlobalPose( &gpose );
// //glTranslatef( -gpose.x + (pixels_width/2.0)/scale,
// // -gpose.y + (pixels_height/2.0)/scale,
// // -zclip/2.0 );
// // pixel scale
// glTranslatef( -gpose.x,
// -gpose.y,
// 0 );
// }
// else
// {
// pixel scale
//glTranslatef( 0,0, -MAX(width,height) );
// TODO - rotate around the mouse pointer or window center, not the
//origin - the commented code is close, but not quite right
//glRotatef( RTOD(sphi), 0.0, 0.0, 1.0); // rotate about z - pitch
//glTranslatef( -click_point.x, -click_point.y, 0 ); // shift back
//printf( "panx %f pany %f scale %.2f stheta %.2f sphi %.2f\n",
// panx, pany, scale, stheta, sphi );
//}
// // draw the world size rectangle in white
// // draw the floor a little pushed into the distance so it doesn't z-fight
with the
// models
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1.0, 1.0);
glColor3f( 1,1,1 );
glRectf( -width/2.0, -height/2.0,
width/2.0, height/2.0 );
glDisable(GL_POLYGON_OFFSET_FILL);
// draw the model bounding boxes
//g_hash_table_foreach( models, (GHFunc)model_draw_bbox, NULL);
//PRINT_DEBUG1( "Colorstack depth %d",
// colorstack.Length() );
if( show_quadtree || show_occupancy )
{
glDisable( GL_LINE_SMOOTH );
glLineWidth( 1 );
glPushMatrix();
glTranslatef( -width/2.0, -height/2.0, 1 );
glScalef( 1.0/ppm, 1.0/ppm, 0 );
glPolygonMode( GL_FRONT, GL_LINE );
colorstack.Push(1,0,0);
if( show_occupancy )
this->bgrid->Draw( false );
if( show_quadtree )
this->bgrid->Draw( true );
colorstack.Pop();
glPopMatrix();
glEnable( GL_LINE_SMOOTH );
}
colorstack.Push( 1, 0, 0 );
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glLineWidth( 4 );
for( GList* it=selected_models; it; it=it->next )
{
((StgModel*)it->data)->DrawSelected();
//((StgModel*)it->data)->DrawPicker();
}
colorstack.Pop();
glLineWidth( 1 );
// draw the models
GList* it;
if( show_boxes )
for( it=StgWorld::children; it; it=it->next )
((StgModel*)it->data)->Draw();
// draw the models' data
if( show_data )
for( it=StgWorld::children; it; it=it->next )
((StgModel*)it->data)->DrawData();
// draw anything in the assorted displaylist list
// for( it = dl_list; it; it=it->next )
// {
// int dl = (int)it->data;
// printf( "Calling dl %d\n", dl );
// glCallList( dl );
// }
}
void StgWorldGui::draw_overlay()
{
if( show_clock )
{
char clockstr[50];
ClockString( clockstr, 50 );
glPushMatrix();
glLoadIdentity();
colorstack.Push( 0,0,0 ); // black
gl_draw( clockstr, -w()/2.0 + 5, -h()/2 + 5 );
colorstack.Pop();
glPopMatrix();
}
}
void StgWorldGui::resize(int X,int Y,int W,int H)
{
Fl_Gl_Window::resize(X,Y,W,H);
FixViewport(W,H);
invalidate();
}
Index: stest.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/stest.cc,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -C2 -d -r1.1.2.12 -r1.1.2.13
*** stest.cc 1 Nov 2007 07:18:53 -0000 1.1.2.12
--- stest.cc 17 Nov 2007 23:31:22 -0000 1.1.2.13
***************
*** 42,52 ****
exit(0);
}
!
// initialize libstage
- //StgWorld::Init( &argc, &argv );
//StgWorld world;
! StgWorldGtk::Init( &argc, &argv );
! StgWorldGtk world;
world.Load( argv[1] );
--- 42,56 ----
exit(0);
}
!
!
! StgWorld::Init( &argc, &argv );
!
! StgWorldGui world(800, 700, "Stage Test Program");
!
// initialize libstage
//StgWorld world;
! //StgWorldGtk::Init( &argc, &argv );
! //StgWorldGtk world;
world.Load( argv[1] );
***************
*** 92,96 ****
robots[i].ranger = (StgModelRanger*)world.GetModel( namebuf );
assert(robots[i].ranger);
! robots[i].ranger->Subscribe();
}
--- 96,100 ----
robots[i].ranger = (StgModelRanger*)world.GetModel( namebuf );
assert(robots[i].ranger);
! //robots[i].ranger->Subscribe();
}
***************
*** 106,111 ****
// StgModelLaser* laser = lasers[1];
! while( world.RealTimeUpdate() )
! // while( world.Update() )
{
// nothing
--- 110,115 ----
// StgModelLaser* laser = lasers[1];
! while( world.RealTimeUpdate() )
! // while( world.Update() )
{
// nothing
***************
*** 113,116 ****
--- 117,121 ----
//if( ! world.RealTimeUpdate() )
//break;
+
for( int i=0; i<POPSIZE; i++ )
Index: model_laser.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/model_laser.cc,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -C2 -d -r1.1.2.9 -r1.1.2.10
*** model_laser.cc 1 Nov 2007 07:18:53 -0000 1.1.2.9
--- model_laser.cc 17 Nov 2007 23:31:21 -0000 1.1.2.10
***************
*** 15,20 ****
#include <sys/time.h>
! #include <math.h>
! #include <GL/gl.h>
#include "stage.hh"
--- 15,20 ----
#include <sys/time.h>
! //#include <math.h>
! // #include <GL/gl.h>
#include "stage.hh"
Index: model.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/model.cc,v
retrieving revision 1.1.2.11
retrieving revision 1.1.2.12
diff -C2 -d -r1.1.2.11 -r1.1.2.12
*** model.cc 1 Nov 2007 07:18:53 -0000 1.1.2.11
--- model.cc 17 Nov 2007 23:31:21 -0000 1.1.2.12
***************
*** 110,117 ****
#include <limits.h>
! #include <assert.h>
! #include <math.h>
! #include <GL/gl.h>
! #include <glib.h>
//#define DEBUG
--- 110,117 ----
#include <limits.h>
! //#include <assert.h>
! //#include <math.h>
! //#include <GL/gl.h>
! //#include <glib.h>
//#define DEBUG
***************
*** 236,240 ****
this->dl_body = glGenLists(1);
this->dl_data = glGenLists(1);
! this->dl_grid = glGenLists(1);
}
--- 236,240 ----
this->dl_body = glGenLists(1);
this->dl_data = glGenLists(1);
! this->dl_grid = glGenLists(1);
}
***************
*** 710,713 ****
--- 710,719 ----
void StgModel::DrawData( void )
{
+ if( this->data_dirty )
+ {
+ this->DataVisualize();
+ this->data_dirty = false;
+ }
+
glPushMatrix();
***************
*** 716,720 ****
gl_pose_shift( &this->geom.pose );
! //glCallList( this->dl_data );
glCallList( this->dl_raytrace );
--- 722,726 ----
gl_pose_shift( &this->geom.pose );
! glCallList( this->dl_data );
glCallList( this->dl_raytrace );
***************
*** 750,754 ****
glPushMatrix();
!
// move into this model's local coordinate frame
gl_pose_shift( &this->pose );
--- 756,760 ----
glPushMatrix();
!
// move into this model's local coordinate frame
gl_pose_shift( &this->pose );
***************
*** 763,773 ****
glCallList( this->dl_body );
- if( this->data_dirty )
- {
- this->DataVisualize();
- this->data_dirty = false;
- }
-
- glCallList( this->dl_data );
//if( this->say_string )
--- 769,772 ----
***************
*** 775,779 ****
// Call my various display lists
! //if( win->show_grid ) && this->gui_grid )
//glCallList( this->dl_grid );
--- 774,778 ----
// Call my various display lists
! //if( this->gui_grid )
//glCallList( this->dl_grid );
***************
*** 789,792 ****
--- 788,815 ----
}
+ void StgModel::DrawPicker( void )
+ {
+ //PRINT_DEBUG1( "Drawing %s", token );
+
+ glPushMatrix();
+
+ // move into this model's local coordinate frame
+ gl_pose_shift( &this->pose );
+ gl_pose_shift( &this->geom.pose );
+
+ // draw the boxes
+ for( GList* it=blocks; it; it=it->next )
+ ((StgBlock*)it->data)->DrawSolid() ;
+
+ // shift up the CS to the top of this model
+ gl_coord_shift( 0,0, this->geom.size.z, 0 );
+
+ // recursively draw the tree below this model
+ LISTMETHOD( this->children, StgModel*, DrawPicker );
+
+ glPopMatrix(); // drop out of local coords
+ }
+
+
// call this when the local physical appearance has changed
void StgModel::DrawBody( void )
***************
*** 1276,1279 ****
--- 1299,1305 ----
void StgModel::UpdatePose( void )
{
+ if( disabled )
+ return;
+
//stg_velocity_t gvel;
//this->GetGlostg_model_get_global_velocity( mod, &gvel );
--- NEW FILE: Makefile.fl ---
HEADERS = \
../config.h \
colors.h \
stage.hh \
worldfile.hh
CC = g++
OBS = \
ancestor.o \
block.o \
blockgrid.o \
gl.o \
glcolorstack.o \
model.o \
model_callbacks.o \
model_laser.o \
model_load.o \
model_position.o \
model_props.o \
model_ranger.o \
stage.o \
stest.o \
typetable.o \
world.o \
worldfile.o \
worldgui.o
CPPFLAGS= -g -Wall -I.. -I../replace
-I/System/Library/Frameworks/OpenGL.framework/Headers `fltk-config --use-gl
--cflags` `pkg-config --cflags glib-2.0 gdk-pixbuf-2.0`
LIBS= `fltk-config --use-gl --ldflags` `pkg-config --libs gdk-pixbuf-2.0`
-framework OpenGL
#-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
all: stagefl
stagefl: $(OBS) $(HEADERS)
g++ -o $@ $(CPPFLAGS) $(OBS) $(LIBS)
clean :
rm -f *.o *.lo
Index: gl.c
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/gl.c,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -C2 -d -r1.1.2.1 -r1.1.2.2
*** gl.c 4 Oct 2007 01:17:02 -0000 1.1.2.1
--- gl.c 17 Nov 2007 23:31:21 -0000 1.1.2.2
***************
*** 1,3 ****
! #include <GL/gl.h>
#include "stage.hh"
--- 1,3 ----
! #include <gl.h>
#include "stage.hh"
Index: world.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/world.cc,v
retrieving revision 1.1.2.13
retrieving revision 1.1.2.14
diff -C2 -d -r1.1.2.13 -r1.1.2.14
*** world.cc 1 Nov 2007 07:18:53 -0000 1.1.2.13
--- world.cc 17 Nov 2007 23:31:22 -0000 1.1.2.14
***************
*** 55,60 ****
#include <string.h> // for strdup(3)
#include <locale.h>
! #define DEBUG
#include "stage.hh"
--- 55,61 ----
#include <string.h> // for strdup(3)
#include <locale.h>
+ #include <glib-object.h> // fior g_type_init() used by GDKPixbuf objects
! //#define DEBUG
#include "stage.hh"
***************
*** 206,209 ****
--- 207,211 ----
double localratio = (double)interval_sim / (double)average_real_interval;
+ #ifdef DEBUG
if( hours > 0 )
snprintf( str, maxlen, "Time: %uh%02um%02u.%03us\t[%.1f]\tsubs: %d %s",
***************
*** 218,221 ****
--- 220,235 ----
total_subs,
paused ? "--PAUSED--" : "" );
+ #else
+ if( hours > 0 )
+ snprintf( str, maxlen, "%uh%02um%02u.%03us\t[%.1f] %s",
+ hours, minutes, seconds, msec,
+ localratio,
+ paused ? "--PAUSED--" : "" );
+ else
+ snprintf( str, maxlen, "%02um%02u.%03us\t[%.1f] %s",
+ minutes, seconds, msec,
+ localratio,
+ paused ? "--PAUSED--" : "" );
+ #endif
}
***************
*** 366,378 ****
//PRINT_DEBUG( "StgWorld::Update()" );
! if( interval_real > 0 || updates % 100 == 0 )
! {
! char str[64];
! ClockString( str, 64 );
! //printf( "Stage timestep: %lu simtime: %lu\n",
! // updates, sim_time );
! printf( "\r%s", str );
! fflush(stdout);
! }
// update any models that are due to be updated
--- 380,392 ----
//PRINT_DEBUG( "StgWorld::Update()" );
! // if( interval_real > 0 || updates % 100 == 0 )
! // {
! // char str[64];
! // ClockString( str, 64 );
! // //printf( "Stage timestep: %lu simtime: %lu\n",
! // // updates, sim_time );
! // printf( "\r%s", str );
! // fflush(stdout);
! // }
// update any models that are due to be updated
Index: block.cc
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/block.cc,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -C2 -d -r1.1.2.4 -r1.1.2.5
*** block.cc 30 Oct 2007 01:01:48 -0000 1.1.2.4
--- block.cc 17 Nov 2007 23:31:21 -0000 1.1.2.5
***************
*** 1,6 ****
- #include <GL/gl.h>
-
//#define DEBUG 1
-
#include "stage.hh"
--- 1,3 ----
***************
*** 52,58 ****
for( unsigned int p=0; p<pt_count; p++ )
! {
! glVertex3f( pts[p].x, pts[p].y, zmax );
! }
glEnd();
--- 49,53 ----
for( unsigned int p=0; p<pt_count; p++ )
! glVertex3f( pts[p].x, pts[p].y, zmax );
glEnd();
***************
*** 109,112 ****
--- 104,113 ----
}
+ void StgBlock::DrawSolid( void )
+ {
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL );
+ DrawSides();
+ DrawTop();
+ }
void StgBlock::Map()
Index: Makefile.manual
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/Makefile.manual,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -C2 -d -r1.1.2.6 -r1.1.2.7
*** Makefile.manual 1 Nov 2007 07:18:53 -0000 1.1.2.6
--- Makefile.manual 17 Nov 2007 23:31:21 -0000 1.1.2.7
***************
*** 25,33 ****
typetable.o \
world.o \
! worldgtk.o \
worldfile.o
CPPFLAGS= -g -Wall -I.. -I../replace `pkg-config --cflags gtkglext-1.0`
! LIBS= `pkg-config --libs gtkglext-1.0`
--- 25,36 ----
typetable.o \
world.o \
! worldfltk.o \
worldfile.o
+ # worldgtk.o
+
+
CPPFLAGS= -g -Wall -I.. -I../replace `pkg-config --cflags gtkglext-1.0`
! LIBS= `pkg-config --libs gtkglext-1.0`
-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
Index: stage.hh
===================================================================
RCS file: /cvsroot/playerstage/code/stage/libstage/Attic/stage.hh,v
retrieving revision 1.1.2.13
retrieving revision 1.1.2.14
diff -C2 -d -r1.1.2.13 -r1.1.2.14
*** stage.hh 1 Nov 2007 07:18:53 -0000 1.1.2.13
--- stage.hh 17 Nov 2007 23:31:22 -0000 1.1.2.14
***************
*** 48,53 ****
#include <string.h>
#include <glib.h>
! #include <glib-object.h>
! #include <gtk/gtk.h>
// todo: consider moving these out
--- 48,53 ----
#include <string.h>
#include <glib.h>
! //#include <glib-object.h>
! //#include <gtk/gtk.h>
// todo: consider moving these out
***************
*** 755,759 ****
void* arg_off; // argument to callback_off
//int default_state; // disabled = 0
! GtkAction* action; // action associated with this toggle, may be NULL
char* path;
} stg_property_toggle_args_t;
--- 755,759 ----
void* arg_off; // argument to callback_off
//int default_state; // disabled = 0
! //GtkAction* action; // action associated with this toggle, may be NULL
char* path;
} stg_property_toggle_args_t;
***************
*** 1165,1168 ****
--- 1165,1169 ----
{ return this->token; }
+ // todo - should these be pure virtual?
virtual void PushColor( stg_color_t col ){} // does nothing
virtual void PushColor( double r, double g, double b, double a ){} // does
nothing
***************
*** 1229,1233 ****
public:
! StgWorld( void );
StgWorld( const char* token,
--- 1230,1234 ----
public:
! StgWorld( void );
StgWorld( const char* token,
***************
*** 1435,1438 ****
--- 1436,1440 ----
virtual void Save( void );
virtual void Draw( void );
+ virtual void DrawPicker( void );
virtual void DrawBody( void );
virtual void DrawData( void );
***************
*** 1726,1729 ****
--- 1728,1732 ----
void Draw(); // draw the block in OpenGL
+ void DrawSolid(); // draw the block in OpenGL as a solid single color
stg_point_t* pts; //< points defining a polygon
***************
*** 1762,1771 ****
//#if _INCLUDE_GTK // TODO - conditional compilation of the GUI
! #include <GL/gl.h>
! #include <GL/glu.h>
! #include <GL/glext.h>
! #include <GL/glx.h> // for XFont for drawing text from X fonts
! #include <gtk/gtk.h>
! #include <gtk/gtkgl.h>
// COLOR STACK CLASS
--- 1765,1774 ----
//#if _INCLUDE_GTK // TODO - conditional compilation of the GUI
! #include <gl.h>
! #include <glu.h>
! //#include <GL/glext.h>
! //#include <glx.h> // for XFont for drawing text from X fonts
! //#include <gtk/gtk.h>
! //#include <gtk/gtkgl.h>
// COLOR STACK CLASS
***************
*** 1790,1976 ****
};
! // WORLDGTK class - a world plus a GUI
! class StgWorldGtk : public StgWorld
! {
! public:
! StgWorldGtk( void );
! virtual ~StgWorldGtk( void );
! void Configure( int width,
! int height,
! double xscale,
! double yscale,
! double xcenter,
! double ycenter );
! static void Init( int* argc, char** argv[] );
! virtual void Load( const char* filename );
! virtual void Save( void );
! virtual void Draw( void );
! virtual bool Update( void );
! virtual bool RealTimeUpdate( void );
! virtual void PushColor( stg_color_t col )
! { colorstack.Push( col ); }
! virtual void PushColor( double r, double g, double b, double a )
! { colorstack.Push( r,g,b,a ); }
! virtual void PopColor()
! { colorstack.Pop(); }
! void AddViewItem( const gchar *name,
! const gchar *label,
! const gchar *tooltip,
! GCallback callback,
! gboolean is_active,
! void* userdata );
! protected:
! GlColorStack colorstack;
! virtual void AddModel( StgModel* mod );
! private:
! GList* selected_models; ///< a list of models that are currently selected
by the user
! // Gtk stuff
! GtkWidget* frame;
! GtkWidget *layout;
! GtkWidget *menu_bar;
! //GtkWidget* scrolled_win;
! // The status bar widget
! GtkStatusbar *status_bar;
! GtkProgressBar *perf_bar;
! GtkProgressBar *rt_bar;
! GtkLabel *clock_label;
! GtkActionGroup *action_group;
! // the main drawing widget
! GtkWidget* canvas;
! int dirty;
! int draw_list;
! int debug_list;
! char clock[512];
! stg_radians_t stheta; ///< view rotation about x axis
! stg_radians_t sphi; ///< view rotation about x y axis
! double scale; ///< view scale
! double panx; ///< pan along x axis in meters
! double pany; ///< pan along y axis in meters
! stg_point_t click_point; ///< The place where the most recent
! ///< mouse click happened, in world coords
! GtkStatusbar* statusbar;
! GtkLabel* timelabel;
! gboolean dragging;
! int frame_series;
! int frame_index;
! int frame_callback_tag;
! int frame_interval;
! stg_image_format_t frame_format;
! stg_pose_t selection_pose_start;
! stg_point_3d_t selection_pointer_start;
! GList* toggle_list;
! int wf_section;
! GdkGLConfig *glconfig;
! // mouse click position, for dragging
! int beginX, beginY;
! private:
! stg_msec_t redraw_interval;
! guint timer_handle;
! bool follow_selection;
bool show_quadtree;
bool show_occupancy;
- bool show_fill;
bool show_geom;
! bool show_polygons;
bool show_grid;
bool show_data;
bool show_cfg;
bool show_cmd;
- bool show_alpha;
bool show_thumbnail;
- bool show_bboxes;
bool show_trails;
! public:
! void SetFollowSelection( bool b ){ this->follow_selection = b; dirty=true; }
! void SetShowFill( bool b ){ this->show_fill = b; dirty=true; }
! void SetShowGeom( bool b ){ this->show_geom = b; dirty=true; }
! void SetShowPolygons( bool b ){ this->show_polygons = b; dirty=true; }
! void SetShowAlpha( bool b ){ this->show_alpha = b; dirty=true; }
! void SetShowThumbnail( bool b ){ this->show_thumbnail = b; dirty=true;}
! void SetShowBBoxes( bool b ){ this->show_bboxes = b; dirty=true; }
! void SetShowTrails( bool b ){ this->show_trails = b; dirty=true; }
! void SetShowGrid( bool b ){ this->show_grid = b; dirty=true; }
! void SetShowQuadtree( bool b ){ this->show_quadtree = b; dirty=true; }
! void SetShowOccupancy( bool b ){ this->show_occupancy = b; dirty=true; }
!
!
! // signal handlers
! //gboolean EvDelete( GtkWidget *widget );
! //void EvDestroy( GtkWidget *widget, GdkEvent *event );
! void Realize( GtkWidget *widget );
! //void EvConfigure( GtkWidget *widget );
!
! void CanvasMotionNotify( GdkEventMotion *event );
! void CanvasButtonPress( GdkEventButton *event );
! void CanvasButtonRelease( GdkEventButton *event );
!
! gboolean DialogQuit( GtkWindow* parent );
! void SetTitle( char* txt );
! void RenderClock();
! void SetWindowSize( unsigned int w, unsigned int h );
!
! // exporting screen shots as image files
! void ExportSequenceStart();
! void ExportSequenceStop();
! void ExportSequence();
! void ExportWindow();
! void SetExportFormat( stg_image_format_t format);
! void SetExportInterval( int interval );
!
! void Derotate();
! void Zoom( double multiplier ); ///< multiply the scale factor by the
argument
! void SetScale( double scale ); ///< set the scale factor directly
! void AboutBox();
! GtkWidget* GetCanvas(){ return canvas; }
!
! void PushModelStatus( StgModel* mod, char* verb );
! void PopModelStatus();
! // convert canvas window pixel coordinate to 3d world coordinate
! void CanvasToWorld( int px, int py,
! double *wx, double *wy, double* wz );
! StgModel* NearestRootModel( double wx, double wy );
! };
! /** @} */
! //#ifndef TRUE
! //#define TRUE 1
! //#endif
! //#ifndef FALSE
! //#define FALSE 0
! //#endif
#define THOUSAND (1e3)
--- 1793,2061 ----
};
! // // WORLDGTK class - a world plus a GUI
! // class StgWorldGtk : public StgWorld
! // {
! // public:
! // StgWorldGtk( void );
! // virtual ~StgWorldGtk( void );
! // void Configure( int width,
! // int height,
! // double xscale,
! // double yscale,
! // double xcenter,
! // double ycenter );
! // static void Init( int* argc, char** argv[] );
! // virtual void Load( const char* filename );
! // virtual void Save( void );
! // virtual void Draw( void );
! // virtual bool Update( void );
! // virtual bool RealTimeUpdate( void );
! // virtual void PushColor( stg_color_t col )
! // { colorstack.Push( col ); }
! // virtual void PushColor( double r, double g, double b, double a )
! // { colorstack.Push( r,g,b,a ); }
! // virtual void PopColor()
! // { colorstack.Pop(); }
! // void AddViewItem( const gchar *name,
! // const gchar *label,
! // const gchar *tooltip,
! // GCallback callback,
! // gboolean is_active,
! // void* userdata );
! // protected:
! // GlColorStack colorstack;
! // virtual void AddModel( StgModel* mod );
! // private:
! // GList* selected_models; ///< a list of models that are currently
selected by the user
! // // Gtk stuff
! // GtkWidget* frame;
! // GtkWidget *layout;
! // GtkWidget *menu_bar;
! // //GtkWidget* scrolled_win;
! // // The status bar widget
! // GtkStatusbar *status_bar;
! // GtkProgressBar *perf_bar;
! // GtkProgressBar *rt_bar;
! // GtkLabel *clock_label;
! // GtkActionGroup *action_group;
! // // the main drawing widget
! // GtkWidget* canvas;
! // int dirty;
! // int draw_list;
! // int debug_list;
! // char clock[512];
! // stg_radians_t stheta; ///< view rotation about x axis
! // stg_radians_t sphi; ///< view rotation about x y axis
! // double scale; ///< view scale
! // double panx; ///< pan along x axis in meters
! // double pany; ///< pan along y axis in meters
! // stg_point_t click_point; ///< The place where the most recent
! // ///< mouse click happened, in world coords
! // GtkStatusbar* statusbar;
! // GtkLabel* timelabel;
! // gboolean dragging;
! // int frame_series;
! // int frame_index;
! // int frame_callback_tag;
! // int frame_interval;
! // stg_image_format_t frame_format;
! // stg_pose_t selection_pose_start;
! // stg_point_3d_t selection_pointer_start;
! // GList* toggle_list;
! // int wf_section;
! // //GdkGLConfig *glconfig;
! // // mouse click position, for dragging
! // int beginX, beginY;
! // private:
! // stg_msec_t redraw_interval;
! // guint timer_handle;
! // bool follow_selection;
! // bool show_quadtree;
! // bool show_occupancy;
! // bool show_fill;
! // bool show_geom;
! // bool show_polygons;
! // bool show_grid;
! // bool show_data;
! // bool show_cfg;
! // bool show_cmd;
! // bool show_alpha;
! // bool show_thumbnail;
! // bool show_bboxes;
! // bool show_trails;
+ // public:
+ // void SetFollowSelection( bool b ){ this->follow_selection = b;
dirty=true; }
+ // void SetShowFill( bool b ){ this->show_fill = b; dirty=true; }
+ // void SetShowGeom( bool b ){ this->show_geom = b; dirty=true; }
+ // void SetShowPolygons( bool b ){ this->show_polygons = b; dirty=true; }
+ // void SetShowAlpha( bool b ){ this->show_alpha = b; dirty=true; }
+ // void SetShowThumbnail( bool b ){ this->show_thumbnail = b; dirty=true;}
+ // void SetShowBBoxes( bool b ){ this->show_bboxes = b; dirty=true; }
+ // void SetShowTrails( bool b ){ this->show_trails = b; dirty=true; }
+ // void SetShowGrid( bool b ){ this->show_grid = b; dirty=true; }
+ // void SetShowQuadtree( bool b ){ this->show_quadtree = b; dirty=true; }
+ // void SetShowOccupancy( bool b ){ this->show_occupancy = b; dirty=true; }
+
+
+ // // signal handlers
+ // //gboolean EvDelete( GtkWidget *widget );
+ // //void EvDestroy( GtkWidget *widget, GdkEvent *event );
+ // void Realize( GtkWidget *widget );
+ // //void EvConfigure( GtkWidget *widget );
+
+ // void CanvasMotionNotify( GdkEventMotion *event );
+ // void CanvasButtonPress( GdkEventButton *event );
+ // void CanvasButtonRelease( GdkEventButton *event );
+
+ // gboolean DialogQuit( GtkWindow* parent );
+ // void SetTitle( char* txt );
+ // void RenderClock();
+ // void SetWindowSize( unsigned int w, unsigned int h );
+
+ // // exporting screen shots as image files
+ // void ExportSequenceStart();
+ // void ExportSequenceStop();
+ // void ExportSequence();
+ // void ExportWindow();
+ // void SetExportFormat( stg_image_format_t format);
+ // void SetExportInterval( int interval );
+
+ // void Derotate();
+ // void Zoom( double multiplier ); ///< multiply the scale factor by the
argument
+ // void SetScale( double scale ); ///< set the scale factor directly
+ // void AboutBox();
+ // GtkWidget* GetCanvas(){ return canvas; }
+
+ // void PushModelStatus( StgModel* mod, char* verb );
+ // void PopModelStatus();
+
+ // // convert canvas window pixel coordinate to 3d world coordinate
+ // void CanvasToWorld( int px, int py,
+ // double *wx, double *wy, double* wz );
+
+ // StgModel* NearestRootModel( double wx, double wy );
+
+ // };
+
+ /** @} */
+
+ /* FLTK code - experimenting with replacing GTK with a more portable
+ and less bulky framework */
+ #include <FL/Fl.H>
+ #include <FL/Fl_Window.H>
+ #include <FL/Fl_Value_Slider.H>
+ #include <FL/Fl_Menu_Button.H>
+ #include <FL/Fl_Gl_Window.H>
+ #include <FL/gl.h>
+
+ class StgGlWindow;
+
+ class StgWorldGui : public StgWorld, public Fl_Gl_Window
+ {
+ protected:
+ GlColorStack colorstack;
+ double scale;
+
+ double fg; // foreground brightness
+ double bg; // background brightness
+ double panx, pany, stheta, sphi;
+
+ int startx, starty;
+ bool dragging;
+
+ //int overlay_sides;
+ //bool ctrl_down;
+
+ GList* selected_models; ///< a list of models that are currently selected
by the user
+
+ public:
+ StgWorldGui(int W,int H,const char*L=0);
+ StgGlWindow* gl;
+ //Fl_Menu_Bar* menubar;
+
+ bool follow_selection;
bool show_quadtree;
bool show_occupancy;
bool show_geom;
! bool show_boxes;
bool show_grid;
bool show_data;
bool show_cfg;
bool show_cmd;
bool show_thumbnail;
bool show_trails;
+ bool show_clock;
! //bool show_bboxes;
! //bool show_alpha;
! //bool show_fill;
!
! bool graphics;
! void FixViewport(int W,int H);
! virtual void draw();
! virtual void draw_overlay();
! virtual int handle( int event );
! void resize(int X,int Y,int W,int H);
! //Fl_Menu_Item* menuitems;
! Fl_Menu_Button* menu;
! void PopupMenu( int x, int y);
! // overloaded StgWorld methods
! virtual bool RealTimeUpdate();
! virtual bool Update();
! virtual void AddModel( StgModel* mod );
! void CanvasToWorld( int px, int py,
! double *wx, double *wy, double* wz );
! StgModel* Select( int x, int y );
!
! virtual void PushColor( stg_color_t col )
! { colorstack.Push( col ); }
!
! virtual void PushColor( double r, double g, double b, double a )
! { colorstack.Push( r,g,b,a ); }
!
! virtual void PopColor()
! { colorstack.Pop(); }
! };
! #ifndef TRUE
! #define TRUE 1
! #endif
!
! #ifndef FALSE
! #define FALSE 0
! #endif
#define THOUSAND (1e3)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit