最近在搞图形学,配了一下cgal,踩了不少坑,在这里记一下。可以跟着官网来,不过配置可能会稍微有些麻烦。
基本配置
下载cgal包
github找到官网,在release上下载两个包
下载结束后解压,把GMP那个包放到CGAL包对应目录下就行(目录:\CGAL-5.4\auxiliary
)
boost安装
在SourceForge上下载对应boost版本就可以(我使用的是VS2022,所以直接下了14.3,对应版本如下)
VS | Boost |
---|---|
vs2015 | 14.0 |
vs2017 | 14.1 |
2019 | 14.2 |
之后一路安装即可
环境变量配置
用户变量:
BOOST_INCLUDEDIR = 你的boost路径\D:\boost_1_79_0
BOOST_LIBRARYDIR = 你的boost路径\boost_1_79_0\lib64-msvc-14.3
path:
你的boost路径\boost_1_79_0\lib64-msvc-14.3
VS配置
- 随便创建一个新项目,之后找到属性管理器(可以直接在vs里面搜索)
- 之后右键添加新项目属性表,创建你的属性表即可。
- 创建完成后,双击你新创建好的属性表
- 添加包含目录
添加以下文件:你的CGAL目录\CGAL-5.4\auxiliary\gmp\include
你的CGAL目录\CGAL-5.4\include
你的boost目录\boost_1_79_0
- 添加库目录 (通用属性->VC++ 目录->库目录)
CGAL目录\CGAL-5.4\auxiliary\gmp\lib
boost目录\boost_1_79_0\libs
之后将
添加到你的环境变量path中!!(如果不添加,在编译一些项目时会报,CGAL目录\CGAL-5.4\auxiliary\gmp\lib
找不到libmpfr-4.dll
或找不到libgmp-10.dll
的错误) - 添加依赖项(通用属性->链接器->输入>附加依赖项)
libgmp-10.lib
libmpfr-4.lib
- 添加包含目录
测试
至此,我们的环境就配置完了,可以跑一跑下面的代码看一看
#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 << "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;
}
vs可能会报错:
这里我们shift+f4打开属性页,在C/C++命令行中加/bigobj即可
之后再进行测试输出结果:
图形化配置(可选)
这里我们用这样一段代码进行测试(用以生成一个模型):
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Polygon_set_2.h>
#include <CGAL/draw_polygon_set_2.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel K;
typedef CGAL::Polygon_2<K> Polygon_2;
typedef CGAL::Polygon_with_holes_2<K> Polygon_with_holes_2;
typedef CGAL::Polygon_set_2<K> Polygon_set_2;
typedef CGAL::Point_2<K> Point_2;
Polygon_2 rectangle(int l)
{
// Create a rectangle with given side length.
Polygon_2 P;
P.push_back(Point_2(-l, -l));
P.push_back(Point_2(l, -l));
P.push_back(Point_2(l, l));
P.push_back(Point_2(-l, l));
return P;
}
int main()
{
// Create a large rectangle A, with a hole and a smaller rectangle
// B inside A's hole.
Polygon_with_holes_2 A(rectangle(3));
Polygon_2 H(rectangle(2));
H.reverse_orientation();
A.add_hole(H);
Polygon_2 B(rectangle(1));
// Add them to a polygon set and draw it.
Polygon_set_2 S;
S.insert(A);
S.insert(B);
CGAL::draw(S);
return 0;
}
这里我们可能会出现这个错误:
Impossible to draw, CGAL_USE_BASIC_VIEWER is not defined.
这里其实就是我们没有配置qt的原因,接下来我们配置一下qt
安装qt
访问官网进行下载。
下载结束后进行安装即可,注意这里在选择组件时将Qt选项展开,选择与你VS版本相对应的内容,这里我选择的是MSVC 2019 64-bit
(VS2022),注意这里的版本是Qt5,不要下错了版本
添加环境变量
这里在用户变量中添加
QTDIR=QT路径\6.3.0
Path中添加
QT路径\6.3.0\msvc2019_64\bin
创建CMakeLists.txt
找到我们创建的项目目录
在该目录下新建一个CMakeLists.txt文件,具体内容如下:
# Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.1...3.20)
#创建项目 这里是你的项目名
project(Project1)
# 导包
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt5)
if(CGAL_Qt5_FOUND)
add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
endif()
# 对每个cpp创建一个target
file(
GLOB cppfiles
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
foreach(cppfile ${cppfiles})
create_single_source_cgal_program("${cppfile}")
endforeach()
# Qt5配置
if(CGAL_Qt5_FOUND)
# 连接仓库,第一个参数(main)是我们的目标cpp文件,这里放你的cpp即可
target_link_libraries (main PUBLIC CGAL::CGAL_Qt5)
target_link_libraries (main PUBLIC CGAL::CGAL_Basic_viewer)
else()
message(
STATUS
"NOTICE: The example main requires Qt and drawing will be disabled."
)
endif()
使用cmake搭建项目
source code是我们CMakeLists.txt所在目录,where to build也选择该目录即可
之后点击configure,不用加别的配置,直接finish即可。之后generate,之后打开项目,就可以看到我们的文件。
直接运行即可,我们最终跑出了下面的结果:
至此我们cgal的环境算是彻底配完啦!
其他配置的一些错误
vcpkg
如果你使用的是Vcpkg的话,可能在下载cgal时报超时的错,这里不用管它,继续
vcpkg.exe install cgal
就可以(它会继续现在你之前没有下载的包)
cmake
如果你使用了cmake对项目进行构建,可能会提示你找不到一些文件,这里有可能就是你没有下载boost或者没有下载GMP的包,上面我们都讲过了,直接下载包,然后再cmak那里把路径填好就可以