[CGAL01] CGAL Set up for Visual studio 2017 (Windows 10 64 bit)

#前提
- Windows 10 pro x64
- Visual studio Enterprise 2017 (v15.2)

# 手順
1.ディレクトリの作成
2.CMakeのインストール
3.Boostのインストールと設定
4.CGALのインストールと設定
5.Visual studioにてソリューションファイルの作成

## ディレクトリの作成
```
c:\dev\
```
を作成

## CMakeのインストール
https://cmake.org/download/
上記URLよりダウンロード．
今回は最新版cmake-3.9.3-win64-x64.msiをインストール．
![das.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/9906114a-6cdd-768e-d2aa-f877271ad4e1.png)
Nextをクリック
![fadsfdsa.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/ef1c712d-5273-b02d-baa3-cc4f87ae43f7.png)
Agreeをクリック
![fsadfvds.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/78b293aa-3693-f4c2-3a2d-d4af7ad595a8.png)
Add CMake to the system PATH for all usersを選択しNextをクリック
![fsadfvds.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/62d6d86f-d5e8-0ba0-da31-c95fa75fb5c9.png)
Nextをクリック
![instal;l.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/e4aa5179-4841-e9f7-3b50-6e8458a5e5ed.png)
Installをクリック
![gidiash.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/c4ba7e4b-20c2-c7f5-a5df-42c5b67d347a.png)
Finishをクリックすると終了

##Qt5のインストール
https://download.qt.io/archive/qt/5.9/5.9.1/
より，qt-opensource-windows-x86-5.9.1.exeをダウンロードして実行．
(Qtが必要なサンプルの実行に必要，使用しない場合はインストール不要)

## Boostのインストールと設定
### インストール
https://sourceforge.net/projects/boost/files/boost-binaries/
上記URLよりダウンロード．
今回はバージョン1.65.1を選択
色々とわからないので，とりあえずall-msvc-32-64の7zを，と思ったら，解凍に7時間なので，
boost_1_65_1-msvc-14.1-64.exeをダウンロードし実行．
![IDPbig.png](https://qiita-image-store.s3.amazonaws.com/0/144934/652b676c-113c-9550-f263-de86be8df525.png)
となるので，そのまま進む．(Next)
![awef.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/54ecc8a4-c23e-effe-d16b-1a31520e3a63.png)
インストールの進行．
![ewqqagr.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/19ec5287-d9db-db7e-d70f-263b7a5fa6ea.png)
Finishで終了．
###設定
環境変数を設定する．
Windowsマークの上で右クリック→システム→システムの詳細設定→詳細設定タブの環境変数(N)をクリック
(http://www.wannko.net/windows10/etc/kankyo.html)
![grdsadfgfda.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/87cd457c-de1d-192d-db5c-ab372cf7598f.png)
新規をクリック
```
BOOST_LIBRARYDIR=C:\local\boost_1_65_1\lib64-msvc-14.1
BOOST_INCLUDEDIR=C:\local\boost_1_65_1
```
上記2つの環境変数を追加する．
![fgedsg.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/73f66413-2b40-84bc-ad96-1db45c4a50ed.png)
(例：BOOST_INCLUDEDIR)
また，既に存在するPATHに，
```
C:\local\boost_1_65_1\lib64-msvc-14.1
```
を追加する．これは，変数Pathを選択し，編集をクリック．
既に存在する変数の後ろに
```
;
```
をはさみ，追加する．
全て終わったら，OKを押して終了する．
間違っても既存のPathの内容を消去しないようにする．

##CGALのインストール
###CGALのダウンロードとインストール
https://www.cgal.org/download.html
https://github.com/CGAL/cgal/releases
CGAL-4.11-Setup.exeをダウンロード，実行．
![gess.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/473dbd83-1f45-4bdf-4e65-49cd7e2e0e80.png)
Next
![gwerag.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/eb7c75aa-82cf-1854-42e0-a8f481f80444.png)
Agree
![gaer4h.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/28c8efff-3b5a-6364-7092-41a31f35e884.png)
個人的には，HTML Manualも欲しいので，すべてチェックを入れ，Nextをクリック．
![grfasddga.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/4a63fd07-58e1-8b8c-0935-b165c49ce6ca.png)
64bitを選択．
![edsgargyhdrf.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/7d2b5cb1-0c9b-7534-405e-3d32d05df619.png)
ディレクトリを
```
C:\local\CGAL-4.11
```
Boostと同じC:\local\にする．
![garedgra.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/aba861b5-be86-f1e2-a134-46d9cdc26fd5.png)
(なんとなく)all usersにした．ほかは変更しない．
![grewgre.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/12b0238d-e486-394c-dd1e-1b88941face1.png)
CompleteしたらNext
![bhiubvaedrd.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/713d7e99-e57e-7d18-fa1a-5f826db00b25.png)
Downloadingが完了しただけなので，CMakeでコンパイルしていく．
![guibnl.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/04e2bb48-4fae-ae1f-e3be-708f023db818.png)
これが出た．私の環境では，環境変数にgmpが入っていなかったので，あとで設定する．

###設定
Source codeを
```
C:/local/CGAL-4.11
```
とし，Build the binariesを
```
C:/local/CGAL-4.11/build
```
とする．Configureを押す．
![harejhtfrshr.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/ffe8fc44-37eb-eb42-4889-2e33faa632c8.png)
ここで，Visual studio 15 2017 Win64を選択し，Finishをクリック．
![hreahreas.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/230ad394-b4e6-7320-40f7-ce7855681119.png)
真っ赤になるけど，DONEなので，エラーではない．Generateをクリックする．
C:\local\CGAL-4.11\buildにCGAL.slnが登場するので，VS2017で開く．
![hbarera..PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/92996e20-bcf1-b6c2-ef80-eed2a5093ed0.png)
これのなかで，ALL_BUILDのみをビルドする．（プロジェクトのみをリビルド)
```
5>------ すべてのリビルド開始: プロジェクト:ALL_BUILD, 構成: Debug x64 ------
5>Building Custom Rule C:/local/CGAL-4.11/CMakeLists.txt
5>CMake does not need to re-run because C:/local/CGAL-4.11/build/CMakeFiles/generate.stamp is up-to-date.
========== すべてリビルド: 5 正常終了、0 失敗、0 スキップ ==========
```
といった出力が出る．
これが完了したら，環境変数"Path"に"C:\local\CGAL-4.11\build\bin"と"C:\local\CGAL-4.11\auxiliary\gmp\lib"を追加する．
![hraehertashrt.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/606076c0-1577-6f34-9c94-4c560c70b36b.png)
先ほどと同じ手順で環境変数設定画面に移動し，Pathに対し編集をクリック．新規をクリックすると入力欄が点滅するので，そこに上記2つの環境変数を追加する．
※ 既に存在する変数は決して消さないこと！！

##Test building
###設定
新規作成→プロジェクト→win32 コンソールアプリケーション
※ 空のプロジェクトにする．プリコンパイル済みにはしない

![gedsgda.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/cde8f111-6897-37c4-1423-9ea1ea32c28b.png)
プロジェクトの設定から，インクルードディレクトリに
```
C:\local\CGAL-4.11\auxiliary\gmp\include
C:\local\boost_1_65_1
C:\local\CGAL-4.11\build\include
C:\local\CGAL-4.11\include
```
を追加する．ライブラリディレクトリに
```
C:\local\CGAL-4.11\auxiliary\gmp\lib
C:\local\boost_1_65_1\libs
C:\local\CGAL-4.11\build\lib
```
を追加する．
依存ライブラリディレクトリに
```
libgmp-10.lib
libmpfr-4.lib
kernel32.lib
user32.lib
CGAL_Core-vc140-mt-gd-4.11.lib
CGAL_ImageIO-vc140-mt-gd-4.11.lib
CGAL-vc140-mt-gd-4.11.lib
```
を追加する．
これらにより，インテリセンスのエラーなく，全ての関数を参照・実行可能となる．
![jhsrtujhtsr.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/a36461df-529f-c7b6-4d9c-172456a7d13f.png)

##サンプルプログラム
メッシュの自己交差(self-intersection)が発生している三角形の数を教えてくれるCGALに最初から付属のサンプルプログラムです．

```cpp:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Polygon_mesh_processing/self_intersections.h>
#include <fstream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Surface_mesh<K::Point_3>             Mesh;
typedef boost::graph_traits<Mesh>::face_descriptor face_descriptor;
namespace PMP = CGAL::Polygon_mesh_processing;
int main(int argc, char* argv[])
{
	const char* filename = (argc > 1) ? argv[1] : "./data/pig.off";
	std::ifstream input(filename);
	Mesh mesh;

	if (!input || !(input >> mesh) || !CGAL::is_triangle_mesh(mesh))
	{
		std::cerr << "Not a valid input file." << std::endl;
		return 1;
	}

	bool intersecting = PMP::does_self_intersect(mesh,
		PMP::parameters::vertex_point_map(get(CGAL::vertex_point, mesh)));
	std::cout
		<< (intersecting ? "There are self-intersections." : "There is no self-intersection.")
		<< std::endl;
	std::vector<std::pair<face_descriptor, face_descriptor> > intersected_tris;
	PMP::self_intersections(mesh, std::back_inserter(intersected_tris));
	std::cout << intersected_tris.size() << " pairs of triangles intersect." << std::endl;

	return 0;
} 
```
を，C:\local\CGAL-4.11\examples\Polygon_mesh_processing\data\pig.offを用いて実行すると，
![grafdasgrdsf.PNG](https://qiita-image-store.s3.amazonaws.com/0/144934/7ba40b94-bd6b-ea38-4d99-c98d2061ab7a.png)
の結果を得られる．
サンプルのVS2017実行ファイル：http://www.mediafire.com/file/38wahkfkap5qx94/20170925_test01.rar


##References
special thanks to
http://mimismgn.hatenablog.com/entry/2016/09/17/001534
https://www.cgal.org/download/windows.html
http://www.wannko.net/windows10/etc/kankyo.html