From 96e1a27d3b12b7796843640a2aa9e828640cb941 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 14:48:40 +0000 Subject: [PATCH] Deploy to GitHub pages --- ColorRegionDetector_8hpp_source.html | 117 ++ DnnDetector_8hpp_source.html | 126 ++ HaarDetector_8hpp_source.html | 122 ++ IDetector_8hpp_source.html | 108 + KinectFusionImpl_8hpp_source.html | 245 +++ KinectFusion_8hpp_source.html | 148 ++ LineCallbackPort_8hpp_source.html | 110 + PointAtObjectServer_8hpp_source.html | 141 ++ QrDetector_8hpp_source.html | 116 ++ RgbDetection_8hpp_source.html | 140 ++ RgbdDetection_8hpp_source.html | 141 ++ SceneReconstruction_8hpp_source.html | 173 ++ SegmentorThread_8hpp_source.html | 243 +++ SharedArea_8hpp_source.html | 113 ++ TravisLib_8hpp_source.html | 244 +++ VoxelOccupancyDetection_8hpp_source.html | 132 ++ YarpCloudUtils-pcl-impl_8hpp_source.html | 985 +++++++++ YarpCloudUtils-pcl-inst_8hpp_source.html | 186 ++ YarpCloudUtils-pcl-traits_8hpp_source.html | 288 +++ YarpCloudUtils-pcl_8hpp_source.html | 314 +++ YarpCloudUtils_8hpp_source.html | 157 ++ YarpCropCallback_8hpp_source.html | 120 ++ annotated.html | 122 ++ bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes classes.html | 126 ++ ...icslab_1_1ColorRegionDetector-members.html | 95 + classroboticslab_1_1ColorRegionDetector.html | 127 ++ classroboticslab_1_1ColorRegionDetector.png | Bin 0 -> 1127 bytes ...sroboticslab_1_1DataProcessor-members.html | 97 + classroboticslab_1_1DataProcessor.html | 141 ++ classroboticslab_1_1DataProcessor.png | Bin 0 -> 664 bytes classroboticslab_1_1DnnDetector-members.html | 100 + classroboticslab_1_1DnnDetector.html | 146 ++ classroboticslab_1_1DnnDetector.png | Bin 0 -> 989 bytes classroboticslab_1_1HaarDetector-members.html | 92 + classroboticslab_1_1HaarDetector.html | 118 ++ classroboticslab_1_1HaarDetector.png | Bin 0 -> 1002 bytes classroboticslab_1_1IDetector-members.html | 90 + classroboticslab_1_1IDetector.html | 115 ++ classroboticslab_1_1IDetector.png | Bin 0 -> 1468 bytes classroboticslab_1_1KinectFusion-members.html | 95 + classroboticslab_1_1KinectFusion.html | 122 ++ classroboticslab_1_1KinectFusion.png | Bin 0 -> 739 bytes ...boticslab_1_1KinectFusionImpl-members.html | 98 + classroboticslab_1_1KinectFusionImpl.html | 135 ++ classroboticslab_1_1KinectFusionImpl.png | Bin 0 -> 735 bytes ...boticslab_1_1LineCallbackPort-members.html | 91 + classroboticslab_1_1LineCallbackPort.html | 119 ++ classroboticslab_1_1LineCallbackPort.png | Bin 0 -> 809 bytes ...icslab_1_1PointAtObjectServer-members.html | 95 + classroboticslab_1_1PointAtObjectServer.html | 131 ++ classroboticslab_1_1QrDetector-members.html | 92 + classroboticslab_1_1QrDetector.html | 118 ++ classroboticslab_1_1QrDetector.png | Bin 0 -> 993 bytes ...sroboticslab_1_1RenderUpdater-members.html | 98 + classroboticslab_1_1RenderUpdater.html | 132 ++ classroboticslab_1_1RgbDetection-members.html | 103 + classroboticslab_1_1RgbDetection.html | 153 ++ classroboticslab_1_1RgbDetection.png | Bin 0 -> 651 bytes ...sroboticslab_1_1RgbdDetection-members.html | 104 + classroboticslab_1_1RgbdDetection.html | 156 ++ classroboticslab_1_1RgbdDetection.png | Bin 0 -> 662 bytes ...icslab_1_1SceneReconstruction-members.html | 107 + classroboticslab_1_1SceneReconstruction.html | 165 ++ classroboticslab_1_1SceneReconstruction.png | Bin 0 -> 1055 bytes ...oboticslab_1_1SegmentorThread-members.html | 134 ++ classroboticslab_1_1SegmentorThread.html | 246 +++ classroboticslab_1_1SegmentorThread.png | Bin 0 -> 733 bytes classroboticslab_1_1SharedArea-members.html | 94 + classroboticslab_1_1SharedArea.html | 118 ++ classroboticslab_1_1Travis-members.html | 117 ++ classroboticslab_1_1Travis.html | 933 +++++++++ ...ab_1_1VoxelOccupancyDetection-members.html | 101 + ...oboticslab_1_1VoxelOccupancyDetection.html | 154 ++ ...roboticslab_1_1VoxelOccupancyDetection.png | Bin 0 -> 748 bytes ...boticslab_1_1YarpCropCallback-members.html | 94 + classroboticslab_1_1YarpCropCallback.html | 128 ++ classroboticslab_1_1YarpCropCallback.png | Bin 0 -> 1005 bytes ...st_1_1ColorRegionDetectorTest-members.html | 92 + ...ab_1_1test_1_1ColorRegionDetectorTest.html | 120 ++ ...lab_1_1test_1_1ColorRegionDetectorTest.png | Bin 0 -> 745 bytes ...ab_1_1test_1_1DnnDetectorTest-members.html | 92 + ...oboticslab_1_1test_1_1DnnDetectorTest.html | 120 ++ ...roboticslab_1_1test_1_1DnnDetectorTest.png | Bin 0 -> 680 bytes ...b_1_1test_1_1HaarDetectorTest-members.html | 92 + ...boticslab_1_1test_1_1HaarDetectorTest.html | 120 ++ ...oboticslab_1_1test_1_1HaarDetectorTest.png | Bin 0 -> 686 bytes ...lab_1_1test_1_1QrDetectorTest-members.html | 93 + ...roboticslab_1_1test_1_1QrDetectorTest.html | 127 ++ ...sroboticslab_1_1test_1_1QrDetectorTest.png | Bin 0 -> 679 bytes ...1_1test_1_1YarpCloudUtilsTest-members.html | 93 + ...ticslab_1_1test_1_1YarpCloudUtilsTest.html | 123 ++ ...oticslab_1_1test_1_1YarpCloudUtilsTest.png | Bin 0 -> 697 bytes ...boticslab_1_1vtkTimerCallback-members.html | 116 ++ classroboticslab_1_1vtkTimerCallback.html | 202 ++ classroboticslab_1_1vtkTimerCallback.png | Bin 0 -> 635 bytes classtinyply_1_1Buffer-members.html | 97 + classtinyply_1_1Buffer.html | 129 ++ closed.png | Bin 0 -> 132 bytes dir_1c5cf7249402b1a93ff9072b579fee69.html | 85 + dir_1ff92a5f4657b0e0092e7258fd44661b.html | 85 + dir_25269fc8732d364dd41c44c714d7ddc1.html | 85 + dir_29602fbee921084ef6cffd0531461981.html | 85 + dir_36f149fce582426447a0cb551c4087bb.html | 85 + dir_37280351e954bf28682c2c71ec87d62a.html | 85 + dir_3aa48f99037b5f8e0da6c31310570c50.html | 85 + dir_59425e443f801f1f2fd8bbe4959a3ccf.html | 85 + dir_5afd026af1f372a4b145a3dbe3624f5a.html | 85 + dir_72fdac4d33e476e0afd432edb4817e98.html | 85 + dir_7a6893798396b68f1d0ebf712f0b27b0.html | 85 + dir_7b0a5d1507c7f681cbfa1deb5990c6ea.html | 89 + dir_7e6e8cacd0636c15fe54bd966abceb8d.html | 85 + dir_7eb5d5e75dfe12e8d8a9703b617259d2.html | 85 + dir_894834b116a11e19fdb9146dfce0a9f1.html | 85 + dir_8976e5d03119516083eaca3ddca61311.html | 89 + dir_898a6363a525f83b4d88293f2173a703.html | 85 + dir_8b083644526c0d3260457ecc1b443fd8.html | 85 + dir_8c428f345b527d2071b666c6f8374398.html | 85 + dir_9f0e28cc28a74cf6288000329b06919b.html | 85 + dir_a52c22a8b79e169194d9c4bbc7c46367.html | 85 + dir_b0ff78f4d605b05d5b2840ead2213851.html | 85 + dir_b16d62b3f0cba971556d8a32587a03a2.html | 85 + dir_b8fff1cb25eb7b3a72bf68b3dd52da68.html | 85 + dir_bc0718b08fb2015b8e59c47b2805f60c.html | 89 + dir_bc63cb6e92e7d25aca16d15616a1c5b6.html | 85 + dir_bf8defd636c562035da95240c25206f2.html | 85 + dir_c090f958661c3c1bfddf0e6cbf47395f.html | 85 + dir_d050070cc3e4bbd91d897ff8856046e0.html | 85 + dir_d28a4824dc47e487b107a5db32ef43c4.html | 91 + dir_d9780a6694556e97c297acd54af60a29.html | 85 + dir_def802f784c22e82dce80d4d6e19f0ee.html | 85 + dir_e68e8157741866f444e17edd764ebbae.html | 85 + dir_f9121e54faddc5154c75c794a8ed2433.html | 85 + dir_f98f57c538677273d6e3d52c55355c28.html | 89 + doc.png | Bin 0 -> 746 bytes doxygen.css | 1793 +++++++++++++++++ doxygen.svg | 26 + dynsections.js | 121 ++ files.html | 126 ++ folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes functions.html | 154 ++ functions_func.html | 130 ++ functions_vars.html | 103 + group__ColorRegionDetector.html | 84 + group__DnnDetector.html | 84 + group__HaarDetector.html | 84 + group__QrDetector.html | 84 + group__TravisLib.html | 91 + group__YarpCloudUtils.html | 521 +++++ group__YarpCropCallback.html | 84 + group__YarpPlugins.html | 110 + group__exampleColorRegion.html | 84 + group__exampleDnnDetector.html | 84 + group__exampleHaarDetector.html | 84 + group__exampleMeshFromCloud.html | 84 + group__exampleMeshFromLiveRGBD.html | 84 + group__exampleProcessCloud.html | 84 + group__exampleQrDetector.html | 84 + group__exampleRemoteGrabber.html | 84 + group__exampleRemoteRGBDSensor.html | 84 + group__exampleSceneReconstructionClient.html | 84 + group__pointAtObjectServer.html | 84 + group__rgbDetection.html | 132 ++ group__rgbdDetection.html | 132 ++ group__sceneReconstruction.html | 175 ++ group__vision__applications.html | 84 + group__vision__examples.html | 121 ++ group__vision__libraries.html | 102 + group__vision__programs.html | 106 + group__vision__tests.html | 106 + group__voxelOccupancyDetection.html | 156 ++ hierarchy.html | 133 ++ index.html | 147 ++ jquery.js | 35 + ...pCloudUtils_2LogComponent_8hpp_source.html | 93 + md_doc_vision_install.html | 103 + ...neReconstruction_LICENSE_KinectFusion.html | 90 + md_share_HaarDetector_conf_README.html | 160 ++ md_share_HaarDetector_tests_README.html | 89 + menu.js | 51 + menudata.js | 43 + modules.html | 113 ++ namespacemembers.html | 139 ++ namespacemembers_func.html | 139 ++ namespaceroboticslab.html | 767 +++++++ namespaceroboticslab_1_1YarpCloudUtils.html | 174 ++ namespaceroboticslab_1_1test.html | 192 ++ namespaces.html | 127 ++ nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 90 + ...onstruction_2LogComponent_8hpp_source.html | 93 + search/all_0.html | 37 + search/all_0.js | 11 + search/all_1.html | 37 + search/all_1.js | 6 + search/all_10.html | 37 + search/all_10.js | 12 + search/all_11.html | 37 + search/all_11.js | 8 + search/all_2.html | 37 + search/all_2.js | 19 + search/all_3.html | 37 + search/all_3.js | 7 + search/all_4.html | 37 + search/all_4.js | 13 + search/all_5.html | 37 + search/all_5.js | 12 + search/all_6.html | 37 + search/all_6.js | 6 + search/all_7.html | 37 + search/all_7.js | 5 + search/all_8.html | 37 + search/all_8.js | 5 + search/all_9.html | 37 + search/all_9.js | 6 + search/all_a.html | 37 + search/all_a.js | 6 + search/all_b.html | 37 + search/all_b.js | 13 + search/all_c.html | 37 + search/all_c.js | 5 + search/all_d.html | 37 + search/all_d.js | 12 + search/all_e.html | 37 + search/all_e.js | 10 + search/all_f.html | 37 + search/all_f.js | 6 + search/classes_0.html | 37 + search/classes_0.js | 4 + search/classes_1.html | 37 + search/classes_1.js | 5 + search/classes_2.html | 37 + search/classes_2.js | 7 + search/classes_3.html | 37 + search/classes_3.js | 5 + search/classes_4.html | 37 + search/classes_4.js | 4 + search/classes_5.html | 37 + search/classes_5.js | 5 + search/classes_6.html | 37 + search/classes_6.js | 4 + search/classes_7.html | 37 + search/classes_7.js | 11 + search/classes_8.html | 37 + search/classes_8.js | 5 + search/classes_9.html | 37 + search/classes_9.js | 6 + search/classes_a.html | 37 + search/classes_a.js | 6 + search/classes_b.html | 37 + search/classes_b.js | 4 + search/classes_c.html | 37 + search/classes_c.js | 5 + search/classes_d.html | 37 + search/classes_d.js | 5 + search/close.svg | 31 + search/functions_0.html | 37 + search/functions_0.js | 5 + search/functions_1.html | 37 + search/functions_1.js | 17 + search/functions_2.html | 37 + search/functions_2.js | 12 + search/functions_3.html | 37 + search/functions_3.js | 4 + search/functions_4.html | 37 + search/functions_4.js | 6 + search/functions_5.html | 37 + search/functions_5.js | 5 + search/functions_6.html | 37 + search/functions_6.js | 4 + search/functions_7.html | 37 + search/functions_7.js | 6 + search/functions_8.html | 37 + search/functions_8.js | 5 + search/groups_0.html | 37 + search/groups_0.js | 4 + search/groups_1.html | 37 + search/groups_1.js | 4 + search/groups_2.html | 37 + search/groups_2.js | 13 + search/groups_3.html | 37 + search/groups_3.js | 4 + search/groups_4.html | 37 + search/groups_4.js | 4 + search/groups_5.html | 37 + search/groups_5.js | 4 + search/groups_6.html | 37 + search/groups_6.js | 5 + search/groups_7.html | 37 + search/groups_7.js | 4 + search/groups_8.html | 37 + search/groups_8.js | 4 + search/groups_9.html | 37 + search/groups_9.js | 9 + search/groups_a.html | 37 + search/groups_a.js | 6 + search/mag_sel.svg | 74 + search/namespaces_0.html | 37 + search/namespaces_0.js | 6 + search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/pages_1.html | 37 + search/pages_1.js | 4 + search/pages_2.html | 37 + search/pages_2.js | 4 + search/pages_3.html | 37 + search/pages_3.js | 4 + search/pages_4.html | 37 + search/pages_4.js | 4 + search/search.css | 257 +++ search/search.js | 816 ++++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 33 + search/variables_0.html | 37 + search/variables_0.js | 11 + splitbar.png | Bin 0 -> 314 bytes ...b_1_1test_1_1PropertyComparer-members.html | 89 + ...boticslab_1_1test_1_1PropertyComparer.html | 98 + ...lab_1_1test_1_1PropertyHasher-members.html | 89 + ...roboticslab_1_1test_1_1PropertyHasher.html | 98 + ...ly_1_1Buffer_1_1delete__array-members.html | 89 + structtinyply_1_1Buffer_1_1delete__array.html | 98 + structtinyply_1_1PlyData-members.html | 92 + structtinyply_1_1PlyData.html | 107 + structtinyply_1_1PlyElement-members.html | 93 + structtinyply_1_1PlyElement.html | 114 ++ structtinyply_1_1PlyFile-members.html | 100 + structtinyply_1_1PlyFile.html | 129 ++ structtinyply_1_1PlyProperty-members.html | 96 + structtinyply_1_1PlyProperty.html | 123 ++ structtinyply_1_1PropertyInfo-members.html | 92 + structtinyply_1_1PropertyInfo.html | 108 + sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + tinyply_8h_source.html | 1063 ++++++++++ vtkTimerCallback_8hpp_source.html | 192 ++ yarpcloudutils.html | 250 +++ 350 files changed, 30023 insertions(+) create mode 100644 ColorRegionDetector_8hpp_source.html create mode 100644 DnnDetector_8hpp_source.html create mode 100644 HaarDetector_8hpp_source.html create mode 100644 IDetector_8hpp_source.html create mode 100644 KinectFusionImpl_8hpp_source.html create mode 100644 KinectFusion_8hpp_source.html create mode 100644 LineCallbackPort_8hpp_source.html create mode 100644 PointAtObjectServer_8hpp_source.html create mode 100644 QrDetector_8hpp_source.html create mode 100644 RgbDetection_8hpp_source.html create mode 100644 RgbdDetection_8hpp_source.html create mode 100644 SceneReconstruction_8hpp_source.html create mode 100644 SegmentorThread_8hpp_source.html create mode 100644 SharedArea_8hpp_source.html create mode 100644 TravisLib_8hpp_source.html create mode 100644 VoxelOccupancyDetection_8hpp_source.html create mode 100644 YarpCloudUtils-pcl-impl_8hpp_source.html create mode 100644 YarpCloudUtils-pcl-inst_8hpp_source.html create mode 100644 YarpCloudUtils-pcl-traits_8hpp_source.html create mode 100644 YarpCloudUtils-pcl_8hpp_source.html create mode 100644 YarpCloudUtils_8hpp_source.html create mode 100644 YarpCropCallback_8hpp_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 classes.html create mode 100644 classroboticslab_1_1ColorRegionDetector-members.html create mode 100644 classroboticslab_1_1ColorRegionDetector.html create mode 100644 classroboticslab_1_1ColorRegionDetector.png create mode 100644 classroboticslab_1_1DataProcessor-members.html create mode 100644 classroboticslab_1_1DataProcessor.html create mode 100644 classroboticslab_1_1DataProcessor.png create mode 100644 classroboticslab_1_1DnnDetector-members.html create mode 100644 classroboticslab_1_1DnnDetector.html create mode 100644 classroboticslab_1_1DnnDetector.png create mode 100644 classroboticslab_1_1HaarDetector-members.html create mode 100644 classroboticslab_1_1HaarDetector.html create mode 100644 classroboticslab_1_1HaarDetector.png create mode 100644 classroboticslab_1_1IDetector-members.html create mode 100644 classroboticslab_1_1IDetector.html create mode 100644 classroboticslab_1_1IDetector.png create mode 100644 classroboticslab_1_1KinectFusion-members.html create mode 100644 classroboticslab_1_1KinectFusion.html create mode 100644 classroboticslab_1_1KinectFusion.png create mode 100644 classroboticslab_1_1KinectFusionImpl-members.html create mode 100644 classroboticslab_1_1KinectFusionImpl.html create mode 100644 classroboticslab_1_1KinectFusionImpl.png create mode 100644 classroboticslab_1_1LineCallbackPort-members.html create mode 100644 classroboticslab_1_1LineCallbackPort.html create mode 100644 classroboticslab_1_1LineCallbackPort.png create mode 100644 classroboticslab_1_1PointAtObjectServer-members.html create mode 100644 classroboticslab_1_1PointAtObjectServer.html create mode 100644 classroboticslab_1_1QrDetector-members.html create mode 100644 classroboticslab_1_1QrDetector.html create mode 100644 classroboticslab_1_1QrDetector.png create mode 100644 classroboticslab_1_1RenderUpdater-members.html create mode 100644 classroboticslab_1_1RenderUpdater.html create mode 100644 classroboticslab_1_1RgbDetection-members.html create mode 100644 classroboticslab_1_1RgbDetection.html create mode 100644 classroboticslab_1_1RgbDetection.png create mode 100644 classroboticslab_1_1RgbdDetection-members.html create mode 100644 classroboticslab_1_1RgbdDetection.html create mode 100644 classroboticslab_1_1RgbdDetection.png create mode 100644 classroboticslab_1_1SceneReconstruction-members.html create mode 100644 classroboticslab_1_1SceneReconstruction.html create mode 100644 classroboticslab_1_1SceneReconstruction.png create mode 100644 classroboticslab_1_1SegmentorThread-members.html create mode 100644 classroboticslab_1_1SegmentorThread.html create mode 100644 classroboticslab_1_1SegmentorThread.png create mode 100644 classroboticslab_1_1SharedArea-members.html create mode 100644 classroboticslab_1_1SharedArea.html create mode 100644 classroboticslab_1_1Travis-members.html create mode 100644 classroboticslab_1_1Travis.html create mode 100644 classroboticslab_1_1VoxelOccupancyDetection-members.html create mode 100644 classroboticslab_1_1VoxelOccupancyDetection.html create mode 100644 classroboticslab_1_1VoxelOccupancyDetection.png create mode 100644 classroboticslab_1_1YarpCropCallback-members.html create mode 100644 classroboticslab_1_1YarpCropCallback.html create mode 100644 classroboticslab_1_1YarpCropCallback.png create mode 100644 classroboticslab_1_1test_1_1ColorRegionDetectorTest-members.html create mode 100644 classroboticslab_1_1test_1_1ColorRegionDetectorTest.html create mode 100644 classroboticslab_1_1test_1_1ColorRegionDetectorTest.png create mode 100644 classroboticslab_1_1test_1_1DnnDetectorTest-members.html create mode 100644 classroboticslab_1_1test_1_1DnnDetectorTest.html create mode 100644 classroboticslab_1_1test_1_1DnnDetectorTest.png create mode 100644 classroboticslab_1_1test_1_1HaarDetectorTest-members.html create mode 100644 classroboticslab_1_1test_1_1HaarDetectorTest.html create mode 100644 classroboticslab_1_1test_1_1HaarDetectorTest.png create mode 100644 classroboticslab_1_1test_1_1QrDetectorTest-members.html create mode 100644 classroboticslab_1_1test_1_1QrDetectorTest.html create mode 100644 classroboticslab_1_1test_1_1QrDetectorTest.png create mode 100644 classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html create mode 100644 classroboticslab_1_1test_1_1YarpCloudUtilsTest.html create mode 100644 classroboticslab_1_1test_1_1YarpCloudUtilsTest.png create mode 100644 classroboticslab_1_1vtkTimerCallback-members.html create mode 100644 classroboticslab_1_1vtkTimerCallback.html create mode 100644 classroboticslab_1_1vtkTimerCallback.png create mode 100644 classtinyply_1_1Buffer-members.html create mode 100644 classtinyply_1_1Buffer.html create mode 100644 closed.png create mode 100644 dir_1c5cf7249402b1a93ff9072b579fee69.html create mode 100644 dir_1ff92a5f4657b0e0092e7258fd44661b.html create mode 100644 dir_25269fc8732d364dd41c44c714d7ddc1.html create mode 100644 dir_29602fbee921084ef6cffd0531461981.html create mode 100644 dir_36f149fce582426447a0cb551c4087bb.html create mode 100644 dir_37280351e954bf28682c2c71ec87d62a.html create mode 100644 dir_3aa48f99037b5f8e0da6c31310570c50.html create mode 100644 dir_59425e443f801f1f2fd8bbe4959a3ccf.html create mode 100644 dir_5afd026af1f372a4b145a3dbe3624f5a.html create mode 100644 dir_72fdac4d33e476e0afd432edb4817e98.html create mode 100644 dir_7a6893798396b68f1d0ebf712f0b27b0.html create mode 100644 dir_7b0a5d1507c7f681cbfa1deb5990c6ea.html create mode 100644 dir_7e6e8cacd0636c15fe54bd966abceb8d.html create mode 100644 dir_7eb5d5e75dfe12e8d8a9703b617259d2.html create mode 100644 dir_894834b116a11e19fdb9146dfce0a9f1.html create mode 100644 dir_8976e5d03119516083eaca3ddca61311.html create mode 100644 dir_898a6363a525f83b4d88293f2173a703.html create mode 100644 dir_8b083644526c0d3260457ecc1b443fd8.html create mode 100644 dir_8c428f345b527d2071b666c6f8374398.html create mode 100644 dir_9f0e28cc28a74cf6288000329b06919b.html create mode 100644 dir_a52c22a8b79e169194d9c4bbc7c46367.html create mode 100644 dir_b0ff78f4d605b05d5b2840ead2213851.html create mode 100644 dir_b16d62b3f0cba971556d8a32587a03a2.html create mode 100644 dir_b8fff1cb25eb7b3a72bf68b3dd52da68.html create mode 100644 dir_bc0718b08fb2015b8e59c47b2805f60c.html create mode 100644 dir_bc63cb6e92e7d25aca16d15616a1c5b6.html create mode 100644 dir_bf8defd636c562035da95240c25206f2.html create mode 100644 dir_c090f958661c3c1bfddf0e6cbf47395f.html create mode 100644 dir_d050070cc3e4bbd91d897ff8856046e0.html create mode 100644 dir_d28a4824dc47e487b107a5db32ef43c4.html create mode 100644 dir_d9780a6694556e97c297acd54af60a29.html create mode 100644 dir_def802f784c22e82dce80d4d6e19f0ee.html create mode 100644 dir_e68e8157741866f444e17edd764ebbae.html create mode 100644 dir_f9121e54faddc5154c75c794a8ed2433.html create mode 100644 dir_f98f57c538677273d6e3d52c55355c28.html create mode 100644 doc.png create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 functions.html create mode 100644 functions_func.html create mode 100644 functions_vars.html create mode 100644 group__ColorRegionDetector.html create mode 100644 group__DnnDetector.html create mode 100644 group__HaarDetector.html create mode 100644 group__QrDetector.html create mode 100644 group__TravisLib.html create mode 100644 group__YarpCloudUtils.html create mode 100644 group__YarpCropCallback.html create mode 100644 group__YarpPlugins.html create mode 100644 group__exampleColorRegion.html create mode 100644 group__exampleDnnDetector.html create mode 100644 group__exampleHaarDetector.html create mode 100644 group__exampleMeshFromCloud.html create mode 100644 group__exampleMeshFromLiveRGBD.html create mode 100644 group__exampleProcessCloud.html create mode 100644 group__exampleQrDetector.html create mode 100644 group__exampleRemoteGrabber.html create mode 100644 group__exampleRemoteRGBDSensor.html create mode 100644 group__exampleSceneReconstructionClient.html create mode 100644 group__pointAtObjectServer.html create mode 100644 group__rgbDetection.html create mode 100644 group__rgbdDetection.html create mode 100644 group__sceneReconstruction.html create mode 100644 group__vision__applications.html create mode 100644 group__vision__examples.html create mode 100644 group__vision__libraries.html create mode 100644 group__vision__programs.html create mode 100644 group__vision__tests.html create mode 100644 group__voxelOccupancyDetection.html create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 jquery.js create mode 100644 libraries_2YarpCloudUtils_2LogComponent_8hpp_source.html create mode 100644 md_doc_vision_install.html create mode 100644 md_programs_sceneReconstruction_LICENSE_KinectFusion.html create mode 100644 md_share_HaarDetector_conf_README.html create mode 100644 md_share_HaarDetector_tests_README.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 modules.html create mode 100644 namespacemembers.html create mode 100644 namespacemembers_func.html create mode 100644 namespaceroboticslab.html create mode 100644 namespaceroboticslab_1_1YarpCloudUtils.html create mode 100644 namespaceroboticslab_1_1test.html create mode 100644 namespaces.html create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 programs_2sceneReconstruction_2LogComponent_8hpp_source.html create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_10.html create mode 100644 search/all_10.js create mode 100644 search/all_11.html create mode 100644 search/all_11.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/classes_4.html create mode 100644 search/classes_4.js create mode 100644 search/classes_5.html create mode 100644 search/classes_5.js create mode 100644 search/classes_6.html create mode 100644 search/classes_6.js create mode 100644 search/classes_7.html create mode 100644 search/classes_7.js create mode 100644 search/classes_8.html create mode 100644 search/classes_8.js create mode 100644 search/classes_9.html create mode 100644 search/classes_9.js create mode 100644 search/classes_a.html create mode 100644 search/classes_a.js create mode 100644 search/classes_b.html create mode 100644 search/classes_b.js create mode 100644 search/classes_c.html create mode 100644 search/classes_c.js create mode 100644 search/classes_d.html create mode 100644 search/classes_d.js create mode 100644 search/close.svg create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/functions_1.html create mode 100644 search/functions_1.js create mode 100644 search/functions_2.html create mode 100644 search/functions_2.js create mode 100644 search/functions_3.html create mode 100644 search/functions_3.js create mode 100644 search/functions_4.html create mode 100644 search/functions_4.js create mode 100644 search/functions_5.html create mode 100644 search/functions_5.js create mode 100644 search/functions_6.html create mode 100644 search/functions_6.js create mode 100644 search/functions_7.html create mode 100644 search/functions_7.js create mode 100644 search/functions_8.html create mode 100644 search/functions_8.js create mode 100644 search/groups_0.html create mode 100644 search/groups_0.js create mode 100644 search/groups_1.html create mode 100644 search/groups_1.js create mode 100644 search/groups_2.html create mode 100644 search/groups_2.js create mode 100644 search/groups_3.html create mode 100644 search/groups_3.js create mode 100644 search/groups_4.html create mode 100644 search/groups_4.js create mode 100644 search/groups_5.html create mode 100644 search/groups_5.js create mode 100644 search/groups_6.html create mode 100644 search/groups_6.js create mode 100644 search/groups_7.html create mode 100644 search/groups_7.js create mode 100644 search/groups_8.html create mode 100644 search/groups_8.js create mode 100644 search/groups_9.html create mode 100644 search/groups_9.js create mode 100644 search/groups_a.html create mode 100644 search/groups_a.js create mode 100644 search/mag_sel.svg create mode 100644 search/namespaces_0.html create mode 100644 search/namespaces_0.js create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/pages_1.html create mode 100644 search/pages_1.js create mode 100644 search/pages_2.html create mode 100644 search/pages_2.js create mode 100644 search/pages_3.html create mode 100644 search/pages_3.js create mode 100644 search/pages_4.html create mode 100644 search/pages_4.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 splitbar.png create mode 100644 structroboticslab_1_1test_1_1PropertyComparer-members.html create mode 100644 structroboticslab_1_1test_1_1PropertyComparer.html create mode 100644 structroboticslab_1_1test_1_1PropertyHasher-members.html create mode 100644 structroboticslab_1_1test_1_1PropertyHasher.html create mode 100644 structtinyply_1_1Buffer_1_1delete__array-members.html create mode 100644 structtinyply_1_1Buffer_1_1delete__array.html create mode 100644 structtinyply_1_1PlyData-members.html create mode 100644 structtinyply_1_1PlyData.html create mode 100644 structtinyply_1_1PlyElement-members.html create mode 100644 structtinyply_1_1PlyElement.html create mode 100644 structtinyply_1_1PlyFile-members.html create mode 100644 structtinyply_1_1PlyFile.html create mode 100644 structtinyply_1_1PlyProperty-members.html create mode 100644 structtinyply_1_1PlyProperty.html create mode 100644 structtinyply_1_1PropertyInfo-members.html create mode 100644 structtinyply_1_1PropertyInfo.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css create mode 100644 tinyply_8h_source.html create mode 100644 vtkTimerCallback_8hpp_source.html create mode 100644 yarpcloudutils.html diff --git a/ColorRegionDetector_8hpp_source.html b/ColorRegionDetector_8hpp_source.html new file mode 100644 index 00000000..4f16e43e --- /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..150fc23f --- /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..b47e86c2 --- /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..2b351219 --- /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..42b85ffd --- /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..f6be6c07 --- /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..0033ae78 --- /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..d3843632 --- /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..150c4381 --- /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..c54fd5c4 --- /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..dc3396bc --- /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..f023801d --- /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..0c3def90 --- /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..72aa98f6 --- /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..634111dc --- /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..0b4ffc5d --- /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..ac8cd7fa --- /dev/null +++ b/YarpCloudUtils-pcl-impl_8hpp_source.html @@ -0,0 +1,985 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl-impl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl-impl.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
5 
+
6 #define _USE_MATH_DEFINES
+
7 #include <cmath> // M_PI
+
8 #include <ctime> // std::time
+
9 
+
10 #include <limits> // std::numeric_limits
+
11 #include <memory> // std::const_pointer_cast
+
12 #include <stdexcept> // std::invalid_argument, std::runtime_error
+
13 #include <string>
+
14 
+
15 #include <pcl/pcl_config.h>
+
16 #include <pcl/point_cloud.h>
+
17 #include <pcl/point_types.h>
+
18 #include <pcl/PolygonMesh.h>
+
19 #include <pcl/common/transforms.h>
+
20 #include <pcl/features/normal_3d.h>
+
21 #include <pcl/features/normal_3d_omp.h>
+
22 #include <pcl/filters/approximate_voxel_grid.h>
+
23 #include <pcl/filters/bilateral.h>
+
24 #include <pcl/filters/crop_box.h>
+
25 #include <pcl/filters/fast_bilateral.h>
+
26 #include <pcl/filters/fast_bilateral_omp.h>
+
27 #include <pcl/filters/grid_minimum.h>
+
28 #include <pcl/filters/local_maximum.h>
+
29 #include <pcl/filters/median_filter.h>
+
30 #include <pcl/filters/passthrough.h>
+
31 #include <pcl/filters/radius_outlier_removal.h>
+
32 #include <pcl/filters/random_sample.h>
+
33 #include <pcl/filters/sampling_surface_normal.h>
+
34 #include <pcl/filters/shadowpoints.h>
+
35 #include <pcl/filters/statistical_outlier_removal.h>
+
36 #include <pcl/filters/uniform_sampling.h>
+
37 #include <pcl/filters/voxel_grid.h>
+
38 #include <pcl/search/kdtree.h>
+
39 #include <pcl/surface/bilateral_upsampling.h>
+
40 #include <pcl/surface/concave_hull.h>
+
41 #include <pcl/surface/convex_hull.h>
+
42 #include <pcl/surface/gp3.h>
+
43 #include <pcl/surface/grid_projection.h>
+
44 #include <pcl/surface/marching_cubes_hoppe.h>
+
45 #include <pcl/surface/marching_cubes_rbf.h>
+
46 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
47 #include <pcl/surface/mls.h>
+
48 #endif
+
49 #include <pcl/surface/organized_fast_mesh.h>
+
50 #include <pcl/surface/poisson.h>
+
51 #include <pcl/surface/simplification_remove_unused_vertices.h>
+
52 #include <pcl/surface/vtk_smoothing/vtk_mesh_quadric_decimation.h>
+
53 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_laplacian.h>
+
54 #include <pcl/surface/vtk_smoothing/vtk_mesh_smoothing_windowed_sinc.h>
+
55 #include <pcl/surface/vtk_smoothing/vtk_mesh_subdivision.h>
+
56 
+
57 namespace
+
58 {
+
59 
+
60 auto getTransformation(const yarp::os::Searchable & options)
+
61 {
+
62  auto transformation = Eigen::Transform<double, 3, Eigen::Affine>::Identity();
+
63 
+
64  if (const auto & translation = options.find("translation"); !translation.isNull())
+
65  {
+
66  if (!translation.isList() || translation.asList()->size() != 3)
+
67  {
+
68  throw std::runtime_error("translation is not a list or size not equal to 3");
+
69  }
+
70 
+
71  const auto * b = translation.asList();
+
72  Eigen::Vector3d vector(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
73  transformation.translate(vector);
+
74  }
+
75 
+
76  if (const auto & rotation = options.find("rotation"); !rotation.isNull())
+
77  {
+
78  if (!rotation.isList() || rotation.asList()->size() != 3)
+
79  {
+
80  throw std::runtime_error("rotation is not a list or size not equal to 3");
+
81  }
+
82 
+
83  const auto * b = rotation.asList();
+
84  Eigen::Vector3d axis(b->get(0).asFloat64(), b->get(1).asFloat64(), b->get(2).asFloat64());
+
85  Eigen::AngleAxisd rot(axis.norm(), axis.normalized());
+
86  transformation.rotate(rot);
+
87  }
+
88 
+
89  return transformation;
+
90 }
+
91 
+
92 template <typename T>
+
93 void checkOutput(const typename pcl::PointCloud<T>::ConstPtr & cloud, const std::string & caller)
+
94 {
+
95  if (cloud->empty())
+
96  {
+
97  throw std::runtime_error(caller + " returned an empty cloud");
+
98  }
+
99 }
+
100 
+
101 inline void checkOutput(const pcl::PolygonMesh::ConstPtr & mesh, const std::string & caller)
+
102 {
+
103  if (mesh->cloud.data.empty() || mesh->polygons.empty())
+
104  {
+
105  throw std::runtime_error(caller + " returned an empty or incomplete mesh");
+
106  }
+
107 }
+
108 
+
109 template <typename T>
+
110 void doTransformPointCloud(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
111 {
+
112  auto transformation = getTransformation(options);
+
113  pcl::transformPointCloud(*in, *out, transformation);
+
114  checkOutput<T>(out, "transformPointCloud");
+
115 }
+
116 
+
117 template <typename T>
+
118 void doTransformPointCloudWithNormals(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
119 {
+
120  auto transformation = getTransformation(options);
+
121  pcl::transformPointCloudWithNormals(*in, *out, transformation);
+
122  checkOutput<T>(out, "transformPointCloudWithNormals");
+
123 }
+
124 
+
125 template <typename T>
+
126 void doApproximateVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
127 {
+
128  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
129  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
130  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
131  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
132  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
133 
+
134  pcl::ApproximateVoxelGrid<T> grid;
+
135  grid.setDownsampleAllData(downsampleAllData);
+
136  grid.setInputCloud(in);
+
137  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
138  grid.filter(*out);
+
139 
+
140  checkOutput<T>(out, "ApproximateVoxelGrid");
+
141 }
+
142 
+
143 template <typename T>
+
144 void doBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
145 {
+
146  auto halfSize = options.check("halfSize", yarp::os::Value(0.0)).asFloat64();
+
147  auto stdDev = options.check("stdDev", yarp::os::Value(std::numeric_limits<double>::max())).asFloat64();
+
148 
+
149  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
150  tree->setInputCloud(in);
+
151 
+
152  pcl::BilateralFilter<T> filter;
+
153  filter.setHalfSize(halfSize);
+
154  filter.setInputCloud(in);
+
155  filter.setSearchMethod(tree);
+
156  filter.setStdDev(stdDev);
+
157  filter.filter(*out);
+
158 
+
159  checkOutput<T>(out, "BilateralFilter");
+
160 }
+
161 
+
162 template <typename T>
+
163 void doBilateralUpsampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
164 {
+
165  auto sigmaColor = options.check("sigmaColor", yarp::os::Value(15.0f)).asFloat32();
+
166  auto sigmaDepth = options.check("sigmaDepth", yarp::os::Value(0.5f)).asFloat32();
+
167  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
168 
+
169  pcl::BilateralUpsampling<T, T> upsampler;
+
170  upsampler.setInputCloud(in);
+
171  upsampler.setSigmaColor(sigmaColor);
+
172  upsampler.setSigmaDepth(sigmaDepth);
+
173  upsampler.setWindowSize(windowSize);
+
174  upsampler.process(*out);
+
175 
+
176  checkOutput<T>(out, "BilateralUpsampling");
+
177 }
+
178 
+
179 template <typename T>
+
180 void doConcaveHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
181 {
+
182  auto alpha = options.check("alpha", yarp::os::Value(0.0)).asFloat64();
+
183 
+
184  pcl::ConcaveHull<T> concave;
+
185  concave.setAlpha(alpha);
+
186  concave.setDimension(3);
+
187  concave.setInputCloud(in);
+
188  concave.setKeepInformation(true);
+
189  concave.reconstruct(*out);
+
190 
+
191  checkOutput(out, "ConcaveHull");
+
192 }
+
193 
+
194 template <typename T>
+
195 void doConvexHull(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
196 {
+
197  pcl::ConvexHull<T> convex;
+
198  convex.setDimension(3);
+
199  convex.setInputCloud(in);
+
200  convex.reconstruct(*out);
+
201 
+
202  checkOutput(out, "ConvexHull");
+
203 }
+
204 
+
205 template <typename T>
+
206 void doCropBox(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
207 {
+
208  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
209  auto maxX = options.check("maxX", yarp::os::Value(1.0f)).asFloat32();
+
210  auto maxY = options.check("maxY", yarp::os::Value(1.0f)).asFloat32();
+
211  auto maxZ = options.check("maxZ", yarp::os::Value(1.0f)).asFloat32();
+
212  auto minX = options.check("minX", yarp::os::Value(-1.0f)).asFloat32();
+
213  auto minY = options.check("minY", yarp::os::Value(-1.0f)).asFloat32();
+
214  auto minZ = options.check("minZ", yarp::os::Value(-1.0f)).asFloat32();
+
215  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
216  auto rotationX = options.check("rotationX", yarp::os::Value(0.0f)).asFloat32();
+
217  auto rotationY = options.check("rotationY", yarp::os::Value(0.0f)).asFloat32();
+
218  auto rotationZ = options.check("rotationZ", yarp::os::Value(0.0f)).asFloat32();
+
219  auto translationX = options.check("translationX", yarp::os::Value(0.0f)).asFloat32();
+
220  auto translationY = options.check("translationY", yarp::os::Value(0.0f)).asFloat32();
+
221  auto translationZ = options.check("translationZ", yarp::os::Value(0.0f)).asFloat32();
+
222 
+
223  pcl::CropBox<T> cropper;
+
224  cropper.setInputCloud(in);
+
225  cropper.setKeepOrganized(keepOrganized);
+
226  cropper.setMax({maxX, maxY, maxZ, 1.0f});
+
227  cropper.setMin({minX, minY, minZ, 1.0f});
+
228  cropper.setNegative(negative);
+
229  cropper.setRotation({rotationX, rotationY, rotationZ});
+
230  cropper.setTranslation({translationX, translationY, translationZ});
+
231  cropper.filter(*out);
+
232 
+
233  checkOutput<T>(out, "CropBox");
+
234 }
+
235 
+
236 template <typename T>
+
237 void doFastBilateralFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
238 {
+
239  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
240  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
241 
+
242  pcl::FastBilateralFilter<T> fast;
+
243  fast.setInputCloud(in);
+
244  fast.setSigmaR(sigmaR);
+
245  fast.setSigmaS(sigmaS);
+
246  fast.filter(*out);
+
247 
+
248  checkOutput<T>(out, "FastBilateralFilter");
+
249 }
+
250 
+
251 template <typename T>
+
252 void doFastBilateralFilterOMP(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
253 {
+
254  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
255  auto sigmaR = options.check("sigmaR", yarp::os::Value(0.05f)).asFloat32();
+
256  auto sigmaS = options.check("sigmaS", yarp::os::Value(15.0f)).asFloat32();
+
257 
+
258  pcl::FastBilateralFilterOMP<T> fast;
+
259  fast.setInputCloud(in);
+
260  fast.setNumberOfThreads(numberOfThreads);
+
261  fast.setSigmaR(sigmaR);
+
262  fast.setSigmaS(sigmaS);
+
263  fast.filter(*out);
+
264 
+
265  checkOutput<T>(out, "FastBilateralFilterOMP");
+
266 }
+
267 
+
268 template <typename T>
+
269 void doGreedyProjectionTriangulation(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
270 {
+
271  auto consistentVertexOrdering = options.check("consistentVertexOrdering", yarp::os::Value(false)).asBool();
+
272  auto maximumAngle = options.check("maximumAngle", yarp::os::Value(2 * M_PI / 3)).asFloat64();
+
273  auto maximumNearestNeighbors = options.check("maximumNearestNeighbors", yarp::os::Value(100)).asInt32();
+
274  auto maximumSurfaceAngle = options.check("maximumSurfaceAngle", yarp::os::Value(M_PI / 4)).asFloat64();
+
275  auto minimumAngle = options.check("minimumAngle", yarp::os::Value(M_PI / 18)).asFloat64();
+
276  auto mu = options.check("mu", yarp::os::Value(0.0)).asFloat64();
+
277  auto normalConsistency = options.check("normalConsistency", yarp::os::Value(false)).asBool();
+
278  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
279 
+
280  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
281  tree->setInputCloud(in);
+
282 
+
283  pcl::GreedyProjectionTriangulation<T> gp3;
+
284  gp3.setConsistentVertexOrdering(consistentVertexOrdering);
+
285  gp3.setInputCloud(in);
+
286  gp3.setMaximumAngle(maximumAngle);
+
287  gp3.setMaximumSurfaceAngle(maximumSurfaceAngle);
+
288  gp3.setMaximumNearestNeighbors(maximumNearestNeighbors);
+
289  gp3.setMinimumAngle(minimumAngle);
+
290  gp3.setMu(mu);
+
291  gp3.setNormalConsistency(normalConsistency);
+
292  gp3.setSearchMethod(tree);
+
293  gp3.setSearchRadius(searchRadius);
+
294  gp3.reconstruct(*out);
+
295 
+
296  checkOutput(out, "GreedyProjectionTriangulation");
+
297 }
+
298 
+
299 template <typename T>
+
300 void doGridMinimum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
301 {
+
302  auto resolution = options.check("resolution", yarp::os::Value(0.0f)).asFloat32();
+
303  pcl::GridMinimum<T> grid(resolution);
+
304  grid.setInputCloud(in);
+
305  grid.filter(*out);
+
306  checkOutput<T>(out, "GridMinimum");
+
307 }
+
308 
+
309 template <typename T>
+
310 void doGridProjection(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
311 {
+
312  auto maxBinarySearchLevel = options.check("maxBinarySearchLevel", yarp::os::Value(10)).asInt32();
+
313  auto nearestNeighborNum = options.check("nearestNeighborNum", yarp::os::Value(50)).asInt32();
+
314  auto paddingSize = options.check("paddingSize", yarp::os::Value(3)).asInt32();
+
315  auto resolution = options.check("resolution", yarp::os::Value(0.001)).asFloat64();
+
316 
+
317  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
318  tree->setInputCloud(in);
+
319 
+
320  pcl::GridProjection<T> gp;
+
321  gp.setInputCloud(in);
+
322  gp.setMaxBinarySearchLevel(maxBinarySearchLevel);
+
323  gp.setNearestNeighborNum(nearestNeighborNum);
+
324  gp.setPaddingSize(paddingSize);
+
325  gp.setResolution(resolution);
+
326  gp.setSearchMethod(tree);
+
327  gp.reconstruct(*out);
+
328 
+
329  checkOutput(out, "GridProjection");
+
330 }
+
331 
+
332 template <typename T>
+
333 void doLocalMaximum(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
334 {
+
335  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
336  auto radius = options.check("radius", yarp::os::Value(1.0f)).asFloat32();
+
337 
+
338  pcl::LocalMaximum<T> local;
+
339  local.setInputCloud(in);
+
340  local.setNegative(negative);
+
341  local.setRadius(radius);
+
342  local.filter(*out);
+
343 
+
344  checkOutput<T>(out, "LocalMaximum");
+
345 }
+
346 
+
347 template <typename T>
+
348 void doMarchingCubesHoppe(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
349 {
+
350 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
351  auto distanceIgnore = options.check("distanceIgnore", yarp::os::Value(-1.0f)).asFloat32();
+
352 #endif
+
353  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
354  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
355  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
356  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
357  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
358  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
359 
+
360  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
361  tree->setInputCloud(in);
+
362 
+
363  pcl::MarchingCubesHoppe<T> hoppe;
+
364 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
365  hoppe.setDistanceIgnore(distanceIgnore);
+
366 #endif
+
367  hoppe.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
368  hoppe.setInputCloud(in);
+
369  hoppe.setIsoLevel(isoLevel);
+
370  hoppe.setPercentageExtendGrid(percentageExtendGrid);
+
371  hoppe.setSearchMethod(tree);
+
372  hoppe.reconstruct(*out);
+
373 
+
374  checkOutput(out, "MarchingCubesHoppe");
+
375 }
+
376 
+
377 template <typename T>
+
378 void doMarchingCubesRBF(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
379 {
+
380  auto gridResolution = options.check("gridResolution", yarp::os::Value(32)).asInt32();
+
381  auto gridResolutionX = options.check("gridResolutionX", yarp::os::Value(gridResolution)).asInt32();
+
382  auto gridResolutionY = options.check("gridResolutionY", yarp::os::Value(gridResolution)).asInt32();
+
383  auto gridResolutionZ = options.check("gridResolutionZ", yarp::os::Value(gridResolution)).asInt32();
+
384  auto isoLevel = options.check("isoLevel", yarp::os::Value(0.0f)).asFloat32();
+
385  auto offSurfaceDisplacement = options.check("offSurfaceDisplacement", yarp::os::Value(0.1f)).asFloat32();
+
386  auto percentageExtendGrid = options.check("percentageExtendGrid", yarp::os::Value(0.0f)).asFloat32();
+
387 
+
388  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
389  tree->setInputCloud(in);
+
390 
+
391  pcl::MarchingCubesRBF<T> rbf;
+
392  rbf.setGridResolution(gridResolutionX, gridResolutionY, gridResolutionZ);
+
393  rbf.setInputCloud(in);
+
394  rbf.setIsoLevel(isoLevel);
+
395  rbf.setOffSurfaceDisplacement(offSurfaceDisplacement);
+
396  rbf.setPercentageExtendGrid(percentageExtendGrid);
+
397  rbf.setSearchMethod(tree);
+
398  rbf.reconstruct(*out);
+
399 
+
400  checkOutput(out, "MarchingCubesRBF");
+
401 }
+
402 
+
403 template <typename T>
+
404 void doMedianFilter(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
405 {
+
406  auto maxAllowedMovement = options.check("maxAllowedMovement", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
407  auto windowSize = options.check("windowSize", yarp::os::Value(5)).asInt32();
+
408 
+
409  pcl::MedianFilter<T> median;
+
410  median.setInputCloud(in);
+
411  median.setMaxAllowedMovement(maxAllowedMovement);
+
412  median.setWindowSize(windowSize);
+
413  median.filter(*out);
+
414 
+
415  checkOutput<T>(out, "MedianFilter");
+
416 }
+
417 
+
418 void doMeshQuadricDecimationVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
419 {
+
420  auto targetReductionFactor = options.check("targetReductionFactor", yarp::os::Value(0.5f)).asFloat32();
+
421 
+
422  pcl::MeshQuadricDecimationVTK quadric;
+
423  quadric.setInputMesh(in);
+
424  quadric.setTargetReductionFactor(targetReductionFactor);
+
425  quadric.process(*out);
+
426 
+
427  checkOutput(out, "MeshQuadricDecimationVTK");
+
428 }
+
429 
+
430 void doMeshSmoothingLaplacianVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
431 {
+
432  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
433  auto convergence = options.check("convergence", yarp::os::Value(0.0f)).asFloat32();
+
434  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
435  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
436  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
437  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
438  auto relaxationFactor = options.check("relaxationFactor", yarp::os::Value(0.01f)).asFloat32();
+
439 
+
440  pcl::MeshSmoothingLaplacianVTK laplacian;
+
441  laplacian.setBoundarySmoothing(boundarySmoothing);
+
442  laplacian.setConvergence(convergence);
+
443  laplacian.setEdgeAngle(edgeAngle);
+
444  laplacian.setFeatureAngle(featureAngle);
+
445  laplacian.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
446  laplacian.setInputMesh(in);
+
447  laplacian.setNumIter(numIter);
+
448  laplacian.setRelaxationFactor(relaxationFactor);
+
449  laplacian.process(*out);
+
450 
+
451  checkOutput(out, "MeshSmoothingLaplacianVTK");
+
452 }
+
453 
+
454 void doMeshSmoothingWindowedSincVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
455 {
+
456  auto boundarySmoothing = options.check("boundarySmoothing", yarp::os::Value(true)).asBool();
+
457  auto edgeAngle = options.check("edgeAngle", yarp::os::Value(15.0f)).asFloat32();
+
458  auto featureAngle = options.check("featureAngle", yarp::os::Value(45.0f)).asFloat32();
+
459  auto featureEdgeSmoothing = options.check("featureEdgeSmoothing", yarp::os::Value(false)).asBool();
+
460  auto normalizeCoordinates = options.check("normalizeCoordinates", yarp::os::Value(false)).asBool();
+
461  auto numIter = options.check("numIter", yarp::os::Value(20)).asInt32();
+
462  auto passBand = options.check("passBand", yarp::os::Value(0.1f)).asFloat32();
+
463 
+
464  pcl::MeshSmoothingWindowedSincVTK windowed;
+
465  windowed.setBoundarySmoothing(boundarySmoothing);
+
466  windowed.setEdgeAngle(edgeAngle);
+
467  windowed.setFeatureAngle(featureAngle);
+
468  windowed.setFeatureEdgeSmoothing(featureEdgeSmoothing);
+
469  windowed.setInputMesh(in);
+
470  windowed.setNormalizeCoordinates(normalizeCoordinates);
+
471  windowed.setNumIter(numIter);
+
472  windowed.setPassBand(passBand);
+
473  windowed.process(*out);
+
474 
+
475  checkOutput(out, "MeshSmoothingWindowedSincVTK");
+
476 }
+
477 
+
478 void doMeshSubdivisionVTK(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
479 {
+
480  auto filterTypeStr = options.check("filterType", yarp::os::Value("linear")).asString();
+
481 
+
482  pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType filterType;
+
483 
+
484  if (filterTypeStr == "butterfly")
+
485  {
+
486  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::BUTTERFLY;
+
487  }
+
488  else if (filterTypeStr == "linear")
+
489  {
+
490  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LINEAR;
+
491  }
+
492  else if (filterTypeStr == "loop")
+
493  {
+
494  filterType = pcl::MeshSubdivisionVTK::MeshSubdivisionVTKFilterType::LOOP;
+
495  }
+
496  else
+
497  {
+
498  throw std::invalid_argument("unknown filter type: " + filterTypeStr);
+
499  }
+
500 
+
501  pcl::MeshSubdivisionVTK subdivision;
+
502  subdivision.setFilterType(filterType);
+
503  subdivision.setInputMesh(in);
+
504  subdivision.process(*out);
+
505 
+
506  checkOutput(out, "MeshSubdivisionVTK");
+
507 }
+
508 
+
509 #if PCL_VERSION_COMPARE(>=, 1, 9, 0)
+
510 template <typename T1, typename T2 = T1>
+
511 void doMovingLeastSquares(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
512 {
+
513  auto cacheMlsResults = options.check("cacheMlsResults", yarp::os::Value(true)).asBool();
+
514  auto computeNormals = options.check("computeNormals", yarp::os::Value(false)).asBool();
+
515  auto dilationIterations = options.check("dilationIterations", yarp::os::Value(0)).asInt32();
+
516  auto dilationVoxelSize = options.check("dilationVoxelSize", yarp::os::Value(1.0f)).asFloat32();
+
517  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(1)).asInt32();
+
518  auto pointDensity = options.check("pointDensity", yarp::os::Value(0)).asInt32();
+
519  auto polynomialOrder = options.check("polynomialOrder", yarp::os::Value(2)).asInt32();
+
520  auto projectionMethodStr = options.check("projectionMethod", yarp::os::Value("simple")).asString();
+
521  auto searchRadius = options.check("searchRadius", yarp::os::Value(0.0)).asFloat64();
+
522  auto sqrGaussParam = options.check("sqrGaussParam", yarp::os::Value(0.0)).asFloat64();
+
523  auto upsamplingMethodStr = options.check("upsamplingMethod", yarp::os::Value("none")).asString();
+
524  auto upsamplingRadius = options.check("upsamplingRadius", yarp::os::Value(0.0)).asFloat64();
+
525  auto upsamplingStepSize = options.check("upsamplingStepSize", yarp::os::Value(0.0)).asFloat64();
+
526 
+
527  pcl::MLSResult::ProjectionMethod projectionMethod;
+
528 
+
529  if (projectionMethodStr == "none")
+
530  {
+
531  projectionMethod = pcl::MLSResult::ProjectionMethod::NONE;
+
532  }
+
533  else if (projectionMethodStr == "orthogonal")
+
534  {
+
535  projectionMethod = pcl::MLSResult::ProjectionMethod::ORTHOGONAL;
+
536  }
+
537  else if (projectionMethodStr == "simple")
+
538  {
+
539  projectionMethod = pcl::MLSResult::ProjectionMethod::SIMPLE;
+
540  }
+
541  else
+
542  {
+
543  throw std::invalid_argument("unknown projection method: " + projectionMethodStr);
+
544  }
+
545 
+
546  typename pcl::MovingLeastSquares<T1, T2>::UpsamplingMethod upsamplingMethod;
+
547 
+
548  if (upsamplingMethodStr == "distinctCloud")
+
549  {
+
550  upsamplingMethod = decltype(upsamplingMethod)::DISTINCT_CLOUD;
+
551  }
+
552  else if (upsamplingMethodStr == "none")
+
553  {
+
554  upsamplingMethod = decltype(upsamplingMethod)::NONE;
+
555  }
+
556  else if (upsamplingMethodStr == "randomUniformDensity")
+
557  {
+
558  upsamplingMethod = decltype(upsamplingMethod)::RANDOM_UNIFORM_DENSITY;
+
559  }
+
560  else if (upsamplingMethodStr == "sampleLocalPlane")
+
561  {
+
562  upsamplingMethod = decltype(upsamplingMethod)::SAMPLE_LOCAL_PLANE;
+
563  }
+
564  else if (upsamplingMethodStr == "voxelGridDilation")
+
565  {
+
566  upsamplingMethod = decltype(upsamplingMethod)::VOXEL_GRID_DILATION;
+
567  }
+
568  else
+
569  {
+
570  throw std::invalid_argument("unknown upsampling method: " + upsamplingMethodStr);
+
571  }
+
572 
+
573  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
574  tree->setInputCloud(in);
+
575 
+
576  pcl::MovingLeastSquares<T1, T2> mls;
+
577  mls.setCacheMLSResults(cacheMlsResults);
+
578  mls.setComputeNormals(computeNormals);
+
579  mls.setDilationIterations(dilationIterations);
+
580  mls.setDilationVoxelSize(dilationVoxelSize);
+
581  mls.setInputCloud(in);
+
582  mls.setNumberOfThreads(numberOfThreads);
+
583  mls.setPointDensity(pointDensity);
+
584  mls.setPolynomialOrder(polynomialOrder);
+
585  mls.setProjectionMethod(projectionMethod);
+
586  mls.setSearchMethod(tree);
+
587  mls.setSearchRadius(searchRadius);
+
588  mls.setSqrGaussParam(sqrGaussParam);
+
589  mls.setUpsamplingMethod(upsamplingMethod);
+
590  mls.setUpsamplingRadius(upsamplingRadius);
+
591  mls.setUpsamplingStepSize(upsamplingStepSize);
+
592  mls.process(*out);
+
593 
+
594  checkOutput<T2>(out, "MovingLeastSquares");
+
595 }
+
596 #endif
+
597 
+
598 template <typename T1, typename T2>
+
599 void doNormalEstimation(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
600 {
+
601  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
602  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
603 
+
604  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
605  tree->setInputCloud(in);
+
606 
+
607  pcl::NormalEstimation<T1, T2> estimator;
+
608  estimator.setInputCloud(in);
+
609  estimator.setKSearch(kSearch);
+
610  estimator.setRadiusSearch(radiusSearch);
+
611  estimator.setSearchMethod(tree);
+
612  estimator.compute(*out);
+
613 
+
614  checkOutput<T2>(out, "NormalEstimation");
+
615 }
+
616 
+
617 template <typename T1, typename T2>
+
618 void doNormalEstimationOMP(const typename pcl::PointCloud<T1>::ConstPtr & in, const typename pcl::PointCloud<T2>::Ptr & out, const yarp::os::Searchable & options)
+
619 {
+
620  auto kSearch = options.check("kSearch", yarp::os::Value(0)).asInt32();
+
621  auto numberOfThreads = options.check("numberOfThreads", yarp::os::Value(0)).asInt32();
+
622  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
623 
+
624  typename pcl::search::KdTree<T1>::Ptr tree(new pcl::search::KdTree<T1>());
+
625  tree->setInputCloud(in);
+
626 
+
627  pcl::NormalEstimationOMP<T1, T2> estimator;
+
628  estimator.setInputCloud(in);
+
629  estimator.setKSearch(kSearch);
+
630  estimator.setNumberOfThreads(numberOfThreads);
+
631  estimator.setRadiusSearch(radiusSearch);
+
632  estimator.setSearchMethod(tree);
+
633  estimator.compute(*out);
+
634 
+
635  checkOutput<T2>(out, "NormalEstimationOMP");
+
636 }
+
637 
+
638 template <typename T>
+
639 void doOrganizedFastMesh(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
640 {
+
641  if (!in->isOrganized())
+
642  {
+
643  // the implementation lacks a proper check
+
644  throw std::invalid_argument("input cloud must be organized (height > 1) for OrganizedFastMesh");
+
645  }
+
646 
+
647  auto angleTolerance = options.check("angleTolerance", yarp::os::Value(12.5 * M_PI / 180)).asFloat32();
+
648  auto depthDependent = options.check("depthDependent", yarp::os::Value(false)).asBool();
+
649  auto distanceTolerance = options.check("distanceTolerance", yarp::os::Value(-1.0f)).asFloat32();
+
650  auto maxEdgeLengthA = options.check("maxEdgeLengthA", yarp::os::Value(0.0f)).asFloat32();
+
651  auto maxEdgeLengthB = options.check("maxEdgeLengthB", yarp::os::Value(0.0f)).asFloat32();
+
652  auto maxEdgeLengthC = options.check("maxEdgeLengthC", yarp::os::Value(0.0f)).asFloat32();
+
653  auto storeShadowedFaces = options.check("storeShadowedFaces", yarp::os::Value(false)).asBool();
+
654  auto trianglePixelSize = options.check("trianglePixelSize", yarp::os::Value(1)).asInt32();
+
655  auto trianglePixelSizeColumns = options.check("trianglePixelSizeColumns", yarp::os::Value(trianglePixelSize)).asInt32();
+
656  auto trianglePixelSizeRows = options.check("trianglePixelSizeRows", yarp::os::Value(trianglePixelSize)).asInt32();
+
657  auto triangulationTypeStr = options.check("triangulationType", yarp::os::Value("quadMesh")).asString();
+
658  auto useDepthAsDistance = options.check("useDepthAsDistance", yarp::os::Value(false)).asBool();
+
659 
+
660  typename pcl::OrganizedFastMesh<T>::TriangulationType triangulationType;
+
661 
+
662  if (triangulationTypeStr == "quadMesh")
+
663  {
+
664  triangulationType = decltype(triangulationType)::QUAD_MESH;
+
665  }
+
666  else if (triangulationTypeStr == "triangleAdaptiveCut")
+
667  {
+
668  triangulationType = decltype(triangulationType)::TRIANGLE_ADAPTIVE_CUT;
+
669  }
+
670  else if (triangulationTypeStr == "triangleLeftCut")
+
671  {
+
672  triangulationType = decltype(triangulationType)::TRIANGLE_LEFT_CUT;
+
673  }
+
674  else if (triangulationTypeStr == "triangleRightCut")
+
675  {
+
676  triangulationType = decltype(triangulationType)::TRIANGLE_RIGHT_CUT;
+
677  }
+
678  else
+
679  {
+
680  throw std::invalid_argument("unknown triangulation type: " + triangulationTypeStr);
+
681  }
+
682 
+
683  pcl::OrganizedFastMesh<T> organized;
+
684  organized.setAngleTolerance(angleTolerance);
+
685  organized.setDistanceTolerance(distanceTolerance, depthDependent);
+
686  organized.setInputCloud(in);
+
687  organized.setMaxEdgeLength(maxEdgeLengthA, maxEdgeLengthB, maxEdgeLengthC);
+
688  organized.setTrianglePixelSize(trianglePixelSize);
+
689  organized.setTrianglePixelSizeColumns(trianglePixelSizeColumns);
+
690  organized.setTrianglePixelSizeRows(trianglePixelSizeRows);
+
691  organized.setTriangulationType(triangulationType);
+
692  organized.storeShadowedFaces(storeShadowedFaces);
+
693  organized.useDepthAsDistance(useDepthAsDistance);
+
694  organized.reconstruct(*out);
+
695 
+
696  checkOutput(out, "OrganizedFastMesh");
+
697 }
+
698 
+
699 template <typename T>
+
700 void doPassThrough(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
701 {
+
702  auto filterFieldName = options.check("filterFieldName", yarp::os::Value("")).asString();
+
703  auto filterLimitMax = options.check("filterLimitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat32();
+
704  auto filterLimitMin = options.check("filterLimitMin", yarp::os::Value(std::numeric_limits<float>::min())).asFloat32();
+
705  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
706 
+
707  pcl::PassThrough<T> pass;
+
708  pass.setFilterFieldName(filterFieldName);
+
709  pass.setFilterLimits(filterLimitMin, filterLimitMax);
+
710  pass.setInputCloud(in);
+
711  pass.setNegative(negative);
+
712  pass.filter(*out);
+
713 
+
714  checkOutput<T>(out, "PassThrough");
+
715 }
+
716 
+
717 template <typename T>
+
718 void doPoisson(const typename pcl::PointCloud<T>::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
719 {
+
720  auto confidence = options.check("confidence", yarp::os::Value(false)).asBool();
+
721  auto degree = options.check("degree", yarp::os::Value(2)).asInt32();
+
722  auto depth = options.check("depth", yarp::os::Value(8)).asInt32();
+
723  auto isoDivide = options.check("isoDivide", yarp::os::Value(8)).asInt32();
+
724  auto manifold = options.check("manifold", yarp::os::Value(true)).asBool();
+
725  auto minDepth = options.check("minDepth", yarp::os::Value(5)).asInt32();
+
726  auto outputPolygons = options.check("outputPolygons", yarp::os::Value(false)).asBool();
+
727  auto pointWeight = options.check("pointWeight", yarp::os::Value(4.0f)).asFloat32();
+
728  auto samplesPerNode = options.check("samplesPerNode", yarp::os::Value(1.0f)).asFloat32();
+
729  auto scale = options.check("scale", yarp::os::Value(1.1f)).asFloat32();
+
730  auto solverDivide = options.check("solverDivide", yarp::os::Value(8)).asInt32();
+
731 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
732  auto threads = options.check("threads", yarp::os::Value(1)).asInt32();
+
733 #endif
+
734 
+
735  typename pcl::search::KdTree<T>::Ptr tree(new pcl::search::KdTree<T>());
+
736  tree->setInputCloud(in);
+
737 
+
738  pcl::Poisson<T> poisson;
+
739  poisson.setConfidence(confidence);
+
740  poisson.setDegree(degree);
+
741  poisson.setDepth(depth);
+
742  poisson.setInputCloud(in);
+
743  poisson.setIsoDivide(isoDivide);
+
744  poisson.setManifold(manifold);
+
745  poisson.setMinDepth(minDepth);
+
746  poisson.setOutputPolygons(outputPolygons);
+
747  poisson.setPointWeight(pointWeight);
+
748  poisson.setSamplesPerNode(samplesPerNode);
+
749  poisson.setScale(scale);
+
750  poisson.setSearchMethod(tree);
+
751  poisson.setSolverDivide(solverDivide);
+
752 #if PCL_VERSION_COMPARE(>=, 1, 12, 0)
+
753  poisson.setThreads(threads);
+
754 #endif
+
755  poisson.reconstruct(*out);
+
756 
+
757  checkOutput(out, "Poisson");
+
758 }
+
759 
+
760 template <typename T>
+
761 void doRadiusOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
762 {
+
763  auto minNeighborsInRadius = options.check("minNeighborsInRadius", yarp::os::Value(1)).asInt32();
+
764  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
765  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
766 
+
767  pcl::RadiusOutlierRemoval<T> remover;
+
768  remover.setInputCloud(in);
+
769  remover.setMinNeighborsInRadius(minNeighborsInRadius);
+
770  remover.setNegative(negative);
+
771  remover.setRadiusSearch(radiusSearch);
+
772  remover.filter(*out);
+
773 
+
774  checkOutput<T>(out, "RadiusOutlierRemoval");
+
775 }
+
776 
+
777 template <typename T>
+
778 void doRandomSample(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
779 {
+
780  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
781  auto sample = options.check("sample", yarp::os::Value(std::numeric_limits<int>::max())).asInt64(); // note the shortening conversion
+
782  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
783 
+
784  pcl::RandomSample<T> random;
+
785  random.setInputCloud(in);
+
786  random.setNegative(negative);
+
787  random.setSample(sample);
+
788  random.setSeed(seed);
+
789  random.filter(*out);
+
790 
+
791  checkOutput<T>(out, "RandomSample");
+
792 }
+
793 
+
794 template <typename T>
+
795 void doSamplingSurfaceNormal(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
796 {
+
797  auto ratio = options.check("ratio", yarp::os::Value(0.0f)).asFloat32();
+
798  auto sample = options.check("sample", yarp::os::Value(10)).asInt32();
+
799  auto seed = options.check("seed", yarp::os::Value(static_cast<int>(std::time(nullptr)))).asInt64(); // note the shortening conversion
+
800 
+
801  pcl::SamplingSurfaceNormal<T> sampler;
+
802  sampler.setInputCloud(in);
+
803  sampler.setRatio(ratio);
+
804  sampler.setSample(sample);
+
805  sampler.setSeed(seed);
+
806  sampler.filter(*out);
+
807 
+
808  checkOutput<T>(out, "SamplingSurfaceNormal");
+
809 }
+
810 
+
811 template <typename T>
+
812 void doShadowPoints(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
813 {
+
814  auto keepOrganized = options.check("keepOrganized", yarp::os::Value(false)).asBool();
+
815  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
816  auto threshold = options.check("threshold", yarp::os::Value(0.1f)).asFloat32();
+
817 
+
818 #if PCL_VERSION_COMPARE(>=, 1, 11, 0)
+
819  typename pcl::PointCloud<T>::Ptr temp = std::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
820 #else
+
821  typename pcl::PointCloud<T>::Ptr temp = boost::const_pointer_cast<pcl::PointCloud<T>>(in); // cast away constness
+
822 #endif
+
823 
+
824  pcl::ShadowPoints<T, T> shadow;
+
825  shadow.setInputCloud(in);
+
826  shadow.setKeepOrganized(keepOrganized);
+
827  shadow.setNegative(negative);
+
828  shadow.setNormals(temp); // assumes normals are contained in the input cloud
+
829  shadow.setThreshold(threshold);
+
830  shadow.filter(*out);
+
831 
+
832  checkOutput<T>(out, "ShadowPoints");
+
833 }
+
834 
+
835 void doSimplificationRemoveUnusedVertices(const pcl::PolygonMesh::ConstPtr & in, const pcl::PolygonMesh::Ptr & out, const yarp::os::Searchable & options)
+
836 {
+
837  pcl::surface::SimplificationRemoveUnusedVertices cleaner;
+
838  cleaner.simplify(*in, *out);
+
839  checkOutput(out, "doSimplificationRemoveUnusedVertices");
+
840 }
+
841 
+
842 template <typename T>
+
843 void doStatisticalOutlierRemoval(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
844 {
+
845  auto meanK = options.check("meanK", yarp::os::Value(1)).asInt32();
+
846  auto negative = options.check("negative", yarp::os::Value(false)).asBool();
+
847  auto stddevMulThresh = options.check("stddevMulThresh", yarp::os::Value(0.0)).asFloat64();
+
848 
+
849  pcl::StatisticalOutlierRemoval<T> remover;
+
850  remover.setInputCloud(in);
+
851  remover.setMeanK(meanK);
+
852  remover.setNegative(negative);
+
853  remover.setStddevMulThresh(stddevMulThresh);
+
854  remover.filter(*out);
+
855 
+
856  checkOutput<T>(out, "StatisticalOutlierRemoval");
+
857 }
+
858 
+
859 template <typename T>
+
860 void doUniformSampling(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
861 {
+
862  auto radiusSearch = options.check("radiusSearch", yarp::os::Value(0.0)).asFloat64();
+
863 
+
864  pcl::UniformSampling<T> uniform;
+
865  uniform.setInputCloud(in);
+
866  uniform.setRadiusSearch(radiusSearch);
+
867  uniform.filter(*out);
+
868 
+
869  checkOutput<T>(out, "UniformSampling");
+
870 }
+
871 
+
872 template <typename T>
+
873 void doVoxelGrid(const typename pcl::PointCloud<T>::ConstPtr & in, const typename pcl::PointCloud<T>::Ptr & out, const yarp::os::Searchable & options)
+
874 {
+
875  auto downsampleAllData = options.check("downsampleAllData", yarp::os::Value(true)).asBool();
+
876  auto leafSize = options.check("leafSize", yarp::os::Value(0.0f)).asFloat32();
+
877  auto leafSizeX = options.check("leafSizeX", yarp::os::Value(leafSize)).asFloat32();
+
878  auto leafSizeY = options.check("leafSizeY", yarp::os::Value(leafSize)).asFloat32();
+
879  auto leafSizeZ = options.check("leafSizeZ", yarp::os::Value(leafSize)).asFloat32();
+
880  auto limitMax = options.check("limitMax", yarp::os::Value(std::numeric_limits<float>::max())).asFloat64();
+
881  auto limitMin = options.check("limitMin", yarp::os::Value(-std::numeric_limits<float>::max())).asFloat64();
+
882  auto limitsNegative = options.check("limitsNegative", yarp::os::Value(false)).asBool();
+
883  auto minimumPointsNumberPerVoxel = options.check("minimumPointsNumberPerVoxel", yarp::os::Value(0)).asInt32();
+
884 
+
885  pcl::VoxelGrid<T> grid;
+
886  grid.setDownsampleAllData(downsampleAllData);
+
887  grid.setFilterLimits(limitMin, limitMax);
+
888  grid.setFilterLimitsNegative(limitsNegative);
+
889  grid.setInputCloud(in);
+
890  grid.setLeafSize(leafSizeX, leafSizeY, leafSizeZ);
+
891  grid.setMinimumPointsNumberPerVoxel(minimumPointsNumberPerVoxel);
+
892  grid.setSaveLeafLayout(false);
+
893  grid.filter(*out);
+
894 
+
895  checkOutput<T>(out, "VoxelGrid");
+
896 }
+
897 
+
898 } // namespace
+
899 
+
900 #endif // __YARP_CLOUD_UTILS_PCL_IMPL_HPP__
+
+ + + + diff --git a/YarpCloudUtils-pcl-inst_8hpp_source.html b/YarpCloudUtils-pcl-inst_8hpp_source.html new file mode 100644 index 00000000..5695f7b4 --- /dev/null +++ b/YarpCloudUtils-pcl-inst_8hpp_source.html @@ -0,0 +1,186 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl-inst.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl-inst.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
5 
+
6 #include <string>
+
7 
+
8 #include <yarp/os/Searchable.h>
+
9 #include <yarp/sig/PointCloud.h>
+
10 #include <yarp/sig/Vector.h>
+
11 
+
12 #define YCU_PCL_SIGNATURES(in, out) \
+
13  template bool meshFromCloud(const in &, out &, yarp::sig::VectorOf<int> &, const yarp::sig::VectorOf<yarp::os::Property> &); \
+
14  template bool meshFromCloud(const in &, out &, yarp::sig::VectorOf<int> &, const yarp::os::Searchable &, const std::string &); \
+
15  template bool processCloud(const in &, out &, const yarp::sig::VectorOf<yarp::os::Property> &); \
+
16  template bool processCloud(const in &, out &, const yarp::os::Searchable &, const std::string &);
+
17 
+
18 namespace roboticslab
+
19 {
+
20 
+
21 namespace YarpCloudUtils
+
22 {
+
23 
+
24 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXY)
+
25 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZ)
+
26 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudNormal)
+
27 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZRGBA)
+
28 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZI)
+
29 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudInterestPointXYZ)
+
30 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormal)
+
31 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXY, yarp::sig::PointCloudXYZNormalRGBA)
+
32 
+
33 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXY)
+
34 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZ)
+
35 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudNormal)
+
36 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZRGBA)
+
37 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZI)
+
38 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
39 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormal)
+
40 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
41 
+
42 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXY)
+
43 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZ)
+
44 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudNormal)
+
45 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZRGBA)
+
46 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZI)
+
47 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudInterestPointXYZ)
+
48 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormal)
+
49 YCU_PCL_SIGNATURES(yarp::sig::PointCloudNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
50 
+
51 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXY)
+
52 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZ)
+
53 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudNormal)
+
54 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZRGBA)
+
55 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZI)
+
56 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
57 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormal)
+
58 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
59 
+
60 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXY)
+
61 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZ)
+
62 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudNormal)
+
63 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZRGBA)
+
64 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZI)
+
65 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudInterestPointXYZ)
+
66 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormal)
+
67 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZI, yarp::sig::PointCloudXYZNormalRGBA)
+
68 
+
69 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXY)
+
70 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZ)
+
71 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudNormal)
+
72 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZRGBA)
+
73 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZI)
+
74 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudInterestPointXYZ)
+
75 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormal)
+
76 YCU_PCL_SIGNATURES(yarp::sig::PointCloudInterestPointXYZ, yarp::sig::PointCloudXYZNormalRGBA)
+
77 
+
78 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXY)
+
79 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZ)
+
80 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudNormal)
+
81 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZRGBA)
+
82 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZI)
+
83 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudInterestPointXYZ)
+
84 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormal)
+
85 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormal, yarp::sig::PointCloudXYZNormalRGBA)
+
86 
+
87 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXY)
+
88 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZ)
+
89 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudNormal)
+
90 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZRGBA)
+
91 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZI)
+
92 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudInterestPointXYZ)
+
93 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormal)
+
94 YCU_PCL_SIGNATURES(yarp::sig::PointCloudXYZNormalRGBA, yarp::sig::PointCloudXYZNormalRGBA)
+
95 
+
96 } // YarpCloudUtils
+
97 
+
98 } // namespace roboticslab
+
99 
+
100 #endif // __YARP_CLOUD_UTILS_PCL_INST_HPP__
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/YarpCloudUtils-pcl-traits_8hpp_source.html b/YarpCloudUtils-pcl-traits_8hpp_source.html new file mode 100644 index 00000000..56d12d7d --- /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..16188644 --- /dev/null +++ b/YarpCloudUtils-pcl_8hpp_source.html @@ -0,0 +1,314 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils-pcl.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils-pcl.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_PCL_HPP__
+
4 #define __YARP_CLOUD_UTILS_PCL_HPP__
+
5 
+
6 #include <stdexcept>
+
7 #include <type_traits>
+
8 
+
9 #include <pcl/point_cloud.h>
+
10 #include <pcl/point_types.h>
+
11 #include <pcl/PolygonMesh.h>
+
12 #include <pcl/common/io.h>
+
13 
+
14 #include "YarpCloudUtils-pcl-traits.hpp"
+
15 
+
16 namespace
+
17 {
+
18 
+
19 class cloud_container
+
20 {
+
21 public:
+
22  template <typename T>
+
23  typename pcl::PointCloud<T>::ConstPtr getCloud() const;
+
24 
+
25  template <typename T>
+
26  typename pcl::PointCloud<T>::Ptr & setCloud();
+
27 
+
28  template <typename T>
+
29  const typename pcl::PointCloud<T>::Ptr & useCloud() const;
+
30 
+
31  pcl::PolygonMesh::ConstPtr getMesh() const;
+
32 
+
33  pcl::PolygonMesh::Ptr & setMesh();
+
34 
+
35 private:
+
36  template <typename T1, typename T2>
+
37  static auto initializeCloudPointer(const typename pcl::PointCloud<T1>::ConstPtr & in);
+
38 
+
39  pcl::PointCloud<pcl::PointXYZ>::Ptr xyz;
+
40  pcl::PointCloud<pcl::PointXYZRGB>::Ptr xyz_rgb;
+
41  pcl::PointCloud<pcl::PointXYZI>::Ptr xyzi;
+
42  pcl::PointCloud<pcl::InterestPoint>::Ptr xyz_interest;
+
43  pcl::PointCloud<pcl::PointNormal>::Ptr xyz_normal;
+
44  pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr xyz_rgb_normal;
+
45  pcl::PointCloud<pcl::PointXYZINormal>::Ptr xyzi_normal;
+
46  pcl::PolygonMesh::Ptr mesh;
+
47 };
+
48 
+
49 // helpers
+
50 
+
51 template <typename T1, typename T2>
+
52 inline auto cloud_container::initializeCloudPointer(const typename pcl::PointCloud<T1>::ConstPtr & in)
+
53 {
+
54  if constexpr (!std::is_same_v<T1, T2>)
+
55  {
+
56  if constexpr (!pcl_is_convertible<T1, T2>::value)
+
57  {
+
58  std::string name_lhs = pcl_descriptor<T1>::name;
+
59  std::string name_rhs = pcl_descriptor<T2>::name;
+
60  throw std::runtime_error("illegal conversion from " + name_lhs + " to " + name_rhs);
+
61  }
+
62 
+
63  typename pcl::PointCloud<T2>::Ptr out(new pcl::PointCloud<T2>());
+
64  pcl::copyPointCloud(*in, *out);
+
65  return out;
+
66  }
+
67  else
+
68  {
+
69  return in;
+
70  }
+
71 }
+
72 
+
73 // cloud_container::getCloud
+
74 
+
75 template <typename T>
+
76 typename pcl::PointCloud<T>::ConstPtr cloud_container::getCloud() const
+
77 {
+
78  if (xyz)
+
79  {
+
80  return initializeCloudPointer<pcl::PointXYZ, T>(xyz);
+
81  }
+
82  else if (xyz_rgb)
+
83  {
+
84  return initializeCloudPointer<pcl::PointXYZRGB, T>(xyz_rgb);
+
85  }
+
86  else if (xyzi)
+
87  {
+
88  return initializeCloudPointer<pcl::PointXYZI, T>(xyzi);
+
89  }
+
90  else if (xyz_interest)
+
91  {
+
92  return initializeCloudPointer<pcl::InterestPoint, T>(xyz_interest);
+
93  }
+
94  else if (xyz_normal)
+
95  {
+
96  return initializeCloudPointer<pcl::PointNormal, T>(xyz_normal);
+
97  }
+
98  else if (xyz_rgb_normal)
+
99  {
+
100  return initializeCloudPointer<pcl::PointXYZRGBNormal, T>(xyz_rgb_normal);
+
101  }
+
102  else if (xyzi_normal)
+
103  {
+
104  return initializeCloudPointer<pcl::PointXYZINormal, T>(xyzi_normal);
+
105  }
+
106  else
+
107  {
+
108  throw std::runtime_error("cloud pointer was not initialized");
+
109  }
+
110 }
+
111 
+
112 // cloud_container::setCloud
+
113 
+
114 template <>
+
115 pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud_container::setCloud<pcl::PointXYZ>()
+
116 {
+
117  xyz.reset(new pcl::PointCloud<pcl::PointXYZ>());
+
118  return xyz;
+
119 }
+
120 
+
121 template <>
+
122 pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud_container::setCloud<pcl::PointXYZRGB>()
+
123 {
+
124  xyz_rgb.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
+
125  return xyz_rgb;
+
126 }
+
127 
+
128 template <>
+
129 pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud_container::setCloud<pcl::PointXYZI>()
+
130 {
+
131  xyzi.reset(new pcl::PointCloud<pcl::PointXYZI>());
+
132  return xyzi;
+
133 }
+
134 
+
135 template <>
+
136 pcl::PointCloud<pcl::InterestPoint>::Ptr & cloud_container::setCloud<pcl::InterestPoint>()
+
137 {
+
138  xyz_interest.reset(new pcl::PointCloud<pcl::InterestPoint>());
+
139  return xyz_interest;
+
140 }
+
141 
+
142 template <>
+
143 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud_container::setCloud<pcl::PointNormal>()
+
144 {
+
145  xyz_normal.reset(new pcl::PointCloud<pcl::PointNormal>());
+
146  return xyz_normal;
+
147 }
+
148 
+
149 template <>
+
150 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud_container::setCloud<pcl::PointXYZRGBNormal>()
+
151 {
+
152  xyz_rgb_normal.reset(new pcl::PointCloud<pcl::PointXYZRGBNormal>());
+
153  return xyz_rgb_normal;
+
154 }
+
155 
+
156 template <>
+
157 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud_container::setCloud<pcl::PointXYZINormal>()
+
158 {
+
159  xyzi_normal.reset(new pcl::PointCloud<pcl::PointXYZINormal>());
+
160  return xyzi_normal;
+
161 }
+
162 
+
163 // cloud_container::useCloud
+
164 
+
165 template <>
+
166 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud_container::useCloud<pcl::PointXYZ>() const
+
167 {
+
168  return xyz;
+
169 }
+
170 
+
171 template <>
+
172 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud_container::useCloud<pcl::PointXYZRGB>() const
+
173 {
+
174  return xyz_rgb;
+
175 }
+
176 
+
177 template <>
+
178 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud_container::useCloud<pcl::PointXYZI>() const
+
179 {
+
180  return xyzi;
+
181 }
+
182 
+
183 template <>
+
184 const pcl::PointCloud<pcl::InterestPoint>::Ptr & cloud_container::useCloud<pcl::InterestPoint>() const
+
185 {
+
186  return xyz_interest;
+
187 }
+
188 
+
189 template <>
+
190 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud_container::useCloud<pcl::PointNormal>() const
+
191 {
+
192  return xyz_normal;
+
193 }
+
194 
+
195 template <>
+
196 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud_container::useCloud<pcl::PointXYZRGBNormal>() const
+
197 {
+
198  return xyz_rgb_normal;
+
199 }
+
200 
+
201 template <>
+
202 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud_container::useCloud<pcl::PointXYZINormal>() const
+
203 {
+
204  return xyzi_normal;
+
205 }
+
206 
+
207 // cloud_container::(get|set)Mesh
+
208 
+
209 inline pcl::PolygonMesh::ConstPtr cloud_container::getMesh() const
+
210 {
+
211  if (mesh)
+
212  {
+
213  return mesh;
+
214  }
+
215  else
+
216  {
+
217  throw std::runtime_error("mesh pointer was not initialized");
+
218  }
+
219 }
+
220 
+
221 inline pcl::PolygonMesh::Ptr & cloud_container::setMesh()
+
222 {
+
223  mesh.reset(new pcl::PolygonMesh());
+
224  return mesh;
+
225 }
+
226 
+
227 } // namespace
+
228 
+
229 #endif // __YARP_CLOUD_UTILS_PCL_HPP__
+
+ + + + diff --git a/YarpCloudUtils_8hpp_source.html b/YarpCloudUtils_8hpp_source.html new file mode 100644 index 00000000..2356a757 --- /dev/null +++ b/YarpCloudUtils_8hpp_source.html @@ -0,0 +1,157 @@ + + + + + + + +vision: libraries/YarpCloudUtils/YarpCloudUtils.hpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
YarpCloudUtils.hpp
+
+
+
1 // -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2 
+
3 #ifndef __YARP_CLOUD_UTILS_HPP__
+
4 #define __YARP_CLOUD_UTILS_HPP__
+
5 
+
6 #include <string>
+
7 
+
8 #include <yarp/os/Property.h>
+
9 #include <yarp/os/Searchable.h>
+
10 
+
11 #include <yarp/sig/PointCloud.h>
+
12 #include <yarp/sig/Vector.h>
+
13 
+
22 namespace roboticslab
+
23 {
+
24 
+
29 namespace YarpCloudUtils
+
30 {
+
31 
+
43 template <typename T>
+
44 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, const yarp::sig::VectorOf<int> & indices, bool isBinary = true);
+
45 
+
56 template <typename T>
+
57 bool savePLY(const std::string & filename, const yarp::sig::PointCloud<T> & cloud, bool isBinary = true)
+
58 {
+
59  return savePLY(filename, cloud, {}, isBinary);
+
60 }
+
61 
+
75 template <typename T>
+
76 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud, yarp::sig::VectorOf<int> & indices);
+
77 
+
90 template <typename T>
+
91 bool loadPLY(const std::string & filename, yarp::sig::PointCloud<T> & cloud)
+
92 {
+
93  yarp::sig::VectorOf<int> indices;
+
94  return loadPLY(filename, cloud, indices);
+
95 }
+
96 
+
111 template <typename T1, typename T2 = T1>
+
112 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
113  yarp::sig::PointCloud<T2> & meshPoints,
+
114  yarp::sig::VectorOf<int> & meshIndices,
+
115  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
116 
+
132 template <typename T1, typename T2 = T1>
+
133 bool meshFromCloud(const yarp::sig::PointCloud<T1> & cloud,
+
134  yarp::sig::PointCloud<T2> & meshPoints,
+
135  yarp::sig::VectorOf<int> & meshIndices,
+
136  const yarp::os::Searchable & config,
+
137  const std::string & collection = "meshPipeline");
+
138 
+
153 template <typename T1, typename T2 = T1>
+
154 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
155  yarp::sig::PointCloud<T2> & out,
+
156  const yarp::sig::VectorOf<yarp::os::Property> & options);
+
157 
+
173 template <typename T1, typename T2 = T1>
+
174 bool processCloud(const yarp::sig::PointCloud<T1> & in,
+
175  yarp::sig::PointCloud<T2> & out,
+
176  const yarp::os::Searchable & config,
+
177  const std::string & collection = "cloudPipeline");
+
178 
+
179 } // namespace YarpCloudUtils
+
180 
+
181 } // namespace roboticslab
+
182 
+
183 #endif // __YARP_CLOUD_UTILS_HPP__
+
bool meshFromCloud(const yarp::sig::PointCloud< T1 > &cloud, yarp::sig::PointCloud< T2 > &meshPoints, yarp::sig::VectorOf< int > &meshIndices, const yarp::sig::VectorOf< yarp::os::Property > &options)
Constructs a triangular polygon mesh from a point cloud.
Definition: YarpCloudUtils-pcl.cpp:290
+
bool loadPLY(const std::string &filename, yarp::sig::PointCloud< T > &cloud, yarp::sig::VectorOf< int > &indices)
Reads a triangular polygon mesh from file.
Definition: YarpCloudUtils-ply-import.cpp:523
+
bool processCloud(const yarp::sig::PointCloud< T1 > &in, yarp::sig::PointCloud< T2 > &out, const yarp::sig::VectorOf< yarp::os::Property > &options)
Processes a cloud of points.
Definition: YarpCloudUtils-pcl.cpp:367
+
bool savePLY(const std::string &filename, const yarp::sig::PointCloud< T > &cloud, const yarp::sig::VectorOf< int > &indices, bool isBinary)
Writes a triangular polygon mesh to file.
Definition: YarpCloudUtils-ply-export.cpp:368
+
The main, catch-all namespace for Robotics Lab UC3M.
Definition: groups.dox:5
+
+ + + + diff --git a/YarpCropCallback_8hpp_source.html b/YarpCropCallback_8hpp_source.html new file mode 100644 index 00000000..c2266a4f --- /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..b3eade23 --- /dev/null +++ b/annotated.html @@ -0,0 +1,122 @@ + + + + + + + +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
 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 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +vision: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+ + + + + diff --git a/classroboticslab_1_1ColorRegionDetector-members.html b/classroboticslab_1_1ColorRegionDetector-members.html new file mode 100644 index 00000000..c049b012 --- /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..2a0cf6f6 --- /dev/null +++ b/classroboticslab_1_1ColorRegionDetector.html @@ -0,0 +1,127 @@ + + + + + + + +vision: roboticslab::ColorRegionDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • libraries/YarpPlugins/ColorRegionDetector/ColorRegionDetector.hpp
  • +
  • libraries/YarpPlugins/ColorRegionDetector/ColorRegionDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1ColorRegionDetector.png b/classroboticslab_1_1ColorRegionDetector.png new file mode 100644 index 0000000000000000000000000000000000000000..412e6696c1280eefca49c6df7e931a3400be0208 GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0y~yV4MbI2XHWhL>?^O38W+fd_r9R|NjqUzIgMswExfq zAPbBS95}$*c}E_|od96s%rdo!omnkfSkgCe!*QQ!YJs{uiS+{q%F^pwPc1S-MI}^Zhae1qGhpkA-mTVRsVd&%4co0X6czLUbR!decBv0E8}WX{i=(*zlVg%ex5R| zG-!I}>EJouxvA5m4*mX`QwR*1hUg?7V2*xsp>< zo@!MGtjyV4wtDI6qu(s|&6mBj>8*MB)+gV-eYj^D7M1sL?lj$vyOytdHRF4x;p`i+ zx;ytyxwm5JnWbu>hyV4;XJ)pq3iB@BCZU@q6M9uJ|H`HNvwp2!s{422w5(;bHy=Hd zxbF6`e>amRS;vNkw*Lt`eK@_lG=aDOyqMrbXPFC|_MW-?9L+VxmM{OY}} z`FEIJtA&1Ab4S-Z^sCmR4BzUcVJ`R&;ac*-p!ZvNgMkU*2SMap5bBIlZ@G z)vNlalE7Gsv)t0Ta@9_!?v4}IKO?=D+ivOT*fUvq_Ka1lik-Swt+GZV{8p$gonkl7 z>-5v2oi#QL@1JoMDEWP|S;%@o`ugjgd*(c;bmDF>U$)$0>h#Gr{uzt~9x^`}-f`#> z#yjHHUk_#!V31K<#(h8*XdoH*fnku>%g>A!qRT55U0{09hm6->NOBHddsg%7GF9LC z4=)ry{+GAgWA-+Gh7C2##SX+M>w4$Dd2@qhTju?>s=B9>D*cx~%FTN=|7SL5-o~x{ zzPY)knWtY=?mHdu+RG&QuG`6npRRI;++=vJn0<4ZhWPfV?VG&Uez%&u=UhP~Tj=YA zHL>>;Cfx5dUO(;J<@4sQ!*{4)tTTwrYBEKkj){p=6)f3SD%Sx{}P`rtUQRABIQ^>bP0l+XkKW-=#{ literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1DataProcessor-members.html b/classroboticslab_1_1DataProcessor-members.html new file mode 100644 index 00000000..b670e7c5 --- /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..9f862312 --- /dev/null +++ b/classroboticslab_1_1DataProcessor.html @@ -0,0 +1,141 @@ + + + + + + + +vision: roboticslab::DataProcessor Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ +

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 0000000000000000000000000000000000000000..1cfb7363f0129e104deff01da92742afc05e8e0f GIT binary patch literal 664 zcmeAS@N?(olHy`uVBq!ia0vp^OMp0lgBeIJ$k3|+QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;Ygr+Ar*{o=boJQT7ievd-k3G{~!0M z^BBo}TEuGUufEPKtw>U_s(a?m7YUP0%rrGU1(z&QaTUxIx=N+n%-dhW&t$Y^!oLgn(;m}8GqTME0 z-tjUIRiAWqk^G{%>CWEE*V>Pha zukf?#Z^Ki4kA1SoxBuZhc_yzxB1lM~X$nh+f-0kuhi3x^ZtjnG)w5^Z*qJ3}LzTbq z+7|j={eF6VUeq+7H)X}T4CgD=I8Cn4T(Y|G?!TKw)8}}f{=TpK^qR}L*2}Ifjj;Z) zZfZ#8o&RqpU5)13{_DL}!t9M6>k{XxYdY$w{x5hDRo41GCQ9u0vUT%>KqEqje<*Qg1+IW3CT)S`5--qUt z + + + + + + +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..c8d02713 --- /dev/null +++ b/classroboticslab_1_1DnnDetector.html @@ -0,0 +1,146 @@ + + + + + + + +vision: roboticslab::DnnDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • libraries/YarpPlugins/DnnDetector/DnnDetector.hpp
  • +
  • libraries/YarpPlugins/DnnDetector/DnnDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1DnnDetector.png b/classroboticslab_1_1DnnDetector.png new file mode 100644 index 0000000000000000000000000000000000000000..f351bcb68c24e25fd8ac377097847330cc05f879 GIT binary patch literal 989 zcmeAS@N?(olHy`uVBq!ia0y~yV6*_T12~w0^ zpFDiF!yc&NS%u;{&Rs{>_V(IpUi!Co+RvQn|0bVGzaDvh+T-;1W;Y+0-xrwP*K%|A z?uM^h{@rX!e-p7+Hmlh9`*i!o4(S`k!><(u$S>VLr>|Qr>g$bQ)88M=?+cdeR7Xcl zn-Klh)qG3K?~jKa*8Z`29Aaw9bEMBWPvhLZ?6kb2d$)&vE;{CID;8;Vs^=wG`11QG z?RR%V^^ZRN_s#TvY1pH073%L~BK|%*eq`p_UqLbN^w(NHI+bO*QtH>5okG|BLQ`Wt z_ZdIhb?Y-{;bUHlb33+uUH(W*{H*o4kmEJE*2mvl7*`a$wk_O#zpys6_PMOOQqqc} zb2&GLpI4UmXD{5BS7j9aTv9sLu3DAV2Mj}_BRN1ZPmaP>tAG))YE`qq z@>Q=Cj;vf|^@FWYbE%2^)E%jj(|$7i5aDl_IrA%{v&?~7x&D)9&;DvqMrJYtA(DP$-Rc*G#nV!^z99}bI;rOSk8LOtgO=)b{V&yZb{u{7SPK!V}{PV8+|7xre{X9Cr9;UK4tZ_nPw}8MT#by7eC4y1doG+W)T!gK)9`oSUn*AAMTw_4;~; zbpE#Q#_Mwb#y-m1|9I9XOM&#m*Wd4WFJiuGRrc>ytMcw=ef`b$X3w05Mhk&a^r7|< z!!yMrjKGY*z~>~>&@90IKmm!HFEBmG>oenrz<-Rw2^D+(q)gZk%!>@3u6{1-oD!M< Ds9DkG literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1HaarDetector-members.html b/classroboticslab_1_1HaarDetector-members.html new file mode 100644 index 00000000..e5793f0d --- /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..5ce8ddca --- /dev/null +++ b/classroboticslab_1_1HaarDetector.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::HaarDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • libraries/YarpPlugins/HaarDetector/HaarDetector.hpp
  • +
  • libraries/YarpPlugins/HaarDetector/HaarDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1HaarDetector.png b/classroboticslab_1_1HaarDetector.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff07fd5cea056fa30b65b62baffa997422943c3 GIT binary patch literal 1002 zcmeAS@N?(olHy`uVBq!ia0y~yU~~eq12~w0WVBRI7m$(&@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+FU_=BjREAmsIA^(5*5~X7A5#Ua#$=6x5e~mhIK9%$df|&!3L|%A^z|A0J$C z@PvA0T&q%2pKz=1h2;f$dTW?f*WR~E=~<~ zm1|{!ynoEN&wJ(5{T`=KUtZaxe*y&Z*kB z+;2PAcgyls2HUqwA6~dIXvZ;ruJ1=)&AcC)q4sIzp*wM2^4dCouPw>4=vxxbbvrtA z@rFq5-b45DzRI@#eR)&9HTR`9m$vrVsEl8;UvJyEUu@Qsb4&j(`0#k^haJlCk=(8> zQELv>PFQ38-puXHv#9s;wl1wzl9Qe-yYtCSd!_d$=4-xrd!qQ~)xJG7Ywwg^yCyzc z_9lyqOVlo|^GvH&{TI&%1~HF=^~BJtG7AG-o=hoo4+|}B0Y*jetj;y7toRlNgkE*k z2nj6}72h5>Bgm^cNOR7zOev8D{Z9-M^A_GW5@D*SuzB~O;Kg>HRtC9w z@5`9mo%g3|uoMX0=4|K=;CP@U!nA{#|oP~h6DT`v;VUGFj^>Zz!j)f zkc%;<#fd?jAor-hmJcvBG45bw-k*-D@o2B;tqYs4J)5#CGgA9+-*)Raim%^RGxVGk zZEdjp=bCu=i@4~r)E&CYPa|WhZRS6lue#&-w(Oj&#Rls6&#py>Tc;h2*4 z9kn-?Cfn2&gA&2#8uOF0x8%(}oAv3vC71PFrNF+!F>9-0ukBv;|7xzkh}o%p>xt_% zOoV?f*f4L+*OMA&#HU@#*L-vSkXxel#M|4pePI`^+aneilJS4p_3VeeqTkA%?EI7E z9=9*d@$L-&-&Q-<&-g8N*=E_B6W>EP3?y&|!5z0mFHK&q1Ji%<@A_KvZPwAv|9}~j N!PC{xWt~$(698+c!2AFJ literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1IDetector-members.html b/classroboticslab_1_1IDetector-members.html new file mode 100644 index 00000000..ba9fa46a --- /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..ccde9659 --- /dev/null +++ b/classroboticslab_1_1IDetector.html @@ -0,0 +1,115 @@ + + + + + + + +vision: roboticslab::IDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
roboticslab::IDetector Class Referenceabstract
+
+
+ +

Interface for object detection. +

+ +

#include <IDetector.hpp>

+
+Inheritance diagram for roboticslab::IDetector:
+
+
+ + +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 0000000000000000000000000000000000000000..0c920b4067b3d6b3998cf51c50353bc1069fec29 GIT binary patch literal 1468 zcmb7EeN>WH7-xCZW^?XCEj4vJqq4P=&Fs~cv+`s0&IB?_O*`sLme9*GP0;|OKXiVC z4mUMXG!>UgHYGnu6pmWdP)vatABi7@TZ*FikwaxKZvX6$ZD;qKd++ny=j(TW_c=EQ zgF0qw<7|UKAZ)?oL174l1pv#K%@**wDto6M-nL;*V1rF26DgJR%)F}k)WFGRLv0ey-We6B_6ia$T_gr^op6?tymM8zz*AzICOLn;9$l=c^ zwj5%EQbzC$xE?^WR_IbY1a|fw`l;3T9m1h1A>lTFsS+r46TAd4#s9 zfmAoHUFNqC-7hB&H1Z3`nUuvjv=hc0@hr%tkM4P&_ZtVmjCwXb7*7@Tk54SrtZFnP zCf9>#iYQx>Em>w87R3TKU0&1xyB**RYax`u6g$$bj;R znc?fMoyNL&=$+SdayKBt3MSS;Ze?R15e&y$o;e9s9if?h{(jt~(xqm)dtgRmV(lz# z>|fJ2Xp0lv^MRSP*jfevKJ#N7k4?LHCH~xQA`eK0QmsquP+b*Nvc#w|3IZqV zXJ3D4xYhP9G0T-jWf@#JhdHdoQ$R7nE2G`rrEG6FXDD*dABZiX)5 zAGUtGPztDi7;nmyw(thE*zQT`DMC|{&q9Vpg{{A2sd`l|N3*W@%oNcLTNkeZQ4jgA zC{%L_Jk)w(|J4r8Gso}TWH@e^+V62Uk*mKwefhJQ)`fz-C> zj;=@C9N8DDh3~}CKvb4?qDB8vXI$;EH0IqelMElA@%vRy?s8n?z_PMjbnf|_Gjyg` zecoKFRmllS=98$*9cyv5nx|S7Hmyj7gIGg2o-CY@+(Dx*H&D_@ zPma-vhMv;NH%G_@bl)Mcm=wgUtm9!{B^||0HHX%US`>Bm_rAE;3O^p>#Y@i3uNY)e zyqJNEm->NTdrh|hf=@4Ug + + + + + + +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..779f47c4 --- /dev/null +++ b/classroboticslab_1_1KinectFusion.html @@ -0,0 +1,122 @@ + + + + + + + +vision: roboticslab::KinectFusion Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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 0000000000000000000000000000000000000000..8c56780e2a98793eb3d0824462a73c956e8680d9 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^=YTkXgBeJst=)ALNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~6?wWihEy=Vof}y6SV6!=-goNz`X^f_ z8uCabo;+C<+11kLAZ7Ylz^9H=v8B?5VTLO=dqRk=OhaI);BmJ5?r(3W=FD5tC>&>< zJC$?At*cxAY4RmRu`f3dY!`X3<=lfMGjgB4yPLaEetOKa`Q5*GGMs&Py^M-9@iVPF z&v)Re=A3k+%zNQk>*K6%wC3@o2Ak%Gt`D_fFJq9M``hZ=8x}9^*{gZZ{5!S$(B>8A z`{thPWPkDEd%>A^Hy+-|3fQ#$$Gx=Q;TFHorWf$ppJwy}85ug~bb5OD3Ty7o_Hp&x z$5-d{{|ij@-k-ZJy3>U9wAEAJ*J0c4A7cFBzome|?dl;$iBOP_&bA9Xaa`tjAiaz6 z%;KE|dD~Z3JUg`W@|h#XlIK?CFg(tB$k4N@mDymG7~g>vQ5Fn~2?|UXP40=mpnFW> z|Gth%Cf#CvD!r>(l|2`qI?6f8Yj^*f-YRIoEtU5yy?xZ0&DU?;`A8YhWu*mu0rw_& zt-2LGXK^Q&UxnViYj?$d6;}T7H2=JJ&UQ}Im&>wKFIrrEvhQx%gvD`&lf0_iKUdk7 z#~-_wAU-SDV#A8K)df~%oQJJ!UzS@hDS5sA@tJiCE_HcI&S*Wo`zAOXSDL4OUh+?A z*?ji!Lgc`-ZoE9_&o;A~w#T|r(Oi4Z7d1S-&AKwr{;$>a^XJwDl#8X+@A+jhf4=Pc zO}73^qHkWxpPd~#IVbhBpC$YDO`Z#L + + + + + + +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..7c898e36 --- /dev/null +++ b/classroboticslab_1_1KinectFusionImpl.html @@ -0,0 +1,135 @@ + + + + + + + +vision: roboticslab::KinectFusionImpl< T > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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 0000000000000000000000000000000000000000..8347d39170ca1d6a2dbf66b54c5b44a13a635844 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^=YTkXgBeJst=)ALNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~<$1a|hEy=Vo%?p%BLyB;^X1t;|MlD4 z@@LZA7WbU*a95Gemdq1v0{@MCFPrquP{|Zw?Nj->>cGS$aizlQo>sStQ}UlAe@>CJ zc(!x-Pi4*g^ly`%yj*TE$tU~47N_h9UYAm14|=|Sqnl1sgu#~R8C%1ontzq@}BLMz2SUXms=ltta`Ne%~qc0N9L-SmgJVtxjD6Di}KFC z#*^#chE(W%+MJwT^hR~%!uJnnyjf9@V`{Nz`;WLyf3@dW{p30Ka@(8-Tkd#HTD{w1 z`+2|671G?n^6U4vJ`UX${(sG;v-gdzEp?gIlxmyn`8sS{{zH#T^@~7$5w)0fWi^xg zq^heG7MD$Y4|6;)|H2^Qp8U{8&iP|c>*pnso#_U1R^%}J)hb}93Vp!vWz_-37om;J z7gjT|F9>Jlb6C$M(*QJvVK173f@sa9CVd_Zi#4DcwZxC#tLpQbot!i84D)fD?^~|O zD`Zdo`+G)=eRv_mWhslbXY(d7MOI5+zUjh#?oM>ad~ndMow2@qqtujTYIlCl+Nojl z^vS;6M-QfLz0KfW-M)GMzS8pJ_ZAr4b+Ra&xOdt^lRIZ6u3h$uPxYwV9HnpHaW$vk z{C4l%+tbd@>;CiR#>}W-G5=4phP9KE%nN+VLM*mP$y|)C(Z8wpKtz528s7O2E4ss` zG37`571We-e)@L#?#|k>RZe#!X8fwyT4-l)9hVyIza;wRvwX?yu*o^8w{3C_cTD9C zx@os6hr#w$SWP4Ihi)kz_6M6_fm8L@bLo^z8o!vQ_-oI)Qu~n;m>L;8UHx3vIVCg! E01!}JKmY&$ literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1LineCallbackPort-members.html b/classroboticslab_1_1LineCallbackPort-members.html new file mode 100644 index 00000000..a01b97da --- /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..26c32d33 --- /dev/null +++ b/classroboticslab_1_1LineCallbackPort.html @@ -0,0 +1,119 @@ + + + + + + + +vision: roboticslab::LineCallbackPort Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • programs/pointAtObjectServer/LineCallbackPort.hpp
  • +
  • programs/pointAtObjectServer/LineCallbackPort.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1LineCallbackPort.png b/classroboticslab_1_1LineCallbackPort.png new file mode 100644 index 0000000000000000000000000000000000000000..43b23894d9a9c7a26b0652c354996ac40571bd7a GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^AAvZ4gBeKv4^1urQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;?Gt_c6xJQ8=&R^2kJgW_uY0?#uVY8`{#)y~^zLZ* z$LM@owqNkrt*!TV-fLI6Z&Wz5aB{rK4Idd{gc))ah6)Kb|syuCXs`|yvI4NU2 zQT637R=AHoH>8J7|se>{7`)a?`K= zJtKF0bMww=oAi!c`8TK2*=zU0bN~0YPnc+N<4t7D(J!`- ztWL|nDKyKNGdbav?LXO%>(75I40~Q&S<&b0R6A!!=<4<7zh`~@RJ`%mlCRBqOUvY^ zWN+QA=5%Iz)ZXXT2R6p->Sz2HjS@i4LbGS~E~($x-L-7-d4`3+bj{%D>gTe~DWM4f DW6**w literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1PointAtObjectServer-members.html b/classroboticslab_1_1PointAtObjectServer-members.html new file mode 100644 index 00000000..24e86d8f --- /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..b97fd973 --- /dev/null +++ b/classroboticslab_1_1PointAtObjectServer.html @@ -0,0 +1,131 @@ + + + + + + + +vision: roboticslab::PointAtObjectServer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:

    +
  • A VTK Renderer and VTK Render Window, adding axes and floor actors to it for spatial reference.
  • +
  • A LineCallbackPort object (LineCallbackPort implements a callback on port reception of point data to update the Line object).
  • +
  • A vtkTimerCallback object (vtkTimerCallback 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).
  • +
  • A SharedArea through where the Line object information is safely shared (internal use of semaphores).
  • +
+

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..2e2d1661 --- /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..76c4e482 --- /dev/null +++ b/classroboticslab_1_1QrDetector.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::QrDetector Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • libraries/YarpPlugins/QrDetector/QrDetector.hpp
  • +
  • libraries/YarpPlugins/QrDetector/QrDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1QrDetector.png b/classroboticslab_1_1QrDetector.png new file mode 100644 index 0000000000000000000000000000000000000000..20e03869583ffc7a31af2ad58c399dfee4ae0cb0 GIT binary patch literal 993 zcmeAS@N?(olHy`uVBq!ia0y~yU^D=-12~w0?teVQ8=DtNd>s z_nVbvh1vJ2vWvZCIxN2qay-%3Txufu1oB4oCWJsvN|EqV~&)2Bt$iK5%VDlp; zOFQMHbz3CCrzj`;Ea@^cLGiUniZH0T=;^0%eyg{*f7mYghK9G^)6F_N>t5Gp#uk2E zbT|EGq4H!^-v^&t7|%H14vWp)Ku_;vs8FtFxb~;iZ=t;UabSLA@O1TaS?83{1OO*X By>b8m literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1RenderUpdater-members.html b/classroboticslab_1_1RenderUpdater-members.html new file mode 100644 index 00000000..29f42793 --- /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..b371e618 --- /dev/null +++ b/classroboticslab_1_1RenderUpdater.html @@ -0,0 +1,132 @@ + + + + + + + +vision: roboticslab::RenderUpdater Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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..78838fc5 --- /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..eb43e2c5 --- /dev/null +++ b/classroboticslab_1_1RgbDetection.html @@ -0,0 +1,153 @@ + + + + + + + +vision: roboticslab::RgbDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • programs/rgbDetection/RgbDetection.hpp
  • +
  • programs/rgbDetection/RgbDetection.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1RgbDetection.png b/classroboticslab_1_1RgbDetection.png new file mode 100644 index 0000000000000000000000000000000000000000..b8adc82ec86223c2f4f7fa055f994ee921f11a49 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^vw=8(gBeI#PWXNjNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~NqM?BhEy=VoqKW9Z3Q0IaDB`F|Bw6T z8i=)}Jo%XWGDLX3M30WHkXM|cadgNG72TC7lb7t6~B;OmeN)1_TN7b*DK0rYn_Ze zy@7Y$`pM>=zgByhd3I^vRMA{#K6~cPSxgmv`VFpI4Q{{Qs(0s5PX3nEhhb@_?O1m# zPGRoQzRB>&%dBC?BwmGexVit7&5Sp@wleChgsPF+^wa%)Wd7x6d8zs9>eg0Q@mg>Q zBrxAGO_p9)>ffHjAa1%Xcgy<^ws&Oz?Ynw^=BA%X7iL#={hhjL+j{x+Th=EwOg=0e z?fEvXR^^w(*U8t}B{GRN=Q)w6SQ4^_9Hz53;l zS!r-kP<-ZM_nXhw#rURIzIHF%_Mvk3hOf`hzW;N%a`wjFUt3J>Zt&mU&u{tS^5gGs zKRo|+g + + + + + + +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..6372719d --- /dev/null +++ b/classroboticslab_1_1RgbdDetection.html @@ -0,0 +1,156 @@ + + + + + + + +vision: roboticslab::RgbdDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • programs/rgbdDetection/RgbdDetection.hpp
  • +
  • programs/rgbdDetection/RgbdDetection.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1RgbdDetection.png b/classroboticslab_1_1RgbdDetection.png new file mode 100644 index 0000000000000000000000000000000000000000..52dd5db872b8cff314569bcb6e13804fa8771d50 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^i-0(QgBeJ!EsL`TQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;3qAGhcK|Krio zQ5>zSW?OCA+!MpibW&0AtElnjjjf)SPR#0h%G$n`$Szm!&cfkeb)OX;D4N3aoH7>^4ud<7oX0$>LUBuYT5Of`}C&UvQ0XFGiK4d7I*pob;qej zP0C)ZXtu1ady&fD7~#N4i@=U=%1ATY!tm}Yb3#sU|Bniu^A>iGoGh#!+c#KfODU}D zj9ad|m!uHd=N4 z$;R0?U#&O&zU86%`8w%3I|r7S*NSD&%f7#5F8LeMk)3b-;?i9nJNe(;nnx9MS4^)u zlIv|YS-IrRnRs9O*1JrGGb6+0pW9V^eXwN<$CZE8^E3qKE?qZ&&Nrj3UR#NsPjj9e z+;{r!(RnkukMMoFudvHyzCiqp!qUf8+m*ig?sVDTk#zUB%*V&OE1cfkag}dhz59l9 zPH2hNi8R;s^6xjrUp!v@(crb#t>2kSOm|lNK2yhfF*cxK!aiZw|KaQc7p@EO7WBis h`~3CQGdU@L8NJlwclNs17XuR!gQu&X%Q~loCIJ7ZF6jUO literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1SceneReconstruction-members.html b/classroboticslab_1_1SceneReconstruction-members.html new file mode 100644 index 00000000..2c6fa019 --- /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..537ed096 --- /dev/null +++ b/classroboticslab_1_1SceneReconstruction.html @@ -0,0 +1,165 @@ + + + + + + + +vision: roboticslab::SceneReconstruction Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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 0000000000000000000000000000000000000000..4fb297665436abb5180f50a91b8188131dd01d76 GIT binary patch literal 1055 zcmeAS@N?(olHy`uVBq!ia0y~yV4MYH2XHV0N%1?*=0Hj!z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op$1taWgmnd+&d* z|7sRw>V4zgwg{i#%6MRGAKE z)HwK7)qeW^pduhGj z*{OG8&fVWA%{*Tm;7?@?YzhI>E$Ei-`k{&ua+j< z&bnsFcX!>I$Q5}NwNrO*|6$9zSXb4PH-D9;@XZx`s$1JbH?!V+@$KI3+0VlqrFE9B zSv0q}-YclqWO8_r<*py`;mKwbDusS8JiGguhwt_^@gbAT-@Hh?y*aYXKhjTLOI6bA z$;DlD!M^uyrDxr03Ok-7`XJ=&)9oLsvwXy^Z(K8ZmCe&7i&vhGr%DwBqEHOD{f7YvoY%gV3NWPuycy#)b)q9pddsCu#Y}Lzq)00iZ#ml38 z&Hm3hZkKiMW;ExD)s>sith0K5adyh>Zk5<4ZjPs~UYhf!$BWP3`89iSymMq{?|Sa9 zQ@j4Io3)vH(wD-#ec37}E%QZ8JfCrxPWtkH=jt>8*({Zp|BLr8@SNoA)T^>n<%-87 zZ#ZLF$mAd|;eeH%noBtuew4~F1RI|1a^h`pm+QZI$7l1R0Oki1pIfOF8-qoI(^jVo zuhqE1utS9ae)6%xMvYm4VTVTw&jHniY~DJ;o}2}AkvB5l=hD0POU_oq zrFUEG>>1SeIIUY+C}TR~Z1`%%GldJ%GXG3itZit&g7L+SNZ%;A6Hhzq{>2#ou-dzC zTKCUeW&ONcU*1gKeXmPO_;TyBgV!^sO25fjb#Zyv=BZt&f2$wfsNdSFSK@o)-c!%~ z+|LWP-$@j|dG!4L?7mN-;y)%;3kUD@IphZRgy3_V27mVZA38 zac*3@>n3juuTa*y)s}vJx?zXU7OSS+H(HpsmdKI;Vst0QklBI{*Lx literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1SegmentorThread-members.html b/classroboticslab_1_1SegmentorThread-members.html new file mode 100644 index 00000000..ab4a08fe --- /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..3b3ddbf7 --- /dev/null +++ b/classroboticslab_1_1SegmentorThread.html @@ -0,0 +1,246 @@ + + + + + + + +vision: roboticslab::SegmentorThread Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • programs/voxelOccupancyDetection/SegmentorThread.hpp
  • +
  • programs/voxelOccupancyDetection/SegmentorThread.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1SegmentorThread.png b/classroboticslab_1_1SegmentorThread.png new file mode 100644 index 0000000000000000000000000000000000000000..0d7447db507338df38c1cd8537fafa00ce82d81c GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^TYxx#gBeJ+A6q{KNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~<#@U{hEy=Vof|pnwE~Z8f8DQl^~cXM zH%rJI|0}d=<)TBqy*dw@1%8MdZ@$^$c_}99!Xy(X?x;y_FPbkL-#6_^^v(NKCk4(m zo^lSl_{-m(v-a;ayF;}HoL}6ndf{_#-o&@hYaTb}c=5RQeCL_j$1SvXQh8aa;G~e3 zY*w4ucd7;7y*1;|W`iU9O(y?Zs^~OH>uze)q|jCBq1Q{6PFoT?>l<%f(WHi;DKw*R%X8 zOJ@I*S!}~J=cN3>z05COefeED>#4lOarR7KwFdo{>tsMqOY~ z-m-wvEyIzy=Ry;k#6nhH11D~&gcdXf*Uy|u6J|4*4ikRmG=16H@ZV4Bp6+^|(_ntZ z?VddM!#y#4saX;zC;MW8;D4R%eLq!8Zd^Y*Th96W<*+=}?OJU6OrP!c zF%P(Yp+9?9Ynkca`A-YOFYmpq{O;DhmxX`++}Qi~-S^D7lG|CMGwQ2acx|6`|CoAl zKj+=Npa%XIt7q1I2xPB_zOTpM(4P$pn7@w`(#)p+W3)S#IVVV3U^g%=GI+ZBxvX + + + + + + +vision: Member List + + + + + + + + + + + + +
+
+
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..928783e2 --- /dev/null +++ b/classroboticslab_1_1SharedArea.html @@ -0,0 +1,118 @@ + + + + + + + +vision: roboticslab::SharedArea Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • programs/pointAtObjectServer/SharedArea.hpp
  • +
  • programs/pointAtObjectServer/SharedArea.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1Travis-members.html b/classroboticslab_1_1Travis-members.html new file mode 100644 index 00000000..790b91d6 --- /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..324686b0 --- /dev/null +++ b/classroboticslab_1_1Travis.html @@ -0,0 +1,933 @@ + + + + + + + +vision: roboticslab::Travis Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ +

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:
    +
  • libraries/TravisLib/TravisLib.hpp
  • +
  • libraries/TravisLib/TravisLib.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1VoxelOccupancyDetection-members.html b/classroboticslab_1_1VoxelOccupancyDetection-members.html new file mode 100644 index 00000000..3d930076 --- /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..67102bac --- /dev/null +++ b/classroboticslab_1_1VoxelOccupancyDetection.html @@ -0,0 +1,154 @@ + + + + + + + +vision: roboticslab::VoxelOccupancyDetection Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ +

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 0000000000000000000000000000000000000000..a5838479b205973e2d11878685ee7b0867cb037d GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^&w)6AgBeI(eLCqrkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~s`hko45?szJNM$W)e1bW<#AR2{`cqW zHwm@O%*;KWnQ~P*$@z?*!M>!lGRDM7B5{+0Cq2q2@(Plfdtm0Rc**zTstocc%&I*b z(hHtlKD9mO$;1AlWruW*MlO39{!^#kq>$gj{B=%1n;Q3|FB9U9?0lFO+V1oAq2=a@ z+w-o=>AYV3O7o=D*2)+A<}06z?K}7UjJ59ZJI`~z=jKk1*>W|1b#=*Oxp&S>r6!$R zy>k2Rr{CXxpEIe%cI!mnD8EoBe{1{OIeX7Ozxj9D zv(Us+RkQEioV2u$tRHUgVvKPRf4JxF zI>su&bJovP9o8SR{H^Pt;_KI7F>4M3P%$IW%S=ZuK4Ixte3DbZeX_7ZpPIUZ44Q&H zo@r^~0&D_tF!@r;ziWT5*?RNYyZNa`9x=P-TFD=n92NCk<5JxQ{sN|V71N3nSu29p zHp{6W@RLs86}72!zs}8gzn5t{!;{LE>3T;+3dLMY@qV6LdfleXe6`IQzHPzgH?($i z8SnPIw)*ndRde6?@Mc_zjC{NHufc~qJhICdC%jJ2JF@ur_N^~i_I#gs`Igh~@)dd; zK3|>mx2O2PKc3~cw_Bfkbgp>aH2Wtd^Qtvt%`ysi&D=k!_)XS%%Vod2Hg6B^P7god zxSHKUzRuoSx7;;P{+92HOD@NDm_GlPD#3pH`J3itc&kJXm>cKg-um%noBT>jqR z&5nJze|~n3@9S@Ww;kpzShuh5NyHra!<7bS{2$s#J&k|FQZXGCX21UDni+GiuP?Rk Wx}vzTNeq}Y89ZJ6T-G@yGywpxIBY8b literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1YarpCropCallback-members.html b/classroboticslab_1_1YarpCropCallback-members.html new file mode 100644 index 00000000..15794232 --- /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..78e706a0 --- /dev/null +++ b/classroboticslab_1_1YarpCropCallback.html @@ -0,0 +1,128 @@ + + + + + + + +vision: roboticslab::YarpCropCallback Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • libraries/YarpCropCallback/YarpCropCallback.hpp
  • +
  • libraries/YarpCropCallback/YarpCropCallback.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1YarpCropCallback.png b/classroboticslab_1_1YarpCropCallback.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3e3913dc617d0c5848cac79b92bc4e02846ca0 GIT binary patch literal 1005 zcmeAS@N?(olHy`uVBq!ia0y~yU{nLL12~w0WV4t?1CWvk@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+z( zveFw=&Q_YpewUc{&36BBKPz8%uS=_2j`$t=+j_Ocu8gd#>)mFDI+bH2{biLTK0^%UcXUt_QE=)}gh=l*xE+y3};S#($H>+fEyvM#R>E_;fzwhqN?B6RJ_;yRg`#YI}eZRie>@2&ayZ-)MpLI!5(?2eW z)=Jto_3p`9?RBNb9G0G+t}n>!(Dmeuo2l~G?tAg{B{K0PlXkt%T9J5q(vtY6b?+vX zFxFr4e6_B7VW0YhCHEhIL|DU1CWUxh@_>c?QqM_2UXxXp+L+9oDVmn1&QK#2&%k;> zaw(_6m&vrl!IQ~D)0aULD7(~zaS2dv$|aTwL9-Zwyo4RR zGAWV#>EfG~);ja1q=W-wfe)%te_Vb4y7ce1_*{2?tB$#QrcJ+O1841Rp~71~-K|s%YXg&eA18a=fBsVZ-2dcTF(8_`p()XM(M8~svdDzm%Fz< zPOp0(=L5C;>?}!}`-!L1e{0|4iRG1ep>ECn#B{qhTi!c{cc1@dNd+?%Uk?cPJ2%56 z;M(<<5*ceO%(r&`&%64!Z`ryRZoa>7zxf+?af|P(>CeSp*k3Xcd+0KmvC(@L->E&( zXXQgm^xylY&)Re5h2ECfo3sCY6?@k|`CWmf-OE3g*WO2+UhqyQr`3Xc%l56Fk3FBC zJ7#XXcdra%UBl)z{~V7&!?$LYS_A(g)PR + + + + + + +vision: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
roboticslab::test::ColorRegionDetectorTest Member List
+
+ + + + + diff --git a/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html new file mode 100644 index 00000000..585b1211 --- /dev/null +++ b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::ColorRegionDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • tests/testColorRegionDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1test_1_1ColorRegionDetectorTest.png b/classroboticslab_1_1test_1_1ColorRegionDetectorTest.png new file mode 100644 index 0000000000000000000000000000000000000000..0b171c04c20e2686a6c5478d12cb239cb1e87dc3 GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0vp^-+(xPgBeK5c2;l#DTx4|5ZC|z{{xvX-h3_XKQsZz z0^KumAG@|Ho%< z+_>YiXJzaoA5YVgHt%E$u@mc;OqpaqQRU=prszp~G&ZQ7?4FkNy}xeT+p9%YQ$was z{rJOVo61b7<8|8K#P-V^S-gw&&zn`(?ya61J!x7->6ZF=^Oh`=*!pVuHm^%UwS2qP zR{b-*`0nncEiR`w7O%QhueZ^9yNd2b^+mDf>lW8e{G$5ue(CYMda<9K|E=D5+h<R85eW?fJD>wDW{CglYtcux{%-KJ7` zQP_IvlslXc^lTaaoK*kz_~E46>fa{cQr;f?=EM_*I*}U;aU@{*P%q7&!kh@`tF9Wy_vJ}kX@M7YWLGQJl9sP-KTQ4KusfYjhlKm&pyxNg4+{)m2Vvj_Lvg% zC`{_F6ry z+xI3;{QP@!ZR6d!D^6$d8^^g-&q+w!U%S26`QHBKo2pyfm*2=Oc~*Yg>WOiV_T=Y# zveG`iU4J_#*V_2g&%0(um3wzbs^#kiY~83f*<7|%Eo-~U-#q3!YmV;z<@QD`p5ae@ zZR(c(%{&|2?pK{)6w}(k2uwGOdtP+T4f1;Tg + + + + + + +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..2113f7e5 --- /dev/null +++ b/classroboticslab_1_1test_1_1DnnDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::DnnDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • tests/testDnnDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1test_1_1DnnDetectorTest.png b/classroboticslab_1_1test_1_1DnnDetectorTest.png new file mode 100644 index 0000000000000000000000000000000000000000..614d7c94050c7efcda0c7c935629325ea6ff6941 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^$ALJ2gBeK9+A)zINJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~nR~i8hEy=VoqKmuvjR`+{ySgx{FlyO zEyDchn%~yRRx`imD7MY-Z>i{>d6Tup^U`^3OBKz&NzRiVy^!du>#MG}$<@@Gbf@?P z-?>K=RF!y<=PT#h;sa#)qT;A>s zD7gpJzVC~zeeFd30-4gOs+qy}JB};LTY3I+k3XgDX%%`>(X()h%p?)_az5kD_r(v~ z+{GBJd-~AoD=6_}_jy-VJBITovpTGT;czRXr z_=-5&ThU*$eidKd_H|WH$<1r|o9p + + + + + + +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..41cc7ce3 --- /dev/null +++ b/classroboticslab_1_1test_1_1HaarDetectorTest.html @@ -0,0 +1,120 @@ + + + + + + + +vision: roboticslab::test::HaarDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • tests/testHaarDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1test_1_1HaarDetectorTest.png b/classroboticslab_1_1test_1_1HaarDetectorTest.png new file mode 100644 index 0000000000000000000000000000000000000000..61a56121c387089120b6cbfb337db7bfc8bbc18e GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^XMi|>gBeIBMP&T|QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;tL>|HrRu zX*p)}FD@;b>2p&^g;l)sb+0%E2=4_rZb-POJ)!vDf`cqUcONA9`#;U$tRmT);mws{P zi7WRem4ucbdLmxEv!-?B9-vHKpO57axtaQ{{*(M(9)EwPZuR^$zQi2U(_gcBPnu~p z1yy=q3cbs!>?!~Ch*|%EJ3soogTl|dJX^PZkxK1_dwYfR_daie{ z@m%@+mg#%7{wqzp`b*8IH`L?J+X)6o&3c#Xs-JSv-}PvYwSnj!-!oNvwod@WR0FryR}CzS?=~m(0w^@=*rM@6U9bHMeP_`px?E zsLX54nW3Av-(8*dd40sSu+4w`C*Ry@wr=jvb8jk>v*xW#J9;(m%HMMgfBLy37~oin fS8eGOwu|=7MKyx^B%VYA6BmQ0tDnm{r-UW|RvI;y literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1test_1_1QrDetectorTest-members.html b/classroboticslab_1_1test_1_1QrDetectorTest-members.html new file mode 100644 index 00000000..d9c8ee1e --- /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..c8c779ff --- /dev/null +++ b/classroboticslab_1_1test_1_1QrDetectorTest.html @@ -0,0 +1,127 @@ + + + + + + + +vision: roboticslab::test::QrDetectorTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • tests/testQrDetector.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1test_1_1QrDetectorTest.png b/classroboticslab_1_1test_1_1QrDetectorTest.png new file mode 100644 index 0000000000000000000000000000000000000000..849a135fbbd8141e737c71705a83ac3234ac3637 GIT binary patch literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^`++!sgBeKHtA!*3DTx4|5ZC|z{{xvX-h3_XKQsZz z0^c08u-w%GUje!1C36J)BcAG6&#bb~V(cJoooe%=^YsiSpM_ph8USZ|eib8X+==jRtm7?qJ9Nr@!Q{`2RP^75wtkYTf_9zcL^Df1R(bxl(^^zgEue`b($&yjyKN^R~NQ z$FBb-!e2LLC;#7mKfb{eIV|4Ymp9&=`IXsyP4P?b{JC3zsfxkV)z4*}Q$iB}&gEF~ literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html b/classroboticslab_1_1test_1_1YarpCloudUtilsTest-members.html new file mode 100644 index 00000000..ede34538 --- /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..d17f373a --- /dev/null +++ b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.html @@ -0,0 +1,123 @@ + + + + + + + +vision: roboticslab::test::YarpCloudUtilsTest Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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:
    +
  • tests/testYarpCloudUtils.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1test_1_1YarpCloudUtilsTest.png b/classroboticslab_1_1test_1_1YarpCloudUtilsTest.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d109f71ecb3baca69c1e3ff918203dd2bca246 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^SAaNxgBeJMDXxA3q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0JUm?-Ln;{G&b?i<+JMJ(dfcY}|NH%= zawh1T`1U7e^)GvKg)K2Na#O|8GdZS-leSD_@|u(u;NW?QM~X9a{g*l4#r_GV6*^krk7Mey;ppFjOR9FY3m`>)>e zjQKlNLa$9SaZ+BW@-q7F(^qCI4(@fB}Ye^xq#7YYQR&ax7@r}vZs8{x!rVKXZznRy1$oATh>}>R4lzSUCI95zb=-a zuAk31F15H+yFGNRGyBy0H`*(&%{5uJJdMpnYwwRGQ@X#LI)C>yOJwS*%^JrFONR=mp)W@Yzx({`*v)6(sT`&9qh+Ao{;uR2i296BZb{KMk`xpPeuOJ_e5 zJpSML>eF!RH_o*+%d8UjwtuR=WFc9;tm>}**9CdsKkMqWKRDa>?&+!b9d^?vYM=c3 z_EPcATan+b<>u51G3s3{?PKOjm@}<~X@?su#A<69&z`w<$zJ$oBac(wDHdQlWAJqK Kb6Mw<&;$S@9YPWS literal 0 HcmV?d00001 diff --git a/classroboticslab_1_1vtkTimerCallback-members.html b/classroboticslab_1_1vtkTimerCallback-members.html new file mode 100644 index 00000000..fe7b692a --- /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..93de1db2 --- /dev/null +++ b/classroboticslab_1_1vtkTimerCallback.html @@ -0,0 +1,202 @@ + + + + + + + +vision: roboticslab::vtkTimerCallback Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ +

#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:
    +
  • programs/pointAtObjectServer/vtkTimerCallback.hpp
  • +
  • programs/pointAtObjectServer/vtkTimerCallback.cpp
  • +
+
+ + + + diff --git a/classroboticslab_1_1vtkTimerCallback.png b/classroboticslab_1_1vtkTimerCallback.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9c03bcb1c9277e99d116ec5020ab7c9e5279a6 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^8-O@~gBeKn>GHn=QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;CJ+A2A|9Jsj ze$|fJ(l_gDCcW0o+qHPrzOKyl7j0}0F6}gwQ*+PF@mbb<_T4vzdj_*kZk%;HLwB+M z`}OP3h9#`qvOBZaDm&)JZ0R4DGW*!gA5AOGj$wZ1l*FQU?;lspy_*K>f4zEl;O-&* zhUc&CS>>FQZhfCU+cJ5^{97zFmTkw&?d^9>p73FD{IL&`zrK9&eqB55#=pOjA(JPb zcD$nV@N>ae(=^WM+i!h7IX|tz0yzxAXPFsCyVo<+?#Xi1o3w2jFr_efy85}Sb4q9e E0Q8L?V*mgE literal 0 HcmV?d00001 diff --git a/classtinyply_1_1Buffer-members.html b/classtinyply_1_1Buffer-members.html new file mode 100644 index 00000000..fde97795 --- /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..cfff7e0f --- /dev/null +++ b/classtinyply_1_1Buffer.html @@ -0,0 +1,129 @@ + + + + + + + +vision: tinyply::Buffer Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
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 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/dir_1c5cf7249402b1a93ff9072b579fee69.html b/dir_1c5cf7249402b1a93ff9072b579fee69.html new file mode 100644 index 00000000..5c5fa3cd --- /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..b0679197 --- /dev/null +++ b/dir_1ff92a5f4657b0e0092e7258fd44661b.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteRGBDSensor Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteRGBDSensor Directory Reference
+
+
+
+ + + + diff --git a/dir_25269fc8732d364dd41c44c714d7ddc1.html b/dir_25269fc8732d364dd41c44c714d7ddc1.html new file mode 100644 index 00000000..2e7ee34f --- /dev/null +++ b/dir_25269fc8732d364dd41c44c714d7ddc1.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector/conf Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
conf Directory Reference
+
+
+
+ + + + diff --git a/dir_29602fbee921084ef6cffd0531461981.html b/dir_29602fbee921084ef6cffd0531461981.html new file mode 100644 index 00000000..32e6f093 --- /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..f80d13ef --- /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..43ca1b8c --- /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..00c21be7 --- /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..aa466560 --- /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..9bb22d6c --- /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..d359c39e --- /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..705db93e --- /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..a49789d7 --- /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..4188fbed --- /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..c978e37e --- /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..13b8bece --- /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..d68a4436 --- /dev/null +++ b/dir_8976e5d03119516083eaca3ddca61311.html @@ -0,0 +1,89 @@ + + + + + + + +vision: examples/cpp Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cpp Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_898a6363a525f83b4d88293f2173a703.html b/dir_898a6363a525f83b4d88293f2173a703.html new file mode 100644 index 00000000..97ede24c --- /dev/null +++ b/dir_898a6363a525f83b4d88293f2173a703.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector/tests Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tests Directory Reference
+
+
+
+ + + + diff --git a/dir_8b083644526c0d3260457ecc1b443fd8.html b/dir_8b083644526c0d3260457ecc1b443fd8.html new file mode 100644 index 00000000..ca38352c --- /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..dae85221 --- /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..bd3524b2 --- /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..c6ccec42 --- /dev/null +++ b/dir_a52c22a8b79e169194d9c4bbc7c46367.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc/build Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
build Directory Reference
+
+
+
+ + + + diff --git a/dir_b0ff78f4d605b05d5b2840ead2213851.html b/dir_b0ff78f4d605b05d5b2840ead2213851.html new file mode 100644 index 00000000..c2c374b7 --- /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..6fdfac40 --- /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..9688776e --- /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..b854a23d --- /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..48dca0fe --- /dev/null +++ b/dir_bc63cb6e92e7d25aca16d15616a1c5b6.html @@ -0,0 +1,85 @@ + + + + + + + +vision: examples/cpp/exampleRemoteGrabber Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
exampleRemoteGrabber Directory Reference
+
+
+
+ + + + diff --git a/dir_bf8defd636c562035da95240c25206f2.html b/dir_bf8defd636c562035da95240c25206f2.html new file mode 100644 index 00000000..e506ff0b --- /dev/null +++ b/dir_bf8defd636c562035da95240c25206f2.html @@ -0,0 +1,85 @@ + + + + + + + +vision: share/HaarDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
HaarDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_c090f958661c3c1bfddf0e6cbf47395f.html b/dir_c090f958661c3c1bfddf0e6cbf47395f.html new file mode 100644 index 00000000..7e2dc492 --- /dev/null +++ b/dir_c090f958661c3c1bfddf0e6cbf47395f.html @@ -0,0 +1,85 @@ + + + + + + + +vision: libraries/YarpPlugins/DnnDetector Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
DnnDetector Directory Reference
+
+
+
+ + + + diff --git a/dir_d050070cc3e4bbd91d897ff8856046e0.html b/dir_d050070cc3e4bbd91d897ff8856046e0.html new file mode 100644 index 00000000..73b16097 --- /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..9f7c131f --- /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..c690edf5 --- /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..46ba3575 --- /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..0ffe8e58 --- /dev/null +++ b/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,85 @@ + + + + + + + +vision: doc Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
doc Directory Reference
+
+
+
+ + + + diff --git a/dir_f9121e54faddc5154c75c794a8ed2433.html b/dir_f9121e54faddc5154c75c794a8ed2433.html new file mode 100644 index 00000000..8387cd78 --- /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..4dcf68ed --- /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 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 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
  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 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..1c154df9 --- /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..5a37e7f4 --- /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..78e1db2c --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,103 @@ + + + + + + + +vision: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/group__ColorRegionDetector.html b/group__ColorRegionDetector.html new file mode 100644 index 00000000..3a2d7dd8 --- /dev/null +++ b/group__ColorRegionDetector.html @@ -0,0 +1,84 @@ + + + + + + + +vision: ColorRegionDetector + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
ColorRegionDetector
+
+ + + + + diff --git a/group__DnnDetector.html b/group__DnnDetector.html new file mode 100644 index 00000000..54721e88 --- /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..d47f2cf6 --- /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..1e3637df --- /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..c41eba1e --- /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..242f3e19 --- /dev/null +++ b/group__YarpCloudUtils.html @@ -0,0 +1,521 @@ + + + + + + + +vision: YarpCloudUtils + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
YarpCloudUtils
+
+
+ +

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

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

+Functions

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

Detailed Description

+
See also
Instructions.
+

Function Documentation

+ +

◆ loadPLY() [1/2]

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

◆ loadPLY() [2/2]

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

◆ meshFromCloud() [1/2]

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

◆ meshFromCloud() [2/2]

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

◆ processCloud() [1/2]

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

◆ processCloud() [2/2]

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

◆ savePLY() [1/2]

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

◆ savePLY() [2/2]

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

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

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

+Modules

 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..95f6a303 --- /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..10f0fcf2 --- /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..5bf96b2d --- /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..2fbeeefd --- /dev/null +++ b/group__exampleMeshFromCloud.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleMeshFromCloud + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleMeshFromCloud
+
+ + + + + diff --git a/group__exampleMeshFromLiveRGBD.html b/group__exampleMeshFromLiveRGBD.html new file mode 100644 index 00000000..208f885a --- /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..f5f4a639 --- /dev/null +++ b/group__exampleProcessCloud.html @@ -0,0 +1,84 @@ + + + + + + + +vision: exampleProcessCloud + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
exampleProcessCloud
+
+ + + + + diff --git a/group__exampleQrDetector.html b/group__exampleQrDetector.html new file mode 100644 index 00000000..4fa1a971 --- /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..82c5b6d6 --- /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..f20a007a --- /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..e8805506 --- /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..03267805 --- /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..ba12d57c --- /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..c7d9d289 --- /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..d99b5fa7 --- /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..1b7830eb --- /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..9c6621de --- /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..e7ee5b14 --- /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..a5148f4f --- /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..5ffe9cfd --- /dev/null +++ b/group__vision__tests.html @@ -0,0 +1,106 @@ + + + + + + + +vision: vision Tests + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
vision Tests
+
+ + + + + diff --git a/group__voxelOccupancyDetection.html b/group__voxelOccupancyDetection.html new file mode 100644 index 00000000..94244cb6 --- /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..1706206b --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,133 @@ + + + + + + + +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::ColorRegionDetector
 Croboticslab::DnnDetector
 Croboticslab::HaarDetector
 Croboticslab::QrDetector
 Croboticslab::IDetectorInterface for object detection
 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..b9114b9f --- /dev/null +++ b/index.html @@ -0,0 +1,147 @@ + + + + + + + +vision: Main Page + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
vision Documentation
+
+
+

Vision Homepage Latest Release

+

Vision processing.

+

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

+

+Installation

+

Installation instructions for installing from source can be found here.

+

+Contributing

+

+Posting Issues

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

+Fork & Pull Request

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

+Status

+

CI (Linux)

+

Coverage Status

+

Issues

+

+Similar and Related Projects

+

+General

+ +

+Visual Servoing

+ +

+Monocular SLAM

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

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

+

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

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

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

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

+Training Datasets

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

+Additional Info

+ +

+Bottle of water

+

Bottle HAAR training.

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

+Car

+

Car HAAR training.

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

+Chair

+

Chair HAAR training.

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

+Clock

+

Clock HAAR training.

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

+Cup

+

Cup HAAR training.

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

+Dog

+

Dog HAAR training.

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

+Lamp

+

Lamp HAAR training.

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

+Lemon

+

Lemon HAAR training.

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

+Sofa

+

Sofa HAAR training.

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

+Tv

+

TV HAAR training.

Positive images: 1300
+
Negative images: 2100
+
Number of stages: 19
+
+
+ + + + diff --git a/md_share_HaarDetector_tests_README.html b/md_share_HaarDetector_tests_README.html new file mode 100644 index 00000000..7bdee3e0 --- /dev/null +++ b/md_share_HaarDetector_tests_README.html @@ -0,0 +1,89 @@ + + + + + + + +vision: vision/share/HaarDetector/tests/ + + + + + + + + + + + +
+
+ + + + + + +
+
vision +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..6ccf847d --- /dev/null +++ b/menudata.js @@ -0,0 +1,43 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Functions",url:"functions_func.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/modules.html b/modules.html new file mode 100644 index 00000000..156e25fb --- /dev/null +++ b/modules.html @@ -0,0 +1,113 @@ + + + + + + + +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
     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..393e218b --- /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..15dbea17 --- /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..0006b3d2 --- /dev/null +++ b/namespaceroboticslab.html @@ -0,0 +1,767 @@ + + + + + + + +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  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..629ea662 --- /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..e0985549 --- /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..f938fbb6 --- /dev/null +++ b/namespaces.html @@ -0,0 +1,127 @@ + + + + + + + +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
     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 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +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..cea114d7 --- /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..8c994435 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['binarize_8',['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_9',['blobize',['../classroboticslab_1_1Travis.html#ad99d7b358faa94c91eb1839c014a43b8',1,'roboticslab::Travis']]], + ['buffer_10',['Buffer',['../classtinyply_1_1Buffer.html',1,'tinyply']]] +]; 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..f507abae --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_94',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_95',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_96',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_97',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_98',['vision Tests',['../group__vision__tests.html',1,'']]], + ['vision_2fshare_2fhaardetector_2ftests_2f_99',['vision/share/HaarDetector/tests/',['../md_share_HaarDetector_tests_README.html',1,'']]], + ['voxeloccupancydetection_100',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['voxeloccupancydetection_101',['voxelOccupancyDetection',['../group__voxelOccupancyDetection.html',1,'']]], + ['vtktimercallback_102',['vtkTimerCallback',['../classroboticslab_1_1vtkTimerCallback.html',1,'roboticslab']]] +]; 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..c8eec20e --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['yarpcloudutils_103',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_104',['YarpCloudUtils: point cloud utilities for YARP',['../yarpcloudutils.html',1,'']]], + ['yarpcloudutilstest_105',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_106',['YarpCropCallback',['../classroboticslab_1_1YarpCropCallback.html',1,'roboticslab::YarpCropCallback'],['../group__YarpCropCallback.html',1,'(Global Namespace)']]], + ['yarpplugins_107',['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..5ee80735 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['calcangle_11',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_12',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_13',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_14',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_15',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_16',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_17',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_18',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_19',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_20',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_21',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_22',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_23',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['colorregiondetector_24',['ColorRegionDetector',['../group__ColorRegionDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab::ColorRegionDetector']]], + ['colorregiondetectortest_25',['ColorRegionDetectorTest',['../classroboticslab_1_1test_1_1ColorRegionDetectorTest.html',1,'roboticslab::test']]], + ['comparecontourareas_26',['compareContourAreas',['../namespaceroboticslab.html#aa04fb6f785814df14fdee7567be95098',1,'roboticslab']]] +]; 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..d6343994 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_27',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_28',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_29',['DnnDetector',['../group__DnnDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1DnnDetector.html',1,'roboticslab::DnnDetector']]], + ['dnndetectortest_30',['DnnDetectorTest',['../classroboticslab_1_1test_1_1DnnDetectorTest.html',1,'roboticslab::test']]] +]; 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..cf4c9238 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_31',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_32',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_33',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_34',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_35',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_36',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_37',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_38',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_39',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_40',['exampleSceneReconstructionClient',['../group__exampleSceneReconstructionClient.html',1,'']]] +]; 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..fe3008e7 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_41',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_42',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_43',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_44',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_45',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_46',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_47',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_48',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_49',['getCvMat',['../classroboticslab_1_1Travis.html#aab7794841340b94719657b9723010bf2',1,'roboticslab::Travis']]] +]; 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..427138cc --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['haar_20models_50',['HAAR Models',['../md_share_HaarDetector_conf_README.html',1,'']]], + ['haardetector_51',['HaarDetector',['../group__HaarDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1HaarDetector.html',1,'roboticslab::HaarDetector']]], + ['haardetectortest_52',['HaarDetectorTest',['../classroboticslab_1_1test_1_1HaarDetectorTest.html',1,'roboticslab::test']]] +]; 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..2ccb9b2c --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['idetector_53',['IDetector',['../classroboticslab_1_1IDetector.html',1,'roboticslab']]], + ['installation_20from_20source_20code_54',['Installation from Source Code',['../md_doc_vision_install.html',1,'']]] +]; 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..1a32b819 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_55',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_56',['KinectFusionImpl',['../classroboticslab_1_1KinectFusionImpl.html',1,'roboticslab']]] +]; 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..bc11a0ed --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['license_5fkinectfusion_57',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.html',1,'']]], + ['linecallbackport_58',['LineCallbackPort',['../classroboticslab_1_1LineCallbackPort.html',1,'roboticslab']]], + ['loadply_59',['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_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..5506c80e --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_60',['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_61',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_62',['morphOpening',['../classroboticslab_1_1Travis.html#a91da25b772bbccc1a18cb7c0ef1259b6',1,'roboticslab::Travis']]] +]; 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..64b431de --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['plydata_63',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_64',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_65',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_66',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_67',['PointAtObjectServer',['../group__pointAtObjectServer.html',1,'(Global Namespace)'],['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab::PointAtObjectServer']]], + ['processcloud_68',['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_69',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_70',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_71',['PropertyInfo',['../structtinyply_1_1PropertyInfo.html',1,'tinyply']]], + ['pushcontour_72',['pushContour',['../classroboticslab_1_1Travis.html#a81b34bf92418b3b1062ce85cc3fc1b06',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..e304878b --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_73',['QrDetector',['../group__QrDetector.html',1,'(Global Namespace)'],['../classroboticslab_1_1QrDetector.html',1,'roboticslab::QrDetector']]], + ['qrdetectortest_74',['QrDetectorTest',['../classroboticslab_1_1test_1_1QrDetectorTest.html',1,'roboticslab::test']]] +]; 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..93939e1d --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['release_75',['release',['../classroboticslab_1_1Travis.html#a0c3429f799e4ca8f239c5086d4ba468b',1,'roboticslab::Travis']]], + ['renderupdater_76',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_77',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbddetection_78',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_79',['rgbDetection',['../group__rgbDetection.html',1,'']]], + ['rgbdetection_80',['RgbDetection',['../classroboticslab_1_1RgbDetection.html',1,'roboticslab']]], + ['roboticslab_81',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_82',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_83',['YarpCloudUtils',['../namespaceroboticslab_1_1YarpCloudUtils.html',1,'roboticslab']]] +]; 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..1ff8f019 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['saveply_84',['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_85',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['scenereconstruction_86',['sceneReconstruction',['../group__sceneReconstruction.html',1,'']]], + ['segmentorthread_87',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['setbincvmat_88',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_89',['setCvMat',['../classroboticslab_1_1Travis.html#a1420915be8c78131f2f9f0e57adefb6c',1,'roboticslab::Travis']]], + ['sharedarea_90',['SharedArea',['../classroboticslab_1_1SharedArea.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..73409282 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['travis_91',['Travis',['../classroboticslab_1_1Travis.html',1,'roboticslab::Travis'],['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis::Travis()']]], + ['traviscrop_92',['travisCrop',['../namespaceroboticslab.html#a6e367b4909da6b8bb35b413f821a4f03',1,'roboticslab']]], + ['travislib_93',['TravisLib',['../group__TravisLib.html',1,'']]] +]; 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..27323984 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_108',['Buffer',['../classtinyply_1_1Buffer.html',1,'tinyply']]] +]; 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..5340dad2 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['colorregiondetector_109',['ColorRegionDetector',['../classroboticslab_1_1ColorRegionDetector.html',1,'roboticslab']]], + ['colorregiondetectortest_110',['ColorRegionDetectorTest',['../classroboticslab_1_1test_1_1ColorRegionDetectorTest.html',1,'roboticslab::test']]] +]; 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..269081d9 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dataprocessor_111',['DataProcessor',['../classroboticslab_1_1DataProcessor.html',1,'roboticslab']]], + ['delete_5farray_112',['delete_array',['../structtinyply_1_1Buffer_1_1delete__array.html',1,'tinyply::Buffer']]], + ['dnndetector_113',['DnnDetector',['../classroboticslab_1_1DnnDetector.html',1,'roboticslab']]], + ['dnndetectortest_114',['DnnDetectorTest',['../classroboticslab_1_1test_1_1DnnDetectorTest.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..cfdf6e21 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['haardetector_115',['HaarDetector',['../classroboticslab_1_1HaarDetector.html',1,'roboticslab']]], + ['haardetectortest_116',['HaarDetectorTest',['../classroboticslab_1_1test_1_1HaarDetectorTest.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..68102d9b --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['idetector_117',['IDetector',['../classroboticslab_1_1IDetector.html',1,'roboticslab']]] +]; 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..ccef551e --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinectfusion_118',['KinectFusion',['../classroboticslab_1_1KinectFusion.html',1,'roboticslab']]], + ['kinectfusionimpl_119',['KinectFusionImpl',['../classroboticslab_1_1KinectFusionImpl.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..8543177e --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linecallbackport_120',['LineCallbackPort',['../classroboticslab_1_1LineCallbackPort.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..35fa0d48 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['plydata_121',['PlyData',['../structtinyply_1_1PlyData.html',1,'tinyply']]], + ['plyelement_122',['PlyElement',['../structtinyply_1_1PlyElement.html',1,'tinyply']]], + ['plyfile_123',['PlyFile',['../structtinyply_1_1PlyFile.html',1,'tinyply']]], + ['plyproperty_124',['PlyProperty',['../structtinyply_1_1PlyProperty.html',1,'tinyply']]], + ['pointatobjectserver_125',['PointAtObjectServer',['../classroboticslab_1_1PointAtObjectServer.html',1,'roboticslab']]], + ['propertycomparer_126',['PropertyComparer',['../structroboticslab_1_1test_1_1PropertyComparer.html',1,'roboticslab::test']]], + ['propertyhasher_127',['PropertyHasher',['../structroboticslab_1_1test_1_1PropertyHasher.html',1,'roboticslab::test']]], + ['propertyinfo_128',['PropertyInfo',['../structtinyply_1_1PropertyInfo.html',1,'tinyply']]] +]; 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..f7462626 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['qrdetector_129',['QrDetector',['../classroboticslab_1_1QrDetector.html',1,'roboticslab']]], + ['qrdetectortest_130',['QrDetectorTest',['../classroboticslab_1_1test_1_1QrDetectorTest.html',1,'roboticslab::test']]] +]; 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..dfc15582 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['renderupdater_131',['RenderUpdater',['../classroboticslab_1_1RenderUpdater.html',1,'roboticslab']]], + ['rgbddetection_132',['RgbdDetection',['../classroboticslab_1_1RgbdDetection.html',1,'roboticslab']]], + ['rgbdetection_133',['RgbDetection',['../classroboticslab_1_1RgbDetection.html',1,'roboticslab']]] +]; 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..1a7f5f55 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['scenereconstruction_134',['SceneReconstruction',['../classroboticslab_1_1SceneReconstruction.html',1,'roboticslab']]], + ['segmentorthread_135',['SegmentorThread',['../classroboticslab_1_1SegmentorThread.html',1,'roboticslab']]], + ['sharedarea_136',['SharedArea',['../classroboticslab_1_1SharedArea.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..34165d41 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travis_137',['Travis',['../classroboticslab_1_1Travis.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..ae186470 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['voxeloccupancydetection_138',['VoxelOccupancyDetection',['../classroboticslab_1_1VoxelOccupancyDetection.html',1,'roboticslab']]], + ['vtktimercallback_139',['vtkTimerCallback',['../classroboticslab_1_1vtkTimerCallback.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..c06c49e8 --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['yarpcloudutilstest_140',['YarpCloudUtilsTest',['../classroboticslab_1_1test_1_1YarpCloudUtilsTest.html',1,'roboticslab::test']]], + ['yarpcropcallback_141',['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..2a0093bd --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['binarize_145',['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_146',['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..79c1b9ce --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['calcangle_147',['calcAngle',['../namespaceroboticslab.html#ab6159f96fc995d519915b38a440752a4',1,'roboticslab']]], + ['calcarclength_148',['calcArcLength',['../namespaceroboticslab.html#a400ce1d6b1b0400780891d563efe1ee7',1,'roboticslab']]], + ['calcarea_149',['calcArea',['../namespaceroboticslab.html#a63596f18e8257268234d718b66a23e9b',1,'roboticslab']]], + ['calcaspectratio_150',['calcAspectRatio',['../namespaceroboticslab.html#a5aca4cd2e60bbbd643dd199a5a602db4',1,'roboticslab']]], + ['calccircle_151',['calcCircle',['../namespaceroboticslab.html#ad89c049fea192955560f906e816e77fc',1,'roboticslab']]], + ['calchsvmeanstddev_152',['calcHSVMeanStdDev',['../namespaceroboticslab.html#a89af9bbabde1ab6f53b85081c4f6b7d4',1,'roboticslab']]], + ['calchsvpeakcolor_153',['calcHSVPeakColor',['../namespaceroboticslab.html#a82c099ca08761de3420b2fcf65795447',1,'roboticslab']]], + ['calclocationxy_154',['calcLocationXY',['../namespaceroboticslab.html#afd056537b7c3c076b0b0269957d09f0b',1,'roboticslab']]], + ['calcmask_155',['calcMask',['../namespaceroboticslab.html#af9a50b3e70b8247ca7fae61b8642756f',1,'roboticslab']]], + ['calcmasscenter_156',['calcMassCenter',['../namespaceroboticslab.html#a6280d271da6233c97e1a10366b434d11',1,'roboticslab']]], + ['calcmoments_157',['calcMoments',['../namespaceroboticslab.html#ac5a49d127606d77db60b249458aacf32',1,'roboticslab']]], + ['calcrectangularity_158',['calcRectangularity',['../namespaceroboticslab.html#aaf23e59c90f21dd461964d1ec3df8ca5',1,'roboticslab']]], + ['calcsolidity_159',['calcSolidity',['../namespaceroboticslab.html#a121a42b618b698415b494dd287ee2224',1,'roboticslab']]], + ['comparecontourareas_160',['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..cd49a38a --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['getbiggestcontour_161',['getBiggestContour',['../namespaceroboticslab.html#a313126274b62362a38d8e59d876022ac',1,'roboticslab']]], + ['getblobsangle_162',['getBlobsAngle',['../classroboticslab_1_1Travis.html#af798473f1b9d3ffb401c8c041ce59f1f',1,'roboticslab::Travis']]], + ['getblobsarea_163',['getBlobsArea',['../classroboticslab_1_1Travis.html#af014491dc3ecd23bc161bfa3ae794272',1,'roboticslab::Travis']]], + ['getblobsaspectratio_164',['getBlobsAspectRatio',['../classroboticslab_1_1Travis.html#a275ba659152a0098041e42b33015ed0b',1,'roboticslab::Travis']]], + ['getblobshsv_165',['getBlobsHSV',['../classroboticslab_1_1Travis.html#aef9ede0cb67239abc35bda97291fd171',1,'roboticslab::Travis']]], + ['getblobsrectangularity_166',['getBlobsRectangularity',['../classroboticslab_1_1Travis.html#a9ac42677a691c468e89d058f91d38846',1,'roboticslab::Travis']]], + ['getblobssolidity_167',['getBlobsSolidity',['../classroboticslab_1_1Travis.html#af78167bbc4efbcc2661090d374857624',1,'roboticslab::Travis']]], + ['getblobsxy_168',['getBlobsXY',['../classroboticslab_1_1Travis.html#afd6b1080f3345a36838cbc3ff6e0a8b8',1,'roboticslab::Travis']]], + ['getcvmat_169',['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..3fc098a7 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loadply_170',['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..0a2ef7bd --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['meshfromcloud_171',['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_172',['morphClosing',['../classroboticslab_1_1Travis.html#a5127cf371893e3407c7d94c120a1084a',1,'roboticslab::Travis']]], + ['morphopening_173',['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..c566849b --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['processcloud_174',['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_175',['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..9c51ae4f --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['release_176',['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..62931650 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['saveply_177',['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_178',['setBinCvMat',['../classroboticslab_1_1Travis.html#a9b8184c5bc4602ce9ebdfa566e7d2eb8',1,'roboticslab::Travis']]], + ['setcvmat_179',['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..090d340a --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['travis_180',['Travis',['../classroboticslab_1_1Travis.html#ada155842abe6e2b9b1053179a9836517',1,'roboticslab::Travis']]], + ['traviscrop_181',['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..5a56a07a --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['colorregiondetector_190',['ColorRegionDetector',['../group__ColorRegionDetector.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..8f413731 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dnndetector_191',['DnnDetector',['../group__DnnDetector.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..69d0844a --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['examplecolorregion_192',['exampleColorRegion',['../group__exampleColorRegion.html',1,'']]], + ['examplednndetector_193',['exampleDnnDetector',['../group__exampleDnnDetector.html',1,'']]], + ['examplehaardetector_194',['exampleHaarDetector',['../group__exampleHaarDetector.html',1,'']]], + ['examplemeshfromcloud_195',['exampleMeshFromCloud',['../group__exampleMeshFromCloud.html',1,'']]], + ['examplemeshfromlivergbd_196',['exampleMeshFromLiveRGBD',['../group__exampleMeshFromLiveRGBD.html',1,'']]], + ['exampleprocesscloud_197',['exampleProcessCloud',['../group__exampleProcessCloud.html',1,'']]], + ['exampleqrdetector_198',['exampleQrDetector',['../group__exampleQrDetector.html',1,'']]], + ['exampleremotegrabber_199',['exampleRemoteGrabber',['../group__exampleRemoteGrabber.html',1,'']]], + ['exampleremotergbdsensor_200',['exampleRemoteRGBDSensor',['../group__exampleRemoteRGBDSensor.html',1,'']]], + ['examplescenereconstructionclient_201',['exampleSceneReconstructionClient',['../group__exampleSceneReconstructionClient.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..af23aba5 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haardetector_202',['HaarDetector',['../group__HaarDetector.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..40135550 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pointatobjectserver_203',['PointAtObjectServer',['../group__pointAtObjectServer.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..fb9810f3 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qrdetector_204',['QrDetector',['../group__QrDetector.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..3123f57b --- /dev/null +++ b/search/groups_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rgbddetection_205',['rgbdDetection',['../group__rgbdDetection.html',1,'']]], + ['rgbdetection_206',['rgbDetection',['../group__rgbDetection.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..b01e53a9 --- /dev/null +++ b/search/groups_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['scenereconstruction_207',['sceneReconstruction',['../group__sceneReconstruction.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..8c1a5356 --- /dev/null +++ b/search/groups_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['travislib_208',['TravisLib',['../group__TravisLib.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..ecb063b2 --- /dev/null +++ b/search/groups_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vision_20applications_20_28collections_20of_20programs_29_209',['vision Applications (Collections of Programs)',['../group__vision__applications.html',1,'']]], + ['vision_20examples_210',['vision Examples',['../group__vision__examples.html',1,'']]], + ['vision_20libraries_211',['vision Libraries',['../group__vision__libraries.html',1,'']]], + ['vision_20programs_212',['vision Programs',['../group__vision__programs.html',1,'']]], + ['vision_20tests_213',['vision Tests',['../group__vision__tests.html',1,'']]], + ['voxeloccupancydetection_214',['voxelOccupancyDetection',['../group__voxelOccupancyDetection.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..470d3350 --- /dev/null +++ b/search/groups_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['yarpcloudutils_215',['YarpCloudUtils',['../group__YarpCloudUtils.html',1,'']]], + ['yarpcropcallback_216',['YarpCropCallback',['../group__YarpCropCallback.html',1,'']]], + ['yarpplugins_217',['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..a084457e --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['roboticslab_142',['roboticslab',['../namespaceroboticslab.html',1,'']]], + ['test_143',['test',['../namespaceroboticslab_1_1test.html',1,'roboticslab']]], + ['yarpcloudutils_144',['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..ca850549 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['haar_20models_218',['HAAR Models',['../md_share_HaarDetector_conf_README.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 00000000..a0fb6796 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 00000000..c56e5d5a --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['installation_20from_20source_20code_219',['Installation from Source Code',['../md_doc_vision_install.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 00000000..084edfd0 --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 00000000..e14b3006 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['license_5fkinectfusion_220',['LICENSE_KinectFusion',['../md_programs_sceneReconstruction_LICENSE_KinectFusion.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 00000000..c0b45b0f --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 00000000..4d203bec --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vision_2fshare_2fhaardetector_2ftests_2f_221',['vision/share/HaarDetector/tests/',['../md_share_HaarDetector_tests_README.html',1,'']]] +]; diff --git a/search/pages_4.html b/search/pages_4.html new file mode 100644 index 00000000..0f05c2e7 --- /dev/null +++ b/search/pages_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 00000000..606e6ab5 --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yarpcloudutils_3a_20point_20cloud_20utilities_20for_20yarp_222',['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(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 00000000..d49dfc48 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,33 @@ +var indexSectionsWithContent = +{ + 0: "_bcdeghiklmpqrstvy", + 1: "bcdhiklpqrstvy", + 2: "r", + 3: "bcglmprst", + 4: "_", + 5: "cdehpqrstvy", + 6: "hilvy" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "functions", + 4: "variables", + 5: "groups", + 6: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Functions", + 4: "Variables", + 5: "Modules", + 6: "Pages" +}; + diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 00000000..1e477c08 --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..96578e96 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_5fcontours_182',['_contours',['../classroboticslab_1_1Travis.html#a64908578ec06a4af311f21ab5d252397',1,'roboticslab::Travis']]], + ['_5fimg_183',['_img',['../classroboticslab_1_1Travis.html#a20296082b0281167e495264f9e115cff',1,'roboticslab::Travis']]], + ['_5fimgbin_184',['_imgBin',['../classroboticslab_1_1Travis.html#ab34976826d71ab56497e22b95752944b',1,'roboticslab::Travis']]], + ['_5fimgbin3_185',['_imgBin3',['../classroboticslab_1_1Travis.html#a11365d2899b798c53ffe85faa21f5ff9',1,'roboticslab::Travis']]], + ['_5fimghsv_186',['_imgHsv',['../classroboticslab_1_1Travis.html#aa3a3204f40db1bc6de872b3a810bba5e',1,'roboticslab::Travis']]], + ['_5fminrotatedrects_187',['_minRotatedRects',['../classroboticslab_1_1Travis.html#aebd2482e1a3c5024b1ebaf49e373f8fe',1,'roboticslab::Travis']]], + ['_5foverwrite_188',['_overwrite',['../classroboticslab_1_1Travis.html#a60297152bb03c35d65452ec363f36a79',1,'roboticslab::Travis']]], + ['_5fquiet_189',['_quiet',['../classroboticslab_1_1Travis.html#ae818cd4a05d186b262fa0ad3d4f5269c',1,'roboticslab::Travis']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/structroboticslab_1_1test_1_1PropertyComparer-members.html b/structroboticslab_1_1test_1_1PropertyComparer-members.html new file mode 100644 index 00000000..f40b6ae9 --- /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..00675e43 --- /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..1740f780 --- /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..99a056a8 --- /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..978a959d --- /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..ea2290c8 --- /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..494b19c3 --- /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..022b4602 --- /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..037b4ec6 --- /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..f18b4222 --- /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..c264accc --- /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..fc0c49cf --- /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..1a1ff9a5 --- /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..7bc4cbe5 --- /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..45ecf0d1 --- /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..0aa09290 --- /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 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 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..1a72135e --- /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..9fd44de2 --- /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..8e342666 --- /dev/null +++ b/yarpcloudutils.html @@ -0,0 +1,250 @@ + + + + + + + +vision: YarpCloudUtils: point cloud utilities for YARP + + + + + + + + + + + +
    +
    + + + + + + +
    +
    vision +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    YarpCloudUtils: point cloud utilities for YARP
    +
    +
    +

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

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

    Supported data types are:

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

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

    +

    +Supported algorithms

    +

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

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

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

    +

    +Configuration

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    +Vector of dictionaries

    +

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

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

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

    +

    +Configuration context

    +

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

    +

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

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

    Then, in C++ code:

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

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

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

    Or, via command line:

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

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

    +
    +
    + + + +