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 
00037 #ifndef JSK_RVIZ_PLUGIN_FACING_VISUALIZER_H_
00038 #define JSK_RVIZ_PLUGIN_FACING_VISUALIZER_H_
00039 
00040 #include <OGRE/OgreTexture.h>
00041 #include <OGRE/OgreSceneManager.h>
00042 #include <OGRE/OgreSceneNode.h>
00043 #include <OGRE/OgreTexture.h>
00044 #include <OGRE/OgreMaterial.h>
00045 #include <OGRE/OgreManualObject.h>
00046 #include <rviz/display_context.h>
00047 #include <ros/time.h>
00048 #include <rviz/ogre_helpers/billboard_line.h>
00049 #include <rviz/ogre_helpers/movable_text.h>
00050 #include "overlay_utils.h"
00051 
00052 namespace jsk_rviz_plugins
00053 {
00054 
00055   
00056   
00057   class SquareObject
00058   {
00059   public:
00060     typedef std::shared_ptr<SquareObject> Ptr;
00061     SquareObject(Ogre::SceneManager* manager,
00062                  double outer_radius,
00063                  double inner_radius,
00064                  std::string name);
00065     enum PolygonType
00066     {
00067       CIRCLE, SQUARE
00068     };
00069     
00070     virtual ~SquareObject();
00071     virtual Ogre::ManualObject* getManualObject();
00072     virtual void setOuterRadius(double outer_radius);
00073     virtual void setInnerRadius(double inner_radius);
00074     virtual void rebuildPolygon();
00075     virtual void setPolygonType(PolygonType type);
00076   protected:
00077     Ogre::ManualObject* manual_;
00078     Ogre::SceneManager* manager_;
00079     double outer_radius_;
00080     double inner_radius_;
00081     std::string name_;
00082     PolygonType polygon_type_;
00083   private:
00084   };
00085 
00086   class TextureObject           
00087   {
00088   public:
00089     typedef std::shared_ptr<TextureObject> Ptr;
00090     TextureObject(const int width, const int height, const std::string name);
00091     virtual ~TextureObject();
00092     virtual int getWidth() { return width_; };
00093     virtual int getHeight() { return height_; };
00094     virtual ScopedPixelBuffer getBuffer();
00095     virtual std::string getMaterialName();
00096   protected:
00097     Ogre::TexturePtr texture_;
00098     Ogre::MaterialPtr material_;
00099     const int width_;
00100     const int height_;
00101     const std::string name_;
00102   private:
00103     
00104   };
00105 
00106   class FacingObject
00107   {
00108   public:
00109     typedef std::shared_ptr<FacingObject> Ptr;
00110     FacingObject(Ogre::SceneManager* manager,
00111                  Ogre::SceneNode* parent,
00112                  double size);
00113     virtual ~FacingObject();
00114     virtual void setPosition(Ogre::Vector3& pos);
00115     virtual void setOrientation(rviz::DisplayContext* context);
00116     virtual void setOrientation(Ogre::Quaternion& rot); 
00117     virtual void update(float wall_dt, float ros_dt) = 0;
00118     virtual void setSize(double size);
00119     virtual void setEnable(bool enable);
00120     virtual void setColor(QColor color);
00121     virtual void setColor(Ogre::ColourValue color);
00122     virtual void setText(std::string text);
00123     virtual void setAlpha(double alpha);
00124   protected:
00125     virtual void updateColor() = 0;
00126     virtual void updateText() = 0;
00127     Ogre::SceneManager* scene_manager_;
00128     Ogre::SceneNode* node_;
00129     Ogre::ColourValue color_;
00130     double size_;
00131     bool enable_;
00132     std::string text_;
00133   private:
00134     
00135   };
00136 
00137   class SimpleCircleFacingVisualizer: public FacingObject
00138   {
00139   public:
00140     typedef std::shared_ptr<SimpleCircleFacingVisualizer> Ptr;
00141     SimpleCircleFacingVisualizer(Ogre::SceneManager* manager,
00142                                  Ogre::SceneNode* parent,
00143                                  rviz::DisplayContext* context,
00144                                  double size,
00145                                  std::string text = "");
00146     virtual ~SimpleCircleFacingVisualizer();
00147     virtual void update(float wall_dt, float ros_dt);
00148     virtual void reset();
00149     
00150     virtual void setSize(double size);
00151     virtual void setEnable(bool enable);
00152     virtual void setText(std::string text);
00153   protected:
00154     virtual void updateArrowsObjects(Ogre::ColourValue color);
00155     virtual void createArrows(rviz::DisplayContext* context);
00156     virtual void updateLine();
00157     virtual void updateTextUnderLine();
00158     virtual void updateText();
00159     virtual void updateColor();
00160     rviz::BillboardLine* line_;
00161     rviz::BillboardLine* text_under_line_;
00162     Ogre::ManualObject* upper_arrow_;
00163     Ogre::ManualObject* lower_arrow_;
00164     Ogre::ManualObject* left_arrow_;
00165     Ogre::ManualObject* right_arrow_;
00166     Ogre::SceneNode* upper_arrow_node_;
00167     Ogre::SceneNode* lower_arrow_node_;
00168     Ogre::SceneNode* left_arrow_node_;
00169     Ogre::SceneNode* right_arrow_node_;
00170     Ogre::MaterialPtr upper_material_;
00171     Ogre::MaterialPtr lower_material_;
00172     Ogre::MaterialPtr left_material_;
00173     Ogre::MaterialPtr right_material_;
00174     std::string upper_material_name_;
00175     std::string left_material_name_;
00176     std::string lower_material_name_;
00177     std::string right_material_name_;
00178     rviz::MovableText* msg_;
00179     Ogre::SceneNode* target_text_node_;
00180   private:
00181     
00182   };
00183   
00184   class FacingTexturedObject: public FacingObject
00185   {
00186   public:
00187     typedef std::shared_ptr<FacingTexturedObject> Ptr;
00188     FacingTexturedObject(Ogre::SceneManager* manager,
00189                          Ogre::SceneNode* parent,
00190                          double size);
00191     virtual void setSize(double size);
00192   protected:
00193     SquareObject::Ptr square_object_;
00194     TextureObject::Ptr texture_object_;
00195 
00196   private:
00197     
00198   };
00199   
00200   class GISCircleVisualizer: public FacingTexturedObject
00201   {
00202   public:
00203     typedef std::shared_ptr<GISCircleVisualizer> Ptr;
00204     GISCircleVisualizer(Ogre::SceneManager* manager,
00205                         Ogre::SceneNode* parent,
00206                         double size,
00207                         std::string text = "");
00208     virtual void setText(std::string text) { text_ = text; }
00209     virtual void update(float wall_dt, float ros_dt);
00210     virtual void setAnonymous(bool anonymous);
00211   protected:
00212     virtual void updateColor() {}
00213     virtual void updateText() {}
00214     virtual void setSize(double size);
00215     bool anonymous_;
00216     std::string text_;
00217   private:
00218   };
00219   
00220 }
00221 
00222 #endif