首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从点集合创建.stl文件

从点集合创建.stl文件
EN

Stack Overflow用户
提问于 2020-02-04 22:21:53
回答 1查看 7K关注 0票数 1

所以,我使用的软件接受3D对象的轮廓或.stl文件的形式。我的轮廓是沿z面的(每个平面都有一个唯一的z)。我不得不修改我的实验的轮廓,现在轮廓没有一个唯一的z为每一个平面(他们现在是轻微角的wrt z=0平面)。

点表示三维物体的边缘。获取这些点集合并创建.stl文件的最佳方法是什么?

对于使用python和3D对象,我还是比较陌生的,因此,任何帮助、指针或建议都将不胜感激。

编辑:我有使用Delaunay()的简单和眩晕,但是下一步如何进行呢?

  1. 所有点的坐标都在这个文本文件中,格式为"x“。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 17:20:31

因此,在寻找了几个月的答案并尝试使用Meshlab和Blender之后,我终于偶然发现了使用小矮人的答案。希望它能帮助处于类似情况的其他人。

下面是生成.STL文件的代码:

代码语言:javascript
复制
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')

在网格中形成三角形的三个顶点作为定义曲面法线的矢量进入。我刚刚收集了三个这样的顶点,形成一个三角形,并将它们写入网格中。由于我有一个规则的点数组,所以很容易收集三角形:

代码语言:javascript
复制
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. 每个三角形必须与相邻三角形共享两个顶点。
  3. 法向必须指向表面外。

还有两个规则我没有遵循,但在我的情况下仍然有效: 1。所有的坐标必须是正的(仅在第一象限) 2。所有的三角形必须以一个增加的z阶排列。

注意:可以有两种.STL文件格式:二进制格式和ASCII格式。numpy-stl以二进制格式写出。有关STL文件的更多信息可以找到这里

希望这能有所帮助!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60066405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档