diff --git a/ArucoDetector_8hpp_source.html b/ArucoDetector_8hpp_source.html new file mode 100644 index 00000000..5a0ae8b8 --- /dev/null +++ b/ArucoDetector_8hpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +vision: libraries/YarpPlugins/ArucoDetector/ArucoDetector.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ArucoDetector.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 ArucoDetector : 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: ArucoDetector.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..003e27e0 --- /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..6aae42fc --- /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..e23e2cf1 --- /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..6e01c78d --- /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..87bc62b1 --- /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..f943f9b1 --- /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..3f4ee543 --- /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..6b37203b --- /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..1cb99c50 --- /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..a66a121a --- /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..555419c7 --- /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..d128cd9b --- /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..e91d08ef --- /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..75efd485 --- /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..ec9eeaab --- /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..b89ad490 --- /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..7f64e82e --- /dev/null +++ b/YarpCloudUtils-pcl-impl_8hpp_source.html @@ -0,0 +1,1002 @@ + + + + + + + +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 #include <pcl/surface/mls.h>
+
47 #include <pcl/surface/organized_fast_mesh.h>
+
48 #include <pcl/surface/poisson.h>
+
49 #include <pcl/surface/simplification_remove_unused_vertices.h>
+
50 #include <pcl/surface/vtk_smoothing/vtk_mesh_quadric_decimation.h>
+
51 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_laplacian.h>
+
52 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_windowed_sinc.h>
+
53 #include <pcl/surface/vtk_smoothing/vtk_mesh_subdivision.h>
+
54 
+
55 namespace
+
56 {
+
57 
+
58 auto getTransformation(const yarp::os::Searchable & options)
+
59 {
+
60  auto transformation = Eigen::Transform<double, 3, Eigen::Affine>::Identity();
+
61 
+
62  if (const auto & translation = options.find("translation"); !translation.isNull())
+
63  {
+
64  if (!translation.isList() || translation.asList()->size() != 3)
+
65  {
+
66  throw std::runtime_error("translation is not a list or size not equal to 3");
+
67  }
+
68 
+
69  const auto * b = translation.asList();
+
70  Eigen::Vector3d vector(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
71  transformation.translate(vector);
+
72  }
+
73 
+
74  if (const auto & rotation = options.find("rotation"); !rotation.isNull())
+
75  {
+
76  if (!rotation.isList() || rotation.asList()->size() != 3)
+
77  {
+
78  throw std::runtime_error("rotation is not a list or size not equal to 3");
+
79  }
+
80 
+
81  const auto * b = rotation.asList();
+
82  Eigen::Vector3d axis(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
83  Eigen::AngleAxisd rot(axis.norm(), axis.normalized());
+
84  transformation.rotate(rot);
+
85  }
+
86 
+
87  return transformation;
+
88 }
+
89 
+
90 template <typename T>
+
91 void checkOutput(const typename pcl::PointCloud<T>::ConstPtr & cloud, const std::string & caller)
+
92 {
+
93  if (cloud->empty())
+
94  {
+
95  throw std::runtime_error(caller + " returned an empty cloud");
+
96  }
+
97 }
+
98 
+
99 inline void checkOutput(const pcl::PolygonMesh::ConstPtr & mesh, const std::string & caller)
+
100 {
+
101  if (mesh->cloud.data.empty() || mesh->polygons.empty())
+
102  {
+
103  throw std::runtime_error(caller + " returned an empty or incomplete mesh");
+
104  }
+
105 }
+
106 
+
107 template <typename T>
+
108 void doTransformPointCloud(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
109 {
+
110  auto transformation = getTransformation(options);
+
111  pcl::transformPointCloud(*in, *out, transformation);
+
112  checkOutput<T>(out, "transformPointCloud");
+
113 }
+
114 
+
115 template <typename T>
+
116 void doTransformPointCloudWithNormals(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
117 {
+
118  auto transformation = getTransformation(options);
+
119  pcl::transformPointCloudWithNormals(*in, *out, transformation);
+
120  checkOutput<T>(out, "transformPointCloudWithNormals");
+
121 }
+
122 
+
123 template <typename T>
+
124 void doApproximateVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
125 {
+
126  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
127  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
128  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
129  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
130  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
131 
+
132  pcl::ApproximateVoxelGrid<T> grid;
+
133  grid.setDownsampleAllData(downsampleAllData);
+
134  grid.setInputCloud(in);
+
135  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
136  grid.filter(*out);
+
137 
+
138  checkOutput<T>(out, "ApproximateVoxelGrid");
+
139 }
+
140 
+
141 template <typename T>
+
142 void doBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
143 {
+
144  auto halfSize = options.check("halfSize", yarp::os::Value(0.0)).asFloat64();
+
145  auto stdDev = options.check("stdDev", yarp::os::Value(std::numeric_limits<double>::max())).asFloat64();
+
146 
+
147  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
148  tree->setInputCloud(in);
+
149 
+
150  pcl::BilateralFilter<T> filter;
+
151  filter.setHalfSize(halfSize);
+
152  filter.setInputCloud(in);
+
153  filter.setSearchMethod(tree);
+
154  filter.setStdDev(stdDev);
+
155  filter.filter(*out);
+
156 
+
157  checkOutput<T>(out, "BilateralFilter");
+
158 }
+
159 
+
160 template <typename T>
+
161 void doBilateralUpsampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
162 {
+
163  auto sigmaColor = options.check("sigmaColor", yarp::os::Value(15.0f)).asFloat32();
+
164  auto sigmaDepth = options.check("sigmaDepth", yarp::os::Value(0.5f)).asFloat32();
+
165  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
166 
+
167  pcl::BilateralUpsampling<T, T> upsampler;
+
168  upsampler.setInputCloud(in);
+
169  upsampler.setSigmaColor(sigmaColor);
+
170  upsampler.setSigmaDepth(sigmaDepth);
+
171  upsampler.setWindowSize(windowSize);
+
172  upsampler.process(*out);
+
173 
+
174  checkOutput<T>(out, "BilateralUpsampling");
+
175 }
+
176 
+
177 template <typename T>
+
178 void doConcaveHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
179 {
+
180  auto alpha = options.check("alpha", yarp::os::Value(0.0)).asFloat64();
+
181 
+
182  pcl::ConcaveHull<T> concave;
+
183  concave.setAlpha(alpha);
+
184  concave.setDimension(3);
+
185  concave.setInputCloud(in);
+
186  concave.setKeepInformation(true);
+
187  concave.reconstruct(*out);
+
188 
+
189  checkOutput(out, "ConcaveHull");
+
190 }
+
191 
+
192 template <typename T>
+
193 void doConvexHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
194 {
+
195  pcl::ConvexHull<T> convex;
+
196  convex.setDimension(3);
+
197  convex.setInputCloud(in);
+
198  convex.reconstruct(*out);
+
199 
+
200  checkOutput(out, "ConvexHull");
+
201 }
+
202 
+
203 template <typename T>
+
204 void doCropBox(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
205 {
+
206  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
207  auto maxX = options.check("maxX", yarp::os::Value(1.0f)).asFloat32();
+
208  auto maxY = options.check("maxY", yarp::os::Value(1.0f)).asFloat32();
+
209  auto maxZ = options.check("maxZ", yarp::os::Value(1.0f)).asFloat32();
+
210  auto minX = options.check("minX", yarp::os::Value(-1.0f)).asFloat32();
+
211  auto minY = options.check("minY", yarp::os::Value(-1.0f)).asFloat32();
+
212  auto minZ = options.check("minZ", yarp::os::Value(-1.0f)).asFloat32();
+
213  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
214  auto rotationX = options.check("rotationX", yarp::os::Value(0.0f)).asFloat32();
+
215  auto rotationY = options.check("rotationY", yarp::os::Value(0.0f)).asFloat32();
+
216  auto rotationZ = options.check("rotationZ", yarp::os::Value(0.0f)).asFloat32();
+
217  auto translationX = options.check("translationX", yarp::os::Value(0.0f)).asFloat32();
+
218  auto translationY = options.check("translationY", yarp::os::Value(0.0f)).asFloat32();
+
219  auto translationZ = options.check("translationZ", yarp::os::Value(0.0f)).asFloat32();
+
220 
+
221  pcl::CropBox<T> cropper;
+
222  cropper.setInputCloud(in);
+
223  cropper.setKeepOrganized(keepOrganized);
+
224  cropper.setMax({maxX, maxY, maxZ, 1.0f});
+
225  cropper.setMin({minX, minY, minZ, 1.0f});
+
226  cropper.setNegative(negative);
+
227  cropper.setRotation({rotationX, rotationY, rotationZ});
+
228  cropper.setTranslation({translationX, translationY, translationZ});
+
229  cropper.filter(*out);
+
230 
+
231  checkOutput<T>(out, "CropBox");
+
232 }
+
233 
+
234 template <typename T>
+
235 void doFastBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
236 {
+
237  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
238  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
239 
+
240  pcl::FastBilateralFilter<T> fast;
+
241  fast.setInputCloud(in);
+
242  fast.setSigmaR(sigmaR);
+
243  fast.setSigmaS(sigmaS);
+
244  fast.filter(*out);
+
245 
+
246  checkOutput<T>(out, "FastBilateralFilter");
+
247 }
+
248 
+
249 template <typename T>
+
250 void doFastBilateralFilterOMP(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
251 {
+
252  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
253  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
254  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
255 
+
256  pcl::FastBilateralFilterOMP<T> fast;
+
257  fast.setInputCloud(in);
+
258  fast.setNumberOfThreads(numberOfThreads);
+
259  fast.setSigmaR(sigmaR);
+
260  fast.setSigmaS(sigmaS);
+
261  fast.filter(*out);
+
262 
+
263  checkOutput<T>(out, "FastBilateralFilterOMP");
+
264 }
+
265 
+
266 template <typename T>
+
267 void doGreedyProjectionTriangulation(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
268 {
+
269  auto consistentVertexOrdering = options.check("consistentVertexOrdering", yarp::os::Value(false)).asBool();
+
270  auto maximumAngle = options.check("maximumAngle", yarp::os::Value(2 * M_PI / 3)).asFloat64();
+
271  auto maximumNearestNeighbors = options.check("maximumNearestNeighbors", yarp::os::Value(100)).asInt32();
+
272  auto maximumSurfaceAngle = options.check("maximumSurfaceAngle", yarp::os::Value(M_PI / 4)).asFloat64();
+
273  auto minimumAngle = options.check("minimumAngle", yarp::os::Value(M_PI / 18)).asFloat64();
+
274  auto mu = options.check("mu", yarp::os::Value(0.0)).asFloat64();
+
275  auto normalConsistency = options.check("normalConsistency", yarp::os::Value(false)).asBool();
+
276  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
277 
+
278  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
279  tree->setInputCloud(in);
+
280 
+
281  pcl::GreedyProjectionTriangulation<T> gp3;
+
282  gp3.setConsistentVertexOrdering(consistentVertexOrdering);
+
283  gp3.setInputCloud(in);
+
284  gp3.setMaximumAngle(maximumAngle);
+
285  gp3.setMaximumSurfaceAngle(maximumSurfaceAngle);
+
286  gp3.setMaximumNearestNeighbors(maximumNearestNeighbors);
+
287  gp3.setMinimumAngle(minimumAngle);
+
288  gp3.setMu(mu);
+
289  gp3.setNormalConsistency(normalConsistency);
+
290  gp3.setSearchMethod(tree);
+
291  gp3.setSearchRadius(searchRadius);
+
292  gp3.reconstruct(*out);
+
293 
+
294  checkOutput(out, "GreedyProjectionTriangulation");
+
295 }
+
296 
+
297 template <typename T>
+
298 void doGridMinimum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
299 {
+
300  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
301  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
302  auto resolution = options.check("resolution", yarp::os::Value(0.0f)).asFloat32();
+
303 
+
304  pcl::GridMinimum<T> grid(resolution);
+
305 
+
306  grid.setInputCloud(in);
+
307  grid.setKeepOrganized(keepOrganized);
+
308  grid.setNegative(negative);
+
309  grid.filter(*out);
+
310 
+
311  checkOutput<T>(out, "GridMinimum");
+
312 }
+
313 
+
314 template <typename T>
+
315 void doGridProjection(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
316 {
+
317  auto maxBinarySearchLevel = options.check("maxBinarySearchLevel", yarp::os::Value(10)).asInt32();
+
318  auto nearestNeighborNum = options.check("nearestNeighborNum", yarp::os::Value(50)).asInt32();
+
319  auto paddingSize = options.check("paddingSize", yarp::os::Value(3)).asInt32();
+
320  auto resolution = options.check("resolution", yarp::os::Value(0.001)).asFloat64();
+
321 
+
322  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
323  tree->setInputCloud(in);
+
324 
+
325  pcl::GridProjection<T> gp;
+
326  gp.setInputCloud(in);
+
327  gp.setMaxBinarySearchLevel(maxBinarySearchLevel);
+
328  gp.setNearestNeighborNum(nearestNeighborNum);
+
329  gp.setPaddingSize(paddingSize);
+
330  gp.setResolution(resolution);
+
331  gp.setSearchMethod(tree);
+
332  gp.reconstruct(*out);
+
333 
+
334  checkOutput(out, "GridProjection");
+
335 }
+
336 
+
337 template <typename T>
+
338 void doLocalMaximum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
339 {
+
340  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
341  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
342  auto radius = options.check("radius", yarp::os::Value(1.0f)).asFloat32();
+
343 
+
344  pcl::LocalMaximum<T> local;
+
345  local.setInputCloud(in);
+
346  local.setKeepOrganized(keepOrganized);
+
347  local.setNegative(negative);
+
348  local.setRadius(radius);
+
349  local.filter(*out);
+
350 
+
351  checkOutput<T>(out, "LocalMaximum");
+
352 }
+
353 
+
354 template <typename T>
+
355 void doMarchingCubesHoppe(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
356 {
+
357  auto distanceIgnore = options.check("distanceIgnore", yarp::os::Value(-1.0f)).asFloat32();
+
358  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
359  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
360  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
361  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
362  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
363  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
364 
+
365  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
366  tree->setInputCloud(in);
+
367 
+
368  pcl::MarchingCubesHoppe<T> hoppe;
+
369  hoppe.setDistanceIgnore(distanceIgnore);
+
370  hoppe.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
371  hoppe.setInputCloud(in);
+
372  hoppe.setIsoLevel(isoLevel);
+
373  hoppe.setPercentageExtendGrid(percentageExtendGrid);
+
374  hoppe.setSearchMethod(tree);
+
375  hoppe.reconstruct(*out);
+
376 
+
377  checkOutput(out, "MarchingCubesHoppe");
+
378 }
+
379 
+
380 template <typename T>
+
381 void doMarchingCubesRBF(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
382 {
+
383  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
384  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
385  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
386  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
387  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
388  auto offSurfaceDisplacement = options.check("offSurfaceDisplacement", yarp::os::Value(0.1f)).asFloat32();
+
389  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
390 
+
391  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
392  tree->setInputCloud(in);
+
393 
+
394  pcl::MarchingCubesRBF<T> rbf;
+
395  rbf.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
396  rbf.setInputCloud(in);
+
397  rbf.setIsoLevel(isoLevel);
+
398  rbf.setOffSurfaceDisplacement(offSurfaceDisplacement);
+
399  rbf.setPercentageExtendGrid(percentageExtendGrid);
+
400  rbf.setSearchMethod(tree);
+
401  rbf.reconstruct(*out);
+
402 
+
403  checkOutput(out, "MarchingCubesRBF");
+
404 }
+
405 
+
406 template <typename T>
+
407 void doMedianFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
408 {
+
409  auto maxAllowedMovement = options.check("maxAllowedMovement", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
410  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
411 
+
412  pcl::MedianFilter<T> median;
+
413  median.setInputCloud(in);
+
414  median.setMaxAllowedMovement(maxAllowedMovement);
+
415  median.setWindowSize(windowSize);
+
416  median.filter(*out);
+
417 
+
418  checkOutput<T>(out, "MedianFilter");
+
419 }
+
420 
+
421 void doMeshQuadricDecimationVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
422 {
+
423  auto targetReductionFactor = options.check("targetReductionFactor", yarp::os::Value(0.5f)).asFloat32();
+
424 
+
425  pcl::MeshQuadricDecimationVTK quadric;
+
426  quadric.setInputMesh(in);
+
427  quadric.setTargetReductionFactor(targetReductionFactor);
+
428  quadric.process(*out);
+
429 
+
430  checkOutput(out, "MeshQuadricDecimationVTK");
+
431 }
+
432 
+
433 void doMeshSmoothingLaplacianVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
434 {
+
435  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
436  auto convergence = options.check("convergence", yarp::os::Value(0.0f)).asFloat32();
+
437  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
438  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
439  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
440  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
441  auto relaxationFactor = options.check("relaxationFactor", yarp::os::Value(0.01f)).asFloat32();
+
442 
+
443  pcl::MeshSmoothingLaplacianVTK laplacian;
+
444  laplacian.setBoundarySmoothing(boundarySmoothing);
+
445  laplacian.setConvergence(convergence);
+
446  laplacian.setEdgeAngle(edgeAngle);
+
447  laplacian.setFeatureAngle(featureAngle);
+
448  laplacian.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
449  laplacian.setInputMesh(in);
+
450  laplacian.setNumIter(numIter);
+
451  laplacian.setRelaxationFactor(relaxationFactor);
+
452  laplacian.process(*out);
+
453 
+
454  checkOutput(out, "MeshSmoothingLaplacianVTK");
+
455 }
+
456 
+
457 void doMeshSmoothingWindowedSincVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
458 {
+
459  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
460  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
461  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
462  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
463  auto normalizeCoordinates = options.check("normalizeCoordinates", yarp::os::Value(false)).asBool();
+
464  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
465  auto passBand = options.check("passBand", yarp::os::Value(0.1f)).asFloat32();
+
466 
+
467  pcl::MeshSmoothingWindowedSincVTK windowed;
+
468  windowed.setBoundarySmoothing(boundarySmoothing);
+
469  windowed.setEdgeAngle(edgeAngle);
+
470  windowed.setFeatureAngle(featureAngle);
+
471  windowed.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
472  windowed.setInputMesh(in);
+
473  windowed.setNormalizeCoordinates(normalizeCoordinates);
+
474  windowed.setNumIter(numIter);
+
475  windowed.setPassBand(passBand);
+
476  windowed.process(*out);
+
477 
+
478  checkOutput(out, "MeshSmoothingWindowedSincVTK");
+
479 }
+
480 
+
481 void doMeshSubdivisionVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
482 {
+
483  auto filterTypeStr = options.check("filterType", yarp::os::Value("linear")).asString();
+
484 
+
485  pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType filterType;
+
486 
+
487  if (filterTypeStr == "butterfly")
+
488  {
+
489  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::BUTTERFLY;
+
490  }
+
491  else if (filterTypeStr == "linear")
+
492  {
+
493  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LINEAR;
+
494  }
+
495  else if (filterTypeStr == "loop")
+
496  {
+
497  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LOOP;
+
498  }
+
499  else
+
500  {
+
501  throw std::invalid_argument("unknown filter type: " + filterTypeStr);
+
502  }
+
503 
+
504  pcl::MeshSubdivisionVTK subdivision;
+
505  subdivision.setFilterType(filterType);
+
506  subdivision.setInputMesh(in);
+
507  subdivision.process(*out);
+
508 
+
509  checkOutput(out, "MeshSubdivisionVTK");
+
510 }
+
511 
+
512 template <typename T1, typename T2 = T1>
+
513 void doMovingLeastSquares(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
514 {
+
515  auto cacheMlsResults = options.check("cacheMlsResults", yarp::os::Value(true)).asBool();
+
516  auto computeNormals = options.check("computeNormals", yarp::os::Value(false)).asBool();
+
517  auto dilationIterations = options.check("dilationIterations", yarp::os::Value(0)).asInt32();
+
518  auto dilationVoxelSize = options.check("dilationVoxelSize", yarp::os::Value(1.0f)).asFloat32();
+
519  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(1)).asInt32();
+
520  auto pointDensity = options.check("pointDensity", yarp::os::Value(0)).asInt32();
+
521  auto polynomialOrder = options.check("polynomialOrder", yarp::os::Value(2)).asInt32();
+
522  auto projectionMethodStr = options.check("projectionMethod", yarp::os::Value("simple")).asString();
+
523  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
524  auto sqrGaussParam = options.check("sqrGaussParam", yarp::os::Value(0.0)).asFloat64();
+
525  auto upsamplingMethodStr = options.check("upsamplingMethod", yarp::os::Value("none")).asString();
+
526  auto upsamplingRadius = options.check("upsamplingRadius", yarp::os::Value(0.0)).asFloat64();
+
527  auto upsamplingStepSize = options.check("upsamplingStepSize", yarp::os::Value(0.0)).asFloat64();
+
528 
+
529  pcl::MLSResult::ProjectionMethod projectionMethod;
+
530 
+
531  if (projectionMethodStr == "none")
+
532  {
+
533  projectionMethod = pcl::MLSResult::ProjectionMethod::NONE;
+
534  }
+
535  else if (projectionMethodStr == "orthogonal")
+
536  {
+
537  projectionMethod = pcl::MLSResult::ProjectionMethod::ORTHOGONAL;
+
538  }
+
539  else if (projectionMethodStr == "simple")
+
540  {
+
541  projectionMethod = pcl::MLSResult::ProjectionMethod::SIMPLE;
+
542  }
+
543  else
+
544  {
+
545  throw std::invalid_argument("unknown projection method: " + projectionMethodStr);
+
546  }
+
547 
+
548  typename pcl::MovingLeastSquares<T1, T2>::UpsamplingMethod upsamplingMethod;
+
549 
+
550  if (upsamplingMethodStr == "distinctCloud")
+
551  {
+
552  upsamplingMethod = decltype(upsamplingMethod)::DISTINCT_CLOUD;
+
553  }
+
554  else if (upsamplingMethodStr == "none")
+
555  {
+
556  upsamplingMethod = decltype(upsamplingMethod)::NONE;
+
557  }
+
558  else if (upsamplingMethodStr == "randomUniformDensity")
+
559  {
+
560  upsamplingMethod = decltype(upsamplingMethod)::RANDOM_UNIFORM_DENSITY;
+
561  }
+
562  else if (upsamplingMethodStr == "sampleLocalPlane")
+
563  {
+
564  upsamplingMethod = decltype(upsamplingMethod)::SAMPLE_LOCAL_PLANE;
+
565  }
+
566  else if (upsamplingMethodStr == "voxelGridDilation")
+
567  {
+
568  upsamplingMethod = decltype(upsamplingMethod)::VOXEL_GRID_DILATION;
+
569  }
+
570  else
+
571  {
+
572  throw std::invalid_argument("unknown upsampling method: " + upsamplingMethodStr);
+
573  }
+
574 
+
575  auto tree = pcl::make_shared<pcl::search::KdTree<T1>>();
+
576  tree->setInputCloud(in);
+
577 
+
578  pcl::MovingLeastSquares<T1, T2> mls;
+
579  mls.setCacheMLSResults(cacheMlsResults);
+
580  mls.setComputeNormals(computeNormals);
+
581  mls.setDilationIterations(dilationIterations);
+
582  mls.setDilationVoxelSize(dilationVoxelSize);
+
583  mls.setInputCloud(in);
+
584  mls.setNumberOfThreads(numberOfThreads);
+
585  mls.setPointDensity(pointDensity);
+
586  mls.setPolynomialOrder(polynomialOrder);
+
587  mls.setProjectionMethod(projectionMethod);
+
588  mls.setSearchMethod(tree);
+
589  mls.setSearchRadius(searchRadius);
+
590  mls.setSqrGaussParam(sqrGaussParam);
+
591  mls.setUpsamplingMethod(upsamplingMethod);
+
592  mls.setUpsamplingRadius(upsamplingRadius);
+
593  mls.setUpsamplingStepSize(upsamplingStepSize);
+
594  mls.process(*out);
+
595 
+
596  checkOutput<T2>(out, "MovingLeastSquares");
+
597 }
+
598 
+
599 template <typename T1, typename T2>
+
600 void doNormalEstimation(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
601 {
+
602  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
603  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
604 
+
605  auto tree = pcl::make_shared<pcl::search::KdTree<T1>>();
+
606  tree->setInputCloud(in);
+
607 
+
608  pcl::NormalEstimation<T1, T2> estimator;
+
609  estimator.setInputCloud(in);
+
610  estimator.setKSearch(kSearch);
+
611  estimator.setRadiusSearch(radiusSearch);
+
612  estimator.setSearchMethod(tree);
+
613  estimator.compute(*out);
+
614 
+
615  checkOutput<T2>(out, "NormalEstimation");
+
616 }
+
617 
+
618 template <typename T1, typename T2>
+
619 void doNormalEstimationOMP(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
620 {
+
621  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
622  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
623  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
624 
+
625  auto tree = pcl::make_shared<pcl::search::KdTree<T1>>();
+
626  tree->setInputCloud(in);
+
627 
+
628  pcl::NormalEstimationOMP<T1, T2> estimator;
+
629  estimator.setInputCloud(in);
+
630  estimator.setKSearch(kSearch);
+
631  estimator.setNumberOfThreads(numberOfThreads);
+
632  estimator.setRadiusSearch(radiusSearch);
+
633  estimator.setSearchMethod(tree);
+
634  estimator.compute(*out);
+
635 
+
636  checkOutput<T2>(out, "NormalEstimationOMP");
+
637 }
+
638 
+
639 template <typename T>
+
640 void doOrganizedFastMesh(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
641 {
+
642  if (!in->isOrganized())
+
643  {
+
644  // the implementation lacks a proper check
+
645  throw std::invalid_argument("input cloud must be organized (height > 1) for OrganizedFastMesh");
+
646  }
+
647 
+
648  auto angleTolerance = options.check("angleTolerance", yarp::os::Value(12.5 * M_PI / 180)).asFloat32();
+
649  auto depthDependent = options.check("depthDependent", yarp::os::Value(false)).asBool();
+
650  auto distanceTolerance = options.check("distanceTolerance", yarp::os::Value(-1.0f)).asFloat32();
+
651  auto maxEdgeLengthA = options.check("maxEdgeLengthA", yarp::os::Value(0.0f)).asFloat32();
+
652  auto maxEdgeLengthB = options.check("maxEdgeLengthB", yarp::os::Value(0.0f)).asFloat32();
+
653  auto maxEdgeLengthC = options.check("maxEdgeLengthC", yarp::os::Value(0.0f)).asFloat32();
+
654  auto storeShadowedFaces = options.check("storeShadowedFaces", yarp::os::Value(false)).asBool();
+
655  auto trianglePixelSize = options.check("trianglePixelSize", yarp::os::Value(1)).asInt32();
+
656  auto trianglePixelSizeColumns = options.check("trianglePixelSizeColumns", yarp::os::Value(trianglePixelSize)).asInt32();
+
657  auto trianglePixelSizeRows = options.check("trianglePixelSizeRows", yarp::os::Value(trianglePixelSize)).asInt32();
+
658  auto triangulationTypeStr = options.check("triangulationType", yarp::os::Value("quadMesh")).asString();
+
659  auto useDepthAsDistance = options.check("useDepthAsDistance", yarp::os::Value(false)).asBool();
+
660 
+
661  typename pcl::OrganizedFastMesh<T>::TriangulationType triangulationType;
+
662 
+
663  if (triangulationTypeStr == "quadMesh")
+
664  {
+
665  triangulationType = decltype(triangulationType)::QUAD_MESH;
+
666  }
+
667  else if (triangulationTypeStr == "triangleAdaptiveCut")
+
668  {
+
669  triangulationType = decltype(triangulationType)::TRIANGLE_ADAPTIVE_CUT;
+
670  }
+
671  else if (triangulationTypeStr == "triangleLeftCut")
+
672  {
+
673  triangulationType = decltype(triangulationType)::TRIANGLE_LEFT_CUT;
+
674  }
+
675  else if (triangulationTypeStr == "triangleRightCut")
+
676  {
+
677  triangulationType = decltype(triangulationType)::TRIANGLE_RIGHT_CUT;
+
678  }
+
679  else
+
680  {
+
681  throw std::invalid_argument("unknown triangulation type: " + triangulationTypeStr);
+
682  }
+
683 
+
684  pcl::OrganizedFastMesh<T> organized;
+
685  organized.setAngleTolerance(angleTolerance);
+
686  organized.setDistanceTolerance(distanceTolerance, depthDependent);
+
687  organized.setInputCloud(in);
+
688  organized.setMaxEdgeLength(maxEdgeLengthA, maxEdgeLengthB, maxEdgeLengthC);
+
689  organized.setTrianglePixelSize(trianglePixelSize);
+
690  organized.setTrianglePixelSizeColumns(trianglePixelSizeColumns);
+
691  organized.setTrianglePixelSizeRows(trianglePixelSizeRows);
+
692  organized.setTriangulationType(triangulationType);
+
693  organized.storeShadowedFaces(storeShadowedFaces);
+
694  organized.useDepthAsDistance(useDepthAsDistance);
+
695  organized.reconstruct(*out);
+
696 
+
697  checkOutput(out, "OrganizedFastMesh");
+
698 }
+
699 
+
700 template <typename T>
+
701 void doPassThrough(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
702 {
+
703  auto filterFieldName = options.check("filterFieldName", yarp::os::Value("")).asString();
+
704  auto filterLimitMax = options.check("filterLimitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
705  auto filterLimitMin = options.check("filterLimitMin", yarp::os::Value(std::numeric_limits<float>::min())).asFloat32();
+
706  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
707  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
708 
+
709  pcl::PassThrough<T> pass;
+
710  pass.setFilterFieldName(filterFieldName);
+
711  pass.setFilterLimits(filterLimitMin, filterLimitMax);
+
712  pass.setInputCloud(in);
+
713  pass.setKeepOrganized(keepOrganized);
+
714  pass.setNegative(negative);
+
715  pass.filter(*out);
+
716 
+
717  checkOutput<T>(out, "PassThrough");
+
718 }
+
719 
+
720 template <typename T>
+
721 void doPoisson(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
722 {
+
723  auto confidence = options.check("confidence", yarp::os::Value(false)).asBool();
+
724  auto degree = options.check("degree", yarp::os::Value(2)).asInt32();
+
725  auto depth = options.check("depth", yarp::os::Value(8)).asInt32();
+
726  auto isoDivide = options.check("isoDivide", yarp::os::Value(8)).asInt32();
+
727  auto manifold = options.check("manifold", yarp::os::Value(true)).asBool();
+
728  auto minDepth = options.check("minDepth", yarp::os::Value(5)).asInt32();
+
729  auto outputPolygons = options.check("outputPolygons", yarp::os::Value(false)).asBool();
+
730  auto pointWeight = options.check("pointWeight", yarp::os::Value(4.0f)).asFloat32();
+
731  auto samplesPerNode = options.check("samplesPerNode", yarp::os::Value(1.0f)).asFloat32();
+
732  auto scale = options.check("scale", yarp::os::Value(1.1f)).asFloat32();
+
733  auto solverDivide = options.check("solverDivide", yarp::os::Value(8)).asInt32();
+
734 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
735  auto threads = options.check("threads", yarp::os::Value(1)).asInt32();
+
736 #endif
+
737 
+
738  auto tree = pcl::make_shared<pcl::search::KdTree<T>>();
+
739  tree->setInputCloud(in);
+
740 
+
741  pcl::Poisson<T> poisson;
+
742  poisson.setConfidence(confidence);
+
743  poisson.setDegree(degree);
+
744  poisson.setDepth(depth);
+
745  poisson.setInputCloud(in);
+
746  poisson.setIsoDivide(isoDivide);
+
747  poisson.setManifold(manifold);
+
748  poisson.setMinDepth(minDepth);
+
749  poisson.setOutputPolygons(outputPolygons);
+
750  poisson.setPointWeight(pointWeight);
+
751  poisson.setSamplesPerNode(samplesPerNode);
+
752  poisson.setScale(scale);
+
753  poisson.setSearchMethod(tree);
+
754  poisson.setSolverDivide(solverDivide);
+
755 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
756  poisson.setThreads(threads);
+
757 #endif
+
758  poisson.reconstruct(*out);
+
759 
+
760  checkOutput(out, "Poisson");
+
761 }
+
762 
+
763 template <typename T>
+
764 void doRadiusOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
765 {
+
766  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
767  auto minNeighborsInRadius = options.check("minNeighborsInRadius", yarp::os::Value(1)).asInt32();
+
768  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
769  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
770 
+
771  pcl::RadiusOutlierRemoval<T> remover;
+
772  remover.setInputCloud(in);
+
773  remover.setKeepOrganized(keepOrganized);
+
774  remover.setMinNeighborsInRadius(minNeighborsInRadius);
+
775  remover.setNegative(negative);
+
776  remover.setRadiusSearch(radiusSearch);
+
777  remover.filter(*out);
+
778 
+
779  checkOutput<T>(out, "RadiusOutlierRemoval");
+
780 }
+
781 
+
782 template <typename T>
+
783 void doRandomSample(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
784 {
+
785  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
786  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
787  auto sample = options.check("sample", yarp::os::Value(std::numeric_limits<int>::max())).asInt64(); // note the shortening conversion
+
788  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
789 
+
790  pcl::RandomSample<T> random;
+
791  random.setInputCloud(in);
+
792  random.setKeepOrganized(keepOrganized);
+
793  random.setNegative(negative);
+
794  random.setSample(sample);
+
795  random.setSeed(seed);
+
796  random.filter(*out);
+
797 
+
798  checkOutput<T>(out, "RandomSample");
+
799 }
+
800 
+
801 template <typename T>
+
802 void doSamplingSurfaceNormal(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
803 {
+
804  auto ratio = options.check("ratio", yarp::os::Value(0.0f)).asFloat32();
+
805  auto sample = options.check("sample", yarp::os::Value(10)).asInt32();
+
806  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
807 
+
808  pcl::SamplingSurfaceNormal<T> sampler;
+
809  sampler.setInputCloud(in);
+
810  sampler.setRatio(ratio);
+
811  sampler.setSample(sample);
+
812  sampler.setSeed(seed);
+
813  sampler.filter(*out);
+
814 
+
815  checkOutput<T>(out, "SamplingSurfaceNormal");
+
816 }
+
817 
+
818 template <typename T>
+
819 void doShadowPoints(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
820 {
+
821  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
822  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
823  auto threshold = options.check("threshold", yarp::os::Value(0.1f)).asFloat32();
+
824 
+
825 #if PCL_VERSION_COMPARE(>=, 1, 11, 0)
+
826  auto temp = std::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
827 #else
+
828  auto temp = boost::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
829 #endif
+
830 
+
831  pcl::ShadowPoints<T, T> shadow;
+
832  shadow.setInputCloud(in);
+
833  shadow.setKeepOrganized(keepOrganized);
+
834  shadow.setNegative(negative);
+
835  shadow.setNormals(temp); // assumes normals are contained in the input cloud
+
836  shadow.setThreshold(threshold);
+
837  shadow.filter(*out);
+
838 
+
839  checkOutput<T>(out, "ShadowPoints");
+
840 }
+
841 
+
842 void doSimplificationRemoveUnusedVertices(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
843 {
+
844  pcl::surface::SimplificationRemoveUnusedVertices cleaner;
+
845  cleaner.simplify(*in, *out);
+
846  checkOutput(out, "doSimplificationRemoveUnusedVertices");
+
847 }
+
848 
+
849 template <typename T>
+
850 void doStatisticalOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
851 {
+
852  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
853  auto meanK = options.check("meanK", yarp::os::Value(1)).asInt32();
+
854  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
855  auto stddevMulThresh = options.check("stddevMulThresh", yarp::os::Value(0.0)).asFloat64();
+
856 
+
857  pcl::StatisticalOutlierRemoval<T> remover;
+
858  remover.setInputCloud(in);
+
859  remover.setKeepOrganized(keepOrganized);
+
860  remover.setMeanK(meanK);
+
861  remover.setNegative(negative);
+
862  remover.setStddevMulThresh(stddevMulThresh);
+
863  remover.filter(*out);
+
864 
+
865  checkOutput<T>(out, "StatisticalOutlierRemoval");
+
866 }
+
867 
+
868 template <typename T>
+
869 void doUniformSampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
870 {
+
871 #if PCL_VERSION_COMPARE(>=, 1, 15, 0)
+
872  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
873  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
874 #endif
+
875  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
876 
+
877  pcl::UniformSampling<T> uniform;
+
878  uniform.setInputCloud(in);
+
879 #if PCL_VERSION_COMPARE(>=, 1, 15, 0)
+
880  uniform.setKeepOrganized(keepOrganized);
+
881  uniform.setNegative(negative);
+
882 #endif
+
883  uniform.setRadiusSearch(radiusSearch);
+
884  uniform.filter(*out);
+
885 
+
886  checkOutput<T>(out, "UniformSampling");
+
887 }
+
888 
+
889 template <typename T>
+
890 void doVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
891 {
+
892  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
893  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
894  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
895  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
896  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
897  auto limitMax = options.check("limitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat64();
+
898  auto limitMin = options.check("limitMin", yarp::os::Value(-std::numeric_limits<float>::max())).asFloat64();
+
899  auto limitsNegative = options.check("limitsNegative", yarp::os::Value(false)).asBool();
+
900  auto minimumPointsNumberPerVoxel = options.check("minimumPointsNumberPerVoxel", yarp::os::Value(0)).asInt32();
+
901 
+
902  pcl::VoxelGrid<T> grid;
+
903  grid.setDownsampleAllData(downsampleAllData);
+
904  grid.setFilterLimits(limitMin, limitMax);
+
905  grid.setFilterLimitsNegative(limitsNegative);
+
906  grid.setInputCloud(in);
+
907  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
908  grid.setMinimumPointsNumberPerVoxel(minimumPointsNumberPerVoxel);
+
909  grid.setSaveLeafLayout(false);
+
910  grid.filter(*out);
+
911 
+
912  checkOutput<T>(out, "VoxelGrid");
+
913 }
+
914 
+
915 } // namespace
+
916 
+
917 #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..b0aef4b5 --- /dev/null +++ b/YarpCloudUtils-pcl-inst_8hpp_source.html @@ -0,0 +1,181 @@ + + + + + + + +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 
+ +
19 {
+
20 
+
21 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXY)
+
22 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZ)
+
23 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudNormal)
+
24 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZRGBA)
+
25 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZI)
+
26 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudInterestPointXYZ)
+
27 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormal)
+
28 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormalRGBA)
+
29 
+
30 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXY)
+
31 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZ)
+
32 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudNormal)
+
33 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZRGBA)
+
34 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZI)
+
35 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
36 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormal)
+
37 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
38 
+
39 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXY)
+
40 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZ)
+
41 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudNormal)
+
42 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZRGBA)
+
43 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZI)
+
44 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudInterestPointXYZ)
+
45 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormal)
+
46 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
47 
+
48 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXY)
+
49 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZ)
+
50 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudNormal)
+
51 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZRGBA)
+
52 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZI)
+
53 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
54 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormal)
+
55 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
56 
+
57 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXY)
+
58 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZ)
+
59 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudNormal)
+
60 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZRGBA)
+
61 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZI)
+
62 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudInterestPointXYZ)
+
63 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormal)
+
64 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormalRGBA)
+
65 
+
66 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXY)
+
67 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZ)
+
68 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudNormal)
+
69 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZRGBA)
+
70 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZI)
+
71 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
72 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormal)
+
73 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
74 
+
75 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXY)
+
76 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZ)
+
77 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudNormal)
+
78 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZRGBA)
+
79 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZI)
+
80 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudInterestPointXYZ)
+
81 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormal)
+
82 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
83 
+
84 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXY)
+
85 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZ)
+
86 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudNormal)
+
87 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZRGBA)
+
88 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZI)
+
89 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
90 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormal)
+
91 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
92 
+
93 } // namespace roboticslab::YarpCloudUtils
+
94 
+
95 #endif // __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
Collection of cloud-related utilities for YARP.
Definition: YarpCloudUtils-pcl-inst.hpp:19
+
+ + + + diff --git a/YarpCloudUtils-pcl-traits_8hpp_source.html b/YarpCloudUtils-pcl-traits_8hpp_source.html new file mode 100644 index 00000000..44c8ba4a --- /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..e55c45d8 --- /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  auto out = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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 = pcl::make_shared<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; // a ctor is called here (Ptr is turned into ConstPtr)
+
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 = pcl::make_shared<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..386c25cb --- /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 
+
23 namespace roboticslab
+
24 {
+
25 
+
30 namespace YarpCloudUtils
+
31 {
+
32 
+
44 template <typename T>
+
45 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, const yarp::sig::VectorOf<int> & indices, bool isBinary = true);
+
46 
+
57 template <typename T>
+
58 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, bool isBinary = true)
+
59 {
+
60  return savePLY(filename, cloud, {}, isBinary);
+
61 }
+
62 
+
76 template <typename T>
+
77 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud, yarp::sig::VectorOf<int> & indices);
+
78 
+
91 template <typename T>
+
92 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud)
+
93 {
+
94  yarp::sig::VectorOf<int> indices;
+
95  return loadPLY(filename, cloud, indices);
+
96 }
+
97 
+
112 template <typename T1, typename T2 = T1>
+
113 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
114  yarp::sig::PointCloud<T2> & meshPoints,
+
115  yarp::sig::VectorOf<int> & meshIndices,
+
116  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
117 
+
133 template <typename T1, typename T2 = T1>
+
134 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
135  yarp::sig::PointCloud<T2> & meshPoints,
+
136  yarp::sig::VectorOf<int> & meshIndices,
+
137  const yarp::os::Searchable & config,
+
138  const std::string & collection = "meshPipeline");
+
139 
+
154 template <typename T1, typename T2 = T1>
+
155 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
156  yarp::sig::PointCloud<T2> & out,
+
157  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
158 
+
174 template <typename T1, typename T2 = T1>
+
175 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
176  yarp::sig::PointCloud<T2> & out,
+
177  const yarp::os::Searchable & config,
+
178  const std::string & collection = "cloudPipeline");
+
179 
+
180 } // namespace YarpCloudUtils
+
181 
+
182 } // namespace roboticslab
+
183 
+
184 #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:284
+
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:361
+
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..2069f93c --- /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..040a299a --- /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
 CArucoDetector
 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/citelist.html b/citelist.html new file mode 100644 index 00000000..7d89bc63 --- /dev/null +++ b/citelist.html @@ -0,0 +1,88 @@ + + + + + + + +vision: Bibliography + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Bibliography
+
+
+
+
[1]
+

Bartek Lukawski, Alberto Rodríguez-Sanz, Elisabeth Menendez, Juan G. Victores, and Carlos Balaguer. A user-friendly point cloud processing pipeline for interfacing PCL with YARP. In XLV Jornadas de Automática. Universidade da Coruña, 2024.

+

+
+
+
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 00000000..1674276c --- /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
+
ArucoDetector (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_1ArucoDetector-members.html b/classroboticslab_1_1ArucoDetector-members.html new file mode 100644 index 00000000..bf9cb037 --- /dev/null +++ b/classroboticslab_1_1ArucoDetector-members.html @@ -0,0 +1,93 @@ + + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::ArucoDetector Member List
+
+
+ +

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

+ + + + + + +
detect(const yarp::sig::Image &inYarpImg, yarp::os::Bottle &detectedObjects) override (defined in roboticslab::ArucoDetector)roboticslab::ArucoDetectorvirtual
detectorParams (defined in roboticslab::ArucoDetector)roboticslab::ArucoDetectorprivate
dictionary (defined in roboticslab::ArucoDetector)roboticslab::ArucoDetectorprivate
open(yarp::os::Searchable &config) override (defined in roboticslab::ArucoDetector)roboticslab::ArucoDetector
~IDetector() (defined in roboticslab::IDetector)roboticslab::IDetectorinlinevirtual
+ + + + diff --git a/classroboticslab_1_1ArucoDetector.html b/classroboticslab_1_1ArucoDetector.html new file mode 100644 index 00000000..523af872 --- /dev/null +++ b/classroboticslab_1_1ArucoDetector.html @@ -0,0 +1,121 @@ + + + + + + + +vision: roboticslab::ArucoDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Private Attributes | +List of all members
+
+
roboticslab::ArucoDetector Class Reference
+
+
+
+Inheritance diagram for roboticslab::ArucoDetector:
+
+
+ + +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_1ArucoDetector.png b/classroboticslab_1_1ArucoDetector.png new file mode 100644 index 00000000..f74fb346 Binary files /dev/null and b/classroboticslab_1_1ArucoDetector.png differ diff --git a/classroboticslab_1_1ColorRegionDetector-members.html b/classroboticslab_1_1ColorRegionDetector-members.html new file mode 100644 index 00000000..0ae1469d --- /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..65150c2b --- /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..f06bfe34 --- /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..c7f8e53f --- /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..30e0cad8 --- /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..2bd79588 --- /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..94165c33 --- /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..77df2860 --- /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..28a78dc9 --- /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..79f490ce --- /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::ArucoDetector +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..2f17e199 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..a3d3eaab --- /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..00e03dd0 --- /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..b2fd2c45 --- /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..95f6048f --- /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..c64c83a4 --- /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..d63d2164 --- /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..5cfcaa0d --- /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..6545980b --- /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..f95e1a77 --- /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..ca78431d --- /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..d0db09f0 --- /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..ebff21d9 --- /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..6307a467 --- /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..da823811 --- /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..3047d6cd --- /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..0227370a --- /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..4d20d62d --- /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..c4772571 --- /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..7472a37d --- /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..6ef7c4c5 --- /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..04368619 --- /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..fbe1cba7 --- /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..78d61da3 --- /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..618ffcf8 --- /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..eba916a7 --- /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..3dd49dc5 --- /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..504127b5 --- /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..53507a16 --- /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..7a7e2400 --- /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..16548ea0 --- /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..c05d0fdf --- /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..372bd99b --- /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..02e5d5d8 --- /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..46b7b004 --- /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..f6299cea --- /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..06e0ff7b --- /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..370801bc --- /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..67ad04dd --- /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..28afa3ac --- /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..c4c6b3e8 --- /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..d278c39d --- /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..5c01bceb --- /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_04081e7e510b48eb357ba24147682022.html b/dir_04081e7e510b48eb357ba24147682022.html new file mode 100644 index 00000000..f1b7a594 --- /dev/null +++ b/dir_04081e7e510b48eb357ba24147682022.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/ArucoDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ArucoDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_1c5cf7249402b1a93ff9072b579fee69.html b/dir_1c5cf7249402b1a93ff9072b579fee69.html new file mode 100644 index 00000000..762c18d4 --- /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..821a4cdf --- /dev/null +++ b/dir_1ff92a5f4657b0e0092e7258fd44661b.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteRGBDSensor Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteRGBDSensor Directory Reference
+
+
+
+ + + + diff --git a/dir_29602fbee921084ef6cffd0531461981.html b/dir_29602fbee921084ef6cffd0531461981.html new file mode 100644 index 00000000..2a8d81e9 --- /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..916b78d0 --- /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..ef88f0d7 --- /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..39afe694 --- /dev/null +++ b/dir_3aa48f99037b5f8e0da6c31310570c50.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleMeshFromLiveRGBD Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleMeshFromLiveRGBD Directory Reference
+
+
+
+ + + + diff --git a/dir_59425e443f801f1f2fd8bbe4959a3ccf.html b/dir_59425e443f801f1f2fd8bbe4959a3ccf.html new file mode 100644 index 00000000..3be60ec2 --- /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..5ab11823 --- /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..855b96ce --- /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..50fc6db4 --- /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..ad6970e5 --- /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..c04c9743 --- /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..858a23ae --- /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..310975a7 --- /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..5d88b942 --- /dev/null +++ b/dir_8976e5d03119516083eaca3ddca61311.html @@ -0,0 +1,89 @@ + + + + + + + +vision: examples/cpp Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cpp Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_8b083644526c0d3260457ecc1b443fd8.html b/dir_8b083644526c0d3260457ecc1b443fd8.html new file mode 100644 index 00000000..fa020680 --- /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..9b92b192 --- /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..7dc7f515 --- /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..38779fde --- /dev/null +++ b/dir_a52c22a8b79e169194d9c4bbc7c46367.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc/build Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
build Directory Reference
+
+
+
+ + + + diff --git a/dir_b0a12fdb878b54d3f24ae59762626400.html b/dir_b0a12fdb878b54d3f24ae59762626400.html new file mode 100644 index 00000000..8f89da22 --- /dev/null +++ b/dir_b0a12fdb878b54d3f24ae59762626400.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/contexts/HaarDetector/tests Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tests Directory Reference
+
+
+
+ + + + diff --git a/dir_b0ff78f4d605b05d5b2840ead2213851.html b/dir_b0ff78f4d605b05d5b2840ead2213851.html new file mode 100644 index 00000000..3d810da9 --- /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..8d1d4d75 --- /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..781524c6 --- /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..36ecb593 --- /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..d9f0e511 --- /dev/null +++ b/dir_bc63cb6e92e7d25aca16d15616a1c5b6.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteGrabber Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteGrabber Directory Reference
+
+
+
+ + + + diff --git a/dir_c090f958661c3c1bfddf0e6cbf47395f.html b/dir_c090f958661c3c1bfddf0e6cbf47395f.html new file mode 100644 index 00000000..5d3051e2 --- /dev/null +++ b/dir_c090f958661c3c1bfddf0e6cbf47395f.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/DnnDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
DnnDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_cb3f44457265f46e37891798e70b954f.html b/dir_cb3f44457265f46e37891798e70b954f.html new file mode 100644 index 00000000..aaa26c80 --- /dev/null +++ b/dir_cb3f44457265f46e37891798e70b954f.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/contexts Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
contexts Directory Reference
+
+
+
+ + + + diff --git a/dir_d050070cc3e4bbd91d897ff8856046e0.html b/dir_d050070cc3e4bbd91d897ff8856046e0.html new file mode 100644 index 00000000..09665b41 --- /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..2f3ea4ba --- /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..6324531e --- /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..aa803d80 --- /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..da125b29 --- /dev/null +++ b/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
doc Directory Reference
+
+
+
+ + + + diff --git a/dir_e69a2b21dbb846252aa93b26ab324d16.html b/dir_e69a2b21dbb846252aa93b26ab324d16.html new file mode 100644 index 00000000..3cceea22 --- /dev/null +++ b/dir_e69a2b21dbb846252aa93b26ab324d16.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/contexts/HaarDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HaarDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_f9121e54faddc5154c75c794a8ed2433.html b/dir_f9121e54faddc5154c75c794a8ed2433.html new file mode 100644 index 00000000..3b029690 --- /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..831ac0d0 --- /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
  ArucoDetector
 ArucoDetector.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..30ff61a8 --- /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..a4dac636 --- /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..d01b0261 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,103 @@ + + + + + + + +vision: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/group__ArucoDetector.html b/group__ArucoDetector.html new file mode 100644 index 00000000..2513c9b0 --- /dev/null +++ b/group__ArucoDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: ArucoDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
+
+
+ +

Contains roboticslab::ArucoDetector. +

+
+ + + + diff --git a/group__ColorRegionDetector.html b/group__ColorRegionDetector.html new file mode 100644 index 00000000..558ab2a3 --- /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..10922d7a --- /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..6eaaa721 --- /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..0bbcb3fc --- /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..6e157f2f --- /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..8b84afd7 --- /dev/null +++ b/group__YarpCloudUtils.html @@ -0,0 +1,523 @@ + + + + + + + +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.
+
+[1]
+

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..8355d6af --- /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..8c3c130a --- /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

 ArucoDetector
 Contains roboticslab::ArucoDetector.
 
 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..64e126a4 --- /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..e79da702 --- /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..0a4f709b --- /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..fbf745b4 --- /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..60d58be7 --- /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..b7c8f4ce --- /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..777d3fbc --- /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..a988df62 --- /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..b986e729 --- /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..38128052 --- /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..3c9f5b33 --- /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..cf65ecb2 --- /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..d31202bb --- /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..fd84bede --- /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..7c0094a0 --- /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..3edb23b0 --- /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..91414a47 --- /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..885c9b05 --- /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..d6bc3472 --- /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..4a155bb5 --- /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..840a5cd0 --- /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::ArucoDetector
 Croboticslab::ColorRegionDetector
 Croboticslab::DnnDetector
 Croboticslab::HaarDetector
 Croboticslab::QrDetector
 Croboticslab::IDetectorInterface for object detection
 Croboticslab::ArucoDetector
 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..3fec6b70 --- /dev/null +++ b/index.html @@ -0,0 +1,162 @@ + + + + + + + +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. +
+

+Citation

+

If you found this project useful, please consider citing the following works:

+ +

Bartek Łukawski, Alberto Rodríguez-Sanz, Elisabeth Menendez, Juan G. Victores, and Carlos Balaguer. A user-friendly point cloud processing pipeline for interfacing PCL with YARP. In XLV Jornadas de Automática. Universidade da Coruña, 2024.

+
@inproceedings{lukawski2024jjaa,
+
author = {{\L}ukawski, Bartek and Rodríguez-Sanz, Alberto and Menendez, Elisabeth and Victores, Juan G. and Balaguer, Carlos},
+
title = {A user-friendly point cloud processing pipeline for interfacing {PCL} with {YARP}},
+
booktitle = {XLV Jornadas de Automática},
+
year = {2024},
+
publisher = {Universidade da Coruña},
+
doi = {10.17979/ja-cea.2024.45.10925},
+
}
+

+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..d82ba5ed --- /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..195c1e42 --- /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..12dd696e --- /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_contexts_HaarDetector_README.html b/md_share_contexts_HaarDetector_README.html new file mode 100644 index 00000000..e00e8cb5 --- /dev/null +++ b/md_share_contexts_HaarDetector_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_contexts_HaarDetector_tests_README.html b/md_share_contexts_HaarDetector_tests_README.html new file mode 100644 index 00000000..d9992840 --- /dev/null +++ b/md_share_contexts_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..279f6d0d --- /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
     ArucoDetectorContains roboticslab::ArucoDetector
     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..44e6c32b --- /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..7cb15c67 --- /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..da9816df --- /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  ArucoDetector
     
    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..a9a7d994 --- /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..67f199a1 --- /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..d9a9c02c --- /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
     CArucoDetector
     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..06e9bafd --- /dev/null +++ b/pages.html @@ -0,0 +1,91 @@ + + + + + + + +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..97991c66 --- /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..476a9e1e --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucodetector_8',['ArucoDetector',['../group__ArucoDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1ArucoDetector.html',1,'roboticslab::ArucoDetector']]] +]; 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..ea037f25 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['travis_93',['Travis',['../classroboticslab_1_1Travis.html',1,'roboticslab::Travis'],['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis::Travis()']]], + ['traviscrop_94',['travisCrop',['../namespaceroboticslab.html#a6e367b4909da6b8bb35b413f821a4f03',1,'roboticslab']]], + ['travislib_95',['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..aef0eee0 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_96',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_97',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_98',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_99',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_100',['vision Tests',['../group__vision__tests.html',1,'']]], + ['vision_2fshare_2fhaardetector_2ftests_2f_101',['vision/share/HaarDetector/tests/',['../md_share_contexts_HaarDetector_tests_README.html',1,'']]], + ['voxeloccupancydetection_102',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['voxeloccupancydetection_103',['voxelOccupancyDetection',['../group__voxelOccupancyDetection.html',1,'']]], + ['vtktimercallback_104',['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..214a357a --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['yarpcloudutils_105',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_106',['YarpCloudUtils: point cloud utilities for YARP',['../yarpcloudutils.html',1,'']]], + ['yarpcloudutilstest_107',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_108',['YarpCropCallback',['../classroboticslab_1_1YarpCropCallback.html',1,'roboticslab::YarpCropCallback'],['../group__YarpCropCallback.html',1,'(Global Namespace)']]], + ['yarpplugins_109',['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..a5c6a96a --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['bibliography_9',['Bibliography',['../citelist.html',1,'']]], + ['binarize_10',['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_11',['blobize',['../classroboticslab_1_1Travis.html#ad99d7b358faa94c91eb1839c014a43b8',1,'roboticslab::Travis']]], + ['buffer_12',['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..15e51e20 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['calcangle_13',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_14',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_15',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_16',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_17',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_18',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_19',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_20',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_21',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_22',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_23',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_24',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_25',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['colorregiondetector_26',['ColorRegionDetector',['../group__ColorRegionDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab::ColorRegionDetector']]], + ['colorregiondetectortest_27',['ColorRegionDetectorTest',['../classroboticslab_1_1test_1_1ColorRegionDetectorTest.html',1,'roboticslab::test']]], + ['comparecontourareas_28',['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..489765ed --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_29',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_30',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_31',['DnnDetector',['../group__DnnDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1DnnDetector.html',1,'roboticslab::DnnDetector']]], + ['dnndetectortest_32',['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..c95a7fce --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_33',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_34',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_35',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_36',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_37',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_38',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_39',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_40',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_41',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_42',['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..e5033916 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_43',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_44',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_45',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_46',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_47',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_48',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_49',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_50',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_51',['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..55d7deb0 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['haar_20models_52',['HAAR Models',['../md_share_contexts_HaarDetector_README.html',1,'']]], + ['haardetector_53',['HaarDetector',['../group__HaarDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1HaarDetector.html',1,'roboticslab::HaarDetector']]], + ['haardetectortest_54',['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..4223432c --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['idetector_55',['IDetector',['../classroboticslab_1_1IDetector.html',1,'roboticslab']]], + ['installation_20from_20source_20code_56',['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..8a835dc5 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_57',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_58',['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..3b34df7e --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['license_5fkinectfusion_59',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.html',1,'']]], + ['linecallbackport_60',['LineCallbackPort',['../classroboticslab_1_1LineCallbackPort.html',1,'roboticslab']]], + ['loadply_61',['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..5c8b8aa2 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_62',['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_63',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_64',['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..9c53242c --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['plydata_65',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_66',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_67',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_68',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_69',['PointAtObjectServer',['../group__pointAtObjectServer.html',1,'(Global Namespace)'],['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab::PointAtObjectServer']]], + ['processcloud_70',['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_71',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_72',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_73',['PropertyInfo',['../structtinyply_1_1PropertyInfo.html',1,'tinyply']]], + ['pushcontour_74',['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..c250cff0 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_75',['QrDetector',['../group__QrDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1QrDetector.html',1,'roboticslab::QrDetector']]], + ['qrdetectortest_76',['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..2aec6d38 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['release_77',['release',['../classroboticslab_1_1Travis.html#a0c3429f799e4ca8f239c5086d4ba468b',1,'roboticslab::Travis']]], + ['renderupdater_78',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_79',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbddetection_80',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_81',['rgbDetection',['../group__rgbDetection.html',1,'']]], + ['rgbdetection_82',['RgbDetection',['../classroboticslab_1_1RgbDetection.html',1,'roboticslab']]], + ['roboticslab_83',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_84',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_85',['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..a6bdab1d --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['saveply_86',['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_87',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['scenereconstruction_88',['sceneReconstruction',['../group__sceneReconstruction.html',1,'']]], + ['segmentorthread_89',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['setbincvmat_90',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_91',['setCvMat',['../classroboticslab_1_1Travis.html#a1420915be8c78131f2f9f0e57adefb6c',1,'roboticslab::Travis']]], + ['sharedarea_92',['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..732da3a4 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucodetector_110',['ArucoDetector',['../classroboticslab_1_1ArucoDetector.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..10e91223 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_111',['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..697eab93 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['colorregiondetector_112',['ColorRegionDetector',['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab']]], + ['colorregiondetectortest_113',['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..1d6938e0 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_114',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_115',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_116',['DnnDetector',['../classroboticslab_1_1DnnDetector.html',1,'roboticslab']]], + ['dnndetectortest_117',['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..4f698331 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['haardetector_118',['HaarDetector',['../classroboticslab_1_1HaarDetector.html',1,'roboticslab']]], + ['haardetectortest_119',['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..aa3e9760 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['idetector_120',['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..2fd324fd --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_121',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_122',['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..4c3e65ad --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linecallbackport_123',['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..41c14c00 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['plydata_124',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_125',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_126',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_127',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_128',['PointAtObjectServer',['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab']]], + ['propertycomparer_129',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_130',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_131',['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..661d36f0 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_132',['QrDetector',['../classroboticslab_1_1QrDetector.html',1,'roboticslab']]], + ['qrdetectortest_133',['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..d66b3276 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['renderupdater_134',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_135',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_136',['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..db5e7e19 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['scenereconstruction_137',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['segmentorthread_138',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['sharedarea_139',['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..c3071876 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travis_140',['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..8b9640d2 --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['voxeloccupancydetection_141',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['vtktimercallback_142',['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..d25d8191 --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['yarpcloudutilstest_143',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_144',['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..fa06a63f --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['binarize_148',['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_149',['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..1090add3 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['calcangle_150',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_151',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_152',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_153',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_154',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_155',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_156',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_157',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_158',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_159',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_160',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_161',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_162',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['comparecontourareas_163',['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..aad2e5fa --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_164',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_165',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_166',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_167',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_168',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_169',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_170',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_171',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_172',['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..4907f9b4 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loadply_173',['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..d92dbf03 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_174',['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_175',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_176',['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..3e601ca2 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['processcloud_177',['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_178',['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..1eb56101 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['release_179',['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..e7275d2a --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['saveply_180',['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_181',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_182',['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..82c75125 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['travis_183',['Travis',['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis']]], + ['traviscrop_184',['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..d07c0cef --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arucodetector_193',['ArucoDetector',['../group__ArucoDetector.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..961154f2 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['colorregiondetector_194',['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..d086faaf --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dnndetector_195',['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..079ee5b0 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_196',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_197',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_198',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_199',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_200',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_201',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_202',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_203',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_204',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_205',['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..48623c51 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haardetector_206',['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..f2ddb508 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pointatobjectserver_207',['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..efa7aa4e --- /dev/null +++ b/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qrdetector_208',['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..aed8d3e9 --- /dev/null +++ b/search/groups_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rgbddetection_209',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbdetection_210',['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..aacdc908 --- /dev/null +++ b/search/groups_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scenereconstruction_211',['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..88fc80ab --- /dev/null +++ b/search/groups_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travislib_212',['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..70de74f2 --- /dev/null +++ b/search/groups_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_213',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_214',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_215',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_216',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_217',['vision Tests',['../group__vision__tests.html',1,'']]], + ['voxeloccupancydetection_218',['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..c1230ef9 --- /dev/null +++ b/search/groups_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['yarpcloudutils_219',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcropcallback_220',['YarpCropCallback',['../group__YarpCropCallback.html',1,'']]], + ['yarpplugins_221',['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..64e67ae8 --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['roboticslab_145',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_146',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_147',['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..3c5ccd28 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bibliography_222',['Bibliography',['../citelist.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..89070c04 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haar_20models_223',['HAAR Models',['../md_share_contexts_HaarDetector_README.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..a3e2d807 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['installation_20from_20source_20code_224',['Installation from Source Code',['../md_doc_vision_install.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..03439fa2 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['license_5fkinectfusion_225',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.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..6219c53f --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vision_2fshare_2fhaardetector_2ftests_2f_226',['vision/share/HaarDetector/tests/',['../md_share_contexts_HaarDetector_tests_README.html',1,'']]] +]; diff --git a/search/pages_5.html b/search/pages_5.html new file mode 100644 index 00000000..27e2b6c7 --- /dev/null +++ b/search/pages_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 00000000..8d9e7bf4 --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_227',['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..e5d624ea --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_5fcontours_185',['_contours',['../classroboticslab_1_1Travis.html#a64908578ec06a4af311f21ab5d252397',1,'roboticslab::Travis']]], + ['_5fimg_186',['_img',['../classroboticslab_1_1Travis.html#a20296082b0281167e495264f9e115cff',1,'roboticslab::Travis']]], + ['_5fimgbin_187',['_imgBin',['../classroboticslab_1_1Travis.html#ab34976826d71ab56497e22b95752944b',1,'roboticslab::Travis']]], + ['_5fimgbin3_188',['_imgBin3',['../classroboticslab_1_1Travis.html#a11365d2899b798c53ffe85faa21f5ff9',1,'roboticslab::Travis']]], + ['_5fimghsv_189',['_imgHsv',['../classroboticslab_1_1Travis.html#aa3a3204f40db1bc6de872b3a810bba5e',1,'roboticslab::Travis']]], + ['_5fminrotatedrects_190',['_minRotatedRects',['../classroboticslab_1_1Travis.html#aebd2482e1a3c5024b1ebaf49e373f8fe',1,'roboticslab::Travis']]], + ['_5foverwrite_191',['_overwrite',['../classroboticslab_1_1Travis.html#a60297152bb03c35d65452ec363f36a79',1,'roboticslab::Travis']]], + ['_5fquiet_192',['_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..a38115ca --- /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..85013abe --- /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..b91f3556 --- /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..54c721dc --- /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..8db4fd75 --- /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..20e0b656 --- /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..1352eb5a --- /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..74e6e450 --- /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..ced57ded --- /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..0fee5751 --- /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..02ed946e --- /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..be77e782 --- /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..43867106 --- /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..92b0167a --- /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..096c326b --- /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..5c19053f --- /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..775c8708 --- /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..a2935c47 --- /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..3d018ed8 --- /dev/null +++ b/yarpcloudutils.html @@ -0,0 +1,254 @@ + + + + + + + +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:284
    +

    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.

    +

    +See also

    +

    Bartek Łukawski, Alberto Rodríguez-Sanz, Elisabeth Menendez, Juan G. Victores, and Carlos Balaguer. A user-friendly point cloud processing pipeline for interfacing PCL with YARP. In XLV Jornadas de Automática. Universidade da Coruña, 2024.

    +

    ```bibtex @inproceedings{lukawski2024jjaa, author = {{\L}ukawski, Bartek and Rodríguez-Sanz, Alberto and Menendez, Elisabeth and Victores, Juan G. and Balaguer, Carlos}, title = {A user-friendly point cloud processing pipeline for interfacing {PCL} with {YARP}}, booktitle = {XLV Jornadas de Automática}, year = {2024}, publisher = {Universidade da Coruña}, doi = {10.17979/ja-cea.2024.45.10925} }

    +
    +
    + + + +