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 #ifndef RVIZ_SELECTION_FORWARDS_H
00031 #define RVIZ_SELECTION_FORWARDS_H
00032
00033 #include <vector>
00034 #include <set>
00035 #include <map>
00036 #include <boost/unordered_map.hpp>
00037 #include <OGRE/OgrePixelFormat.h>
00038
00039 #include <ros/console.h>
00040
00041
00042 namespace rviz
00043 {
00044
00045 typedef uint32_t CollObjectHandle;
00046 typedef std::vector<CollObjectHandle> V_CollObject;
00047 typedef std::vector<V_CollObject> VV_CollObject;
00048 typedef std::set<CollObjectHandle> S_CollObject;
00049
00050 struct Pixel
00051 {
00052 Pixel()
00053 {
00054
00055 }
00056
00057 Pixel(int _x, int _y, uint32_t _handle)
00058 : x(_x)
00059 , y(_y)
00060 , handle(_handle)
00061 {}
00062
00063 bool operator<(const Pixel& rhs)
00064 {
00065 if (x != rhs.x)
00066 {
00067 return x < rhs.x;
00068 }
00069
00070 if (y != rhs.y)
00071 {
00072 return y < rhs.y;
00073 }
00074
00075 return handle < rhs.handle;
00076 }
00077
00078 int x;
00079 int y;
00080
00081 uint32_t handle;
00082 };
00083 typedef std::vector<Pixel> V_Pixel;
00084 typedef std::map<std::pair<int, int>, V_Pixel> MV_Pixel;
00085
00086 typedef std::set<uint64_t> S_uint64;
00087 typedef std::vector<uint64_t> V_uint64;
00088
00089 struct Picked
00090 {
00091 Picked(CollObjectHandle _handle = 0 )
00092 : handle(_handle), pixel_count(1)
00093 {
00094 }
00095
00096 CollObjectHandle handle;
00097 int pixel_count;
00098 S_uint64 extra_handles;
00099 };
00100 typedef boost::unordered_map<CollObjectHandle, Picked> M_Picked;
00101
00102
00103 inline uint32_t colorToHandle(Ogre::PixelFormat fmt, uint32_t col)
00104 {
00105 uint32_t handle = 0;
00106 if (fmt == Ogre::PF_A8R8G8B8 || fmt == Ogre::PF_X8R8G8B8)
00107 {
00108 handle = col & 0x00ffffff;
00109 }
00110 else if (fmt == Ogre::PF_R8G8B8A8)
00111 {
00112 handle = col >> 8;
00113 }
00114 else
00115 {
00116 ROS_DEBUG("Incompatible pixel format [%d]", fmt);
00117 }
00118
00119 return handle;
00120 }
00121
00122
00123 }
00124
00125 #endif