2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

meshlabをソースコードから使ってみる (環境構築編)

Posted at

はじめに

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用ファイル

CMakeLists.txt
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++ファイル作成

main.cpp
#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の各種関数を使うための準備が整いました.
今後の記事で各種機能の使い方を説明します.

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?