diff --git a/ArucoCodeDetector_8hpp_source.html b/ArucoCodeDetector_8hpp_source.html new file mode 100644 index 00000000..6058b74b --- /dev/null +++ b/ArucoCodeDetector_8hpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +vision: libraries/YarpPlugins/ArucoCodeDetector/ArucoCodeDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ArucoCodeDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __ARUCO_DETECTOR_HPP__
+
4 #define __ARUCO_DETECTOR_HPP__
+
5 
+
6 #include <yarp/dev/DeviceDriver.h>
+
7 
+
8 #include <opencv2/objdetect/aruco_detector.hpp>
+
9 
+
10 #include "IDetector.hpp"
+
11 
+
12 namespace roboticslab
+
13 {
+
14 
+
21 class ArucoCodeDetector : public yarp::dev::DeviceDriver,
+
22  public IDetector
+
23 {
+
24 public:
+
25  bool open(yarp::os::Searchable& config) override;
+
26  bool detect(const yarp::sig::Image& inYarpImg, yarp::os::Bottle& detectedObjects) override;
+
27 
+
28 private:
+
29  cv::aruco::DetectorParameters detectorParams;
+
30  cv::aruco::Dictionary dictionary;
+
31 };
+
32 
+
33 }
+
34 
+
35 #endif // __ARUCO_DETECTOR_HPP__
+
Definition: ArucoCodeDetector.hpp:23
+
Interface for object detection.
Definition: IDetector.hpp:17
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/ColorRegionDetector_8hpp_source.html b/ColorRegionDetector_8hpp_source.html new file mode 100644 index 00000000..b55077f5 --- /dev/null +++ b/ColorRegionDetector_8hpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +vision: libraries/YarpPlugins/ColorRegionDetector/ColorRegionDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ColorRegionDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __COLOR_REGION_DETECTOR_HPP__
+
4 #define __COLOR_REGION_DETECTOR_HPP__
+
5 
+
6 #include <yarp/dev/DeviceDriver.h>
+
7 
+
8 #include "IDetector.hpp"
+
9 
+
10 namespace roboticslab
+
11 {
+
12 
+
18 class ColorRegionDetector : public yarp::dev::DeviceDriver,
+
19  public IDetector
+
20 {
+
21 public:
+
22  bool open(yarp::os::Searchable& config) override;
+
23  bool detect(const yarp::sig::Image& inYarpImg, yarp::os::Bottle& detectedObjects) override;
+
24 
+
25 private:
+
26  std::string algorithm;
+
27  double morphClosing;
+
28  int threshold;
+
29  int maxNumBlobs;
+
30 };
+
31 
+
32 } // namespace roboticslab
+
33 
+
34 #endif // __COLOR_REGION_DETECTOR_HPP__
+
Definition: ColorRegionDetector.hpp:20
+
Interface for object detection.
Definition: IDetector.hpp:17
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/DnnDetector_8hpp_source.html b/DnnDetector_8hpp_source.html new file mode 100644 index 00000000..947788e9 --- /dev/null +++ b/DnnDetector_8hpp_source.html @@ -0,0 +1,126 @@ + + + + + + + +vision: libraries/YarpPlugins/DnnDetector/DnnDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
DnnDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __DNN_DETECTOR_HPP__
+
4 #define __DNN_DETECTOR_HPP__
+
5 
+
6 #include <yarp/dev/DeviceDriver.h>
+
7 
+
8 #include <opencv2/dnn.hpp>
+
9 
+
10 #include "IDetector.hpp"
+
11 
+
12 namespace roboticslab
+
13 {
+
14 
+
20 class DnnDetector : public yarp::dev::DeviceDriver,
+
21  public IDetector
+
22 {
+
23 public:
+
24  bool open(yarp::os::Searchable & config) override;
+
25  bool detect(const yarp::sig::Image & inYarpImg, yarp::os::Bottle & detectedObjects) override;
+
26 
+
27 private:
+
28  cv::dnn::Net net;
+
29  std::vector<std::string> classes;
+
30  std::vector<std::string> outNames;
+
31 
+
32  float confThreshold; // Confidence threshold
+
33  float nmsThreshold; // Non-max supression threshold
+
34  float scale;
+
35  cv::Scalar mean;
+
36 
+
37  void preprocess(const cv::Mat & frame);
+
38  void postprocess(const cv::Size & size, const std::vector<cv::Mat> & outs, yarp::os::Bottle & detectedObjects);
+
39 };
+
40 
+
41 } // namespace roboticslab
+
42 
+
43 #endif // __DNN_DETECTOR_HPP__
+
Definition: DnnDetector.hpp:22
+
Interface for object detection.
Definition: IDetector.hpp:17
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/HaarDetector_8hpp_source.html b/HaarDetector_8hpp_source.html new file mode 100644 index 00000000..1680da21 --- /dev/null +++ b/HaarDetector_8hpp_source.html @@ -0,0 +1,122 @@ + + + + + + + +vision: libraries/YarpPlugins/HaarDetector/HaarDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HaarDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __HAAR_DETECTOR_HPP__
+
4 #define __HAAR_DETECTOR_HPP__
+
5 
+
6 #include <yarp/dev/DeviceDriver.h>
+
7 
+
8 #include <opencv2/objdetect.hpp>
+
9 #ifdef HAVE_CV_FACE
+
10 # include <opencv2/face/facemark.hpp>
+
11 #endif
+
12 
+
13 #include "IDetector.hpp"
+
14 
+
15 namespace roboticslab
+
16 {
+
17 
+
23 class HaarDetector : public yarp::dev::DeviceDriver,
+
24  public IDetector
+
25 {
+
26 public:
+
27  bool open(yarp::os::Searchable& config) override;
+
28  bool detect(const yarp::sig::Image& inYarpImg, yarp::os::Bottle& detectedObjects) override;
+
29 
+
30 private:
+
31  cv::CascadeClassifier object_cascade;
+
32 #ifdef HAVE_CV_FACE
+
33  cv::Ptr<cv::face::Facemark> facemark;
+
34 #endif
+
35 };
+
36 
+
37 } // namespace roboticslab
+
38 
+
39 #endif // __HAAR_DETECTOR_HPP__
+
Definition: HaarDetector.hpp:25
+
Interface for object detection.
Definition: IDetector.hpp:17
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/IDetector_8hpp_source.html b/IDetector_8hpp_source.html new file mode 100644 index 00000000..fff1c74f --- /dev/null +++ b/IDetector_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +vision: libraries/YarpPlugins/IDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
IDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __DETECTOR_HPP__
+
4 #define __DETECTOR_HPP__
+
5 
+
6 #include <yarp/os/Bottle.h>
+
7 #include <yarp/sig/Image.h>
+
8 
+
9 namespace roboticslab
+
10 {
+
11 
+
16 class IDetector
+
17 {
+
18 public:
+
19  virtual ~IDetector() {}
+
20  virtual bool detect(const yarp::sig::Image& inYarpImg, yarp::os::Bottle& detectedObjects) = 0;
+
21 };
+
22 
+
23 } // namespace roboticslab
+
24 
+
25 #endif // __DETECTOR_HPP__
+
Interface for object detection.
Definition: IDetector.hpp:17
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/KinectFusionImpl_8hpp_source.html b/KinectFusionImpl_8hpp_source.html new file mode 100644 index 00000000..e13e4ed9 --- /dev/null +++ b/KinectFusionImpl_8hpp_source.html @@ -0,0 +1,245 @@ + + + + + + + +vision: programs/sceneReconstruction/KinectFusionImpl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
KinectFusionImpl.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __KINECT_FUSION_IMPL_HPP__
+
4 #define __KINECT_FUSION_IMPL_HPP__
+
5 
+
6 #include "KinectFusion.hpp"
+
7 
+
8 #include <mutex>
+
9 #include <type_traits>
+
10 
+
11 #include <yarp/os/LogStream.h>
+
12 #include <yarp/cv/Cv.h>
+
13 
+
14 #include "LogComponent.hpp"
+
15 
+
16 namespace roboticslab
+
17 {
+
18 
+
19 template <typename T>
+ +
21 {
+
22 public:
+
23  KinectFusionImpl(const cv::Ptr<T> & other) : handle(other)
+
24  {
+
25  cv::setUseOptimized(true);
+
26  }
+
27 
+
28  void getCloud(yarp::sig::PointCloudXYZNormalRGBA & cloudWithNormals) const override
+
29  {
+
30  cv::UMat points, normals;
+
31 
+
32  mtx.lock();
+
33  handle->getCloud(points, normals);
+
34  mtx.unlock();
+
35 
+
36  cv::Mat _points = points.getMat(cv::ACCESS_FAST); // no memcpy
+
37  cv::Mat _normals = normals.getMat(cv::ACCESS_FAST); // no memcpy
+
38 
+
39  cloudWithNormals.resize(points.rows);
+
40 
+
41  for (auto i = 0; i < points.rows; i++)
+
42  {
+
43  const auto & point = _points.at<cv::Vec4f>(i);
+
44  const auto & normal = _normals.at<cv::Vec4f>(i);
+
45  cloudWithNormals(i) = {{point[0], point[1], point[2]}, {normal[0], normal[1], normal[2]}, 0};
+
46  }
+
47  }
+
48 
+
49  void getPoints(yarp::sig::PointCloudXYZ & cloud) const override
+
50  {
+
51  cv::UMat points;
+
52 
+
53  mtx.lock();
+
54  handle->getPoints(points);
+
55  mtx.unlock();
+
56 
+
57  cv::Mat _points = points.getMat(cv::ACCESS_FAST); // no memcpy
+
58  auto data = const_cast<const char *>(reinterpret_cast<char *>(_points.data));
+
59 
+
60  cloud.fromExternalPC(data, yarp::sig::PointCloudBasicType::PC_XYZ_DATA, _points.rows, 1);
+
61  }
+
62 
+
63  void getPose(yarp::sig::Matrix & pose) const override
+
64  {
+
65  mtx.lock();
+
66  const auto & affine = handle->getPose().matrix;
+
67  mtx.unlock();
+
68 
+
69  pose.resize(4, 4);
+
70 
+
71  for (int i = 0; i < 4; i++)
+
72  {
+
73  for (int j = 0; j < 4; j++)
+
74  {
+
75  pose(i, j) = affine(i, j);
+
76  }
+
77  }
+
78  }
+
79 
+
80  bool update(const yarp::sig::ImageOf<yarp::sig::PixelFloat> & depthFrame, const yarp::sig::FlexImage & colorFrame) override
+
81  {
+
82  // Cast away constness so that toCvMat accepts the YARP image. This function
+
83  // does not alter the inner structure of PixelFloat images anyway.
+
84  auto & nonConstDepthFrame = const_cast<yarp::sig::ImageOf<yarp::sig::PixelFloat> &>(depthFrame);
+
85  cv::Mat mat = yarp::cv::toCvMat(nonConstDepthFrame);
+
86 
+
87  cv::UMat umat;
+
88  mat.convertTo(umat, mat.type(), 1000.0); // OpenCV uses milimeters
+
89 
+
90  std::lock_guard lock(mtx);
+
91  return handle->update(umat);
+
92  }
+
93 
+
94  void reset() override
+
95  {
+
96  std::lock_guard lock(mtx);
+
97  handle->reset();
+
98  }
+
99 
+
100  void render(yarp::sig::FlexImage & image) const override
+
101  {
+
102  cv::UMat umat;
+
103 
+
104  mtx.lock();
+
105  handle->render(umat);
+
106  mtx.unlock();
+
107 
+
108  cv::Mat mat = umat.getMat(cv::ACCESS_FAST); // no memcpy
+
109  const auto & bgr = yarp::cv::fromCvMat<yarp::sig::PixelBgra>(mat); // no conversion
+
110  image.copy(bgr); // bgra to grayscale/rgb (single step convert+assign)
+
111  }
+
112 
+
113 private:
+
114  cv::Ptr<T> handle;
+
115  mutable std::mutex mtx;
+
116 };
+
117 
+
118 template <typename T>
+
119 T getValue(const yarp::os::Value & v)
+
120 {
+
121  if constexpr (std::is_integral_v<T>)
+
122  {
+
123  return v.asInt32();
+
124  }
+
125  else if constexpr (std::is_floating_point_v<T>)
+
126  {
+
127  return v.asFloat64();
+
128  }
+
129  else
+
130  {
+
131  // https://stackoverflow.com/a/64354296/10404307
+
132  static_assert(!sizeof(T), "Unsupported type");
+
133  }
+
134 }
+
135 
+
136 template <typename TParams, typename TRet>
+
137 void updateParam(TParams & params, TRet TParams::* param, const yarp::os::Searchable & config,
+
138  const std::string & name, const std::string & description)
+
139 {
+
140  auto && log = yCInfo(KINFU);
+
141  log << name + ":";
+
142 
+
143  if (config.check(name, description))
+
144  {
+
145  params.*param = getValue<TRet>(config.find(name));
+
146  }
+
147  else
+
148  {
+
149  log << "(DEFAULT):";
+
150  }
+
151 
+
152  log << params.*param;
+
153 }
+
154 
+
155 } // namespace roboticslab
+
156 
+
157 #endif // __KINECT_FUSION_IMPL_HPP__
+
Definition: KinectFusionImpl.hpp:21
+
Definition: KinectFusion.hpp:18
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/KinectFusion_8hpp_source.html b/KinectFusion_8hpp_source.html new file mode 100644 index 00000000..6ad2d7e8 --- /dev/null +++ b/KinectFusion_8hpp_source.html @@ -0,0 +1,148 @@ + + + + + + + +vision: programs/sceneReconstruction/KinectFusion.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
KinectFusion.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __KINECT_FUSION_HPP__
+
4 #define __KINECT_FUSION_HPP__
+
5 
+
6 #include <memory>
+
7 
+
8 #include <yarp/os/Searchable.h>
+
9 #include <yarp/sig/Image.h>
+
10 #include <yarp/sig/IntrinsicParams.h>
+
11 #include <yarp/sig/Matrix.h>
+
12 #include <yarp/sig/PointCloud.h>
+
13 
+
14 namespace roboticslab
+
15 {
+
16 
+ +
18 {
+
19 public:
+
20  virtual ~KinectFusion() = default;
+
21 
+
22  virtual void getCloud(yarp::sig::PointCloudXYZNormalRGBA & cloudWithNormals) const = 0;
+
23 
+
24  virtual void getPoints(yarp::sig::PointCloudXYZ & cloud) const = 0;
+
25 
+
26  virtual void getPose(yarp::sig::Matrix & pose) const = 0;
+
27 
+
28  virtual bool update(const yarp::sig::ImageOf<yarp::sig::PixelFloat> & depthFrame, const yarp::sig::FlexImage & colorFrame = {}) = 0;
+
29 
+
30  virtual void reset() = 0;
+
31 
+
32  virtual void render(yarp::sig::FlexImage & image) const = 0;
+
33 };
+
34 
+
35 std::unique_ptr<KinectFusion> makeKinFu(const yarp::os::Searchable & config,
+
36  const yarp::sig::IntrinsicParams & intrinsic,
+
37  int width, int height);
+
38 
+
39 #ifdef HAVE_DYNAFU
+
40 std::unique_ptr<KinectFusion> makeDynaFu(const yarp::os::Searchable & config,
+
41  const yarp::sig::IntrinsicParams & intrinsic,
+
42  int width, int height);
+
43 #endif
+
44 
+
45 #ifdef HAVE_KINFU_LS
+
46 std::unique_ptr<KinectFusion> makeKinFuLargeScale(const yarp::os::Searchable & config,
+
47  const yarp::sig::IntrinsicParams & intrinsic,
+
48  int width, int height);
+
49 #endif
+
50 
+
51 #ifdef HAVE_COLORED_KINFU
+
52 std::unique_ptr<KinectFusion> makeColoredKinFu(const yarp::os::Searchable & config,
+
53  const yarp::sig::IntrinsicParams & depthIntrinsic,
+
54  const yarp::sig::IntrinsicParams & colorIntrinsic,
+
55  int depthWidth, int depthHeight,
+
56  int colorWidth, int colorHeight);
+
57 #endif
+
58 
+
59 } // namespace roboticslab
+
60 
+
61 #endif // __KINECT_FUSION_HPP__
+
Definition: KinectFusion.hpp:18
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/LineCallbackPort_8hpp_source.html b/LineCallbackPort_8hpp_source.html new file mode 100644 index 00000000..114e5a33 --- /dev/null +++ b/LineCallbackPort_8hpp_source.html @@ -0,0 +1,110 @@ + + + + + + + +vision: programs/pointAtObjectServer/LineCallbackPort.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
LineCallbackPort.hpp
+
+
+
1 #ifndef __LINE_CALLBACK_PORT_HPP__
+
2 #define __LINE_CALLBACK_PORT_HPP__
+
3 
+
4 #include <yarp/os/BufferedPort.h>
+
5 
+
6 #include "SharedArea.hpp"
+
7 
+
8 namespace roboticslab {
+
9 
+
10 class LineCallbackPort : public yarp::os::BufferedPort<yarp::os::Bottle> {
+
11  protected:
+
12  void onRead(yarp::os::Bottle& b);
+
13  SharedArea* sharedArea;
+
14 
+
15  public:
+
16  void setSharedArea(SharedArea* _sharedArea);
+
17 };
+
18 
+
19 } // namespace roboticslab
+
20 
+
21 #endif // __LINE_CALLBACK_PORT_HPP__
+
22 
+
Definition: LineCallbackPort.hpp:10
+
Definition: SharedArea.hpp:12
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/PointAtObjectServer_8hpp_source.html b/PointAtObjectServer_8hpp_source.html new file mode 100644 index 00000000..8805fb48 --- /dev/null +++ b/PointAtObjectServer_8hpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +vision: programs/pointAtObjectServer/PointAtObjectServer.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
PointAtObjectServer.hpp
+
+
+
1 #ifndef __POINT_AT_OBJECT_SERVER_HPP__
+
2 #define __POINT_AT_OBJECT_SERVER_HPP__
+
3 
+
4 #include <vtkActor.h>
+
5 #include <vtkActorCollection.h>
+
6 #include <vtkAxesActor.h>
+
7 #include <vtkCubeSource.h>
+
8 #include <vtkCylinderSource.h>
+
9 #include <vtkCellArray.h>
+
10 #include <vtkCommand.h>
+
11 #include <vtkImageGridSource.h>
+
12 #include <vtkLine.h>
+
13 #include <vtkLineSource.h>
+
14 #include <vtkOBBTree.h>
+
15 #include <vtkPoints.h>
+
16 #include <vtkPointData.h>
+
17 #include <vtkPolyData.h>
+
18 #include <vtkPolyDataMapper.h>
+
19 #include <vtkPolygon.h>
+
20 #include <vtkProperty.h>
+
21 #include <vtkRenderer.h>
+
22 #include <vtkRenderWindow.h>
+
23 #include <vtkRenderWindowInteractor.h>
+
24 #include <vtkSmartPointer.h>
+
25 #include <vtkSphereSource.h>
+
26 #include <vtkTransform.h>
+
27 #include <vtkVersion.h>
+
28 
+
29 #include "SharedArea.hpp"
+
30 #include "LineCallbackPort.hpp"
+
31 #include "vtkTimerCallback.hpp"
+
32 
+
33 namespace roboticslab {
+
34 
+ +
48  protected:
+
49  LineCallbackPort lineCallbackPort;
+
50  vtkSmartPointer<vtkTimerCallback> timerCallback;
+
51  SharedArea sharedArea;
+
52 
+
53  void makeFloorActor(vtkActor* _floorActor);
+
54 
+
55  public:
+ +
57  bool init();
+
58  bool close();
+
59 };
+
60 
+
61 } // namespace roboticslab
+
62 
+
63 #endif // __POINT_AT_OBJECT_SERVER_HPP__
+
64 
+
Definition: LineCallbackPort.hpp:10
+
Definition: PointAtObjectServer.hpp:47
+
Definition: SharedArea.hpp:12
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/QrDetector_8hpp_source.html b/QrDetector_8hpp_source.html new file mode 100644 index 00000000..6e98710c --- /dev/null +++ b/QrDetector_8hpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +vision: libraries/YarpPlugins/QrDetector/QrDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
QrDetector.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __QR_DETECTOR_HPP__
+
4 #define __QR_DETECTOR_HPP__
+
5 
+
6 #include <yarp/dev/DeviceDriver.h>
+
7 
+
8 #include <opencv2/objdetect.hpp>
+
9 
+
10 #include "IDetector.hpp"
+
11 
+
12 namespace roboticslab
+
13 {
+
14 
+
20 class QrDetector : public yarp::dev::DeviceDriver,
+
21  public IDetector
+
22 {
+
23 public:
+
24  bool open(yarp::os::Searchable& config) override;
+
25  bool detect(const yarp::sig::Image& inYarpImg, yarp::os::Bottle& detectedObjects) override;
+
26 
+
27 private:
+
28  cv::QRCodeDetector qrcode;
+
29 };
+
30 
+
31 }
+
32 
+
33 #endif // __QR_DETECTOR_HPP__
+
Interface for object detection.
Definition: IDetector.hpp:17
+
Definition: QrDetector.hpp:22
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/RgbDetection_8hpp_source.html b/RgbDetection_8hpp_source.html new file mode 100644 index 00000000..58781b6b --- /dev/null +++ b/RgbDetection_8hpp_source.html @@ -0,0 +1,140 @@ + + + + + + + +vision: programs/rgbDetection/RgbDetection.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
RgbDetection.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __RGB_DETECTION_HPP__
+
4 #define __RGB_DETECTION_HPP__
+
5 
+
6 #include <yarp/os/Bottle.h>
+
7 #include <yarp/os/BufferedPort.h>
+
8 #include <yarp/os/RFModule.h>
+
9 
+
10 #include <yarp/dev/PolyDriver.h>
+
11 #include <yarp/dev/IFrameGrabberImage.h>
+
12 
+
13 #include <yarp/sig/Image.h>
+
14 
+
15 #include "IDetector.hpp"
+
16 #include "YarpCropCallback.hpp"
+
17 
+
18 namespace roboticslab
+
19 {
+
20 
+
25 class RgbDetection : public yarp::os::RFModule
+
26 {
+
27 public:
+
28  ~RgbDetection() override
+
29  { close(); }
+
30 
+
31  bool configure(yarp::os::ResourceFinder & rf) override;
+
32  double getPeriod() override;
+
33  bool updateModule() override;
+
34  bool interruptModule() override;
+
35  bool close() override;
+
36 
+
37 private:
+
38  yarp::dev::PolyDriver sensorDevice;
+
39  yarp::dev::IFrameGrabberImage * frameGrabber;
+
40 
+
41  yarp::dev::PolyDriver detectorDevice;
+
42  IDetector * iDetector;
+
43 
+
44  yarp::os::BufferedPort<yarp::os::Bottle> statePort;
+
45  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb>> imagePort;
+
46 
+
47  yarp::os::BufferedPort<yarp::os::Bottle> cropPort;
+
48  YarpCropCallback cropCallback;
+
49 
+
50  double period;
+
51 };
+
52 
+
53 } // namespace roboticslab
+
54 
+
55 #endif // __RGB_DETECTION_HPP__
+
Interface for object detection.
Definition: IDetector.hpp:17
+
2D detection.
Definition: RgbDetection.hpp:26
+
Definition: YarpCropCallback.hpp:23
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/RgbdDetection_8hpp_source.html b/RgbdDetection_8hpp_source.html new file mode 100644 index 00000000..4e1edf57 --- /dev/null +++ b/RgbdDetection_8hpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +vision: programs/rgbdDetection/RgbdDetection.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
RgbdDetection.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __RGBD_DETECTION_HPP__
+
4 #define __RGBD_DETECTION_HPP__
+
5 
+
6 #include <yarp/os/Bottle.h>
+
7 #include <yarp/os/BufferedPort.h>
+
8 #include <yarp/os/RFModule.h>
+
9 
+
10 #include <yarp/dev/PolyDriver.h>
+
11 #include <yarp/dev/IRGBDSensor.h>
+
12 
+
13 #include <yarp/sig/Image.h>
+
14 #include <yarp/sig/IntrinsicParams.h>
+
15 
+
16 #include "IDetector.hpp"
+
17 #include "YarpCropCallback.hpp"
+
18 
+
19 namespace roboticslab
+
20 {
+
21 
+
26 class RgbdDetection : public yarp::os::RFModule
+
27 {
+
28 public:
+
29  ~RgbdDetection() override
+
30  { close(); }
+
31 
+
32  bool configure(yarp::os::ResourceFinder &rf) override;
+
33  double getPeriod() override;
+
34  bool updateModule() override;
+
35  bool interruptModule() override;
+
36  bool close() override;
+
37 
+
38 private:
+
39  yarp::dev::PolyDriver sensorDevice;
+
40  yarp::dev::IRGBDSensor * iRGBDSensor;
+
41  yarp::sig::IntrinsicParams depthIntrinsicParams;
+
42 
+
43  yarp::dev::PolyDriver detectorDevice;
+
44  IDetector * iDetector;
+
45 
+
46  yarp::os::BufferedPort<yarp::os::Bottle> statePort;
+
47  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb>> imagePort;
+
48  yarp::os::BufferedPort<yarp::os::Bottle> cropPort;
+
49  YarpCropCallback cropCallback;
+
50 
+
51  double period;
+
52 };
+
53 
+
54 } // namespace roboticslab
+
55 
+
56 #endif // __RGBD_DETECTION_HPP__
+
Interface for object detection.
Definition: IDetector.hpp:17
+
2.5D detection.
Definition: RgbdDetection.hpp:27
+
Definition: YarpCropCallback.hpp:23
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/SceneReconstruction_8hpp_source.html b/SceneReconstruction_8hpp_source.html new file mode 100644 index 00000000..bc2c8334 --- /dev/null +++ b/SceneReconstruction_8hpp_source.html @@ -0,0 +1,173 @@ + + + + + + + +vision: programs/sceneReconstruction/SceneReconstruction.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SceneReconstruction.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __SCENE_RECONSTRUCTION_HPP__
+
4 #define __SCENE_RECONSTRUCTION_HPP__
+
5 
+
6 #include <atomic>
+
7 #include <string>
+
8 
+
9 #include <yarp/os/RpcServer.h>
+
10 #include <yarp/os/RFModule.h>
+
11 
+
12 #include <yarp/dev/IRGBDSensor.h>
+
13 #include <yarp/dev/PolyDriver.h>
+
14 
+
15 #include "KinectFusion.hpp"
+
16 #include "SceneReconstructionIDL.h"
+
17 
+
18 namespace roboticslab
+
19 {
+
20 
+ +
22 {
+
23 public:
+
24  enum class update_result { ACQUISITION_FAILED, KINFU_FAILED, SUCCESS };
+
25 
+
26  RenderUpdater(KinectFusion & _kinfu, yarp::dev::IRGBDSensor * _sensor) : kinfu(_kinfu), sensor(_sensor) {}
+
27 
+
28  virtual ~RenderUpdater() = default;
+
29  virtual std::string getPortName() const = 0;
+
30  virtual bool openPort(const std::string & name) = 0;
+
31  virtual void interruptPort() = 0;
+
32  virtual void closePort() = 0;
+
33  virtual update_result update() = 0;
+
34 
+
35 protected:
+
36  KinectFusion & kinfu;
+
37  yarp::dev::IRGBDSensor * sensor;
+
38 };
+
39 
+
45 class SceneReconstruction : public yarp::os::RFModule,
+
46  public SceneReconstructionIDL
+
47 {
+
48 public:
+
49  ~SceneReconstruction() override
+
50  { close(); }
+
51 
+
52  bool configure(yarp::os::ResourceFinder & rf) override;
+
53 
+
54  double getPeriod() override
+
55  { return period; }
+
56 
+
57  bool updateModule() override;
+
58 
+
59  bool interruptModule() override;
+
60 
+
61  bool close() override;
+
62 
+
63  bool pause() override;
+
64 
+
65  bool resume() override;
+
66 
+
67  bool reset() override;
+
68 
+
69  return_pose getPose() override;
+
70 
+
71  return_points getPoints() override;
+
72 
+
73  return_points_with_normals getPointsWithNormals() override;
+
74 
+
75 private:
+
76  double period;
+
77  std::atomic_bool isRunning {false};
+
78  std::unique_ptr<KinectFusion> kinfu {nullptr};
+
79 
+
80  yarp::dev::PolyDriver cameraDriver;
+
81  yarp::dev::IRGBDSensor * iRGBDSensor {nullptr};
+
82 
+
83  std::unique_ptr<RenderUpdater> renderUpdater {nullptr};
+
84  yarp::os::RpcServer rpcServer;
+
85 };
+
86 
+
87 } // namespace roboticslab
+
88 
+
89 #endif // __SCENE_RECONSTRUCTION_HPP__
+
Definition: KinectFusion.hpp:18
+
Definition: SceneReconstruction.hpp:22
+
Exposes Kinect Fusion as a YARP service via RPC.
Definition: SceneReconstruction.hpp:47
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/SegmentorThread_8hpp_source.html b/SegmentorThread_8hpp_source.html new file mode 100644 index 00000000..33da0061 --- /dev/null +++ b/SegmentorThread_8hpp_source.html @@ -0,0 +1,243 @@ + + + + + + + +vision: programs/voxelOccupancyDetection/SegmentorThread.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SegmentorThread.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __SEGMENTOR_THREAD_HPP__
+
4 #define __SEGMENTOR_THREAD_HPP__
+
5 
+
6 #include <yarp/os/RFModule.h>
+
7 #include <yarp/os/Network.h>
+
8 #include <yarp/os/Port.h>
+
9 #include <yarp/os/BufferedPort.h>
+
10 #include <yarp/os/PeriodicThread.h>
+
11 #include <yarp/os/Property.h>
+
12 
+
13 #include <yarp/dev/all.h>
+
14 #include <yarp/dev/IRGBDSensor.h>
+
15 
+
16 #include <yarp/sig/all.h>
+
17 
+
18 #define DEFAULT_ALGORITHM "blueMinusRed"
+
19 #define DEFAULT_LOCATE "centroid"
+
20 #define DEFAULT_MAX_NUM_BLOBS 2
+
21 #define DEFAULT_MORPH_CLOSING 2
+
22 #define DEFAULT_MORPH_OPENING 0
+
23 #define DEFAULT_OUT_FEATURES "mmX mmY mmZ" // it's a bottle!!
+
24 #define DEFAULT_OUT_FEATURES_FORMAT 0 // 0=bottled,1=minimal
+
25 #define DEFAULT_OUT_IMAGE 1
+
26 #define DEFAULT_RATE_MS 20
+
27 #define DEFAULT_SEE_BOUNDING 3
+
28 #define DEFAULT_THRESHOLD 55
+
29 
+
30 //VoxelOccupancy Constants
+
31 #define DEFAULT_SEARCH_AREA_DILATATION 10
+
32 #define DEFAULT_DEPTH_LOW_THRESHOLD 0.730 //m; TV Dimensions
+
33 #define DEFAULT_DEPTH_HIGH_THRESHOLD 1.25 //m; TV Dimensions
+
34 #define DEFAULT_OCCUPANCY_THRESHOLD 100
+
35 #define DEFAULT_VOXEL_RESOLUTION 4 //this is the number of voxel per row.
+
36 #define DEFAULT_UTILITY_DEPTH_LOW_THRESHOLD 1.350 //m;
+
37 #define DEFAULT_UTILITY_DEPTH_HIGH_THRESHOLD 1.450 //mm;
+
38 #define DEFAULT_NUMBER_UTILITY_VOXELS 4
+
39 // W and H threshold are as a function of the total value.
+
40 #define DEFAULT_LOW_W_THRESHOLD 0.17
+
41 #define DEFAULT_HIGH_W_THRESHOLD 0.87
+
42 #define DEFAULT_LOW_H_THRESHOLD 0.45
+
43 #define DEFAULT_HIGH_H_THRESHOLD 0.52
+
44 
+
45 namespace roboticslab
+
46 {
+
47 
+
53 class DataProcessor : public yarp::os::PortReader
+
54 {
+
55  virtual bool read(yarp::os::ConnectionReader& connection)
+
56  {
+
57  yarp::os::Bottle b;
+
58  b.read(connection);
+
59  // process data in b
+
60  printf("Got %s\n", b.toString().c_str());
+
61 
+
62  if (waitForFirst)
+
63  {
+
64  xKeep = b.get(0).asInt32();
+
65  yKeep = b.get(1).asInt32();
+
66  waitForFirst = false;
+
67  }
+
68  else
+
69  {
+
70  if (b.get(0).asInt32() < xKeep || b.get(1).asInt32() < yKeep)
+
71  {
+
72  x = 0;
+
73  y = 0;
+
74  w = 0;
+
75  h = 0;
+
76  }
+
77  else
+
78  {
+
79  x = xKeep;
+
80  y = yKeep;
+
81  w = b.get(0).asInt32() - x;
+
82  h = b.get(1).asInt32() - y;
+
83  }
+
84 
+
85  waitForFirst = true;
+
86  }
+
87 
+
88  return true;
+
89  }
+
90 
+
91 public:
+
92  void reset()
+
93  {
+
94  waitForFirst = true;
+
95  x = y = w = h = 0;
+
96  xKeep = yKeep = 0;
+
97  }
+
98 
+
99  int xKeep, yKeep;
+
100  int x, y, w, h;
+
101  bool waitForFirst;
+
102 };
+
103 
+
109 class SegmentorThread : public yarp::os::PeriodicThread {
+
110 private:
+
111  yarp::dev::IRGBDSensor *iRGBDSensor;
+
112  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelMono16> > *pOutImg; // for testing
+
113  yarp::os::Port *pOutPort;
+
114  //
+
115  std::string algorithm;
+
116  std::string locate;
+
117  int maxNumBlobs;
+
118  double morphClosing;
+
119  double morphOpening;
+
120  int outFeaturesFormat;
+
121  int outImage;
+
122  int seeBounding;
+
123  int threshold;
+
124  //
+
125  double fx_d,fy_d,cx_d,cy_d,fx_rgb,fy_rgb,cx_rgb,cy_rgb;
+
126  //
+
127  yarp::os::Bottle outFeatures;
+
128  //
+
129  int cropSelector;
+
130  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb> >* outCropSelectorImg;
+
131  yarp::os::Port* inCropSelectorPort;
+
132  DataProcessor processor;
+
133 
+
134  //VoxelOccupancy specific variables
+
135  int searchAreaDilatation;
+
136  float depthLowThreshold;
+
137  float depthHighThreshold;
+
138  int occupancyThreshold;
+
139  int voxelResolution;
+
140  float utilityDepthLowThreshold;
+
141  float utilityDepthHighThreshold;
+
142  int numberUtilityVoxels;
+
143  float lowWThreshold;
+
144  float highWThreshold;
+
145  float lowHThreshold;
+
146  float highHThreshold;
+
147 public:
+
148  SegmentorThread() : PeriodicThread(DEFAULT_RATE_MS * 0.001) {}
+
149 
+
150  void setIRGBDSensor(yarp::dev::IRGBDSensor * _iRGBDSensor);
+
151  void setOutImg(yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelMono16> > * _pOutImg);
+
152  void setOutPort(yarp::os::Port *_pOutPort);
+
153  void init(yarp::os::ResourceFinder &rf);
+
154  void run(); // The periodical function
+
155 
+
156  void setCropSelector(int cropSelector) { this->cropSelector = cropSelector; }
+
157  void setOutCropSelectorImg(yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb> >* outCropSelectorImg) { this->outCropSelectorImg = outCropSelectorImg; }
+
158  void setInCropSelectorPort(yarp::os::Port* inCropSelectorPort) { this->inCropSelectorPort = inCropSelectorPort; }
+
159 
+
160 };
+
161 
+
162 } // namespace roboticslab
+
163 
+
164 #endif // __SEGMENTOR_THREAD_HPP__
+
165 
+
Implements voxelOccupancyDetection callback on Bottle.
Definition: SegmentorThread.hpp:54
+
Implements voxelOccupancyDetection PeriodicThread.
Definition: SegmentorThread.hpp:109
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/SharedArea_8hpp_source.html b/SharedArea_8hpp_source.html new file mode 100644 index 00000000..f74ad3cc --- /dev/null +++ b/SharedArea_8hpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +vision: programs/pointAtObjectServer/SharedArea.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
SharedArea.hpp
+
+
+
1 #ifndef __SHARED_AREA_HPP__
+
2 #define __SHARED_AREA_HPP__
+
3 
+
4 #include <stdio.h>
+
5 
+
6 #include <mutex>
+
7 
+
8 #include <yarp/sig/Vector.h>
+
9 
+
10 namespace roboticslab {
+
11 
+
12 class SharedArea {
+
13  private:
+
14  double lineCoords[6];
+
15  std::mutex lcMutex;
+
16 
+
17  public:
+
18  void init();
+
19  void setLC(const double _lineCoords[6]);
+
20  void getLC(double _lineCoords[6]);
+
21  void getLongLC(double _longLineCoords[6]);
+
22 };
+
23 
+
24 } // namespace roboticslab
+
25 
+
26 #endif // __SHARED_AREA_HPP__
+
Definition: SharedArea.hpp:12
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/TravisLib_8hpp_source.html b/TravisLib_8hpp_source.html new file mode 100644 index 00000000..3d98a3fc --- /dev/null +++ b/TravisLib_8hpp_source.html @@ -0,0 +1,244 @@ + + + + + + + +vision: libraries/TravisLib/TravisLib.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
TravisLib.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __TRAVIS_LIB_HPP__
+
4 #define __TRAVIS_LIB_HPP__
+
5 
+
6 #include <vector>
+
7 
+
8 #include "opencv2/core/mat.hpp"
+
9 #include "opencv2/core/types.hpp"
+
10 
+
16 namespace roboticslab
+
17 {
+
18 
+
23 class Travis
+
24 {
+
25 public:
+
31  Travis(bool quiet=true, bool overwrite=true) : _quiet(quiet), _overwrite(overwrite) {}
+
32 
+
38  bool setCvMat(const cv::Mat& image);
+
39 
+
45  bool setBinCvMat(const cv::Mat& image);
+
46 
+
51  bool binarize(const char* algorithm);
+
52 
+
58  bool binarize(const char* algorithm, const double& threshold);
+
59 
+
66  bool binarize(const char* algorithm, const double& min, const double& max);
+
67 
+
72  void morphClosing(const int& closure);
+
73 
+
78  void morphOpening(const int& opening);
+
79 
+
85  int blobize(const int& maxNumBlobs);
+
86 
+
91  void pushContour(const std::vector<cv::Point>& contour);
+
92 
+
97  bool getBlobsXY(std::vector<cv::Point2d> &locations);
+
98 
+
103  bool getBlobsArea(std::vector<double>& areas);
+
104 
+
109  bool getBlobsSolidity(std::vector<double>& solidities);
+
110 
+
111  bool getBlobsRect(std::vector<cv::Rect>& rects);
+
112 
+
118  bool getBlobsAngle(const int& method, std::vector<double>& angles);
+
119 
+
126  bool getBlobsAspectRatio(std::vector<double>& aspectRatios, std::vector<double>& axisFirsts, std::vector<double>& axisSeconds);
+
127 
+
128  bool getBlobsPerimeter(std::vector<double>& perimeters);
+
129 
+
134  bool getBlobsRectangularity(std::vector<double>& rectangularities);
+
135 
+
145  bool getBlobsHSV(std::vector<double>& hues, std::vector<double>& vals, std::vector<double>& sats,
+
146  std::vector<double>& hueStdDevs, std::vector<double>& valStdDevs, std::vector<double>& satStdDevs);
+
147 
+
154  cv::Mat& getCvMat(const int& image, const int& vizualization);
+
155 
+
159  void release();
+
160 
+
161 protected:
+
163  bool _quiet;
+
164 
+ +
167 
+
169  cv::Mat _img;
+
170 
+
172  cv::Mat _imgHsv;
+
173 
+
175  cv::Mat _imgBin;
+
176 
+
178  cv::Mat _imgBin3;
+
179 
+
181  std::vector<std::vector<cv::Point> > _contours;
+
182 
+
184  std::vector<cv::RotatedRect> _minRotatedRects;
+
185 
+
186 };
+
187 
+
192 bool compareContourAreas (std::vector<cv::Point> contour1, std::vector<cv::Point> contour2 );
+
193 
+
199 bool travisCrop(const int x, const int y, const int width, const int height, cv::Mat& img);
+
200 
+
205 std::vector<cv::Point> getBiggestContour(const cv::Mat image);
+
206 
+
211 void calcLocationXY(float& locX, float& locY, const std::vector<cv::Point> biggestCont);
+
212 
+
217 void calcMask(cv::Mat& mask, const std::vector<cv::Point> biggestCont);
+
218 
+
223 void calcArea(float& area, const std::vector<cv::Point> biggestCont);
+
224 
+
229 void calcRectangularity(float& rectangularity, const std::vector<cv::Point> biggestCont);
+
230 
+
235 void calcAngle(float& angle, const std::vector<cv::Point> biggestCont);
+
236 
+
241 void calcMassCenter(float& massCenterLocX, float& massCenterLocY , const std::vector<cv::Point> biggestCont);
+
242 
+
247 void calcAspectRatio(float& aspectRatio, float& axisFirst, float& axisSecond ,const std::vector<cv::Point> biggestCont);
+
248 
+
253 void calcSolidity(float& solidity, const std::vector<cv::Point> biggestCont);
+
254 
+
259 void calcHSVMeanStdDev(const cv::Mat image, const cv::Mat mask, float& hue_mean, float& hue_stddev,
+
260  float& saturation_mean, float& saturation_stddev,
+
261  float& value_mean, float& value_stddev);
+
262 
+
267 void calcHSVPeakColor(const cv::Mat image, const cv::Mat mask, float& hue_mode, float& hue_peak,
+
268  float& value_mode, float& value_peak);
+
269 
+
274 void calcMoments(cv::Mat& theHuMoments, const std::vector<cv::Point> biggestCont );
+
275 
+
280 void calcArcLength(float& arc, const std::vector<cv::Point> biggestCont );
+
281 
+
286 void calcCircle(float& radius, const std::vector<cv::Point> biggestCont );
+
287 
+
288 } // namespace roboticslab
+
289 
+
290 #endif // __TRAVIS_LIB_HPP__
+
The Travis class implements all the algorithms on a single image.
Definition: TravisLib.hpp:24
+
void release()
Definition: TravisLib.cpp:539
+
cv::Mat _imgBin3
Definition: TravisLib.hpp:178
+
bool setCvMat(const cv::Mat &image)
Definition: TravisLib.cpp:20
+
cv::Mat _img
Definition: TravisLib.hpp:169
+
bool getBlobsAspectRatio(std::vector< double > &aspectRatios, std::vector< double > &axisFirsts, std::vector< double > &axisSeconds)
Definition: TravisLib.cpp:410
+
void morphClosing(const int &closure)
Definition: TravisLib.cpp:210
+
bool _overwrite
Definition: TravisLib.hpp:166
+
bool binarize(const char *algorithm)
Definition: TravisLib.cpp:74
+
std::vector< std::vector< cv::Point > > _contours
Definition: TravisLib.hpp:181
+
void pushContour(const std::vector< cv::Point > &contour)
Definition: TravisLib.cpp:258
+
void morphOpening(const int &opening)
Definition: TravisLib.cpp:221
+
bool getBlobsRectangularity(std::vector< double > &rectangularities)
Definition: TravisLib.cpp:429
+
bool setBinCvMat(const cv::Mat &image)
Definition: TravisLib.cpp:43
+
cv::Mat _imgHsv
Definition: TravisLib.hpp:172
+
cv::Mat & getCvMat(const int &image, const int &vizualization)
Definition: TravisLib.cpp:498
+
cv::Mat _imgBin
Definition: TravisLib.hpp:175
+
int blobize(const int &maxNumBlobs)
Definition: TravisLib.cpp:232
+
Travis(bool quiet=true, bool overwrite=true)
Definition: TravisLib.hpp:31
+
bool _quiet
Definition: TravisLib.hpp:163
+
std::vector< cv::RotatedRect > _minRotatedRects
Definition: TravisLib.hpp:184
+
bool getBlobsHSV(std::vector< double > &hues, std::vector< double > &vals, std::vector< double > &sats, std::vector< double > &hueStdDevs, std::vector< double > &valStdDevs, std::vector< double > &satStdDevs)
Definition: TravisLib.cpp:451
+
bool getBlobsArea(std::vector< double > &areas)
Definition: TravisLib.cpp:303
+
bool getBlobsSolidity(std::vector< double > &solidities)
Definition: TravisLib.cpp:331
+
bool getBlobsAngle(const int &method, std::vector< double > &angles)
Definition: TravisLib.cpp:363
+
bool getBlobsXY(std::vector< cv::Point2d > &locations)
Definition: TravisLib.cpp:268
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
void calcSolidity(float &solidity, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:706
+
std::vector< cv::Point > getBiggestContour(const cv::Mat image)
Definition: TravisLib.cpp:574
+
void calcArcLength(float &arc, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:858
+
void calcAspectRatio(float &aspectRatio, float &axisFirst, float &axisSecond, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:685
+
void calcMassCenter(float &massCenterLocX, float &massCenterLocY, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:670
+
void calcArea(float &area, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:633
+
bool travisCrop(const int x, const int y, const int width, const int height, cv::Mat &img)
Definition: TravisLib.cpp:561
+
void calcHSVPeakColor(const cv::Mat image, const cv::Mat mask, float &hue_mode, float &hue_peak, float &value_mode, float &value_peak)
Definition: TravisLib.cpp:750
+
void calcHSVMeanStdDev(const cv::Mat image, const cv::Mat mask, float &hue_mean, float &hue_stddev, float &saturation_mean, float &saturation_stddev, float &value_mean, float &value_stddev)
Definition: TravisLib.cpp:720
+
bool compareContourAreas(std::vector< cv::Point > contour1, std::vector< cv::Point > contour2)
Definition: TravisLib.cpp:552
+
void calcRectangularity(float &rectangularity, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:639
+
void calcAngle(float &angle, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:656
+
void calcMoments(cv::Mat &theHuMoments, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:851
+
void calcCircle(float &radius, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:864
+
void calcMask(cv::Mat &mask, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:620
+
void calcLocationXY(float &locX, float &locY, const std::vector< cv::Point > biggestCont)
Definition: TravisLib.cpp:608
+
+ + + + diff --git a/VoxelOccupancyDetection_8hpp_source.html b/VoxelOccupancyDetection_8hpp_source.html new file mode 100644 index 00000000..6744ea07 --- /dev/null +++ b/VoxelOccupancyDetection_8hpp_source.html @@ -0,0 +1,132 @@ + + + + + + + +vision: programs/voxelOccupancyDetection/VoxelOccupancyDetection.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
VoxelOccupancyDetection.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __VOXEL_OCCUPANCY_DETECTION_HPP__
+
4 #define __VOXEL_OCCUPANCY_DETECTION_HPP__
+
5 
+
6 #include "SegmentorThread.hpp"
+
7 
+
8 #define DEFAULT_CROP_SELECTOR 0 // 1=true
+
9 #define DEFAULT_RGBD_DEVICE "RGBDSensorClient"
+
10 #define DEFAULT_RGBD_LOCAL "/voxelOccupancyDetection"
+
11 #define DEFAULT_RGBD_REMOTE "/xtion"
+
12 #define DEFAULT_WATCHDOG 2 // [s]
+
13 
+
14 
+
15 namespace roboticslab
+
16 {
+
17 
+
23 class VoxelOccupancyDetection : public yarp::os::RFModule {
+
24  private:
+
25  SegmentorThread segmentorThread;
+
26  //
+
27  yarp::dev::PolyDriver dd;
+
28  yarp::dev::IRGBDSensor *iRGBDSensor;
+
29 
+
30  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelMono16> > outImg;
+
31  yarp::os::Port outPort;
+
32 
+
33  int cropSelector;
+
34  yarp::os::BufferedPort<yarp::sig::ImageOf<yarp::sig::PixelRgb> > outCropSelectorImg;
+
35  yarp::os::Port inCropSelectorPort;
+
36 
+
37  bool interruptModule();
+
38  double getPeriod();
+
39  bool updateModule();
+
40  double watchdog;
+
41 
+
42  public:
+
43  bool configure(yarp::os::ResourceFinder &rf);
+
44 };
+
45 
+
46 } // namespace roboticslab
+
47 
+
48 #endif // __VOXEL_OCCUPANCY_DETECTION_HPP__
+
49 
+
Implements voxelOccupancyDetection PeriodicThread.
Definition: SegmentorThread.hpp:109
+
Computer Vision 1.
Definition: VoxelOccupancyDetection.hpp:23
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/YarpCloudUtils-pcl-impl_8hpp_source.html b/YarpCloudUtils-pcl-impl_8hpp_source.html new file mode 100644 index 00000000..8c7d196a --- /dev/null +++ b/YarpCloudUtils-pcl-impl_8hpp_source.html @@ -0,0 +1,985 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl-impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl-impl.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
5 
+
6 #define _USE_MATH_DEFINES
+
7 #include <cmath> // M_PI
+
8 #include <ctime> // std::time
+
9 
+
10 #include <limits> // std::numeric_limits
+
11 #include <memory> // std::const_pointer_cast
+
12 #include <stdexcept> // std::invalid_argument, std::runtime_error
+
13 #include <string>
+
14 
+
15 #include <pcl/pcl_config.h>
+
16 #include <pcl/point_cloud.h>
+
17 #include <pcl/point_types.h>
+
18 #include <pcl/PolygonMesh.h>
+
19 #include <pcl/common/transforms.h>
+
20 #include <pcl/features/normal_3d.h>
+
21 #include <pcl/features/normal_3d_omp.h>
+
22 #include <pcl/filters/approximate_voxel_grid.h>
+
23 #include <pcl/filters/bilateral.h>
+
24 #include <pcl/filters/crop_box.h>
+
25 #include <pcl/filters/fast_bilateral.h>
+
26 #include <pcl/filters/fast_bilateral_omp.h>
+
27 #include <pcl/filters/grid_minimum.h>
+
28 #include <pcl/filters/local_maximum.h>
+
29 #include <pcl/filters/median_filter.h>
+
30 #include <pcl/filters/passthrough.h>
+
31 #include <pcl/filters/radius_outlier_removal.h>
+
32 #include <pcl/filters/random_sample.h>
+
33 #include <pcl/filters/sampling_surface_normal.h>
+
34 #include <pcl/filters/shadowpoints.h>
+
35 #include <pcl/filters/statistical_outlier_removal.h>
+
36 #include <pcl/filters/uniform_sampling.h>
+
37 #include <pcl/filters/voxel_grid.h>
+
38 #include <pcl/search/kdtree.h>
+
39 #include <pcl/surface/bilateral_upsampling.h>
+
40 #include <pcl/surface/concave_hull.h>
+
41 #include <pcl/surface/convex_hull.h>
+
42 #include <pcl/surface/gp3.h>
+
43 #include <pcl/surface/grid_projection.h>
+
44 #include <pcl/surface/marching_cubes_hoppe.h>
+
45 #include <pcl/surface/marching_cubes_rbf.h>
+
46 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
47 #include <pcl/surface/mls.h>
+
48 #endif
+
49 #include <pcl/surface/organized_fast_mesh.h>
+
50 #include <pcl/surface/poisson.h>
+
51 #include <pcl/surface/simplification_remove_unused_vertices.h>
+
52 #include <pcl/surface/vtk_smoothing/vtk_mesh_quadric_decimation.h>
+
53 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_laplacian.h>
+
54 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_windowed_sinc.h>
+
55 #include <pcl/surface/vtk_smoothing/vtk_mesh_subdivision.h>
+
56 
+
57 namespace
+
58 {
+
59 
+
60 auto getTransformation(const yarp::os::Searchable & options)
+
61 {
+
62  auto transformation = Eigen::Transform<double, 3, Eigen::Affine>::Identity();
+
63 
+
64  if (const auto & translation = options.find("translation"); !translation.isNull())
+
65  {
+
66  if (!translation.isList() || translation.asList()->size() != 3)
+
67  {
+
68  throw std::runtime_error("translation is not a list or size not equal to 3");
+
69  }
+
70 
+
71  const auto * b = translation.asList();
+
72  Eigen::Vector3d vector(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
73  transformation.translate(vector);
+
74  }
+
75 
+
76  if (const auto & rotation = options.find("rotation"); !rotation.isNull())
+
77  {
+
78  if (!rotation.isList() || rotation.asList()->size() != 3)
+
79  {
+
80  throw std::runtime_error("rotation is not a list or size not equal to 3");
+
81  }
+
82 
+
83  const auto * b = rotation.asList();
+
84  Eigen::Vector3d axis(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
85  Eigen::AngleAxisd rot(axis.norm(), axis.normalized());
+
86  transformation.rotate(rot);
+
87  }
+
88 
+
89  return transformation;
+
90 }
+
91 
+
92 template <typename T>
+
93 void checkOutput(const typename pcl::PointCloud<T>::ConstPtr & cloud, const std::string & caller)
+
94 {
+
95  if (cloud->empty())
+
96  {
+
97  throw std::runtime_error(caller + " returned an empty cloud");
+
98  }
+
99 }
+
100 
+
101 inline void checkOutput(const pcl::PolygonMesh::ConstPtr & mesh, const std::string & caller)
+
102 {
+
103  if (mesh->cloud.data.empty() || mesh->polygons.empty())
+
104  {
+
105  throw std::runtime_error(caller + " returned an empty or incomplete mesh");
+
106  }
+
107 }
+
108 
+
109 template <typename T>
+
110 void doTransformPointCloud(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
111 {
+
112  auto transformation = getTransformation(options);
+
113  pcl::transformPointCloud(*in, *out, transformation);
+
114  checkOutput<T>(out, "transformPointCloud");
+
115 }
+
116 
+
117 template <typename T>
+
118 void doTransformPointCloudWithNormals(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
119 {
+
120  auto transformation = getTransformation(options);
+
121  pcl::transformPointCloudWithNormals(*in, *out, transformation);
+
122  checkOutput<T>(out, "transformPointCloudWithNormals");
+
123 }
+
124 
+
125 template <typename T>
+
126 void doApproximateVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
127 {
+
128  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
129  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
130  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
131  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
132  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
133 
+
134  pcl::ApproximateVoxelGrid<T> grid;
+
135  grid.setDownsampleAllData(downsampleAllData);
+
136  grid.setInputCloud(in);
+
137  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
138  grid.filter(*out);
+
139 
+
140  checkOutput<T>(out, "ApproximateVoxelGrid");
+
141 }
+
142 
+
143 template <typename T>
+
144 void doBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
145 {
+
146  auto halfSize = options.check("halfSize", yarp::os::Value(0.0)).asFloat64();
+
147  auto stdDev = options.check("stdDev", yarp::os::Value(std::numeric_limits<double>::max())).asFloat64();
+
148 
+
149  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
150  tree->setInputCloud(in);
+
151 
+
152  pcl::BilateralFilter<T> filter;
+
153  filter.setHalfSize(halfSize);
+
154  filter.setInputCloud(in);
+
155  filter.setSearchMethod(tree);
+
156  filter.setStdDev(stdDev);
+
157  filter.filter(*out);
+
158 
+
159  checkOutput<T>(out, "BilateralFilter");
+
160 }
+
161 
+
162 template <typename T>
+
163 void doBilateralUpsampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
164 {
+
165  auto sigmaColor = options.check("sigmaColor", yarp::os::Value(15.0f)).asFloat32();
+
166  auto sigmaDepth = options.check("sigmaDepth", yarp::os::Value(0.5f)).asFloat32();
+
167  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
168 
+
169  pcl::BilateralUpsampling<T, T> upsampler;
+
170  upsampler.setInputCloud(in);
+
171  upsampler.setSigmaColor(sigmaColor);
+
172  upsampler.setSigmaDepth(sigmaDepth);
+
173  upsampler.setWindowSize(windowSize);
+
174  upsampler.process(*out);
+
175 
+
176  checkOutput<T>(out, "BilateralUpsampling");
+
177 }
+
178 
+
179 template <typename T>
+
180 void doConcaveHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
181 {
+
182  auto alpha = options.check("alpha", yarp::os::Value(0.0)).asFloat64();
+
183 
+
184  pcl::ConcaveHull<T> concave;
+
185  concave.setAlpha(alpha);
+
186  concave.setDimension(3);
+
187  concave.setInputCloud(in);
+
188  concave.setKeepInformation(true);
+
189  concave.reconstruct(*out);
+
190 
+
191  checkOutput(out, "ConcaveHull");
+
192 }
+
193 
+
194 template <typename T>
+
195 void doConvexHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
196 {
+
197  pcl::ConvexHull<T> convex;
+
198  convex.setDimension(3);
+
199  convex.setInputCloud(in);
+
200  convex.reconstruct(*out);
+
201 
+
202  checkOutput(out, "ConvexHull");
+
203 }
+
204 
+
205 template <typename T>
+
206 void doCropBox(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
207 {
+
208  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
209  auto maxX = options.check("maxX", yarp::os::Value(1.0f)).asFloat32();
+
210  auto maxY = options.check("maxY", yarp::os::Value(1.0f)).asFloat32();
+
211  auto maxZ = options.check("maxZ", yarp::os::Value(1.0f)).asFloat32();
+
212  auto minX = options.check("minX", yarp::os::Value(-1.0f)).asFloat32();
+
213  auto minY = options.check("minY", yarp::os::Value(-1.0f)).asFloat32();
+
214  auto minZ = options.check("minZ", yarp::os::Value(-1.0f)).asFloat32();
+
215  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
216  auto rotationX = options.check("rotationX", yarp::os::Value(0.0f)).asFloat32();
+
217  auto rotationY = options.check("rotationY", yarp::os::Value(0.0f)).asFloat32();
+
218  auto rotationZ = options.check("rotationZ", yarp::os::Value(0.0f)).asFloat32();
+
219  auto translationX = options.check("translationX", yarp::os::Value(0.0f)).asFloat32();
+
220  auto translationY = options.check("translationY", yarp::os::Value(0.0f)).asFloat32();
+
221  auto translationZ = options.check("translationZ", yarp::os::Value(0.0f)).asFloat32();
+
222 
+
223  pcl::CropBox<T> cropper;
+
224  cropper.setInputCloud(in);
+
225  cropper.setKeepOrganized(keepOrganized);
+
226  cropper.setMax({maxX, maxY, maxZ, 1.0f});
+
227  cropper.setMin({minX, minY, minZ, 1.0f});
+
228  cropper.setNegative(negative);
+
229  cropper.setRotation({rotationX, rotationY, rotationZ});
+
230  cropper.setTranslation({translationX, translationY, translationZ});
+
231  cropper.filter(*out);
+
232 
+
233  checkOutput<T>(out, "CropBox");
+
234 }
+
235 
+
236 template <typename T>
+
237 void doFastBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
238 {
+
239  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
240  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
241 
+
242  pcl::FastBilateralFilter<T> fast;
+
243  fast.setInputCloud(in);
+
244  fast.setSigmaR(sigmaR);
+
245  fast.setSigmaS(sigmaS);
+
246  fast.filter(*out);
+
247 
+
248  checkOutput<T>(out, "FastBilateralFilter");
+
249 }
+
250 
+
251 template <typename T>
+
252 void doFastBilateralFilterOMP(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
253 {
+
254  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
255  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
256  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
257 
+
258  pcl::FastBilateralFilterOMP<T> fast;
+
259  fast.setInputCloud(in);
+
260  fast.setNumberOfThreads(numberOfThreads);
+
261  fast.setSigmaR(sigmaR);
+
262  fast.setSigmaS(sigmaS);
+
263  fast.filter(*out);
+
264 
+
265  checkOutput<T>(out, "FastBilateralFilterOMP");
+
266 }
+
267 
+
268 template <typename T>
+
269 void doGreedyProjectionTriangulation(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
270 {
+
271  auto consistentVertexOrdering = options.check("consistentVertexOrdering", yarp::os::Value(false)).asBool();
+
272  auto maximumAngle = options.check("maximumAngle", yarp::os::Value(2 * M_PI / 3)).asFloat64();
+
273  auto maximumNearestNeighbors = options.check("maximumNearestNeighbors", yarp::os::Value(100)).asInt32();
+
274  auto maximumSurfaceAngle = options.check("maximumSurfaceAngle", yarp::os::Value(M_PI / 4)).asFloat64();
+
275  auto minimumAngle = options.check("minimumAngle", yarp::os::Value(M_PI / 18)).asFloat64();
+
276  auto mu = options.check("mu", yarp::os::Value(0.0)).asFloat64();
+
277  auto normalConsistency = options.check("normalConsistency", yarp::os::Value(false)).asBool();
+
278  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
279 
+
280  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
281  tree->setInputCloud(in);
+
282 
+
283  pcl::GreedyProjectionTriangulation<T> gp3;
+
284  gp3.setConsistentVertexOrdering(consistentVertexOrdering);
+
285  gp3.setInputCloud(in);
+
286  gp3.setMaximumAngle(maximumAngle);
+
287  gp3.setMaximumSurfaceAngle(maximumSurfaceAngle);
+
288  gp3.setMaximumNearestNeighbors(maximumNearestNeighbors);
+
289  gp3.setMinimumAngle(minimumAngle);
+
290  gp3.setMu(mu);
+
291  gp3.setNormalConsistency(normalConsistency);
+
292  gp3.setSearchMethod(tree);
+
293  gp3.setSearchRadius(searchRadius);
+
294  gp3.reconstruct(*out);
+
295 
+
296  checkOutput(out, "GreedyProjectionTriangulation");
+
297 }
+
298 
+
299 template <typename T>
+
300 void doGridMinimum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
301 {
+
302  auto resolution = options.check("resolution", yarp::os::Value(0.0f)).asFloat32();
+
303  pcl::GridMinimum<T> grid(resolution);
+
304  grid.setInputCloud(in);
+
305  grid.filter(*out);
+
306  checkOutput<T>(out, "GridMinimum");
+
307 }
+
308 
+
309 template <typename T>
+
310 void doGridProjection(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
311 {
+
312  auto maxBinarySearchLevel = options.check("maxBinarySearchLevel", yarp::os::Value(10)).asInt32();
+
313  auto nearestNeighborNum = options.check("nearestNeighborNum", yarp::os::Value(50)).asInt32();
+
314  auto paddingSize = options.check("paddingSize", yarp::os::Value(3)).asInt32();
+
315  auto resolution = options.check("resolution", yarp::os::Value(0.001)).asFloat64();
+
316 
+
317  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
318  tree->setInputCloud(in);
+
319 
+
320  pcl::GridProjection<T> gp;
+
321  gp.setInputCloud(in);
+
322  gp.setMaxBinarySearchLevel(maxBinarySearchLevel);
+
323  gp.setNearestNeighborNum(nearestNeighborNum);
+
324  gp.setPaddingSize(paddingSize);
+
325  gp.setResolution(resolution);
+
326  gp.setSearchMethod(tree);
+
327  gp.reconstruct(*out);
+
328 
+
329  checkOutput(out, "GridProjection");
+
330 }
+
331 
+
332 template <typename T>
+
333 void doLocalMaximum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
334 {
+
335  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
336  auto radius = options.check("radius", yarp::os::Value(1.0f)).asFloat32();
+
337 
+
338  pcl::LocalMaximum<T> local;
+
339  local.setInputCloud(in);
+
340  local.setNegative(negative);
+
341  local.setRadius(radius);
+
342  local.filter(*out);
+
343 
+
344  checkOutput<T>(out, "LocalMaximum");
+
345 }
+
346 
+
347 template <typename T>
+
348 void doMarchingCubesHoppe(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
349 {
+
350 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
351  auto distanceIgnore = options.check("distanceIgnore", yarp::os::Value(-1.0f)).asFloat32();
+
352 #endif
+
353  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
354  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
355  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
356  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
357  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
358  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
359 
+
360  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
361  tree->setInputCloud(in);
+
362 
+
363  pcl::MarchingCubesHoppe<T> hoppe;
+
364 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
365  hoppe.setDistanceIgnore(distanceIgnore);
+
366 #endif
+
367  hoppe.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
368  hoppe.setInputCloud(in);
+
369  hoppe.setIsoLevel(isoLevel);
+
370  hoppe.setPercentageExtendGrid(percentageExtendGrid);
+
371  hoppe.setSearchMethod(tree);
+
372  hoppe.reconstruct(*out);
+
373 
+
374  checkOutput(out, "MarchingCubesHoppe");
+
375 }
+
376 
+
377 template <typename T>
+
378 void doMarchingCubesRBF(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
379 {
+
380  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
381  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
382  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
383  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
384  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
385  auto offSurfaceDisplacement = options.check("offSurfaceDisplacement", yarp::os::Value(0.1f)).asFloat32();
+
386  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
387 
+
388  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
389  tree->setInputCloud(in);
+
390 
+
391  pcl::MarchingCubesRBF<T> rbf;
+
392  rbf.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
393  rbf.setInputCloud(in);
+
394  rbf.setIsoLevel(isoLevel);
+
395  rbf.setOffSurfaceDisplacement(offSurfaceDisplacement);
+
396  rbf.setPercentageExtendGrid(percentageExtendGrid);
+
397  rbf.setSearchMethod(tree);
+
398  rbf.reconstruct(*out);
+
399 
+
400  checkOutput(out, "MarchingCubesRBF");
+
401 }
+
402 
+
403 template <typename T>
+
404 void doMedianFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
405 {
+
406  auto maxAllowedMovement = options.check("maxAllowedMovement", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
407  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
408 
+
409  pcl::MedianFilter<T> median;
+
410  median.setInputCloud(in);
+
411  median.setMaxAllowedMovement(maxAllowedMovement);
+
412  median.setWindowSize(windowSize);
+
413  median.filter(*out);
+
414 
+
415  checkOutput<T>(out, "MedianFilter");
+
416 }
+
417 
+
418 void doMeshQuadricDecimationVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
419 {
+
420  auto targetReductionFactor = options.check("targetReductionFactor", yarp::os::Value(0.5f)).asFloat32();
+
421 
+
422  pcl::MeshQuadricDecimationVTK quadric;
+
423  quadric.setInputMesh(in);
+
424  quadric.setTargetReductionFactor(targetReductionFactor);
+
425  quadric.process(*out);
+
426 
+
427  checkOutput(out, "MeshQuadricDecimationVTK");
+
428 }
+
429 
+
430 void doMeshSmoothingLaplacianVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
431 {
+
432  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
433  auto convergence = options.check("convergence", yarp::os::Value(0.0f)).asFloat32();
+
434  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
435  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
436  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
437  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
438  auto relaxationFactor = options.check("relaxationFactor", yarp::os::Value(0.01f)).asFloat32();
+
439 
+
440  pcl::MeshSmoothingLaplacianVTK laplacian;
+
441  laplacian.setBoundarySmoothing(boundarySmoothing);
+
442  laplacian.setConvergence(convergence);
+
443  laplacian.setEdgeAngle(edgeAngle);
+
444  laplacian.setFeatureAngle(featureAngle);
+
445  laplacian.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
446  laplacian.setInputMesh(in);
+
447  laplacian.setNumIter(numIter);
+
448  laplacian.setRelaxationFactor(relaxationFactor);
+
449  laplacian.process(*out);
+
450 
+
451  checkOutput(out, "MeshSmoothingLaplacianVTK");
+
452 }
+
453 
+
454 void doMeshSmoothingWindowedSincVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
455 {
+
456  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
457  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
458  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
459  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
460  auto normalizeCoordinates = options.check("normalizeCoordinates", yarp::os::Value(false)).asBool();
+
461  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
462  auto passBand = options.check("passBand", yarp::os::Value(0.1f)).asFloat32();
+
463 
+
464  pcl::MeshSmoothingWindowedSincVTK windowed;
+
465  windowed.setBoundarySmoothing(boundarySmoothing);
+
466  windowed.setEdgeAngle(edgeAngle);
+
467  windowed.setFeatureAngle(featureAngle);
+
468  windowed.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
469  windowed.setInputMesh(in);
+
470  windowed.setNormalizeCoordinates(normalizeCoordinates);
+
471  windowed.setNumIter(numIter);
+
472  windowed.setPassBand(passBand);
+
473  windowed.process(*out);
+
474 
+
475  checkOutput(out, "MeshSmoothingWindowedSincVTK");
+
476 }
+
477 
+
478 void doMeshSubdivisionVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
479 {
+
480  auto filterTypeStr = options.check("filterType", yarp::os::Value("linear")).asString();
+
481 
+
482  pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType filterType;
+
483 
+
484  if (filterTypeStr == "butterfly")
+
485  {
+
486  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::BUTTERFLY;
+
487  }
+
488  else if (filterTypeStr == "linear")
+
489  {
+
490  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LINEAR;
+
491  }
+
492  else if (filterTypeStr == "loop")
+
493  {
+
494  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LOOP;
+
495  }
+
496  else
+
497  {
+
498  throw std::invalid_argument("unknown filter type: " + filterTypeStr);
+
499  }
+
500 
+
501  pcl::MeshSubdivisionVTK subdivision;
+
502  subdivision.setFilterType(filterType);
+
503  subdivision.setInputMesh(in);
+
504  subdivision.process(*out);
+
505 
+
506  checkOutput(out, "MeshSubdivisionVTK");
+
507 }
+
508 
+
509 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
510 template <typename T1, typename T2 = T1>
+
511 void doMovingLeastSquares(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
512 {
+
513  auto cacheMlsResults = options.check("cacheMlsResults", yarp::os::Value(true)).asBool();
+
514  auto computeNormals = options.check("computeNormals", yarp::os::Value(false)).asBool();
+
515  auto dilationIterations = options.check("dilationIterations", yarp::os::Value(0)).asInt32();
+
516  auto dilationVoxelSize = options.check("dilationVoxelSize", yarp::os::Value(1.0f)).asFloat32();
+
517  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(1)).asInt32();
+
518  auto pointDensity = options.check("pointDensity", yarp::os::Value(0)).asInt32();
+
519  auto polynomialOrder = options.check("polynomialOrder", yarp::os::Value(2)).asInt32();
+
520  auto projectionMethodStr = options.check("projectionMethod", yarp::os::Value("simple")).asString();
+
521  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
522  auto sqrGaussParam = options.check("sqrGaussParam", yarp::os::Value(0.0)).asFloat64();
+
523  auto upsamplingMethodStr = options.check("upsamplingMethod", yarp::os::Value("none")).asString();
+
524  auto upsamplingRadius = options.check("upsamplingRadius", yarp::os::Value(0.0)).asFloat64();
+
525  auto upsamplingStepSize = options.check("upsamplingStepSize", yarp::os::Value(0.0)).asFloat64();
+
526 
+
527  pcl::MLSResult::ProjectionMethod projectionMethod;
+
528 
+
529  if (projectionMethodStr == "none")
+
530  {
+
531  projectionMethod = pcl::MLSResult::ProjectionMethod::NONE;
+
532  }
+
533  else if (projectionMethodStr == "orthogonal")
+
534  {
+
535  projectionMethod = pcl::MLSResult::ProjectionMethod::ORTHOGONAL;
+
536  }
+
537  else if (projectionMethodStr == "simple")
+
538  {
+
539  projectionMethod = pcl::MLSResult::ProjectionMethod::SIMPLE;
+
540  }
+
541  else
+
542  {
+
543  throw std::invalid_argument("unknown projection method: " + projectionMethodStr);
+
544  }
+
545 
+
546  typename pcl::MovingLeastSquares<T1, T2>::UpsamplingMethod upsamplingMethod;
+
547 
+
548  if (upsamplingMethodStr == "distinctCloud")
+
549  {
+
550  upsamplingMethod = decltype(upsamplingMethod)::DISTINCT_CLOUD;
+
551  }
+
552  else if (upsamplingMethodStr == "none")
+
553  {
+
554  upsamplingMethod = decltype(upsamplingMethod)::NONE;
+
555  }
+
556  else if (upsamplingMethodStr == "randomUniformDensity")
+
557  {
+
558  upsamplingMethod = decltype(upsamplingMethod)::RANDOM_UNIFORM_DENSITY;
+
559  }
+
560  else if (upsamplingMethodStr == "sampleLocalPlane")
+
561  {
+
562  upsamplingMethod = decltype(upsamplingMethod)::SAMPLE_LOCAL_PLANE;
+
563  }
+
564  else if (upsamplingMethodStr == "voxelGridDilation")
+
565  {
+
566  upsamplingMethod = decltype(upsamplingMethod)::VOXEL_GRID_DILATION;
+
567  }
+
568  else
+
569  {
+
570  throw std::invalid_argument("unknown upsampling method: " + upsamplingMethodStr);
+
571  }
+
572 
+
573  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
574  tree->setInputCloud(in);
+
575 
+
576  pcl::MovingLeastSquares<T1, T2> mls;
+
577  mls.setCacheMLSResults(cacheMlsResults);
+
578  mls.setComputeNormals(computeNormals);
+
579  mls.setDilationIterations(dilationIterations);
+
580  mls.setDilationVoxelSize(dilationVoxelSize);
+
581  mls.setInputCloud(in);
+
582  mls.setNumberOfThreads(numberOfThreads);
+
583  mls.setPointDensity(pointDensity);
+
584  mls.setPolynomialOrder(polynomialOrder);
+
585  mls.setProjectionMethod(projectionMethod);
+
586  mls.setSearchMethod(tree);
+
587  mls.setSearchRadius(searchRadius);
+
588  mls.setSqrGaussParam(sqrGaussParam);
+
589  mls.setUpsamplingMethod(upsamplingMethod);
+
590  mls.setUpsamplingRadius(upsamplingRadius);
+
591  mls.setUpsamplingStepSize(upsamplingStepSize);
+
592  mls.process(*out);
+
593 
+
594  checkOutput<T2>(out, "MovingLeastSquares");
+
595 }
+
596 #endif
+
597 
+
598 template <typename T1, typename T2>
+
599 void doNormalEstimation(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
600 {
+
601  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
602  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
603 
+
604  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
605  tree->setInputCloud(in);
+
606 
+
607  pcl::NormalEstimation<T1, T2> estimator;
+
608  estimator.setInputCloud(in);
+
609  estimator.setKSearch(kSearch);
+
610  estimator.setRadiusSearch(radiusSearch);
+
611  estimator.setSearchMethod(tree);
+
612  estimator.compute(*out);
+
613 
+
614  checkOutput<T2>(out, "NormalEstimation");
+
615 }
+
616 
+
617 template <typename T1, typename T2>
+
618 void doNormalEstimationOMP(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
619 {
+
620  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
621  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
622  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
623 
+
624  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
625  tree->setInputCloud(in);
+
626 
+
627  pcl::NormalEstimationOMP<T1, T2> estimator;
+
628  estimator.setInputCloud(in);
+
629  estimator.setKSearch(kSearch);
+
630  estimator.setNumberOfThreads(numberOfThreads);
+
631  estimator.setRadiusSearch(radiusSearch);
+
632  estimator.setSearchMethod(tree);
+
633  estimator.compute(*out);
+
634 
+
635  checkOutput<T2>(out, "NormalEstimationOMP");
+
636 }
+
637 
+
638 template <typename T>
+
639 void doOrganizedFastMesh(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
640 {
+
641  if (!in->isOrganized())
+
642  {
+
643  // the implementation lacks a proper check
+
644  throw std::invalid_argument("input cloud must be organized (height > 1) for OrganizedFastMesh");
+
645  }
+
646 
+
647  auto angleTolerance = options.check("angleTolerance", yarp::os::Value(12.5 * M_PI / 180)).asFloat32();
+
648  auto depthDependent = options.check("depthDependent", yarp::os::Value(false)).asBool();
+
649  auto distanceTolerance = options.check("distanceTolerance", yarp::os::Value(-1.0f)).asFloat32();
+
650  auto maxEdgeLengthA = options.check("maxEdgeLengthA", yarp::os::Value(0.0f)).asFloat32();
+
651  auto maxEdgeLengthB = options.check("maxEdgeLengthB", yarp::os::Value(0.0f)).asFloat32();
+
652  auto maxEdgeLengthC = options.check("maxEdgeLengthC", yarp::os::Value(0.0f)).asFloat32();
+
653  auto storeShadowedFaces = options.check("storeShadowedFaces", yarp::os::Value(false)).asBool();
+
654  auto trianglePixelSize = options.check("trianglePixelSize", yarp::os::Value(1)).asInt32();
+
655  auto trianglePixelSizeColumns = options.check("trianglePixelSizeColumns", yarp::os::Value(trianglePixelSize)).asInt32();
+
656  auto trianglePixelSizeRows = options.check("trianglePixelSizeRows", yarp::os::Value(trianglePixelSize)).asInt32();
+
657  auto triangulationTypeStr = options.check("triangulationType", yarp::os::Value("quadMesh")).asString();
+
658  auto useDepthAsDistance = options.check("useDepthAsDistance", yarp::os::Value(false)).asBool();
+
659 
+
660  typename pcl::OrganizedFastMesh<T>::TriangulationType triangulationType;
+
661 
+
662  if (triangulationTypeStr == "quadMesh")
+
663  {
+
664  triangulationType = decltype(triangulationType)::QUAD_MESH;
+
665  }
+
666  else if (triangulationTypeStr == "triangleAdaptiveCut")
+
667  {
+
668  triangulationType = decltype(triangulationType)::TRIANGLE_ADAPTIVE_CUT;
+
669  }
+
670  else if (triangulationTypeStr == "triangleLeftCut")
+
671  {
+
672  triangulationType = decltype(triangulationType)::TRIANGLE_LEFT_CUT;
+
673  }
+
674  else if (triangulationTypeStr == "triangleRightCut")
+
675  {
+
676  triangulationType = decltype(triangulationType)::TRIANGLE_RIGHT_CUT;
+
677  }
+
678  else
+
679  {
+
680  throw std::invalid_argument("unknown triangulation type: " + triangulationTypeStr);
+
681  }
+
682 
+
683  pcl::OrganizedFastMesh<T> organized;
+
684  organized.setAngleTolerance(angleTolerance);
+
685  organized.setDistanceTolerance(distanceTolerance, depthDependent);
+
686  organized.setInputCloud(in);
+
687  organized.setMaxEdgeLength(maxEdgeLengthA, maxEdgeLengthB, maxEdgeLengthC);
+
688  organized.setTrianglePixelSize(trianglePixelSize);
+
689  organized.setTrianglePixelSizeColumns(trianglePixelSizeColumns);
+
690  organized.setTrianglePixelSizeRows(trianglePixelSizeRows);
+
691  organized.setTriangulationType(triangulationType);
+
692  organized.storeShadowedFaces(storeShadowedFaces);
+
693  organized.useDepthAsDistance(useDepthAsDistance);
+
694  organized.reconstruct(*out);
+
695 
+
696  checkOutput(out, "OrganizedFastMesh");
+
697 }
+
698 
+
699 template <typename T>
+
700 void doPassThrough(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
701 {
+
702  auto filterFieldName = options.check("filterFieldName", yarp::os::Value("")).asString();
+
703  auto filterLimitMax = options.check("filterLimitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
704  auto filterLimitMin = options.check("filterLimitMin", yarp::os::Value(std::numeric_limits<float>::min())).asFloat32();
+
705  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
706 
+
707  pcl::PassThrough<T> pass;
+
708  pass.setFilterFieldName(filterFieldName);
+
709  pass.setFilterLimits(filterLimitMin, filterLimitMax);
+
710  pass.setInputCloud(in);
+
711  pass.setNegative(negative);
+
712  pass.filter(*out);
+
713 
+
714  checkOutput<T>(out, "PassThrough");
+
715 }
+
716 
+
717 template <typename T>
+
718 void doPoisson(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
719 {
+
720  auto confidence = options.check("confidence", yarp::os::Value(false)).asBool();
+
721  auto degree = options.check("degree", yarp::os::Value(2)).asInt32();
+
722  auto depth = options.check("depth", yarp::os::Value(8)).asInt32();
+
723  auto isoDivide = options.check("isoDivide", yarp::os::Value(8)).asInt32();
+
724  auto manifold = options.check("manifold", yarp::os::Value(true)).asBool();
+
725  auto minDepth = options.check("minDepth", yarp::os::Value(5)).asInt32();
+
726  auto outputPolygons = options.check("outputPolygons", yarp::os::Value(false)).asBool();
+
727  auto pointWeight = options.check("pointWeight", yarp::os::Value(4.0f)).asFloat32();
+
728  auto samplesPerNode = options.check("samplesPerNode", yarp::os::Value(1.0f)).asFloat32();
+
729  auto scale = options.check("scale", yarp::os::Value(1.1f)).asFloat32();
+
730  auto solverDivide = options.check("solverDivide", yarp::os::Value(8)).asInt32();
+
731 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
732  auto threads = options.check("threads", yarp::os::Value(1)).asInt32();
+
733 #endif
+
734 
+
735  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
736  tree->setInputCloud(in);
+
737 
+
738  pcl::Poisson<T> poisson;
+
739  poisson.setConfidence(confidence);
+
740  poisson.setDegree(degree);
+
741  poisson.setDepth(depth);
+
742  poisson.setInputCloud(in);
+
743  poisson.setIsoDivide(isoDivide);
+
744  poisson.setManifold(manifold);
+
745  poisson.setMinDepth(minDepth);
+
746  poisson.setOutputPolygons(outputPolygons);
+
747  poisson.setPointWeight(pointWeight);
+
748  poisson.setSamplesPerNode(samplesPerNode);
+
749  poisson.setScale(scale);
+
750  poisson.setSearchMethod(tree);
+
751  poisson.setSolverDivide(solverDivide);
+
752 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
753  poisson.setThreads(threads);
+
754 #endif
+
755  poisson.reconstruct(*out);
+
756 
+
757  checkOutput(out, "Poisson");
+
758 }
+
759 
+
760 template <typename T>
+
761 void doRadiusOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
762 {
+
763  auto minNeighborsInRadius = options.check("minNeighborsInRadius", yarp::os::Value(1)).asInt32();
+
764  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
765  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
766 
+
767  pcl::RadiusOutlierRemoval<T> remover;
+
768  remover.setInputCloud(in);
+
769  remover.setMinNeighborsInRadius(minNeighborsInRadius);
+
770  remover.setNegative(negative);
+
771  remover.setRadiusSearch(radiusSearch);
+
772  remover.filter(*out);
+
773 
+
774  checkOutput<T>(out, "RadiusOutlierRemoval");
+
775 }
+
776 
+
777 template <typename T>
+
778 void doRandomSample(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
779 {
+
780  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
781  auto sample = options.check("sample", yarp::os::Value(std::numeric_limits<int>::max())).asInt64(); // note the shortening conversion
+
782  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
783 
+
784  pcl::RandomSample<T> random;
+
785  random.setInputCloud(in);
+
786  random.setNegative(negative);
+
787  random.setSample(sample);
+
788  random.setSeed(seed);
+
789  random.filter(*out);
+
790 
+
791  checkOutput<T>(out, "RandomSample");
+
792 }
+
793 
+
794 template <typename T>
+
795 void doSamplingSurfaceNormal(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
796 {
+
797  auto ratio = options.check("ratio", yarp::os::Value(0.0f)).asFloat32();
+
798  auto sample = options.check("sample", yarp::os::Value(10)).asInt32();
+
799  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
800 
+
801  pcl::SamplingSurfaceNormal<T> sampler;
+
802  sampler.setInputCloud(in);
+
803  sampler.setRatio(ratio);
+
804  sampler.setSample(sample);
+
805  sampler.setSeed(seed);
+
806  sampler.filter(*out);
+
807 
+
808  checkOutput<T>(out, "SamplingSurfaceNormal");
+
809 }
+
810 
+
811 template <typename T>
+
812 void doShadowPoints(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
813 {
+
814  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
815  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
816  auto threshold = options.check("threshold", yarp::os::Value(0.1f)).asFloat32();
+
817 
+
818 #if PCL_VERSION_COMPARE(>=, 1, 11, 0)
+
819  typename pcl::PointCloud<T>::Ptr temp = std::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
820 #else
+
821  typename pcl::PointCloud<T>::Ptr temp = boost::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
822 #endif
+
823 
+
824  pcl::ShadowPoints<T, T> shadow;
+
825  shadow.setInputCloud(in);
+
826  shadow.setKeepOrganized(keepOrganized);
+
827  shadow.setNegative(negative);
+
828  shadow.setNormals(temp); // assumes normals are contained in the input cloud
+
829  shadow.setThreshold(threshold);
+
830  shadow.filter(*out);
+
831 
+
832  checkOutput<T>(out, "ShadowPoints");
+
833 }
+
834 
+
835 void doSimplificationRemoveUnusedVertices(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
836 {
+
837  pcl::surface::SimplificationRemoveUnusedVertices cleaner;
+
838  cleaner.simplify(*in, *out);
+
839  checkOutput(out, "doSimplificationRemoveUnusedVertices");
+
840 }
+
841 
+
842 template <typename T>
+
843 void doStatisticalOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
844 {
+
845  auto meanK = options.check("meanK", yarp::os::Value(1)).asInt32();
+
846  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
847  auto stddevMulThresh = options.check("stddevMulThresh", yarp::os::Value(0.0)).asFloat64();
+
848 
+
849  pcl::StatisticalOutlierRemoval<T> remover;
+
850  remover.setInputCloud(in);
+
851  remover.setMeanK(meanK);
+
852  remover.setNegative(negative);
+
853  remover.setStddevMulThresh(stddevMulThresh);
+
854  remover.filter(*out);
+
855 
+
856  checkOutput<T>(out, "StatisticalOutlierRemoval");
+
857 }
+
858 
+
859 template <typename T>
+
860 void doUniformSampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
861 {
+
862  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
863 
+
864  pcl::UniformSampling<T> uniform;
+
865  uniform.setInputCloud(in);
+
866  uniform.setRadiusSearch(radiusSearch);
+
867  uniform.filter(*out);
+
868 
+
869  checkOutput<T>(out, "UniformSampling");
+
870 }
+
871 
+
872 template <typename T>
+
873 void doVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
874 {
+
875  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
876  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
877  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
878  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
879  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
880  auto limitMax = options.check("limitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat64();
+
881  auto limitMin = options.check("limitMin", yarp::os::Value(-std::numeric_limits<float>::max())).asFloat64();
+
882  auto limitsNegative = options.check("limitsNegative", yarp::os::Value(false)).asBool();
+
883  auto minimumPointsNumberPerVoxel = options.check("minimumPointsNumberPerVoxel", yarp::os::Value(0)).asInt32();
+
884 
+
885  pcl::VoxelGrid<T> grid;
+
886  grid.setDownsampleAllData(downsampleAllData);
+
887  grid.setFilterLimits(limitMin, limitMax);
+
888  grid.setFilterLimitsNegative(limitsNegative);
+
889  grid.setInputCloud(in);
+
890  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
891  grid.setMinimumPointsNumberPerVoxel(minimumPointsNumberPerVoxel);
+
892  grid.setSaveLeafLayout(false);
+
893  grid.filter(*out);
+
894 
+
895  checkOutput<T>(out, "VoxelGrid");
+
896 }
+
897 
+
898 } // namespace
+
899 
+
900 #endif // __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
+ + + + diff --git a/YarpCloudUtils-pcl-inst_8hpp_source.html b/YarpCloudUtils-pcl-inst_8hpp_source.html new file mode 100644 index 00000000..f65a66e1 --- /dev/null +++ b/YarpCloudUtils-pcl-inst_8hpp_source.html @@ -0,0 +1,186 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl-inst.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl-inst.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
5 
+
6 #include <string>
+
7 
+
8 #include <yarp/os/Searchable.h>
+
9 #include <yarp/sig/PointCloud.h>
+
10 #include <yarp/sig/Vector.h>
+
11 
+
12 #define YCU_PCL_SIGNATURES(in, out) \
+
13  template bool meshFromCloud(const in &, out &, yarp::sig::VectorOf<int> &, const yarp::sig::VectorOf<yarp::os::Property> &); \
+
14  template bool meshFromCloud(const in &, out &, yarp::sig::VectorOf<int> &, const yarp::os::Searchable &, const std::string &); \
+
15  template bool processCloud(const in &, out &, const yarp::sig::VectorOf<yarp::os::Property> &); \
+
16  template bool processCloud(const in &, out &, const yarp::os::Searchable &, const std::string &);
+
17 
+
18 namespace roboticslab
+
19 {
+
20 
+
21 namespace YarpCloudUtils
+
22 {
+
23 
+
24 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXY)
+
25 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZ)
+
26 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudNormal)
+
27 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZRGBA)
+
28 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZI)
+
29 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudInterestPointXYZ)
+
30 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormal)
+
31 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormalRGBA)
+
32 
+
33 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXY)
+
34 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZ)
+
35 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudNormal)
+
36 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZRGBA)
+
37 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZI)
+
38 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
39 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormal)
+
40 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
41 
+
42 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXY)
+
43 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZ)
+
44 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudNormal)
+
45 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZRGBA)
+
46 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZI)
+
47 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudInterestPointXYZ)
+
48 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormal)
+
49 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
50 
+
51 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXY)
+
52 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZ)
+
53 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudNormal)
+
54 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZRGBA)
+
55 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZI)
+
56 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
57 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormal)
+
58 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
59 
+
60 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXY)
+
61 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZ)
+
62 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudNormal)
+
63 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZRGBA)
+
64 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZI)
+
65 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudInterestPointXYZ)
+
66 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormal)
+
67 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormalRGBA)
+
68 
+
69 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXY)
+
70 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZ)
+
71 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudNormal)
+
72 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZRGBA)
+
73 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZI)
+
74 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
75 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormal)
+
76 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
77 
+
78 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXY)
+
79 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZ)
+
80 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudNormal)
+
81 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZRGBA)
+
82 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZI)
+
83 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudInterestPointXYZ)
+
84 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormal)
+
85 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
86 
+
87 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXY)
+
88 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZ)
+
89 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudNormal)
+
90 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZRGBA)
+
91 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZI)
+
92 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
93 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormal)
+
94 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
95 
+
96 } // YarpCloudUtils
+
97 
+
98 } // namespace roboticslab
+
99 
+
100 #endif // __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/YarpCloudUtils-pcl-traits_8hpp_source.html b/YarpCloudUtils-pcl-traits_8hpp_source.html new file mode 100644 index 00000000..8fee274a --- /dev/null +++ b/YarpCloudUtils-pcl-traits_8hpp_source.html @@ -0,0 +1,288 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl-traits.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl-traits.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_TRAITS_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_TRAITS_HPP__
+
5 
+
6 #include <type_traits>
+
7 #include <yarp/sig/PointCloudTypes.h>
+
8 #include <pcl/point_types.h>
+
9 
+
10 namespace
+
11 {
+
12 
+
13 // YARP point type to PCL point type
+
14 
+
15 template <typename T>
+
16 struct pcl_type_from_yarp;
+
17 
+
18 template <>
+
19 struct pcl_type_from_yarp<yarp::sig::DataXY>
+
20 { typedef pcl::PointXY type; };
+
21 
+
22 template <>
+
23 struct pcl_type_from_yarp<yarp::sig::DataXYZ>
+
24 { typedef pcl::PointXYZ type; };
+
25 
+
26 template <>
+
27 struct pcl_type_from_yarp<yarp::sig::DataNormal>
+
28 { typedef pcl::Normal type; };
+
29 
+
30 template <>
+
31 struct pcl_type_from_yarp<yarp::sig::DataXYZRGBA>
+
32 { typedef pcl::PointXYZRGB type; };
+
33 
+
34 template <>
+
35 struct pcl_type_from_yarp<yarp::sig::DataXYZI>
+
36 { typedef pcl::PointXYZI type; };
+
37 
+
38 template <>
+
39 struct pcl_type_from_yarp<yarp::sig::DataInterestPointXYZ>
+
40 { typedef pcl::InterestPoint type; };
+
41 
+
42 template <>
+
43 struct pcl_type_from_yarp<yarp::sig::DataXYZNormal>
+
44 { typedef pcl::PointNormal type; };
+
45 
+
46 template <>
+
47 struct pcl_type_from_yarp<yarp::sig::DataXYZNormalRGBA>
+
48 { typedef pcl::PointXYZRGBNormal type; };
+
49 
+
50 // PCL type tags
+
51 
+
52 struct pcl_all_xyz_types_tag {};
+
53 
+
54 struct pcl_xyz_rgb_types_tag {}; // XYZ or XYZ+RGB
+
55 
+
56 struct pcl_rgb_types_tag {}; // XYZ+RGB
+
57 
+
58 struct pcl_xyzi_types_tag {}; // XYZI(+Normal)
+
59 
+
60 struct pcl_normal_types_tag {};
+
61 
+
62 // map PCL type according to selected tag
+
63 
+
64 template <typename T, typename tag>
+
65 struct pcl_decay;
+
66 
+
67 // 1-to-1 mapping if T belongs to any of the supported XYZ types
+
68 
+
69 template <typename T>
+
70 struct pcl_decay<T, pcl_all_xyz_types_tag>
+
71 { typedef T type; };
+
72 
+
73 // mappings for XYZ or XYZ+RGB types
+
74 
+
75 template <typename T>
+
76 struct pcl_decay<T, pcl_xyz_rgb_types_tag>
+
77 { typedef pcl::PointXYZ type; };
+
78 
+
79 template <>
+
80 struct pcl_decay<pcl::PointXYZRGB, pcl_xyz_rgb_types_tag>
+
81 { typedef pcl::PointXYZRGB type; };
+
82 
+
83 template <>
+
84 struct pcl_decay<pcl::PointXYZRGBNormal, pcl_xyz_rgb_types_tag>
+
85 { typedef pcl::PointXYZRGB type; };
+
86 
+
87 // mappings for XYZ+RGB types
+
88 
+
89 template <typename T>
+
90 struct pcl_decay<T, pcl_rgb_types_tag>
+
91 { typedef pcl::PointXYZRGB type; };
+
92 
+
93 // mappings for XYZI(+Normal) types
+
94 
+
95 template <typename T>
+
96 struct pcl_decay<T, pcl_xyzi_types_tag>
+
97 { typedef pcl::PointXYZI type; };
+
98 
+
99 template <>
+
100 struct pcl_decay<pcl::PointNormal, pcl_xyzi_types_tag>
+
101 { typedef pcl::PointXYZINormal type; };
+
102 
+
103 template <>
+
104 struct pcl_decay<pcl::PointXYZRGBNormal, pcl_xyzi_types_tag>
+
105 { typedef pcl::PointXYZINormal type; };
+
106 
+
107 template <>
+
108 struct pcl_decay<pcl::PointXYZINormal, pcl_xyzi_types_tag>
+
109 { typedef pcl::PointXYZINormal type; };
+
110 
+
111 // mappings for XYZ+normal types
+
112 
+
113 template <typename T>
+
114 struct pcl_decay<T, pcl_normal_types_tag>
+
115 { typedef T type; };
+
116 
+
117 template <>
+
118 struct pcl_decay<pcl::PointXYZ, pcl_normal_types_tag>
+
119 { typedef pcl::PointNormal type; };
+
120 
+
121 template <>
+
122 struct pcl_decay<pcl::PointXYZRGB, pcl_normal_types_tag>
+
123 { typedef pcl::PointXYZRGBNormal type; };
+
124 
+
125 template <>
+
126 struct pcl_decay<pcl::PointXYZI, pcl_normal_types_tag>
+
127 { typedef pcl::PointXYZINormal type; };
+
128 
+
129 template <>
+
130 struct pcl_decay<pcl::InterestPoint, pcl_normal_types_tag>
+
131 { typedef pcl::PointNormal type; };
+
132 
+
133 // register allowed conversions
+
134 
+
135 template <typename T1, typename T2>
+
136 struct pcl_is_convertible : std::false_type {};
+
137 
+
138 template <typename T>
+
139 struct pcl_is_convertible<T, pcl::PointXYZ> : std::true_type {}; // T->XYZ always allowed
+
140 
+
141 template <>
+
142 struct pcl_is_convertible<pcl::PointXYZRGBNormal, pcl::PointXYZRGB> : std::true_type {};
+
143 
+
144 template <>
+
145 struct pcl_is_convertible<pcl::PointXYZRGBNormal, pcl::PointNormal> : std::true_type {};
+
146 
+
147 template <>
+
148 struct pcl_is_convertible<pcl::PointXYZINormal, pcl::PointXYZI> : std::true_type {};
+
149 
+
150 template <>
+
151 struct pcl_is_convertible<pcl::PointXYZINormal, pcl::PointNormal> : std::true_type {};
+
152 
+
153 // describe each type
+
154 
+
155 template <typename T>
+
156 struct pcl_descriptor;
+
157 
+
158 template <>
+
159 struct pcl_descriptor<pcl::PointXY>
+
160 { static constexpr const char * name = "XY"; };
+
161 
+
162 template <>
+
163 struct pcl_descriptor<pcl::PointXYZ>
+
164 { static constexpr const char * name = "XYZ"; };
+
165 
+
166 template <>
+
167 struct pcl_descriptor<pcl::Normal>
+
168 { static constexpr const char * name = "NORMAL"; };
+
169 
+
170 template <>
+
171 struct pcl_descriptor<pcl::PointXYZRGB>
+
172 { static constexpr const char * name = "XYZ_RGB"; };
+
173 
+
174 template <>
+
175 struct pcl_descriptor<pcl::PointXYZI>
+
176 { static constexpr const char * name = "XYZI"; };
+
177 
+
178 template <>
+
179 struct pcl_descriptor<pcl::InterestPoint>
+
180 { static constexpr const char * name = "XYZ_INTEREST"; };
+
181 
+
182 template <>
+
183 struct pcl_descriptor<pcl::PointNormal>
+
184 { static constexpr const char * name = "XYZ_NORMAL"; };
+
185 
+
186 template <>
+
187 struct pcl_descriptor<pcl::PointXYZRGBNormal>
+
188 { static constexpr const char * name = "XYZ_RGB_NORMAL"; };
+
189 
+
190 template <>
+
191 struct pcl_descriptor<pcl::PointXYZINormal>
+
192 { static constexpr const char * name = "XYZI_NORMAL"; };
+
193 
+
194 // conditional switches
+
195 
+
196 template <typename T>
+
197 constexpr auto is_unsupported_type =
+
198  std::is_same_v<T, pcl::PointXY> ||
+
199  std::is_same_v<T, pcl::Normal>;
+
200 
+
201 } // namespace
+
202 
+
203 #endif // __YARP_CLOUD_UTILS_PCL_TRAITS_HPP__
+
+ + + + diff --git a/YarpCloudUtils-pcl_8hpp_source.html b/YarpCloudUtils-pcl_8hpp_source.html new file mode 100644 index 00000000..8322aa50 --- /dev/null +++ b/YarpCloudUtils-pcl_8hpp_source.html @@ -0,0 +1,314 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_HPP__
+
5 
+
6 #include <stdexcept>
+
7 #include <type_traits>
+
8 
+
9 #include <pcl/point_cloud.h>
+
10 #include <pcl/point_types.h>
+
11 #include <pcl/PolygonMesh.h>
+
12 #include <pcl/common/io.h>
+
13 
+
14 #include "YarpCloudUtils-pcl-traits.hpp"
+
15 
+
16 namespace
+
17 {
+
18 
+
19 class cloud_container
+
20 {
+
21 public:
+
22  template <typename T>
+
23  typename pcl::PointCloud<T>::ConstPtr getCloud() const;
+
24 
+
25  template <typename T>
+
26  typename pcl::PointCloud<T>::Ptr & setCloud();
+
27 
+
28  template <typename T>
+
29  const typename pcl::PointCloud<T>::Ptr & useCloud() const;
+
30 
+
31  pcl::PolygonMesh::ConstPtr getMesh() const;
+
32 
+
33  pcl::PolygonMesh::Ptr & setMesh();
+
34 
+
35 private:
+
36  template <typename T1, typename T2>
+
37  static auto initializeCloudPointer(const typename pcl::PointCloud<T1>::ConstPtr & in);
+
38 
+
39  pcl::PointCloud<pcl::PointXYZ>::Ptr xyz;
+
40  pcl::PointCloud<pcl::PointXYZRGB>::Ptr xyz_rgb;
+
41  pcl::PointCloud<pcl::PointXYZI>::Ptr xyzi;
+
42  pcl::PointCloud<pcl::InterestPoint>::Ptr xyz_interest;
+
43  pcl::PointCloud<pcl::PointNormal>::Ptr xyz_normal;
+
44  pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr xyz_rgb_normal;
+
45  pcl::PointCloud<pcl::PointXYZINormal>::Ptr xyzi_normal;
+
46  pcl::PolygonMesh::Ptr mesh;
+
47 };
+
48 
+
49 // helpers
+
50 
+
51 template <typename T1, typename T2>
+
52 inline auto cloud_container::initializeCloudPointer(const typename pcl::PointCloud<T1>::ConstPtr & in)
+
53 {
+
54  if constexpr (!std::is_same_v<T1, T2>)
+
55  {
+
56  if constexpr (!pcl_is_convertible<T1, T2>::value)
+
57  {
+
58  std::string name_lhs = pcl_descriptor<T1>::name;
+
59  std::string name_rhs = pcl_descriptor<T2>::name;
+
60  throw std::runtime_error("illegal conversion from " + name_lhs + " to " + name_rhs);
+
61  }
+
62 
+
63  typename pcl::PointCloud<T2>::Ptr out(new pcl::PointCloud<T2>());
+
64  pcl::copyPointCloud(*in, *out);
+
65  return out;
+
66  }
+
67  else
+
68  {
+
69  return in;
+
70  }
+
71 }
+
72 
+
73 // cloud_container::getCloud
+
74 
+
75 template <typename T>
+
76 typename pcl::PointCloud<T>::ConstPtr cloud_container::getCloud() const
+
77 {
+
78  if (xyz)
+
79  {
+
80  return initializeCloudPointer<pcl::PointXYZ, T>(xyz);
+
81  }
+
82  else if (xyz_rgb)
+
83  {
+
84  return initializeCloudPointer<pcl::PointXYZRGB, T>(xyz_rgb);
+
85  }
+
86  else if (xyzi)
+
87  {
+
88  return initializeCloudPointer<pcl::PointXYZI, T>(xyzi);
+
89  }
+
90  else if (xyz_interest)
+
91  {
+
92  return initializeCloudPointer<pcl::InterestPoint, T>(xyz_interest);
+
93  }
+
94  else if (xyz_normal)
+
95  {
+
96  return initializeCloudPointer<pcl::PointNormal, T>(xyz_normal);
+
97  }
+
98  else if (xyz_rgb_normal)
+
99  {
+
100  return initializeCloudPointer<pcl::PointXYZRGBNormal, T>(xyz_rgb_normal);
+
101  }
+
102  else if (xyzi_normal)
+
103  {
+
104  return initializeCloudPointer<pcl::PointXYZINormal, T>(xyzi_normal);
+
105  }
+
106  else
+
107  {
+
108  throw std::runtime_error("cloud pointer was not initialized");
+
109  }
+
110 }
+
111 
+
112 // cloud_container::setCloud
+
113 
+
114 template <>
+
115 pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud_container::setCloud<pcl::PointXYZ>()
+
116 {
+
117  xyz.reset(new pcl::PointCloud<pcl::PointXYZ>());
+
118  return xyz;
+
119 }
+
120 
+
121 template <>
+
122 pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud_container::setCloud<pcl::PointXYZRGB>()
+
123 {
+
124  xyz_rgb.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
+
125  return xyz_rgb;
+
126 }
+
127 
+
128 template <>
+
129 pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud_container::setCloud<pcl::PointXYZI>()
+
130 {
+
131  xyzi.reset(new pcl::PointCloud<pcl::PointXYZI>());
+
132  return xyzi;
+
133 }
+
134 
+
135 template <>
+
136 pcl::PointCloud<pcl::InterestPoint>::Ptr & cloud_container::setCloud<pcl::InterestPoint>()
+
137 {
+
138  xyz_interest.reset(new pcl::PointCloud<pcl::InterestPoint>());
+
139  return xyz_interest;
+
140 }
+
141 
+
142 template <>
+
143 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud_container::setCloud<pcl::PointNormal>()
+
144 {
+
145  xyz_normal.reset(new pcl::PointCloud<pcl::PointNormal>());
+
146  return xyz_normal;
+
147 }
+
148 
+
149 template <>
+
150 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud_container::setCloud<pcl::PointXYZRGBNormal>()
+
151 {
+
152  xyz_rgb_normal.reset(new pcl::PointCloud<pcl::PointXYZRGBNormal>());
+
153  return xyz_rgb_normal;
+
154 }
+
155 
+
156 template <>
+
157 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud_container::setCloud<pcl::PointXYZINormal>()
+
158 {
+
159  xyzi_normal.reset(new pcl::PointCloud<pcl::PointXYZINormal>());
+
160  return xyzi_normal;
+
161 }
+
162 
+
163 // cloud_container::useCloud
+
164 
+
165 template <>
+
166 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud_container::useCloud<pcl::PointXYZ>() const
+
167 {
+
168  return xyz;
+
169 }
+
170 
+
171 template <>
+
172 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud_container::useCloud<pcl::PointXYZRGB>() const
+
173 {
+
174  return xyz_rgb;
+
175 }
+
176 
+
177 template <>
+
178 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud_container::useCloud<pcl::PointXYZI>() const
+
179 {
+
180  return xyzi;
+
181 }
+
182 
+
183 template <>
+
184 const pcl::PointCloud<pcl::InterestPoint>::Ptr & cloud_container::useCloud<pcl::InterestPoint>() const
+
185 {
+
186  return xyz_interest;
+
187 }
+
188 
+
189 template <>
+
190 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud_container::useCloud<pcl::PointNormal>() const
+
191 {
+
192  return xyz_normal;
+
193 }
+
194 
+
195 template <>
+
196 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud_container::useCloud<pcl::PointXYZRGBNormal>() const
+
197 {
+
198  return xyz_rgb_normal;
+
199 }
+
200 
+
201 template <>
+
202 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud_container::useCloud<pcl::PointXYZINormal>() const
+
203 {
+
204  return xyzi_normal;
+
205 }
+
206 
+
207 // cloud_container::(get|set)Mesh
+
208 
+
209 inline pcl::PolygonMesh::ConstPtr cloud_container::getMesh() const
+
210 {
+
211  if (mesh)
+
212  {
+
213  return mesh;
+
214  }
+
215  else
+
216  {
+
217  throw std::runtime_error("mesh pointer was not initialized");
+
218  }
+
219 }
+
220 
+
221 inline pcl::PolygonMesh::Ptr & cloud_container::setMesh()
+
222 {
+
223  mesh.reset(new pcl::PolygonMesh());
+
224  return mesh;
+
225 }
+
226 
+
227 } // namespace
+
228 
+
229 #endif // __YARP_CLOUD_UTILS_PCL_HPP__
+
+ + + + diff --git a/YarpCloudUtils_8hpp_source.html b/YarpCloudUtils_8hpp_source.html new file mode 100644 index 00000000..0784e7fd --- /dev/null +++ b/YarpCloudUtils_8hpp_source.html @@ -0,0 +1,157 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_HPP__
+
4 #define __YARP_CLOUD_UTILS_HPP__
+
5 
+
6 #include <string>
+
7 
+
8 #include <yarp/os/Property.h>
+
9 #include <yarp/os/Searchable.h>
+
10 
+
11 #include <yarp/sig/PointCloud.h>
+
12 #include <yarp/sig/Vector.h>
+
13 
+
22 namespace roboticslab
+
23 {
+
24 
+
29 namespace YarpCloudUtils
+
30 {
+
31 
+
43 template <typename T>
+
44 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, const yarp::sig::VectorOf<int> & indices, bool isBinary = true);
+
45 
+
56 template <typename T>
+
57 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, bool isBinary = true)
+
58 {
+
59  return savePLY(filename, cloud, {}, isBinary);
+
60 }
+
61 
+
75 template <typename T>
+
76 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud, yarp::sig::VectorOf<int> & indices);
+
77 
+
90 template <typename T>
+
91 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud)
+
92 {
+
93  yarp::sig::VectorOf<int> indices;
+
94  return loadPLY(filename, cloud, indices);
+
95 }
+
96 
+
111 template <typename T1, typename T2 = T1>
+
112 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
113  yarp::sig::PointCloud<T2> & meshPoints,
+
114  yarp::sig::VectorOf<int> & meshIndices,
+
115  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
116 
+
132 template <typename T1, typename T2 = T1>
+
133 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
134  yarp::sig::PointCloud<T2> & meshPoints,
+
135  yarp::sig::VectorOf<int> & meshIndices,
+
136  const yarp::os::Searchable & config,
+
137  const std::string & collection = "meshPipeline");
+
138 
+
153 template <typename T1, typename T2 = T1>
+
154 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
155  yarp::sig::PointCloud<T2> & out,
+
156  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
157 
+
173 template <typename T1, typename T2 = T1>
+
174 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
175  yarp::sig::PointCloud<T2> & out,
+
176  const yarp::os::Searchable & config,
+
177  const std::string & collection = "cloudPipeline");
+
178 
+
179 } // namespace YarpCloudUtils
+
180 
+
181 } // namespace roboticslab
+
182 
+
183 #endif // __YARP_CLOUD_UTILS_HPP__
+
bool meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)
Constructs a triangular polygon mesh from a point cloud.
Definition: YarpCloudUtils-pcl.cpp:290
+
bool loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)
Reads a triangular polygon mesh from file.
Definition: YarpCloudUtils-ply-import.cpp:523
+
bool processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)
Processes a cloud of points.
Definition: YarpCloudUtils-pcl.cpp:367
+
bool savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary)
Writes a triangular polygon mesh to file.
Definition: YarpCloudUtils-ply-export.cpp:368
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/YarpCropCallback_8hpp_source.html b/YarpCropCallback_8hpp_source.html new file mode 100644 index 00000000..3e449ceb --- /dev/null +++ b/YarpCropCallback_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +vision: libraries/YarpCropCallback/YarpCropCallback.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCropCallback.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CROP_CALLBACK_HPP__
+
4 #define __YARP_CROP_CALLBACK_HPP__
+
5 
+
6 #include <mutex>
+
7 #include <utility> // std::pair
+
8 
+
9 #include <yarp/os/Bottle.h>
+
10 #include <yarp/os/TypedReaderCallback.h>
+
11 
+
12 #include <yarp/sig/Vector.h>
+
13 
+
14 namespace roboticslab
+
15 {
+
16 
+
22 class YarpCropCallback : public yarp::os::TypedReaderCallback<yarp::os::Bottle>
+
23 {
+
24 public:
+
25  using VertexType = std::pair<int, int>;
+
26 
+
27  void onRead(yarp::os::Bottle & bot, const yarp::os::TypedReader<yarp::os::Bottle> & reader) override;
+
28  yarp::sig::VectorOf<VertexType> getVertices() const;
+
29 
+
30 private:
+
31  yarp::sig::VectorOf<VertexType> cropVertices;
+
32  mutable std::mutex cropMutex;
+
33  bool isCropping {false};
+
34 };
+
35 
+
36 } // namespace roboticslab
+
37 
+
38 #endif // __YARP_CROP_CALLBACK_HPP__
+
Definition: YarpCropCallback.hpp:23
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..5c4433ed --- /dev/null +++ b/annotated.html @@ -0,0 +1,123 @@ + + + + + + + +vision: Class List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NroboticslabThe main, catch-all namespace for Robotics Lab UC3M
 NtestContains classes related to unit testing
 CColorRegionDetectorTestTests ColorRegionDetector
 CDnnDetectorTestTests DnnDetector
 CHaarDetectorTestTests ColorRegionDetector
 CPropertyHasher
 CPropertyComparer
 CQrDetectorTestTests QrDetector
 CYarpCloudUtilsTestTests YarpCloudUtils
 CTravisImplements all the algorithms on a single image
 CYarpCropCallback
 CArucoCodeDetector
 CColorRegionDetector
 CDnnDetector
 CHaarDetector
 CIDetectorInterface for object detection
 CQrDetector
 CLineCallbackPort
 CPointAtObjectServer
 CSharedArea
 CvtkTimerCallback
 CRgbdDetection2.5D detection
 CRgbDetection2D detection
 CKinectFusion
 CKinectFusionImpl
 CRenderUpdater
 CSceneReconstructionExposes Kinect Fusion as a YARP service via RPC
 CDataProcessorImplements voxelOccupancyDetection callback on Bottle
 CSegmentorThreadImplements voxelOccupancyDetection PeriodicThread
 CVoxelOccupancyDetectionComputer Vision 1
 Ntinyply
 CPropertyInfo
 CBuffer
 Cdelete_array
 CPlyData
 CPlyProperty
 CPlyElement
 CPlyFile
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/bc_s.png differ diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 00000000..940a0b95 Binary files /dev/null and b/bdwn.png differ diff --git a/classes.html b/classes.html new file mode 100644 index 00000000..1c9693e3 --- /dev/null +++ b/classes.html @@ -0,0 +1,129 @@ + + + + + + + +vision: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | B | C | D | H | I | K | L | P | Q | R | S | T | V | Y
+
+
+
A
+
ArucoCodeDetector (roboticslab)
+
+
B
+
Buffer (tinyply)
+
+
C
+
ColorRegionDetector (roboticslab)
ColorRegionDetectorTest (roboticslab::test)
+
+
D
+
DataProcessor (roboticslab)
Buffer::delete_array (tinyply)
DnnDetector (roboticslab)
DnnDetectorTest (roboticslab::test)
+
+
H
+
HaarDetector (roboticslab)
HaarDetectorTest (roboticslab::test)
+
+
I
+
IDetector (roboticslab)
+
+
K
+
KinectFusion (roboticslab)
KinectFusionImpl (roboticslab)
+
+
L
+
LineCallbackPort (roboticslab)
+
+
P
+
PlyData (tinyply)
PlyElement (tinyply)
PlyFile (tinyply)
PlyProperty (tinyply)
PointAtObjectServer (roboticslab)
PropertyComparer (roboticslab::test)
PropertyHasher (roboticslab::test)
PropertyInfo (tinyply)
+
+
Q
+
QrDetector (roboticslab)
QrDetectorTest (roboticslab::test)
+
+
R
+
RenderUpdater (roboticslab)
RgbdDetection (roboticslab)
RgbDetection (roboticslab)
+
+
S
+
SceneReconstruction (roboticslab)
SegmentorThread (roboticslab)
SharedArea (roboticslab)
+
+
T
+
Travis (roboticslab)
+
+
V
+
VoxelOccupancyDetection (roboticslab)
vtkTimerCallback (roboticslab)
+
+
Y
+
YarpCloudUtilsTest (roboticslab::test)
YarpCropCallback (roboticslab)
+
+
+ + + + diff --git a/classroboticslab_1_1ArucoCodeDetector-members.html b/classroboticslab_1_1ArucoCodeDetector-members.html new file mode 100644 index 00000000..7dc95f83 --- /dev/null +++ b/classroboticslab_1_1ArucoCodeDetector-members.html @@ -0,0 +1,93 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::ArucoCodeDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::ArucoCodeDetector, including all inherited members.

+ + + + + + +
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::ArucoCodeDetector)roboticslab::ArucoCodeDetectorvirtual
detectorParams (defined in roboticslab::ArucoCodeDetector)roboticslab::ArucoCodeDetectorprivate
dictionary (defined in roboticslab::ArucoCodeDetector)roboticslab::ArucoCodeDetectorprivate
open(yarp::os::Searchable &config) override (defined in roboticslab::ArucoCodeDetector)roboticslab::ArucoCodeDetector
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1ArucoCodeDetector.html b/classroboticslab_1_1ArucoCodeDetector.html new file mode 100644 index 00000000..f3d0f9dc --- /dev/null +++ b/classroboticslab_1_1ArucoCodeDetector.html @@ -0,0 +1,121 @@ + + + + + + + +vision: roboticslab::ArucoCodeDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::ArucoCodeDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::ArucoCodeDetector:
+
+
+ + +roboticslab::IDetector + +
+ + + + + + +

+Public Member Functions

+bool open (yarp::os::Searchable &config) override
 
+bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override
 
+ + + + + +

+Private Attributes

+cv::aruco::DetectorParameters detectorParams
 
+cv::aruco::Dictionary dictionary
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1ArucoCodeDetector.png b/classroboticslab_1_1ArucoCodeDetector.png new file mode 100644 index 00000000..54218cdc Binary files /dev/null and b/classroboticslab_1_1ArucoCodeDetector.png differ diff --git a/classroboticslab_1_1ColorRegionDetector-members.html b/classroboticslab_1_1ColorRegionDetector-members.html new file mode 100644 index 00000000..d42a61c2 --- /dev/null +++ b/classroboticslab_1_1ColorRegionDetector-members.html @@ -0,0 +1,95 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::ColorRegionDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::ColorRegionDetector, including all inherited members.

+ + + + + + + + +
algorithm (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetectorprivate
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetectorvirtual
maxNumBlobs (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetectorprivate
morphClosing (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetectorprivate
open(yarp::os::Searchable &config) override (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetector
threshold (defined in roboticslab::ColorRegionDetector)roboticslab::ColorRegionDetectorprivate
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1ColorRegionDetector.html b/classroboticslab_1_1ColorRegionDetector.html new file mode 100644 index 00000000..39e74ea6 --- /dev/null +++ b/classroboticslab_1_1ColorRegionDetector.html @@ -0,0 +1,127 @@ + + + + + + + +vision: roboticslab::ColorRegionDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::ColorRegionDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::ColorRegionDetector:
+
+
+ + +roboticslab::IDetector + +
+ + + + + + +

+Public Member Functions

+bool open (yarp::os::Searchable &config) override
 
+bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override
 
+ + + + + + + + + +

+Private Attributes

+std::string algorithm
 
+double morphClosing
 
+int threshold
 
+int maxNumBlobs
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1ColorRegionDetector.png b/classroboticslab_1_1ColorRegionDetector.png new file mode 100644 index 00000000..412e6696 Binary files /dev/null and b/classroboticslab_1_1ColorRegionDetector.png differ diff --git a/classroboticslab_1_1DataProcessor-members.html b/classroboticslab_1_1DataProcessor-members.html new file mode 100644 index 00000000..c0dc1c08 --- /dev/null +++ b/classroboticslab_1_1DataProcessor-members.html @@ -0,0 +1,97 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::DataProcessor Member List
+
+
+ +

This is the complete list of members for roboticslab::DataProcessor, including all inherited members.

+ + + + + + + + + + +
h (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
read(yarp::os::ConnectionReader &connection) (defined in roboticslab::DataProcessor)roboticslab::DataProcessorinlineprivatevirtual
reset() (defined in roboticslab::DataProcessor)roboticslab::DataProcessorinline
w (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
waitForFirst (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
x (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
xKeep (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
y (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
yKeep (defined in roboticslab::DataProcessor)roboticslab::DataProcessor
+ + + + diff --git a/classroboticslab_1_1DataProcessor.html b/classroboticslab_1_1DataProcessor.html new file mode 100644 index 00000000..3508f3d5 --- /dev/null +++ b/classroboticslab_1_1DataProcessor.html @@ -0,0 +1,141 @@ + + + + + + + +vision: roboticslab::DataProcessor Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +Private Member Functions | +List of all members
+
+
roboticslab::DataProcessor Class Reference
+
+
+ +

Implements voxelOccupancyDetection callback on Bottle. +

+ +

#include <SegmentorThread.hpp>

+
+Inheritance diagram for roboticslab::DataProcessor:
+
+
+ +
+ + + + +

+Public Member Functions

+void reset ()
 
+ + + + + + + + + + + + + + + +

+Public Attributes

+int xKeep
 
+int yKeep
 
+int x
 
+int y
 
+int w
 
+int h
 
+bool waitForFirst
 
+ + + +

+Private Member Functions

+virtual bool read (yarp::os::ConnectionReader &connection)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1DataProcessor.png b/classroboticslab_1_1DataProcessor.png new file mode 100644 index 00000000..1cfb7363 Binary files /dev/null and b/classroboticslab_1_1DataProcessor.png differ diff --git a/classroboticslab_1_1DnnDetector-members.html b/classroboticslab_1_1DnnDetector-members.html new file mode 100644 index 00000000..ebcdbcad --- /dev/null +++ b/classroboticslab_1_1DnnDetector-members.html @@ -0,0 +1,100 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::DnnDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::DnnDetector, including all inherited members.

+ + + + + + + + + + + + + +
classes (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
confThreshold (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorvirtual
mean (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
net (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
nmsThreshold (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
open(yarp::os::Searchable &config) override (defined in roboticslab::DnnDetector)roboticslab::DnnDetector
outNames (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
postprocess(const cv::Size &size, const std::vector< cv::Mat > &outs, yarp::os::Bottle &detectedObjects) (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
preprocess(const cv::Mat &frame) (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
scale (defined in roboticslab::DnnDetector)roboticslab::DnnDetectorprivate
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1DnnDetector.html b/classroboticslab_1_1DnnDetector.html new file mode 100644 index 00000000..5d5ccbe5 --- /dev/null +++ b/classroboticslab_1_1DnnDetector.html @@ -0,0 +1,146 @@ + + + + + + + +vision: roboticslab::DnnDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::DnnDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::DnnDetector:
+
+
+ + +roboticslab::IDetector + +
+ + + + + + +

+Public Member Functions

+bool open (yarp::os::Searchable &config) override
 
+bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override
 
+ + + + + +

+Private Member Functions

+void preprocess (const cv::Mat &frame)
 
+void postprocess (const cv::Size &size, const std::vector< cv::Mat > &outs, yarp::os::Bottle &detectedObjects)
 
+ + + + + + + + + + + + + + + +

+Private Attributes

+cv::dnn::Net net
 
+std::vector< std::string > classes
 
+std::vector< std::string > outNames
 
+float confThreshold
 
+float nmsThreshold
 
+float scale
 
+cv::Scalar mean
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1DnnDetector.png b/classroboticslab_1_1DnnDetector.png new file mode 100644 index 00000000..f351bcb6 Binary files /dev/null and b/classroboticslab_1_1DnnDetector.png differ diff --git a/classroboticslab_1_1HaarDetector-members.html b/classroboticslab_1_1HaarDetector-members.html new file mode 100644 index 00000000..589d7eef --- /dev/null +++ b/classroboticslab_1_1HaarDetector-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::HaarDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::HaarDetector, including all inherited members.

+ + + + + +
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::HaarDetector)roboticslab::HaarDetectorvirtual
object_cascade (defined in roboticslab::HaarDetector)roboticslab::HaarDetectorprivate
open(yarp::os::Searchable &config) override (defined in roboticslab::HaarDetector)roboticslab::HaarDetector
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1HaarDetector.html b/classroboticslab_1_1HaarDetector.html new file mode 100644 index 00000000..830f497d --- /dev/null +++ b/classroboticslab_1_1HaarDetector.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::HaarDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::HaarDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::HaarDetector:
+
+
+ + +roboticslab::IDetector + +
+ + + + + + +

+Public Member Functions

+bool open (yarp::os::Searchable &config) override
 
+bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override
 
+ + + +

+Private Attributes

+cv::CascadeClassifier object_cascade
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1HaarDetector.png b/classroboticslab_1_1HaarDetector.png new file mode 100644 index 00000000..8ff07fd5 Binary files /dev/null and b/classroboticslab_1_1HaarDetector.png differ diff --git a/classroboticslab_1_1IDetector-members.html b/classroboticslab_1_1IDetector-members.html new file mode 100644 index 00000000..e8a94bfb --- /dev/null +++ b/classroboticslab_1_1IDetector-members.html @@ -0,0 +1,90 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::IDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::IDetector, including all inherited members.

+ + + +
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects)=0 (defined in roboticslab::IDetector)roboticslab::IDetectorpure virtual
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1IDetector.html b/classroboticslab_1_1IDetector.html new file mode 100644 index 00000000..744fa77c --- /dev/null +++ b/classroboticslab_1_1IDetector.html @@ -0,0 +1,116 @@ + + + + + + + +vision: roboticslab::IDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
roboticslab::IDetector Class Referenceabstract
+
+
+ +

Interface for object detection. +

+ +

#include <IDetector.hpp>

+
+Inheritance diagram for roboticslab::IDetector:
+
+
+ + +roboticslab::ArucoCodeDetector +roboticslab::ColorRegionDetector +roboticslab::DnnDetector +roboticslab::HaarDetector +roboticslab::QrDetector + +
+ + + + +

+Public Member Functions

+virtual bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects)=0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1IDetector.png b/classroboticslab_1_1IDetector.png new file mode 100644 index 00000000..35133bfd Binary files /dev/null and b/classroboticslab_1_1IDetector.png differ diff --git a/classroboticslab_1_1KinectFusion-members.html b/classroboticslab_1_1KinectFusion-members.html new file mode 100644 index 00000000..8e598f3b --- /dev/null +++ b/classroboticslab_1_1KinectFusion-members.html @@ -0,0 +1,95 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::KinectFusion Member List
+
+
+ +

This is the complete list of members for roboticslab::KinectFusion, including all inherited members.

+ + + + + + + + +
getCloud(yarp::sig::PointCloudXYZNormalRGBA &cloudWithNormals) const =0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
getPoints(yarp::sig::PointCloudXYZ &cloud) const =0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
getPose(yarp::sig::Matrix &pose) const =0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
render(yarp::sig::FlexImage &image) const =0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
reset()=0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
update(const yarp::sig::ImageOf< yarp::sig::PixelFloat > &depthFrame, const yarp::sig::FlexImage &colorFrame={})=0 (defined in roboticslab::KinectFusion)roboticslab::KinectFusionpure virtual
~KinectFusion()=default (defined in roboticslab::KinectFusion)roboticslab::KinectFusionvirtual
+ + + + diff --git a/classroboticslab_1_1KinectFusion.html b/classroboticslab_1_1KinectFusion.html new file mode 100644 index 00000000..65ff9b26 --- /dev/null +++ b/classroboticslab_1_1KinectFusion.html @@ -0,0 +1,122 @@ + + + + + + + +vision: roboticslab::KinectFusion Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
roboticslab::KinectFusion Class Referenceabstract
+
+
+
+Inheritance diagram for roboticslab::KinectFusion:
+
+
+ + +roboticslab::KinectFusionImpl< T > + +
+ + + + + + + + + + + + + + +

+Public Member Functions

+virtual void getCloud (yarp::sig::PointCloudXYZNormalRGBA &cloudWithNormals) const =0
 
+virtual void getPoints (yarp::sig::PointCloudXYZ &cloud) const =0
 
+virtual void getPose (yarp::sig::Matrix &pose) const =0
 
+virtual bool update (const yarp::sig::ImageOf< yarp::sig::PixelFloat > &depthFrame, const yarp::sig::FlexImage &colorFrame={})=0
 
+virtual void reset ()=0
 
+virtual void render (yarp::sig::FlexImage &image) const =0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1KinectFusion.png b/classroboticslab_1_1KinectFusion.png new file mode 100644 index 00000000..8c56780e Binary files /dev/null and b/classroboticslab_1_1KinectFusion.png differ diff --git a/classroboticslab_1_1KinectFusionImpl-members.html b/classroboticslab_1_1KinectFusionImpl-members.html new file mode 100644 index 00000000..32b99e5b --- /dev/null +++ b/classroboticslab_1_1KinectFusionImpl-members.html @@ -0,0 +1,98 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::KinectFusionImpl< T > Member List
+
+
+ +

This is the complete list of members for roboticslab::KinectFusionImpl< T >, including all inherited members.

+ + + + + + + + + + + +
getCloud(yarp::sig::PointCloudXYZNormalRGBA &cloudWithNormals) const override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
getPoints(yarp::sig::PointCloudXYZ &cloud) const override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
getPose(yarp::sig::Matrix &pose) const override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
handle (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >private
KinectFusionImpl(const cv::Ptr< T > &other) (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inline
mtx (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >mutableprivate
render(yarp::sig::FlexImage &image) const override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
reset() override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
update(const yarp::sig::ImageOf< yarp::sig::PixelFloat > &depthFrame, const yarp::sig::FlexImage &colorFrame) override (defined in roboticslab::KinectFusionImpl< T >)roboticslab::KinectFusionImpl< T >inlinevirtual
~KinectFusion()=default (defined in roboticslab::KinectFusion)roboticslab::KinectFusionvirtual
+ + + + diff --git a/classroboticslab_1_1KinectFusionImpl.html b/classroboticslab_1_1KinectFusionImpl.html new file mode 100644 index 00000000..eb7ad2b2 --- /dev/null +++ b/classroboticslab_1_1KinectFusionImpl.html @@ -0,0 +1,135 @@ + + + + + + + +vision: roboticslab::KinectFusionImpl< T > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::KinectFusionImpl< T > Class Template Reference
+
+
+
+Inheritance diagram for roboticslab::KinectFusionImpl< T >:
+
+
+ + +roboticslab::KinectFusion + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

KinectFusionImpl (const cv::Ptr< T > &other)
 
+void getCloud (yarp::sig::PointCloudXYZNormalRGBA &cloudWithNormals) const override
 
+void getPoints (yarp::sig::PointCloudXYZ &cloud) const override
 
+void getPose (yarp::sig::Matrix &pose) const override
 
+bool update (const yarp::sig::ImageOf< yarp::sig::PixelFloat > &depthFrame, const yarp::sig::FlexImage &colorFrame) override
 
+void reset () override
 
+void render (yarp::sig::FlexImage &image) const override
 
+ + + + + +

+Private Attributes

+cv::Ptr< T > handle
 
+std::mutex mtx
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1KinectFusionImpl.png b/classroboticslab_1_1KinectFusionImpl.png new file mode 100644 index 00000000..8347d391 Binary files /dev/null and b/classroboticslab_1_1KinectFusionImpl.png differ diff --git a/classroboticslab_1_1LineCallbackPort-members.html b/classroboticslab_1_1LineCallbackPort-members.html new file mode 100644 index 00000000..e7817a04 --- /dev/null +++ b/classroboticslab_1_1LineCallbackPort-members.html @@ -0,0 +1,91 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::LineCallbackPort Member List
+
+
+ +

This is the complete list of members for roboticslab::LineCallbackPort, including all inherited members.

+ + + + +
onRead(yarp::os::Bottle &b) (defined in roboticslab::LineCallbackPort)roboticslab::LineCallbackPortprotected
setSharedArea(SharedArea *_sharedArea) (defined in roboticslab::LineCallbackPort)roboticslab::LineCallbackPort
sharedArea (defined in roboticslab::LineCallbackPort)roboticslab::LineCallbackPortprotected
+ + + + diff --git a/classroboticslab_1_1LineCallbackPort.html b/classroboticslab_1_1LineCallbackPort.html new file mode 100644 index 00000000..0252a656 --- /dev/null +++ b/classroboticslab_1_1LineCallbackPort.html @@ -0,0 +1,119 @@ + + + + + + + +vision: roboticslab::LineCallbackPort Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::LineCallbackPort Class Reference
+
+
+
+Inheritance diagram for roboticslab::LineCallbackPort:
+
+
+ +
+ + + + +

+Public Member Functions

+void setSharedArea (SharedArea *_sharedArea)
 
+ + + +

+Protected Member Functions

+void onRead (yarp::os::Bottle &b)
 
+ + + +

+Protected Attributes

+SharedAreasharedArea
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1LineCallbackPort.png b/classroboticslab_1_1LineCallbackPort.png new file mode 100644 index 00000000..43b23894 Binary files /dev/null and b/classroboticslab_1_1LineCallbackPort.png differ diff --git a/classroboticslab_1_1PointAtObjectServer-members.html b/classroboticslab_1_1PointAtObjectServer-members.html new file mode 100644 index 00000000..66971cde --- /dev/null +++ b/classroboticslab_1_1PointAtObjectServer-members.html @@ -0,0 +1,95 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::PointAtObjectServer Member List
+
+
+ +

This is the complete list of members for roboticslab::PointAtObjectServer, including all inherited members.

+ + + + + + + + +
close() (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServer
init() (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServer
lineCallbackPort (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServerprotected
makeFloorActor(vtkActor *_floorActor) (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServerprotected
PointAtObjectServer() (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServerinline
sharedArea (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServerprotected
timerCallback (defined in roboticslab::PointAtObjectServer)roboticslab::PointAtObjectServerprotected
+ + + + diff --git a/classroboticslab_1_1PointAtObjectServer.html b/classroboticslab_1_1PointAtObjectServer.html new file mode 100644 index 00000000..65f2c287 --- /dev/null +++ b/classroboticslab_1_1PointAtObjectServer.html @@ -0,0 +1,131 @@ + + + + + + + +vision: roboticslab::PointAtObjectServer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::PointAtObjectServer Class Reference
+
+
+ +

#include <PointAtObjectServer.hpp>

+ + + + + + +

+Public Member Functions

+bool init ()
 
+bool close ()
 
+ + + +

+Protected Member Functions

+void makeFloorActor (vtkActor *_floorActor)
 
+ + + + + + + +

+Protected Attributes

+LineCallbackPort lineCallbackPort
 
+vtkSmartPointer< vtkTimerCallbacktimerCallback
 
+SharedArea sharedArea
 
+

Detailed Description

+

PointAtObjectServer is the main class. PointAtObjectServer creates:

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1QrDetector-members.html b/classroboticslab_1_1QrDetector-members.html new file mode 100644 index 00000000..5702c053 --- /dev/null +++ b/classroboticslab_1_1QrDetector-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::QrDetector Member List
+
+
+ +

This is the complete list of members for roboticslab::QrDetector, including all inherited members.

+ + + + + +
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::QrDetector)roboticslab::QrDetectorvirtual
open(yarp::os::Searchable &config) override (defined in roboticslab::QrDetector)roboticslab::QrDetector
qrcode (defined in roboticslab::QrDetector)roboticslab::QrDetectorprivate
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1QrDetector.html b/classroboticslab_1_1QrDetector.html new file mode 100644 index 00000000..f6a17612 --- /dev/null +++ b/classroboticslab_1_1QrDetector.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::QrDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::QrDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::QrDetector:
+
+
+ + +roboticslab::IDetector + +
+ + + + + + +

+Public Member Functions

+bool open (yarp::os::Searchable &config) override
 
+bool detect (const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override
 
+ + + +

+Private Attributes

+cv::QRCodeDetector qrcode
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1QrDetector.png b/classroboticslab_1_1QrDetector.png new file mode 100644 index 00000000..20e03869 Binary files /dev/null and b/classroboticslab_1_1QrDetector.png differ diff --git a/classroboticslab_1_1RenderUpdater-members.html b/classroboticslab_1_1RenderUpdater-members.html new file mode 100644 index 00000000..a3fd8d83 --- /dev/null +++ b/classroboticslab_1_1RenderUpdater-members.html @@ -0,0 +1,98 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::RenderUpdater Member List
+
+
+ +

This is the complete list of members for roboticslab::RenderUpdater, including all inherited members.

+ + + + + + + + + + + +
closePort()=0 (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterpure virtual
getPortName() const =0 (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterpure virtual
interruptPort()=0 (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterpure virtual
kinfu (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterprotected
openPort(const std::string &name)=0 (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterpure virtual
RenderUpdater(KinectFusion &_kinfu, yarp::dev::IRGBDSensor *_sensor) (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterinline
sensor (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterprotected
update()=0 (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdaterpure virtual
update_result enum name (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdater
~RenderUpdater()=default (defined in roboticslab::RenderUpdater)roboticslab::RenderUpdatervirtual
+ + + + diff --git a/classroboticslab_1_1RenderUpdater.html b/classroboticslab_1_1RenderUpdater.html new file mode 100644 index 00000000..586ef28c --- /dev/null +++ b/classroboticslab_1_1RenderUpdater.html @@ -0,0 +1,132 @@ + + + + + + + +vision: roboticslab::RenderUpdater Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Types | +Public Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::RenderUpdater Class Referenceabstract
+
+
+ + + + +

+Public Types

enum class  update_result { ACQUISITION_FAILED +, KINFU_FAILED +, SUCCESS + }
 
+ + + + + + + + + + + + + +

+Public Member Functions

RenderUpdater (KinectFusion &_kinfu, yarp::dev::IRGBDSensor *_sensor)
 
+virtual std::string getPortName () const =0
 
+virtual bool openPort (const std::string &name)=0
 
+virtual void interruptPort ()=0
 
+virtual void closePort ()=0
 
+virtual update_result update ()=0
 
+ + + + + +

+Protected Attributes

+KinectFusionkinfu
 
+yarp::dev::IRGBDSensor * sensor
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1RgbDetection-members.html b/classroboticslab_1_1RgbDetection-members.html new file mode 100644 index 00000000..5a705b17 --- /dev/null +++ b/classroboticslab_1_1RgbDetection-members.html @@ -0,0 +1,103 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::RgbDetection Member List
+
+
+ +

This is the complete list of members for roboticslab::RgbDetection, including all inherited members.

+ + + + + + + + + + + + + + + + +
close() override (defined in roboticslab::RgbDetection)roboticslab::RgbDetection
configure(yarp::os::ResourceFinder &rf) override (defined in roboticslab::RgbDetection)roboticslab::RgbDetection
cropCallback (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
cropPort (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
detectorDevice (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
frameGrabber (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
getPeriod() override (defined in roboticslab::RgbDetection)roboticslab::RgbDetection
iDetector (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
imagePort (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
interruptModule() override (defined in roboticslab::RgbDetection)roboticslab::RgbDetection
period (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
sensorDevice (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
statePort (defined in roboticslab::RgbDetection)roboticslab::RgbDetectionprivate
updateModule() override (defined in roboticslab::RgbDetection)roboticslab::RgbDetection
~RgbDetection() override (defined in roboticslab::RgbDetection)roboticslab::RgbDetectioninline
+ + + + diff --git a/classroboticslab_1_1RgbDetection.html b/classroboticslab_1_1RgbDetection.html new file mode 100644 index 00000000..4313b767 --- /dev/null +++ b/classroboticslab_1_1RgbDetection.html @@ -0,0 +1,153 @@ + + + + + + + +vision: roboticslab::RgbDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::RgbDetection Class Reference
+
+
+ +

2D detection. +

+ +

#include <RgbDetection.hpp>

+
+Inheritance diagram for roboticslab::RgbDetection:
+
+
+ +
+ + + + + + + + + + + + +

+Public Member Functions

+bool configure (yarp::os::ResourceFinder &rf) override
 
+double getPeriod () override
 
+bool updateModule () override
 
+bool interruptModule () override
 
+bool close () override
 
+ + + + + + + + + + + + + + + + + + + +

+Private Attributes

+yarp::dev::PolyDriver sensorDevice
 
+yarp::dev::IFrameGrabberImage * frameGrabber
 
+yarp::dev::PolyDriver detectorDevice
 
+IDetectoriDetector
 
+yarp::os::BufferedPort< yarp::os::Bottle > statePort
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > imagePort
 
+yarp::os::BufferedPort< yarp::os::Bottle > cropPort
 
+YarpCropCallback cropCallback
 
+double period
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1RgbDetection.png b/classroboticslab_1_1RgbDetection.png new file mode 100644 index 00000000..b8adc82e Binary files /dev/null and b/classroboticslab_1_1RgbDetection.png differ diff --git a/classroboticslab_1_1RgbdDetection-members.html b/classroboticslab_1_1RgbdDetection-members.html new file mode 100644 index 00000000..963a4d46 --- /dev/null +++ b/classroboticslab_1_1RgbdDetection-members.html @@ -0,0 +1,104 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::RgbdDetection Member List
+
+
+ +

This is the complete list of members for roboticslab::RgbdDetection, including all inherited members.

+ + + + + + + + + + + + + + + + + +
close() override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetection
configure(yarp::os::ResourceFinder &rf) override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetection
cropCallback (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
cropPort (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
depthIntrinsicParams (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
detectorDevice (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
getPeriod() override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetection
iDetector (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
imagePort (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
interruptModule() override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetection
iRGBDSensor (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
period (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
sensorDevice (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
statePort (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectionprivate
updateModule() override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetection
~RgbdDetection() override (defined in roboticslab::RgbdDetection)roboticslab::RgbdDetectioninline
+ + + + diff --git a/classroboticslab_1_1RgbdDetection.html b/classroboticslab_1_1RgbdDetection.html new file mode 100644 index 00000000..2965a14c --- /dev/null +++ b/classroboticslab_1_1RgbdDetection.html @@ -0,0 +1,156 @@ + + + + + + + +vision: roboticslab::RgbdDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::RgbdDetection Class Reference
+
+
+ +

2.5D detection. +

+ +

#include <RgbdDetection.hpp>

+
+Inheritance diagram for roboticslab::RgbdDetection:
+
+
+ +
+ + + + + + + + + + + + +

+Public Member Functions

+bool configure (yarp::os::ResourceFinder &rf) override
 
+double getPeriod () override
 
+bool updateModule () override
 
+bool interruptModule () override
 
+bool close () override
 
+ + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

+yarp::dev::PolyDriver sensorDevice
 
+yarp::dev::IRGBDSensor * iRGBDSensor
 
+yarp::sig::IntrinsicParams depthIntrinsicParams
 
+yarp::dev::PolyDriver detectorDevice
 
+IDetectoriDetector
 
+yarp::os::BufferedPort< yarp::os::Bottle > statePort
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > imagePort
 
+yarp::os::BufferedPort< yarp::os::Bottle > cropPort
 
+YarpCropCallback cropCallback
 
+double period
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1RgbdDetection.png b/classroboticslab_1_1RgbdDetection.png new file mode 100644 index 00000000..52dd5db8 Binary files /dev/null and b/classroboticslab_1_1RgbdDetection.png differ diff --git a/classroboticslab_1_1SceneReconstruction-members.html b/classroboticslab_1_1SceneReconstruction-members.html new file mode 100644 index 00000000..b8bf8cdf --- /dev/null +++ b/classroboticslab_1_1SceneReconstruction-members.html @@ -0,0 +1,107 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::SceneReconstruction Member List
+
+
+ +

This is the complete list of members for roboticslab::SceneReconstruction, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
cameraDriver (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
close() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
configure(yarp::os::ResourceFinder &rf) override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
getPeriod() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructioninline
getPoints() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
getPointsWithNormals() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
getPose() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
interruptModule() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
iRGBDSensor (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
isRunning (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
kinfu (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
pause() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
period (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
renderUpdater (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
reset() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
resume() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
rpcServer (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructionprivate
updateModule() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstruction
~SceneReconstruction() override (defined in roboticslab::SceneReconstruction)roboticslab::SceneReconstructioninline
+ + + + diff --git a/classroboticslab_1_1SceneReconstruction.html b/classroboticslab_1_1SceneReconstruction.html new file mode 100644 index 00000000..166e77cd --- /dev/null +++ b/classroboticslab_1_1SceneReconstruction.html @@ -0,0 +1,165 @@ + + + + + + + +vision: roboticslab::SceneReconstruction Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::SceneReconstruction Class Reference
+
+
+ +

Exposes Kinect Fusion as a YARP service via RPC. +

+ +

#include <SceneReconstruction.hpp>

+
+Inheritance diagram for roboticslab::SceneReconstruction:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+bool configure (yarp::os::ResourceFinder &rf) override
 
+double getPeriod () override
 
+bool updateModule () override
 
+bool interruptModule () override
 
+bool close () override
 
+bool pause () override
 
+bool resume () override
 
+bool reset () override
 
+return_pose getPose () override
 
+return_points getPoints () override
 
+return_points_with_normals getPointsWithNormals () override
 
+ + + + + + + + + + + + + + + +

+Private Attributes

+double period
 
+std::atomic_bool isRunning {false}
 
+std::unique_ptr< KinectFusionkinfu {nullptr}
 
+yarp::dev::PolyDriver cameraDriver
 
+yarp::dev::IRGBDSensor * iRGBDSensor {nullptr}
 
+std::unique_ptr< RenderUpdaterrenderUpdater {nullptr}
 
+yarp::os::RpcServer rpcServer
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1SceneReconstruction.png b/classroboticslab_1_1SceneReconstruction.png new file mode 100644 index 00000000..4fb29766 Binary files /dev/null and b/classroboticslab_1_1SceneReconstruction.png differ diff --git a/classroboticslab_1_1SegmentorThread-members.html b/classroboticslab_1_1SegmentorThread-members.html new file mode 100644 index 00000000..3b379ce8 --- /dev/null +++ b/classroboticslab_1_1SegmentorThread-members.html @@ -0,0 +1,134 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::SegmentorThread Member List
+
+
+ +

This is the complete list of members for roboticslab::SegmentorThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
algorithm (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
cropSelector (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
cx_d (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
cx_rgb (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
cy_d (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
cy_rgb (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
depthHighThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
depthLowThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
fx_d (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
fx_rgb (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
fy_d (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
fy_rgb (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
highHThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
highWThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
inCropSelectorPort (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
init(yarp::os::ResourceFinder &rf) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThread
iRGBDSensor (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
locate (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
lowHThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
lowWThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
maxNumBlobs (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
morphClosing (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
morphOpening (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
numberUtilityVoxels (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
occupancyThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
outCropSelectorImg (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
outFeatures (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
outFeaturesFormat (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
outImage (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
pOutImg (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
pOutPort (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
processor (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
run() (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThread
searchAreaDilatation (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
seeBounding (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
SegmentorThread() (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadinline
setCropSelector(int cropSelector) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadinline
setInCropSelectorPort(yarp::os::Port *inCropSelectorPort) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadinline
setIRGBDSensor(yarp::dev::IRGBDSensor *_iRGBDSensor) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThread
setOutCropSelectorImg(yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > *outCropSelectorImg) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadinline
setOutImg(yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelMono16 > > *_pOutImg) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThread
setOutPort(yarp::os::Port *_pOutPort) (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThread
threshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
utilityDepthHighThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
utilityDepthLowThreshold (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
voxelResolution (defined in roboticslab::SegmentorThread)roboticslab::SegmentorThreadprivate
+ + + + diff --git a/classroboticslab_1_1SegmentorThread.html b/classroboticslab_1_1SegmentorThread.html new file mode 100644 index 00000000..155f9908 --- /dev/null +++ b/classroboticslab_1_1SegmentorThread.html @@ -0,0 +1,246 @@ + + + + + + + +vision: roboticslab::SegmentorThread Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::SegmentorThread Class Reference
+
+
+ +

Implements voxelOccupancyDetection PeriodicThread. +

+ +

#include <SegmentorThread.hpp>

+
+Inheritance diagram for roboticslab::SegmentorThread:
+
+
+ +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void setIRGBDSensor (yarp::dev::IRGBDSensor *_iRGBDSensor)
 
+void setOutImg (yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelMono16 > > *_pOutImg)
 
+void setOutPort (yarp::os::Port *_pOutPort)
 
+void init (yarp::os::ResourceFinder &rf)
 
+void run ()
 
+void setCropSelector (int cropSelector)
 
+void setOutCropSelectorImg (yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > *outCropSelectorImg)
 
+void setInCropSelectorPort (yarp::os::Port *inCropSelectorPort)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

+yarp::dev::IRGBDSensor * iRGBDSensor
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelMono16 > > * pOutImg
 
+yarp::os::Port * pOutPort
 
+std::string algorithm
 
+std::string locate
 
+int maxNumBlobs
 
+double morphClosing
 
+double morphOpening
 
+int outFeaturesFormat
 
+int outImage
 
+int seeBounding
 
+int threshold
 
+double fx_d
 
+double fy_d
 
+double cx_d
 
+double cy_d
 
+double fx_rgb
 
+double fy_rgb
 
+double cx_rgb
 
+double cy_rgb
 
+yarp::os::Bottle outFeatures
 
+int cropSelector
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > * outCropSelectorImg
 
+yarp::os::Port * inCropSelectorPort
 
+DataProcessor processor
 
+int searchAreaDilatation
 
+float depthLowThreshold
 
+float depthHighThreshold
 
+int occupancyThreshold
 
+int voxelResolution
 
+float utilityDepthLowThreshold
 
+float utilityDepthHighThreshold
 
+int numberUtilityVoxels
 
+float lowWThreshold
 
+float highWThreshold
 
+float lowHThreshold
 
+float highHThreshold
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1SegmentorThread.png b/classroboticslab_1_1SegmentorThread.png new file mode 100644 index 00000000..0d7447db Binary files /dev/null and b/classroboticslab_1_1SegmentorThread.png differ diff --git a/classroboticslab_1_1SharedArea-members.html b/classroboticslab_1_1SharedArea-members.html new file mode 100644 index 00000000..bd3e8461 --- /dev/null +++ b/classroboticslab_1_1SharedArea-members.html @@ -0,0 +1,94 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::SharedArea Member List
+
+
+ +

This is the complete list of members for roboticslab::SharedArea, including all inherited members.

+ + + + + + + +
getLC(double _lineCoords[6]) (defined in roboticslab::SharedArea)roboticslab::SharedArea
getLongLC(double _longLineCoords[6]) (defined in roboticslab::SharedArea)roboticslab::SharedArea
init() (defined in roboticslab::SharedArea)roboticslab::SharedArea
lcMutex (defined in roboticslab::SharedArea)roboticslab::SharedAreaprivate
lineCoords (defined in roboticslab::SharedArea)roboticslab::SharedAreaprivate
setLC(const double _lineCoords[6]) (defined in roboticslab::SharedArea)roboticslab::SharedArea
+ + + + diff --git a/classroboticslab_1_1SharedArea.html b/classroboticslab_1_1SharedArea.html new file mode 100644 index 00000000..9a1e35d7 --- /dev/null +++ b/classroboticslab_1_1SharedArea.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::SharedArea Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::SharedArea Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

+void init ()
 
+void setLC (const double _lineCoords[6])
 
+void getLC (double _lineCoords[6])
 
+void getLongLC (double _longLineCoords[6])
 
+ + + + + +

+Private Attributes

+double lineCoords [6]
 
+std::mutex lcMutex
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1Travis-members.html b/classroboticslab_1_1Travis-members.html new file mode 100644 index 00000000..363dd5fb --- /dev/null +++ b/classroboticslab_1_1Travis-members.html @@ -0,0 +1,117 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::Travis Member List
+
+
+ +

This is the complete list of members for roboticslab::Travis, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_contoursroboticslab::Travisprotected
_imgroboticslab::Travisprotected
_imgBinroboticslab::Travisprotected
_imgBin3roboticslab::Travisprotected
_imgHsvroboticslab::Travisprotected
_minRotatedRectsroboticslab::Travisprotected
_overwriteroboticslab::Travisprotected
_quietroboticslab::Travisprotected
binarize(const char *algorithm)roboticslab::Travis
binarize(const char *algorithm, const double &threshold)roboticslab::Travis
binarize(const char *algorithm, const double &min, const double &max)roboticslab::Travis
blobize(const int &maxNumBlobs)roboticslab::Travis
getBlobsAngle(const int &method, std::vector< double > &angles)roboticslab::Travis
getBlobsArea(std::vector< double > &areas)roboticslab::Travis
getBlobsAspectRatio(std::vector< double > &aspectRatios, std::vector< double > &axisFirsts, std::vector< double > &axisSeconds)roboticslab::Travis
getBlobsHSV(std::vector< double > &hues, std::vector< double > &vals, std::vector< double > &sats, std::vector< double > &hueStdDevs, std::vector< double > &valStdDevs, std::vector< double > &satStdDevs)roboticslab::Travis
getBlobsPerimeter(std::vector< double > &perimeters) (defined in roboticslab::Travis)roboticslab::Travis
getBlobsRect(std::vector< cv::Rect > &rects) (defined in roboticslab::Travis)roboticslab::Travis
getBlobsRectangularity(std::vector< double > &rectangularities)roboticslab::Travis
getBlobsSolidity(std::vector< double > &solidities)roboticslab::Travis
getBlobsXY(std::vector< cv::Point2d > &locations)roboticslab::Travis
getCvMat(const int &image, const int &vizualization)roboticslab::Travis
morphClosing(const int &closure)roboticslab::Travis
morphOpening(const int &opening)roboticslab::Travis
pushContour(const std::vector< cv::Point > &contour)roboticslab::Travis
release()roboticslab::Travis
setBinCvMat(const cv::Mat &image)roboticslab::Travis
setCvMat(const cv::Mat &image)roboticslab::Travis
Travis(bool quiet=true, bool overwrite=true)roboticslab::Travisinline
+ + + + diff --git a/classroboticslab_1_1Travis.html b/classroboticslab_1_1Travis.html new file mode 100644 index 00000000..f03e7b4c --- /dev/null +++ b/classroboticslab_1_1Travis.html @@ -0,0 +1,933 @@ + + + + + + + +vision: roboticslab::Travis Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::Travis Class Reference
+
+
+ +

The Travis class implements all the algorithms on a single image. +

+ +

#include <TravisLib.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Travis (bool quiet=true, bool overwrite=true)
 
bool setCvMat (const cv::Mat &image)
 
bool setBinCvMat (const cv::Mat &image)
 
bool binarize (const char *algorithm)
 
bool binarize (const char *algorithm, const double &threshold)
 
bool binarize (const char *algorithm, const double &min, const double &max)
 
void morphClosing (const int &closure)
 
void morphOpening (const int &opening)
 
int blobize (const int &maxNumBlobs)
 
void pushContour (const std::vector< cv::Point > &contour)
 
bool getBlobsXY (std::vector< cv::Point2d > &locations)
 
bool getBlobsArea (std::vector< double > &areas)
 
bool getBlobsSolidity (std::vector< double > &solidities)
 
+bool getBlobsRect (std::vector< cv::Rect > &rects)
 
bool getBlobsAngle (const int &method, std::vector< double > &angles)
 
bool getBlobsAspectRatio (std::vector< double > &aspectRatios, std::vector< double > &axisFirsts, std::vector< double > &axisSeconds)
 
+bool getBlobsPerimeter (std::vector< double > &perimeters)
 
bool getBlobsRectangularity (std::vector< double > &rectangularities)
 
bool getBlobsHSV (std::vector< double > &hues, std::vector< double > &vals, std::vector< double > &sats, std::vector< double > &hueStdDevs, std::vector< double > &valStdDevs, std::vector< double > &satStdDevs)
 
cv::Mat & getCvMat (const int &image, const int &vizualization)
 
void release ()
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _quiet
 
bool _overwrite
 
cv::Mat _img
 
cv::Mat _imgHsv
 
cv::Mat _imgBin
 
cv::Mat _imgBin3
 
std::vector< std::vector< cv::Point > > _contours
 
std::vector< cv::RotatedRect > _minRotatedRects
 
+

Constructor & Destructor Documentation

+ +

◆ Travis()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
roboticslab::Travis::Travis (bool quiet = true,
bool overwrite = true 
)
+
+inline
+
+

Travis class constructor.

Parameters
+ + + +
quietsuppress messages displayed upon success/failure.
overwritewill not make a copy (faster, less memory), but will overwrite the image you pass.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ binarize() [1/3]

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::binarize (const char * algorithm)
+
+

Binarize the image.

Parameters
+ + +
algorithmimplemented: "redMinusGreen", "greenMinusRed".
+
+
+ +
+
+ +

◆ binarize() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::Travis::binarize (const char * algorithm,
const double & min,
const double & max 
)
+
+

Binarize the image.

Parameters
+ + + + +
algorithmimplemented: "redMinusGreen", "greenMinusRed".
mini.e. 110.
maxi.e. 130.
+
+
+ +
+
+ +

◆ binarize() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool roboticslab::Travis::binarize (const char * algorithm,
const double & threshold 
)
+
+

Binarize the image.

Parameters
+ + + +
algorithmimplemented: "redMinusGreen", "greenMinusRed".
thresholdi.e. 50.
+
+
+ +
+
+ +

◆ blobize()

+ +
+
+ + + + + + + + +
int roboticslab::Travis::blobize (const int & maxNumBlobs)
+
+

Use findContours to get what we use as blobs.

Parameters
+ + +
maxNumBlobsthe number of max blobs to keep, the rest get truncated.
+
+
+
Returns
number of blobs detected (can be 0), truncated by maxNumBlobs.
+ +
+
+ +

◆ getBlobsAngle()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool roboticslab::Travis::getBlobsAngle (const int & method,
std::vector< double > & angles 
)
+
+

This function calculates ALPHA, and _minRotatedRects as a side effect.

Parameters
+ + + +
method0=box, 1=ellipse.
anglesreturned.
+
+
+ +
+
+ +

◆ getBlobsArea()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::getBlobsArea (std::vector< double > & areas)
+
+

This function calculates the Area of the blobs (contours).

Parameters
+ + +
areasreturned.
+
+
+ +
+
+ +

◆ getBlobsAspectRatio()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::Travis::getBlobsAspectRatio (std::vector< double > & aspectRatios,
std::vector< double > & axisFirsts,
std::vector< double > & axisSeconds 
)
+
+

This function calculates the Aspect Ratios and Axes of the stored _minRotatedRects.

Parameters
+ + + + +
aspectRatiosreturned.
axisFirstsreturned.
axisSecondsreturned.
+
+
+ +
+
+ +

◆ getBlobsHSV()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::Travis::getBlobsHSV (std::vector< double > & hues,
std::vector< double > & vals,
std::vector< double > & sats,
std::vector< double > & hueStdDevs,
std::vector< double > & valStdDevs,
std::vector< double > & satStdDevs 
)
+
+

This function calculates HSV Means and Standard Deviations.

Parameters
+ + + + + + + +
huesreturned.
valsreturned.
satsreturned.
hueStdDevsreturned.
valStdDevsreturned.
satStdDevsreturned.
+
+
+ +
+
+ +

◆ getBlobsRectangularity()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::getBlobsRectangularity (std::vector< double > & rectangularities)
+
+

This function calculates the Rectangularities of the stored _minRotatedRects.

Parameters
+ + +
rectangularitiesreturned.
+
+
+ +
+
+ +

◆ getBlobsSolidity()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::getBlobsSolidity (std::vector< double > & solidities)
+
+

This function calculates the Solidity of the blobs (contours).

Parameters
+ + +
soliditiesreturned.
+
+
+ +
+
+ +

◆ getBlobsXY()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::getBlobsXY (std::vector< cv::Point2d > & locations)
+
+

This function calculates X and Y as moments directly extracted from the stored contours.

Parameters
+ + +
locationsreturned.
+
+
+ +
+
+ +

◆ getCvMat()

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Mat & roboticslab::Travis::getCvMat (const int & image,
const int & vizualization 
)
+
+

Get the image in cv::Mat format.

Parameters
+ + + +
image
vizualizationparam, 0=None,1=Box,2=Contour,3=Both.
+
+
+
Returns
the image, in cv::Mat format.
+ +
+
+ +

◆ morphClosing()

+ +
+
+ + + + + + + + +
void roboticslab::Travis::morphClosing (const int & closure)
+
+

Morphologically closing the binarized image.

Parameters
+ + +
closurei.e. 4 for a 100x100 image, 15 for higher resolution.
+
+
+ +
+
+ +

◆ morphOpening()

+ +
+
+ + + + + + + + +
void roboticslab::Travis::morphOpening (const int & opening)
+
+

Morphologically opening the binarized image.

Parameters
+ + +
openingi.e. 4 for a 100x100 image, 15 for higher resolution.
+
+
+ +
+
+ +

◆ pushContour()

+ +
+
+ + + + + + + + +
void roboticslab::Travis::pushContour (const std::vector< cv::Point > & contour)
+
+

Push a contour.

Parameters
+ + +
contourto be pushed on to the stack. Use with care.
+
+
+ +
+
+ +

◆ release()

+ +
+
+ + + + + + + +
void roboticslab::Travis::release ()
+
+

Release _img and _imgBin3 to prevent memory leaks.

+ +
+
+ +

◆ setBinCvMat()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::setBinCvMat (const cv::Mat & image)
+
+

Set the image in cv::Mat format.

Parameters
+ + +
imagethe image to set, in cv::Mat format.
+
+
+
Returns
true if the object was set successfully.
+ +
+
+ +

◆ setCvMat()

+ +
+
+ + + + + + + + +
bool roboticslab::Travis::setCvMat (const cv::Mat & image)
+
+

Set the image in cv::Mat format.

Parameters
+ + +
imagethe image to set, in cv::Mat format.
+
+
+
Returns
true if the object was set successfully.
+ +
+
+

Member Data Documentation

+ +

◆ _contours

+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<cv::Point> > roboticslab::Travis::_contours
+
+protected
+
+

Store the contours (blob contours).

+ +
+
+ +

◆ _img

+ +
+
+ + + + + +
+ + + + +
cv::Mat roboticslab::Travis::_img
+
+protected
+
+

Store the image in cv::Mat format.

+ +
+
+ +

◆ _imgBin

+ +
+
+ + + + + +
+ + + + +
cv::Mat roboticslab::Travis::_imgBin
+
+protected
+
+

Store the binary image in cv::Mat format.

+ +
+
+ +

◆ _imgBin3

+ +
+
+ + + + + +
+ + + + +
cv::Mat roboticslab::Travis::_imgBin3
+
+protected
+
+

Store the binary image fit for 3 layer sending in cv::Mat format.

+ +
+
+ +

◆ _imgHsv

+ +
+
+ + + + + +
+ + + + +
cv::Mat roboticslab::Travis::_imgHsv
+
+protected
+
+

Store the hsv image in cv::Mat format.

+ +
+
+ +

◆ _minRotatedRects

+ +
+
+ + + + + +
+ + + + +
std::vector<cv::RotatedRect> roboticslab::Travis::_minRotatedRects
+
+protected
+
+

Store the box.

+ +
+
+ +

◆ _overwrite

+ +
+
+ + + + + +
+ + + + +
bool roboticslab::Travis::_overwrite
+
+protected
+
+

Store the overwrite parameter.

+ +
+
+ +

◆ _quiet

+ +
+
+ + + + + +
+ + + + +
bool roboticslab::Travis::_quiet
+
+protected
+
+

Store the verbosity level.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1VoxelOccupancyDetection-members.html b/classroboticslab_1_1VoxelOccupancyDetection-members.html new file mode 100644 index 00000000..614034c1 --- /dev/null +++ b/classroboticslab_1_1VoxelOccupancyDetection-members.html @@ -0,0 +1,101 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::VoxelOccupancyDetection Member List
+
+
+ +

This is the complete list of members for roboticslab::VoxelOccupancyDetection, including all inherited members.

+ + + + + + + + + + + + + + +
configure(yarp::os::ResourceFinder &rf) (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetection
cropSelector (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
dd (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
getPeriod() (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
inCropSelectorPort (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
interruptModule() (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
iRGBDSensor (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
outCropSelectorImg (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
outImg (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
outPort (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
segmentorThread (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
updateModule() (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
watchdog (defined in roboticslab::VoxelOccupancyDetection)roboticslab::VoxelOccupancyDetectionprivate
+ + + + diff --git a/classroboticslab_1_1VoxelOccupancyDetection.html b/classroboticslab_1_1VoxelOccupancyDetection.html new file mode 100644 index 00000000..5431d32c --- /dev/null +++ b/classroboticslab_1_1VoxelOccupancyDetection.html @@ -0,0 +1,154 @@ + + + + + + + +vision: roboticslab::VoxelOccupancyDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::VoxelOccupancyDetection Class Reference
+
+
+ +

Computer Vision 1. +

+ +

#include <VoxelOccupancyDetection.hpp>

+
+Inheritance diagram for roboticslab::VoxelOccupancyDetection:
+
+
+ +
+ + + + +

+Public Member Functions

+bool configure (yarp::os::ResourceFinder &rf)
 
+ + + + + + + +

+Private Member Functions

+bool interruptModule ()
 
+double getPeriod ()
 
+bool updateModule ()
 
+ + + + + + + + + + + + + + + + + + + +

+Private Attributes

+SegmentorThread segmentorThread
 
+yarp::dev::PolyDriver dd
 
+yarp::dev::IRGBDSensor * iRGBDSensor
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelMono16 > > outImg
 
+yarp::os::Port outPort
 
+int cropSelector
 
+yarp::os::BufferedPort< yarp::sig::ImageOf< yarp::sig::PixelRgb > > outCropSelectorImg
 
+yarp::os::Port inCropSelectorPort
 
+double watchdog
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1VoxelOccupancyDetection.png b/classroboticslab_1_1VoxelOccupancyDetection.png new file mode 100644 index 00000000..a5838479 Binary files /dev/null and b/classroboticslab_1_1VoxelOccupancyDetection.png differ diff --git a/classroboticslab_1_1YarpCropCallback-members.html b/classroboticslab_1_1YarpCropCallback-members.html new file mode 100644 index 00000000..a1152007 --- /dev/null +++ b/classroboticslab_1_1YarpCropCallback-members.html @@ -0,0 +1,94 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::YarpCropCallback Member List
+
+
+ +

This is the complete list of members for roboticslab::YarpCropCallback, including all inherited members.

+ + + + + + + +
cropMutex (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallbackmutableprivate
cropVertices (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallbackprivate
getVertices() const (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallback
isCropping (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallbackprivate
onRead(yarp::os::Bottle &bot, const yarp::os::TypedReader< yarp::os::Bottle > &reader) override (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallback
VertexType typedef (defined in roboticslab::YarpCropCallback)roboticslab::YarpCropCallback
+ + + + diff --git a/classroboticslab_1_1YarpCropCallback.html b/classroboticslab_1_1YarpCropCallback.html new file mode 100644 index 00000000..ebb88d45 --- /dev/null +++ b/classroboticslab_1_1YarpCropCallback.html @@ -0,0 +1,128 @@ + + + + + + + +vision: roboticslab::YarpCropCallback Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Types | +Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::YarpCropCallback Class Reference
+
+
+
+Inheritance diagram for roboticslab::YarpCropCallback:
+
+
+ +
+ + + + +

+Public Types

+using VertexType = std::pair< int, int >
 
+ + + + + +

+Public Member Functions

+void onRead (yarp::os::Bottle &bot, const yarp::os::TypedReader< yarp::os::Bottle > &reader) override
 
+yarp::sig::VectorOf< VertexType > getVertices () const
 
+ + + + + + + +

+Private Attributes

+yarp::sig::VectorOf< VertexType > cropVertices
 
+std::mutex cropMutex
 
+bool isCropping {false}
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1YarpCropCallback.png b/classroboticslab_1_1YarpCropCallback.png new file mode 100644 index 00000000..9f3e3913 Binary files /dev/null and b/classroboticslab_1_1YarpCropCallback.png differ diff --git a/classroboticslab_1_1test_1_1ColorRegionDetectorTest-members.html b/classroboticslab_1_1test_1_1ColorRegionDetectorTest-members.html new file mode 100644 index 00000000..9f04602d --- /dev/null +++ b/classroboticslab_1_1test_1_1ColorRegionDetectorTest-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::ColorRegionDetectorTest Member List
+
+
+ +

This is the complete list of members for roboticslab::test::ColorRegionDetectorTest, including all inherited members.

+ + + + + +
detectorDevice (defined in roboticslab::test::ColorRegionDetectorTest)roboticslab::test::ColorRegionDetectorTestprotected
iDetector (defined in roboticslab::test::ColorRegionDetectorTest)roboticslab::test::ColorRegionDetectorTestprotected
SetUp() override (defined in roboticslab::test::ColorRegionDetectorTest)roboticslab::test::ColorRegionDetectorTestinline
TearDown() override (defined in roboticslab::test::ColorRegionDetectorTest)roboticslab::test::ColorRegionDetectorTestinline
+ + + + diff --git a/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html new file mode 100644 index 00000000..fcc544a0 --- /dev/null +++ b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::ColorRegionDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::test::ColorRegionDetectorTest Class Reference
+
+
+ +

Tests ColorRegionDetector. +

+
+Inheritance diagram for roboticslab::test::ColorRegionDetectorTest:
+
+
+ +
+ + + + + + +

+Public Member Functions

+void SetUp () override
 
+void TearDown () override
 
+ + + + + +

+Protected Attributes

+roboticslab::IDetectoriDetector
 
+yarp::dev::PolyDriver detectorDevice
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1test_1_1ColorRegionDetectorTest.png b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.png new file mode 100644 index 00000000..0b171c04 Binary files /dev/null and b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.png differ diff --git a/classroboticslab_1_1test_1_1DnnDetectorTest-members.html b/classroboticslab_1_1test_1_1DnnDetectorTest-members.html new file mode 100644 index 00000000..300bc66c --- /dev/null +++ b/classroboticslab_1_1test_1_1DnnDetectorTest-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::DnnDetectorTest Member List
+
+
+ +

This is the complete list of members for roboticslab::test::DnnDetectorTest, including all inherited members.

+ + + + + +
detectorDevice (defined in roboticslab::test::DnnDetectorTest)roboticslab::test::DnnDetectorTestprotected
iDetector (defined in roboticslab::test::DnnDetectorTest)roboticslab::test::DnnDetectorTestprotected
SetUp() override (defined in roboticslab::test::DnnDetectorTest)roboticslab::test::DnnDetectorTestinline
TearDown() override (defined in roboticslab::test::DnnDetectorTest)roboticslab::test::DnnDetectorTestinline
+ + + + diff --git a/classroboticslab_1_1test_1_1DnnDetectorTest.html b/classroboticslab_1_1test_1_1DnnDetectorTest.html new file mode 100644 index 00000000..abc36779 --- /dev/null +++ b/classroboticslab_1_1test_1_1DnnDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::DnnDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::test::DnnDetectorTest Class Reference
+
+
+ +

Tests DnnDetector. +

+
+Inheritance diagram for roboticslab::test::DnnDetectorTest:
+
+
+ +
+ + + + + + +

+Public Member Functions

+void SetUp () override
 
+void TearDown () override
 
+ + + + + +

+Protected Attributes

+roboticslab::IDetectoriDetector
 
+yarp::dev::PolyDriver detectorDevice
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1test_1_1DnnDetectorTest.png b/classroboticslab_1_1test_1_1DnnDetectorTest.png new file mode 100644 index 00000000..614d7c94 Binary files /dev/null and b/classroboticslab_1_1test_1_1DnnDetectorTest.png differ diff --git a/classroboticslab_1_1test_1_1HaarDetectorTest-members.html b/classroboticslab_1_1test_1_1HaarDetectorTest-members.html new file mode 100644 index 00000000..0823e2e5 --- /dev/null +++ b/classroboticslab_1_1test_1_1HaarDetectorTest-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::HaarDetectorTest Member List
+
+
+ +

This is the complete list of members for roboticslab::test::HaarDetectorTest, including all inherited members.

+ + + + + +
detectorDevice (defined in roboticslab::test::HaarDetectorTest)roboticslab::test::HaarDetectorTestprotected
iDetector (defined in roboticslab::test::HaarDetectorTest)roboticslab::test::HaarDetectorTestprotected
SetUp() override (defined in roboticslab::test::HaarDetectorTest)roboticslab::test::HaarDetectorTestinline
TearDown() override (defined in roboticslab::test::HaarDetectorTest)roboticslab::test::HaarDetectorTestinline
+ + + + diff --git a/classroboticslab_1_1test_1_1HaarDetectorTest.html b/classroboticslab_1_1test_1_1HaarDetectorTest.html new file mode 100644 index 00000000..5340b08b --- /dev/null +++ b/classroboticslab_1_1test_1_1HaarDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::HaarDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
roboticslab::test::HaarDetectorTest Class Reference
+
+
+ +

Tests ColorRegionDetector. +

+
+Inheritance diagram for roboticslab::test::HaarDetectorTest:
+
+
+ +
+ + + + + + +

+Public Member Functions

+void SetUp () override
 
+void TearDown () override
 
+ + + + + +

+Protected Attributes

+roboticslab::IDetectoriDetector
 
+yarp::dev::PolyDriver detectorDevice
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1test_1_1HaarDetectorTest.png b/classroboticslab_1_1test_1_1HaarDetectorTest.png new file mode 100644 index 00000000..61a56121 Binary files /dev/null and b/classroboticslab_1_1test_1_1HaarDetectorTest.png differ diff --git a/classroboticslab_1_1test_1_1QrDetectorTest-members.html b/classroboticslab_1_1test_1_1QrDetectorTest-members.html new file mode 100644 index 00000000..a3e34cbb --- /dev/null +++ b/classroboticslab_1_1test_1_1QrDetectorTest-members.html @@ -0,0 +1,93 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::QrDetectorTest Member List
+
+
+ +

This is the complete list of members for roboticslab::test::QrDetectorTest, including all inherited members.

+ + + + + + +
detectorDevice (defined in roboticslab::test::QrDetectorTest)roboticslab::test::QrDetectorTestprotected
expectedValues (defined in roboticslab::test::QrDetectorTest)roboticslab::test::QrDetectorTestprotectedstatic
iDetector (defined in roboticslab::test::QrDetectorTest)roboticslab::test::QrDetectorTestprotected
SetUp() override (defined in roboticslab::test::QrDetectorTest)roboticslab::test::QrDetectorTestinline
TearDown() override (defined in roboticslab::test::QrDetectorTest)roboticslab::test::QrDetectorTestinline
+ + + + diff --git a/classroboticslab_1_1test_1_1QrDetectorTest.html b/classroboticslab_1_1test_1_1QrDetectorTest.html new file mode 100644 index 00000000..363881f3 --- /dev/null +++ b/classroboticslab_1_1test_1_1QrDetectorTest.html @@ -0,0 +1,127 @@ + + + + + + + +vision: roboticslab::test::QrDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
roboticslab::test::QrDetectorTest Class Reference
+
+
+ +

Tests QrDetector. +

+
+Inheritance diagram for roboticslab::test::QrDetectorTest:
+
+
+ +
+ + + + + + +

+Public Member Functions

+void SetUp () override
 
+void TearDown () override
 
+ + + + + +

+Protected Attributes

+roboticslab::IDetectoriDetector
 
+yarp::dev::PolyDriver detectorDevice
 
+ + + +

+Static Protected Attributes

+static std::unordered_set< yarp::os::Property, PropertyHasher, PropertyComparerexpectedValues
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1test_1_1QrDetectorTest.png b/classroboticslab_1_1test_1_1QrDetectorTest.png new file mode 100644 index 00000000..849a135f Binary files /dev/null and b/classroboticslab_1_1test_1_1QrDetectorTest.png differ diff --git a/classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html b/classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html new file mode 100644 index 00000000..ba1924cf --- /dev/null +++ b/classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html @@ -0,0 +1,93 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::YarpCloudUtilsTest Member List
+
+
+ +

This is the complete list of members for roboticslab::test::YarpCloudUtilsTest, including all inherited members.

+ + + + + + +
n_faces (defined in roboticslab::test::YarpCloudUtilsTest)roboticslab::test::YarpCloudUtilsTestprotectedstatic
n_points (defined in roboticslab::test::YarpCloudUtilsTest)roboticslab::test::YarpCloudUtilsTestprotectedstatic
path (defined in roboticslab::test::YarpCloudUtilsTest)roboticslab::test::YarpCloudUtilsTestprotectedstatic
SetUp() override (defined in roboticslab::test::YarpCloudUtilsTest)roboticslab::test::YarpCloudUtilsTestinline
TearDown() override (defined in roboticslab::test::YarpCloudUtilsTest)roboticslab::test::YarpCloudUtilsTestinline
+ + + + diff --git a/classroboticslab_1_1test_1_1YarpCloudUtilsTest.html b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.html new file mode 100644 index 00000000..90c70e1a --- /dev/null +++ b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.html @@ -0,0 +1,123 @@ + + + + + + + +vision: roboticslab::test::YarpCloudUtilsTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Static Protected Attributes | +List of all members
+
+
roboticslab::test::YarpCloudUtilsTest Class Reference
+
+
+ +

Tests YarpCloudUtils. +

+
+Inheritance diagram for roboticslab::test::YarpCloudUtilsTest:
+
+
+ +
+ + + + + + +

+Public Member Functions

+void SetUp () override
 
+void TearDown () override
 
+ + + + + + + +

+Static Protected Attributes

+static const int n_points = 25
 
+static const int n_faces = 10
 
+static const std::string path = PLY_PATH
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classroboticslab_1_1test_1_1YarpCloudUtilsTest.png b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.png new file mode 100644 index 00000000..a1d109f7 Binary files /dev/null and b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.png differ diff --git a/classroboticslab_1_1vtkTimerCallback-members.html b/classroboticslab_1_1vtkTimerCallback-members.html new file mode 100644 index 00000000..6601deec --- /dev/null +++ b/classroboticslab_1_1vtkTimerCallback-members.html @@ -0,0 +1,116 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::vtkTimerCallback Member List
+
+
+ +

This is the complete list of members for roboticslab::vtkTimerCallback, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cloud (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
cloud_cb_(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cbCloud) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallback
cloud_filtered (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
cloud_filtered_vtkPD (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
cloud_vtkPD (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
cloudInit (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
convertPointCloudToVTKPolyData(const pcl::PointCloud< pcl::PointXYZ > &cloud, vtkSmartPointer< vtkPolyData > &polydata) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
createFilteredCloud(pcl::PointCloud< pcl::PointXYZ >::Ptr &_outCloud) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
Execute(vtkObject *caller, unsigned long eventId, void *vtkNotUsed(callData)) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackvirtual
init() (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallback
interface (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
lineSource (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
makeCloudActor(vtkActor *_cloudActor) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
makeFilteredCloudActor(vtkActor *_filteredCloudActor) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
makeLineActor(vtkActor *_lineActor) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
New() (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackinlinestatic
objectActorCollection (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
objectSegmentation(pcl::PointCloud< pcl::PointXYZ >::Ptr &_inCloud, vtkActorCollection *_actorCollection) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
p0 (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
p1 (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
removePlanes(pcl::PointCloud< pcl::PointXYZ >::Ptr &_inOutCloud) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
renderer (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
setRenderer(vtkRenderer *_renderer) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallback
setSharedArea(SharedArea *_sharedArea) (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallback
sharedArea (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
updateCloud() (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
updateFilteredCloud() (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
updateLine() (defined in roboticslab::vtkTimerCallback)roboticslab::vtkTimerCallbackprivate
+ + + + diff --git a/classroboticslab_1_1vtkTimerCallback.html b/classroboticslab_1_1vtkTimerCallback.html new file mode 100644 index 00000000..a11815e1 --- /dev/null +++ b/classroboticslab_1_1vtkTimerCallback.html @@ -0,0 +1,202 @@ + + + + + + + +vision: roboticslab::vtkTimerCallback Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Static Public Member Functions | +Private Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::vtkTimerCallback Class Reference
+
+
+ +

#include <vtkTimerCallback.hpp>

+
+Inheritance diagram for roboticslab::vtkTimerCallback:
+
+
+ +
+ + + + + + + + + + + + +

+Public Member Functions

+void init ()
 
+void setRenderer (vtkRenderer *_renderer)
 
+void setSharedArea (SharedArea *_sharedArea)
 
+void cloud_cb_ (const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cbCloud)
 
+virtual void Execute (vtkObject *caller, unsigned long eventId, void *vtkNotUsed(callData))
 
+ + + +

+Static Public Member Functions

+static vtkTimerCallbackNew ()
 
+ + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

+void makeLineActor (vtkActor *_lineActor)
 
+void updateLine ()
 
+void makeCloudActor (vtkActor *_cloudActor)
 
+void updateCloud ()
 
+void makeFilteredCloudActor (vtkActor *_filteredCloudActor)
 
+void updateFilteredCloud ()
 
+void createFilteredCloud (pcl::PointCloud< pcl::PointXYZ >::Ptr &_outCloud)
 
+void removePlanes (pcl::PointCloud< pcl::PointXYZ >::Ptr &_inOutCloud)
 
+void objectSegmentation (pcl::PointCloud< pcl::PointXYZ >::Ptr &_inCloud, vtkActorCollection *_actorCollection)
 
+void convertPointCloudToVTKPolyData (const pcl::PointCloud< pcl::PointXYZ > &cloud, vtkSmartPointer< vtkPolyData > &polydata)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

+vtkRenderer * renderer
 
+SharedAreasharedArea
 
+vtkSmartPointer< vtkLineSource > lineSource
 
+double p0 [3]
 
+double p1 [3]
 
+pcl::Grabber * interface
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr cloud
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr cloud_filtered
 
+bool cloudInit
 
+vtkSmartPointer< vtkPolyData > cloud_vtkPD
 
+vtkSmartPointer< vtkPolyData > cloud_filtered_vtkPD
 
+vtkSmartPointer< vtkActorCollection > objectActorCollection
 
+

Detailed Description

+

The vtkTimerCallback object connects to the Kinect, connects its timer event to a member as a callback function so the Kinect data can always be updated. It forces re-render, and recalculates kinect object - Line intersection. The Line data is always updated as it proceeds from the Shared Area.

+

The documentation for this class was generated from the following files: +
+ + + + diff --git a/classroboticslab_1_1vtkTimerCallback.png b/classroboticslab_1_1vtkTimerCallback.png new file mode 100644 index 00000000..3f9c03bc Binary files /dev/null and b/classroboticslab_1_1vtkTimerCallback.png differ diff --git a/classtinyply_1_1Buffer-members.html b/classtinyply_1_1Buffer-members.html new file mode 100644 index 00000000..ca976807 --- /dev/null +++ b/classtinyply_1_1Buffer-members.html @@ -0,0 +1,97 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tinyply::Buffer Member List
+
+
+ +

This is the complete list of members for tinyply::Buffer, including all inherited members.

+ + + + + + + + + + +
alias (defined in tinyply::Buffer)tinyply::Bufferprivate
Buffer() (defined in tinyply::Buffer)tinyply::Bufferinline
Buffer(const size_t size) (defined in tinyply::Buffer)tinyply::Bufferinline
Buffer(const uint8_t *ptr) (defined in tinyply::Buffer)tinyply::Bufferinline
data (defined in tinyply::Buffer)tinyply::Bufferprivate
get() (defined in tinyply::Buffer)tinyply::Bufferinline
get_const() (defined in tinyply::Buffer)tinyply::Bufferinline
size (defined in tinyply::Buffer)tinyply::Bufferprivate
size_bytes() const (defined in tinyply::Buffer)tinyply::Bufferinline
+ + + + diff --git a/classtinyply_1_1Buffer.html b/classtinyply_1_1Buffer.html new file mode 100644 index 00000000..db20b96d --- /dev/null +++ b/classtinyply_1_1Buffer.html @@ -0,0 +1,129 @@ + + + + + + + +vision: tinyply::Buffer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Public Member Functions | +Private Attributes | +List of all members
+
+
tinyply::Buffer Class Reference
+
+
+ + + + +

+Classes

struct  delete_array
 
+ + + + + + + + + + + +

+Public Member Functions

Buffer (const size_t size)
 
Buffer (const uint8_t *ptr)
 
+uint8_t * get ()
 
+const uint8_t * get_const ()
 
+size_t size_bytes () const
 
+ + + + + + + +

+Private Attributes

+uint8_t * alias { nullptr }
 
+std::unique_ptr< uint8_t, decltype(Buffer::delete_array())> data
 
+size_t size {0}
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/closed.png differ diff --git a/dir_1c5cf7249402b1a93ff9072b579fee69.html b/dir_1c5cf7249402b1a93ff9072b579fee69.html new file mode 100644 index 00000000..36d96e19 --- /dev/null +++ b/dir_1c5cf7249402b1a93ff9072b579fee69.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleProcessCloud Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleProcessCloud Directory Reference
+
+
+
+ + + + diff --git a/dir_1ff92a5f4657b0e0092e7258fd44661b.html b/dir_1ff92a5f4657b0e0092e7258fd44661b.html new file mode 100644 index 00000000..ef2c97c5 --- /dev/null +++ b/dir_1ff92a5f4657b0e0092e7258fd44661b.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteRGBDSensor Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteRGBDSensor Directory Reference
+
+
+
+ + + + diff --git a/dir_25269fc8732d364dd41c44c714d7ddc1.html b/dir_25269fc8732d364dd41c44c714d7ddc1.html new file mode 100644 index 00000000..4e474234 --- /dev/null +++ b/dir_25269fc8732d364dd41c44c714d7ddc1.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector/conf Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
conf Directory Reference
+
+
+
+ + + + diff --git a/dir_29602fbee921084ef6cffd0531461981.html b/dir_29602fbee921084ef6cffd0531461981.html new file mode 100644 index 00000000..7c7fd521 --- /dev/null +++ b/dir_29602fbee921084ef6cffd0531461981.html @@ -0,0 +1,85 @@ + + + + + + + +vision: programs/rgbdDetection Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
rgbdDetection Directory Reference
+
+
+
+ + + + diff --git a/dir_36f149fce582426447a0cb551c4087bb.html b/dir_36f149fce582426447a0cb551c4087bb.html new file mode 100644 index 00000000..4cd31541 --- /dev/null +++ b/dir_36f149fce582426447a0cb551c4087bb.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleQrDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleQrDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_37280351e954bf28682c2c71ec87d62a.html b/dir_37280351e954bf28682c2c71ec87d62a.html new file mode 100644 index 00000000..1200b446 --- /dev/null +++ b/dir_37280351e954bf28682c2c71ec87d62a.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/HaarDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HaarDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_3aa48f99037b5f8e0da6c31310570c50.html b/dir_3aa48f99037b5f8e0da6c31310570c50.html new file mode 100644 index 00000000..10231886 --- /dev/null +++ b/dir_3aa48f99037b5f8e0da6c31310570c50.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleMeshFromLiveRGBD Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleMeshFromLiveRGBD Directory Reference
+
+
+
+ + + + diff --git a/dir_4ebb7bc8fb17ff143cc04e6192b66ab7.html b/dir_4ebb7bc8fb17ff143cc04e6192b66ab7.html new file mode 100644 index 00000000..12b699ba --- /dev/null +++ b/dir_4ebb7bc8fb17ff143cc04e6192b66ab7.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/ArucoCodeDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ArucoCodeDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_59425e443f801f1f2fd8bbe4959a3ccf.html b/dir_59425e443f801f1f2fd8bbe4959a3ccf.html new file mode 100644 index 00000000..f62a4c6e --- /dev/null +++ b/dir_59425e443f801f1f2fd8bbe4959a3ccf.html @@ -0,0 +1,85 @@ + + + + + + + +vision: tests Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tests Directory Reference
+
+
+
+ + + + diff --git a/dir_5afd026af1f372a4b145a3dbe3624f5a.html b/dir_5afd026af1f372a4b145a3dbe3624f5a.html new file mode 100644 index 00000000..64db97bc --- /dev/null +++ b/dir_5afd026af1f372a4b145a3dbe3624f5a.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleMeshFromCloud Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleMeshFromCloud Directory Reference
+
+
+
+ + + + diff --git a/dir_72fdac4d33e476e0afd432edb4817e98.html b/dir_72fdac4d33e476e0afd432edb4817e98.html new file mode 100644 index 00000000..2af13136 --- /dev/null +++ b/dir_72fdac4d33e476e0afd432edb4817e98.html @@ -0,0 +1,85 @@ + + + + + + + +vision: programs/sceneReconstruction Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
sceneReconstruction Directory Reference
+
+
+
+ + + + diff --git a/dir_7a6893798396b68f1d0ebf712f0b27b0.html b/dir_7a6893798396b68f1d0ebf712f0b27b0.html new file mode 100644 index 00000000..226ac2da --- /dev/null +++ b/dir_7a6893798396b68f1d0ebf712f0b27b0.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/TravisLib Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
TravisLib Directory Reference
+
+
+
+ + + + diff --git a/dir_7b0a5d1507c7f681cbfa1deb5990c6ea.html b/dir_7b0a5d1507c7f681cbfa1deb5990c6ea.html new file mode 100644 index 00000000..6b2d8eaf --- /dev/null +++ b/dir_7b0a5d1507c7f681cbfa1deb5990c6ea.html @@ -0,0 +1,89 @@ + + + + + + + +vision: programs Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
programs Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_7e6e8cacd0636c15fe54bd966abceb8d.html b/dir_7e6e8cacd0636c15fe54bd966abceb8d.html new file mode 100644 index 00000000..54f10d16 --- /dev/null +++ b/dir_7e6e8cacd0636c15fe54bd966abceb8d.html @@ -0,0 +1,85 @@ + + + + + + + +vision: programs/voxelOccupancyDetection Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
voxelOccupancyDetection Directory Reference
+
+
+
+ + + + diff --git a/dir_7eb5d5e75dfe12e8d8a9703b617259d2.html b/dir_7eb5d5e75dfe12e8d8a9703b617259d2.html new file mode 100644 index 00000000..6c3b7a3a --- /dev/null +++ b/dir_7eb5d5e75dfe12e8d8a9703b617259d2.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleColorRegionDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleColorRegionDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_894834b116a11e19fdb9146dfce0a9f1.html b/dir_894834b116a11e19fdb9146dfce0a9f1.html new file mode 100644 index 00000000..33f24713 --- /dev/null +++ b/dir_894834b116a11e19fdb9146dfce0a9f1.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/ColorRegionDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ColorRegionDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_8976e5d03119516083eaca3ddca61311.html b/dir_8976e5d03119516083eaca3ddca61311.html new file mode 100644 index 00000000..9dc63562 --- /dev/null +++ b/dir_8976e5d03119516083eaca3ddca61311.html @@ -0,0 +1,89 @@ + + + + + + + +vision: examples/cpp Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cpp Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_898a6363a525f83b4d88293f2173a703.html b/dir_898a6363a525f83b4d88293f2173a703.html new file mode 100644 index 00000000..494cb18d --- /dev/null +++ b/dir_898a6363a525f83b4d88293f2173a703.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector/tests Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tests Directory Reference
+
+
+
+ + + + diff --git a/dir_8b083644526c0d3260457ecc1b443fd8.html b/dir_8b083644526c0d3260457ecc1b443fd8.html new file mode 100644 index 00000000..8214476b --- /dev/null +++ b/dir_8b083644526c0d3260457ecc1b443fd8.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpCloudUtils Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils Directory Reference
+
+
+
+ + + + diff --git a/dir_8c428f345b527d2071b666c6f8374398.html b/dir_8c428f345b527d2071b666c6f8374398.html new file mode 100644 index 00000000..c19b2d33 --- /dev/null +++ b/dir_8c428f345b527d2071b666c6f8374398.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
share Directory Reference
+
+
+
+ + + + diff --git a/dir_9f0e28cc28a74cf6288000329b06919b.html b/dir_9f0e28cc28a74cf6288000329b06919b.html new file mode 100644 index 00000000..956f7f5d --- /dev/null +++ b/dir_9f0e28cc28a74cf6288000329b06919b.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleHaarDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleHaarDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_a52c22a8b79e169194d9c4bbc7c46367.html b/dir_a52c22a8b79e169194d9c4bbc7c46367.html new file mode 100644 index 00000000..05b0e05f --- /dev/null +++ b/dir_a52c22a8b79e169194d9c4bbc7c46367.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc/build Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
build Directory Reference
+
+
+
+ + + + diff --git a/dir_b0ff78f4d605b05d5b2840ead2213851.html b/dir_b0ff78f4d605b05d5b2840ead2213851.html new file mode 100644 index 00000000..cbf31b88 --- /dev/null +++ b/dir_b0ff78f4d605b05d5b2840ead2213851.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleDnnDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleDnnDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_b16d62b3f0cba971556d8a32587a03a2.html b/dir_b16d62b3f0cba971556d8a32587a03a2.html new file mode 100644 index 00000000..d86f03fe --- /dev/null +++ b/dir_b16d62b3f0cba971556d8a32587a03a2.html @@ -0,0 +1,85 @@ + + + + + + + +vision: programs/rgbDetection Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
rgbDetection Directory Reference
+
+
+
+ + + + diff --git a/dir_b8fff1cb25eb7b3a72bf68b3dd52da68.html b/dir_b8fff1cb25eb7b3a72bf68b3dd52da68.html new file mode 100644 index 00000000..da352f40 --- /dev/null +++ b/dir_b8fff1cb25eb7b3a72bf68b3dd52da68.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleSceneReconstructionClient Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleSceneReconstructionClient Directory Reference
+
+
+
+ + + + diff --git a/dir_bc0718b08fb2015b8e59c47b2805f60c.html b/dir_bc0718b08fb2015b8e59c47b2805f60c.html new file mode 100644 index 00000000..1097f93e --- /dev/null +++ b/dir_bc0718b08fb2015b8e59c47b2805f60c.html @@ -0,0 +1,89 @@ + + + + + + + +vision: libraries Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libraries Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_bc63cb6e92e7d25aca16d15616a1c5b6.html b/dir_bc63cb6e92e7d25aca16d15616a1c5b6.html new file mode 100644 index 00000000..a8582cdc --- /dev/null +++ b/dir_bc63cb6e92e7d25aca16d15616a1c5b6.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteGrabber Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteGrabber Directory Reference
+
+
+
+ + + + diff --git a/dir_bf8defd636c562035da95240c25206f2.html b/dir_bf8defd636c562035da95240c25206f2.html new file mode 100644 index 00000000..557b5605 --- /dev/null +++ b/dir_bf8defd636c562035da95240c25206f2.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HaarDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_c090f958661c3c1bfddf0e6cbf47395f.html b/dir_c090f958661c3c1bfddf0e6cbf47395f.html new file mode 100644 index 00000000..20c15701 --- /dev/null +++ b/dir_c090f958661c3c1bfddf0e6cbf47395f.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/DnnDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
DnnDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_d050070cc3e4bbd91d897ff8856046e0.html b/dir_d050070cc3e4bbd91d897ff8856046e0.html new file mode 100644 index 00000000..977a824c --- /dev/null +++ b/dir_d050070cc3e4bbd91d897ff8856046e0.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/python Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
python Directory Reference
+
+
+
+ + + + diff --git a/dir_d28a4824dc47e487b107a5db32ef43c4.html b/dir_d28a4824dc47e487b107a5db32ef43c4.html new file mode 100644 index 00000000..49a51ea8 --- /dev/null +++ b/dir_d28a4824dc47e487b107a5db32ef43c4.html @@ -0,0 +1,91 @@ + + + + + + + +vision: examples Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
examples Directory Reference
+
+
+ + + + +

+Directories

directory  cpp
 
+
+ + + + diff --git a/dir_d9780a6694556e97c297acd54af60a29.html b/dir_d9780a6694556e97c297acd54af60a29.html new file mode 100644 index 00000000..1f7fa934 --- /dev/null +++ b/dir_d9780a6694556e97c297acd54af60a29.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/QrDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
QrDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_def802f784c22e82dce80d4d6e19f0ee.html b/dir_def802f784c22e82dce80d4d6e19f0ee.html new file mode 100644 index 00000000..f61273f6 --- /dev/null +++ b/dir_def802f784c22e82dce80d4d6e19f0ee.html @@ -0,0 +1,85 @@ + + + + + + + +vision: programs/pointAtObjectServer Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
pointAtObjectServer Directory Reference
+
+
+
+ + + + diff --git a/dir_e68e8157741866f444e17edd764ebbae.html b/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 00000000..4b12d5c8 --- /dev/null +++ b/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
doc Directory Reference
+
+
+
+ + + + diff --git a/dir_f9121e54faddc5154c75c794a8ed2433.html b/dir_f9121e54faddc5154c75c794a8ed2433.html new file mode 100644 index 00000000..a6f2ebf4 --- /dev/null +++ b/dir_f9121e54faddc5154c75c794a8ed2433.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpCropCallback Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCropCallback Directory Reference
+
+
+
+ + + + diff --git a/dir_f98f57c538677273d6e3d52c55355c28.html b/dir_f98f57c538677273d6e3d52c55355c28.html new file mode 100644 index 00000000..89cad366 --- /dev/null +++ b/dir_f98f57c538677273d6e3d52c55355c28.html @@ -0,0 +1,89 @@ + + + + + + + +vision: libraries/YarpPlugins Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpPlugins Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 00000000..17edabff Binary files /dev/null and b/doc.png differ diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..3174bd7b --- /dev/null +++ b/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +vision: File List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  libraries
  TravisLib
 TravisLib.hpp
  YarpCloudUtils
 LogComponent.hpp
 tinyply.h
 YarpCloudUtils-pcl-impl.hpp
 YarpCloudUtils-pcl-inst.hpp
 YarpCloudUtils-pcl-traits.hpp
 YarpCloudUtils-pcl.hpp
 YarpCloudUtils.hpp
  YarpCropCallback
 YarpCropCallback.hpp
  YarpPlugins
  ArucoCodeDetector
 ArucoCodeDetector.hpp
  ColorRegionDetector
 ColorRegionDetector.hpp
  DnnDetector
 DnnDetector.hpp
  HaarDetector
 HaarDetector.hpp
  QrDetector
 QrDetector.hpp
 IDetector.hpp
  programs
  pointAtObjectServer
 LineCallbackPort.hpp
 PointAtObjectServer.hpp
 SharedArea.hpp
 vtkTimerCallback.hpp
  rgbdDetection
 RgbdDetection.hpp
  rgbDetection
 RgbDetection.hpp
  sceneReconstruction
 KinectFusion.hpp
 KinectFusionImpl.hpp
 LogComponent.hpp
 SceneReconstruction.hpp
  voxelOccupancyDetection
 SegmentorThread.hpp
 VoxelOccupancyDetection.hpp
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 00000000..bb8ab35e Binary files /dev/null and b/folderclosed.png differ diff --git a/folderopen.png b/folderopen.png new file mode 100644 index 00000000..d6c7f676 Binary files /dev/null and b/folderopen.png differ diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..e970715c --- /dev/null +++ b/functions.html @@ -0,0 +1,154 @@ + + + + + + + +vision: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 00000000..baabf1f4 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,130 @@ + + + + + + + +vision: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..27e14ef5 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,103 @@ + + + + + + + +vision: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/group__ArucoCodeDetector.html b/group__ArucoCodeDetector.html new file mode 100644 index 00000000..16bee514 --- /dev/null +++ b/group__ArucoCodeDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: ArucoCodeDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
ArucoCodeDetector
+
+
+ +

Contains roboticslab::ArucoCodeDetector. +

+
+ + + + diff --git a/group__ColorRegionDetector.html b/group__ColorRegionDetector.html new file mode 100644 index 00000000..d04dceff --- /dev/null +++ b/group__ColorRegionDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: ColorRegionDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
ColorRegionDetector
+
+
+ +

Contains roboticslab::ColorRegionDetector. +

+
+ + + + diff --git a/group__DnnDetector.html b/group__DnnDetector.html new file mode 100644 index 00000000..549ea33d --- /dev/null +++ b/group__DnnDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: DnnDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
+
+
+ +

Contains roboticslab::DnnDetector. +

+
+ + + + diff --git a/group__HaarDetector.html b/group__HaarDetector.html new file mode 100644 index 00000000..d426517e --- /dev/null +++ b/group__HaarDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: HaarDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
+
+
+ +

Contains roboticslab::HaarDetector. +

+
+ + + + diff --git a/group__QrDetector.html b/group__QrDetector.html new file mode 100644 index 00000000..92c27eb8 --- /dev/null +++ b/group__QrDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: QrDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
+ +

Contains roboticslab::QrDetector. +

+
+ + + + diff --git a/group__TravisLib.html b/group__TravisLib.html new file mode 100644 index 00000000..2af25de2 --- /dev/null +++ b/group__TravisLib.html @@ -0,0 +1,91 @@ + + + + + + + +vision: TravisLib + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
+
+
+ + + + + +

+Classes

class  roboticslab::Travis
 The Travis class implements all the algorithms on a single image. More...
 
+

Detailed Description

+
+ + + + diff --git a/group__YarpCloudUtils.html b/group__YarpCloudUtils.html new file mode 100644 index 00000000..8e19de14 --- /dev/null +++ b/group__YarpCloudUtils.html @@ -0,0 +1,521 @@ + + + + + + + +vision: YarpCloudUtils + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
YarpCloudUtils
+
+
+ +

Collection of cloud-related utilities for YARP. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T >
bool roboticslab::YarpCloudUtils::savePLY (const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary=true)
 Writes a triangular polygon mesh to file. More...
 
template<typename T >
bool roboticslab::YarpCloudUtils::savePLY (const std::string &filename, const yarp::sig::PointCloud< T > &cloud, bool isBinary=true)
 Writes a point cloud to file. More...
 
template<typename T >
bool roboticslab::YarpCloudUtils::loadPLY (const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)
 Reads a triangular polygon mesh from file. More...
 
template<typename T >
bool roboticslab::YarpCloudUtils::loadPLY (const std::string &filename, yarp::sig::PointCloud< T > &cloud)
 Reads a point cloud from file. More...
 
template<typename T1 , typename T2 >
bool roboticslab::YarpCloudUtils::meshFromCloud (const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)
 Constructs a triangular polygon mesh from a point cloud. More...
 
template<typename T1 , typename T2 >
bool roboticslab::YarpCloudUtils::meshFromCloud (const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::os::Searchable &config, const std::string &collection="meshPipeline")
 Constructs a triangular polygon mesh from a point cloud. More...
 
template<typename T1 , typename T2 >
bool roboticslab::YarpCloudUtils::processCloud (const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)
 Processes a cloud of points. More...
 
template<typename T1 , typename T2 >
bool roboticslab::YarpCloudUtils::processCloud (const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::os::Searchable &config, const std::string &collection="cloudPipeline")
 Processes a cloud of points. More...
 
+

Detailed Description

+
See also
Instructions.
+

Function Documentation

+ +

◆ loadPLY() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::loadPLY (const std::string & filename,
yarp::sig::PointCloud< T > & cloud 
)
+
+
Note
Failure is reported if required fields are missing, depending on the requested point type. Optional fields are alpha (RGBA types) and curvature (normal types).
+
Parameters
+ + + +
filenamePath to a file with .ply extension.
cloudCloud of vertices.
+
+
+
Returns
Whether the cloud has been successfully imported or not.
+ +
+
+ +

◆ loadPLY() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::loadPLY (const std::string & filename,
yarp::sig::PointCloud< T > & cloud,
yarp::sig::VectorOf< int > & indices 
)
+
+
Note
Failure is reported if required fields are missing, depending on the requested point type. Optional fields are alpha (RGBA types) and curvature (normal types).
+
Parameters
+ + + + +
filenamePath to a file with .ply extension.
cloudCloud of vertices.
indicesVector of indices, each three consecutive values define a face.
+
+
+
Returns
Whether the mesh has been successfully imported or not.
+ +
+
+ +

◆ meshFromCloud() [1/2]

+ +
+
+
+template<typename T1 , typename T2 >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::meshFromCloud (const yarp::sig::PointCloud< T1 > & cloud,
yarp::sig::PointCloud< T2 > & meshPoints,
yarp::sig::VectorOf< int > & meshIndices,
const yarp::os::Searchable & config,
const std::string & collection = "meshPipeline" 
)
+
+
Note
Implements a set of PCL algorithms. Refer to instructions.
+
Parameters
+ + + + + + +
cloudInput cloud.
meshPointsCloud of vertices of the resulting polygon mesh.
meshIndicesVector if indices of the resulting polygon mesh, each three consecutive values define a face.
configConfiguration in YARP native format to read the pipeline from.
collectionNamed section collection that identifies this pipeline in config.
+
+
+
Returns
Whether any failure occurred throughout the pipeline.
+ +
+
+ +

◆ meshFromCloud() [2/2]

+ +
+
+
+template<typename T1 , typename T2 >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::meshFromCloud (const yarp::sig::PointCloud< T1 > & cloud,
yarp::sig::PointCloud< T2 > & meshPoints,
yarp::sig::VectorOf< int > & meshIndices,
const yarp::sig::VectorOf< yarp::os::Property > & options 
)
+
+
Note
Implements a set of PCL algorithms. Refer to instructions.
+
Parameters
+ + + + + +
cloudInput cloud.
meshPointsCloud of vertices of the resulting polygon mesh.
meshIndicesVector if indices of the resulting polygon mesh, each three consecutive values define a face.
optionsVector of dictionaries, each element defines a step of the pipeline.
+
+
+
Returns
Whether any failure occurred throughout the pipeline.
+ +
+
+ +

◆ processCloud() [1/2]

+ +
+
+
+template<typename T1 , typename T2 >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::processCloud (const yarp::sig::PointCloud< T1 > & in,
yarp::sig::PointCloud< T2 > & out,
const yarp::os::Searchable & config,
const std::string & collection = "cloudPipeline" 
)
+
+
Note
Implements a set of PCL algorithms. Refer to instructions.
+
Parameters
+ + + + + + +
cloudInput cloud.
meshPointsCloud of vertices of the resulting polygon mesh.
meshIndicesVector if indices of the resulting polygon mesh, each three consecutive values define a face.
configConfiguration in YARP native format to read the pipeline from.
collectionNamed section collection that identifies this pipeline in config.
+
+
+
Returns
Whether any failure occurred throughout the pipeline.
+ +
+
+ +

◆ processCloud() [2/2]

+ +
+
+
+template<typename T1 , typename T2 >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::processCloud (const yarp::sig::PointCloud< T1 > & in,
yarp::sig::PointCloud< T2 > & out,
const yarp::sig::VectorOf< yarp::os::Property > & options 
)
+
+
Note
Implements a set of PCL algorithms. Refer to instructions.
+
Parameters
+ + + + + +
cloudInput cloud.
meshPointsCloud of vertices of the resulting polygon mesh.
meshIndicesVector if indices of the resulting polygon mesh, each three consecutive values define a face.
optionsVector of dictionaries, each element defines a step of the pipeline.
+
+
+
Returns
Whether any failure occurred throughout the pipeline.
+ +
+
+ +

◆ savePLY() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::savePLY (const std::string & filename,
const yarp::sig::PointCloud< T > & cloud,
bool isBinary = true 
)
+
+
Parameters
+ + + + +
filenamePath to a file with .ply extension.
cloudCloud of points.
isBinaryWhether to save file with binary format or not.
+
+
+
Returns
Whether the cloud has been successfully exported or not.
+ +
+
+ +

◆ savePLY() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool roboticslab::YarpCloudUtils::savePLY (const std::string & filename,
const yarp::sig::PointCloud< T > & cloud,
const yarp::sig::VectorOf< int > & indices,
bool isBinary = true 
)
+
+
Parameters
+ + + + + +
filenamePath to a file with .ply extension.
cloudCloud of vertices.
indicesVector of indices, each three consecutive values define a face.
isBinaryWhether to save file with binary format or not.
+
+
+
Returns
Whether the mesh has been successfully exported or not.
+ +
+
+
+ + + + diff --git a/group__YarpCropCallback.html b/group__YarpCropCallback.html new file mode 100644 index 00000000..aeb01f2d --- /dev/null +++ b/group__YarpCropCallback.html @@ -0,0 +1,84 @@ + + + + + + + +vision: YarpCropCallback + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
YarpCropCallback
+
+
+ +

A typed callback reader for rectangular crop areas. +

+
+ + + + diff --git a/group__YarpPlugins.html b/group__YarpPlugins.html new file mode 100644 index 00000000..81c7864b --- /dev/null +++ b/group__YarpPlugins.html @@ -0,0 +1,113 @@ + + + + + + + +vision: YarpPlugins + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
YarpPlugins
+
+
+ +

Contains vision libraries that implement YARP device interfaces and therefore can be invoked as YARP plugins. +More...

+ + + + + + + + + + + + + + + + + +

+Modules

 ArucoCodeDetector
 Contains roboticslab::ArucoCodeDetector.
 
 ColorRegionDetector
 Contains roboticslab::ColorRegionDetector.
 
 DnnDetector
 Contains roboticslab::DnnDetector.
 
 HaarDetector
 Contains roboticslab::HaarDetector.
 
 QrDetector
 Contains roboticslab::QrDetector.
 
+ + + + +

+Classes

class  roboticslab::IDetector
 Interface for object detection. More...
 
+

Detailed Description

+
+ + + + diff --git a/group__exampleColorRegion.html b/group__exampleColorRegion.html new file mode 100644 index 00000000..5377b12b --- /dev/null +++ b/group__exampleColorRegion.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleColorRegion + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleColorRegion
+
+
+ +

exampleColorRegion +

+
+ + + + diff --git a/group__exampleDnnDetector.html b/group__exampleDnnDetector.html new file mode 100644 index 00000000..2ec42c68 --- /dev/null +++ b/group__exampleDnnDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleDnnDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleDnnDetector
+
+
+ +

exampleDnnDetector +

+
+ + + + diff --git a/group__exampleHaarDetector.html b/group__exampleHaarDetector.html new file mode 100644 index 00000000..df8d6c29 --- /dev/null +++ b/group__exampleHaarDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleHaarDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleHaarDetector
+
+
+ +

exampleHaarDetector +

+
+ + + + diff --git a/group__exampleMeshFromCloud.html b/group__exampleMeshFromCloud.html new file mode 100644 index 00000000..750119cd --- /dev/null +++ b/group__exampleMeshFromCloud.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleMeshFromCloud + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleMeshFromCloud
+
+
+ +

Sample usage of roboticslab::YarpCloudUtils::meshFromCloud. +

+
+ + + + diff --git a/group__exampleMeshFromLiveRGBD.html b/group__exampleMeshFromLiveRGBD.html new file mode 100644 index 00000000..ce2cb7a0 --- /dev/null +++ b/group__exampleMeshFromLiveRGBD.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleMeshFromLiveRGBD + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleMeshFromLiveRGBD
+
+
+ +

Transform RGBD frame to cloud/mesh. +

+
+ + + + diff --git a/group__exampleProcessCloud.html b/group__exampleProcessCloud.html new file mode 100644 index 00000000..5c5152c4 --- /dev/null +++ b/group__exampleProcessCloud.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleProcessCloud + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleProcessCloud
+
+
+ +

Sample usage of roboticslab::YarpCloudUtils::processCloud. +

+
+ + + + diff --git a/group__exampleQrDetector.html b/group__exampleQrDetector.html new file mode 100644 index 00000000..2552c3aa --- /dev/null +++ b/group__exampleQrDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleQrDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleQrDetector
+
+
+ +

exampleQrDetector +

+
+ + + + diff --git a/group__exampleRemoteGrabber.html b/group__exampleRemoteGrabber.html new file mode 100644 index 00000000..416034a9 --- /dev/null +++ b/group__exampleRemoteGrabber.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleRemoteGrabber + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleRemoteGrabber
+
+
+ +

This example connects to a remote grabber (generally, RGB) device. +

+
+ + + + diff --git a/group__exampleRemoteRGBDSensor.html b/group__exampleRemoteRGBDSensor.html new file mode 100644 index 00000000..fcac0e1f --- /dev/null +++ b/group__exampleRemoteRGBDSensor.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleRemoteRGBDSensor + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleRemoteRGBDSensor
+
+
+ +

This example connects to a remote IRGBDSensor device. +

+
+ + + + diff --git a/group__exampleSceneReconstructionClient.html b/group__exampleSceneReconstructionClient.html new file mode 100644 index 00000000..617c9450 --- /dev/null +++ b/group__exampleSceneReconstructionClient.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleSceneReconstructionClient + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleSceneReconstructionClient
+
+
+ +

Sample usage of sceneReconstruction. +

+
+ + + + diff --git a/group__pointAtObjectServer.html b/group__pointAtObjectServer.html new file mode 100644 index 00000000..802e2c4b --- /dev/null +++ b/group__pointAtObjectServer.html @@ -0,0 +1,84 @@ + + + + + + + +vision: PointAtObjectServer + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
PointAtObjectServer
+
+
+ +

Creates an instance of roboticslab::PointAtObjectServer. +

+
+ + + + diff --git a/group__rgbDetection.html b/group__rgbDetection.html new file mode 100644 index 00000000..6561f97b --- /dev/null +++ b/group__rgbDetection.html @@ -0,0 +1,132 @@ + + + + + + + +vision: rgbDetection + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
rgbDetection
+
+
+ +

Creates an instance of roboticslab::RgbDetection. +More...

+ + + + + +

+Classes

class  roboticslab::RgbDetection
 2D detection. More...
 
+

Detailed Description

+

+Options

+ + + + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
from file.ini rgbDetection.ini
context context name rgbDetection
sensorDevice sensor device name frameGrabber_nwc_yarp
sensorRemote if accesing remote, remote port name /grabber
localPrefx local port name prefix /rgbDetection
period update period (seconds) 0.02
detector detector device name
+

+Input ports (requires YARP 3.5+)

+ + + + + +
PORT CONTENT
<localPrefix>/crop:i 4-int bottle with (x1,y1,x2,y2) vertices of the rectangular crop area
+

+Output ports

+ + + + + + + +
PORT CONTENT
<localPrefix>/img:o output camera image with object detection using squares
<localPrefix>/state:o detected objects
+
+ + + + diff --git a/group__rgbdDetection.html b/group__rgbdDetection.html new file mode 100644 index 00000000..7ea79646 --- /dev/null +++ b/group__rgbdDetection.html @@ -0,0 +1,132 @@ + + + + + + + +vision: rgbdDetection + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
rgbdDetection
+
+
+ +

Creates an instance of roboticslab::RgbdDetection. +More...

+ + + + + +

+Classes

class  roboticslab::RgbdDetection
 2.5D detection. More...
 
+

Detailed Description

+

+Options

+ + + + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
from file.ini rgbdDetection.ini
context context name rgbdDetection
sensorDevice sensor device name RGBDSensorClient
sensorRemote if accesing remote, remote port name /rgbd
localPrefx local port name prefix /rgbdDetection
period update period (seconds) 0.02
detector detector device name
+

+Input ports (requires YARP 3.5+)

+ + + + + +
PORT CONTENT
<localPrefix>/crop:i 4-int bottle with (x1,y1,x2,y2) vertices of the rectangular crop area
+

+Output ports

+ + + + + + + +
PORT CONTENT
<localPrefix>/img:o output camera image with object detection using squares
<localPrefix>/state:o xyz coordinates of object detection (meters)
+
+ + + + diff --git a/group__sceneReconstruction.html b/group__sceneReconstruction.html new file mode 100644 index 00000000..2d20fe6b --- /dev/null +++ b/group__sceneReconstruction.html @@ -0,0 +1,175 @@ + + + + + + + +vision: sceneReconstruction + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
sceneReconstruction
+
+
+ +

Creates an instance of roboticslab::SceneReconstruction. +More...

+ + + + + +

+Classes

class  roboticslab::SceneReconstruction
 Exposes Kinect Fusion as a YARP service via RPC. More...
 
+

Detailed Description

+

+Configuration parameters

+ + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
from file.ini sceneReconstruction.ini
context context name sceneReconstruction
period update period (ms) 20
prefix prefix for local port names /sceneReconstruction
remote remote port to connect to (optional)
carrier carrier name for remote depth stream
+

+Exposed ports

+ + + + + + + +
PORT CONTENT
/<prefix>/rpc:s RPC server for handling remote commands
/<prefix>/render:o PixelMono Phong-rendered representation of the reconstructed surface
+

+Kinect Fusion options

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
algorithm Kinect Fusion algorithm ("kinfu", "dynafu", "kinfu_ls") kinfu
bilateralKernelSize kernel size in pixels for bilateral smooth 7
bilateralSigmaDepth depth sigma in meters for bilateral smooth 0.04
bilateralSigmaSpatial spatial sigma in pixels for bilateral smooth 4.5
depthFactor pre-scale per 1 meter for input values 5000
depthTruncThreshold distance to truncate in meters (kinfu_ls/hashtsdf) 0.0410156
icpAngleThresh angle threshold in radians for ICP 0.523599
icpDistThresh distance threshold in meters for ICP 0.1
icpIterations iterations per each ICP level (10 5 4)
lightPose light pose for rendering in meters (0.0 0.0 0.0)
pyramidLevels number of pyramid levels for ICP 3
raycastStepFactor a lenght in voxel sizes for one raycast step 0.25
truncateThreshold threshold for depth truncation in meters 0.0
tsdfMaxWeight max number of frames per voxel 64
tsdfMinCameraMovement minimal camera movement in meters 0.0
tsdfTruncDist distance to truncate in meters 0.0410156
unitResolution resolution of volumeUnit in voxel space (kinfu_ls/hashtsdf) 0
volumeDims resolution of voxel space (512 512 512)
volumePoseRot volume pose (rotation matrix) in radians (1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0)
volumePoseTransl volume pose (translation vector) in meters (-1.5 -1.5 0.5)
volumeType type of voxel volume ("tsdf", "hashtsdf") tsdf
voxelSize size of voxel in meters 0.00585938
+

+License

+
See also
LICENSE_KinectFusion.md
+
+ + + + diff --git a/group__vision__applications.html b/group__vision__applications.html new file mode 100644 index 00000000..bf3bd2be --- /dev/null +++ b/group__vision__applications.html @@ -0,0 +1,84 @@ + + + + + + + +vision: vision Applications (Collections of Programs) + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
vision Applications (Collections of Programs)
+
+
+ +

vision applications (collections of programs). +

+
+ + + + diff --git a/group__vision__examples.html b/group__vision__examples.html new file mode 100644 index 00000000..e4016a72 --- /dev/null +++ b/group__vision__examples.html @@ -0,0 +1,121 @@ + + + + + + + +vision: vision Examples + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
vision Examples
+
+
+ +

vision examples. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Modules

 exampleColorRegion
 exampleColorRegion
 
 exampleDnnDetector
 exampleDnnDetector
 
 exampleHaarDetector
 exampleHaarDetector
 
 exampleMeshFromCloud
 Sample usage of roboticslab::YarpCloudUtils::meshFromCloud.
 
 exampleMeshFromLiveRGBD
 Transform RGBD frame to cloud/mesh.
 
 exampleProcessCloud
 Sample usage of roboticslab::YarpCloudUtils::processCloud.
 
 exampleQrDetector
 exampleQrDetector
 
 exampleRemoteGrabber
 This example connects to a remote grabber (generally, RGB) device.
 
 exampleRemoteRGBDSensor
 This example connects to a remote IRGBDSensor device.
 
 exampleSceneReconstructionClient
 Sample usage of sceneReconstruction.
 
+

Detailed Description

+
+ + + + diff --git a/group__vision__libraries.html b/group__vision__libraries.html new file mode 100644 index 00000000..9094dc54 --- /dev/null +++ b/group__vision__libraries.html @@ -0,0 +1,102 @@ + + + + + + + +vision: vision Libraries + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
vision Libraries
+
+
+ +

vision libraries. +More...

+ + + + + + + + + + + + + +

+Modules

 YarpPlugins
 Contains vision libraries that implement YARP device interfaces and therefore can be invoked as YARP plugins.
 
 TravisLib
 
 YarpCloudUtils
 Collection of cloud-related utilities for YARP.
 
 YarpCropCallback
 A typed callback reader for rectangular crop areas.
 
+

Detailed Description

+
+ + + + diff --git a/group__vision__programs.html b/group__vision__programs.html new file mode 100644 index 00000000..53f0287c --- /dev/null +++ b/group__vision__programs.html @@ -0,0 +1,106 @@ + + + + + + + +vision: vision Programs + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
vision Programs
+
+
+ +

vision programs. +More...

+ + + + + + + + + + + + + + + + + +

+Modules

 PointAtObjectServer
 Creates an instance of roboticslab::PointAtObjectServer.
 
 rgbdDetection
 Creates an instance of roboticslab::RgbdDetection.
 
 rgbDetection
 Creates an instance of roboticslab::RgbDetection.
 
 sceneReconstruction
 Creates an instance of roboticslab::SceneReconstruction.
 
 voxelOccupancyDetection
 Creates an instance of roboticslab::VoxelOccupancyDetection.
 
+

Detailed Description

+
+ + + + diff --git a/group__vision__tests.html b/group__vision__tests.html new file mode 100644 index 00000000..603f7c5c --- /dev/null +++ b/group__vision__tests.html @@ -0,0 +1,106 @@ + + + + + + + +vision: vision Tests + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
vision Tests
+
+
+ +

vision tests. +More...

+ + + + + + + + + + + + + + + + + +

+Classes

class  roboticslab::test::ColorRegionDetectorTest
 Tests ColorRegionDetector. More...
 
class  roboticslab::test::DnnDetectorTest
 Tests DnnDetector. More...
 
class  roboticslab::test::HaarDetectorTest
 Tests ColorRegionDetector. More...
 
class  roboticslab::test::QrDetectorTest
 Tests QrDetector. More...
 
class  roboticslab::test::YarpCloudUtilsTest
 Tests YarpCloudUtils. More...
 
+

Detailed Description

+
+ + + + diff --git a/group__voxelOccupancyDetection.html b/group__voxelOccupancyDetection.html new file mode 100644 index 00000000..c5078bdc --- /dev/null +++ b/group__voxelOccupancyDetection.html @@ -0,0 +1,156 @@ + + + + + + + +vision: voxelOccupancyDetection + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
voxelOccupancyDetection
+
+
+ +

Creates an instance of roboticslab::VoxelOccupancyDetection. +More...

+ + + + + + + + + + + +

+Classes

class  roboticslab::DataProcessor
 Implements voxelOccupancyDetection callback on Bottle. More...
 
class  roboticslab::SegmentorThread
 Implements voxelOccupancyDetection PeriodicThread. More...
 
class  roboticslab::VoxelOccupancyDetection
 Computer Vision 1. More...
 
+

Detailed Description

+

+VoxelOccupancyDetection options:

+ + + + + + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
help
from file.ini
context path
cropSelector 0
RGBDDevice device we create RGBDSensorClient
RGBDLocal if accesing remote, local port name /voxelOccupancyDetection
RGBDRemote if accesing remote, remote port name /rgbd
watchdog 2.000000
+

+SegmentorThread options:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PROPERTY DESCRIPTION DEFAULT
help
from file.ini
context path
algorithm blueMinusRed
locate centroid or bottom centroid
maxNumBlobs 2
morphClosing percentage, 2 or 4 okay 2.000000
morphOpening percentage, 2 or 4 okay 0.000000
outFeatures mmX, mmY, mmZ, pxXpos, pxYpos, pxX, pxY, angle, area, aspectRatio, rectangularity, axisFirst, axisSecond solidity, hue, sat, val, hueStdDev, satStdDev, valStdDev, time (mmX mmY mmZ)
outFeaturesFormat 0=bottled,1=minimal 0
outImage 0=rgb,1=bin 1
rateMs 20
seeBounding 0=none,1=box,2=contour,3=both 3
threshold 55
+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 00000000..74d6fc5e --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,135 @@ + + + + + + + +vision: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ctinyply::Buffer
 Cyarp::os::BufferedPort
 Croboticslab::LineCallbackPort
 Ctinyply::Buffer::delete_array
 Cyarp::dev::DeviceDriver
 Croboticslab::ArucoCodeDetector
 Croboticslab::ColorRegionDetector
 Croboticslab::DnnDetector
 Croboticslab::HaarDetector
 Croboticslab::QrDetector
 Croboticslab::IDetectorInterface for object detection
 Croboticslab::ArucoCodeDetector
 Croboticslab::ColorRegionDetector
 Croboticslab::DnnDetector
 Croboticslab::HaarDetector
 Croboticslab::QrDetector
 Croboticslab::KinectFusion
 Croboticslab::KinectFusionImpl< T >
 Cyarp::os::PeriodicThread
 Croboticslab::SegmentorThreadImplements voxelOccupancyDetection PeriodicThread
 Ctinyply::PlyData
 Ctinyply::PlyElement
 Ctinyply::PlyFile
 Ctinyply::PlyProperty
 Croboticslab::PointAtObjectServer
 Cyarp::os::PortReader
 Croboticslab::DataProcessorImplements voxelOccupancyDetection callback on Bottle
 Croboticslab::test::PropertyComparer
 Croboticslab::test::PropertyHasher
 Ctinyply::PropertyInfo
 Croboticslab::RenderUpdater
 Cyarp::os::RFModule
 Croboticslab::RgbDetection2D detection
 Croboticslab::RgbdDetection2.5D detection
 Croboticslab::SceneReconstructionExposes Kinect Fusion as a YARP service via RPC
 Croboticslab::VoxelOccupancyDetectionComputer Vision 1
 CSceneReconstructionIDL
 Croboticslab::SceneReconstructionExposes Kinect Fusion as a YARP service via RPC
 Croboticslab::SharedArea
 Ctesting::Test
 Croboticslab::test::ColorRegionDetectorTestTests ColorRegionDetector
 Croboticslab::test::DnnDetectorTestTests DnnDetector
 Croboticslab::test::HaarDetectorTestTests ColorRegionDetector
 Croboticslab::test::QrDetectorTestTests QrDetector
 Croboticslab::test::YarpCloudUtilsTestTests YarpCloudUtils
 Croboticslab::TravisImplements all the algorithms on a single image
 Cyarp::os::TypedReaderCallback
 Croboticslab::YarpCropCallback
 CvtkCommand
 Croboticslab::vtkTimerCallback
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..b42d6d5d --- /dev/null +++ b/index.html @@ -0,0 +1,147 @@ + + + + + + + +vision: Main Page + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
vision Documentation
+
+
+

Vision Homepage Latest Release

+

Vision processing.

+

Link to Doxygen generated documentation: https://robots.uc3m.es/vision/

+

+Installation

+

Installation instructions for installing from source can be found here.

+

+Contributing

+

+Posting Issues

+
    +
  1. Read CONTRIBUTING.md
  2. +
  3. Post an issue / Feature request / Specific documentation request
  4. +
+

+Fork & Pull Request

+
    +
  1. Fork the repository
  2. +
  3. Create your feature branch (git checkout -b my-new-feature) off the master branch, following the Forking Git workflow
  4. +
  5. Commit your changes
  6. +
  7. Push to the branch (git push origin my-new-feature)
  8. +
  9. Create a new Pull Request
  10. +
+

+Status

+

CI (Linux)

+

Coverage Status

+

Issues

+

+Similar and Related Projects

+

+General

+ +

+Visual Servoing

+ +

+Monocular SLAM

+ +
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/libraries_2YarpCloudUtils_2LogComponent_8hpp_source.html b/libraries_2YarpCloudUtils_2LogComponent_8hpp_source.html new file mode 100644 index 00000000..0a47bde3 --- /dev/null +++ b/libraries_2YarpCloudUtils_2LogComponent_8hpp_source.html @@ -0,0 +1,93 @@ + + + + + + + +vision: libraries/YarpCloudUtils/LogComponent.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
LogComponent.hpp
+
+
+
1 #ifndef __YARP_CLOUD_UTILS_LOG_COMPONENT_HPP__
+
2 #define __YARP_CLOUD_UTILS_LOG_COMPONENT_HPP__
+
3 
+
4 #include <yarp/os/LogComponent.h>
+
5 
+
6 YARP_DECLARE_LOG_COMPONENT(YCU)
+
7 
+
8 #endif // __YARP_CLOUD_UTILS_LOG_COMPONENT_HPP__
+
+ + + + diff --git a/md_doc_vision_install.html b/md_doc_vision_install.html new file mode 100644 index 00000000..259d503d --- /dev/null +++ b/md_doc_vision_install.html @@ -0,0 +1,103 @@ + + + + + + + +vision: Installation from Source Code + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Installation from Source Code
+
+
+

+Install the Software dependencies:

+ +

+Install the Software on Ubuntu (working on all tested versions)

+

Our software integrates the previous dependencies. Note that you will be prompted for your password upon using '''sudo''' a couple of times:

+
cd # go home
+
mkdir -p repos; cd repos # make $HOME/repos if it doesn't exist; then, enter it
+
git clone https://github.com/roboticslab-uc3m/vision.git # Download vision software from the repository
+
cd vision && mkdir build && cd build && cmake .. # Configure the vision software
+
make -j$(nproc) # compile
+
sudo make install # Install :-)
+
sudo ldconfig # For libTravisLib.so
+

You may want to (from the same build dir):

echo "export ROBOTICSLAB_VISION_DIR=`pwd`" >> ~/.bashrc
+

For additional VISION options use ccmake instead of cmake.

+
+
+ + + + diff --git a/md_programs_sceneReconstruction_LICENSE_KinectFusion.html b/md_programs_sceneReconstruction_LICENSE_KinectFusion.html new file mode 100644 index 00000000..7aa41de2 --- /dev/null +++ b/md_programs_sceneReconstruction_LICENSE_KinectFusion.html @@ -0,0 +1,90 @@ + + + + + + + +vision: LICENSE_KinectFusion + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
LICENSE_KinectFusion
+
+
+

Copyright (c) 2012, Anatoly Baksheev All rights reserved.

+

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

+
    +
  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • +
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • +
  • Neither the name of the {organization} nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  • +
+

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+
+
+ + + + diff --git a/md_share_HaarDetector_conf_README.html b/md_share_HaarDetector_conf_README.html new file mode 100644 index 00000000..f4df71dd --- /dev/null +++ b/md_share_HaarDetector_conf_README.html @@ -0,0 +1,160 @@ + + + + + + + +vision: HAAR Models + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
HAAR Models
+
+
+
+

+Training Datasets

+
    +
  • Majority of images (shared privately with UC3M users due to diverse licenses): Drive
  • +
  • PAL Robotics logo: Dropbox
  • +
  • Cocacola can: "DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA DETECTOR DE OBJETOS PARA EL ROBOT ASIBOT", Autor: Raúl Sánchez Álvarez, Tutor: Alberto Jardón Huete. Director: Juan Carlos González Víctores. Leganés, Marzo de 2011.
  • +
  • OpenCV models
  • +
+

+Additional Info

+ +

+Bottle of water

+

Bottle HAAR training.

Positive images: 1100
+
Negative images: 1300
+
Number of stages: 8
+

+Car

+

Car HAAR training.

Positive images: 2000
+
Negative images: 2500
+
Number of stages: 20
+

+Chair

+

Chair HAAR training.

+
Positive images: 240
+
Negative images: 350
+
Number of stages: 15
+

+Clock

+

Clock HAAR training.

Positive images: 1300
+
Negative images: 2100
+
Number of stages: 20
+

+Cup

+

Cup HAAR training.

Positive images: 350
+
Negative images: 500
+
Number of stages: 21
+

+Dog

+

Dog HAAR training.

+
Positive images: 1300
+
Negative images: 2100
+
Number of stages: 20
+

+Lamp

+

Lamp HAAR training.

Positive images: 220
+
Negative images: 500
+
Number of stages: 15
+

+Lemon

+

Lemon HAAR training.

Positive images: 1200
+
Negative images: 1300
+
Number of stages: 6
+

+Sofa

+

Sofa HAAR training.

Positive images: 250
+
Negative images: 500
+
Number of stages: 18
+

+Tv

+

TV HAAR training.

Positive images: 1300
+
Negative images: 2100
+
Number of stages: 19
+
+
+ + + + diff --git a/md_share_HaarDetector_tests_README.html b/md_share_HaarDetector_tests_README.html new file mode 100644 index 00000000..ff673189 --- /dev/null +++ b/md_share_HaarDetector_tests_README.html @@ -0,0 +1,89 @@ + + + + + + + +vision: vision/share/HaarDetector/tests/ + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..6ccf847d --- /dev/null +++ b/menudata.js @@ -0,0 +1,43 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Functions",url:"functions_func.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/modules.html b/modules.html new file mode 100644 index 00000000..264a0669 --- /dev/null +++ b/modules.html @@ -0,0 +1,114 @@ + + + + + + + +vision: Modules + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules
    +
    +
    +
    Here is a list of all modules:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     vision Applications (Collections of Programs)Vision applications (collections of programs)
     vision LibrariesVision libraries
     YarpPluginsContains vision libraries that implement YARP device interfaces and therefore can be invoked as YARP plugins
     ArucoCodeDetectorContains roboticslab::ArucoCodeDetector
     ColorRegionDetectorContains roboticslab::ColorRegionDetector
     DnnDetectorContains roboticslab::DnnDetector
     HaarDetectorContains roboticslab::HaarDetector
     QrDetectorContains roboticslab::QrDetector
     TravisLib
     YarpCloudUtilsCollection of cloud-related utilities for YARP
     YarpCropCallbackA typed callback reader for rectangular crop areas
     vision ProgramsVision programs
     PointAtObjectServerCreates an instance of roboticslab::PointAtObjectServer
     rgbdDetectionCreates an instance of roboticslab::RgbdDetection
     rgbDetectionCreates an instance of roboticslab::RgbDetection
     sceneReconstructionCreates an instance of roboticslab::SceneReconstruction
     voxelOccupancyDetectionCreates an instance of roboticslab::VoxelOccupancyDetection
     vision ExamplesVision examples
     exampleColorRegionExampleColorRegion
     exampleDnnDetectorExampleDnnDetector
     exampleHaarDetectorExampleHaarDetector
     exampleMeshFromCloudSample usage of roboticslab::YarpCloudUtils::meshFromCloud
     exampleMeshFromLiveRGBDTransform RGBD frame to cloud/mesh
     exampleProcessCloudSample usage of roboticslab::YarpCloudUtils::processCloud
     exampleQrDetectorExampleQrDetector
     exampleRemoteGrabberThis example connects to a remote grabber (generally, RGB) device
     exampleRemoteRGBDSensorThis example connects to a remote IRGBDSensor device
     exampleSceneReconstructionClientSample usage of sceneReconstruction
     vision TestsVision tests
    +
    +
    + + + + diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 00000000..7f3138e4 --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,139 @@ + + + + + + + +vision: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    +
    + + + + diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 00000000..1070e9f7 --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,139 @@ + + + + + + + +vision: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/namespaceroboticslab.html b/namespaceroboticslab.html new file mode 100644 index 00000000..da1f3a5b --- /dev/null +++ b/namespaceroboticslab.html @@ -0,0 +1,769 @@ + + + + + + + +vision: roboticslab Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    roboticslab Namespace Reference
    +
    +
    + +

    The main, catch-all namespace for Robotics Lab UC3M. +

    + + + + + + + + +

    +Namespaces

     test
     Contains classes related to unit testing.
     
     YarpCloudUtils
     Collection of cloud-related utilities for YARP.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  Travis
     The Travis class implements all the algorithms on a single image. More...
     
    class  YarpCropCallback
     
    class  ArucoCodeDetector
     
    class  ColorRegionDetector
     
    class  DnnDetector
     
    class  HaarDetector
     
    class  IDetector
     Interface for object detection. More...
     
    class  QrDetector
     
    class  LineCallbackPort
     
    class  PointAtObjectServer
     
    class  SharedArea
     
    class  vtkTimerCallback
     
    class  RgbdDetection
     2.5D detection. More...
     
    class  RgbDetection
     2D detection. More...
     
    class  KinectFusion
     
    class  KinectFusionImpl
     
    class  RenderUpdater
     
    class  SceneReconstruction
     Exposes Kinect Fusion as a YARP service via RPC. More...
     
    class  DataProcessor
     Implements voxelOccupancyDetection callback on Bottle. More...
     
    class  SegmentorThread
     Implements voxelOccupancyDetection PeriodicThread. More...
     
    class  VoxelOccupancyDetection
     Computer Vision 1. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    bool compareContourAreas (std::vector< cv::Point > contour1, std::vector< cv::Point > contour2)
     
    bool travisCrop (const int x, const int y, const int width, const int height, cv::Mat &img)
     
    std::vector< cv::Point > getBiggestContour (const cv::Mat image)
     
    void calcLocationXY (float &locX, float &locY, const std::vector< cv::Point > biggestCont)
     
    void calcMask (cv::Mat &mask, const std::vector< cv::Point > biggestCont)
     
    void calcArea (float &area, const std::vector< cv::Point > biggestCont)
     
    void calcRectangularity (float &rectangularity, const std::vector< cv::Point > biggestCont)
     
    void calcAngle (float &angle, const std::vector< cv::Point > biggestCont)
     
    void calcMassCenter (float &massCenterLocX, float &massCenterLocY, const std::vector< cv::Point > biggestCont)
     
    void calcAspectRatio (float &aspectRatio, float &axisFirst, float &axisSecond, const std::vector< cv::Point > biggestCont)
     
    void calcSolidity (float &solidity, const std::vector< cv::Point > biggestCont)
     
    void calcHSVMeanStdDev (const cv::Mat image, const cv::Mat mask, float &hue_mean, float &hue_stddev, float &saturation_mean, float &saturation_stddev, float &value_mean, float &value_stddev)
     
    void calcHSVPeakColor (const cv::Mat image, const cv::Mat mask, float &hue_mode, float &hue_peak, float &value_mode, float &value_peak)
     
    void calcMoments (cv::Mat &theHuMoments, const std::vector< cv::Point > biggestCont)
     
    void calcArcLength (float &arc, const std::vector< cv::Point > biggestCont)
     
    void calcCircle (float &radius, const std::vector< cv::Point > biggestCont)
     
    +std::unique_ptr< KinectFusionmakeColoredKinFu (const yarp::os::Searchable &config, const yarp::sig::IntrinsicParams &depthIntrinsic, const yarp::sig::IntrinsicParams &colorIntrinsic, int depthWidth, int depthHeight, int colorWidth, int colorHeight)
     
    +std::unique_ptr< KinectFusionmakeDynaFu (const yarp::os::Searchable &config, const yarp::sig::IntrinsicParams &intrinsic, int width, int height)
     
    +std::unique_ptr< KinectFusionmakeKinFu (const yarp::os::Searchable &config, const yarp::sig::IntrinsicParams &intrinsic, int width, int height)
     
    +template<typename T >
    getValue (const yarp::os::Value &v)
     
    +template<typename TParams , typename TRet >
    void updateParam (TParams &params, TRet TParams::*param, const yarp::os::Searchable &config, const std::string &name, const std::string &description)
     
    +std::unique_ptr< KinectFusionmakeKinFuLargeScale (const yarp::os::Searchable &config, const yarp::sig::IntrinsicParams &intrinsic, int width, int height)
     
    +

    Function Documentation

    + +

    ◆ calcAngle()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcAngle (float & angle,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the angle.

    + +
    +
    + +

    ◆ calcArcLength()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcArcLength (float & arc,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the arc length.

    + +
    +
    + +

    ◆ calcArea()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcArea (float & area,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the area.

    + +
    +
    + +

    ◆ calcAspectRatio()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcAspectRatio (float & aspectRatio,
    float & axisFirst,
    float & axisSecond,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the aspect ratio.

    + +
    +
    + +

    ◆ calcCircle()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcCircle (float & radius,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the circle.

    + +
    +
    + +

    ◆ calcHSVMeanStdDev()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcHSVMeanStdDev (const cv::Mat image,
    const cv::Mat mask,
    float & hue_mean,
    float & hue_stddev,
    float & saturation_mean,
    float & saturation_stddev,
    float & value_mean,
    float & value_stddev 
    )
    +
    +

    This function calculates the HSV mean and std deviation.

    + +
    +
    + +

    ◆ calcHSVPeakColor()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcHSVPeakColor (const cv::Mat image,
    const cv::Mat mask,
    float & hue_mode,
    float & hue_peak,
    float & value_mode,
    float & value_peak 
    )
    +
    +

    This function calculates the HSV peak color.

    + +
    +
    + +

    ◆ calcLocationXY()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcLocationXY (float & locX,
    float & locY,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates X and Y.

    + +
    +
    + +

    ◆ calcMask()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcMask (cv::Mat & mask,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the mask.

    + +
    +
    + +

    ◆ calcMassCenter()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcMassCenter (float & massCenterLocX,
    float & massCenterLocY,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the mass center.

    + +
    +
    + +

    ◆ calcMoments()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcMoments (cv::Mat & theHuMoments,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the moments.

    + +
    +
    + +

    ◆ calcRectangularity()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcRectangularity (float & rectangularity,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the rectangularity.

    + +
    +
    + +

    ◆ calcSolidity()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void roboticslab::calcSolidity (float & solidity,
    const std::vector< cv::Point > biggestCont 
    )
    +
    +

    This function calculates the solidity.

    + +
    +
    + +

    ◆ compareContourAreas()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool roboticslab::compareContourAreas (std::vector< cv::Point > contour1,
    std::vector< cv::Point > contour2 
    )
    +
    +

    Can be used as a comparison function object for sorting.

    + +
    +
    + +

    ◆ getBiggestContour()

    + +
    +
    + + + + + + + + +
    std::vector< cv::Point > roboticslab::getBiggestContour (const cv::Mat image)
    +
    +

    This function gets the biggest contour.

    + +
    +
    + +

    ◆ travisCrop()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    bool roboticslab::travisCrop (const int x,
    const int y,
    const int width,
    const int height,
    cv::Mat & img 
    )
    +
    +

    Crop the image.

    Parameters
    + + +
    imagethe image to set, in cv::Mat format.
    +
    +
    +
    Returns
    true if the object was set successfully.
    + +
    +
    +
    + + + + diff --git a/namespaceroboticslab_1_1YarpCloudUtils.html b/namespaceroboticslab_1_1YarpCloudUtils.html new file mode 100644 index 00000000..5b4a6228 --- /dev/null +++ b/namespaceroboticslab_1_1YarpCloudUtils.html @@ -0,0 +1,174 @@ + + + + + + + +vision: roboticslab::YarpCloudUtils Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    roboticslab::YarpCloudUtils Namespace Reference
    +
    +
    + +

    Collection of cloud-related utilities for YARP. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T1 , typename T2 >
    bool meshFromCloud (const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)
     Constructs a triangular polygon mesh from a point cloud. More...
     
    template<typename T1 , typename T2 >
    bool meshFromCloud (const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::os::Searchable &config, const std::string &collection="meshPipeline")
     Constructs a triangular polygon mesh from a point cloud. More...
     
    template<typename T1 , typename T2 >
    bool processCloud (const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)
     Processes a cloud of points. More...
     
    template<typename T1 , typename T2 >
    bool processCloud (const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::os::Searchable &config, const std::string &collection="cloudPipeline")
     Processes a cloud of points. More...
     
    template<typename T >
    bool savePLY (const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary=true)
     Writes a triangular polygon mesh to file. More...
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXY &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXYZ &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudNormal &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXYZRGBA &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXYZI &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudInterestPointXYZ &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXYZNormal &, const yarp::sig::VectorOf< int > &, bool)
     
    +template bool savePLY (const std::string &, const yarp::sig::PointCloudXYZNormalRGBA &, const yarp::sig::VectorOf< int > &, bool)
     
    template<typename T >
    bool loadPLY (const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)
     Reads a triangular polygon mesh from file. More...
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXY &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXYZ &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudNormal &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXYZRGBA &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXYZI &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudInterestPointXYZ &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXYZNormal &, yarp::sig::VectorOf< int > &)
     
    +template bool loadPLY (const std::string &, yarp::sig::PointCloudXYZNormalRGBA &, yarp::sig::VectorOf< int > &)
     
    template<typename T >
    bool savePLY (const std::string &filename, const yarp::sig::PointCloud< T > &cloud, bool isBinary=true)
     Writes a point cloud to file. More...
     
    template<typename T >
    bool loadPLY (const std::string &filename, yarp::sig::PointCloud< T > &cloud)
     Reads a point cloud from file. More...
     
    +
    + + + + diff --git a/namespaceroboticslab_1_1test.html b/namespaceroboticslab_1_1test.html new file mode 100644 index 00000000..72b9b8de --- /dev/null +++ b/namespaceroboticslab_1_1test.html @@ -0,0 +1,192 @@ + + + + + + + +vision: roboticslab::test Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    roboticslab::test Namespace Reference
    +
    +
    + +

    Contains classes related to unit testing. +

    + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  ColorRegionDetectorTest
     Tests ColorRegionDetector. More...
     
    class  DnnDetectorTest
     Tests DnnDetector. More...
     
    class  HaarDetectorTest
     Tests ColorRegionDetector. More...
     
    struct  PropertyHasher
     
    struct  PropertyComparer
     
    class  QrDetectorTest
     Tests QrDetector. More...
     
    class  YarpCloudUtilsTest
     Tests YarpCloudUtils. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    TEST_F (ColorRegionDetectorTest, ColorRegionDetector1)
     
    TEST_F (ColorRegionDetectorTest, ColorRegionDetector2)
     
    TEST_F (DnnDetectorTest, DnnDetector1)
     
    TEST_F (DnnDetectorTest, DnnDetector2)
     
    TEST_F (HaarDetectorTest, HaarDetector1)
     
    TEST_F (HaarDetectorTest, HaarDetector2)
     
    TEST_F (QrDetectorTest, QrDetector1)
     
    TEST_F (QrDetectorTest, QrDetector2)
     
    +template<typename T , typename Fn >
    void populateCloud (yarp::sig::PointCloud< T > &cloud, int iterations, Fn &&generator)
     
    +template<typename Fn >
    void populateIndices (yarp::sig::VectorOf< int > &indices, int faces, Fn &&generator)
     
    +unsigned char rnu ()
     
    +float rnf ()
     
    +template<typename T >
    bool testEquality (const yarp::sig::PointCloud< T > &cloud1, const yarp::sig::PointCloud< T > &cloud2)
     
    TEST_F (YarpCloudUtilsTest, PLY_XY)
     
    TEST_F (YarpCloudUtilsTest, PLY_XYZ)
     
    TEST_F (YarpCloudUtilsTest, PLY_Normal)
     
    TEST_F (YarpCloudUtilsTest, PLY_XYZ_RGBA)
     
    TEST_F (YarpCloudUtilsTest, PLY_XYZI)
     
    TEST_F (YarpCloudUtilsTest, PLY_InterestPoint_XYZ)
     
    TEST_F (YarpCloudUtilsTest, PLY_XYZ_Normal)
     
    TEST_F (YarpCloudUtilsTest, PLY_XYZ_Normal_RGBA)
     
    TEST_F (YarpCloudUtilsTest, meshFromCloud)
     
    TEST_F (YarpCloudUtilsTest, processCloud)
     
    TEST_F (YarpCloudUtilsTest, pipelineFromConfig)
     
    +
    + + + + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 00000000..720f47d8 --- /dev/null +++ b/namespaces.html @@ -0,0 +1,128 @@ + + + + + + + +vision: Namespace List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NexampleColorRegionDetector
     NexampleDnnDetector
     NexampleHaarDetector
     NexampleQrDetector
     NroboticslabThe main, catch-all namespace for Robotics Lab UC3M
     NtestContains classes related to unit testing
     CColorRegionDetectorTestTests ColorRegionDetector
     CDnnDetectorTestTests DnnDetector
     CHaarDetectorTestTests ColorRegionDetector
     CPropertyHasher
     CPropertyComparer
     CQrDetectorTestTests QrDetector
     CYarpCloudUtilsTestTests YarpCloudUtils
     NYarpCloudUtilsCollection of cloud-related utilities for YARP
     CTravisImplements all the algorithms on a single image
     CYarpCropCallback
     CArucoCodeDetector
     CColorRegionDetector
     CDnnDetector
     CHaarDetector
     CIDetectorInterface for object detection
     CQrDetector
     CLineCallbackPort
     CPointAtObjectServer
     CSharedArea
     CvtkTimerCallback
     CRgbdDetection2.5D detection
     CRgbDetection2D detection
     CKinectFusion
     CKinectFusionImpl
     CRenderUpdater
     CSceneReconstructionExposes Kinect Fusion as a YARP service via RPC
     CDataProcessorImplements voxelOccupancyDetection callback on Bottle
     CSegmentorThreadImplements voxelOccupancyDetection PeriodicThread
     CVoxelOccupancyDetectionComputer Vision 1
     Ntinyply
     CPropertyInfo
     CBuffer
     Cdelete_array
     CPlyData
     CPlyProperty
     CPlyElement
     CPlyFile
    +
    +
    + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/nav_h.png differ diff --git a/open.png b/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/open.png differ diff --git a/pages.html b/pages.html new file mode 100644 index 00000000..0f944479 --- /dev/null +++ b/pages.html @@ -0,0 +1,90 @@ + + + + + + + +vision: Related Pages + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    + + + + + diff --git a/programs_2sceneReconstruction_2LogComponent_8hpp_source.html b/programs_2sceneReconstruction_2LogComponent_8hpp_source.html new file mode 100644 index 00000000..10069d9f --- /dev/null +++ b/programs_2sceneReconstruction_2LogComponent_8hpp_source.html @@ -0,0 +1,93 @@ + + + + + + + +vision: programs/sceneReconstruction/LogComponent.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    LogComponent.hpp
    +
    +
    +
    1 #ifndef __KINECT_FUSION_LOG_COMPONENT_HPP__
    +
    2 #define __KINECT_FUSION_LOG_COMPONENT_HPP__
    +
    3 
    +
    4 #include <yarp/os/LogComponent.h>
    +
    5 
    +
    6 YARP_DECLARE_LOG_COMPONENT(KINFU)
    +
    7 
    +
    8 #endif // __KINECT_FUSION_LOG_COMPONENT_HPP__
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..0dc5514f --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_5fcontours_0',['_contours',['../classroboticslab_1_1Travis.html#a64908578ec06a4af311f21ab5d252397',1,'roboticslab::Travis']]], + ['_5fimg_1',['_img',['../classroboticslab_1_1Travis.html#a20296082b0281167e495264f9e115cff',1,'roboticslab::Travis']]], + ['_5fimgbin_2',['_imgBin',['../classroboticslab_1_1Travis.html#ab34976826d71ab56497e22b95752944b',1,'roboticslab::Travis']]], + ['_5fimgbin3_3',['_imgBin3',['../classroboticslab_1_1Travis.html#a11365d2899b798c53ffe85faa21f5ff9',1,'roboticslab::Travis']]], + ['_5fimghsv_4',['_imgHsv',['../classroboticslab_1_1Travis.html#aa3a3204f40db1bc6de872b3a810bba5e',1,'roboticslab::Travis']]], + ['_5fminrotatedrects_5',['_minRotatedRects',['../classroboticslab_1_1Travis.html#aebd2482e1a3c5024b1ebaf49e373f8fe',1,'roboticslab::Travis']]], + ['_5foverwrite_6',['_overwrite',['../classroboticslab_1_1Travis.html#a60297152bb03c35d65452ec363f36a79',1,'roboticslab::Travis']]], + ['_5fquiet_7',['_quiet',['../classroboticslab_1_1Travis.html#ae818cd4a05d186b262fa0ad3d4f5269c',1,'roboticslab::Travis']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..2cf841af --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucocodedetector_8',['ArucoCodeDetector',['../group__ArucoCodeDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1ArucoCodeDetector.html',1,'roboticslab::ArucoCodeDetector']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 00000000..3bf11961 --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 00000000..20522d1f --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['travis_92',['Travis',['../classroboticslab_1_1Travis.html',1,'roboticslab::Travis'],['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis::Travis()']]], + ['traviscrop_93',['travisCrop',['../namespaceroboticslab.html#a6e367b4909da6b8bb35b413f821a4f03',1,'roboticslab']]], + ['travislib_94',['TravisLib',['../group__TravisLib.html',1,'']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 00000000..c9f79d28 --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 00000000..be8c9baa --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_95',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_96',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_97',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_98',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_99',['vision Tests',['../group__vision__tests.html',1,'']]], + ['vision_2fshare_2fhaardetector_2ftests_2f_100',['vision/share/HaarDetector/tests/',['../md_share_HaarDetector_tests_README.html',1,'']]], + ['voxeloccupancydetection_101',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['voxeloccupancydetection_102',['voxelOccupancyDetection',['../group__voxelOccupancyDetection.html',1,'']]], + ['vtktimercallback_103',['vtkTimerCallback',['../classroboticslab_1_1vtkTimerCallback.html',1,'roboticslab']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 00000000..ab934722 --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..9176d393 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['yarpcloudutils_104',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_105',['YarpCloudUtils: point cloud utilities for YARP',['../yarpcloudutils.html',1,'']]], + ['yarpcloudutilstest_106',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_107',['YarpCropCallback',['../classroboticslab_1_1YarpCropCallback.html',1,'roboticslab::YarpCropCallback'],['../group__YarpCropCallback.html',1,'(Global Namespace)']]], + ['yarpplugins_108',['YarpPlugins',['../group__YarpPlugins.html',1,'']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..8e2e3525 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['binarize_9',['binarize',['../classroboticslab_1_1Travis.html#a60bc8f288c391dcaa1666fca4932ec9b',1,'roboticslab::Travis::binarize(const char *algorithm)'],['../classroboticslab_1_1Travis.html#a024cd4df85e5697c845f6e66f4a5af2a',1,'roboticslab::Travis::binarize(const char *algorithm, const double &threshold)'],['../classroboticslab_1_1Travis.html#a17a6c07a7de7343782c73855a5f33b02',1,'roboticslab::Travis::binarize(const char *algorithm, const double &min, const double &max)']]], + ['blobize_10',['blobize',['../classroboticslab_1_1Travis.html#ad99d7b358faa94c91eb1839c014a43b8',1,'roboticslab::Travis']]], + ['buffer_11',['Buffer',['../classtinyply_1_1Buffer.html',1,'tinyply']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..a2f1ec32 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['calcangle_12',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_13',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_14',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_15',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_16',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_17',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_18',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_19',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_20',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_21',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_22',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_23',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_24',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['colorregiondetector_25',['ColorRegionDetector',['../group__ColorRegionDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab::ColorRegionDetector']]], + ['colorregiondetectortest_26',['ColorRegionDetectorTest',['../classroboticslab_1_1test_1_1ColorRegionDetectorTest.html',1,'roboticslab::test']]], + ['comparecontourareas_27',['compareContourAreas',['../namespaceroboticslab.html#aa04fb6f785814df14fdee7567be95098',1,'roboticslab']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..95925e95 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_28',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_29',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_30',['DnnDetector',['../group__DnnDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1DnnDetector.html',1,'roboticslab::DnnDetector']]], + ['dnndetectortest_31',['DnnDetectorTest',['../classroboticslab_1_1test_1_1DnnDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..413aec35 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_32',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_33',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_34',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_35',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_36',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_37',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_38',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_39',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_40',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_41',['exampleSceneReconstructionClient',['../group__exampleSceneReconstructionClient.html',1,'']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..a69ede09 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_42',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_43',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_44',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_45',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_46',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_47',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_48',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_49',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_50',['getCvMat',['../classroboticslab_1_1Travis.html#aab7794841340b94719657b9723010bf2',1,'roboticslab::Travis']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..e614e23d --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['haar_20models_51',['HAAR Models',['../md_share_HaarDetector_conf_README.html',1,'']]], + ['haardetector_52',['HaarDetector',['../group__HaarDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1HaarDetector.html',1,'roboticslab::HaarDetector']]], + ['haardetectortest_53',['HaarDetectorTest',['../classroboticslab_1_1test_1_1HaarDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..2f15d3a2 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['idetector_54',['IDetector',['../classroboticslab_1_1IDetector.html',1,'roboticslab']]], + ['installation_20from_20source_20code_55',['Installation from Source Code',['../md_doc_vision_install.html',1,'']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..738cc0ef --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_56',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_57',['KinectFusionImpl',['../classroboticslab_1_1KinectFusionImpl.html',1,'roboticslab']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..bb0a56a2 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['license_5fkinectfusion_58',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.html',1,'']]], + ['linecallbackport_59',['LineCallbackPort',['../classroboticslab_1_1LineCallbackPort.html',1,'roboticslab']]], + ['loadply_60',['loadPLY',['../group__YarpCloudUtils.html#ga4b5304b8c41676015dbd47b96540676c',1,'roboticslab::YarpCloudUtils::loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)'],['../group__YarpCloudUtils.html#gaa77db7dc1b4d2262c2a29c9ac274f96a',1,'roboticslab::YarpCloudUtils::loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud)']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..2458449a --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_61',['meshFromCloud',['../group__YarpCloudUtils.html#ga00253c9baa7383642a8a0cf5c7efc1de',1,'roboticslab::YarpCloudUtils::meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)'],['../group__YarpCloudUtils.html#gaaccc63a40313dff78b524bfe5cba322a',1,'roboticslab::YarpCloudUtils::meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::os::Searchable &config, const std::string &collection="meshPipeline")']]], + ['morphclosing_62',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_63',['morphOpening',['../classroboticslab_1_1Travis.html#a91da25b772bbccc1a18cb7c0ef1259b6',1,'roboticslab::Travis']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..9a6d41b8 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['plydata_64',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_65',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_66',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_67',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_68',['PointAtObjectServer',['../group__pointAtObjectServer.html',1,'(Global Namespace)'],['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab::PointAtObjectServer']]], + ['processcloud_69',['processCloud',['../group__YarpCloudUtils.html#ga97415de4b9e6fbd6415697d831ec64ae',1,'roboticslab::YarpCloudUtils::processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)'],['../group__YarpCloudUtils.html#gaf206d8e9f82097a8c95f7e3db0e1c4b3',1,'roboticslab::YarpCloudUtils::processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::os::Searchable &config, const std::string &collection="cloudPipeline")']]], + ['propertycomparer_70',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_71',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_72',['PropertyInfo',['../structtinyply_1_1PropertyInfo.html',1,'tinyply']]], + ['pushcontour_73',['pushContour',['../classroboticslab_1_1Travis.html#a81b34bf92418b3b1062ce85cc3fc1b06',1,'roboticslab::Travis']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..9e1c183f --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_74',['QrDetector',['../group__QrDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1QrDetector.html',1,'roboticslab::QrDetector']]], + ['qrdetectortest_75',['QrDetectorTest',['../classroboticslab_1_1test_1_1QrDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..19ccb889 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['release_76',['release',['../classroboticslab_1_1Travis.html#a0c3429f799e4ca8f239c5086d4ba468b',1,'roboticslab::Travis']]], + ['renderupdater_77',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_78',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbddetection_79',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_80',['rgbDetection',['../group__rgbDetection.html',1,'']]], + ['rgbdetection_81',['RgbDetection',['../classroboticslab_1_1RgbDetection.html',1,'roboticslab']]], + ['roboticslab_82',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_83',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_84',['YarpCloudUtils',['../namespaceroboticslab_1_1YarpCloudUtils.html',1,'roboticslab']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..e1f62e47 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['saveply_85',['savePLY',['../group__YarpCloudUtils.html#ga9b1d5d79e526b331467337a310fa2dc6',1,'roboticslab::YarpCloudUtils::savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary=true)'],['../group__YarpCloudUtils.html#ga48c7bf4529ac9fdab9288a85058e9a7d',1,'roboticslab::YarpCloudUtils::savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, bool isBinary=true)']]], + ['scenereconstruction_86',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['scenereconstruction_87',['sceneReconstruction',['../group__sceneReconstruction.html',1,'']]], + ['segmentorthread_88',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['setbincvmat_89',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_90',['setCvMat',['../classroboticslab_1_1Travis.html#a1420915be8c78131f2f9f0e57adefb6c',1,'roboticslab::Travis']]], + ['sharedarea_91',['SharedArea',['../classroboticslab_1_1SharedArea.html',1,'roboticslab']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..2198d9a9 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucocodedetector_109',['ArucoCodeDetector',['../classroboticslab_1_1ArucoCodeDetector.html',1,'roboticslab']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 00000000..576e9168 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..222d9e42 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_110',['Buffer',['../classtinyply_1_1Buffer.html',1,'tinyply']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 00000000..956405e5 --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..59cf03d4 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['colorregiondetector_111',['ColorRegionDetector',['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab']]], + ['colorregiondetectortest_112',['ColorRegionDetectorTest',['../classroboticslab_1_1test_1_1ColorRegionDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 00000000..d33343bc --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..65b47987 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_113',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_114',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_115',['DnnDetector',['../classroboticslab_1_1DnnDetector.html',1,'roboticslab']]], + ['dnndetectortest_116',['DnnDetectorTest',['../classroboticslab_1_1test_1_1DnnDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 00000000..8430b07f --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..b7014d3e --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['haardetector_117',['HaarDetector',['../classroboticslab_1_1HaarDetector.html',1,'roboticslab']]], + ['haardetectortest_118',['HaarDetectorTest',['../classroboticslab_1_1test_1_1HaarDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 00000000..c2f1b767 --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 00000000..11cd6a83 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['idetector_119',['IDetector',['../classroboticslab_1_1IDetector.html',1,'roboticslab']]] +]; diff --git a/search/classes_6.html b/search/classes_6.html new file mode 100644 index 00000000..e39847ce --- /dev/null +++ b/search/classes_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 00000000..a2de9dcc --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_120',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_121',['KinectFusionImpl',['../classroboticslab_1_1KinectFusionImpl.html',1,'roboticslab']]] +]; diff --git a/search/classes_7.html b/search/classes_7.html new file mode 100644 index 00000000..a2c4d1a3 --- /dev/null +++ b/search/classes_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 00000000..1838d962 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linecallbackport_122',['LineCallbackPort',['../classroboticslab_1_1LineCallbackPort.html',1,'roboticslab']]] +]; diff --git a/search/classes_8.html b/search/classes_8.html new file mode 100644 index 00000000..17003e48 --- /dev/null +++ b/search/classes_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 00000000..86bca8f9 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['plydata_123',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_124',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_125',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_126',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_127',['PointAtObjectServer',['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab']]], + ['propertycomparer_128',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_129',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_130',['PropertyInfo',['../structtinyply_1_1PropertyInfo.html',1,'tinyply']]] +]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 00000000..b8afa8cb --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 00000000..4beeabfe --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_131',['QrDetector',['../classroboticslab_1_1QrDetector.html',1,'roboticslab']]], + ['qrdetectortest_132',['QrDetectorTest',['../classroboticslab_1_1test_1_1QrDetectorTest.html',1,'roboticslab::test']]] +]; diff --git a/search/classes_a.html b/search/classes_a.html new file mode 100644 index 00000000..6788af27 --- /dev/null +++ b/search/classes_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 00000000..45d572c7 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['renderupdater_133',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_134',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_135',['RgbDetection',['../classroboticslab_1_1RgbDetection.html',1,'roboticslab']]] +]; diff --git a/search/classes_b.html b/search/classes_b.html new file mode 100644 index 00000000..3fcb4985 --- /dev/null +++ b/search/classes_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 00000000..d8813485 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['scenereconstruction_136',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['segmentorthread_137',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['sharedarea_138',['SharedArea',['../classroboticslab_1_1SharedArea.html',1,'roboticslab']]] +]; diff --git a/search/classes_c.html b/search/classes_c.html new file mode 100644 index 00000000..2f7b1f3d --- /dev/null +++ b/search/classes_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 00000000..4280330e --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travis_139',['Travis',['../classroboticslab_1_1Travis.html',1,'roboticslab']]] +]; diff --git a/search/classes_d.html b/search/classes_d.html new file mode 100644 index 00000000..f9011e70 --- /dev/null +++ b/search/classes_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 00000000..78a008a6 --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['voxeloccupancydetection_140',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['vtktimercallback_141',['vtkTimerCallback',['../classroboticslab_1_1vtkTimerCallback.html',1,'roboticslab']]] +]; diff --git a/search/classes_e.html b/search/classes_e.html new file mode 100644 index 00000000..bb33dcfa --- /dev/null +++ b/search/classes_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_e.js b/search/classes_e.js new file mode 100644 index 00000000..3bdd532a --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['yarpcloudutilstest_142',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_143',['YarpCropCallback',['../classroboticslab_1_1YarpCropCallback.html',1,'roboticslab']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 00000000..eb4c5014 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..74ab4d5d --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['binarize_147',['binarize',['../classroboticslab_1_1Travis.html#a60bc8f288c391dcaa1666fca4932ec9b',1,'roboticslab::Travis::binarize(const char *algorithm)'],['../classroboticslab_1_1Travis.html#a024cd4df85e5697c845f6e66f4a5af2a',1,'roboticslab::Travis::binarize(const char *algorithm, const double &threshold)'],['../classroboticslab_1_1Travis.html#a17a6c07a7de7343782c73855a5f33b02',1,'roboticslab::Travis::binarize(const char *algorithm, const double &min, const double &max)']]], + ['blobize_148',['blobize',['../classroboticslab_1_1Travis.html#ad99d7b358faa94c91eb1839c014a43b8',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 00000000..ef4088b8 --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 00000000..04dd453c --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['calcangle_149',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_150',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_151',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_152',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_153',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_154',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_155',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_156',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_157',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_158',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_159',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_160',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_161',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['comparecontourareas_162',['compareContourAreas',['../namespaceroboticslab.html#aa04fb6f785814df14fdee7567be95098',1,'roboticslab']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 00000000..ca5aa10e --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 00000000..d7ff4288 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_163',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_164',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_165',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_166',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_167',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_168',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_169',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_170',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_171',['getCvMat',['../classroboticslab_1_1Travis.html#aab7794841340b94719657b9723010bf2',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 00000000..d79f55b8 --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 00000000..8c5a174f --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loadply_172',['loadPLY',['../group__YarpCloudUtils.html#ga4b5304b8c41676015dbd47b96540676c',1,'roboticslab::YarpCloudUtils::loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)'],['../group__YarpCloudUtils.html#gaa77db7dc1b4d2262c2a29c9ac274f96a',1,'roboticslab::YarpCloudUtils::loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud)']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 00000000..1657cad0 --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 00000000..df47e996 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_173',['meshFromCloud',['../group__YarpCloudUtils.html#ga00253c9baa7383642a8a0cf5c7efc1de',1,'roboticslab::YarpCloudUtils::meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)'],['../group__YarpCloudUtils.html#gaaccc63a40313dff78b524bfe5cba322a',1,'roboticslab::YarpCloudUtils::meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::os::Searchable &config, const std::string &collection="meshPipeline")']]], + ['morphclosing_174',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_175',['morphOpening',['../classroboticslab_1_1Travis.html#a91da25b772bbccc1a18cb7c0ef1259b6',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 00000000..9301d6b9 --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 00000000..f68e6781 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['processcloud_176',['processCloud',['../group__YarpCloudUtils.html#ga97415de4b9e6fbd6415697d831ec64ae',1,'roboticslab::YarpCloudUtils::processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)'],['../group__YarpCloudUtils.html#gaf206d8e9f82097a8c95f7e3db0e1c4b3',1,'roboticslab::YarpCloudUtils::processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::os::Searchable &config, const std::string &collection="cloudPipeline")']]], + ['pushcontour_177',['pushContour',['../classroboticslab_1_1Travis.html#a81b34bf92418b3b1062ce85cc3fc1b06',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 00000000..9c4f5fc6 --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 00000000..bbdaeb1c --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['release_178',['release',['../classroboticslab_1_1Travis.html#a0c3429f799e4ca8f239c5086d4ba468b',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 00000000..46b5c0f6 --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 00000000..2450a250 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['saveply_179',['savePLY',['../group__YarpCloudUtils.html#ga9b1d5d79e526b331467337a310fa2dc6',1,'roboticslab::YarpCloudUtils::savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary=true)'],['../group__YarpCloudUtils.html#ga48c7bf4529ac9fdab9288a85058e9a7d',1,'roboticslab::YarpCloudUtils::savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, bool isBinary=true)']]], + ['setbincvmat_180',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_181',['setCvMat',['../classroboticslab_1_1Travis.html#a1420915be8c78131f2f9f0e57adefb6c',1,'roboticslab::Travis']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 00000000..31a1d950 --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 00000000..d1d2601e --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['travis_182',['Travis',['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis']]], + ['traviscrop_183',['travisCrop',['../namespaceroboticslab.html#a6e367b4909da6b8bb35b413f821a4f03',1,'roboticslab']]] +]; diff --git a/search/groups_0.html b/search/groups_0.html new file mode 100644 index 00000000..c600b497 --- /dev/null +++ b/search/groups_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 00000000..deb0e8a3 --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucocodedetector_192',['ArucoCodeDetector',['../group__ArucoCodeDetector.html',1,'']]] +]; diff --git a/search/groups_1.html b/search/groups_1.html new file mode 100644 index 00000000..2eb3550d --- /dev/null +++ b/search/groups_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 00000000..15b52678 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['colorregiondetector_193',['ColorRegionDetector',['../group__ColorRegionDetector.html',1,'']]] +]; diff --git a/search/groups_2.html b/search/groups_2.html new file mode 100644 index 00000000..12f4af7a --- /dev/null +++ b/search/groups_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 00000000..be3efe17 --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dnndetector_194',['DnnDetector',['../group__DnnDetector.html',1,'']]] +]; diff --git a/search/groups_3.html b/search/groups_3.html new file mode 100644 index 00000000..5e235b53 --- /dev/null +++ b/search/groups_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_3.js b/search/groups_3.js new file mode 100644 index 00000000..e8519041 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_195',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_196',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_197',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_198',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_199',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_200',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_201',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_202',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_203',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_204',['exampleSceneReconstructionClient',['../group__exampleSceneReconstructionClient.html',1,'']]] +]; diff --git a/search/groups_4.html b/search/groups_4.html new file mode 100644 index 00000000..99405e15 --- /dev/null +++ b/search/groups_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_4.js b/search/groups_4.js new file mode 100644 index 00000000..18c332b0 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haardetector_205',['HaarDetector',['../group__HaarDetector.html',1,'']]] +]; diff --git a/search/groups_5.html b/search/groups_5.html new file mode 100644 index 00000000..583f5f58 --- /dev/null +++ b/search/groups_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_5.js b/search/groups_5.js new file mode 100644 index 00000000..3606dc08 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pointatobjectserver_206',['PointAtObjectServer',['../group__pointAtObjectServer.html',1,'']]] +]; diff --git a/search/groups_6.html b/search/groups_6.html new file mode 100644 index 00000000..df6a310f --- /dev/null +++ b/search/groups_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_6.js b/search/groups_6.js new file mode 100644 index 00000000..a1d15f76 --- /dev/null +++ b/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qrdetector_207',['QrDetector',['../group__QrDetector.html',1,'']]] +]; diff --git a/search/groups_7.html b/search/groups_7.html new file mode 100644 index 00000000..8964e050 --- /dev/null +++ b/search/groups_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_7.js b/search/groups_7.js new file mode 100644 index 00000000..797988aa --- /dev/null +++ b/search/groups_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rgbddetection_208',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbdetection_209',['rgbDetection',['../group__rgbDetection.html',1,'']]] +]; diff --git a/search/groups_8.html b/search/groups_8.html new file mode 100644 index 00000000..7987ca39 --- /dev/null +++ b/search/groups_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_8.js b/search/groups_8.js new file mode 100644 index 00000000..ce86c1b3 --- /dev/null +++ b/search/groups_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scenereconstruction_210',['sceneReconstruction',['../group__sceneReconstruction.html',1,'']]] +]; diff --git a/search/groups_9.html b/search/groups_9.html new file mode 100644 index 00000000..4567ddf2 --- /dev/null +++ b/search/groups_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_9.js b/search/groups_9.js new file mode 100644 index 00000000..129d9b4a --- /dev/null +++ b/search/groups_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travislib_211',['TravisLib',['../group__TravisLib.html',1,'']]] +]; diff --git a/search/groups_a.html b/search/groups_a.html new file mode 100644 index 00000000..31f0da4d --- /dev/null +++ b/search/groups_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_a.js b/search/groups_a.js new file mode 100644 index 00000000..3dc36841 --- /dev/null +++ b/search/groups_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_212',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_213',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_214',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_215',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_216',['vision Tests',['../group__vision__tests.html',1,'']]], + ['voxeloccupancydetection_217',['voxelOccupancyDetection',['../group__voxelOccupancyDetection.html',1,'']]] +]; diff --git a/search/groups_b.html b/search/groups_b.html new file mode 100644 index 00000000..8f933479 --- /dev/null +++ b/search/groups_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_b.js b/search/groups_b.js new file mode 100644 index 00000000..5df725e6 --- /dev/null +++ b/search/groups_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['yarpcloudutils_218',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcropcallback_219',['YarpCropCallback',['../group__YarpCropCallback.html',1,'']]], + ['yarpplugins_220',['YarpPlugins',['../group__YarpPlugins.html',1,'']]] +]; diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/namespaces_0.html b/search/namespaces_0.html new file mode 100644 index 00000000..21db2c3a --- /dev/null +++ b/search/namespaces_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 00000000..1d6fd6cd --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['roboticslab_144',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_145',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_146',['YarpCloudUtils',['../namespaceroboticslab_1_1YarpCloudUtils.html',1,'roboticslab']]] +]; diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 00000000..8517b48f --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 00000000..57d74b9c --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haar_20models_221',['HAAR Models',['../md_share_HaarDetector_conf_README.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 00000000..a0fb6796 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 00000000..c51711d1 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['installation_20from_20source_20code_222',['Installation from Source Code',['../md_doc_vision_install.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 00000000..084edfd0 --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 00000000..390a66a1 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['license_5fkinectfusion_223',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 00000000..c0b45b0f --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 00000000..942fbf2b --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vision_2fshare_2fhaardetector_2ftests_2f_224',['vision/share/HaarDetector/tests/',['../md_share_HaarDetector_tests_README.html',1,'']]] +]; diff --git a/search/pages_4.html b/search/pages_4.html new file mode 100644 index 00000000..0f05c2e7 --- /dev/null +++ b/search/pages_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 00000000..49193ee5 --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_225',['YarpCloudUtils: point cloud utilities for YARP',['../yarpcloudutils.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..b1c30f39 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_5fcontours_184',['_contours',['../classroboticslab_1_1Travis.html#a64908578ec06a4af311f21ab5d252397',1,'roboticslab::Travis']]], + ['_5fimg_185',['_img',['../classroboticslab_1_1Travis.html#a20296082b0281167e495264f9e115cff',1,'roboticslab::Travis']]], + ['_5fimgbin_186',['_imgBin',['../classroboticslab_1_1Travis.html#ab34976826d71ab56497e22b95752944b',1,'roboticslab::Travis']]], + ['_5fimgbin3_187',['_imgBin3',['../classroboticslab_1_1Travis.html#a11365d2899b798c53ffe85faa21f5ff9',1,'roboticslab::Travis']]], + ['_5fimghsv_188',['_imgHsv',['../classroboticslab_1_1Travis.html#aa3a3204f40db1bc6de872b3a810bba5e',1,'roboticslab::Travis']]], + ['_5fminrotatedrects_189',['_minRotatedRects',['../classroboticslab_1_1Travis.html#aebd2482e1a3c5024b1ebaf49e373f8fe',1,'roboticslab::Travis']]], + ['_5foverwrite_190',['_overwrite',['../classroboticslab_1_1Travis.html#a60297152bb03c35d65452ec363f36a79',1,'roboticslab::Travis']]], + ['_5fquiet_191',['_quiet',['../classroboticslab_1_1Travis.html#ae818cd4a05d186b262fa0ad3d4f5269c',1,'roboticslab::Travis']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/splitbar.png differ diff --git a/structroboticslab_1_1test_1_1PropertyComparer-members.html b/structroboticslab_1_1test_1_1PropertyComparer-members.html new file mode 100644 index 00000000..7eca3fb1 --- /dev/null +++ b/structroboticslab_1_1test_1_1PropertyComparer-members.html @@ -0,0 +1,89 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    roboticslab::test::PropertyComparer Member List
    +
    +
    + +

    This is the complete list of members for roboticslab::test::PropertyComparer, including all inherited members.

    + + +
    operator()(const yarp::os::Property &lhs, const yarp::os::Property &rhs) const (defined in roboticslab::test::PropertyComparer)roboticslab::test::PropertyComparerinline
    + + + + diff --git a/structroboticslab_1_1test_1_1PropertyComparer.html b/structroboticslab_1_1test_1_1PropertyComparer.html new file mode 100644 index 00000000..3293485c --- /dev/null +++ b/structroboticslab_1_1test_1_1PropertyComparer.html @@ -0,0 +1,98 @@ + + + + + + + +vision: roboticslab::test::PropertyComparer Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    roboticslab::test::PropertyComparer Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +bool operator() (const yarp::os::Property &lhs, const yarp::os::Property &rhs) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • tests/testQrDetector.cpp
    • +
    +
    + + + + diff --git a/structroboticslab_1_1test_1_1PropertyHasher-members.html b/structroboticslab_1_1test_1_1PropertyHasher-members.html new file mode 100644 index 00000000..ee0f47d1 --- /dev/null +++ b/structroboticslab_1_1test_1_1PropertyHasher-members.html @@ -0,0 +1,89 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    roboticslab::test::PropertyHasher Member List
    +
    +
    + +

    This is the complete list of members for roboticslab::test::PropertyHasher, including all inherited members.

    + + +
    operator()(const yarp::os::Property &prop) const (defined in roboticslab::test::PropertyHasher)roboticslab::test::PropertyHasherinline
    + + + + diff --git a/structroboticslab_1_1test_1_1PropertyHasher.html b/structroboticslab_1_1test_1_1PropertyHasher.html new file mode 100644 index 00000000..f0fd6c2f --- /dev/null +++ b/structroboticslab_1_1test_1_1PropertyHasher.html @@ -0,0 +1,98 @@ + + + + + + + +vision: roboticslab::test::PropertyHasher Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    roboticslab::test::PropertyHasher Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +std::size_t operator() (const yarp::os::Property &prop) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • tests/testQrDetector.cpp
    • +
    +
    + + + + diff --git a/structtinyply_1_1Buffer_1_1delete__array-members.html b/structtinyply_1_1Buffer_1_1delete__array-members.html new file mode 100644 index 00000000..68545d85 --- /dev/null +++ b/structtinyply_1_1Buffer_1_1delete__array-members.html @@ -0,0 +1,89 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::Buffer::delete_array Member List
    +
    +
    + +

    This is the complete list of members for tinyply::Buffer::delete_array, including all inherited members.

    + + +
    operator()(uint8_t *p) (defined in tinyply::Buffer::delete_array)tinyply::Buffer::delete_arrayinline
    + + + + diff --git a/structtinyply_1_1Buffer_1_1delete__array.html b/structtinyply_1_1Buffer_1_1delete__array.html new file mode 100644 index 00000000..96c970e4 --- /dev/null +++ b/structtinyply_1_1Buffer_1_1delete__array.html @@ -0,0 +1,98 @@ + + + + + + + +vision: tinyply::Buffer::delete_array Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::Buffer::delete_array Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void operator() (uint8_t *p)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structtinyply_1_1PlyData-members.html b/structtinyply_1_1PlyData-members.html new file mode 100644 index 00000000..cbabf7d9 --- /dev/null +++ b/structtinyply_1_1PlyData-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::PlyData Member List
    +
    +
    + +

    This is the complete list of members for tinyply::PlyData, including all inherited members.

    + + + + + +
    buffer (defined in tinyply::PlyData)tinyply::PlyData
    count (defined in tinyply::PlyData)tinyply::PlyData
    isList (defined in tinyply::PlyData)tinyply::PlyData
    t (defined in tinyply::PlyData)tinyply::PlyData
    + + + + diff --git a/structtinyply_1_1PlyData.html b/structtinyply_1_1PlyData.html new file mode 100644 index 00000000..d4dc4617 --- /dev/null +++ b/structtinyply_1_1PlyData.html @@ -0,0 +1,107 @@ + + + + + + + +vision: tinyply::PlyData Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::PlyData Struct Reference
    +
    +
    + + + + + + + + + + +

    +Public Attributes

    +Type t
     
    +Buffer buffer
     
    +size_t count {0}
     
    +bool isList {false}
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structtinyply_1_1PlyElement-members.html b/structtinyply_1_1PlyElement-members.html new file mode 100644 index 00000000..a695116b --- /dev/null +++ b/structtinyply_1_1PlyElement-members.html @@ -0,0 +1,93 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::PlyElement Member List
    +
    +
    + +

    This is the complete list of members for tinyply::PlyElement, including all inherited members.

    + + + + + + +
    name (defined in tinyply::PlyElement)tinyply::PlyElement
    PlyElement(std::istream &istream) (defined in tinyply::PlyElement)tinyply::PlyElement
    PlyElement(const std::string &_name, size_t count) (defined in tinyply::PlyElement)tinyply::PlyElementinline
    properties (defined in tinyply::PlyElement)tinyply::PlyElement
    size (defined in tinyply::PlyElement)tinyply::PlyElement
    + + + + diff --git a/structtinyply_1_1PlyElement.html b/structtinyply_1_1PlyElement.html new file mode 100644 index 00000000..7caea7ef --- /dev/null +++ b/structtinyply_1_1PlyElement.html @@ -0,0 +1,114 @@ + + + + + + + +vision: tinyply::PlyElement Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::PlyElement Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    PlyElement (std::istream &istream)
     
    PlyElement (const std::string &_name, size_t count)
     
    + + + + + + + +

    +Public Attributes

    +std::string name
     
    +size_t size {0}
     
    +std::vector< PlyPropertyproperties
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structtinyply_1_1PlyFile-members.html b/structtinyply_1_1PlyFile-members.html new file mode 100644 index 00000000..4c816055 --- /dev/null +++ b/structtinyply_1_1PlyFile-members.html @@ -0,0 +1,100 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::PlyFile Member List
    +
    +
    + +

    This is the complete list of members for tinyply::PlyFile, including all inherited members.

    + + + + + + + + + + + + + +
    add_properties_to_element(const std::string &elementKey, const std::vector< std::string > propertyKeys, const Type type, const size_t count, const uint8_t *data, const Type listType, const size_t listCount) (defined in tinyply::PlyFile)tinyply::PlyFile
    get_comments() (defined in tinyply::PlyFile)tinyply::PlyFile
    get_elements() const (defined in tinyply::PlyFile)tinyply::PlyFile
    get_info() const (defined in tinyply::PlyFile)tinyply::PlyFile
    impl (defined in tinyply::PlyFile)tinyply::PlyFile
    is_binary_file() const (defined in tinyply::PlyFile)tinyply::PlyFile
    parse_header(std::istream &is) (defined in tinyply::PlyFile)tinyply::PlyFile
    PlyFile() (defined in tinyply::PlyFile)tinyply::PlyFile
    read(std::istream &is) (defined in tinyply::PlyFile)tinyply::PlyFile
    request_properties_from_element(const std::string &elementKey, const std::vector< std::string > propertyKeys, const uint32_t list_size_hint=0) (defined in tinyply::PlyFile)tinyply::PlyFile
    write(std::ostream &os, bool isBinary) (defined in tinyply::PlyFile)tinyply::PlyFile
    ~PlyFile() (defined in tinyply::PlyFile)tinyply::PlyFile
    + + + + diff --git a/structtinyply_1_1PlyFile.html b/structtinyply_1_1PlyFile.html new file mode 100644 index 00000000..2ec2d253 --- /dev/null +++ b/structtinyply_1_1PlyFile.html @@ -0,0 +1,129 @@ + + + + + + + +vision: tinyply::PlyFile Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::PlyFile Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +bool parse_header (std::istream &is)
     
    +void read (std::istream &is)
     
    +void write (std::ostream &os, bool isBinary)
     
    +std::vector< PlyElementget_elements () const
     
    +std::vector< std::string > get_info () const
     
    +std::vector< std::string > & get_comments ()
     
    +bool is_binary_file () const
     
    +std::shared_ptr< PlyDatarequest_properties_from_element (const std::string &elementKey, const std::vector< std::string > propertyKeys, const uint32_t list_size_hint=0)
     
    +void add_properties_to_element (const std::string &elementKey, const std::vector< std::string > propertyKeys, const Type type, const size_t count, const uint8_t *data, const Type listType, const size_t listCount)
     
    + + + +

    +Public Attributes

    +std::unique_ptr< PlyFileImpl > impl
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structtinyply_1_1PlyProperty-members.html b/structtinyply_1_1PlyProperty-members.html new file mode 100644 index 00000000..29ce4e2a --- /dev/null +++ b/structtinyply_1_1PlyProperty-members.html @@ -0,0 +1,96 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::PlyProperty Member List
    +
    +
    + +

    This is the complete list of members for tinyply::PlyProperty, including all inherited members.

    + + + + + + + + + +
    isList (defined in tinyply::PlyProperty)tinyply::PlyProperty
    listCount (defined in tinyply::PlyProperty)tinyply::PlyProperty
    listType (defined in tinyply::PlyProperty)tinyply::PlyProperty
    name (defined in tinyply::PlyProperty)tinyply::PlyProperty
    PlyProperty(std::istream &is) (defined in tinyply::PlyProperty)tinyply::PlyProperty
    PlyProperty(Type type, std::string &_name) (defined in tinyply::PlyProperty)tinyply::PlyPropertyinline
    PlyProperty(Type list_type, Type prop_type, std::string &_name, size_t list_count) (defined in tinyply::PlyProperty)tinyply::PlyPropertyinline
    propertyType (defined in tinyply::PlyProperty)tinyply::PlyProperty
    + + + + diff --git a/structtinyply_1_1PlyProperty.html b/structtinyply_1_1PlyProperty.html new file mode 100644 index 00000000..7aed8f4c --- /dev/null +++ b/structtinyply_1_1PlyProperty.html @@ -0,0 +1,123 @@ + + + + + + + +vision: tinyply::PlyProperty Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::PlyProperty Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    PlyProperty (std::istream &is)
     
    PlyProperty (Type type, std::string &_name)
     
    PlyProperty (Type list_type, Type prop_type, std::string &_name, size_t list_count)
     
    + + + + + + + + + + + +

    +Public Attributes

    +std::string name
     
    +Type propertyType { Type::INVALID }
     
    +bool isList { false }
     
    +Type listType { Type::INVALID }
     
    +size_t listCount {0}
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structtinyply_1_1PropertyInfo-members.html b/structtinyply_1_1PropertyInfo-members.html new file mode 100644 index 00000000..268b2156 --- /dev/null +++ b/structtinyply_1_1PropertyInfo-members.html @@ -0,0 +1,92 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply::PropertyInfo Member List
    +
    +
    + +

    This is the complete list of members for tinyply::PropertyInfo, including all inherited members.

    + + + + + +
    PropertyInfo() (defined in tinyply::PropertyInfo)tinyply::PropertyInfoinline
    PropertyInfo(int stride, std::string str) (defined in tinyply::PropertyInfo)tinyply::PropertyInfoinline
    str (defined in tinyply::PropertyInfo)tinyply::PropertyInfo
    stride (defined in tinyply::PropertyInfo)tinyply::PropertyInfo
    + + + + diff --git a/structtinyply_1_1PropertyInfo.html b/structtinyply_1_1PropertyInfo.html new file mode 100644 index 00000000..95f6c5e2 --- /dev/null +++ b/structtinyply_1_1PropertyInfo.html @@ -0,0 +1,108 @@ + + + + + + + +vision: tinyply::PropertyInfo Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    tinyply::PropertyInfo Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    PropertyInfo (int stride, std::string str)
     
    + + + + + +

    +Public Attributes

    +int stride {0}
     
    +std::string str
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/tab_s.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..7d45d36c --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/tinyply_8h_source.html b/tinyply_8h_source.html new file mode 100644 index 00000000..7ba5eca7 --- /dev/null +++ b/tinyply_8h_source.html @@ -0,0 +1,1063 @@ + + + + + + + +vision: libraries/YarpCloudUtils/tinyply.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tinyply.h
    +
    +
    +
    1 /*
    +
    2  * tinyply 2.3.3 (https://github.com/ddiakopoulos/tinyply)
    +
    3  *
    +
    4  * A single-header, zero-dependency (except the C++ STL) public domain implementation
    +
    5  * of the PLY mesh file format. Requires C++11; errors are handled through exceptions.
    +
    6  *
    +
    7  * This software is in the public domain. Where that dedication is not
    +
    8  * recognized, you are granted a perpetual, irrevocable license to copy,
    +
    9  * distribute, and modify this file as you see fit.
    +
    10  *
    +
    11  * Authored by Dimitri Diakopoulos (http://www.dimitridiakopoulos.com)
    +
    12  *
    +
    13  * tinyply.h may be included in many files, however in a single compiled file,
    +
    14  * the implementation must be created with the following defined prior to header inclusion
    +
    15  * #define TINYPLY_IMPLEMENTATION
    +
    16  *
    +
    17  */
    +
    18 
    +
    20 // tinyply header //
    +
    22 
    +
    23 #ifndef tinyply_h
    +
    24 #define tinyply_h
    +
    25 
    +
    26 #include <vector>
    +
    27 #include <string>
    +
    28 #include <stdint.h>
    +
    29 #include <cstddef>
    +
    30 #include <sstream>
    +
    31 #include <memory>
    +
    32 #include <unordered_map>
    +
    33 #include <map>
    +
    34 #include <algorithm>
    +
    35 #include <functional>
    +
    36 
    +
    37 namespace tinyply
    +
    38 {
    +
    39 
    +
    40  enum class Type : uint8_t
    +
    41  {
    +
    42  INVALID,
    +
    43  INT8,
    +
    44  UINT8,
    +
    45  INT16,
    +
    46  UINT16,
    +
    47  INT32,
    +
    48  UINT32,
    +
    49  FLOAT32,
    +
    50  FLOAT64
    +
    51  };
    +
    52 
    +
    53  struct PropertyInfo
    +
    54  {
    +
    55  PropertyInfo() {};
    +
    56  PropertyInfo(int stride, std::string str)
    +
    57  : stride(stride), str(str) {}
    +
    58  int stride {0};
    +
    59  std::string str;
    +
    60  };
    +
    61 
    +
    62  static std::map<Type, PropertyInfo> PropertyTable
    +
    63  {
    +
    64  { Type::INT8, PropertyInfo(1, std::string("char")) },
    +
    65  { Type::UINT8, PropertyInfo(1, std::string("uchar")) },
    +
    66  { Type::INT16, PropertyInfo(2, std::string("short")) },
    +
    67  { Type::UINT16, PropertyInfo(2, std::string("ushort")) },
    +
    68  { Type::INT32, PropertyInfo(4, std::string("int")) },
    +
    69  { Type::UINT32, PropertyInfo(4, std::string("uint")) },
    +
    70  { Type::FLOAT32, PropertyInfo(4, std::string("float")) },
    +
    71  { Type::FLOAT64, PropertyInfo(8, std::string("double")) },
    +
    72  { Type::INVALID, PropertyInfo(0, std::string("INVALID"))}
    +
    73  };
    +
    74 
    +
    75  class Buffer
    +
    76  {
    +
    77  uint8_t * alias{ nullptr };
    +
    78  struct delete_array { void operator()(uint8_t * p) { delete[] p; } };
    +
    79  std::unique_ptr<uint8_t, decltype(Buffer::delete_array())> data;
    +
    80  size_t size {0};
    +
    81  public:
    +
    82  Buffer() {};
    +
    83  Buffer(const size_t size) : data(new uint8_t[size], delete_array()), size(size) { alias = data.get(); } // allocating
    +
    84  Buffer(const uint8_t * ptr): alias(const_cast<uint8_t*>(ptr)) { } // non-allocating, todo: set size?
    +
    85  uint8_t * get() { return alias; }
    +
    86  const uint8_t * get_const() {return const_cast<const uint8_t*>(alias); }
    +
    87  size_t size_bytes() const { return size; }
    +
    88  };
    +
    89 
    +
    90  struct PlyData
    +
    91  {
    +
    92  Type t;
    +
    93  Buffer buffer;
    +
    94  size_t count {0};
    +
    95  bool isList {false};
    +
    96  };
    +
    97 
    +
    98  struct PlyProperty
    +
    99  {
    +
    100  PlyProperty(std::istream & is);
    +
    101  PlyProperty(Type type, std::string & _name) : name(_name), propertyType(type) {}
    +
    102  PlyProperty(Type list_type, Type prop_type, std::string & _name, size_t list_count)
    +
    103  : name(_name), propertyType(prop_type), isList(true), listType(list_type), listCount(list_count) {}
    +
    104  std::string name;
    +
    105  Type propertyType{ Type::INVALID };
    +
    106  bool isList{ false };
    +
    107  Type listType{ Type::INVALID };
    +
    108  size_t listCount {0};
    +
    109  };
    +
    110 
    +
    111  struct PlyElement
    +
    112  {
    +
    113  PlyElement(std::istream & istream);
    +
    114  PlyElement(const std::string & _name, size_t count) : name(_name), size(count) {}
    +
    115  std::string name;
    +
    116  size_t size {0};
    +
    117  std::vector<PlyProperty> properties;
    +
    118  };
    +
    119 
    +
    120  struct PlyFile
    +
    121  {
    +
    122  struct PlyFileImpl;
    +
    123  std::unique_ptr<PlyFileImpl> impl;
    +
    124 
    +
    125  PlyFile();
    +
    126  ~PlyFile();
    +
    127 
    +
    128  /*
    +
    129  * The ply format requires an ascii header. This can be used to determine at
    +
    130  * runtime which properties or elements exist in the file. Limited validation of the
    +
    131  * header is performed; it is assumed the header correctly reflects the contents of the
    +
    132  * payload. This function may throw. Returns true on success, false on failure.
    +
    133  */
    +
    134  bool parse_header(std::istream & is);
    +
    135 
    +
    136  /*
    +
    137  * Execute a read operation. Data must be requested via `request_properties_from_element(...)`
    +
    138  * prior to calling this function.
    +
    139  */
    +
    140  void read(std::istream & is);
    +
    141 
    +
    142  /*
    +
    143  * `write` performs no validation and assumes that the data passed into
    +
    144  * `add_properties_to_element` is well-formed.
    +
    145  */
    +
    146  void write(std::ostream & os, bool isBinary);
    +
    147 
    +
    148  /*
    +
    149  * These functions are valid after a call to `parse_header(...)`. In the case of
    +
    150  * writing, get_comments() reference may also be used to add new comments to the ply header.
    +
    151  */
    +
    152  std::vector<PlyElement> get_elements() const;
    +
    153  std::vector<std::string> get_info() const;
    +
    154  std::vector<std::string> & get_comments();
    +
    155  bool is_binary_file() const;
    +
    156 
    +
    157  /*
    +
    158  * In the general case where |list_size_hint| is zero, `read` performs a two-pass
    +
    159  * parse to support variable length lists. The most general use of the
    +
    160  * ply format is storing triangle meshes. When this fact is known a-priori, we can pass
    +
    161  * an expected list length that will apply to this element. Doing so results in an up-front
    +
    162  * memory allocation and a single-pass import, a 2x performance optimization.
    +
    163  */
    +
    164  std::shared_ptr<PlyData> request_properties_from_element(const std::string & elementKey,
    +
    165  const std::vector<std::string> propertyKeys, const uint32_t list_size_hint = 0);
    +
    166 
    +
    167  void add_properties_to_element(const std::string & elementKey,
    +
    168  const std::vector<std::string> propertyKeys,
    +
    169  const Type type,
    +
    170  const size_t count,
    +
    171  const uint8_t * data,
    +
    172  const Type listType,
    +
    173  const size_t listCount);
    +
    174  };
    +
    175 
    +
    176 } // end namespace tinyply
    +
    177 
    +
    178 #endif // end tinyply_h
    +
    179 
    +
    181 // tinyply implementation //
    +
    183 
    +
    184 #ifdef TINYPLY_IMPLEMENTATION
    +
    185 
    +
    186 #include <algorithm>
    +
    187 #include <functional>
    +
    188 #include <type_traits>
    +
    189 #include <iostream>
    +
    190 #include <cstring>
    +
    191 
    +
    192 namespace tinyply
    +
    193 {
    +
    194 
    +
    195 using namespace std;
    +
    196 
    +
    197 template<typename T, typename T2> inline T2 endian_swap(const T & v) noexcept { return v; }
    +
    198 template<> inline uint16_t endian_swap<uint16_t, uint16_t>(const uint16_t & v) noexcept { return (v << 8) | (v >> 8); }
    +
    199 template<> inline uint32_t endian_swap<uint32_t, uint32_t>(const uint32_t & v) noexcept { return (v << 24) | ((v << 8) & 0x00ff0000) | ((v >> 8) & 0x0000ff00) | (v >> 24); }
    +
    200 template<> inline uint64_t endian_swap<uint64_t, uint64_t>(const uint64_t & v) noexcept
    +
    201 {
    +
    202  return (((v & 0x00000000000000ffLL) << 56) |
    +
    203  ((v & 0x000000000000ff00LL) << 40) |
    +
    204  ((v & 0x0000000000ff0000LL) << 24) |
    +
    205  ((v & 0x00000000ff000000LL) << 8) |
    +
    206  ((v & 0x000000ff00000000LL) >> 8) |
    +
    207  ((v & 0x0000ff0000000000LL) >> 24) |
    +
    208  ((v & 0x00ff000000000000LL) >> 40) |
    +
    209  ((v & 0xff00000000000000LL) >> 56));
    +
    210 }
    +
    211 template<> inline int16_t endian_swap<int16_t, int16_t>(const int16_t & v) noexcept { uint16_t r = endian_swap<uint16_t, uint16_t>(*(uint16_t*)&v); return *(int16_t*)&r; }
    +
    212 template<> inline int32_t endian_swap<int32_t, int32_t>(const int32_t & v) noexcept { uint32_t r = endian_swap<uint32_t, uint32_t>(*(uint32_t*)&v); return *(int32_t*)&r; }
    +
    213 template<> inline int64_t endian_swap<int64_t, int64_t>(const int64_t & v) noexcept { uint64_t r = endian_swap<uint64_t, uint64_t>(*(uint64_t*)&v); return *(int64_t*)&r; }
    +
    214 template<> inline float endian_swap<uint32_t, float>(const uint32_t & v) noexcept { union { float f; uint32_t i; }; i = endian_swap<uint32_t, uint32_t>(v); return f; }
    +
    215 template<> inline double endian_swap<uint64_t, double>(const uint64_t & v) noexcept { union { double d; uint64_t i; }; i = endian_swap<uint64_t, uint64_t>(v); return d; }
    +
    216 
    +
    217 inline uint32_t hash_fnv1a(const std::string & str) noexcept
    +
    218 {
    +
    219  static const uint32_t fnv1aBase32 = 0x811C9DC5u;
    +
    220  static const uint32_t fnv1aPrime32 = 0x01000193u;
    +
    221  uint32_t result = fnv1aBase32;
    +
    222  for (auto & c : str) { result ^= static_cast<uint32_t>(c); result *= fnv1aPrime32; }
    +
    223  return result;
    +
    224 }
    +
    225 
    +
    226 inline Type property_type_from_string(const std::string & t) noexcept
    +
    227 {
    +
    228  if (t == "int8" || t == "char") return Type::INT8;
    +
    229  else if (t == "uint8" || t == "uchar") return Type::UINT8;
    +
    230  else if (t == "int16" || t == "short") return Type::INT16;
    +
    231  else if (t == "uint16" || t == "ushort") return Type::UINT16;
    +
    232  else if (t == "int32" || t == "int") return Type::INT32;
    +
    233  else if (t == "uint32" || t == "uint") return Type::UINT32;
    +
    234  else if (t == "float32" || t == "float") return Type::FLOAT32;
    +
    235  else if (t == "float64" || t == "double") return Type::FLOAT64;
    +
    236  return Type::INVALID;
    +
    237 }
    +
    238 
    +
    239 struct PlyFile::PlyFileImpl
    +
    240 {
    +
    241  struct PlyDataCursor
    +
    242  {
    +
    243  size_t byteOffset{ 0 };
    +
    244  size_t totalSizeBytes{ 0 };
    +
    245  };
    +
    246 
    +
    247  struct ParsingHelper
    +
    248  {
    +
    249  std::shared_ptr<PlyData> data;
    +
    250  std::shared_ptr<PlyDataCursor> cursor;
    +
    251  uint32_t list_size_hint;
    +
    252  };
    +
    253 
    +
    254  struct PropertyLookup
    +
    255  {
    +
    256  ParsingHelper * helper{ nullptr };
    +
    257  bool skip{ false };
    +
    258  size_t prop_stride{ 0 }; // precomputed
    +
    259  size_t list_stride{ 0 }; // precomputed
    +
    260  };
    +
    261 
    +
    262  std::unordered_map<uint32_t, ParsingHelper> userData;
    +
    263 
    +
    264  bool isBinary = false;
    +
    265  bool isBigEndian = false;
    +
    266  std::vector<PlyElement> elements;
    +
    267  std::vector<std::string> comments;
    +
    268  std::vector<std::string> objInfo;
    +
    269  uint8_t scratch[64]; // large enough for max list size
    +
    270 
    +
    271  void read(std::istream & is);
    +
    272  void write(std::ostream & os, bool isBinary);
    +
    273 
    +
    274  std::shared_ptr<PlyData> request_properties_from_element(const std::string & elementKey,
    +
    275  const std::vector<std::string> propertyKeys,
    +
    276  const uint32_t list_size_hint);
    +
    277 
    +
    278  void add_properties_to_element(const std::string & elementKey,
    +
    279  const std::vector<std::string> propertyKeys,
    +
    280  const Type type, const size_t count, const uint8_t * data, const Type listType, const size_t listCount);
    +
    281 
    +
    282  size_t read_property_binary(const size_t & stride, void * dest, size_t & destOffset, std::istream & is) noexcept;
    +
    283  size_t read_property_ascii(const Type & t, const size_t & stride, void * dest, size_t & destOffset, std::istream & is);
    +
    284 
    +
    285  std::vector<std::vector<PropertyLookup>> make_property_lookup_table();
    +
    286 
    +
    287  bool parse_header(std::istream & is);
    +
    288  void parse_data(std::istream & is, bool firstPass);
    +
    289  void read_header_format(std::istream & is);
    +
    290  void read_header_element(std::istream & is);
    +
    291  void read_header_property(std::istream & is);
    +
    292  void read_header_text(std::string line, std::vector<std::string> & place, int erase = 0);
    +
    293 
    +
    294  void write_header(std::ostream & os) noexcept;
    +
    295  void write_ascii_internal(std::ostream & os) noexcept;
    +
    296  void write_binary_internal(std::ostream & os) noexcept;
    +
    297  void write_property_ascii(Type t, std::ostream & os, const uint8_t * src, size_t & srcOffset);
    +
    298  void write_property_binary(std::ostream & os, const uint8_t * src, size_t & srcOffset, const size_t & stride) noexcept;
    +
    299 };
    +
    300 
    +
    301 PlyProperty::PlyProperty(std::istream & is) : isList(false)
    +
    302 {
    +
    303  std::string type;
    +
    304  is >> type;
    +
    305  if (type == "list")
    +
    306  {
    +
    307  std::string countType;
    +
    308  is >> countType >> type;
    +
    309  listType = property_type_from_string(countType);
    +
    310  isList = true;
    +
    311  }
    +
    312  propertyType = property_type_from_string(type);
    +
    313  is >> name;
    +
    314 }
    +
    315 
    +
    316 PlyElement::PlyElement(std::istream & is)
    +
    317 {
    +
    318  is >> name >> size;
    +
    319 }
    +
    320 
    +
    321 template<typename T> inline T ply_read_ascii(std::istream & is)
    +
    322 {
    +
    323  T data;
    +
    324  is >> data;
    +
    325  return data;
    +
    326 }
    +
    327 
    +
    328 template<typename T, typename T2>
    +
    329 inline void endian_swap_buffer(uint8_t * data_ptr, const size_t num_bytes, const size_t stride)
    +
    330 {
    +
    331  for (size_t count = 0; count < num_bytes; count += stride)
    +
    332  {
    +
    333  *(reinterpret_cast<T2 *>(data_ptr)) = endian_swap<T, T2>(*(reinterpret_cast<const T *>(data_ptr)));
    +
    334  data_ptr += stride;
    +
    335  }
    +
    336 }
    +
    337 
    +
    338 template<typename T> void ply_cast_ascii(void * dest, std::istream & is)
    +
    339 {
    +
    340  *(static_cast<T *>(dest)) = ply_read_ascii<T>(is);
    +
    341 }
    +
    342 
    +
    343 int64_t find_element(const std::string & key, const std::vector<PlyElement> & list)
    +
    344 {
    +
    345  for (size_t i = 0; i < list.size(); i++) if (list[i].name == key) return i;
    +
    346  return -1;
    +
    347 }
    +
    348 
    +
    349 int64_t find_property(const std::string & key, const std::vector<PlyProperty> & list)
    +
    350 {
    +
    351  for (size_t i = 0; i < list.size(); ++i) if (list[i].name == key) return i;
    +
    352  return -1;
    +
    353 }
    +
    354 
    +
    355 // The `userData` table is an easy data structure for capturing what data the
    +
    356 // user would like out of the ply file, but an inner-loop hash lookup is non-ideal.
    +
    357 // The property lookup table flattens the table down into a 2D array optimized
    +
    358 // for parsing. The first index is the element, and the second index is the property.
    +
    359 std::vector<std::vector<PlyFile::PlyFileImpl::PropertyLookup>> PlyFile::PlyFileImpl::make_property_lookup_table()
    +
    360 {
    +
    361  std::vector<std::vector<PropertyLookup>> element_property_lookup;
    +
    362 
    +
    363  for (auto & element : elements)
    +
    364  {
    +
    365  std::vector<PropertyLookup> lookups;
    +
    366 
    +
    367  for (auto & property : element.properties)
    +
    368  {
    +
    369  PropertyLookup f;
    +
    370 
    +
    371  auto cursorIt = userData.find(hash_fnv1a(element.name + property.name));
    +
    372  if (cursorIt != userData.end()) f.helper = &cursorIt->second;
    +
    373  else f.skip = true;
    +
    374 
    +
    375  f.prop_stride = PropertyTable[property.propertyType].stride;
    +
    376  if (property.isList) f.list_stride = PropertyTable[property.listType].stride;
    +
    377 
    +
    378  lookups.push_back(f);
    +
    379  }
    +
    380 
    +
    381  element_property_lookup.push_back(lookups);
    +
    382  }
    +
    383 
    +
    384  return element_property_lookup;
    +
    385 }
    +
    386 
    +
    387 bool PlyFile::PlyFileImpl::parse_header(std::istream & is)
    +
    388 {
    +
    389  std::string line;
    +
    390  bool success = true;
    +
    391  while (std::getline(is, line))
    +
    392  {
    +
    393  std::istringstream ls(line);
    +
    394  std::string token;
    +
    395  ls >> token;
    +
    396  if (token == "ply" || token == "PLY" || token == "") continue;
    +
    397  else if (token == "comment") read_header_text(line, comments, 8);
    +
    398  else if (token == "format") read_header_format(ls);
    +
    399  else if (token == "element") read_header_element(ls);
    +
    400  else if (token == "property") read_header_property(ls);
    +
    401  else if (token == "obj_info") read_header_text(line, objInfo, 9);
    +
    402  else if (token == "end_header") break;
    +
    403  else success = false; // unexpected header field
    +
    404  }
    +
    405  return success;
    +
    406 }
    +
    407 
    +
    408 void PlyFile::PlyFileImpl::read_header_text(std::string line, std::vector<std::string>& place, int erase)
    +
    409 {
    +
    410  place.push_back((erase > 0) ? line.erase(0, erase) : line);
    +
    411 }
    +
    412 
    +
    413 void PlyFile::PlyFileImpl::read_header_format(std::istream & is)
    +
    414 {
    +
    415  std::string s;
    +
    416  (is >> s);
    +
    417  if (s == "binary_little_endian") isBinary = true;
    +
    418  else if (s == "binary_big_endian") isBinary = isBigEndian = true;
    +
    419 }
    +
    420 
    +
    421 void PlyFile::PlyFileImpl::read_header_element(std::istream & is)
    +
    422 {
    +
    423  elements.emplace_back(is);
    +
    424 }
    +
    425 
    +
    426 void PlyFile::PlyFileImpl::read_header_property(std::istream & is)
    +
    427 {
    +
    428  if (!elements.size()) throw std::runtime_error("no elements defined; file is malformed");
    +
    429  elements.back().properties.emplace_back(is);
    +
    430 }
    +
    431 
    +
    432 size_t PlyFile::PlyFileImpl::read_property_binary(const size_t & stride, void * dest, size_t & destOffset, std::istream & is) noexcept
    +
    433 {
    +
    434  destOffset += stride;
    +
    435  is.read((char*)dest, stride);
    +
    436  return stride;
    +
    437 }
    +
    438 
    +
    439 size_t PlyFile::PlyFileImpl::read_property_ascii(const Type & t, const size_t & stride, void * dest, size_t & destOffset, std::istream & is)
    +
    440 {
    +
    441  destOffset += stride;
    +
    442  switch (t)
    +
    443  {
    +
    444  case Type::INT8: *((int8_t *)dest) = static_cast<int8_t>(ply_read_ascii<int32_t>(is)); break;
    +
    445  case Type::UINT8: *((uint8_t *)dest) = static_cast<uint8_t>(ply_read_ascii<uint32_t>(is)); break;
    +
    446  case Type::INT16: ply_cast_ascii<int16_t>(dest, is); break;
    +
    447  case Type::UINT16: ply_cast_ascii<uint16_t>(dest, is); break;
    +
    448  case Type::INT32: ply_cast_ascii<int32_t>(dest, is); break;
    +
    449  case Type::UINT32: ply_cast_ascii<uint32_t>(dest, is); break;
    +
    450  case Type::FLOAT32: ply_cast_ascii<float>(dest, is); break;
    +
    451  case Type::FLOAT64: ply_cast_ascii<double>(dest, is); break;
    +
    452  case Type::INVALID: throw std::invalid_argument("invalid ply property");
    +
    453  }
    +
    454  return stride;
    +
    455 }
    +
    456 
    +
    457 void PlyFile::PlyFileImpl::write_property_ascii(Type t, std::ostream & os, const uint8_t * src, size_t & srcOffset)
    +
    458 {
    +
    459  switch (t)
    +
    460  {
    +
    461  case Type::INT8: os << static_cast<int32_t>(*reinterpret_cast<const int8_t*>(src)); break;
    +
    462  case Type::UINT8: os << static_cast<uint32_t>(*reinterpret_cast<const uint8_t*>(src)); break;
    +
    463  case Type::INT16: os << *reinterpret_cast<const int16_t*>(src); break;
    +
    464  case Type::UINT16: os << *reinterpret_cast<const uint16_t*>(src); break;
    +
    465  case Type::INT32: os << *reinterpret_cast<const int32_t*>(src); break;
    +
    466  case Type::UINT32: os << *reinterpret_cast<const uint32_t*>(src); break;
    +
    467  case Type::FLOAT32: os << *reinterpret_cast<const float*>(src); break;
    +
    468  case Type::FLOAT64: os << *reinterpret_cast<const double*>(src); break;
    +
    469  case Type::INVALID: throw std::invalid_argument("invalid ply property");
    +
    470  }
    +
    471  os << " ";
    +
    472  srcOffset += PropertyTable[t].stride;
    +
    473 }
    +
    474 
    +
    475 void PlyFile::PlyFileImpl::write_property_binary(std::ostream & os, const uint8_t * src, size_t & srcOffset, const size_t & stride) noexcept
    +
    476 {
    +
    477  os.write((char *)src, stride);
    +
    478  srcOffset += stride;
    +
    479 }
    +
    480 
    +
    481 void PlyFile::PlyFileImpl::read(std::istream & is)
    +
    482 {
    +
    483  std::vector<std::shared_ptr<PlyData>> buffers;
    +
    484  for (auto & entry : userData) buffers.push_back(entry.second.data);
    +
    485 
    +
    486  // Discover if we can allocate up front without parsing the file twice
    +
    487  uint32_t list_hints = 0;
    +
    488  for (auto & b : buffers) for (auto & entry : userData) {list_hints += entry.second.list_size_hint;(void)b;}
    +
    489 
    +
    490  // No list hints? Then we need to calculate how much memory to allocate
    +
    491  if (list_hints == 0)
    +
    492  {
    +
    493  parse_data(is, true);
    +
    494  }
    +
    495 
    +
    496  // Count the number of properties (required for allocation)
    +
    497  // e.g. if we have properties x y and z requested, we ensure
    +
    498  // that their buffer points to the same PlyData
    +
    499  std::unordered_map<PlyData*, int32_t> unique_data_count;
    +
    500  for (auto & ptr : buffers) unique_data_count[ptr.get()] += 1;
    +
    501 
    +
    502  // Since group-requested properties share the same cursor,
    +
    503  // we need to find unique cursors so we only allocate once
    +
    504  std::sort(buffers.begin(), buffers.end());
    +
    505  buffers.erase(std::unique(buffers.begin(), buffers.end()), buffers.end());
    +
    506 
    +
    507  // We sorted by ptrs on PlyData, need to remap back onto its cursor in the userData table
    +
    508  for (auto & b : buffers)
    +
    509  {
    +
    510  for (auto & entry : userData)
    +
    511  {
    +
    512  if (entry.second.data == b && b->buffer.get() == nullptr)
    +
    513  {
    +
    514  // If we didn't receive any list hints, it means we did two passes over the
    +
    515  // file to compute the total length of all (potentially) variable-length lists
    +
    516  if (list_hints == 0)
    +
    517  {
    +
    518  b->buffer = Buffer(entry.second.cursor->totalSizeBytes);
    +
    519  }
    +
    520  else
    +
    521  {
    +
    522  // otherwise, we can allocate up front, skipping the first pass.
    +
    523  const size_t list_size_multiplier = (entry.second.data->isList ? entry.second.list_size_hint : 1);
    +
    524  auto bytes_per_property = entry.second.data->count * PropertyTable[entry.second.data->t].stride * list_size_multiplier;
    +
    525  bytes_per_property *= unique_data_count[b.get()];
    +
    526  b->buffer = Buffer(bytes_per_property);
    +
    527  }
    +
    528 
    +
    529  }
    +
    530  }
    +
    531  }
    +
    532 
    +
    533  // Populate the data
    +
    534  parse_data(is, false);
    +
    535 
    +
    536  // In-place big-endian to little-endian swapping if required
    +
    537  if (isBigEndian)
    +
    538  {
    +
    539  for (auto & b : buffers)
    +
    540  {
    +
    541  uint8_t * data_ptr = b->buffer.get();
    +
    542  const size_t stride = PropertyTable[b->t].stride;
    +
    543  const size_t buffer_size_bytes = b->buffer.size_bytes();
    +
    544 
    +
    545  switch (b->t)
    +
    546  {
    +
    547  case Type::INT16: endian_swap_buffer<int16_t, int16_t>(data_ptr, buffer_size_bytes, stride); break;
    +
    548  case Type::UINT16: endian_swap_buffer<uint16_t, uint16_t>(data_ptr, buffer_size_bytes, stride); break;
    +
    549  case Type::INT32: endian_swap_buffer<int32_t, int32_t>(data_ptr, buffer_size_bytes, stride); break;
    +
    550  case Type::UINT32: endian_swap_buffer<uint32_t, uint32_t>(data_ptr, buffer_size_bytes, stride); break;
    +
    551  case Type::FLOAT32: endian_swap_buffer<uint32_t, float>(data_ptr, buffer_size_bytes, stride); break;
    +
    552  case Type::FLOAT64: endian_swap_buffer<uint64_t, double>(data_ptr, buffer_size_bytes, stride); break;
    +
    553  default: break;
    +
    554  }
    +
    555  }
    +
    556  }
    +
    557 }
    +
    558 
    +
    559 void PlyFile::PlyFileImpl::write(std::ostream & os, bool _isBinary)
    +
    560 {
    +
    561  for (auto & d : userData) { d.second.cursor->byteOffset = 0; }
    +
    562  if (_isBinary)
    +
    563  {
    +
    564  isBinary = true;
    +
    565  isBigEndian = false;
    +
    566  write_binary_internal(os);
    +
    567  }
    +
    568  else
    +
    569  {
    +
    570  isBinary = false;
    +
    571  isBigEndian = false;
    +
    572  write_ascii_internal(os);
    +
    573  }
    +
    574 }
    +
    575 
    +
    576 void PlyFile::PlyFileImpl::write_binary_internal(std::ostream & os) noexcept
    +
    577 {
    +
    578  isBinary = true;
    +
    579 
    +
    580  write_header(os);
    +
    581 
    +
    582  uint8_t listSize[4] = { 0, 0, 0, 0 };
    +
    583  size_t dummyCount = 0;
    +
    584 
    +
    585  auto element_property_lookup = make_property_lookup_table();
    +
    586 
    +
    587  size_t element_idx = 0;
    +
    588  for (auto & e : elements)
    +
    589  {
    +
    590  for (size_t i = 0; i < e.size; ++i)
    +
    591  {
    +
    592  size_t property_index = 0;
    +
    593  for (auto & p : e.properties)
    +
    594  {
    +
    595  auto & f = element_property_lookup[element_idx][property_index];
    +
    596  auto * helper = f.helper;
    +
    597  if (f.skip || helper == nullptr) continue;
    +
    598 
    +
    599  if (p.isList)
    +
    600  {
    +
    601  std::memcpy(listSize, &p.listCount, sizeof(uint32_t));
    +
    602  write_property_binary(os, listSize, dummyCount, f.list_stride);
    +
    603  write_property_binary(os, (helper->data->buffer.get_const() + helper->cursor->byteOffset), helper->cursor->byteOffset, f.prop_stride * p.listCount);
    +
    604  }
    +
    605  else
    +
    606  {
    +
    607  write_property_binary(os, (helper->data->buffer.get_const() + helper->cursor->byteOffset), helper->cursor->byteOffset, f.prop_stride);
    +
    608  }
    +
    609  property_index++;
    +
    610  }
    +
    611  }
    +
    612  element_idx++;
    +
    613  }
    +
    614 }
    +
    615 
    +
    616 void PlyFile::PlyFileImpl::write_ascii_internal(std::ostream & os) noexcept
    +
    617 {
    +
    618  write_header(os);
    +
    619 
    +
    620  auto element_property_lookup = make_property_lookup_table();
    +
    621 
    +
    622  size_t element_idx = 0;
    +
    623  for (auto & e : elements)
    +
    624  {
    +
    625  for (size_t i = 0; i < e.size; ++i)
    +
    626  {
    +
    627  size_t property_index = 0;
    +
    628  for (auto & p : e.properties)
    +
    629  {
    +
    630  auto & f = element_property_lookup[element_idx][property_index];
    +
    631  auto * helper = f.helper;
    +
    632  if (f.skip || helper == nullptr) continue;
    +
    633 
    +
    634  if (p.isList)
    +
    635  {
    +
    636  os << p.listCount << " ";
    +
    637  for (size_t j = 0; j < p.listCount; ++j)
    +
    638  {
    +
    639  write_property_ascii(p.propertyType, os, (helper->data->buffer.get() + helper->cursor->byteOffset), helper->cursor->byteOffset);
    +
    640  }
    +
    641  }
    +
    642  else
    +
    643  {
    +
    644  write_property_ascii(p.propertyType, os, (helper->data->buffer.get() + helper->cursor->byteOffset), helper->cursor->byteOffset);
    +
    645  }
    +
    646  property_index++;
    +
    647  }
    +
    648  os << "\n";
    +
    649  }
    +
    650  element_idx++;
    +
    651  }
    +
    652 }
    +
    653 
    +
    654 void PlyFile::PlyFileImpl::write_header(std::ostream & os) noexcept
    +
    655 {
    +
    656  const std::locale & fixLoc = std::locale("C");
    +
    657  os.imbue(fixLoc);
    +
    658 
    +
    659  os << "ply\n";
    +
    660  if (isBinary) os << ((isBigEndian) ? "format binary_big_endian 1.0" : "format binary_little_endian 1.0") << "\n";
    +
    661  else os << "format ascii 1.0\n";
    +
    662 
    +
    663  for (const auto & comment : comments) os << "comment " << comment << "\n";
    +
    664 
    +
    665  auto property_lookup = make_property_lookup_table();
    +
    666 
    +
    667  size_t element_idx = 0;
    +
    668  for (auto & e : elements)
    +
    669  {
    +
    670  os << "element " << e.name << " " << e.size << "\n";
    +
    671  size_t property_idx = 0;
    +
    672  for (const auto & p : e.properties)
    +
    673  {
    +
    674  PropertyLookup & lookup = property_lookup[element_idx][property_idx];
    +
    675 
    +
    676  if (!lookup.skip)
    +
    677  {
    +
    678  if (p.isList)
    +
    679  {
    +
    680  os << "property list " << PropertyTable[p.listType].str << " "
    +
    681  << PropertyTable[p.propertyType].str << " " << p.name << "\n";
    +
    682  }
    +
    683  else
    +
    684  {
    +
    685  os << "property " << PropertyTable[p.propertyType].str << " " << p.name << "\n";
    +
    686  }
    +
    687  }
    +
    688  property_idx++;
    +
    689  }
    +
    690  element_idx++;
    +
    691  }
    +
    692  os << "end_header\n";
    +
    693 }
    +
    694 
    +
    695 std::shared_ptr<PlyData> PlyFile::PlyFileImpl::request_properties_from_element(const std::string & elementKey,
    +
    696  const std::vector<std::string> propertyKeys,
    +
    697  const uint32_t list_size_hint)
    +
    698 {
    +
    699  if (elements.empty()) throw std::runtime_error("header had no elements defined. malformed file?");
    +
    700  if (elementKey.empty()) throw std::invalid_argument("`elementKey` argument is empty");
    +
    701  if (propertyKeys.empty()) throw std::invalid_argument("`propertyKeys` argument is empty");
    +
    702 
    +
    703  std::shared_ptr<PlyData> out_data = std::make_shared<PlyData>();
    +
    704 
    +
    705  const int64_t elementIndex = find_element(elementKey, elements);
    +
    706 
    +
    707  std::vector<std::string> keys_not_found;
    +
    708 
    +
    709  // Sanity check if the user requested element is in the pre-parsed header
    +
    710  if (elementIndex >= 0)
    +
    711  {
    +
    712  // We found the element
    +
    713  const PlyElement & element = elements[elementIndex];
    +
    714 
    +
    715  // Each key in `propertyKey` gets an entry into the userData map (keyed by a hash of
    +
    716  // element name and property name), but groups of properties (requested from the
    +
    717  // public api through this function) all share the same `ParsingHelper`. When it comes
    +
    718  // time to .read(), we check the number of unique PlyData shared pointers
    +
    719  // and allocate a single buffer that will be used by each property key group.
    +
    720  // That way, properties like, {"x", "y", "z"} will all be put into the same buffer.
    +
    721 
    +
    722  ParsingHelper helper;
    +
    723  helper.data = out_data;
    +
    724  helper.data->count = element.size; // how many items are in the element?
    +
    725  helper.data->isList = false;
    +
    726  helper.data->t = Type::INVALID;
    +
    727  helper.cursor = std::make_shared<PlyDataCursor>();
    +
    728  helper.list_size_hint = list_size_hint;
    +
    729 
    +
    730  // Find each of the keys
    +
    731  for (const auto & key : propertyKeys)
    +
    732  {
    +
    733  const int64_t propertyIndex = find_property(key, element.properties);
    +
    734  if (propertyIndex < 0) keys_not_found.push_back(key);
    +
    735  }
    +
    736 
    +
    737  if (keys_not_found.size())
    +
    738  {
    +
    739  std::stringstream ss;
    +
    740  for (auto & str : keys_not_found) ss << str << ", ";
    +
    741  throw std::invalid_argument("the following property keys were not found in the header: " + ss.str());
    +
    742  }
    +
    743 
    +
    744  for (const auto & key : propertyKeys)
    +
    745  {
    +
    746  const int64_t propertyIndex = find_property(key, element.properties);
    +
    747  const PlyProperty & property = element.properties[propertyIndex];
    +
    748  helper.data->t = property.propertyType;
    +
    749  helper.data->isList = property.isList;
    +
    750  auto result = userData.insert(std::pair<uint32_t, ParsingHelper>(hash_fnv1a(element.name + property.name), helper));
    +
    751  if (result.second == false)
    +
    752  {
    +
    753  throw std::invalid_argument("element-property key has already been requested: " + element.name + " " + property.name);
    +
    754  }
    +
    755  }
    +
    756 
    +
    757  // Sanity check that all properties share the same type
    +
    758  std::vector<Type> propertyTypes;
    +
    759  for (const auto & key : propertyKeys)
    +
    760  {
    +
    761  const int64_t propertyIndex = find_property(key, element.properties);
    +
    762  const PlyProperty & property = element.properties[propertyIndex];
    +
    763  propertyTypes.push_back(property.propertyType);
    +
    764  }
    +
    765 
    +
    766  if (std::adjacent_find(propertyTypes.begin(), propertyTypes.end(), std::not_equal_to<Type>()) != propertyTypes.end())
    +
    767  {
    +
    768  throw std::invalid_argument("all requested properties must share the same type.");
    +
    769  }
    +
    770  }
    +
    771  else throw std::invalid_argument("the element key was not found in the header: " + elementKey);
    +
    772 
    +
    773  return out_data;
    +
    774 }
    +
    775 
    +
    776 void PlyFile::PlyFileImpl::add_properties_to_element(const std::string & elementKey,
    +
    777  const std::vector<std::string> propertyKeys,
    +
    778  const Type type, const size_t count, const uint8_t * data, const Type listType, const size_t listCount)
    +
    779 {
    +
    780  ParsingHelper helper;
    +
    781  helper.data = std::make_shared<PlyData>();
    +
    782  helper.data->count = count;
    +
    783  helper.data->t = type;
    +
    784  helper.data->buffer = Buffer(data); // we should also set size for safety reasons
    +
    785  helper.cursor = std::make_shared<PlyDataCursor>();
    +
    786 
    +
    787  auto create_property_on_element = [&](PlyElement & e)
    +
    788  {
    +
    789  for (auto key : propertyKeys)
    +
    790  {
    +
    791  PlyProperty newProp = (listType == Type::INVALID) ? PlyProperty(type, key) : PlyProperty(listType, type, key, listCount);
    +
    792  userData.insert(std::pair<uint32_t, ParsingHelper>(hash_fnv1a(elementKey + key), helper));
    +
    793  e.properties.push_back(newProp);
    +
    794  }
    +
    795  };
    +
    796 
    +
    797  const int64_t idx = find_element(elementKey, elements);
    +
    798  if (idx >= 0)
    +
    799  {
    +
    800  PlyElement & e = elements[idx];
    +
    801  create_property_on_element(e);
    +
    802  }
    +
    803  else
    +
    804  {
    +
    805  PlyElement newElement = (listType == Type::INVALID) ? PlyElement(elementKey, count) : PlyElement(elementKey, count);
    +
    806  create_property_on_element(newElement);
    +
    807  elements.push_back(newElement);
    +
    808  }
    +
    809 }
    +
    810 
    +
    811 void PlyFile::PlyFileImpl::parse_data(std::istream & is, bool firstPass)
    +
    812 {
    +
    813  std::function<void(PropertyLookup & f, const PlyProperty & p, uint8_t * dest, size_t & destOffset, std::istream & is)> read;
    +
    814  std::function<size_t(PropertyLookup & f, const PlyProperty & p, std::istream & is)> skip;
    +
    815 
    +
    816  const auto start = is.tellg();
    +
    817 
    +
    818  uint32_t listSize = 0;
    +
    819  size_t dummyCount = 0;
    +
    820  std::string skip_ascii_buffer;
    +
    821 
    +
    822  // Special case mirroring read_property_binary but for list types; this
    +
    823  // has an additional big endian check to flip the data in place immediately
    +
    824  // after reading. We do this as a performance optimization; endian flipping is
    +
    825  // done on regular properties as a post-process after reading (also for optimization)
    +
    826  // but we need the correct little-endian list count as we read the file.
    +
    827  auto read_list_binary = [this](const Type & t, void * dst, size_t & destOffset, const size_t & stride, std::istream & _is) noexcept
    +
    828  {
    +
    829  destOffset += stride;
    +
    830  _is.read((char*)dst, stride);
    +
    831 
    +
    832  if (isBigEndian)
    +
    833  {
    +
    834  switch (t)
    +
    835  {
    +
    836  case Type::INT16: *(int16_t*)dst = endian_swap<int16_t, int16_t>(*(int16_t*)dst); break;
    +
    837  case Type::UINT16: *(uint16_t*)dst = endian_swap<uint16_t, uint16_t>(*(uint16_t*)dst); break;
    +
    838  case Type::INT32: *(int32_t*)dst = endian_swap<int32_t, int32_t>(*(int32_t*)dst); break;
    +
    839  case Type::UINT32: *(uint32_t*)dst = endian_swap<uint32_t, uint32_t>(*(uint32_t*)dst); break;
    +
    840  default: break;
    +
    841  }
    +
    842  }
    +
    843 
    +
    844  return stride;
    +
    845  };
    +
    846 
    +
    847  if (isBinary)
    +
    848  {
    +
    849  read = [this, &listSize, &dummyCount, &read_list_binary](PropertyLookup & f, const PlyProperty & p, uint8_t * dest, size_t & destOffset, std::istream & _is) noexcept
    +
    850  {
    +
    851  if (!p.isList)
    +
    852  {
    +
    853  return read_property_binary(f.prop_stride, dest + destOffset, destOffset, _is);
    +
    854  }
    +
    855  read_list_binary(p.listType, &listSize, dummyCount, f.list_stride, _is); // the list size
    +
    856  return read_property_binary(f.prop_stride * listSize, dest + destOffset, destOffset, _is); // properties in list
    +
    857  };
    +
    858  skip = [this, &listSize, &dummyCount, &read_list_binary](PropertyLookup & f, const PlyProperty & p, std::istream & _is) noexcept
    +
    859  {
    +
    860  if (!p.isList)
    +
    861  {
    +
    862  _is.read((char*)scratch, f.prop_stride);
    +
    863  return f.prop_stride;
    +
    864  }
    +
    865  read_list_binary(p.listType, &listSize, dummyCount, f.list_stride, _is); // the list size (does not count for memory alloc)
    +
    866  auto bytes_to_skip = f.prop_stride * listSize;
    +
    867  _is.ignore(bytes_to_skip);
    +
    868  return bytes_to_skip;
    +
    869  };
    +
    870  }
    +
    871  else
    +
    872  {
    +
    873  read = [this, &listSize, &dummyCount](PropertyLookup & f, const PlyProperty & p, uint8_t * dest, size_t & destOffset, std::istream & _is) noexcept
    +
    874  {
    +
    875  if (!p.isList)
    +
    876  {
    +
    877  read_property_ascii(p.propertyType, f.prop_stride, dest + destOffset, destOffset, _is);
    +
    878  }
    +
    879  else
    +
    880  {
    +
    881  read_property_ascii(p.listType, f.list_stride, &listSize, dummyCount, _is); // the list size
    +
    882  for (size_t i = 0; i < listSize; ++i)
    +
    883  {
    +
    884  read_property_ascii(p.propertyType, f.prop_stride, dest + destOffset, destOffset, _is);
    +
    885  }
    +
    886  }
    +
    887  };
    +
    888  skip = [this, &listSize, &dummyCount, &skip_ascii_buffer](PropertyLookup & f, const PlyProperty & p, std::istream & _is) noexcept
    +
    889  {
    +
    890  skip_ascii_buffer.clear();
    +
    891  if (p.isList)
    +
    892  {
    +
    893  read_property_ascii(p.listType, f.list_stride, &listSize, dummyCount, _is); // the list size (does not count for memory alloc)
    +
    894  for (size_t i = 0; i < listSize; ++i) _is >> skip_ascii_buffer; // properties in list
    +
    895  return listSize * f.prop_stride;
    +
    896  }
    +
    897  _is >> skip_ascii_buffer;
    +
    898  return f.prop_stride;
    +
    899  };
    +
    900  }
    +
    901 
    +
    902  std::vector<std::vector<PropertyLookup>> element_property_lookup = make_property_lookup_table();
    +
    903  size_t element_idx = 0;
    +
    904  size_t property_idx = 0;
    +
    905  ParsingHelper * helper {nullptr};
    +
    906 
    +
    907  // This is the inner import loop
    +
    908  for (auto & element : elements)
    +
    909  {
    +
    910  for (size_t count = 0; count < element.size; ++count)
    +
    911  {
    +
    912  property_idx = 0;
    +
    913  for (auto & property : element.properties)
    +
    914  {
    +
    915  PropertyLookup & lookup = element_property_lookup[element_idx][property_idx];
    +
    916 
    +
    917  if (!lookup.skip)
    +
    918  {
    +
    919  helper = lookup.helper;
    +
    920  if (firstPass)
    +
    921  {
    +
    922  helper->cursor->totalSizeBytes += skip(lookup, property, is);
    +
    923 
    +
    924  // These lines will be changed when tinyply supports
    +
    925  // variable length lists. We add it here so our header data structure
    +
    926  // contains enough info to write it back out again (e.g. transcoding).
    +
    927  if (property.listCount == 0) property.listCount = listSize;
    +
    928  if (property.listCount != listSize) throw std::runtime_error("variable length lists are not supported yet.");
    +
    929  }
    +
    930  else
    +
    931  {
    +
    932  read(lookup, property, helper->data->buffer.get(), helper->cursor->byteOffset, is);
    +
    933  }
    +
    934  }
    +
    935  else
    +
    936  {
    +
    937  skip(lookup, property, is);
    +
    938  }
    +
    939  property_idx++;
    +
    940  }
    +
    941  }
    +
    942  element_idx++;
    +
    943  }
    +
    944 
    +
    945  // Reset istream position to the start of the data
    +
    946  if (firstPass) is.seekg(start, is.beg);
    +
    947 }
    +
    948 
    +
    949 // Wrap the public interface:
    +
    950 
    +
    951 PlyFile::PlyFile() { impl.reset(new PlyFileImpl()); }
    +
    952 PlyFile::~PlyFile() { }
    +
    953 bool PlyFile::parse_header(std::istream & is) { return impl->parse_header(is); }
    +
    954 void PlyFile::read(std::istream & is) { return impl->read(is); }
    +
    955 void PlyFile::write(std::ostream & os, bool isBinary) { return impl->write(os, isBinary); }
    +
    956 std::vector<PlyElement> PlyFile::get_elements() const { return impl->elements; }
    +
    957 std::vector<std::string> & PlyFile::get_comments() { return impl->comments; }
    +
    958 std::vector<std::string> PlyFile::get_info() const { return impl->objInfo; }
    +
    959 bool PlyFile::is_binary_file() const { return impl->isBinary; }
    +
    960 std::shared_ptr<PlyData> PlyFile::request_properties_from_element(const std::string & elementKey,
    +
    961  const std::vector<std::string> propertyKeys,
    +
    962  const uint32_t list_size_hint)
    +
    963 {
    +
    964  return impl->request_properties_from_element(elementKey, propertyKeys, list_size_hint);
    +
    965 }
    +
    966 void PlyFile::add_properties_to_element(const std::string & elementKey,
    +
    967  const std::vector<std::string> propertyKeys,
    +
    968  const Type type, const size_t count, const uint8_t * data, const Type listType, const size_t listCount)
    +
    969 {
    +
    970  return impl->add_properties_to_element(elementKey, propertyKeys, type, count, data, listType, listCount);
    +
    971 }
    +
    972 
    +
    973 } // end namespace tinyply
    +
    974 
    +
    975 #endif // end TINYPLY_IMPLEMENTATION
    +
    Definition: tinyply.h:76
    +
    Definition: tinyply.h:78
    +
    Definition: tinyply.h:91
    +
    Definition: tinyply.h:112
    +
    Definition: tinyply.h:121
    +
    Definition: tinyply.h:99
    +
    Definition: tinyply.h:54
    +
    + + + + diff --git a/vtkTimerCallback_8hpp_source.html b/vtkTimerCallback_8hpp_source.html new file mode 100644 index 00000000..f9fa7d10 --- /dev/null +++ b/vtkTimerCallback_8hpp_source.html @@ -0,0 +1,192 @@ + + + + + + + +vision: programs/pointAtObjectServer/vtkTimerCallback.hpp Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    vtkTimerCallback.hpp
    +
    +
    +
    1 #ifndef __VTK_TIMER_CALLBACK_HPP__
    +
    2 #define __VTK_TIMER_CALLBACK_HPP__
    +
    3 
    +
    4 #include <pcl/point_types.h>
    +
    5 #include <pcl/kdtree/kdtree_flann.h>
    +
    6 //#include <pcl/surface/mls.h> // too slow
    +
    7 #include <pcl/ModelCoefficients.h>
    +
    8 #include <pcl/filters/extract_indices.h>
    +
    9 #include <pcl/filters/filter.h>
    +
    10 #include <pcl/filters/voxel_grid.h>
    +
    11 #include <pcl/features/normal_3d.h>
    +
    12 #include <pcl/io/pcd_io.h>
    +
    13 //#include <pcl/io/ply_io.h> // for file writer
    +
    14 #include <pcl/io/openni_grabber.h>
    +
    15 #include <pcl/kdtree/kdtree.h>
    +
    16 #include <pcl/sample_consensus/method_types.h>
    +
    17 #include <pcl/sample_consensus/model_types.h>
    +
    18 #include <pcl/segmentation/sac_segmentation.h>
    +
    19 #include <pcl/segmentation/extract_clusters.h>
    +
    20 //#include <pcl/surface/gp3.h> // better use poisson; this leaves holes
    +
    21 #include <pcl/surface/poisson.h>
    +
    22 //#include <pcl/surface/vtk_utils.h> // worked in pcl-1.6
    +
    23 #include <pcl/surface/vtk_smoothing/vtk_utils.h> // worked in pcl-1.7
    +
    24 #include <pcl/search/impl/search.hpp> // linker errors on pcl-1.7
    +
    25 
    +
    26 #include <vtkActor.h>
    +
    27 #include <vtkAxesActor.h>
    +
    28 #include <vtkCellArray.h>
    +
    29 #include <vtkCommand.h>
    +
    30 #include <vtkLine.h>
    +
    31 #include <vtkLineSource.h>
    +
    32 #include <vtkOBBTree.h>
    +
    33 #include <vtkPoints.h>
    +
    34 #include <vtkPointData.h>
    +
    35 #include <vtkPolyData.h>
    +
    36 #include <vtkPolyDataMapper.h>
    +
    37 #include <vtkPolygon.h>
    +
    38 #include <vtkProperty.h>
    +
    39 #include <vtkRenderer.h>
    +
    40 #include <vtkRenderWindow.h>
    +
    41 #include <vtkRenderWindowInteractor.h>
    +
    42 #include <vtkSmartPointer.h>
    +
    43 #include <vtkTransform.h>
    +
    44 #include <vtkVersion.h>
    +
    45 
    +
    46 #include "SharedArea.hpp"
    +
    47 
    +
    48 namespace roboticslab {
    +
    49 
    +
    58 class vtkTimerCallback : public vtkCommand {
    +
    59  public:
    +
    60  static vtkTimerCallback *New() {
    + +
    62  // cb->TimerCount = 0;
    +
    63  return cb;
    +
    64  }
    +
    65  void init();
    +
    66  void setRenderer(vtkRenderer* _renderer);
    +
    67  void setSharedArea(SharedArea* _sharedArea);
    +
    68  void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &cbCloud); // The cloud callback
    +
    69  virtual void Execute(vtkObject *caller, unsigned long eventId, void * vtkNotUsed(callData));
    +
    70 
    +
    71  private:
    +
    72  // int TimerCount;
    +
    73  // pcl::PCDWriter writer;
    +
    74 
    +
    75  vtkRenderer *renderer;
    +
    76  SharedArea* sharedArea;
    +
    77 
    +
    78  void makeLineActor(vtkActor* _lineActor);
    +
    79  vtkSmartPointer<vtkLineSource> lineSource; // Keep here: he gets updated
    +
    80  double p0[3];
    +
    81  double p1[3];
    +
    82  void updateLine();
    +
    83 
    +
    84  pcl::Grabber* interface; // the Kinect Grabber
    +
    85  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; // The updated Kinect cloud
    +
    86  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered;
    +
    87  bool cloudInit; // true if we have received first Point Cloud
    +
    88  vtkSmartPointer<vtkPolyData> cloud_vtkPD;
    +
    89  void makeCloudActor(vtkActor* _cloudActor);
    +
    90  void updateCloud();
    +
    91  vtkSmartPointer<vtkPolyData> cloud_filtered_vtkPD;
    +
    92  void makeFilteredCloudActor(vtkActor* _filteredCloudActor);
    +
    93  void updateFilteredCloud();
    +
    94 
    +
    95  void createFilteredCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr& _outCloud);
    +
    96 
    +
    97  void removePlanes(pcl::PointCloud<pcl::PointXYZ>::Ptr& _inOutCloud);
    +
    98 
    +
    99  vtkSmartPointer<vtkActorCollection> objectActorCollection;
    +
    100 
    +
    101  void objectSegmentation(pcl::PointCloud<pcl::PointXYZ>::Ptr& _inCloud, vtkActorCollection* _actorCollection);
    +
    102 
    +
    103  // Copied from pcl_visualizer.cpp @ 36441
    +
    104  void convertPointCloudToVTKPolyData (const pcl::PointCloud<pcl::PointXYZ> &cloud,
    +
    105  vtkSmartPointer<vtkPolyData> &polydata);
    +
    106 
    +
    107 };
    +
    108 
    +
    109 } // namespace roboticslab
    +
    110 
    +
    111 #endif // __VTK_TIMER_CALLBACK_HPP__
    +
    112 
    +
    Definition: SharedArea.hpp:12
    +
    Definition: vtkTimerCallback.hpp:58
    +
    The main, catch-all namespace for Robotics Lab UC3M.
    Definition: groups.dox:5
    +
    + + + + diff --git a/yarpcloudutils.html b/yarpcloudutils.html new file mode 100644 index 00000000..422ca500 --- /dev/null +++ b/yarpcloudutils.html @@ -0,0 +1,250 @@ + + + + + + + +vision: YarpCloudUtils: point cloud utilities for YARP + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    YarpCloudUtils: point cloud utilities for YARP
    +
    +
    +

    This library contains a collection of free functions that aim to provide support for the family of yarp::sig::PointCloud<T> template specializations. For the time being, roboticslab::YarpCloudUtils allows users to:

    +
      +
    • save a point cloud or triangular polygon mesh to .ply file,
    • +
    • read a point cloud or triangular polygon mesh from .ply file,
    • +
    • construct a triangular polygon mesh from a point cloud, or
    • +
    • process a point cloud to obtain another cloud.
    • +
    +

    Supported data types are:

    +
      +
    • yarp::sig::DataXY (only for data import/export via .ply)
    • +
    • yarp::sig::DataXYZ
    • +
    • yarp::sig::DataNormal (only for data import/export via .ply)
    • +
    • yarp::sig::DataXYZRGBA
    • +
    • yarp::sig::DataXYZI
    • +
    • yarp::sig::DataInterestPointXYZ
    • +
    • yarp::sig::DataXYZNormal
    • +
    • yarp::sig::DataXYZNormalRGBA
    • +
    +

    XY and plain-normal types are not available for surface meshing and cloud processing.

    +

    +Supported algorithms

    +

    Both roboticslab::YarpCloudUtils::meshFromCloud and roboticslab::YarpCloudUtils::processCloud implement a set of Point Cloud Library (PCL) algorithms. A variety of PCL classes are exposed in a highly configurable pipeline:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PCL class usage point types notes
    pcl::transformPointCloud affine transformation any translation (meters) and rotation (scaled axis-angle, radians)
    pcl::transformPointCloudWithNormals affine transformation any normal type see above
    pcl::ApproximateVoxelGrid cloud resampling any
    pcl::BilateralFilter cloud filtering XYZI(Normal)
    pcl::BilateralUpsampling cloud processing XYZRGBA organized clouds only
    pcl::ConcaveHull mesh construction any
    pcl::ConvexHull mesh construction any
    pcl::CropBox cloud filtering any
    pcl::FastBilateralFilter cloud filtering XYZ(RGBA) organized clouds only
    pcl::FastBilateralFilterOMP cloud filtering XYZ(RGBA) organized clouds only
    pcl::GreedyProjectionTriangulation mesh construction XYZ/XYZI/XYZRGBA + Normal
    pcl::GridMinimum cloud resampling any
    pcl::GridProjection surface reconstruction XYZ/XYZI/XYZRGBA + Normal
    pcl::LocalMaximum cloud resampling any
    pcl::MarchingCubesHoppe surface reconstruction XYZ/XYZI/XYZRGBA + Normal
    pcl::MarchingCubesRBF surface reconstruction XYZ/XYZI/XYZRGBA + Normal
    pcl::MedianFilter cloud filtering any organized clouds only
    pcl::MeshQuadricDecimationVTK mesh processing (mesh)
    pcl::MeshSmoothingLaplacianVTK mesh processing (mesh)
    pcl::MeshSmoothingWindowedSincVTK mesh processing (mesh)
    pcl::MeshSubdivisionVTK mesh processing (mesh)
    pcl::MovingLeastSquares cloud processing any requires PCL 1.9+
    pcl::NormalEstimation normal estimation any
    pcl::NormalEstimationOMP normal estimation any
    pcl::OrganizedFastMesh mesh construction XYZ(RGBA) organized clouds only
    pcl::PassThrough cloud filtering any
    pcl::Poisson surface reconstruction XYZ/XYZI/XYZRGBA + Normal threads requires PCL 1.12+
    pcl::RadiusOutlierRemoval cloud filtering any
    pcl::RandomSample cloud resampling any
    pcl::SamplingSurfaceNormal cloud resampling XYZ/XYZI/XYZRGBA + Normal
    pcl::ShadowPoints cloud filtering any normal type only normal types
    pcl::SimplificationRemoveUnusedVertices mesh simplification (mesh)
    pcl::StatisticalOutlierRemoval cloud filtering any
    pcl::UniformSampling cloud resampling any
    pcl::VoxelGrid cloud resampling any
    +

    Mesh construction methods preserve the original point cloud as the surface vertices and simply construct the mesh on top, while surface reconstruction changes the topology of the input cloud.

    +

    +Configuration

    +

    YARP mechanisms are taken advantage of to set up the pipeline, especially in terms of the dictionary of key-values provided by yarp::os::Property. Depending on the selected function overload, each step of the pipeline corresponds either to an element of a vector of such dictionaries, or a group/dictionary within a named section collection context.

    +

    As a rule of thumb, there will always be a key named algorithm which corresponds to one of the supported PCL classes, i.e. the paired value must be equal to the class name of the selected algorithm.

    +

    Remaining keys of the configured step, if any, correspond to configuration setters pertaining to the algorithm, always following the camelCase naming convention. For instance, in order to access the pcl::Poisson::setMinDepth setter, one would create a dictionary key named minDepth and assign it an integer value. In a similar manner, dictionary values are mapped to enumerations, e.g. pcl::OrganizedFastMesh::TriangulationType:QUAD_MESH can be requested by assigning quadMesh to key triangulationType.

    +

    In absence of key-value entries (beyond the mandatory algorithm one), the pipeline assumes default values as defined by each class constructor.

    +

    Note: mind input/output types for each step. If the output of step N is not compatible with the expected input of step N+1, an error will be reported.

    +

    +Vector of dictionaries

    +

    The most straightforward way to configure a pipeline is using the VectorOf<Property> overload. Each element of the vector is one step of the pipeline, order is preserved:

    +
    yarp::sig::VectorOf<yarp::os::Property> options {
    +
    {
    +
    {"algorithm", yarp::os::Value("VoxelGrid")},
    +
    {"leafSize", yarp::os::Value(0.02f)}
    +
    },
    +
    {
    +
    {"algorithm", yarp::os::Value("NormalEstimationOMP")},
    +
    {"kSearch", yarp::os::Value(40)}
    +
    },
    +
    {
    +
    {"algorithm", yarp::os::Value("Poisson")}
    +
    }
    +
    };
    +
    +
    bool ret = roboticslab::YarpCloudUtils::meshFromCloud(cloud, vertices, indices, options);
    +
    bool meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)
    Constructs a triangular polygon mesh from a point cloud.
    Definition: YarpCloudUtils-pcl.cpp:290
    +

    The above pipeline will first downsample the input cloud using the pcl::VoxelGrid algorithm with a leaf size of 2 cm. Since pcl::Poisson requires an input normal type, we estimate normals with an intermediate NormalEstimation step, and then perform surface reconstruction.

    +

    +Configuration context

    +

    Handy overloads are provided for both meshFromCloud and processCloud to parse the pipeline from a configuration file or similar context (e.g. command line) using the YARP native configuration format (see YARP config files).

    +

    The same behavior shown in the previous section can be achieved with an .ini file such as:

    +
    [myPipeline downsample]
    +
    algorithm "VoxelGrid"
    +
    leafSize 0.02f
    +
    +
    [myPipeline estimate]
    +
    algorithm "NormalEstimationOMP"
    +
    kSearch 40
    +
    +
    [myPipeline reconstruct]
    +
    algorithm "Poisson"
    +

    Then, in C++ code:

    +
    yarp::os::Property config;
    +
    config.fromConfigFile("path/to/file.ini");
    +
    +
    bool ret = roboticslab::YarpCloudUtils::meshFromCloud(cloud, vertices, indices, config, "myPipeline");
    +

    The myPipeline element is the name of the section collection which is common to all steps in this configuration (see YARP docs). We can express this intent also directly in C++ code:

    +
    yarp::os::Property config("(myPipeline downsample estimate reconstruct)");
    +
    config.addGroup("downsample") = {
    +
    {"algorithm", yarp::os::Value("VoxelGrid")},
    +
    {"leafSize", yarp::os::Value(0.02f)}
    +
    };
    +
    config.addGroup("estimate") = {
    +
    {"algorithm", yarp::os::Value("NormalEstimationOMP")},
    +
    {"kSearch", yarp::os::Value(40)}
    +
    };
    +
    config.addGroup("reconstruct") = {
    +
    {"algorithm", yarp::os::Value("Poisson")}
    +
    };
    +
    +
    bool ret = roboticslab::YarpCloudUtils::meshFromCloud(cloud, vertices, indices, config, "myPipeline");
    +

    Or, via command line:

    +
    application --myPipeline downsample estimate reconstruct \
    +
    --downsample::algorithm VoxelGrid --downsample::leafSize 0.02f \
    +
    --estimate::algorithm NormalEstimationOMP --estimate::kSearch 40 \
    +
    --reconstruct::algorithm Poisson
    +
    yarp::os::Property config;
    +
    config.fromCommand(argc, argv);
    +
    +
    bool ret = roboticslab::YarpCloudUtils::meshFromCloud(cloud, vertices, indices, config, "myPipeline");
    +

    In case you want to maintain a collection of pipeline configurations, each one placed within its own .ini file, then select the most appropriate for the task at hand, it is advised to use the include feature combined with simultaneous section collection (docs). Refer to YARP documentation for further examples and a similar functionality related to directory inclusion.

    +
    +
    + + + +