はじめに
MeshLabはメッシュ・点群データをGUIで編集できるOSSのソフトです.
ソースコードがgithub上でGPL-3.0ライセンスにて提供されています.
VCGlibというメッシュ処理用ライブラリがコアになっています.
目的
- MeshLabでやっているデータ処理をGUIなしでやりたい
- MeshLabだけではできない細かいカスタマイズをしたい
MeshLabにもコマンドラインベースで使うことができるmeshlabserverというソフトが付属しています.
しかし,MeshLabの機能を順番に呼び出すマクロファイルを作成できるだけなので,FreeCADのマクロのような自由度がありません.
マクロベースではなくコードベースで作成することで,自由に処理プロセスを構築できるようにします.
開発環境
- Windows10 64bit
- CMake version 3.15.0
- Visual Studio 2017
コンパイルはCMakeを使って行うので,他のOS環境・コンパイラでも動くと思います.
詳しくはCMakeの使い方を調べてください.
サンプルプログラムの作成
本稿では最小限のコードだけ作成して,動作確認できるところまで実装します.
ソースコードをgithubからクローン
vcglibをクローン
develブランチを使用します
$ git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git
meshlabをクローン
$ git clone https://github.com/cnr-isti-vclab/meshlab.git
ソースファイル
フォルダ構成は以下のようにします.
--- project folder
|- CMakeLists.txt
|- main.cpp
CMake用ファイル
cmake_minimum_required( VERSION 3.6 )
project(sample CXX) # 実行ファイル名
# Visual Studioを使う場合は,ファイルの文字コードをUTF-8にする設定を追加
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
# デバッグモードで出力したときに末尾にdの文字を追加する設定
if(NOT CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX d)
endif()
# 出力ディレクトリを変更
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin)
# ライブラリのパスを環境変数から取得
file(TO_CMAKE_PATH $ENV{VCGLIB_DIR} VCGLIB_DIR)
file(TO_CMAKE_PATH $ENV{MESHLAB_DIR} MESHLAB_DIR)
file(TO_CMAKE_PATH ${VCGLIB_DIR}/eigenlib EIGEN3_INCLUDE_DIR)
# MeshLabのMESHLAB_SCALAR型をfloatとして定義
add_definitions(-DMESHLAB_SCALAR=float)
# 実行ファイルを作成
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME}
PRIVATE
main.cpp
${VCGLIB_DIR}/wrap/ply/plylib.cpp # PLYファイル扱うために追加
)
target_include_directories(${PROJECT_NAME}
PUBLIC
${EIGEN3_INCLUDE_DIR}
${VCGLIB_DIR}
${MESHLAB_DIR}
)
# デバッグモードで出力したときに末尾にdの文字を追加する設定
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
C++ファイル作成
#include <vcg/complex/algorithms/create/platonic.h>
#include <vcg/complex/complex.h>
#include <common/ml_mesh_type.h>
using namespace vcg;
using namespace std;
int main(){
CMeshO mesh;
tri::Tetrahedron(mesh); // 正四面体を作成
for(CMeshO::VertexType &vt : mesh.vert){ // 各頂点にアクセス
cout << vt.Index() << endl;
}
return 1;
}
コンパイル
あらかじめ以下の環境変数を定義しておきます.
- VCGLIB_DIR : path/to/vcglib (e.g. C:/Users/Public/Documents/GitHub/vcglib)
- MESHLAB_DIR : path/to/MeshLab/source (e.g. C:/Users/Public/Documents/GitHub/meshlab/src)
project folder内で以下のコマンドを実行します.
違うコンパイラを使用する場合は,-G"Visual Studio 15 2017 Win64"
の箇所を適切なコンパイラに変えてください.
$ md build
$ cd build
$ cmake .. -G"Visual Studio 15 2017 Win64"
$ cmake --build . --config release
コンパイルが成功すると,project folder/binフォルダにsample.exeが生成されます.
動作テスト
project folder内で以下のコマンドを実行します.
$ bin\sample.exe
以下の出力が出てくれば成功です!
0
1
2
3
まとめ
これでMeshLabの各種関数を使うための準備が整いました.
今後の記事で各種機能の使い方を説明します.