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