一、问题描述
自己在Ubuntu上想直接获取单一零件ST L的外观尺寸大小,现整理了如下直接获取STL文件外观尺寸的脚本
二、使用方法
1. 安装依赖
pip install numpy-stl
2. 执行脚本
python read_baselink.py
注意脚本内容中读取文件的位置
current_directory = os.getcwd() # 获取当前脚本位置
file_path = current_directory +"/"+ file_name # STL 文件存放位置
read_baselink.py 内容
import numpy as np
from stl import mesh
import os
"""
Please pre_install numpy-stl
pip install numpy-stl
python read_baselink.py
"""
file_name='base_link.STL'
# file_directory='/home/eco/read_stl/meshes/'
# file_path = file_directory + file_name
current_directory = os.getcwd() # 获取当前脚本位置
file_path = current_directory +"/"+ file_name # STL 文件存放位置
def get_stl_size(file_path):
# 加载STL文件
stl_mesh = mesh.Mesh.from_file(file_path)
# 获取三维坐标数组
vertices = stl_mesh.vectors
# 计算物体的长、宽、高
x_min = np.min(vertices[:, :, 0]) # x轴方向上的最小值
x_max = np.max(vertices[:, :, 0]) # x轴方向上的最大值
y_min = np.min(vertices[:, :, 1]) # y轴方向上的最小值
y_max = np.max(vertices[:, :, 1]) # y轴方向上的最大值
z_min = np.min(vertices[:, :, 2]) # z轴方向上的最小值
z_max = np.max(vertices[:, :, 2]) # z轴方向上的最大值
return (x_min, x_max), (y_min, y_max), (z_min, z_max)
# 获取STL文件的长、宽、高
baffle_x = 0.030 # 挡板前向距离
baffle_y = 0.015 # 挡板横向距离(单边)
x_range, y_range, z_range = get_stl_size(file_path)
X = x_range[1] - x_range[0]
Y = y_range[1] - y_range[0]
Z = z_range[1] - z_range[0]
# 计算边缘点
LeftFront_x = x_range[1] + baffle_x
LeftFront_y = y_range[0] - baffle_y
LeftBack_x = x_range[0]
LeftBack_y = y_range[0] - baffle_y
RightFront_x = x_range[1] + baffle_x
RightFront_y = y_range[1] + baffle_y
RightBack_x = x_range[0]
RightBack_y = y_range[1] + baffle_y
# 输出结果
# print(f"Model 长、宽、高分别为:{X:.3f}、{Y:.3f}、{Z:.3f} m.")
# print("X 轴方向上的范围: {:.3f} ~ {:.3f} m".format(*x_range))
# print("Y 轴方向上的范围: {:.3f} ~ {:.3f} m".format(*y_range))
# print("Z 轴方向上的范围: {:.3f} ~ {:.3f} m".format(*z_range))
print("footprint: [[{:.3f}, {:.3f}], [{:.3f}, {:.3f}], [{:.3f}, {:.3f}], [{:.3f}, {:.3f}]]"
.format(LeftFront_x, LeftFront_y,LeftBack_x,LeftBack_y, RightFront_x, RightFront_y, RightBack_x,RightBack_y))