一、简介
DXF官方帮助:Help
网络可以搜索到非常多的dxf解析博客,但是几乎没有人能完整地实现polyline/spline/ellipse等复杂图形的解析和绘制。
因为dxf的解析较为复杂,涉及的元素很多,例如block解析,图形平移,缩放,参照系坐标等等,另外还有polyline/spline/ellipse等复杂图形,而polyline又存在凸度的问题需要解决。
dxflib开源库实现了dxf文件的解析。所有的图元解析完后,都会通过DL_CreationAdapter的虚函数接口回调,所以我们要继承这个类,重写想绘制的图元的方法,比如直线对应的就是virtual void addLine(const DL_LineData&); 这个DL_LineData结构体数据保存的就是我们要绘制直线的数据。
本人使用dxflib开源库,连续奋战,克服重重困难,终于实现了以下元素的解析和绘制:
元素:point、line、circle、arc、polyline、spline、ellipse、text
其他:layer、block、insert、min、max
绘制图形,使用了opencv,把dxf转化成为png文件。以下举例说明:
图1:涵盖了上述的所有元素
图2:椭圆和样条曲线
图3:polyLine多线实体,注意四个角的倒角圆弧,就是凸度计算得来
图4:图形旋转平移缩放的经典案例
二、DXF Spline的格式说明
Group codes Description
100
Subclass marker (AcDbSpline)
210
Normal vector (omitted if the spline is nonplanar)
DXF: X value; APP: 3D vector
220, 230
DXF: Y and Z values of normal vector
70
Spline flag (bit coded):
1 = Closed spline
2 = Periodic spline
4 = Rational spline
8 = Planar
16 = Linear (planar bit is also set)
71
Degree of the spline curve
72
Number of knots
73
Number of control points
74
Number of fit points (if any)
42
Knot tolerance (default = 0.0000001)
43
Control-point tolerance (default = 0.0000001)
44
Fit tolerance (default = 0.0000000001)
12
Start tangent--may be omitted (in WCS).
DXF: X value; APP: 3D point.
22, 32
DXF: Y and Z values of start tangent--may be omitted (in WCS).
13
End tangent--may be omitted (in WCS).
DXF: X value; APP: 3D point.
23, 33
DXF: Y and Z values of end tangent--may be omitted (in WCS)
40
Knot value (one entry per knot)
41
Weight (if not 1); with multiple group pairs, are present if all are not 1
10
Control points (in WCS) one entry per control point.
DXF: X value; APP: 3D point
20, 30
DXF: Y and Z values of control points (in WCS) (one entry per control point)
11
Fit points (in WCS) one entry per fit point.
DXF: X value; APP: 3D point
21, 31
DXF: Y and Z values of fit points (in WCS) (one entry per fit point)
----------------------------------------中文说明:---------------------------------
样条曲线组码
组码
说明
100
子类标记 (AcDbSpline)
210
法向矢量(如果样条曲线为非平面型,则省略)
DXF:X 值;APP:三维矢量
220, 230
DXF:法向矢量的 Y 值和 Z 值(可选)
70
样条曲线标志(按位编码):
1 = 闭合样条曲线
2 = 周期样条曲线
4 = 有理样条曲线
8 = 平面
16 = 线性(同时设置平面位)
71
样条曲线的阶数
72
节点数
73
控制点数
74
拟合点数(如果有)
42
节点公差(默认值 = 0.0000001)
43
控制点公差(默认值 = 0.0000001)
44
拟合公差(默认值 = 0.0000000001)
12
起点切向 — 可以省略(在 WCS 中)
DXF:X 值;APP:三维点
22, 32
DXF:起点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
13
端点切向 — 可以省略(在 WCS 中)
DXF:X 值;APP:三维点
23, 33
DXF:端点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
40
节点值(每个节点一个条目)
41
权值(如果不为 1);对于多组对,如果均不为 1,则出现。
10
控制点(在 WCS 中);每个控制点一个条目
DXF:X 值;APP:三维点
20, 30
DXF:控制点的 Y 值和 Z 值(在 WCS 中);每个控制点一个条目
11
拟合点(在 WCS 中);每个拟合点一个条目
DXF:X 值;APP:三维点
21, 31
DXF:拟合点的 Y 值和 Z 值(在 WCS 中);每个拟合点一个条目
三、可执行程序
exe可执行程序可以打开链接下载运行:
AutoCAD*.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形_DXFLIB-C++工具类资源-CSDN下载
鼠标双击运行run.dat即可。支持WinXP/Win7/Win10系统。运行之后dxfparse.exe会把dxf解析并转化成png图片格式。run.dat可以使用txt文本打开编辑,里面可以修改dxf文件路径。
Qt版本:
我的Qt作品(6)使用Qt完整解析dxf文件并绘制(支持椭圆和样条曲线)_libaineu2004的博客-CSDN博客_qt读取dxf文件
作者的联系方式:
423776537@qq.com