Revision: 7274
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7274&view=rev
Author:   alexcb
Date:     2009-01-15 23:15:17 +0000 (Thu, 15 Jan 2009)

Log Message:
-----------
added framework for user supplied custom visializations

Modified Paths:
--------------
    code/stage/trunk/libstage/model.cc
    code/stage/trunk/libstage/model.hh

Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc  2009-01-15 23:13:38 UTC (rev 7273)
+++ code/stage/trunk/libstage/model.cc  2009-01-15 23:15:17 UTC (rev 7274)
@@ -137,6 +137,7 @@
     data_fresh(false),
     disabled(false),
     flag_list(NULL),
+       custom_visual_list( NULL ),
     geom(),
     has_default_block( true ),
     id( Model::count++ ),
@@ -896,6 +897,19 @@
   glPopMatrix();
 }
 
+void Model::AddCustomVisualizer( CustomVisualizer* custom_visual )
+{
+       if( custom_visual )
+               custom_visual_list = g_list_append(custom_visual_list, 
custom_visual );
+}
+
+void Model::RemoveCustomVisualizer( CustomVisualizer* custom_visual )
+{
+       if( custom_visual )
+               custom_visual_list = g_list_remove(custom_visual_list, 
custom_visual );
+}
+
+
 void Model::DrawStatusTree( Camera* cam ) 
 {
   PushLocalCoords();
@@ -1143,6 +1157,11 @@
   PushLocalCoords();
   DataVisualize( cam ); // virtual function overridden by most model types  
 
+  for( GList* item = custom_visual_list; item; item = item->next ) {
+    static_cast< CustomVisualizer* >( item->data )->DataVisualize( cam );
+  }
+
+
   // and draw the children
   LISTMETHODARG( children, Model*, DataVisualizeTree, cam );
 

Modified: code/stage/trunk/libstage/model.hh
===================================================================
--- code/stage/trunk/libstage/model.hh  2009-01-15 23:13:38 UTC (rev 7273)
+++ code/stage/trunk/libstage/model.hh  2009-01-15 23:15:17 UTC (rev 7274)
@@ -34,7 +34,15 @@
   }    
 };
 
+/** Abstract class for adding visualizations to models. DataVisualize must be 
overloaded, and is then called in the models local coord system */
+class CustomVisualizer {
+public:
+       //TODO allow user to specify name - which will show up in display filter
+       virtual ~CustomVisualizer( void ) { }
+       virtual void DataVisualize( Camera* cam ) = 0;
+};
 
+
 /* Hooks for attaching special callback functions (not used as
    variables - we just need unique addresses for them.) */  
 class CallbackHooks
@@ -116,6 +124,7 @@
       instead of adding a data callback. */
   bool data_fresh;
   stg_bool_t disabled; //< if non-zero, the model is disabled  
+  GList* custom_visual_list;
   GList* flag_list;
   Geom geom;
   Pose global_pose;
@@ -343,6 +352,11 @@
   virtual ~Model();
        
   void Say( const char* str );
+  /** Attach a user supplied visualization to a model */
+  void AddCustomVisualizer( CustomVisualizer* custom_visual );
+  /** remove user supplied visualization to a model - supply the same ptr 
passed to AddCustomVisualizer */
+  void RemoveCustomVisualizer( CustomVisualizer* custom_visual );
+
        
   void Load( Worldfile* wf, int wf_entity )
   {


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:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to