Revision: 6777
          http://playerstage.svn.sourceforge.net/playerstage/?rev=6777&view=rev
Author:   rtv
Date:     2008-07-05 23:32:02 -0700 (Sat, 05 Jul 2008)

Log Message:
-----------
elegant fix for height, finally.

Modified Paths:
--------------
    code/stage/trunk/libstage/canvas.cc
    code/stage/trunk/libstage/model.cc
    code/stage/trunk/libstage/model_camera.cc
    code/stage/trunk/libstage/stage.hh
    code/stage/trunk/worlds/autolab.world
    code/stage/trunk/worlds/chatterbox.inc
    code/stage/trunk/worlds/everything.world
    code/stage/trunk/worlds/fasr.world
    code/stage/trunk/worlds/simple.world
    code/stage/trunk/worlds/swarmbenchmark/cave.world

Added Paths:
-----------
    code/stage/trunk/worlds/irobot.inc

Removed Paths:
-------------
    code/stage/trunk/worlds/roomba.inc

Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2008-07-06 03:49:04 UTC (rev 6776)
+++ code/stage/trunk/libstage/canvas.cc 2008-07-06 06:32:02 UTC (rev 6777)
@@ -551,6 +551,10 @@
        x += -sin( sphi ) * 100;
        y += -cos( sphi ) * 100;
        
+       // TODO - keep this map around in between frames, because the order
+       // changes slowly, and sorting an already-sorted list is
+       // usually very fast (rtv)
+
        //store all models in a sorted multimap
        std::multimap< float, StgModel* > ordered;
        for( GList* it=world->StgWorld::children; it; it=it->next ) {
@@ -564,8 +568,6 @@
        //now the models can be iterated over with:
        // for( std::multimap< float, StgModel* >::reverse_iterator i = 
ordered.rbegin(); i != ordered.rend(); i++ )
        
-       
-       
   if( ! showTrails )
     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
   

Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc  2008-07-06 03:49:04 UTC (rev 6776)
+++ code/stage/trunk/libstage/model.cc  2008-07-06 06:32:02 UTC (rev 6777)
@@ -146,17 +146,17 @@
 
 // constructor
 StgModel::StgModel( StgWorld* world,
-                   StgModel* parent,
-                   const stg_model_type_t type )
+                                                 StgModel* parent,
+                                                 const stg_model_type_t type )
   : StgAncestor()
 {
   assert( modelsbyid );
   assert( world );
   
   PRINT_DEBUG3( "Constructing model world: %s parent: %s type: %d ",
-               world->Token(), 
-               parent ? parent->Token() : "(null)",
-               type );
+                                        world->Token(), 
+                                        parent ? parent->Token() : "(null)",
+                                        type );
   
   this->parent = parent;
   this->world = world;  
@@ -176,7 +176,6 @@
   world->AddModel( this );
   
   bzero( &pose, sizeof(pose));
-  if( parent) pose.z += parent->geom.size.z;
 
   bzero( &global_pose, sizeof(global_pose));
   this->gpose_dirty = true;
@@ -194,8 +193,8 @@
   this->blocks_dl = glGenLists( 1 );
 
   this->geom.size.x = DEFAULT_GEOM_SIZEX;
-  this->geom.size.y = DEFAULT_GEOM_SIZEX;
-  this->geom.size.z = DEFAULT_GEOM_SIZEX;
+  this->geom.size.y = DEFAULT_GEOM_SIZEY;
+  this->geom.size.z = DEFAULT_GEOM_SIZEZ;
   memset( &this->geom.pose, 0, sizeof(this->geom.pose));
 
   this->obstacle_return = DEFAULT_OBSTACLERETURN;
@@ -235,7 +234,7 @@
   this->AddBlockRect( -0.5,-0.5,1,1 );
                
   PRINT_DEBUG2( "finished model %s @ %p", 
-               this->token, this );
+                                        this->token, this );
 }
 
 StgModel::~StgModel( void )
@@ -297,16 +296,16 @@
 
 
 void StgModel::AddBlock( stg_point_t* pts, 
-                        size_t pt_count,
-                        stg_meters_t zmin,
-                        stg_meters_t zmax,
-                        stg_color_t col,
-                        bool inherit_color )
+                                                                size_t 
pt_count,
+                                                                stg_meters_t 
zmin,
+                                                                stg_meters_t 
zmax,
+                                                                stg_color_t 
col,
+                                                                bool 
inherit_color )
 {
   blocks = 
     g_list_prepend( blocks, new StgBlock( this, pts, pt_count, 
-                                         zmin, zmax, 
-                                         col, inherit_color ));
+                                                                               
                                zmin, zmax, 
+                                                                               
                                col, inherit_color ));
 
   // force recreation of display lists before drawing
   NeedRedraw();
@@ -321,7 +320,7 @@
 }
 
 void StgModel::AddBlockRect( double x, double y, 
-                            double width, double height )
+                                                                         
double width, double height )
 {  
   stg_point_t pts[4];
   pts[0].x = x;
@@ -339,64 +338,64 @@
 
 
 void StgModel::Raytrace( stg_pose_t pose,
-                        stg_meters_t range, 
-                        stg_block_match_func_t func,
-                        const void* arg,
-                        stg_raytrace_sample_t* sample,
-                        bool ztest )
+                                                                stg_meters_t 
range, 
+                                                                
stg_block_match_func_t func,
+                                                                const void* 
arg,
+                                                                
stg_raytrace_sample_t* sample,
+                                                                bool ztest )
 {
   world->Raytrace( LocalToGlobal(pose),
-                  range,
-                  func,
-                  this,
-                  arg,
-                  sample,
-                  ztest );
+                                                range,
+                                                func,
+                                                this,
+                                                arg,
+                                                sample,
+                                                ztest );
 }
 
 void StgModel::Raytrace( stg_radians_t bearing,
-                        stg_meters_t range, 
-                        stg_block_match_func_t func,
-                        const void* arg,
-                        stg_raytrace_sample_t* sample,
-                        bool ztest )
+                                                                stg_meters_t 
range, 
+                                                                
stg_block_match_func_t func,
+                                                                const void* 
arg,
+                                                                
stg_raytrace_sample_t* sample,
+                                                                bool ztest )
 {
   stg_pose_t raystart;
   bzero( &raystart, sizeof(raystart));
   raystart.a = bearing;
 
   world->Raytrace( LocalToGlobal(raystart),
-                  range,
-                  func,
-                  this,
-                  arg,
-                  sample,
-                  ztest );
+                                                range,
+                                                func,
+                                                this,
+                                                arg,
+                                                sample,
+                                                ztest );
 }
 
 
 void StgModel::Raytrace( stg_radians_t bearing,
-                        stg_meters_t range, 
-                        stg_radians_t fov,
-                        stg_block_match_func_t func,
-                        const void* arg,
-                        stg_raytrace_sample_t* samples,
-                        uint32_t sample_count,
-                        bool ztest )
+                                                                stg_meters_t 
range, 
+                                                                stg_radians_t 
fov,
+                                                                
stg_block_match_func_t func,
+                                                                const void* 
arg,
+                                                                
stg_raytrace_sample_t* samples,
+                                                                uint32_t 
sample_count,
+                                                                bool ztest )
 {
   stg_pose_t raystart;
   bzero( &raystart, sizeof(raystart));
   raystart.a = bearing;
 
   world->Raytrace( LocalToGlobal(raystart),
-                  range,                  
-                  fov,
-                  func,
-                  this,
-                  arg,
-                  samples,
-                  sample_count,
-                  ztest );
+                                                range,            
+                                                fov,
+                                                func,
+                                                this,
+                                                arg,
+                                                samples,
+                                                sample_count,
+                                                ztest );
 }
 
 // utility for g_free()ing everything in a list
@@ -463,7 +462,7 @@
     {
       StgModel* child = (StgModel*)it->data;
       if( child->IsDescendent( testmod ) )
-       return true;
+                 return true;
     }
 
   // neither mod nor a child of mod matches testmod
@@ -526,26 +525,25 @@
 { 
   //printf( "model %s global pose ", token );
 
-  if( this->gpose_dirty )
-    {
-      stg_pose_t parent_pose;
+  // if( this->gpose_dirty )
+  {
+        stg_pose_t parent_pose;
 
-      // find my parent's pose
-      if( this->parent )
-       {
-         parent_pose = parent->GetGlobalPose();          
-         stg_pose_sum( &global_pose, &parent_pose, &pose );
-
-         // we are on top of our parent
-         global_pose.z += parent->geom.size.z;
-       }
-      else
-       memcpy( &global_pose, &pose, sizeof(stg_pose_t));
-
-      this->gpose_dirty = false;
-      //printf( " WORK " );
-
-    }
+        // find my parent's pose
+        if( this->parent )
+               {
+                 parent_pose = parent->GetGlobalPose();          
+                 stg_pose_sum( &global_pose, &parent_pose, &pose );
+                        
+                 // we are on top of our parent
+                 global_pose.z += parent->geom.size.z;
+               }
+        else
+               memcpy( &global_pose, &pose, sizeof(stg_pose_t));
+               
+        this->gpose_dirty = false;
+        //printf( " WORK " );
+  }
   //else
   //printf( " CACHED " );
 
@@ -671,9 +669,9 @@
     printf( "Model ");
 
   printf( "%s:%s\n", 
-         //                    id, 
-         world->Token(), 
-         token );
+                        //                     id, 
+                        world->Token(), 
+                        token );
 
   for( GList* it=children; it; it=it->next )
     ((StgModel*)it->data)->Print( prefix );
@@ -685,8 +683,8 @@
 
   static char txt[256];
   snprintf(txt, sizeof(txt), "%s @ [%.2f,%.2f,%.2f,%.2f]",  
-          token, 
-          gpose.x, gpose.y, gpose.z, gpose.a  );
+                         token, 
+                         gpose.x, gpose.y, gpose.z, gpose.a  );
 
   return txt;
 }
@@ -811,8 +809,6 @@
 
 void StgModel::DrawTrailArrows()
 {
-  //  PushColor( color );
-
   double r,g,b,a;
 
   double dx = 0.2;
@@ -838,9 +834,9 @@
       glPolygonOffset(1.0, 1.0);
 
       glBegin( GL_TRIANGLES );
-      glVertex3f( 0, -dy, 0);
-      glVertex3f( dx, 0, 0 );
-      glVertex3f( 0, +dy, 0 );
+       glVertex3f( 0, -dy, 0);
+       glVertex3f( dx, 0, 0 );
+       glVertex3f( 0, +dy, 0 );
       glEnd();
       glDisable(GL_POLYGON_OFFSET_FILL);
 
@@ -851,9 +847,9 @@
 
       glDepthMask(GL_FALSE);
       glBegin( GL_TRIANGLES );
-      glVertex3f( 0, -dy, 0);
-      glVertex3f( dx, 0, 0 );
-      glVertex3f( 0, +dy, 0 );
+       glVertex3f( 0, -dy, 0);
+       glVertex3f( dx, 0, 0 );
+       glVertex3f( 0, +dy, 0 );
       glEnd();
       glDepthMask(GL_TRUE);
 
@@ -876,25 +872,58 @@
 
 void StgModel::DrawBlocks( )
 {
+  // testing - draw bounding box
+//   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();
+
+//   // 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();
+
   // TODO - fix this!
   //if( rebuild_displaylist )
-    {
-      rebuild_displaylist = false;
+  {
+        //rebuild_displaylist = false;
       
-      glNewList( blocks_dl, GL_COMPILE );      
-      LISTMETHOD( this->blocks, StgBlock*, Draw );
-      glEndList();
-    }
+        //glNewList( blocks_dl, GL_COMPILE );  
+        LISTMETHOD( this->blocks, StgBlock*, Draw );
+        //glEndList();
+  }
 
-  glCallList( blocks_dl );
+  //glCallList( blocks_dl );
 }
 
 // move into this model's local coordinate frame
 void StgModel::PushLocalCoords()
 {
   glPushMatrix();  
+  
+  if( parent )
+        glTranslatef( 0,0, parent->geom.size.z );
+  
   gl_pose_shift( &pose );
   gl_pose_shift( &geom.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()
@@ -912,8 +941,8 @@
 
 void StgModel::DrawStatus( StgCanvas* canvas ) 
 {
-       if( say_string )          
-       {
+  if( say_string )       
+        {
                float yaw, pitch, scale;
 
                
@@ -925,14 +954,14 @@
                printf("x: %f, y: %f, z: %f, dist: %f, scale: %f\n", x, y, z, 
dist, scale);
                
                if ( canvas->perspectiveCam ) {
-                       pitch = -canvas->current_camera->pitch();
-                       yaw = -canvas->current_camera->yaw();                   
-                       scale = 500/dist;
+                 pitch = -canvas->current_camera->pitch();
+                 yaw = -canvas->current_camera->yaw();                 
+                 scale = 500/dist;
                }
                else {
-                       pitch = canvas->current_camera->pitch();
-                       yaw = canvas->current_camera->yaw();                    
-                       scale = canvas->camera.getScale();
+                 pitch = canvas->current_camera->pitch();
+                 yaw = canvas->current_camera->yaw();                  
+                 scale = canvas->camera.getScale();
                }
        
                float robotAngle = -rtod(pose.a);
@@ -990,14 +1019,14 @@
 {
   float stheta = -dtor( canvas->current_camera->pitch() );
   float sphi = dtor( canvas->current_camera->yaw() );
-       if( canvas->perspectiveCam == true ) {
-               sphi = atan2(
-                       ( pose.x - canvas->current_camera->x() )
-                       ,
-                       ( pose.y - canvas->current_camera->y() )
-               );
-               stheta = -stheta;
-       }
+  if( canvas->perspectiveCam == true ) {
+        sphi = atan2(
+                                         ( pose.x - 
canvas->current_camera->x() )
+                                         ,
+                                         ( pose.y - 
canvas->current_camera->y() )
+                                         );
+        stheta = -stheta;
+  }
 
   glEnable(GL_TEXTURE_2D);
   glBindTexture( GL_TEXTURE_2D, texture_id );
@@ -1029,104 +1058,61 @@
   glDisable(GL_TEXTURE_2D);
 }
 
-
-void StgModel::Draw( uint32_t flags, Stg::StgCanvas* canvas )
-{
-  //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 );
-
-  //   if ( ShowVisData )
-  //           DataVisualize();
-  //
-  //   if( gui_grid && (flags & STG_SHOW_GRID) )
-  //           DrawGrid();
-  //
-  //   if( flag_list && ShowFlags ) 
-  //           DrawFlagList();
-  //
-  //   if( ShowBlinken )
-  //           DrawBlinkenlights();
-  //   
-  //   if ( ShowStatus ) {
-  //           DrawStatus( canvas );
-  //   }
-
-  // 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 
-  for( GList* it=children; it; it=it->next )
-    ((StgModel*)it->data)->Draw( flags, canvas );
-
-  glPopMatrix(); // drop out of local coords
-}
-
 void StgModel::DrawFlagList( void )
 {      
-  if ( flag_list ) {
-    glPushMatrix();
+  if( flag_list  == NULL )
+        return;
+  
+  PushLocalCoords();
+  
+  GLUquadric* quadric = gluNewQuadric();
+  glTranslatef(0,0,1); // jump up
+  stg_pose_t gpose = GetGlobalPose();
+  glRotatef( 180 + rtod(-gpose.a),0,0,1 );
+  
+  
+  GList* list = g_list_copy( flag_list );
+  list = g_list_reverse(list);
+  
+  for( GList* item = list; item; item = item->next )
+        {
                
-    // move into this model's local coordinate frame
-    gl_pose_shift( &this->pose );
-    gl_pose_shift( &this->geom.pose );
-
-    GLUquadric* quadric = gluNewQuadric();
-    glTranslatef(0,0,1); // jump up
-    stg_pose_t gpose = GetGlobalPose();
-    glRotatef( 180 + rtod(-gpose.a),0,0,1 );
-
-
-    GList* list = g_list_copy( flag_list );
-    list = g_list_reverse(list);
-
-    for( GList* item = list; item; item = item->next )
-      {
-
-       StgFlag* flag = (StgFlag*)item->data;
-
-       glTranslatef( 0, 0, flag->size/2.0 );
-
-
-       PushColor( flag->color );
-       glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
-
-       gluQuadricDrawStyle( quadric, GLU_FILL );
-       gluSphere( quadric, flag->size/2.0, 4,2  );
-
-       // draw the edges darker version of the same color
-       double r,g,b,a;
-       stg_color_unpack( flag->color, &r, &g, &b, &a );
-       PushColor( stg_color_pack( r/2.0, g/2.0, b/2.0, a ));
-
-       gluQuadricDrawStyle( quadric, GLU_LINE );
-       gluSphere( quadric, flag->size/2.0, 4,2 );
-
-       PopColor();
-       PopColor();
-
-       glTranslatef( 0, 0, flag->size/2.0 );
-      }
-
-    g_list_free( list );
-
-    gluDeleteQuadric( quadric );
+               StgFlag* flag = (StgFlag*)item->data;
                
-    glPopMatrix();
-  }
+               glTranslatef( 0, 0, flag->size/2.0 );
+               
+               
+               PushColor( flag->color );
+               glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+               
+               gluQuadricDrawStyle( quadric, GLU_FILL );
+               gluSphere( quadric, flag->size/2.0, 4,2  );
+               
+               // draw the edges darker version of the same color
+               double r,g,b,a;
+               stg_color_unpack( flag->color, &r, &g, &b, &a );
+               PushColor( stg_color_pack( r/2.0, g/2.0, b/2.0, a ));
+               
+               gluQuadricDrawStyle( quadric, GLU_LINE );
+               gluSphere( quadric, flag->size/2.0, 4,2 );
+               
+               PopColor();
+               PopColor();
+               
+               glTranslatef( 0, 0, flag->size/2.0 );
+        }
+  
+  g_list_free( list );
+  
+  gluDeleteQuadric( quadric );
+  
+  PopCoords();
 }
 
+
 void StgModel::DrawBlinkenlights()
 {
-  glPushMatrix();
-       
-  // move into this model's local coordinate frame
-  gl_pose_shift( &this->pose );
-  gl_pose_shift( &this->geom.pose );
+  PushLocalCoords();
 
   GLUquadric* quadric = gluNewQuadric();
   //glTranslatef(0,0,1); // jump up
@@ -1138,7 +1124,7 @@
   for( unsigned int i=0; i<blinkenlights->len; i++ )
     {
       stg_blinkenlight_t* b = 
-       (stg_blinkenlight_t*)g_ptr_array_index( blinkenlights, i );
+                 (stg_blinkenlight_t*)g_ptr_array_index( blinkenlights, i );
       assert(b);
 
       glTranslatef( b->pose.x, b->pose.y, b->pose.z );
@@ -1146,9 +1132,9 @@
       PushColor( b->color );
 
       if( b->enabled )
-       gluQuadricDrawStyle( quadric, GLU_FILL );
+                 gluQuadricDrawStyle( quadric, GLU_FILL );
       else
-       gluQuadricDrawStyle( quadric, GLU_LINE );
+                 gluQuadricDrawStyle( quadric, GLU_LINE );
 
       gluSphere( quadric, b->size/2.0, 8,8  );
 
@@ -1156,30 +1142,26 @@
     }
 
   gluDeleteQuadric( quadric );
-  glPopMatrix();
+
+  PopCoords();
 }
 
 void StgModel::DrawPicker( void )
 {
   //PRINT_DEBUG1( "Drawing %s", token );
+  PushLocalCoords();
 
-  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 );
+  //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
+  PopCoords();
 }
 
 void StgModel::DataVisualize( void )
@@ -1192,9 +1174,6 @@
   PushLocalCoords();
   DataVisualize(); // virtual function overridden by most model types  
 
-  // shift to top of this model - why is this not necessary?
-  glTranslatef( 0,0, geom.size.z );
-
   // and draw the children
   LISTMETHOD( children, StgModel*, DataVisualizeTree );
 
@@ -1207,7 +1186,7 @@
   if ( gui_grid ) 
     {
       PushLocalCoords();
-                
+               
       stg_bounds3d_t vol;
       vol.x.min = -geom.size.x/2.0;
       vol.x.max =  geom.size.x/2.0;
@@ -1263,14 +1242,22 @@
     ((StgModel*)it->data)->GPoseDirtyTree();
 }
 
+// find the Z-axis offset of this model, by recursively summing the
+// height of its parents and any Z poses shifts
+// stg_meters_t StgModel::BaseHeight()
+// {
+//   if( ! parent )
+//      return pose.z;
+
+//   return pose.z + parent->geom.size.z + parent->BaseHeight();
+// }
+
+
 void StgModel::SetPose( stg_pose_t pose )
 {
   //PRINT_DEBUG5( "%s.SetPose(%.2f %.2f %.2f %.2f)", 
   //   this->token, pose->x, pose->y, pose->z, pose->a );
 
-  if( parent )
-    pose.z += parent->geom.size.z;
-
   // if the pose has changed, we need to do some work
   if( memcmp( &this->pose, &pose, sizeof(stg_pose_t) ) != 0 )
     {
@@ -1309,7 +1296,6 @@
   this->AddToPose( pose.x, pose.y, pose.z, pose.a );
 }
 
-
 void StgModel::SetGeom( stg_geom_t geom )
 {
   //printf( "MODEL \"%s\" SET GEOM (%.2f %.2f %.2f)[%.2f %.2f]\n",
@@ -1317,6 +1303,8 @@
   //  geom->pose.x, geom->pose.y, geom->pose.a,
   //  geom->size.x, geom->size.y );
 
+  this->gpose_dirty = true;
+
   UnMap();
 
   this->geom = geom;
@@ -1471,14 +1459,14 @@
 
 
 static bool collision_match( StgBlock* testblock, 
-                            StgModel* finder )
+                                                                         
StgModel* finder )
 { 
   return( (testblock->Model() != finder) && 
testblock->Model()->ObstacleReturn()  );
 }      
 
 
 void StgModel::PlaceInFreeSpace( stg_meters_t xmin, stg_meters_t xmax, 
-                                stg_meters_t ymin, stg_meters_t ymax )
+                                                                               
        stg_meters_t ymin, stg_meters_t ymax )
 {
   while( TestCollision( NULL, NULL ) )
     SetPose( random_pose( xmin,xmax, ymin, ymax ));            
@@ -1491,8 +1479,8 @@
 }
 
 StgModel* StgModel::TestCollision( stg_pose_t posedelta, 
-                                  stg_meters_t* hitx,
-                                  stg_meters_t* hity ) 
+                                                                               
          stg_meters_t* hitx,
+                                                                               
          stg_meters_t* hity ) 
 { 
   /*  stg_model_t* child_hit = NULL; */
 
@@ -1530,39 +1518,39 @@
 
       // loop over all edges of the block
       for( unsigned int p=0; p < pt_count; p++ ) 
-       { 
-         // find the local poses of the ends of this block edge
-         stg_point_t* pt1 = &pts[p];
-         stg_point_t* pt2 = &pts[(p+1) % pt_count];
-         double dx = pt2->x - pt1->x;
-         double dy = pt2->y - pt1->y;
+                 { 
+                        // find the local poses of the ends of this block edge
+                        stg_point_t* pt1 = &pts[p];
+                        stg_point_t* pt2 = &pts[(p+1) % pt_count];
+                        double dx = pt2->x - pt1->x;
+                        double dy = pt2->y - pt1->y;
 
-         // find the range and bearing to raytrace along the block edge
-         double range = hypot( dx, dy );
-         double bearing = atan2( dy,dx );
+                        // find the range and bearing to raytrace along the 
block edge
+                        double range = hypot( dx, dy );
+                        double bearing = atan2( dy,dx );
 
-         stg_pose_t edgepose;
-         bzero(&edgepose,sizeof(edgepose));
-         edgepose.x = pt1->x;
-         edgepose.y = pt1->y;
-         edgepose.a = bearing;
+                        stg_pose_t edgepose;
+                        bzero(&edgepose,sizeof(edgepose));
+                        edgepose.x = pt1->x;
+                        edgepose.y = pt1->y;
+                        edgepose.a = bearing;
 
-         // shift the edge ray vector by the local change in pose
-         //      stg_pose_t raypose;     
-         //      stg_pose_sum( &raypose, posedelta, &edgepose );
+                        // shift the edge ray vector by the local change in 
pose
+                        //       stg_pose_t raypose;     
+                        //       stg_pose_sum( &raypose, posedelta, &edgepose 
);
 
-         // raytrace in local coordinates
-         stg_raytrace_sample_t sample;
-         Raytrace( pose_sum( posedelta, edgepose), 
-                   range,
-                   (stg_block_match_func_t)collision_match, 
-                   NULL, 
-                   &sample,
-                   true );
+                        // raytrace in local coordinates
+                        stg_raytrace_sample_t sample;
+                        Raytrace( pose_sum( posedelta, edgepose), 
+                                                 range,
+                                                 
(stg_block_match_func_t)collision_match, 
+                                                 NULL, 
+                                                 &sample,
+                                                 true );
 
-         if( sample.block )
-           hitmod = sample.block->Model();       
-       } 
+                        if( sample.block )
+                               hitmod = sample.block->Model();   
+                 } 
     } 
 
   // re-render myself
@@ -1586,7 +1574,7 @@
       checkpoint.time = world->sim_time;
 
       if( trail->len > 100 )
-       g_array_remove_index( trail, 0 );
+                 g_array_remove_index( trail, 0 );
 
       g_array_append_val( this->trail, checkpoint );
     }
@@ -1767,7 +1755,7 @@
 
       StgModel* found = child->GetUnsubscribedModelOfType( type );
       if( found )
-       return found;
+                 return found;
     }
 
   // nothing matching below this model

Modified: code/stage/trunk/libstage/model_camera.cc
===================================================================
--- code/stage/trunk/libstage/model_camera.cc   2008-07-06 03:49:04 UTC (rev 
6776)
+++ code/stage/trunk/libstage/model_camera.cc   2008-07-06 06:32:02 UTC (rev 
6777)
@@ -341,7 +341,3 @@
 
 }
 
-void StgModelCamera::Draw( uint32_t flags, StgCanvas* canvas )
-{
-       StgModel::Draw( flags, canvas );
-}

Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh  2008-07-06 03:49:04 UTC (rev 6776)
+++ code/stage/trunk/libstage/stage.hh  2008-07-06 06:32:02 UTC (rev 6777)
@@ -1324,7 +1324,6 @@
        virtual void Shutdown();
        virtual void Update();
        virtual void UpdatePose();
-       virtual void Draw( uint32_t flags, StgCanvas* canvas );
 
        void DrawBlocksTree();
        virtual void DrawBlocks();
@@ -1738,7 +1737,6 @@
                StgModel* mod; //< model to which this block belongs
 
                stg_point_int_t* pts_global_pixels; //< points defining a 
polygon in global coords
-               //GLubyte* edge_indices;
 
                stg_color_t color;
                bool inherit_color;
@@ -2540,7 +2538,7 @@
                virtual void Update();
        
                ///Draw Camera Model - TODO
-               virtual void Draw( uint32_t flags, StgCanvas* canvas );
+               //virtual void Draw( uint32_t flags, StgCanvas* canvas );
        
                ///Draw camera visualization
                virtual void DataVisualize();

Modified: code/stage/trunk/worlds/autolab.world
===================================================================
--- code/stage/trunk/worlds/autolab.world       2008-07-06 03:49:04 UTC (rev 
6776)
+++ code/stage/trunk/worlds/autolab.world       2008-07-06 06:32:02 UTC (rev 
6777)
@@ -12,8 +12,6 @@
 include "chatterbox.inc"
 include "map.inc"
 
-size [10 10]
-
 # configure the GUI window
 window
 ( 
@@ -26,12 +24,12 @@
 map
 (
   #bitmap "bitmaps/autolab.png"
-  size [10 10]
+  size [10 10 0.5]
   boundary 1
   gui_grid 1
   name "lab"
        
-  polygon[0].fill 0
+  # block[0].fill 0
 )
 
 # define and place some grippable objects
@@ -40,8 +38,8 @@
 define mother pioneer2dx 
 (      
   laser()
-  ptz( blobfinder() )
-  gripper( pose [0.200 0.000 0.000] color "gray" )
+  #ptz( blobfinder() )
+  #gripper( pose [0.200 0.000 0 0.000] color "gray" )
 
   fiducialfinder( 
      # set to match the fiducial_key of objects you want to 
@@ -53,14 +51,14 @@
 mother
 (
   name "mother0"
-  pose [-4.029 -3.369 -325.994]
+  pose [-4.029 -3.369 0 -325.994]
   color "red"
 )
 
 mother
 (
   name "mother1"
-  pose [-3.220 -4.179 -313.105]
+  pose [-3.220 -4.179 0 -313.105]
   color "blue"
 )
 
@@ -69,34 +67,34 @@
 define bluechatterbox chatterbox ( color "blue" )
 define redchatterbox chatterbox ( color "red" )
 
-bluechatterbox( name "cbb0" pose [3.321 3.012 0.000] )
-bluechatterbox( name "cbb1" pose [3.022 4.003 -171.141] )
-bluechatterbox( name "cbb2" pose [3.144 2.468 -159.523] )
-bluechatterbox( name "cbb3" pose [1.477 3.816 -28.297] )
-bluechatterbox( name "cbb4" pose [2.323 3.390 -108.654] )
-bluechatterbox( name "cbb5" pose [2.443 3.750 -108.654] )
-bluechatterbox( name "cbb6" pose [2.638 3.435 -108.654] )
-bluechatterbox( name "cbb7" pose [2.668 3.660 -108.654] )
-bluechatterbox( name "cbb8" pose [2.263 4.020 -108.654] )
-bluechatterbox( name "cbb9" pose [2.188 3.630 -108.654] )
+bluechatterbox( name "cbb0" pose [3.321 3.012 0 0.000] )
+bluechatterbox( name "cbb1" pose [3.022 4.003 0 -171.141] )
+bluechatterbox( name "cbb2" pose [3.144 2.468 0 -159.523] )
+bluechatterbox( name "cbb3" pose [1.477 3.816 0 -28.297] )
+bluechatterbox( name "cbb4" pose [2.323 3.390 0 -108.654] )
+bluechatterbox( name "cbb5" pose [2.443 3.750 0 -108.654] )
+bluechatterbox( name "cbb6" pose [2.638 3.435 0 -108.654] )
+bluechatterbox( name "cbb7" pose [2.668 3.660 0 -108.654] )
+bluechatterbox( name "cbb8" pose [2.263 4.020 0 -108.654] )
+bluechatterbox( name "cbb9" pose [2.188 3.630 0 -108.654] )
 
 
-redchatterbox( name "cbr0" pose [2.653 4.152 0.000] )
-redchatterbox( name "cbr1" pose [2.659 3.053 0.000] )
-redchatterbox( name "cbr2" pose [3.326 3.593 -53.892] )
-redchatterbox( name "cbr3" pose [3.691 3.061 -28.297] )
-redchatterbox( name "cbr4" pose [1.632 3.232 -54.883] )
-redchatterbox( name "cbr5" pose [2.157 2.902 -54.883] )
-redchatterbox( name "cbr6" pose [2.382 2.452 -54.883] )
-redchatterbox( name "cbr7" pose [2.112 2.137 -54.883] )
-redchatterbox( name "cbr8" pose [1.827 2.347 -54.883] )
-redchatterbox( name "cbr9" pose [1.647 2.737 -54.883] )
+redchatterbox( name "cbr0" pose [2.653 4.152 0 0.000] )
+redchatterbox( name "cbr1" pose [2.659 3.053 0 0.000] )
+redchatterbox( name "cbr2" pose [3.326 3.593 0 -53.892] )
+redchatterbox( name "cbr3" pose [3.691 3.061 0 -28.297] )
+redchatterbox( name "cbr4" pose [1.632 3.232 0 -54.883] )
+redchatterbox( name "cbr5" pose [2.157 2.902 0 -54.883] )
+redchatterbox( name "cbr6" pose [2.382 2.452 0 -54.883] )
+redchatterbox( name "cbr7" pose [2.112 2.137 0 -54.883] )
+redchatterbox( name "cbr8" pose [1.827 2.347 0 -54.883] )
+redchatterbox( name "cbr9" pose [1.647 2.737 0 -54.883] )
 
 # define and place some charging stations
 
 define charger model
 (
- size [ 0.5 0.5 ]
+ size [ 0.5 0.5 0.01]
 
  color "green"
  #energy.capacity -1.0  # infinite
@@ -108,4 +106,4 @@
  fiducial_key 1
 )
 
-charger( pose [ -4.522 -4.546 0.000 ] fiducial_return 1 )
+charger( pose [ -4.522 -4.546 0 0.000 ] fiducial_return 1 )

Modified: code/stage/trunk/worlds/chatterbox.inc
===================================================================
--- code/stage/trunk/worlds/chatterbox.inc      2008-07-06 03:49:04 UTC (rev 
6776)
+++ code/stage/trunk/worlds/chatterbox.inc      2008-07-06 06:32:02 UTC (rev 
6777)
@@ -3,23 +3,24 @@
 # Author: Richard T Vaughan (rtv) 
 # $Id: chatterbox.inc,v 1.5 2008-01-15 01:25:42 rtv Exp $
 
-define chatterbox position
+include "irobot.inc"
+
+define chatterbox create
 (
   # long range IRs
-  ranger(      
-    base -0.1  
+  ranger
+  (    
     scount 3
     spose[0] [  0.050  0.0   0 ]
     spose[1] [  0.0    0.050  90 ]
     spose[2] [  0.0   -0.050 270 ]
-
     sview [ 0 1.0 20 ]
     ssize [0.01 0.03 ]
   )
 
   # short rage IRs     
-  ranger(
-    base -0.1  
+  ranger
+  (
     scount 4
     spose[0] [  0.050  0.0   0 ]
     spose[1] [  0.035  0.035  30 ]
@@ -29,12 +30,4 @@
     sview [ 0 0.5 30 ]
     ssize [0.01 0.03 ]
   )
-
-
-  mass 0.5
-  size [0.12 0.12]
-  height 0.12
-  gui_nose 1
-
-  polygon[0].fill 0
 ) 
\ No newline at end of file

Modified: code/stage/trunk/worlds/everything.world
===================================================================
--- code/stage/trunk/worlds/everything.world    2008-07-06 03:49:04 UTC (rev 
6776)
+++ code/stage/trunk/worlds/everything.world    2008-07-06 06:32:02 UTC (rev 
6777)
@@ -18,8 +18,8 @@
 window
 ( 
   size [ 1059.000 541.000 ] 
-  center [-6.333 2.011] 
-  scale 80.217 # pixels per meter
+  center [0 0.042] 
+  scale 23.827 # pixels per meter
 
   show_data 1
 )
@@ -56,7 +56,7 @@
 (
        ranger( alwayson 1 )
 
-  sicklaser( pose [0.030 0 0.220 0 ]  )
+  sicklaser( pose [0.030 0 0 0 ]  )
 
   fiducial( range_max 8 range_max_id 5 ) 
 
@@ -88,7 +88,7 @@
   color "red"
   name "redrobot_w_camera"
   pose [-5.645 3.034 0 -162.098]
-  camera()
+  camera( pose [0.060 0 0.190 0 ] )
 )
 
 trickedoutpioneer
@@ -149,12 +149,27 @@
 
 silly(         
   name "ghost" 
-  pose [-6.060 0.794 0 0] 
+  pose [-5.583 -0.684 0 0] 
   color "blue"  
   bitmap "bitmaps/ghost.png"
 )
 
-roomba(
-  name "roomba1"
+create(
+  name "create0"
+  pose [-8.844 0.019 0 0]
+)
+
+create(
+  name "create1"
+  pose [-8.625 -0.527 0 0]
+)
+
+create(
+  name "create2"
+  pose [-8.501 -1.044 0 0]
+)
+ 
+create(
+  name "create3"
   pose [-9.000 0.500 0 0]
 )

Modified: code/stage/trunk/worlds/fasr.world
===================================================================
--- code/stage/trunk/worlds/fasr.world  2008-07-06 03:49:04 UTC (rev 6776)
+++ code/stage/trunk/worlds/fasr.world  2008-07-06 06:32:02 UTC (rev 6777)
@@ -57,14 +57,13 @@
 
 define autorob pioneer2dx
 (
- sicklaser( pose [ 0.040 0 0.220 0 ] samples 30 range_max 5 laser_return 2 )
+ sicklaser( pose [ 0.040 0 0 0 ] samples 180 range_max 5 laser_return 2 )
  ctrl "fasr"
 
  #camera( pose [ 0 0 0 0 ] width 100 height 100 horizfov 70 vertfov 40 yaw 0 )
  #say "Autolab"
 )
 
-
 autorob( pose [3.273 4.908 0  1.930]  )
 autorob( pose [6.635 6.458 0 -52.629] )
 autorob( pose [6.385 5.805 0 -87.082] )

Copied: code/stage/trunk/worlds/irobot.inc (from rev 6776, 
code/stage/trunk/worlds/roomba.inc)
===================================================================
--- code/stage/trunk/worlds/irobot.inc                          (rev 0)
+++ code/stage/trunk/worlds/irobot.inc  2008-07-06 06:32:02 UTC (rev 6777)
@@ -0,0 +1,36 @@
+
+define roomba position
+(
+  size [0.33 0.33 0.1]
+
+  # this block approximates the circular shape of a Roomba
+  blocks 1
+  block[0].points 16
+  block[0].point[0] [ 0.225 0.000 ]
+  block[0].point[1] [ 0.208 0.086 ]
+  block[0].point[2] [ 0.159 0.159 ]
+  block[0].point[3] [ 0.086 0.208 ]
+  block[0].point[4] [ 0.000 0.225 ]
+  block[0].point[5] [ -0.086 0.208 ]
+  block[0].point[6] [ -0.159 0.159 ]
+  block[0].point[7] [ -0.208 0.086 ]
+  block[0].point[8] [ -0.225 0.000 ]
+  block[0].point[9] [ -0.208 -0.086 ]
+  block[0].point[10] [ -0.159 -0.159 ]
+  block[0].point[11] [ -0.086 -0.208 ]
+  block[0].point[12] [ -0.000 -0.225 ]
+  block[0].point[13] [ 0.086 -0.208 ]
+  block[0].point[14] [ 0.159 -0.159 ]
+  block[0].point[15] [ 0.208 -0.086 ]
+
+  # this bumper array VERY crudely approximates the Roomba's bumpers
+#  bumper( bcount 2  
+#        blength 0.33
+#          bpose[0] [0.12  0.12  45]
+#          bpose[1] [0.12 -0.12 -45] 
+#        )
+
+  color "gray50"
+)
+
+define create roomba( color "gray90" )
\ No newline at end of file

Deleted: code/stage/trunk/worlds/roomba.inc
===================================================================
--- code/stage/trunk/worlds/roomba.inc  2008-07-06 03:49:04 UTC (rev 6776)
+++ code/stage/trunk/worlds/roomba.inc  2008-07-06 06:32:02 UTC (rev 6777)
@@ -1,36 +0,0 @@
-
-define roomba position
-(
-  size [0.33 0.33 0.1]
-
-  # this block approximates the circular shape of a Roomba
-  blocks 1
-  block[0].points 16
-  block[0].point[0] [ 0.225 0.000 ]
-  block[0].point[1] [ 0.208 0.086 ]
-  block[0].point[2] [ 0.159 0.159 ]
-  block[0].point[3] [ 0.086 0.208 ]
-  block[0].point[4] [ 0.000 0.225 ]
-  block[0].point[5] [ -0.086 0.208 ]
-  block[0].point[6] [ -0.159 0.159 ]
-  block[0].point[7] [ -0.208 0.086 ]
-  block[0].point[8] [ -0.225 0.000 ]
-  block[0].point[9] [ -0.208 -0.086 ]
-  block[0].point[10] [ -0.159 -0.159 ]
-  block[0].point[11] [ -0.086 -0.208 ]
-  block[0].point[12] [ -0.000 -0.225 ]
-  block[0].point[13] [ 0.086 -0.208 ]
-  block[0].point[14] [ 0.159 -0.159 ]
-  block[0].point[15] [ 0.208 -0.086 ]
-
-  # this bumper array VERY crudely approximates the Roomba's bumpers
-#  bumper( bcount 2  
-#        blength 0.33
-#          bpose[0] [0.12  0.12  45]
-#          bpose[1] [0.12 -0.12 -45] 
-#        )
-
-  color "gray50"
-)
-
-define create roomba( color "gray 90" )
\ No newline at end of file

Modified: code/stage/trunk/worlds/simple.world
===================================================================
--- code/stage/trunk/worlds/simple.world        2008-07-06 03:49:04 UTC (rev 
6776)
+++ code/stage/trunk/worlds/simple.world        2008-07-06 06:32:02 UTC (rev 
6777)
@@ -28,19 +28,32 @@
 floorplan
 ( 
   name "cave"
-  size [16 16 1.5]
+  size [16 16 0.6]
   bitmap "bitmaps/cave.png"
 )
 
 pioneer2dx
-(
+(                
   pose [ -6.5 -6.5 0 45 ] 
-  sicklaser( pose [ 0.04 0 0 0 ] ) 
+  sicklaser( pose [0.04 0 0 0]
 
+#     model( size [0.1 0.1 0.1 ] color "red"
+#        model ( size [0.1 0.1 0.1 ] color "green"
+#              model (size [0.1 0.1 0.1 ] color "blue" pose [0 0 0.03 0 ]
+#                model (size [0.1 0.1 0.1 ] color "magenta"
+#             ) 
+#                   )
+#        )
+#     )
+  )
+
+ #pose [ 0.04 0 0 0 ] ) 
+
   # can refer to the robot by this name
   name "r0"
 
   # remove this if you're using Player to control the robot    
   ctrl "wander" 
+
 )
 

Modified: code/stage/trunk/worlds/swarmbenchmark/cave.world
===================================================================
--- code/stage/trunk/worlds/swarmbenchmark/cave.world   2008-07-06 03:49:04 UTC 
(rev 6776)
+++ code/stage/trunk/worlds/swarmbenchmark/cave.world   2008-07-06 06:32:02 UTC 
(rev 6777)
@@ -24,7 +24,7 @@
 floorplan
 ( 
   name "cave"
-  size [16.000 16.000 1.500]
+  size [16.000 16.000 0.600]
   pose [0 0 0 0]
   bitmap "../bitmaps/cave.png"
 )
@@ -33,11 +33,11 @@
 #define rob fancypioneer2dx  # alternative with more complex polygons
 (
 
- sicklaser( )#pose4 [ 0.040 0.000 0.01 0.000 ] samples 180 ) 
+ sicklaser( pose [ 0.040 0 0 0 ] samples 180 ) 
  # alternative laser  with more complex polygons
- # fancysicklaser( pose [ 0.040 0.000 0.000 ] samples 180 ) 
+ # fancysicklaser( pose [ 0.040 0 0 0 ] samples 180 ) 
 
- ranger( pose [ 0 0 0.170 0 ] )
+ ranger( pose [ 0 0 -0.050 0 ] )
 
  ctrl "expand" 
 )


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to