From: <rt...@us...> - 2009-03-31 17:07:42
|
Revision: 7567 http://playerstage.svn.sourceforge.net/playerstage/?rev=7567&view=rev Author: rtv Date: 2009-03-31 17:07:29 +0000 (Tue, 31 Mar 2009) Log Message: ----------- adding strip plot vis Modified Paths: -------------- code/stage/trunk/libstage/CMakeLists.txt code/stage/trunk/libstage/canvas.cc code/stage/trunk/libstage/canvas.hh code/stage/trunk/libstage/gl.cc code/stage/trunk/libstage/model.cc code/stage/trunk/libstage/model_fiducial.cc code/stage/trunk/libstage/powerpack.cc code/stage/trunk/libstage/stage.hh Modified: code/stage/trunk/libstage/CMakeLists.txt =================================================================== --- code/stage/trunk/libstage/CMakeLists.txt 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/CMakeLists.txt 2009-03-31 17:07:29 UTC (rev 7567) @@ -3,7 +3,9 @@ # for config.h include_directories(${PROJECT_BINARY_DIR}) -set( stageSrcs ancestor.cc +set( stageSrcs + vis_strip.cc + ancestor.cc block.cc blockgroup.cc camera.cc Modified: code/stage/trunk/libstage/canvas.cc =================================================================== --- code/stage/trunk/libstage/canvas.cc 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/canvas.cc 2009-03-31 17:07:29 UTC (rev 7567) @@ -125,8 +125,7 @@ glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); // install a font - //gl_font( FL_HELVETICA, 12 ); - gl_font( FL_COURIER, 12 ); + gl_font( FL_HELVETICA, 12 ); blur = false; @@ -177,7 +176,7 @@ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - fl_font( FL_HELVETICA, 12 ); + // fl_font( FL_HELVETICA, 16 ); init_done = true; } @@ -983,7 +982,7 @@ colorstack.Push( 0.8,1.0,0.8,0.85 ); // pale green glRectf( 0, height, width, 90 ); colorstack.Push( 0,0,0 ); // black - Gl::draw_string_multiline( margin, height + margin, txtWidth, 50, + Gl::draw_string_multiline( margin, height + margin, width, 50, world->EnergyString().c_str(), (Fl_Align)( FL_ALIGN_LEFT | FL_ALIGN_BOTTOM) ); colorstack.Pop(); @@ -1006,6 +1005,30 @@ } +void Canvas::EnterScreenCS() +{ + //use orthogonal projeciton without any zoom + glMatrixMode (GL_PROJECTION); + glPushMatrix(); //save old projection + glLoadIdentity (); + glOrtho( 0, w(), 0, h(), -100, 100 ); + glMatrixMode (GL_MODELVIEW); + + glPushMatrix(); + glLoadIdentity(); + glDisable( GL_DEPTH_TEST ); +} + +void Canvas::LeaveScreenCS() +{ + glEnable( GL_DEPTH_TEST ); + glPopMatrix(); + glMatrixMode (GL_PROJECTION); + glPopMatrix(); + glMatrixMode (GL_MODELVIEW); +} + + void Canvas::Screenshot() { Modified: code/stage/trunk/libstage/canvas.hh =================================================================== --- code/stage/trunk/libstage/canvas.hh 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/canvas.hh 2009-03-31 17:07:29 UTC (rev 7567) @@ -130,10 +130,15 @@ void PopColor(){ colorstack.Pop(); } void InvertView( uint32_t invertflags ); + + bool VisualizeAll(){ return ! visualizeAll; } static void TimerCallback( Canvas* canvas ); static void perspectiveCb( Fl_Widget* w, void* p ); + void EnterScreenCS(); + void LeaveScreenCS(); + void Load( Worldfile* wf, int section ); void Save( Worldfile* wf, int section ); }; Modified: code/stage/trunk/libstage/gl.cc =================================================================== --- code/stage/trunk/libstage/gl.cc 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/gl.cc 2009-03-31 17:07:29 UTC (rev 7567) @@ -21,7 +21,48 @@ coord_shift( -pose.x, -pose.y, -pose.z, 0 ); } +void Stg::Gl::draw_array( float x, float y, float w, float h, + float* data, size_t len, size_t offset, + float min, float max ) +{ + float sample_spacing = w / (float)len; + float yscale = h / (max-min); + + //printf( "min %.2f max %.2f\n", min, max ); + glBegin( GL_LINE_STRIP ); + + for( unsigned int i=0; i<len; i++ ) + glVertex3f( x + (float)i*sample_spacing, y+(data[(i+offset)%len]-min)*yscale, 0.01 ); + + glEnd(); + + + glColor3f( 0,0,0 ); + char buf[64]; + snprintf( buf, 63, "%.2f", min ); + Gl::draw_string( x,y,0,buf ); + snprintf( buf, 63, "%.2f", max ); + Gl::draw_string( x,y+h-fl_height(),0,buf ); + +} + +void Stg::Gl::draw_array( float x, float y, float w, float h, + float* data, size_t len, size_t offset ) +{ + // wild initial bounds + float smallest = 1e16; + float largest = -1e16; + + for( size_t i=0; i<len; i++ ) + { + smallest = MIN( smallest, data[i] ); + largest = MAX( largest, data[i] ); + } + + draw_array( x,y,w,h,data,len,offset,smallest,largest ); +} + void Stg::Gl::draw_string( float x, float y, float z, const char *str ) { glRasterPos3f( x, y, z ); Modified: code/stage/trunk/libstage/model.cc =================================================================== --- code/stage/trunk/libstage/model.cc 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/model.cc 2009-03-31 17:07:29 UTC (rev 7567) @@ -356,8 +356,6 @@ if( flag_list == NULL ) return NULL; - printf( "pop flag" ); - Flag* flag = (Flag*)flag_list->data; flag_list = g_list_remove( flag_list, flag ); @@ -366,7 +364,6 @@ return flag; } - void Model::ClearBlocks( void ) { UnMap(); Modified: code/stage/trunk/libstage/model_fiducial.cc =================================================================== --- code/stage/trunk/libstage/model_fiducial.cc 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/model_fiducial.cc 2009-03-31 17:07:29 UTC (rev 7567) @@ -28,7 +28,7 @@ const stg_watts_t DEFAULT_FIDUCIAL_WATTS = 10.0; //TODO make instance attempt to register an option (as customvisualizations do) -Option ModelFiducial::showFiducialData( "Show Fiducial", "show_fiducial", "", true, NULL ); +Option ModelFiducial::showFiducialData( "Show Fiducial", "show_fiducial", "", false, NULL ); /** @ingroup model Modified: code/stage/trunk/libstage/powerpack.cc =================================================================== --- code/stage/trunk/libstage/powerpack.cc 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/powerpack.cc 2009-03-31 17:07:29 UTC (rev 7567) @@ -21,6 +21,8 @@ PowerPack::PowerPack( Model* mod ) : event_vis( 32,32,1.0 ), + output_vis( 0,100,200,40, 1200, stg_color_pack(1,0,0,0), stg_color_pack(0,0,0,0.5), "energy output", "energy_input" ), + stored_vis( 0,142,200,40, 1200, stg_color_pack(0,1,0,0), stg_color_pack(0,0,0,0.5), "energy stored", "energy_stored" ), mod( mod), stored( 0.0 ), capacity( 0.0 ), @@ -28,13 +30,18 @@ { // tell the world about this new pp mod->world->AddPowerPack( this ); + mod->AddVisualizer( &event_vis, false ); -}; + mod->AddVisualizer( &output_vis, true ); + mod->AddVisualizer( &stored_vis, true ); +} PowerPack::~PowerPack() { mod->world->RemovePowerPack( this ); mod->RemoveVisualizer( &event_vis ); + mod->RemoveVisualizer( &output_vis ); + mod->RemoveVisualizer( &stored_vis ); } @@ -222,6 +229,8 @@ dissipated += amount; global_dissipated += amount; + output_vis.AppendValue( amount ); + stored_vis.AppendValue( stored ); //stg_watts_t w = j / (interval / 1e6); } Modified: code/stage/trunk/libstage/stage.hh =================================================================== --- code/stage/trunk/libstage/stage.hh 2009-03-31 07:31:00 UTC (rev 7566) +++ code/stage/trunk/libstage/stage.hh 2009-03-31 17:07:29 UTC (rev 7567) @@ -475,6 +475,11 @@ void draw_octagon( float x, float y, float w, float h, float m ); void draw_vector( double x, double y, double z ); void draw_origin( double len ); + void draw_array( float x, float y, float w, float h, + float* data, size_t len, size_t offset, + float min, float max ); + void draw_array( float x, float y, float w, float h, + float* data, size_t len, size_t offset ); /** Draws a rectangle with center at x,y, with sides of length dx,dy */ void draw_centered_rect( float x, float y, float dx, float dy ); } @@ -1380,6 +1385,7 @@ virtual void AddModel( Model* mod ); + protected: virtual void PushColor( stg_color_t col ); virtual void PushColor( double r, double g, double b, double a ); @@ -1388,8 +1394,6 @@ void DrawTree( bool leaves ); void DrawFloor(); - Canvas* GetCanvas( void ) { return canvas; } - public: WorldGui(int W,int H,const char*L=0); @@ -1411,6 +1415,8 @@ void TogglePause(){ paused = !paused; }; bool Paused(){ return( paused ); }; + Canvas* GetCanvas( void ) { return canvas; } + /** show the window - need to call this if you don't Load(). */ void Show(); @@ -1429,6 +1435,29 @@ virtual void RemoveChild( Model* mod ); }; + + class StripPlotVis : public Visualizer + { + private: + + Model* mod; + float* data; + size_t len; + size_t count; + unsigned int index; + float x,y,w,h,min,max; + stg_color_t fgcolor, bgcolor; + + public: + StripPlotVis( float x, float y, float w, float h, + size_t len, + stg_color_t fgcolor, stg_color_t bgcolor, + const char* name, const char* wfname ); + virtual ~StripPlotVis(); + virtual void Visualize( Model* mod, Camera* cam ); + void AppendValue( float value ); + }; + /** energy data packet */ class PowerPack { @@ -1460,6 +1489,8 @@ }; DissipationVis event_vis; + StripPlotVis output_vis; + StripPlotVis stored_vis; /** The model that owns this object */ Model* mod; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |