所以,我使用的软件接受3D对象的轮廓或.stl文件的形式。我的轮廓是沿z面的(每个平面都有一个唯一的z)。我不得不修改我的实验的轮廓,现在轮廓没有一个唯一的z为每一个平面(他们现在是轻微角的wrt z=0平面)。
点表示三维物体的边缘。获取这些点集合并创建.stl文件的最佳方法是什么?
对于使用python和3D对象,我还是比较陌生的,因此,任何帮助、指针或建议都将不胜感激。
编辑:我有使用Delaunay()的简单和眩晕,但是下一步如何进行呢?
发布于 2020-04-25 17:20:31
因此,在寻找了几个月的答案并尝试使用Meshlab和Blender之后,我终于偶然发现了使用小矮人的答案。希望它能帮助处于类似情况的其他人。
下面是生成.STL文件的代码:
from stl import mesh
num_triangles=len(fin_list)
data = np.zeros(num_triangles, dtype=mesh.Mesh.dtype)
for i in range(num_triangles):
#I did not know how to use numpy-arrays in this case. This was the major roadblock
# assign vertex co-ordinates to variables to write into mesh
data["vectors"][i] = np.array([[v1x, v1y, v1z],[v2x, v2y, v2z],[v3x, v3y, v3z]])
m=mesh.Mesh(data)
m.save('filename.stl')在网格中形成三角形的三个顶点作为定义曲面法线的矢量进入。我刚刚收集了三个这样的顶点,形成一个三角形,并将它们写入网格中。由于我有一个规则的点数组,所以很容易收集三角形:
for i in range(len(point_list)-1):
plane_a=[]
plane_b=[]
for j in range(len(point_list[i])-1):
tri_a=[]
tri_b=[]
#series a triangles
tri_a.append(point_list[i+1][j])
tri_a.append(point_list[i][j+1])
tri_a.append(point_list[i][j])
#series b triangles
tri_b.append(point_list[i+1][j])
tri_b.append(point_list[i+1][j+1])
tri_b.append(point_list[i][j+1])
#load to plane
plane_a.append(tri_a)
plane_b.append(tri_b)
group_a.append(plane_a)
group_b.append(plane_b)为创建网格选择三角形的规则如下:
还有两个规则我没有遵循,但在我的情况下仍然有效: 1。所有的坐标必须是正的(仅在第一象限) 2。所有的三角形必须以一个增加的z阶排列。
注意:可以有两种.STL文件格式:二进制格式和ASCII格式。numpy-stl以二进制格式写出。有关STL文件的更多信息可以找到这里。
希望这能有所帮助!
https://stackoverflow.com/questions/60066405
复制相似问题