我们正在构建一个DXF导出器,根据我的阅读,这个非常简单的文件应该是有效的。我们没有任何CAD工具可供测试,所以我的调试能力非常有限。这在this example开启正常,但我从the Proficad online viewer收到错误,说"图纸文件无效,无法查看"。
这是整个文件。任何帮助表示赞赏!
{{1}}
答案 0 :(得分:4)
您的DXF文件有几个问题。
LWPOLYLINE需要大量额外开销才能使用。您需要一个TABLES部分,然后您必须处理AcDbEntity和AcDbPolyline条目。它很快变得复杂。切换到POLYLINE实体将为您节省大量的时间。
您需要AutoCAD的HEADER部分才能打开DXF文件。您不必在HEADER中添加太多内容,基本上只是版本信息。
下面显示的是一个功能最小的DXF文件(以R12格式保存),可以在AutoCAD中成功打开:
0
SECTION
2
HEADER
9
$ACADVER
1
AC1009
0
ENDSEC
0
SECTION
2
ENTITIES
0
POLYLINE
5
7C
8
0
66
1
10
0.0
20
0.0
30
0.0
0
VERTEX
5
174
8
0
10
-8.75
20
-11.75
30
0.0
0
VERTEX
5
175
8
0
10
-17.5
20
0.0
30
0.0
0
VERTEX
5
176
8
0
10
-8.75
20
11.75
30
0.0
0
VERTEX
5
177
8
0
10
0.0
20
0.0
30
0.0
0
VERTEX
5
178
8
0
10
-8.75
20
-11.75
30
0.0
0
SEQEND
5
179
8
0
0
ENDSEC
0
EOF
如果这就是您要放入文件中的所有内容,它应该可以正常工作。请记住,所有DXF实体都需要一个句柄(基本上是一个ID号)。
0
POLYLINE
5
7C
上面的5
是指示句柄(ID号)将遵循的代码。 7C
是实际句柄。如果添加更多实体,则需要增加每个实体的句柄,因此每个实体都有一个唯一的句柄。
答案 1 :(得分:2)
根据Autodesk的官方DXF规范(PDF here),LWPOLYLINE的顶点仅为2D;例如,他们应该只有10
和20
代码,而不是30
个代码,因为您的所有30
代码都是0.0
,所以它不应该是区别。如果您确定LWPOLYLINE需要具有非零的Z值,则可以在第一个38
代码对之前指定代码10
对(提升)。
如果每个点需要不同的Z值,请考虑使用POLYLINE和许多VERTEX实体,然后使用单个SEQEND。
编辑:虽然DXF规范应该是非常自由形式的,但我发现Autodesk的实现非常特别关于它能读什么。
答案 2 :(得分:1)
确实LWPOLYLINE只是2D ......
还有一个建议:继续使用AutoCAD并创建类似于此的图形,然后导出为DXF,这样您就可以与您正在设计的图形进行比较。
答案 3 :(得分:0)
那么你的问题是特定于DXF中的特定数据格式问题,它缺少/添加AutoCad不满意的一些值。解决这个问题的最佳机会是尝试从AutoCad创建一个类似的文件,并比较你可能错过/错误添加的内容。在这种情况下,其他人很难为您调试。我已经看过来自Autocad的DXF规范pdf,底部有一些写DXF文件帮助部分,也可以参考它们。