【问题标题】:How to decode .dxf files?如何解码 .dxf 文件?
【发布时间】:2026-01-29 13:05:01
【问题描述】:

我想将 .dxf 文件中的绘图转换为 g 代码。有工具可以做到这一点,但我想自己编写代码。因此,第一部分是解码 .dxf 格式。然而,.dxf 文件的内容看起来并不容易破译。

我下载了一个 .dxf 文件 here 并在文本编辑器中打开它。

我也指的是这个manual。看起来 .dxf 文件中的内容主要是样式和配置信息,我倾向于省略几乎所有内容。所以,1。如果有的话,你能指定不应该省略的属性吗?

据我所知,这些数字在 .dxf 文件中分为多个实体。因此,我只是复制粘贴实体部分。请注意,文件中有 6 个 SECTIONS,最后一个部分(BLOCKS OBJECTS)是最长的部分,尽管我不知道那部分代表什么(如果你能解释一下就好了)。

在下面的代码中,10 和 20 应该代表 X 和 Y 位置,42 应该代表凸起。可以跟踪折线。我考虑使用 TITLES 作为导航点以及 10、20 和 42 等数字从文件中提取信息。但下面有两条折线。所以,2。我应该考虑哪条折线,另一条的用途是什么?

  0
SECTION
  2
ENTITIES
  0
LWPOLYLINE
  5
72    # What
330   # are
1F    # these
100   # numbers?
AcDbEntity
  8
Layer 1
100
AcDbPolyline
 90
       12
 70
     1
 43    # Constant width (optional; default = 0)
0.0
 10
11.7511418685121
 20
14.9867256637168
 42
1.0
 10
3.31114186851211
 20
14.9867256637168
 10
-0.0132743362831871
 20
14.9867256637168
 10
-0.0132743362831871
 20
11.72
 42
1.0
 10
-0.0132743362831871
 20
3.28
 10
-0.0132743362831871
 20
0.0398230088495577
 10
3.28
 20
0.039823008849557
 42
1.0
 10
11.72
 20
0.0398230088495577
 10
15.0132743362832
 20
0.0398230088495577
 10
15.0132743362832
 20
3.28
 42
1.0
 10
15.0132743362832
 20
11.72
 10
15.0132743362832
 20
14.9867256637168
  0
LWPOLYLINE
  5
73
330
1F
100
AcDbEntity
  8
Layer 1
100
AcDbPolyline
 90
       12
 70
     1
 43
0.0
 10
12.6544611051008
 20
15.9867256637168
 10
16.0132743362832
 20
15.9867256637168
 10
16.0132743362832
 20
12.6233192365887
 42
-0.823684764724874
 10
16.0132743362832
 20
2.37668076341128
 10
16.0132743362832
 20
-0.960176991150442
 10
12.6233192365887
 20
-0.960176991150442
 42
-0.823684764724874
 10
2.37668076341128
 20
-0.960176991150443
 10
-1.01327433628319
 20
-0.960176991150442
 10
-1.01327433628319
 20
2.37668076341128
 42
-0.823684764724874
 10
-1.01327433628319
 20
12.6233192365887
 10
-1.01327433628319
 20
15.9867256637168
 10
2.40782263192339
 20
15.9867256637168
 42
-0.823684764724874
  0
ENDSEC

相关问题

【问题讨论】:

    标签: decode autocad cad dxf g-code


    【解决方案1】:

    最后一段(BLOCKS)是最长的,虽然我不知道 那部分代表什么(如果你能解释一下就好了)。

    BLOCKS 部分的用途在您所参考的手册中进行了总结:

    BLOCKS 部分包含图形中每个块引用的条目。

    将块视为一组实体,它们组合在一起作为一个元素。该块有:

    • 原产地
    • 旋转
    • 规模

    此类块在绘图本身中引用,并且块的每个实例称为INSERT

    因此,当您遍历 ENTITIES 部分并遇到 INSERT 实体时,您必须在 BLOCK 表中找到它的句柄并相应地处理元素。


    许多实体共有一些 DXF 代码,它们并不总是与特定实体类型的信息一起列出(例如 LWPOLYLINE)。

    查看complete list 中的这些数字:

    • 5:实体句柄;最多 16 位十六进制数字的文本字符串(固定)

    • 330:软指针句柄;指向同一 DXF 文件或图形中的其他对象的任意软指针。在INSERTXREF 期间翻译 操作

    • 100:子类数据标记(派生类名称为字符串)。对于派生自的所有对象和实体类都是必需的 另一个具体的类。子类数据标记分隔数据 由继承链中的不同类定义的相同的 目的。这是对每个 DXF 名称的要求的补充 从 ObjectARX 派生的不同具体类(请参阅子类标记)

    这个page也很有用。


    为什么首先有 2 个LWPOLYLINES,为什么不只是一对BLOCK-ENDBLK

    如果您阅读有关BLOCKS 的部分,您会看到:

    模型空间和图纸空间块定义

    三个空定义总是出现在BLOCKS 部分。他们是 标题为*Model_Space*Paper_Space*Paper_Space0。这些定义 将模型空间图纸空间的表示表示为块 内部定义。第一个纸空间的内部名称 布局是*Paper_Space,第二个是*Paper_Space0,第三个是 *Paper_Space1,以此类推。

    【讨论】:

    • 谢谢。您答案中的链接帮助我更好地理解。组代码就像一个字段的名称,在下一行中我们输入相关值。但我没有得到关于块的所有信息。例如,在我分享的文件中有 3 个 BLOCK-ENDBLK 对,但有 2 个 LWPLOYLINES。为什么首先有 2 个 LWPOLYLINES,为什么它不只是一个 BLOCK-ENDBLK 对?
    • @Xfce4 请查看我的更新答案。我认为当创建一个新图形时,它包括两个图纸空间布局,也许它们包括“LWPOLYLINE”对象。如果不在查看器中打开实际的 DXF 文件,很难分辨。小心同时提出多个问题。 ? 如果我回答了您的问题,请点赞并接受。谢谢!
    • 我在在线查看器中打开了 dxf 文件,其中有两条相互平行的细多段线。这就是文件中有两个折线实体的原因。我认为link 中的形状是一条用粗线绘制的单折线。
    • 如果我应用阴影,会有一个具有更高厚度值的 LWPOLYLINE 吗?实际上,如果我尝试看看会更好。我想我会在我的电脑上下载一个免费的 CAD 软件。非常感谢你的帮助。你真是太好了。
    • @Xfce4 您将拥有三个元素。您可以删除一个元素并将线宽设置为线。但是,请按照您所说的在应用程序中尝试,因为这超出了您的问题范围。 ??乐于助人。
    最近更新 更多