LaserScan3DPainter.cpp
Go to the documentation of this file.
00001 /*******************************************************************************
00002  *  LaserScan3DPainter.cpp
00003  *
00004  *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
00005  *           Universitaet Koblenz-Landau
00006  *
00007  *  Additional information:
00008  *  $Id: $
00009  *******************************************************************************/
00010 
00011 #include "LaserScan3DPainter.h"
00012 
00013 #include "Workers/Math/Math.h"
00014 
00015 #include "Messages/PointCloudM.h"
00016 #include "Messages/SceneGraphM.h"
00017 
00018 #include <QtOpenGL>
00019 #include <GL/glut.h>
00020 
00021 #define THIS LaserScan3DPainter
00022 
00023 THIS::THIS() : PainterPlugin( )
00024 {
00025     setName ( "3D Debug Data" );
00026     m_RawDataCounter = 0;
00027 }
00028 
00029 
00030 THIS::~THIS()
00031 {
00032 }
00033 
00034 
00035 void THIS::processMessage ( Message* newMessage )
00036 {
00037     PainterPlugin::processMessage ( newMessage );
00038     switch ( newMessage->getType() )
00039     {
00040     case MessageTypes::DEBUG_3D_M:
00041         {
00042             Debug3DM* message = Message::castTo<Debug3DM> ( newMessage );
00043             if ( message )
00044             {
00045                 m_VertexSets[message->getChannelId()] = message->getVertexSets();
00046                 m_TransformationMatrices[message->getChannelId()] = message->getTransformationMatrix();
00047                 requestRedraw();
00048             }
00049             break;
00050         }
00051 
00052     case MessageTypes::SCENE_GRAPH_M:
00053         {
00054             SceneGraphM* message = Message::castTo<SceneGraphM> ( newMessage );
00055             if ( message )
00056             {
00057                 m_RobotToWorld = message->getSceneGraph().getTransformation( "Robot", "World" );
00058             }
00059             break;
00060         }
00061 
00062     case MessageTypes::POINT_CLOUD_M:
00063         {
00064             PointCloudM* message = Message::castTo<PointCloudM> ( newMessage );
00065             if ( message )
00066             {
00067                 //                              TRACE_INFO( "PointCloudM #id: " << message->getID() << " #points: " << message->getPoints().size() );
00068                 Debug3DM::VertexSet vs;
00069                 vs.r = 1;
00070                 vs.g = 1;
00071                 vs.b = 1;
00072                 vs.paintStyle = Debug3DM::SmallDots;
00073                 vs.points = message->getPoints();
00074                 string id = "Raw PointCloudM Data" + Tracer::toString( m_RawDataCounter );
00075                 //                              m_RawDataCounter++;
00076                 m_VertexSets[id] = vector<Debug3DM::VertexSet>();
00077                 m_VertexSets[id].push_back( vs );
00078                 m_TransformationMatrices[id] = m_RobotToWorld;
00079                 //                              TRACE_INFO( m_TransformationMatrices[id].niceString(2,"m_RobotToWorld") );
00080                 requestRedraw();
00081             }
00082             break;
00083         }
00084 
00085     default:
00086         break;
00087 
00088     }
00089 }
00090 
00091 void THIS::paint ( float next2DLayer )
00092 {
00093 
00094     std::map< std::string, std::vector<Debug3DM::VertexSet> >::iterator vertexSetIt;
00095 
00096     for ( vertexSetIt = m_VertexSets.begin(); vertexSetIt != m_VertexSets.end(); vertexSetIt++ )
00097     {
00098         glPushMatrix();
00099 
00100         GLdouble glMatrix[16];
00101         m_TransformationMatrices[ vertexSetIt->first ].toColumnMajor ( glMatrix );
00102         glMultMatrixd ( glMatrix );
00103 
00104         std::vector<Debug3DM::VertexSet>& vertexSet = vertexSetIt->second;
00105         for ( unsigned i=0; i<vertexSet.size(); i++ )
00106         {
00107             float r = vertexSet[i].r;
00108             float g = vertexSet[i].g;
00109             float b = vertexSet[i].b;
00110 
00111 
00112             switch ( vertexSet[i].paintStyle )
00113             {
00114             case Debug3DM::Dots:
00115                 glPointSize ( 3.0 );
00116                 glBegin( GL_POINTS );
00117                 break;
00118 
00119             case Debug3DM::SmallDots:
00120                 glPointSize ( 1.0 );
00121                 glBegin( GL_POINTS );
00122                 break;
00123 
00124             case Debug3DM::LineStrip:
00125                 glPointSize ( 3.0 );
00126                 glBegin( GL_LINE_STRIP );
00127                 break;
00128 
00129             case Debug3DM::LineLoop:
00130                 glPointSize ( 3.0 );
00131                 glBegin( GL_LINE_LOOP );
00132                 break;
00133 
00134             case Debug3DM::DotFlowers:
00135                 glPointSize ( 3.0 );
00136                 glBegin( GL_POINTS );
00137                 break;
00138 
00139             case Debug3DM::Quads:
00140                 glBegin( GL_QUADS );
00141                 break;
00142             }
00143 
00144             for ( unsigned j=0; j<vertexSet[i].points.size(); j++ )
00145             {
00146                 glColor3f( r,g,b );
00147                 glVertex3f( vertexSet[i].points[j].x, vertexSet[i].points[j].y, vertexSet[i].points[j].z );
00148             }
00149             glEnd();
00150 
00151             switch ( vertexSet[i].paintStyle )
00152             {
00153             case Debug3DM::DotFlowers:
00154                 glLineWidth ( 1.0 );
00155                 glBegin( GL_LINES );
00156                 for ( unsigned j=0; j<vertexSet[i].points.size(); j++ )
00157                 {
00158                     glColor3f( 0.5,0.5,0.5 );
00159                     glVertex3f( vertexSet[i].points[j].x, vertexSet[i].points[j].y, 0 );
00160                     glVertex3f( vertexSet[i].points[j].x, vertexSet[i].points[j].y, vertexSet[i].points[j].z );
00161                 }
00162                 glEnd();
00163                 break;
00164 
00165         default:
00166                 break;
00167             }
00168         }
00169         glPopMatrix();
00170     }
00171 
00172 }
00173 
00174 #undef THIS


obj_rec_gui
Author(s): AGAS/agas@uni-koblenz.de
autogenerated on Mon Oct 6 2014 02:53:43