CGAL 4.8 - Poisson Surface Reconstruction: User Manualを実行した。以下概要。
CGALのインストール
sudo apt-get intall libcgal-dev libcgal-demo libeigen3-dev mkdir $HOME/cgal cd $HOME/cgal tar xzf /usr/share/doc/libcgal-demo/examples.tar.gz tar xzf /usr/share/doc/libcgal-demo/demo.tar.gz
ディレクトリの移動
~/cgal/examples/Surface_reconstruction_points_3
ソースコードの編集
- cgal-discuss - Compilation errors in Poisson reconstruction sample code(CGAL 4.2 beta1)を参考に
#define CGAL_EIGEN3_ENABLED
をファイルの先頭に追加する
コンパイル
aptでインストールしたパッケージ付属のライブラリでのみ有効
clang++ -I/usr/include/ -I/usr/include/eigen3/ -lCGAL -lboost_thread -lboost_system -lgmp -lmpfr poisson_reconstruction_example.cpp
g++で動くかどうかは未検証
実行
./a.out
出力ファイルの編集
kitten_poisson-20-30-0.375.off
というファイルができるので、テキストエディタで頂点の座標までの行を削除してから、
faces = [] vertices = [] with open("kitten_poisson-20-30-0.375.off") as f: for line in f.readlines(): line = line.split() if len(line) == 3: vertices.append([float(s) for s in line]) if len(line) == 4: faces.append([int(s)+1 for s in line[1:]]) with open("kitten.obj", "w") as f: out = "" for vertex in vertices: out += "v " + " ".join([str(i) for i in vertex]) + "\n" for face in faces: out += "f " + " ".join([str(i) for i in face]) + "\n" f.write(out)
プロット
ShapeMove/src/Fairing at master · statgenetJimu/ShapeMove · GitHubを利用するなら./fairing kitten.obj
ちなみに元のデータは以下のような感じ(処理後なので点は減少しているが)
参考
ドロネー分割や凸包だと凹んでいる部分があるデータでうまく行かない(がメモ)