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
00038
00039 #ifndef PCL_VISUALIZATION_POINT_PICKING_EVENT_H_
00040 #define PCL_VISUALIZATION_POINT_PICKING_EVENT_H_
00041
00042 #include <pcl/pcl_macros.h>
00043 #include <vector>
00044
00045 #include <vtkCommand.h>
00046 class vtkRenderWindowInteractor;
00047
00048 namespace pcl
00049 {
00050 namespace visualization
00051 {
00052 class PCL_EXPORTS PointPickingCallback : public vtkCommand
00053 {
00054 public:
00055 static PointPickingCallback *New ()
00056 {
00057 return (new PointPickingCallback);
00058 }
00059
00060 PointPickingCallback () : x_ (0), y_ (0), z_ (0), idx_ (-1), pick_first_ (false) {}
00061
00063 virtual ~PointPickingCallback () {}
00064
00065 virtual void
00066 Execute (vtkObject *caller, unsigned long eventid, void*);
00067
00068 int
00069 performSinglePick (vtkRenderWindowInteractor *iren);
00070
00071 int
00072 performSinglePick (vtkRenderWindowInteractor *iren, float &x, float &y, float &z);
00073
00074 int
00075 performAreaPick (vtkRenderWindowInteractor *iren, std::vector<int> &indices);
00076
00077 private:
00078 float x_, y_, z_;
00079 int idx_;
00080 bool pick_first_;
00081 };
00082
00084 class PCL_EXPORTS PointPickingEvent
00085 {
00086 public:
00087 PointPickingEvent (int idx) : idx_ (idx), idx2_ (-1), x_ (), y_ (), z_ (), x2_ (), y2_ (), z2_ () {}
00088 PointPickingEvent (int idx, float x, float y, float z) : idx_ (idx), idx2_ (-1), x_ (x), y_ (y), z_ (z), x2_ (), y2_ (), z2_ () {}
00089
00090 PointPickingEvent (int idx1, int idx2, float x1, float y1, float z1, float x2, float y2, float z2) :
00091 idx_ (idx1), idx2_ (idx2), x_ (x1), y_ (y1), z_ (z1), x2_ (x2), y2_ (y2), z2_ (z2)
00092 {}
00093
00095 inline int
00096 getPointIndex () const
00097 {
00098 return (idx_);
00099 }
00100
00106 inline void
00107 getPoint (float &x, float &y, float &z) const
00108 {
00109 x = x_; y = y_; z = z_;
00110 }
00111
00121 inline bool
00122 getPoints (float &x1, float &y1, float &z1, float &x2, float &y2, float &z2) const
00123 {
00124 if (idx2_ == -1)
00125 return (false);
00126 x1 = x_; y1 = y_; z1 = z_;
00127 x2 = x2_; y2 = y2_; z2 = z2_;
00128 return (true);
00129 }
00130
00136 inline bool
00137 getPointIndices (int &index_1, int &index_2) const
00138 {
00139 if (idx2_ == -1)
00140 return (false);
00141 index_1 = idx_;
00142 index_2 = idx2_;
00143 return (true);
00144 }
00145
00146 private:
00147 int idx_, idx2_;
00148
00149 float x_, y_, z_;
00150 float x2_, y2_, z2_;
00151 };
00152 }
00153 }
00154
00155 #endif
00156