こちらは「pyvista」(Pythonライブラリ)のサンプルコードについての記事となっております。
その他、3Dモデルの処理方法についての情報は下記の記事で紹介しております。
open3d/plotly/trimesh/pyvista/vedo/pytorch3d/matplotlibといったPythonライブラリや3DツールのPythonAPIであるbpy(Blender)/unreal(Unreal Engine)といったPythonライブラリについて気になる方はこちらの記事をご覧ください。
目次
基本情報 … Basic Information
「pyvista」は3D可視化のためのPythonライブラリです。VTK (Visualization Toolkit) をPythonから利用できるようにしたラッパーライブラリで、高品質な3D表面/ボリュームの可視化が可能です。複数のデータ形式に対応しており、複雑なデータの視覚化や、メッシュの操作・編集も行えます。また、複数のPyVistaプロットを組み合わせることで、高度な3D可視化を実現できます。科学技術分野において、データの可視化・分析に利用されています。
サンプルコード … Sample Code
001 メッシュモデルの読み込み(形式:obj)、メッシュモデルの表示
import pyvista
# メッシュモデルの読み込み
mesh = pyvista.read("SAMPLE/monkeyTri.obj")
# メッシュモデルを表示する
mesh.plot(cpos='xy', show_scalar_bar=False)
002 メッシュモデルの保存
import pyvista
# メッシュモデルの読み込む
mesh = pyvista.read("SAMPLE/monkeyTri.obj")
# メッシュモデルの書き出し/保存
mesh.save("SAMPLE/monkeyTriCopy.ply", binary=False)
mesh.save("SAMPLE/monkeyTriCopy.stl", binary=False)
003 メッシュモデルの頂点情報の表示
import pyvista
import numpy as np
# メッシュモデルの読み込む
mesh = pyvista.read("SAMPLE/monkeyTri.obj")
# メッシュモデルの頂点情報の表示
vertices = mesh.points
print(f"Vertices Information:")
print(np.asarray(vertices))
print(f"Vertices Number: {len(vertices)}")
頂点情報の表示
Vertices Information:
[[ 0.46875 0.242188 0.757812]
[ 0.5 0.09375 0.6875 ]
[ 0.5625 0.242188 0.671875]
…
[ 0.59375 -0.125 -0.164062]
[ 0.640625 -0.007812 -0.429688]
[ 0.789062 -0.125 -0.328125]]
Vertices Number: 23187
004 メッシュモデルの読み込み、メッシュモデルから点群モデルへの変換、点群モデルの表示
import pyvista
# メッシュモデルの読み込む
mesh = pyvista.read("SAMPLE/monkeyTri.obj")
# メッシュモデルの書き出し/保存
mesh.save("SAMPLE/monkeyTriCopy.ply", binary=False)
mesh.save("SAMPLE/monkeyTriCopy.stl", binary=False)
# 頂点座標から点群モデルを作成
vertices = mesh.points
pcd = pyvista.PolyData(vertices)
# 点群モデルを表示する
pcd.plot(cpos='xy', show_scalar_bar=False)
ETC
1.「pyvista」(Pythonライブラリ)で「OBJ」ファイルを読み込む
2.「pyvista」(Pythonライブラリ)で「OBJ」モデルを表示する
### Public Library ############################################################
import pyvista
###############################################################################
obj = pyvista.get_reader('SAMPLE/monkey.obj').read()
print(obj.points)
### [[ 0.46875 0.242188 0.757812]
### [ 0.4375 0.164062 0.765625]
### [ 0.5 0.09375 0.6875 ]
### ...
### [-0.640625 -0.007812 -0.429688]
### [-0.59375 -0.125 -0.164062]
### [-0.773438 -0.140625 -0.125 ]]
print(obj.active_t_coords)
### [[0.890955 0.590063]
### [0.870622 0.589649]
### [0.860081 0.560115]
### ...
### [0.264218 0.55014 ]
### [0.369913 0.610196]
### [0.325318 0.656224]]
print(obj.active_normals)
### [[ 0.665 -0.2008 0.7194]
### [ 0.665 -0.2008 0.7194]
### [ 0.665 -0.2008 0.7194]
### ...
### [ 0.2474 -0.9231 -0.2945]
### [ 0.2474 -0.9231 -0.2945]
### [ 0.2474 -0.9231 -0.2945]]
###############################################################################
obj.plot(cpos='xy', show_scalar_bar=False)
###############################################################################
このPythonプログラムは、PyVistaを使用してOBJファイルを読み込んでいます。OBJファイルには、3Dモデルのポイント、テクスチャ座標、法線などが含まれています。このプログラムは、読み込まれた3Dモデルのポイント、テクスチャ座標、法線を出力し、3DモデルをXY平面の視点でプロットします。