添加 MTEXT 时,Autocad 不读取我的 DXF 文件
Autocad doesn't read my DXF file when adding MTEXT
前提
我写了一个方法,允许创建一个带有一些图形实体的 dxf 文件:线、多边形、文本......
一切都很完美,我的 dxf 可以从我尝试过的每个程序中读取。
问题
现在我想添加一个新实体:一个矩形框内的文本。像其他实体一样,我搜索了正确的 dxf 等价物,然后我跟着 this group codes table。
这个 MTEXT 在我试过的每个在线 dxf reader 中都正确显示,但在 AutoCad 中没有:当我尝试用 MTEXT 打开我的 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 参考中缺少很多信息。
DXF R13+ 需要每个实体(组代码 5)唯一句柄
DXF R2000+ 需要 所有者句柄(组代码 330)。 DXF R13/14 可能不需要所有者句柄。所有者句柄是实体所在布局的 BLOCK RECORD 句柄。对于 DXF R13+,BLOCK RECORD 是管理块和布局的中央结构,因为 BLOCK RECORD“拥有”所有实体,而不是 BLOCK 或 LAYOUT。
DXF R13+通过子类标记分隔不同子类的数据(AutoCAD的C++内部)。缺少两个子类标记,第一个是 (100, "AcDbEntiy"),它标记常见 DXF 属性(如图层和线型)的开始。第二个是 MTEXT 特定属性开头的 (100, "AcDbMText") 标记。
您的代码(在 MTEXT 之前)可能有效,因为您只使用了 DXF R12 实体,而 AutoCAD 忽略了更高版本 DXF 中的功能。
如果您实施 DXF R2000+ 支持,您还必须添加更多必需的结构:https://ezdxf.mozman.at/docs/dxfinternals/filestructure.html#minimal-dxf-content
前提
我写了一个方法,允许创建一个带有一些图形实体的 dxf 文件:线、多边形、文本...... 一切都很完美,我的 dxf 可以从我尝试过的每个程序中读取。
问题
现在我想添加一个新实体:一个矩形框内的文本。像其他实体一样,我搜索了正确的 dxf 等价物,然后我跟着 this group codes table。 这个 MTEXT 在我试过的每个在线 dxf reader 中都正确显示,但在 AutoCad 中没有:当我尝试用 MTEXT 打开我的 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 参考中缺少很多信息。
DXF R13+ 需要每个实体(组代码 5)唯一句柄
DXF R2000+ 需要 所有者句柄(组代码 330)。 DXF R13/14 可能不需要所有者句柄。所有者句柄是实体所在布局的 BLOCK RECORD 句柄。对于 DXF R13+,BLOCK RECORD 是管理块和布局的中央结构,因为 BLOCK RECORD“拥有”所有实体,而不是 BLOCK 或 LAYOUT。
DXF R13+通过子类标记分隔不同子类的数据(AutoCAD的C++内部)。缺少两个子类标记,第一个是 (100, "AcDbEntiy"),它标记常见 DXF 属性(如图层和线型)的开始。第二个是 MTEXT 特定属性开头的 (100, "AcDbMText") 标记。
您的代码(在 MTEXT 之前)可能有效,因为您只使用了 DXF R12 实体,而 AutoCAD 忽略了更高版本 DXF 中的功能。
如果您实施 DXF R2000+ 支持,您还必须添加更多必需的结构:https://ezdxf.mozman.at/docs/dxfinternals/filestructure.html#minimal-dxf-content