00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef MESH_OBJECT_CPP_
00031 #define MESH_OBJECT_CPP_
00032
00033 #include <geometric_shapes_msgs/Shape.h>
00034 #include <geometry_msgs/Pose.h>
00035 #include <geometry_msgs/Point32.h>
00036
00037 #include <OGRE/OgrePrerequisites.h>
00038 #include <OGRE/OgreEntity.h>
00039
00040 #include <string>
00041
00042 namespace rviz_interaction_tools
00043 {
00044
00045
00046 class MeshObject
00047 {
00048
00049 public:
00050
00051 struct Point {
00052 float x,y,z;
00053 float r,g,b,a;
00054 };
00055
00056 MeshObject( Ogre::SceneManager* scene_manager, Ogre::SceneNode* scene_root );
00057
00058 ~MeshObject();
00059
00060 void setPose( const geometry_msgs::Pose& pose );
00061
00062 void loadMesh( std::string name, const geometric_shapes_msgs::Shape& mesh );
00063
00064
00065 void loadPoints( std::string name, const std::vector< geometry_msgs::Point32 > &points );
00066
00067 void loadMesh( std::string name, const std::vector< Point > &vertices,
00068 const std::vector<unsigned> triangles = std::vector<unsigned>() );
00069
00070 void setVisible( bool visible );
00071
00072 void setMaterialName( std::string name );
00073
00074 Ogre::Entity* getEntity() { return entity_; }
00075
00076 void clear();
00077
00078 private:
00079
00080 MeshObject( const MeshObject& );
00081 MeshObject& operator=( const MeshObject& );
00082
00083 Ogre::SceneNode *scene_node_;
00084 Ogre::MeshPtr mesh_ptr_;
00085 Ogre::Entity* entity_;
00086
00087 Ogre::SceneManager* scene_manager_;
00088 Ogre::SceneNode* scene_root_;
00089 };
00090
00091 }
00092
00093 #endif
00094