我想获得用 .dxf、.stl 编写的 3d 对象的 xyz 点来制作我的 3d 打印机软件。
我尝试了 python dxf 解析器,但它无法获取 3d 对象的 xyz 坐标。
任何聪明的人都知道我该怎么做?
我想获得用 .dxf、.stl 编写的 3d 对象的 xyz 点来制作我的 3d 打印机软件。
我尝试了 python dxf 解析器,但它无法获取 3d 对象的 xyz 坐标。
任何聪明的人都知道我该怎么做?
我会使用 MeshLab,这是一个开源应用程序,它可以读取 STL 文件并导出带有或不带有普通信息的 XYZ 点云文本文件。每个顶点将显示为由空格分隔的三个浮点值,EG(没有普通数据);
-90.936005 122.486008 4.072000
-95.642006 139.926010 4.072000
-96.862007 139.952011 4.072000
并使用正常数据;
-90.936005 122.486008 4.072000 0.000000 0.000000 0.078929
-95.642006 139.926010 4.072000 0.000000 0.000000 0.099790
-96.862007 139.952011 4.072000 0.000000 0.000000 1.148707
然后,您可以使用标准 Python I/O 访问文本文件中的数据。
但是,如果您乐于使用构面,那么您只需要访问 STL 文件的 ASCII 形式,其中文本文件具有一系列构面记录,例如:
facet normal -0.000000e+000 0.000000e+000 1.000000e+000
outer loop
vertex -3.315800e+001 1.389420e+002 4.072000e+000
vertex -3.104200e+001 1.389120e+002 4.072000e+000
vertex -3.111600e+001 1.389960e+002 4.072000e+000
endloop
endfacet
...
endsolid vcg
您可以使用 MeshLab 在二进制文件和 ACSII STL 文件之间进行转换。
3D 对象使用 DXF 文件中的二进制数据进行编码(类似于(entget (car (entsel)))
在 AutoCAD 命令行中评估 AutoLISP 表达式后选择 3D 对象时获得的输出);因此,您将无法通过将 DXF 文件作为纯文本读取来获得所需的信息。
由于很少有 3D 对象的属性暴露给 AutoCAD 中的 LISP API,我建议您使用 .NET 查询对象的属性 - 网上有很多资源描述了如何实现这一点。