C++のライブラリであるCGAL(The Computational Geometry Algorithms Library)を使うための準備について
tags: #CGAL
CGALとは ¶
CGAL (The Computational Geometry Algorithms Library) は,Wikipediaによると「計算幾何学分野におけるアルゴリズムに効果的で信頼性があり、かつ簡易なアクセスを提供することを目的としたソフトウェア」とのこと. 具体的には,2次元や3次元の三角分割 とか,表面再構成 とかやってくれる. また「オリジナルはC++言語で書かれているが、Python言語のバインディングも利用可能」らしいが,ここではC++の場合について書く.
2022年5月時点ではCGALは5.4が最新の安定版である.
CGALを使うための準備(Linux/macOSのみ) ¶
-
C++のライブラリBoost C++ Library が必要である.
Ubuntuで管理者権限がある場合,
bash1
$ sudo apt install libboost-dev
CentOSだと管理者権限があれば,
bash1
$ sudo yum install -y boost-devel
macOSだと,Homebrew を入れていれば,
bash1
$ brew install boost
で簡単に入れられる.
UbuntuやCentOSで管理者権限がない場合は,ホームディレクトリ以下に適当にディレクトリを作って,そこにダウンロードして適当にゴニョゴニョすればよい. (https://www.boost.org/doc/libs/1_79_0/more/getting_started/unix-variants.html を見れば最新版について記されているはず.) 以下では具体的には,
~/.sh/boost/
という隠しディレクトリにBoost 1.79.0を入れる例を記す.bash1 2 3 4 5 6 7 8
$ mkdir -p ~/.sh/boost/ $ cd ~/.sh/boost/ $ wget https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz $ tar zxvf boost_1_79_0.tar.gz $ cd boost_1_79_0 $ bootstrap.sh $ ./b2 headers $ echo 'export LD_LIBRARY_PATH=$HOME/.sh/boost/boost_1_79_0/:$LD_LIBRARY_PATH' >> ~/.bash_profile
留意1:zshの場合は最後の
echo
は~/.bash_profile
のところを書き換えないといけないはず. 留意2:Boost もだいたいが header-only ライブラリとして使えるので今回はコンパイルはしなくてよい. -
CGALが依存するライブラリを入れる. GNU Multiple Precision Arithmetic (GMP) と GNU Multiple Precision Floating-Point Reliably (MPFR) Libraries のこと.GMPはUbuntuで管理者権限があると
bash1
$ sudo apt-get install libgmp3-dev libmpfr-dev
で入る.CentOSでは
bash1
$ sudo yum install gmp-devel mpfr
で入る. macOSの場合は,
bash1
$ brew install gmp mpfr
でよい.
-
CGALを持ってくる.これも実はUbuntuで管理者権限があれば簡単で
bash1
$ sudo apt-get install libcgal-dev
とすればよい.またmacOSでは
bash1
$ brew install cgal
で準備が整う. 管理者権限がない場合は,https://github.com/CGAL/cgal/releases からCGALの最新版を,たとえば
~/.sh/cgal/
にダウンロードする.以下はその例.bash1 2 3 4 5
$ mkdir -p ~/.sh/cgal/ $ cd ~/.sh/cgal/ $ wget https://github.com/CGAL/cgal/releases/download/v5.4/CGAL-5.4.tar.xz $ tar xvf CGAL-5.4.tar.xz $ echo 'export LD_LIBRARY_PATH=$HOME/.sh/cgal/CGAL-5.4/:$LD_LIBRARY_PATH' >> ~/.bash_profile
留意:zshの場合は最後の
echo
は~/.bash_profile
のところを書き換えないといけないはず. -
CMakeLists.txt
を用意する. CMakeについては,CMakeの使い方(その1) などで速習できる. CMake(やg++)のバージョンが古いとCGALがコンパイルできないという問題もあるが,以下ではそれらの問題はクリアされているとする.基本的に自分でCMakeLists.txtを書かないで,C++のコードが
~/Work/C++/test/
にある場合,bash1 2
$ cd ~/Work/C++/test/ $ cgal_create_CMakeLists -s main
とすると
CMakeLists.txt
が自動で作成される.-s test
のtestは適当に変更してよいはず. 管理者権限がなくて,yum
とかapt
でCGALを準備できなかった場合は,cgal_create_CMakeLists
がないと言われるので,~/.sh/cgal/
にCGALを入れた上の例の場合ではbash1
$ ~/.sh/cgal/CGAL-5.4/scripts/cgal_create_CMakeLists -s main
で
CMakeLists.txt
を生成してくれるはず.
上記の準備でだいたいCGALが使えるようになっているはず.
CGALを使う ¶
とりあえずサンプルソースコードがコンパイルできて実行できるか確かめる.
https://doc.cgal.org/latest/Periodic_3_mesh_3/Periodic_3_mesh_3_2mesh_implicit_shape_with_subdomains_8cpp-example.html
にある3D Periodic Mesh Generation
を実行できるか試してみる.
~/Work/C++/test/
に上のソースコードを貼り付けるなりしてtest.cpp
を作成する.
|
|
ちなみに,最後から4行目のCGAL::IO::output_periodic_mesh_to_medit
はのバージョン5.4ではIO::
が不要だった.(コンパイルしたらコンパイラに怒られた.)
ソースコードを用意して,上の「CMakeLists.txt
を用意する」の箇所に従ってCMakeLists.txt
を生成してもらい,UbuntuとmacOSでは
|
|
と打てば,コンパイルしてくれる. CentOSでは,
|
|
とmkdir
が必要な模様.
ここまでうまくいけば,あとは./build/main
で実行できるか確かめるのみ.
コンパイルはできるけど,うまく実行されない場合,ライブラリが足りない可能性がある.
Linuxの場合は$ ldd ./build/main
で確かめてみるとよいかもしれない.macOSの場合は$ otool -L ./build/main
で同様のことができる.