DXF 导入器,不确定以什么顺序进行转换,如何处理块的单位和基点?
DXF importer, not sure in which order to do transformations, how to handle units and base point of a block?
我正在实施一个 DXF 导入器,现在我正在考虑 HEADER
部分并且只有一个变量 INSUNITS
,TABLES
部分只有一个 table BLOCK_RECORD
table, BLOCKS
节, ENTITIES
节 (INSERT
, LINE
, LWPOLYLINE
, ARC
, CIRCLE
).
导入时,我不知道是否需要考虑 单位,如果需要,我不知道具体如何考虑。我的文件现在没有以正确的方式导入,这很可能是由于这些单位,因为我认为我正在正确地进行 INSERT
转换:
EXTRUSIONDIRECTIONTRANSFORMATION *
INSERTIONPOINTTRANSLATION *
ROTATION * SCALING * BASEPOINTTRANSLATION
当我删除 BASEPOINTTRANSLATION
时,我正在导入的文件以正确的方式导入,但是其他一些文件没有以正确的方式导入,并且绘图的某些部分被导入的位置离休息很远.
在我看来,方块的基点在 英寸 中,当我将其转换为 米 时,它变得有点更好的。因此,如果有人知道我应该按什么顺序进行转换以及如何处理 DXF 文件中的单位,我将非常感激,因为我现在被卡住了。
在Python ezdxf
包中,我是这样做的:
- 起始矩阵
M0
= OCS 变换矩阵,包括 x、y 和 z 轴的缩放;与 OCS 变换矩阵 * 缩放矩阵相同
- 关于挤压向量的旋转矩阵
M1
- 变换矩阵
M
=M0
*M1
- 将翻译添加到
insert
点
- 将
insert
点从 OCS 转换为 WCS
- 用当前矩阵
M
转换 block_base_point
没有平移, M
的当前状态还没有平移,所以一个完整的转换不会是问题,但在我的代码中“仅方向”转换更快
- 从
insert
点减去block_base_point
- 将
M
的最后一行设置为 (insert.x, insert.y, insert.z, 1)
如果行主要顺序,最后一列如果列主要顺序,基本上是 M
* 平移矩阵
可以忽略单位缩放,CAD 应用程序必须设置正确的缩放值以匹配 INSERT
缩放属性中的父布局单位和块参考单位。例如。如果将以 mm 为单位的块插入到以 m 为单位的模型空间,INSERT
实体的缩放值必须为 0.001 才能将毫米转换为米 (1mm = 0.001m)。
我正在实施一个 DXF 导入器,现在我正在考虑 HEADER
部分并且只有一个变量 INSUNITS
,TABLES
部分只有一个 table BLOCK_RECORD
table, BLOCKS
节, ENTITIES
节 (INSERT
, LINE
, LWPOLYLINE
, ARC
, CIRCLE
).
导入时,我不知道是否需要考虑 单位,如果需要,我不知道具体如何考虑。我的文件现在没有以正确的方式导入,这很可能是由于这些单位,因为我认为我正在正确地进行 INSERT
转换:
EXTRUSIONDIRECTIONTRANSFORMATION *
INSERTIONPOINTTRANSLATION *
ROTATION * SCALING * BASEPOINTTRANSLATION
当我删除 BASEPOINTTRANSLATION
时,我正在导入的文件以正确的方式导入,但是其他一些文件没有以正确的方式导入,并且绘图的某些部分被导入的位置离休息很远.
在我看来,方块的基点在 英寸 中,当我将其转换为 米 时,它变得有点更好的。因此,如果有人知道我应该按什么顺序进行转换以及如何处理 DXF 文件中的单位,我将非常感激,因为我现在被卡住了。
在Python ezdxf
包中,我是这样做的:
- 起始矩阵
M0
= OCS 变换矩阵,包括 x、y 和 z 轴的缩放;与 OCS 变换矩阵 * 缩放矩阵相同 - 关于挤压向量的旋转矩阵
M1
- 变换矩阵
M
=M0
*M1
- 将翻译添加到
insert
点- 将
insert
点从 OCS 转换为 WCS - 用当前矩阵
M
转换block_base_point
没有平移,M
的当前状态还没有平移,所以一个完整的转换不会是问题,但在我的代码中“仅方向”转换更快 - 从
insert
点减去block_base_point
- 将
M
的最后一行设置为(insert.x, insert.y, insert.z, 1)
如果行主要顺序,最后一列如果列主要顺序,基本上是M
* 平移矩阵
- 将
可以忽略单位缩放,CAD 应用程序必须设置正确的缩放值以匹配 INSERT
缩放属性中的父布局单位和块参考单位。例如。如果将以 mm 为单位的块插入到以 m 为单位的模型空间,INSERT
实体的缩放值必须为 0.001 才能将毫米转换为米 (1mm = 0.001m)。