【问题标题】:How can I get xyz cordinates of dxf, stl如何获得 dxf、stl 的 xyz 坐标
【发布时间】:2018-03-13 16:09:25
【问题描述】:

我想获得用 .dxf、.stl 编写的 3d 对象的 xyz 点来制作我的 3d 打印机软件。

我尝试了 python dxf 解析器,但它无法获取 3d 对象的 xyz 坐标。

有聪明人知道我该怎么做吗?

【问题讨论】:

    标签: 3d autocad dxf 3d-printing


    【解决方案1】:

    使用 DXF 文件中的二进制数据对 3D 对象进行编码(类似于在 AutoCAD 命令行中评估 AutoLISP 表达式 (entget (car (entsel))) 后选择 3D 对象时获得的输出);因此,您将无法通过将 DXF 文件作为纯文本读取来获得所需的信息。

    由于 3D 对象的属性很少暴露给 AutoCAD 中的 LISP API,我建议您使用 .NET 查询对象的属性 - 网上有很多资源描述了如何实现这一点。

    【讨论】:

      【解决方案2】:

      我会使用 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 文件之间进行转换。

      【讨论】:

        猜你喜欢
        • 2019-08-22
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 2012-07-22
        • 2020-09-12
        • 2020-11-26
        • 2020-03-04
        相关资源
        最近更新 更多