Revision: 7159
http://playerstage.svn.sourceforge.net/playerstage/?rev=7159&view=rev
Author: rtv
Date: 2008-11-19 08:22:32 +0000 (Wed, 19 Nov 2008)
Log Message:
-----------
geometry fixes & graphics tweaks
Modified Paths:
--------------
code/stage/trunk/examples/ctrl/fasr.cc
code/stage/trunk/libstage/block.cc
code/stage/trunk/libstage/blockgroup.cc
code/stage/trunk/libstage/canvas.cc
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstage/model_laser.cc
code/stage/trunk/libstage/stage.hh
code/stage/trunk/libstage/stage_internal.hh
code/stage/trunk/libstage/world.cc
code/stage/trunk/libstage/worldgui.cc
code/stage/trunk/worlds/fasr.world
code/stage/trunk/worlds/pioneer.inc
Modified: code/stage/trunk/examples/ctrl/fasr.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr.cc 2008-11-19 01:24:40 UTC (rev
7158)
+++ code/stage/trunk/examples/ctrl/fasr.cc 2008-11-19 08:22:32 UTC (rev
7159)
@@ -32,6 +32,7 @@
{
StgModelPosition* pos;
StgModelLaser* laser;
+ StgModelRanger* ranger;
StgModelBlobfinder* blobfinder;
StgModel *source, *sink;
@@ -59,6 +60,11 @@
assert( robot->laser );
robot->laser->Subscribe();
+ robot->ranger = (StgModelRanger*)mod->GetModel( "ranger:0" );
+ assert( robot->ranger );
+ robot->ranger->Subscribe();
+
+
robot->avoidcount = 0;
robot->randcount = 0;
Modified: code/stage/trunk/libstage/block.cc
===================================================================
--- code/stage/trunk/libstage/block.cc 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/libstage/block.cc 2008-11-19 08:22:32 UTC (rev 7159)
@@ -175,6 +175,9 @@
{
stg_pose_t gpose = mod->GetGlobalPose();
+ // add local offset
+ gpose = pose_sum( gpose, mod->geom.pose );
+
stg_point3_t scale;
scale.x = mod->geom.size.x / mod->blockgroup.size.x;
scale.y = mod->geom.size.y / mod->blockgroup.size.y;
Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc 2008-11-19 01:24:40 UTC (rev
7158)
+++ code/stage/trunk/libstage/blockgroup.cc 2008-11-19 08:22:32 UTC (rev
7159)
@@ -190,8 +190,6 @@
if( displaylist == 0 )
BuildDisplayList( mod );
- //gl_pose_shift( &geom.pose );
-
glCallList( displaylist );
}
Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/libstage/canvas.cc 2008-11-19 08:22:32 UTC (rev 7159)
@@ -30,6 +30,7 @@
static GLuint texName;
static bool blur = true;
+static bool init_done = false;
void StgCanvas::TimerCallback( StgCanvas* c )
{
@@ -45,11 +46,14 @@
c);
}
-StgCanvas::StgCanvas( StgWorldGui* world, int x, int y, int w, int h) :
- Fl_Gl_Window(x,y,w,h),
+StgCanvas::StgCanvas( StgWorldGui* world,
+ int x, int y,
+ int width, int height)
:
+ Fl_Gl_Window( x, y, width, height ),
// initialize Option objects
showBlinken( "Blinkenlights", "show_blinkenlights", "", true ),
showBlocks( "Blocks", "show_blocks", "b", true ),
+ showBBoxes( "Debug/Bounding boxes", "show_boundingboxes", "^b", false ),
showClock( "Clock", "show_clock", "c", true ),
showData( "Data", "show_data", "d", false ),
showFlags( "Flags", "show_flags", "l", true ),
@@ -63,33 +67,101 @@
showTrailRise( "Trails/Rising blocks", "show_trailrise", "^r", false ),
showTrails( "Trails/Fast", "show_trailfast", "^f", false ),
showTree( "Debug/Tree", "show_tree", "^t", false ),
+ showBlur( "Trails/Blur", "show_trailblur", "^d", false ),
pCamOn( "Perspective camera", "pcam_on", "r", false ),
- visualizeAll( "Visualize All", "vis_all", "^v", true )
+ visualizeAll( "Visualize All", "vis_all", "^v", true ),
+ // and the rest
+ world( world ),
+ selected_models( NULL ),
+ last_selection( NULL ),
+ wf( NULL ),
+ startx( -1 ),
+ starty( -1 ),
+ interval( 50 ), //msec between redraws
+ graphics( true )
{
end();
-
+
//show(); // must do this so that the GL context is created before
configuring GL
// but that line causes a segfault in Linux/X11! TODO: test in OS X
-
- this->world = world;
- selected_models = NULL;
- last_selection = NULL;
- wf = NULL;
-
+
perspective_camera.setPose( 0.0, -4.0, 3.0 );
current_camera = &camera;
setDirtyBuffer();
- startx = starty = -1;
- interval = 50; //msec between redraws
-
// enable accumulation buffer
mode( mode() | FL_ACCUM );
assert( can_do( FL_ACCUM ) );
+}
- graphics = true;
+void StgCanvas::InitGl()
+{
+ valid(1);
+ FixViewport(w(), h());
+
+ // 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 );
+ glEnable( GL_TEXTURE_2D );
+ glEnableClientState( GL_VERTEX_ARRAY );
+ glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+
+ // install a font
+ gl_font( FL_HELVETICA, 12 );
+
+ blur = false;
+
+ // load textures
+ std::string fullpath = FileManager::findFile( "assets/stall.png" );
+ if ( fullpath == "" )
+ {
+ PRINT_DEBUG( "Unable to load texture.\n" );
+ }
+
+ GLuint stall_id = TextureManager::getInstance().loadTexture(
fullpath.c_str() );
+ TextureManager::getInstance()._stall_texture_id = stall_id;
+
+ //TODO merge this code into the textureManager?
+ int i, j;
+ for (i = 0; i < checkImageHeight; i++)
+ for (j = 0; j < checkImageWidth; j++)
+ {
+ int even = (i+j)%2;
+ checkImage[i][j][0] = (GLubyte) 255 - 10*even;
+ checkImage[i][j][1] = (GLubyte) 255 - 10*even;
+ checkImage[i][j][2] = (GLubyte) 255;// - 5*even;
+ checkImage[i][j][3] = 255;
+ }
+
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glGenTextures(1, &texName);
+ glBindTexture(GL_TEXTURE_2D, texName);
+ glEnable(GL_TEXTURE_2D);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight,
+ 0, GL_RGBA, GL_UNSIGNED_BYTE,
checkImage);
+
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ init_done = true;
}
+
StgCanvas::~StgCanvas()
{
// nothing to do
@@ -563,6 +635,20 @@
LISTMETHOD( models_sorted, StgModel*, DrawBlocksTree );
}
+void StgCanvas::DrawBoundingBoxes()
+{
+ glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
+ glLineWidth( 2.0 );
+ glPointSize( 5.0 );
+ glDisable (GL_CULL_FACE);
+
+ world->DrawBoundingBoxTree();
+
+ glEnable (GL_CULL_FACE);
+ glLineWidth( 1.0 );
+ glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+}
+
inline void StgCanvas::resetCamera()
{
float max_x = 0, max_y = 0, min_x = 0, min_y = 0;
@@ -673,29 +759,32 @@
if( showBlocks )
DrawBlocks();
+ if( showBBoxes )
+ DrawBoundingBoxes();
+
// MOTION BLUR
-// if( showBlocks )
-// {
-// DrawBlocks();
+ if( showBlur )
+ {
+ DrawBlocks();
-// static float count = 0;
+ //static float count = 0;
-// if( ! blur )
-// {
-// blur = true;
-// glClear( GL_ACCUM_BUFFER_BIT | GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT );
-// glAccum( GL_LOAD, 1.0 );
-// }
-// else
-// {
-// glAccum( GL_MULT, 0.9 );
-// glAccum( GL_ACCUM, 0.1 );
+ if( ! blur )
+ {
+ blur = true;
+ glClear( GL_ACCUM_BUFFER_BIT | GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT );
+ glAccum( GL_LOAD, 1.0 );
+ }
+ else
+ {
+ glAccum( GL_MULT, 0.9 );
+ glAccum( GL_ACCUM, 0.1 );
-// glAccum( GL_RETURN, 1.1 );
+ glAccum( GL_RETURN, 1.1 );
-// DrawBlocks(); // outline at current location
-// }
-// }
+ DrawBlocks(); // outline at current location
+ }
+ }
// GRAY TRAILS
// if( showBlocks )
@@ -981,6 +1070,8 @@
//showTrailArrows.createMenuItem( menu, path ); // broken
showTrails.createMenuItem( menu, path );
// showTrailRise.createMenuItem( menu, path ); // broken
+ showBBoxes.createMenuItem( menu, path );
+ showBlur.createMenuItem( menu, path );
showTree.createMenuItem( menu, path );
showScreenshots.createMenuItem( menu, path );
}
@@ -997,6 +1088,8 @@
showData.Load( wf, sec );
showFlags.Load( wf, sec );
showBlocks.Load( wf, sec );
+ showBBoxes.Load( wf, sec );
+ showBlur.Load( wf, sec );
showClock.Load( wf, sec );
showFollow.Load( wf, sec );
showFootprints.Load( wf, sec );
@@ -1027,6 +1120,8 @@
showData.Save( wf, sec );
showBlocks.Save( wf, sec );
+ showBBoxes.Save( wf, sec );
+ showBlur.Save( wf, sec );
showClock.Save( wf, sec );
showFlags.Save( wf, sec );
showFollow.Save( wf, sec );
@@ -1047,7 +1142,6 @@
// static unsigned long calls=0;
// printf( "Draw calls %lu\n", ++calls );
- static bool loaded_texture = false;
//Enable the following to debug camera model
// if( loaded_texture == true && pCamOn == true )
@@ -1055,75 +1149,9 @@
if (!valid() )
{
- valid(1);
- FixViewport(w(), h());
+ if( ! init_done )
+ InitGl();
- // 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 );
- glEnable( GL_TEXTURE_2D );
- glEnableClientState( GL_VERTEX_ARRAY );
- glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
-
- blur = false;
-
- //TODO find a better home for loading textures
- if( loaded_texture == false )
- {
- std::string fullpath = FileManager::findFile(
"assets/stall.png" );
- if ( fullpath == "" ) {
- PRINT_DEBUG( "Unable to load texture.\n" );
- }
-
- GLuint stall_id =
TextureManager::getInstance().loadTexture( fullpath.c_str() );
- TextureManager::getInstance()._stall_texture_id =
stall_id;
-
- //create floor texture
- {
- //TODO merge this code into the textureManager
- int i, j;
- for (i = 0; i < checkImageHeight; i++)
- for (j = 0; j < checkImageWidth; j++)
- {
- int even = (i+j)%2;
- checkImage[i][j][0] = (GLubyte)
255 - 10*even;
- checkImage[i][j][1] = (GLubyte)
255 - 10*even;
- checkImage[i][j][2] = (GLubyte)
255;// - 5*even;
- checkImage[i][j][3] = 255;
- }
-
-
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glGenTextures(1, &texName);
- glBindTexture(GL_TEXTURE_2D, texName);
- glEnable(GL_TEXTURE_2D);
-
- glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
checkImageWidth, checkImageHeight,
- 0, GL_RGBA,
GL_UNSIGNED_BYTE, checkImage);
-
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_MODULATE);
- }
-
- loaded_texture = true;
- }
-
- // install a font
- gl_font( FL_HELVETICA, 12 );
-
if( pCamOn == true )
{
perspective_camera.setAspect( static_cast< float >(
w() ) / static_cast< float >( h() ) );
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/libstage/model.cc 2008-11-19 08:22:32 UTC (rev 7159)
@@ -923,31 +923,56 @@
}
void StgModel::DrawBlocks( )
+{
+ gl_pose_shift( &geom.pose );
+ blockgroup.CallDisplayList( this );
+}
+
+void StgModel::DrawBoundingBoxTree()
{
- // testing - draw bounding box
- // PushColor( color );
+ PushLocalCoords();
+ LISTMETHOD( children, StgModel*, DrawBoundingBoxTree );
+ DrawBoundingBox();
+ PopCoords();
+}
+
+void StgModel::DrawBoundingBox()
+{
+ gl_pose_shift( &geom.pose );
+
+ PushColor( color );
- // // bottom
- // glBegin( GL_LINE_LOOP );
- // glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, 0 );
- // glVertex3f( +geom.size.x/2.0, -geom.size.y/2.0, 0 );
- // glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, 0 );
- // glVertex3f( -geom.size.x/2.0, +geom.size.y/2.0, 0 );
- // glEnd();
+ glBegin( GL_QUAD_STRIP );
- // // top
- // glBegin( GL_LINE_LOOP );
- // glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, geom.size.z );
- // glVertex3f( +geom.size.x/2.0, -geom.size.y/2.0, geom.size.z );
- // glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, geom.size.z );
- // glVertex3f( -geom.size.x/2.0, +geom.size.y/2.0, geom.size.z );
- // glEnd();
-
- // PopColor();
-
- blockgroup.CallDisplayList( this );
-
- //printf( "calling list for %s\n", token );
+ glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, geom.size.z );
+ glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, 0 );
+
+ glVertex3f( +geom.size.x/2.0, -geom.size.y/2.0, geom.size.z );
+ glVertex3f( +geom.size.x/2.0, -geom.size.y/2.0, 0 );
+
+ glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, geom.size.z );
+ glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, 0 );
+
+ glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, geom.size.z );
+ glVertex3f( +geom.size.x/2.0, +geom.size.y/2.0, 0 );
+
+ glVertex3f( -geom.size.x/2.0, +geom.size.y/2.0, geom.size.z );
+ glVertex3f( -geom.size.x/2.0, +geom.size.y/2.0, 0 );
+
+ glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, geom.size.z );
+ glVertex3f( -geom.size.x/2.0, -geom.size.y/2.0, 0 );
+
+ glEnd();
+
+ glBegin( GL_LINES );
+ glVertex2f( -0.02, 0 );
+ glVertex2f( +0.02, 0 );
+
+ glVertex2f( 0, -0.02 );
+ glVertex2f( 0, +0.02 );
+ glEnd();
+
+ PopColor();
}
// move into this model's local coordinate frame
@@ -959,14 +984,6 @@
glTranslatef( 0,0, parent->geom.size.z );
gl_pose_shift( &pose );
-
- // useful debug - draw a point at the local origin
- // PushColor( color );
-// glPointSize( 5.0 );
-// glBegin( GL_POINTS );
-// glVertex2i( 0, 0 );
-// glEnd();
-// PopColor();
}
void StgModel::PopCoords()
@@ -984,8 +1001,8 @@
void StgModel::DrawStatus( Camera* cam )
{
- if( say_string )
- {
+ if( say_string )
+ {
float yaw, pitch;
pitch = - cam->pitch();
yaw = - cam->yaw();
@@ -1011,59 +1028,58 @@
GLboolean valid;
glGetBooleanv( GL_CURRENT_RASTER_POSITION_VALID, &valid );
- if( valid == true ) {
- GLdouble wx, wy, wz;
- GLint viewport[4];
- glGetIntegerv(GL_VIEWPORT, viewport);
-
- GLdouble modelview[16];
- glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
-
- GLdouble projection[16];
- glGetDoublev(GL_PROJECTION_MATRIX, projection);
-
+ if( valid )
+ {
+ GLdouble wx, wy, wz;
+ GLint viewport[4];
+ glGetIntegerv(GL_VIEWPORT, viewport);
+
+ GLdouble modelview[16];
+ glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
+
+ GLdouble projection[16];
+ glGetDoublev(GL_PROJECTION_MATRIX, projection);
+
//get width and height in world coords
- gluUnProject( pos[0] + w, pos[1], pos[2], modelview,
projection, viewport, &wx, &wy, &wz );
- w = wx;
- gluUnProject( pos[0], pos[1] + h, pos[2], modelview,
projection, viewport, &wx, &wy, &wz );
- h = wy;
-
-
- // calculate speech bubble margin
- const float m = h/10;
-
- // draw inside of bubble
- PushColor( BUBBLE_FILL );
- glPushAttrib( GL_POLYGON_BIT | GL_LINE_BIT );
- glPolygonMode( GL_FRONT, GL_FILL );
- glEnable( GL_POLYGON_OFFSET_FILL );
- glPolygonOffset( 1.0, 1.0 );
- gl_draw_octagon( w, h, m );
- glDisable( GL_POLYGON_OFFSET_FILL );
- PopColor();
-
- // draw outline of bubble
- PushColor( BUBBLE_BORDER );
- glLineWidth( 1 );
- glEnable( GL_LINE_SMOOTH );
- glPolygonMode( GL_FRONT, GL_LINE );
- gl_draw_octagon( w, h, m );
- glPopAttrib();
- PopColor();
-
- PushColor( BUBBLE_TEXT );
- // draw text inside the bubble
- gl_draw_string( 2.5*m, 2.5*m, 0, this->say_string );
- PopColor();
-
- }
+ gluUnProject( pos[0] + w, pos[1], pos[2], modelview,
projection, viewport, &wx, &wy, &wz );
+ w = wx;
+ gluUnProject( pos[0], pos[1] + h, pos[2], modelview,
projection, viewport, &wx, &wy, &wz );
+ h = wy;
+
+ // calculate speech bubble margin
+ const float m = h/10;
+
+ // draw inside of bubble
+ PushColor( BUBBLE_FILL );
+ glPushAttrib( GL_POLYGON_BIT | GL_LINE_BIT );
+ glPolygonMode( GL_FRONT, GL_FILL );
+ glEnable( GL_POLYGON_OFFSET_FILL );
+ glPolygonOffset( 1.0, 1.0 );
+ gl_draw_octagon( w, h, m );
+ glDisable( GL_POLYGON_OFFSET_FILL );
+ PopColor();
+
+ // draw outline of bubble
+ PushColor( BUBBLE_BORDER );
+ glLineWidth( 1 );
+ glEnable( GL_LINE_SMOOTH );
+ glPolygonMode( GL_FRONT, GL_LINE );
+ gl_draw_octagon( w, h, m );
+ glPopAttrib();
+ PopColor();
+
+ PushColor( BUBBLE_TEXT );
+ // draw text inside the bubble
+ gl_draw_string( 2.5*m, 2.5*m, 0, this->say_string );
+ PopColor();
+ }
glPopMatrix();
- }
-
- if( stall )
- {
+ }
+
+ if( stall )
+ {
DrawImage( TextureManager::getInstance()._stall_texture_id,
cam, 0.85 );
- }
+ }
}
stg_meters_t StgModel::ModelHeight()
@@ -1228,7 +1244,6 @@
PopCoords();
}
-
void StgModel::DrawGrid( void )
{
if ( gui_grid )
@@ -1250,7 +1265,6 @@
}
}
-
inline bool velocity_is_zero( stg_velocity_t& v )
{
return( !(v.x || v.y || v.z || v.a) );
@@ -1291,14 +1305,6 @@
world->NeedRedraw();
}
-// void StgModel::GPoseDirtyTree( void )
-// {
-// this->gpose_dirty = true; // our global pose may have changed
-
-// for( GList* it = this->children; it; it=it->next )
-// ((StgModel*)it->data)->GPoseDirtyTree();
-// }
-
void StgModel::SetPose( stg_pose_t pose )
{
//PRINT_DEBUG5( "%s.SetPose(%.2f %.2f %.2f %.2f)",
Modified: code/stage/trunk/libstage/model_laser.cc
===================================================================
--- code/stage/trunk/libstage/model_laser.cc 2008-11-19 01:24:40 UTC (rev
7158)
+++ code/stage/trunk/libstage/model_laser.cc 2008-11-19 08:22:32 UTC (rev
7159)
@@ -319,11 +319,13 @@
glTranslatef( 0,0, geom.size.z/2.0 ); // shoot the laser beam out at the
right height
// DEBUG - draw the origin of the laser beams
+ PushColor( 0,0,0,1.0 );
glPointSize( 4.0 );
glBegin( GL_POINTS );
glVertex2f( 0,0 );
glEnd();
-
+ PopColor();
+
// pack the laser hit points into a vertex array for fast rendering
static float* pts = NULL;
pts = (float*)g_realloc( pts, 2 * (sample_count+1) * sizeof(float));
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/libstage/stage.hh 2008-11-19 08:22:32 UTC (rev 7159)
@@ -1384,6 +1384,8 @@
void DrawBlocksTree();
virtual void DrawBlocks();
+ void DrawBoundingBox();
+ void DrawBoundingBoxTree();
virtual void DrawStatus( Camera* cam );
void DrawStatusTree( Camera* cam );
@@ -1924,6 +1926,8 @@
virtual bool Save( const char* filename );
inline virtual bool IsGUI() { return true; }
+
+ void DrawBoundingBoxTree();
void Start(){ paused = false; };
void Stop(){ paused = true; };
Modified: code/stage/trunk/libstage/stage_internal.hh
===================================================================
--- code/stage/trunk/libstage/stage_internal.hh 2008-11-19 01:24:40 UTC (rev
7158)
+++ code/stage/trunk/libstage/stage_internal.hh 2008-11-19 08:22:32 UTC (rev
7159)
@@ -81,39 +81,41 @@
void AddModel( StgModel* mod );
- Option
- showBlinken,
- showBlocks,
- showClock,
- showData,
- showFlags,
- showFollow,
- showFootprints,
- showGrid,
- showOccupancy,
- showScreenshots,
- showStatus,
- showTrailArrows,
- showTrailRise,
- showTrails,
- showTree,
- pCamOn,
- visualizeAll;
+ Option showBlinken,
+ showBlocks,
+ showClock,
+ showData,
+ showFlags,
+ showFollow,
+ showFootprints,
+ showGrid,
+ showOccupancy,
+ showScreenshots,
+ showStatus,
+ showTrailArrows,
+ showTrailRise,
+ showTrails,
+ showTree,
+ showBBoxes,
+ showBlur,
+ pCamOn,
+ visualizeAll;
public:
- StgCanvas( StgWorldGui* world, int x, int y, int W,int H);
+ StgCanvas( StgWorldGui* world, int x, int y, int width, int height);
~StgCanvas();
bool graphics;
StgWorldGui* world;
void Screenshot();
-
+ void InitGl();
void createMenuItems( Fl_Menu_Bar* menu, std::string path );
void FixViewport(int W,int H);
void DrawFloor(); //simpler floor compared to grid
void DrawBlocks();
+ void DrawBoundingBoxes();
void resetCamera();
virtual void renderFrame();
virtual void draw();
Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/libstage/world.cc 2008-11-19 08:22:32 UTC (rev 7159)
@@ -239,8 +239,17 @@
//g_hash_table_insert( blockgroups_by_entity, (gpointer)entity,
mod->blockgroup );
}
+// delete a model from the hash table
+static void destroy_sregion( gpointer dummy1, SuperRegion* sr, gpointer dummy2
)
+{
+ free(sr);
+}
+
void StgWorld::Load( const char* worldfile_path )
{
+ // note: must call Unload() before calling Load() if a world already
+ // exists TODO: unload doesn't clean up enough right now
+
GHashTable* entitytable = g_hash_table_new( g_direct_hash, g_direct_equal );
printf( " [Loading %s]", worldfile_path );
@@ -338,11 +347,6 @@
free(mod);
}
-// delete a model from the hash table
-static void destroy_sregion( gpointer dummy1, SuperRegion* sr, gpointer dummy2
)
-{
- free(sr);
-}
void StgWorld::UnLoad()
{
@@ -877,7 +881,6 @@
}
}
-
void StgWorld::Extend( stg_point3_t pt )
{
extent.x.min = MIN( extent.x.min, pt.x);
Modified: code/stage/trunk/libstage/worldgui.cc
===================================================================
--- code/stage/trunk/libstage/worldgui.cc 2008-11-19 01:24:40 UTC (rev
7158)
+++ code/stage/trunk/libstage/worldgui.cc 2008-11-19 08:22:32 UTC (rev
7159)
@@ -695,6 +695,10 @@
}
}
+void StgWorldGui::DrawBoundingBoxTree()
+{
+ LISTMETHOD( StgWorld::children, StgModel*, DrawBoundingBoxTree );
+}
void StgWorldGui::PushColor( stg_color_t col )
{ canvas->PushColor( col ); }
Modified: code/stage/trunk/worlds/fasr.world
===================================================================
--- code/stage/trunk/worlds/fasr.world 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/worlds/fasr.world 2008-11-19 08:22:32 UTC (rev 7159)
@@ -62,7 +62,7 @@
define autorob pioneer2dx
(
- sicklaser( samples 36 range_max 5 laser_return 2 )
+ sicklaser( samples 32 range_max 5 laser_return 2 )
ctrl "fasr"
)
Modified: code/stage/trunk/worlds/pioneer.inc
===================================================================
--- code/stage/trunk/worlds/pioneer.inc 2008-11-19 01:24:40 UTC (rev 7158)
+++ code/stage/trunk/worlds/pioneer.inc 2008-11-19 08:22:32 UTC (rev 7159)
@@ -131,7 +131,7 @@
# use the sonar array defined above with a small vertical offset to
# drop the sensors into the robot body
- p2dx_sonar( pose [0.04 0 -0.03 0] )
+ p2dx_sonar( pose [0 0 -0.03 0] )
# differential steering model
drive "diff"
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit