#if defined (_MSC_VER) && !defined (_WIN64) #pragma warning(disable:4244) // boost::number_distance::distance() // converts 64 to 32 bits integers #endif #include #include #include #include #include #include #include // Type declarations. typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; typedef std::pair Point_with_normal; typedef std::vector Pwn_vector; typedef CGAL::First_of_pair_property_map Point_map; typedef CGAL::Second_of_pair_property_map Normal_map; // In Shape_detection_traits the basic types, i.e., Point and Vector types // as well as iterator type and property maps, are defined. typedef CGAL::Shape_detection_3::Shape_detection_traits Traits; typedef CGAL::Shape_detection_3::Efficient_RANSAC Efficient_ransac; typedef CGAL::Shape_detection_3::Region_growing_depr Region_growing; typedef CGAL::Shape_detection_3::Plane Plane; // This program both works for RANSAC and Region Growing. // This example is using deprecated code! // Please update your code to the new version using other examples! template int run(const char* filename) { // Points with normals. Pwn_vector points; // Load a point set from a file. // read_xyz_points_and_normals takes an OutputIterator for storing the points // and a property map to store the normal vector with each point. std::ifstream stream(filename); if (!stream || !CGAL::read_xyz_points(stream, std::back_inserter(points), CGAL::parameters::point_map(Point_map()). normal_map(Normal_map()))) { std::cout << "Error: cannot read the file cube.pwn" << std::endl; return EXIT_FAILURE; } // Instantiate a shape detection engine. ShapeDetection shape_detection; // Provide the input data. shape_detection.set_input(points); // Register planar shapes via template method. shape_detection.template add_shape_factory(); // Detect registered shapes with default parameters. shape_detection.detect(); // Print number of detected shapes. std::cout << shape_detection.shapes().end() - shape_detection.shapes().begin() << " shapes detected." << std::endl; return EXIT_SUCCESS; } int main (int argc, char** argv) { if (argc > 1 && std::string(argv[1]) == "-r") { std::cout << "Efficient RANSAC" << std::endl; return run ((argc > 2) ? argv[2] : "data/cube.pwn"); } std::cout << "Region Growing" << std::endl; return run ((argc > 1) ? argv[1] : "data/cube.pwn"); }