Revision: 8231
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8231&view=rev
Author:   rtv
Date:     2009-08-26 17:27:57 +0000 (Wed, 26 Aug 2009)

Log Message:
-----------
fixed occupancy grid bug - but a problem with powerpacks remains

Modified Paths:
--------------
    code/stage/trunk/libstage/ancestor.cc
    code/stage/trunk/libstage/block.cc
    code/stage/trunk/libstage/blockgroup.cc
    code/stage/trunk/libstage/model.cc
    code/stage/trunk/libstage/model_getset.cc
    code/stage/trunk/libstage/region.cc
    code/stage/trunk/libstage/region.hh
    code/stage/trunk/libstage/stage.hh
    code/stage/trunk/libstage/world.cc
    code/stage/trunk/webstage/webstage.cc

Modified: code/stage/trunk/libstage/ancestor.cc
===================================================================
--- code/stage/trunk/libstage/ancestor.cc       2009-08-26 08:36:23 UTC (rev 
8230)
+++ code/stage/trunk/libstage/ancestor.cc       2009-08-26 17:27:57 UTC (rev 
8231)
@@ -41,7 +41,7 @@
 
   mod->SetToken( buf );
 
-  children.push_back( mod );
+  children.insert( mod );
 
   child_type_counts[mod->type]++;
 
@@ -52,7 +52,7 @@
 {
   child_type_counts[mod->type]--;
   
-  children.erase( std::remove( children.begin(), children.end(), mod ) );
+  children.erase( mod );//std::remove( children.begin(), children.end(), mod ) 
);
 }
 
 Pose Ancestor::GetGlobalPose()

Modified: code/stage/trunk/libstage/block.cc
===================================================================
--- code/stage/trunk/libstage/block.cc  2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/block.cc  2009-08-26 17:27:57 UTC (rev 8231)
@@ -193,8 +193,6 @@
   // TODO - if called often, we may not need to generate each time
   GenerateCandidateCells();
   SwitchToTestedCells();
-  return;
-
   mapped = true;
 }
 
@@ -227,6 +225,8 @@
   rendered_cells = candidate_cells;
   candidate_cells = tmp;
 
+  // XXXX todo 
+
   mapped = true;
 }
 

Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc     2009-08-26 08:36:23 UTC (rev 
8230)
+++ code/stage/trunk/libstage/blockgroup.cc     2009-08-26 17:27:57 UTC (rev 
8231)
@@ -26,7 +26,7 @@
 
 void BlockGroup::AppendBlock( Block* block )
 {
-  blocks.push_back( block );
+  blocks.insert( block );
 }
 
 void BlockGroup::Clear()

Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc  2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/model.cc  2009-08-26 17:27:57 UTC (rev 8231)
@@ -277,8 +277,8 @@
   
   // remove myself from my parent's child list, or the world's child
   // list if I have no parent
-  ModelPtrVec& vec  = parent ? parent->children : world->children;
-  vec.erase( std::remove( vec.begin(), vec.end(), this ));
+  ModelPtrSet& vec  = parent ? parent->children : world->children;
+  vec.erase( this );//std::remove( vec.begin(), vec.end(), this ));
 
   modelsbyid.erase(id);
 
@@ -809,7 +809,9 @@
   Model* hitmod( TestCollisionTree() );
  
   if( hitmod )
-    pose = startpose; // move failed - put me back where I started
+        {
+               pose = startpose; // move failed - put me back where I started
+        }
   else
     {
       CommitTestedPose(); // shift anyrecursively commit to blocks to the new 
pose 

Modified: code/stage/trunk/libstage/model_getset.cc
===================================================================
--- code/stage/trunk/libstage/model_getset.cc   2009-08-26 08:36:23 UTC (rev 
8230)
+++ code/stage/trunk/libstage/model_getset.cc   2009-08-26 17:27:57 UTC (rev 
8231)
@@ -136,14 +136,16 @@
 
 int Model::SetParent( Model* newparent)
 {
+  
   // remove the model from its old parent (if it has one)
   if( parent )
     //this->parent->children = g_list_remove( this->parent->children, this );
-        parent->children.erase( remove( parent->children.begin(), 
parent->children.end(), this ) );
+        //parent->children.erase( remove( parent->children.begin(), 
parent->children.end(), this ) );
+        parent->children.erase( this );
  
   if( newparent )
     //newparent->children = g_list_append( newparent->children, this );
-        newparent->children.push_back( this );
+        newparent->children.insert( this );
 
   // link from the model to its new parent
   this->parent = newparent;

Modified: code/stage/trunk/libstage/region.cc
===================================================================
--- code/stage/trunk/libstage/region.cc 2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/region.cc 2009-08-26 17:27:57 UTC (rev 8231)
@@ -146,9 +146,11 @@
                                         else // draw a rectangular solid
                                                {
                                                  Cell* c = 
(Cell*)&r->cells[p+(q*REGIONWIDTH)];
-                                                 for( 
std::vector<Block*>::iterator it = c->blocks.begin();
-                                                                it != 
c->blocks.end();
-                                                                ++it )         
                         
+
+                                                 FOR_EACH( it, c->blocks )
+       //                                        for( 
std::vector<Block*>::iterator it = c->blocks.begin();
+//                                                              it != 
c->blocks.end();
+//                                                              ++it )         
                         
                                                         {
                                                                Block* block = 
*it;
                                                  

Modified: code/stage/trunk/libstage/region.hh
===================================================================
--- code/stage/trunk/libstage/region.hh 2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/region.hh 2009-08-26 17:27:57 UTC (rev 8231)
@@ -45,6 +45,7 @@
   private:
         Region* region;  
         std::vector<Block*> blocks;
+        //std::set<Block*> blocks;
         bool boundary;
   
   public:
@@ -82,30 +83,8 @@
 
                return( (Cell*)&cells[ x + y * REGIONWIDTH ] ); 
         }       
+  }; // end class Region
 
-        
-        /** Returns an initialized region, either from the top of the
-                 stack, or if the stack is empty, a newly constructed Region */
-        //static Region* GetRegion( SuperRegion* superregion );
-        // static std::stack<Region*> recycled_regions;
-
-//      static std::set<Region*> empty_regions;
-
-//      static void GarbageCollect()
-//      {
-//             FOR_EACH( it, empty_regions )
-//               {
-//                      Region* reg = *it;
-//                      //delete reg;
-                        
-//                      printf( "Garbage collecting region %p\n", reg );
-//               }
-               
-//             empty_regions.clear();
-//      }
-                 
-  };
-
   class SuperRegion
   {
         friend class World;
@@ -129,50 +108,26 @@
         void Floor();
         
         unsigned long count; // number of blocks rendered into this superregion
-  };
-
-
-  // inline void printvec( std::vector<Block*>& vec )
-  //   {
-  //    printf( "Vec: ");
-  //    for( size_t i=0; i<vec.size(); i++ )
-  //           printf( "%p ", vec[i] );
-  //    puts( "" );
-  //   }
-
+  }; // class SuperRegion;
+  
   void Cell::RemoveBlock( Block* b )
   {
         // linear time removal, but these vectors are very short, usually 1
-        // or 2 elements.  Fast removal - our strategy is to copy the last
-        // item in the vector over the item we want to remove, then pop off
-        // the tail. This avoids moving the other items in the vector. Saves
-        // maybe 1 or 2% run time in my tests.
-  
-        // find the value in the vector     
-        //   printf( "\nremoving %p\n", b );
-        //   puts( "before" );
-        //   printvec( blocks );
-  
-        // copy the last item in the vector to overwrite this one
-        copy_backward( blocks.end(), blocks.end(), std::find( blocks.begin(), 
blocks.end(), b ));
-        blocks.pop_back(); // and remove the redundant copy at the end of
-        // the vector
-
-        --region->count;
-        --region->superregion->count;           
+        // or 2 elements.       
+        blocks.erase( std::remove( blocks.begin(), blocks.end(), b ), 
blocks.end() );
         
-//      if( region->count == 0 && region->candidate_count == 0 )
-//             Region::empty_regions.insert( region );
+        --region->count;
+        --region->superregion->count;                   
   }
-
+  
   void Cell::AddBlock( Block* b )
   {
         blocks.push_back( b );  
         b->RecordRendering( this );
-
+        
         ++region->count;
         ++region->superregion->count;
-  }
+  } 
 
 
 }; // namespace Stg

Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh  2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/stage.hh  2009-08-26 17:27:57 UTC (rev 8231)
@@ -88,10 +88,10 @@
   
   /** Set of pointers to Models. */
   typedef std::set<Model*> ModelPtrSet;
-  /** Vector of pointers to Models. */
-  typedef std::vector<Model*> ModelPtrVec;
-  /** Vector of pointers to Blocks. */
-  typedef std::vector<Block*> BlockPtrVec;
+
+  /** Set of pointers to Blocks. */
+  typedef std::set<Block*> BlockPtrSet;
+
   /** Vector of pointers to Cells.*/
   typedef std::vector<Cell*> CellPtrVec;
 
@@ -679,7 +679,7 @@
     friend class Canvas; // allow Canvas access to our private members
         
   protected:
-        ModelPtrVec children;
+        ModelPtrSet children;
     bool debug;
     char* token;
         pthread_mutex_t access_mutex; ///< Used by Lock() and Unlock() to 
prevent parallel access to this model
@@ -690,7 +690,7 @@
   public:
        
     /** get the children of the this element */
-        ModelPtrVec& GetChildren(){ return children;}
+        ModelPtrSet& GetChildren(){ return children;}
     
     /** recursively call func( model, arg ) for each descendant */
     void ForEachDescendant( stg_model_callback_t func, void* arg );
@@ -842,8 +842,7 @@
         std::map<stg_point_int_t,SuperRegion*> superregions;
     SuperRegion* sr_cached; ///< The last superregion looked up by this world
         
-        // todo - test performance of std::set
-        std::vector<ModelPtrVec > update_lists;  
+        std::vector<ModelPtrSet> update_lists;  
         
     uint64_t updates; ///< the number of simulated time steps executed so far
     Worldfile* wf; ///< If set, points to the worldfile used to create this 
world
@@ -1193,7 +1192,7 @@
 
     void BuildDisplayList( Model* mod );
         
-        BlockPtrVec blocks;
+        BlockPtrSet blocks;
     Size size;
     stg_point3_t offset;
     stg_meters_t minx, maxx, miny, maxy;
@@ -1239,9 +1238,7 @@
         
         void InvalidateModelPointCache()
         {
-               for( BlockPtrVec::iterator it( blocks.begin() );
-                         it != blocks.end();
-                         ++it )
+               FOR_EACH( it, blocks )
                  (*it)->InvalidateModelPointCache();
         }
 

Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc  2009-08-26 08:36:23 UTC (rev 8230)
+++ code/stage/trunk/libstage/world.cc  2009-08-26 17:27:57 UTC (rev 8231)
@@ -716,9 +716,7 @@
                                          (cy>=0) && (cy<REGIONWIDTH) && 
                                          n > 0 )
                                {                        
-                                 for( BlockPtrVec::iterator it( 
c->blocks.begin() );
-                                                it != c->blocks.end();
-                                                ++it )                         
         
+                                 FOR_EACH( it, c->blocks )
                                         {                    
                                                Block* block( *it );
                                                assert( block );
@@ -946,7 +944,7 @@
 
 void World::ForEachCellInLine( const stg_point_int_t& start,
                                                                                
 const stg_point_int_t& end,
-                                                                               
 std::vector<Cell*>& cells )
+                                                                               
 CellPtrVec& cells )
 {  
   // line rasterization adapted from Cohen's 3D version in
   // Graphics Gems II. Should be very fast.  

Modified: code/stage/trunk/webstage/webstage.cc
===================================================================
--- code/stage/trunk/webstage/webstage.cc       2009-08-26 08:36:23 UTC (rev 
8230)
+++ code/stage/trunk/webstage/webstage.cc       2009-08-26 17:27:57 UTC (rev 
8231)
@@ -54,7 +54,7 @@
         puts( "[WebStage]  Clock tick" );
         
         world->paused = true;
-        world->sim_interval = msec * 1e3; // usec
+        world->sim_interval = msec * 1e-3; // usec
         world->Update();
 
         return true;
@@ -137,7 +137,7 @@
   virtual bool GetModelChildren(const std::string& model, 
                                                                                
  std::vector<std::string>& children)
   {
-        std::vector<Model*> c;
+        std::set<Model*> c;
 
         if(model == "")
                {
@@ -157,7 +157,7 @@
                        
                }
        
-        for( std::vector<Model*>::iterator it = c.begin();
+        for( std::set<Model*>::iterator it = c.begin();
                        it != c.end();
                        it++ )
                {               
@@ -572,21 +572,18 @@
   // add an FLTK event loop update to WebSim's implementation
   virtual void Wait()
   {
-        Fl::check();  
-        
-        while( unacknowledged_ticks || unacknowledged_pushes || 
ticks_remaining )
-               {                        
-                 printf( "event loop in wait (%d %d %d)\n",
+        do
+               {
+                 printf( " event loop in wait (%d %d %d)\r",
                                         unacknowledged_ticks, 
unacknowledged_pushes, ticks_remaining );
-
-                 event_loop( EVLOOP_NONBLOCK );
                  
-                 puts( "fl::check\n" );
-                 Fl::check();  
-               }        
+                 event_loop( EVLOOP_NONBLOCK );                 
+                 Fl::check();                    
+               }
+        while( unacknowledged_ticks || unacknowledged_pushes || 
ticks_remaining );               
   }
   
-};
+}; // close WebStage class
 
 
 int main( int argc, char** argv )
@@ -652,7 +649,10 @@
   if( usefedfile )
         ws.LoadFederationFile( fedfilename );
 
-  ws.Startup( true );
+  ws.Startup( true ); // start http server
+  
+  if( ! world->paused ) 
+        world->Start(); // start sumulation running
 
   puts( "entering main loop" );
 
@@ -671,14 +671,12 @@
                //puts( "tick done" );
                
                // update Stage
-               world->Update();
+               //world->Update();
                //puts( "update done" );
          
-               Fl::check();
-
                // wait until everyone report simulation step done
                ws.Wait();                      
-               puts( "wait done" );
+               //puts( "wait done" );
         }
 
   printf( "Webstage done.\n" );


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

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to