第一步实现 CMakeLists.txt
的配置,基于 QT编译器进行开发
cmake_minimum_required(VERSION 3.5)
project(CGAL_Test LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(CGAL REQUIRED)
if(CGAL_FOUND)
include_directories(${CGAL_DIR}/include/CGAL)
link_directories(${CGAL_LIBRARIES_DIR})
set(CGAL_LIBS "-lCGAL -lCGAL_Core -lgmp -lmpfr")
set(HAVE_CGAL True)
message(STATUS "Configure package with cgal!")
else()
set(HAVE_CGAL False)
message(STATUS "Configure package without cgal!")
endif()
# OpenCV4.1
set(OpenCV_DIR "/usr/local")
message(STATUS ${OpenCV_DIR})
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
include_directories(${OpenCV_DIR}/include/opencv2)
include_directories( ${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_DIR}/lib)
message(STATUS "Configure package with OpenCV!")
set(HAVE_OpenCV True)
else()
set(HAVE_OpenCV False)
message(STATUS "Configure package without OpenCV!")
endif()
# OpenGL
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
if(OpenGL_FOUND)
include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} )
set(HAVE_OpenGL True)
message(STATUS "Configure package with OpenGL!")
else()
set(HAVE_OpenGL False)
message(STATUS "Configure package without OpenGL!")
endif()
# VTK
find_package(VTK REQUIRED)
if(VTK_FOUND)
include(${VTK_USE_FILE})
include_directories(${VTK_INCLUDE_DIRS})
link_directories(${VTK_LIBRARIES_DIR})
set(HAVE_VTK True)
message(STATUS "Configure package with VTK!")
else()
set(HAVE_VTK False)
message(STATUS "Configure package without VTK!")
endif()
# PCL
find_package(PCL REQUIRED)
if(PCL_FOUND)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARIES_DIR})
set(HAVE_PCL True)
message(STATUS "Configure package with PCL!")
else()
set(HAVE_PCL False)
message(STATUS "Configure package without PCL!")
endif()
set(EIGEN3_DIR "/usr/local")
message(STATUS ${EIGEN3_DIR})
find_package(Eigen3 REQUIRED)
if(EIGEN3_FOUND)
include_directories(${EIGEN3_DIR}/include/eigen3)
include_directories(${EIGEN3_INCLUDE_DIRS})
link_directories(${EIGEN3_DIR}/lib)
message(STATUS "Configure package with EIGEN3!")
set(HAVE_EIGEN3 True)
else()
set(HAVE_EIGEN3 False)
message(STATUS "Configure package without EIGEN3!")
endif()
set(MPI_DIR "/usr/local")
message(STATUS ${MPI_DIR})
find_package(MPI REQUIRED)
if(MPI_CXX_FOUND)
include_directories(${MPI_CXX_INCLUDE_PATH})
link_directories(${MPI_CXX_LINK_FLAG})
set(HAVE_MPI_CXX True)
message(STATUS "Configure package with mpi cxx!")
else()
set(HAVE_MPI_CXX False)
message(STATUS "Configure package without mpi cxx!")
endif()
if(MPI_C_FOUND)
include_directories(${MPI_C_INCLUDE_PATH})
link_directories(${MPI_C_LINK_FLAG})
set(HAVE_MPI_C True)
message(STATUS "Configure package with mpi c!")
else()
set(HAVE_MPI_C False)
message(STATUS "Configure package without mpi c!")
endif()
add_executable(CGAL_Test points_and_segment.cpp)
target_link_libraries(CGAL_Test PRIVATE ${EIGEN3_LIBS}
${OpenCV_LIBS}
${PCL_LIBRARIES}
${OPENGL_LIBRARIES}
${VTK_LIBRARIES}
${CGAL_LIBS})
这里不需要 QT 的界面工具,只需要 QT 左右编译器, 其中,该模块,包含了, EIGEN3_LIBS
、OpenCV
、PCL
、OPENGL
、VTK
、CGAL
CGAL Test 01 点和线段
#include <iostream>
#include <CGAL/Simple_cartesian.h>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
typedef Kernel::Segment_2 Segment_2;
int main()
{
Point_2 p(1,1), q(10,10);
std::cout << "p = " << p << std::endl;
std::cout << "q = " << q.x() << " " << q.y() << std::endl;
std::cout << "sqdist(p,q) = "
<< CGAL::squared_distance(p,q) << std::endl;
Segment_2 s(p,q);
Point_2 m(5, 9);
std::cout << "s = " << s << std::endl;
std::cout << "m = " << m << std::endl;
std::cout << "sqdist(Segment_2(p,q), m) = "
<< CGAL::squared_distance(s,m) << std::endl;
std::cout << "p, q, and m ";
switch (CGAL::orientation(p,q,m))
{
case CGAL::COLLINEAR:
std::cout << "are collinear\n";
break;
case CGAL::LEFT_TURN:
std::cout << "make a left turn\n";
break;
case CGAL::RIGHT_TURN:
std::cout << "make a right turn\n";
break;
}
std::cout << " midpoint(p,q) = " << CGAL::midpoint(p,q) << std::endl;
return 0;
}