Go to the documentation of this file.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 
00031 
00032 
00033 
00034 
00035 
00036 #ifndef JSK_RVIZ_PLUGINS_TORUS_ARRAY_DISPLAY_H_
00037 #define JSK_RVIZ_PLUGINS_TORUS_ARRAY_DISPLAY_H_
00038 
00039 #ifndef Q_MOC_RUN
00040 #include <jsk_recognition_msgs/TorusArray.h>
00041 #include <rviz/properties/color_property.h>
00042 #include <rviz/properties/bool_property.h>
00043 #include <rviz/properties/float_property.h>
00044 #include <rviz/properties/int_property.h>
00045 #include <rviz/message_filter_display.h>
00046 #include <rviz/ogre_helpers/shape.h>
00047 #include <rviz/ogre_helpers/mesh_shape.h>
00048 #include <rviz/ogre_helpers/arrow.h>
00049 #include <OGRE/OgreSceneNode.h>
00050 #endif
00051 
00052 namespace jsk_rviz_plugins
00053 {
00054   struct Triangle
00055   {
00056     unsigned v1, v2, v3; 
00057   };
00058 
00059   class TorusArrayDisplay: public rviz::MessageFilterDisplay<jsk_recognition_msgs::TorusArray>
00060   {
00061     Q_OBJECT
00062   public:
00063     typedef std::shared_ptr<rviz::Arrow> ArrowPtr;
00064     typedef std::shared_ptr<rviz::MeshShape> ShapePtr;
00065     TorusArrayDisplay();
00066     virtual ~TorusArrayDisplay();
00067   protected:
00068     virtual void onInitialize();
00069     virtual void reset();
00070     void allocateShapes(const jsk_recognition_msgs::TorusArray::ConstPtr& msg);
00071     void allocateShapes(const size_t num);
00072     QColor getColor(size_t index);
00073     rviz::ColorProperty* color_property_;
00074     rviz::FloatProperty* alpha_property_;
00075     rviz::IntProperty* uv_property_;
00076     rviz::BoolProperty* auto_color_property_;
00077     rviz::BoolProperty* show_normal_property_;
00078     rviz::FloatProperty* normal_length_property_;
00079     QColor color_;
00080     double alpha_;
00081     bool auto_color_;
00082     bool show_normal_;
00083     double normal_length_;
00084     int uv_dimension_;
00085     std::vector<Ogre::SceneNode*> arrow_nodes_;
00086     std::vector<ArrowPtr> arrow_objects_;
00087     std::vector<ShapePtr> shapes_;
00088   private Q_SLOTS:
00089     void updateColor();
00090     void updateAlpha();
00091     void updateUVdimension();
00092     void updateAutoColor();
00093     void updateShowNormal();
00094     void updateNormalLength();
00095 
00096     void calcurateTriangleMesh(
00097                                int large_dimension, int small_dimension,
00098                                float large_radius, float small_radius,
00099                                Ogre::Vector3 pos, Ogre::Quaternion q,
00100                                std::vector<Triangle> &triangles,
00101                                std::vector<Ogre::Vector3> &vertices,
00102                                std::vector<Ogre::Vector3> &normals
00103                                );
00104   private:
00105     void processMessage(const jsk_recognition_msgs::TorusArray::ConstPtr& msg);
00106   };
00107 
00108 }
00109 #endif