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])