如何在dxf文件中represent/read一个立方体?
How to represent/read a cube in dxf file?
试图打开一个 dxf 文件格式(C++ 中的实际项目),我可以理解文件的基本结构,但我无法找到立方体的实际表示方式。
对于 CAD 中的立方体,我预计至少有 9 个值:
- X Y Z位置
- A B C旋转
- W H D 立方体的大小
我希望 X、Y、Z、A、B 和 C 在实体部分中,
但是查看示例文件,我看到了很多设置、预览图像(在文件中占据重要 space)、布局等。但是没有任何东西可以与立方体的实际情况相匹配建造。
问题:
如何在dxf文件中represent/read立方体?
更多信息
这里是关于文件格式的文档:
http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3
这是一个带有立方体的文件示例(使用 BricsCAD 创建)。不幸的是,我无法嵌入该文件,因为它太大了。
“立方体”是 20mm x 25mm x 30mm。
https://download.escain.org/example_cube_20_25_30_mm.dxf
我检查了 LibreCAD 源代码,但它不管理 3D 模型。此外,libdxfrw 库过于通用(它只是用完整的实体数据调用接口回调)。
https://github.com/LibreCAD/LibreCAD_3
https://github.com/LibreCAD/libdxfrw
这个立方体是嵌入式二进制 ACIS 数据 (3DSOLID),如果没有 Spatial Inc 的库就无法解释。有关更多信息,请参阅我对另一个问题的回答:
编辑:查找 ACIS 实体的二进制数据
从 R2013/AC1027 开始 ACIS 数据的建模器几何存储在 ACDSDATA
部分中 ACDSRECORD
这些记录没有句柄,而是有一个 ID。您的 3DSOLID 记录从第 22393 行开始,ID 为 10:
0
ACDSRECORD
90
1
2
AcDbDs::ID
280
10
320
D2 <<< handle to 3DSOLID
2
ASM_Data
280
15
94
9259 <<< size in bytes
310
41534D2042696E61... <<< binary data as multiple tags of group code 310
这是您的 3DSOLD,句柄 D2
从第 2187 行开始:
0
3DSOLID
5
D2 <<< handle of your 3DSOLID
330
1F
100
AcDbEntity
8
0
100
AcDbModelerGeometry
290
0
2
{00000000-0000-0000-0000-000000000000}
100
AcDb3dSolid
350
0
如您所见,ACDSDATA
部分中的 ACDSRECORD
二进制内容与 3DSOLID 没有关联。
我不知道将这些数据链接在一起的 table(字典)。我知道的唯一方法是在 ACDSDATA
部分的所有 ACDSRECORD
中搜索指向 ACIS 对象的链接(组代码 320)。
仅供参考:在 R2013 之前的 DXF 版本中,ACIS 数据作为带有糟糕的异或“加密”的 ascii 文本存储在实体本身中。我关于 DXF 格式的所有知识都包含在我的 Python 包中:ezdxf.
试图打开一个 dxf 文件格式(C++ 中的实际项目),我可以理解文件的基本结构,但我无法找到立方体的实际表示方式。
对于 CAD 中的立方体,我预计至少有 9 个值:
- X Y Z位置
- A B C旋转
- W H D 立方体的大小
我希望 X、Y、Z、A、B 和 C 在实体部分中,
但是查看示例文件,我看到了很多设置、预览图像(在文件中占据重要 space)、布局等。但是没有任何东西可以与立方体的实际情况相匹配建造。
问题:
如何在dxf文件中represent/read立方体?
更多信息
这里是关于文件格式的文档:
http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3
这是一个带有立方体的文件示例(使用 BricsCAD 创建)。不幸的是,我无法嵌入该文件,因为它太大了。 “立方体”是 20mm x 25mm x 30mm。
https://download.escain.org/example_cube_20_25_30_mm.dxf
我检查了 LibreCAD 源代码,但它不管理 3D 模型。此外,libdxfrw 库过于通用(它只是用完整的实体数据调用接口回调)。
https://github.com/LibreCAD/LibreCAD_3
https://github.com/LibreCAD/libdxfrw
这个立方体是嵌入式二进制 ACIS 数据 (3DSOLID),如果没有 Spatial Inc 的库就无法解释。有关更多信息,请参阅我对另一个问题的回答:
编辑:查找 ACIS 实体的二进制数据
从 R2013/AC1027 开始 ACIS 数据的建模器几何存储在 ACDSDATA
部分中 ACDSRECORD
这些记录没有句柄,而是有一个 ID。您的 3DSOLID 记录从第 22393 行开始,ID 为 10:
0
ACDSRECORD
90
1
2
AcDbDs::ID
280
10
320
D2 <<< handle to 3DSOLID
2
ASM_Data
280
15
94
9259 <<< size in bytes
310
41534D2042696E61... <<< binary data as multiple tags of group code 310
这是您的 3DSOLD,句柄 D2
从第 2187 行开始:
0
3DSOLID
5
D2 <<< handle of your 3DSOLID
330
1F
100
AcDbEntity
8
0
100
AcDbModelerGeometry
290
0
2
{00000000-0000-0000-0000-000000000000}
100
AcDb3dSolid
350
0
如您所见,ACDSDATA
部分中的 ACDSRECORD
二进制内容与 3DSOLID 没有关联。
我不知道将这些数据链接在一起的 table(字典)。我知道的唯一方法是在 ACDSDATA
部分的所有 ACDSRECORD
中搜索指向 ACIS 对象的链接(组代码 320)。
仅供参考:在 R2013 之前的 DXF 版本中,ACIS 数据作为带有糟糕的异或“加密”的 ascii 文本存储在实体本身中。我关于 DXF 格式的所有知识都包含在我的 Python 包中:ezdxf.