diff --git a/visualization/CMakeLists.txt b/visualization/CMakeLists.txt index 62018486d6e..92499875088 100644 --- a/visualization/CMakeLists.txt +++ b/visualization/CMakeLists.txt @@ -14,7 +14,7 @@ else(NOT VTK_FOUND) endif(NOT VTK_FOUND) PCL_SUBSYS_OPTION(build "${SUBSYS_NAME}" "${SUBSYS_DESC}" ${DEFAULT} "${REASON}") -PCL_SUBSYS_DEPEND(build "${SUBSYS_NAME}" DEPS ${SUBSYS_DEPS} EXT_DEPS vtk OPT_DEPS openni openni2 ensenso) +PCL_SUBSYS_DEPEND(build "${SUBSYS_NAME}" DEPS ${SUBSYS_DEPS} EXT_DEPS vtk OPT_DEPS openni openni2 ensenso davidSDK) if (ANDROID) set (build FALSE) @@ -162,6 +162,9 @@ if(build) if(ENSENSO_FOUND) list(APPEND EXT_DEPS ensenso) endif(ENSENSO_FOUND) + if(DAVIDSDK_FOUND) + list(APPEND EXT_DEPS davidSDK) + endif(DAVIDSDK_FOUND) PCL_MAKE_PKGCONFIG("${LIB_NAME}" "${SUBSYS_NAME}" "${SUBSYS_DESC}" "${SUBSYS_DEPS}" "${EXT_DEPS}" "" "" "") diff --git a/visualization/tools/CMakeLists.txt b/visualization/tools/CMakeLists.txt index 70010dce28b..fd584266c5e 100644 --- a/visualization/tools/CMakeLists.txt +++ b/visualization/tools/CMakeLists.txt @@ -43,3 +43,8 @@ if(ENSENSO_FOUND AND BUILD_ENSENSO) PCL_ADD_EXECUTABLE_OPT_BUNDLE(pcl_ensenso_viewer ${SUBSYS_NAME} ensenso_viewer.cpp) target_link_libraries(pcl_ensenso_viewer pcl_common pcl_io pcl_visualization) endif() + +if(DAVIDSDK_FOUND AND BUILD_DAVIDSDK) + PCL_ADD_EXECUTABLE_OPT_BUNDLE(pcl_davidsdk_viewer ${SUBSYS_NAME} davidsdk_viewer.cpp) + target_link_libraries(pcl_davidsdk_viewer pcl_common pcl_io pcl_visualization) +endif() diff --git a/visualization/tools/davidsdk_viewer.cpp b/visualization/tools/davidsdk_viewer.cpp new file mode 100644 index 00000000000..ee25e7bbce4 --- /dev/null +++ b/visualization/tools/davidsdk_viewer.cpp @@ -0,0 +1,108 @@ +/* + * Software License Agreement (BSD License) + * + * Point Cloud Library (PCL) - www.pointclouds.org + * Copyright (c) 2014-, Open Perception, Inc. + * + * 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 copyright holder(s) 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 OWNER 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. + * + * Author: Victor Lamoine (victor.lamoine@gmail.com) + */ + +#include +#include +#include + +/** @brief Convenience typedef */ +typedef pcl::visualization::CloudViewer CloudViewer; + +/** @brief Convenience typedef for XYZ point clouds */ +typedef pcl::PointCloud PointCloudXYZ; + +/** @brief CloudViewer pointer */ +boost::shared_ptr viewer_ptr; + +/** @brief PCL DavidSDK object pointer */ +pcl::DavidSDKGrabber::Ptr davidsdk_ptr; + +/** @brief Process and/or display DavidSDK grabber clouds + * @param[in] cloud DavidSDK cloud */ +void +grabberCallback (const PointCloudXYZ::Ptr& cloud) +{ + if (!viewer_ptr->wasStopped ()) + viewer_ptr->showCloud (cloud); +} + +/** @brief Main function + * @param[in] argc + * @param[in] argv + * @return Exit status */ +int +main (int argc, + char *argv[]) +{ + if (argc != 2) + { + PCL_ERROR ("Usage:\n%s 192.168.100.65\n", argv[0]); + return (-1); + } + + viewer_ptr.reset (new CloudViewer ("davidSDK 3D cloud viewer")); + davidsdk_ptr.reset (new pcl::DavidSDKGrabber); + davidsdk_ptr->connect (argv[1]); + + if (!davidsdk_ptr->isConnected ()) + return (-1); + PCL_WARN ("davidSDK connected\n"); + +#ifndef _WIN32// || _WIN64 + PCL_WARN ("Linux / Mac OSX detected, setting local_path_ to /var/tmp/davidsdk/ and remote_path_ to \\\\m6700\\davidsdk\\\n"); + davidsdk_ptr->setLocalAndRemotePaths ("/var/tmp/davidsdk/", "\\\\m6700\\davidsdk\\"); +#endif + + //davidsdk_ptr->setFileFormatToPLY(); + std::cout << "Using " << davidsdk_ptr->getFileFormat () << " file format" << std::endl; + + boost::function f = boost::bind (&grabberCallback, _1); + davidsdk_ptr->registerCallback (f); + davidsdk_ptr->start (); + + while (!viewer_ptr->wasStopped ()) + { + boost::this_thread::sleep (boost::posix_time::seconds (20)); + std::cout << "FPS: " << davidsdk_ptr->getFramesPerSecond () << std::endl; + } + + davidsdk_ptr->stop (); + return (0); +} +