添加 MTEX​​T 时,Autocad 不读取我的 DXF 文件

Autocad doesn't read my DXF file when adding MTEXT

前提

我写了一个方法,允许创建一个带有一些图形实体的 dxf 文件:线、多边形、文本...... 一切都很完美,我的 dxf 可以从我尝试过的每个程序中读取。

问题

现在我想添加一个新实体:一个矩形框内的文本。像其他实体一样,我搜索了正确的 dxf 等价物,然后我跟着 this group codes table。 这个 MTEX​​T 在我试过的每个在线 dxf reader 中都正确显示,但在 AutoCad 中没有:当我尝试用 MTEX​​T 打开我的 dxf 时,出现错误并且没有显示任何内容。 可能是什么问题?

我的尝试

这是我的 dxf 的多行文字部分。为了使其更易于理解,我添加了标有 // 的注释(当然文件中不存在):

0         //Entity
MTEXT
8         //Layer
0
62        //Color
   135
1         //Text
This\Pis a beautiful example.
10        //x
0
20        //y
200
40        //Nominal (initial) text height
16
41        //Reference rectangle width
50
71        //Attachment point: 1 = Top left
1
72        //Drawing direction: 5 = By style
5
50        //Rotation angle in radians
0
90        //Background fill setting: 0 = Background fill off
0

我也试过添加所有非可选标签,但结果是一样的...

输出

通用 dxf 查看器:

AutoCAD 2021:

AutoCAD 很好,最多支持 DXF 版本 R12,从 DXF 版本 R13+ 开始,AutoCAD 非常挑剔。 MTEXT 至少需要 DXF R13+,因此创建 AutoCAD 接受的 DXF 文件需要做更多的工作。错误消息通常不是很有帮助,并且 DXF 参考中缺少很多信息。

  1. DXF R13+ 需要每个实体(组代码 5)唯一句柄

  2. DXF R2000+ 需要 所有者句柄(组代码 330)。 DXF R13/14 可能不需要所有者句柄。所有者句柄是实体所在布局的 BLOCK RECORD 句柄。对于 DXF R13+,BLOCK RECORD 是管理块和布局的中央结构,因为 BLOCK RECORD“拥有”所有实体,而不是 BLOCK 或 LAYOUT。

  3. DXF R13+通过子类标记分隔不同子类的数据(AutoCAD的C++内部)。缺少两个子类标记,第一个是 (100, "AcDbEntiy"),它标记常见 DXF 属性(如图层和线型)的开始。第二个是 MTEX​​T 特定属性开头的 (100, "AcDbMText") 标记。

您的代码(在 MTEX​​T 之前)可能有效,因为您只使用了 DXF R12 实体,而 AutoCAD 忽略了更高版本 DXF 中的功能。

如果您实施 DXF R2000+ 支持,您还必须添加更多必需的结构:https://ezdxf.mozman.at/docs/dxfinternals/filestructure.html#minimal-dxf-content