如何使用Python将表示高度的2D整数数组转换为STL格式文件
2D高度数组转STL文件的Python实现方案
可以直接用Python实现转换,我们可以借助numpy处理高度数组,numpy-stl库生成STL网格模型,具体实现如下:
依赖安装
先安装所需的第三方库:
pip install numpy numpy-stl
实现思路
- 把2D高度数组的行、列索引对应到XY平面的坐标点,对应位置的数值作为该点的Z轴高度
- 给每一组相邻的四个网格点生成两个三角面,拼接成完整的地形网格
- 如果有3D打印需求,可以额外补充侧面和底部三角面,生成闭合实体模型
完整可运行代码
import numpy as np from stl import mesh from random import randint # 生成示例中的100*100随机高度数组 grid_size = 100 height_arr = np.zeros((grid_size, grid_size), dtype=int) for i in range(grid_size): for j in range(grid_size): height_arr[i][j] = randint(100, 255) # 初始化网格:每个网格对应2个三角面,总面数为2*(grid_size-1)*(grid_size-1) face_count = 2 * (grid_size - 1) * (grid_size - 1) terrain_mesh = mesh.Mesh(np.zeros(face_count, dtype=mesh.Mesh.dtype)) # 遍历生成所有三角面 for i in range(grid_size - 1): for j in range(grid_size - 1): # 取当前网格的四个顶点坐标 v1 = [i, j, height_arr[i][j]] v2 = [i+1, j, height_arr[i+1][j]] v3 = [i+1, j+1, height_arr[i+1][j+1]] v4 = [i, j+1, height_arr[i][j+1]] # 第一个三角面 terrain_mesh.vectors[2 * (i * (grid_size-1) + j)] = np.array([v1, v2, v3]) # 第二个三角面 terrain_mesh.vectors[2 * (i * (grid_size-1) + j) + 1] = np.array([v1, v3, v4]) # 导出为STL文件 terrain_mesh.save('height_terrain.stl')
注意事项
- 上述代码生成的是开放的单面地形网格,如有实体需求可以自行补充底部和侧面的三角面
- 可以根据实际需求调整XY轴的缩放系数,避免模型比例失衡
- 高度值可以自行做缩放处理,不需要局限在100~255的区间
内容的提问来源于stack exchange,提问作者Jakub Świniarski
相关产品推荐
相关产品推荐

