Pythonで3Dデータファイル(STL)を操作

Pythonでは3Dポリゴンを扱うことができます。STLというフォーマットはポリゴンのXYZ座標を列挙するだけなので、ライブラリを使わずとも扱えますが、numpy-stlというライブラリを使うともっと簡単です。インストールも簡単です。

pip install numpy-stl

 

from stl import mesh
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

def show(data):
    figure = plt.figure()
    axes = mplot3d.Axes3D(figure)

    axes.add_collection3d(mplot3d.art3d.Poly3DCollection(data.vectors))
    scale = data.points.flatten(-1)
    axes.auto_scale_xyz(scale, scale, scale)
    plt.show()

data = mesh.Mesh.from_file('data.stl')

show(data)

 

回転も簡単に実行できます。30度回転。

data.rotate([0.0, 1.0, 0.0], math.radians(30))

X軸について10シフト。

data.x += 10

ポリゴンの取得は次のように行います。例えば10個目のポリゴンの取得。ポリゴンのデータ形式は[[X,Y,Z],[X,Y,Z],[X,Y,Z]]というような3点分の3次元座標です。

data.vectors[10]

各ポリゴンの法線ベクトルも取得できます。ただし、回転などの操作を行った後にはupdate_normals()を呼んでから取得する必要があります。

data.update_normals()
print(data.normals[10])