闫帅鹏
中国电子科技集团公司第二十九所安全管理与综合保障部
【摘要】:AUTOCAD绘图软件广泛的使用到加工行业,因为每个绘图人员的习惯不一样,所以要想按照绘图员的思想能够完整的进行加工,必须首先对AUTOCAD软件生成的DXF文件进行读取和重新绘制,以方便后续按照重新绘制的图纸进行加工时提高加工效率,本文主要对圆弧数据的读取和重新绘制进行描述。
【关键字】:DXF文件文件读取 重新绘制圆弧数据
一:DXF文件信息元素构成
一幅完整的CAD图形,会包含图层、线型、直线、多段线、圆弧、椭圆、样条曲线等多种元素信息。为了更加完整且有条理的解析图形原有的信息,并还原出最符合加工要求的图形[2],本文将DXF文件读入的流程分为几个功能模块,文件读入流程如图1所示。
图1DXF文件读取流程图
二:圆弧数据的读写流程设计
从圆弧的概念当中可以看出对于圆弧有两个最重要的形成条件,一就是定点也就是我们说的圆心,二就是定长也就是我们说的圆半径。所以在读取圆弧类数据的时候这两个条件是读取的关键点。
在观察DXF文件的存储信息中,我们可以看到“arc”的信息段,该信息段的下方表示的是圆弧实体段曲线的数据。在图元实体模块中,圆弧曲线的实体信息如表1所示:
表1圆弧曲线的DXF组码
组代码 | 代码含义 |
0 | 一个实体 |
arc | 圆弧 |
10、20、30 | 圆弧圆心的x/y/z坐标值 |
40 | 半径 |
50 | 起点角度 |
51 | 终止点角度 |
根据DXF文件的编码规则,圆弧数据段的结构如下:
1、直线关键字为“arc”
2、组码“10”的下方,代表椭圆圆心点X坐标值
3、组码“20”的下方,代表椭圆圆心点Y坐标值
4、组码“40”的下方,代表圆弧半径
5、组码“50”的下方,代表起点角度值
6、组码“51”的下方,代表终点角度值
圆弧数据类读取流程如图2:
图2圆弧的读取流程图
圆弧类数据的重新绘制:
根据表1的内容,可以求出圆弧的圆心坐标和半径的准确值。而利用VB.NET自带的DrawEllipse函数就可以绘制出一个标准圆弧。
根据圆弧的方程可计算出起始第一个点的点坐标值。在绘制圆弧过程中按照0.01度的值进行旋转增加绘制第二点,以此类推,绘制出最后一个点,也就是绘制出了一个完成的圆弧。
圆弧的绘制要注意起始角度与终止角度的大小。通过实验发现,不管绘制圆弧时的顺序如何,在生成DXF文件时均是按照逆时针方向的生成圆弧的起始角度和终止角度,并且角度范围在0—360°之间。
因此,在绘制时一定要判断起始角度与终止角度的大小:
a.StartAngle<EndAngle时,角度参数从StartAngle到EndAngle;
b.StartAngle>EndAngle时,角度参数从StartAngle到EndAngle+360;
圆弧的绘制流程图如图3:
图3圆弧的绘制流程图
三:基于VB.NET对DXF文件中圆弧数据读取的软件设计
上述章节已经详细阐述了圆弧数据段的读写流程。本节将基于VB.NET的特点,对软件编制过程中所需的重难点进行讲解。
针对椭圆这一类图元数据,可以定义一个类名为“arc”。这个类主要有圆弧所在圆的圆心点坐标、圆弧所在圆的半径、圆弧的起始角度、圆弧的终止角度等几个属性构成。
1.intArcNumber,表示此图元包含的圆弧个数;
2.CircleX,表示圆心的X轴坐标
3.CircleY,表示圆心的Y轴坐标
4.CircleR表示圆半径
5. StartAngle表示起始角度
6. EndAngle表示终止角度
7. LaserCircleX表示转换后的圆心X轴坐标
8. LaserCircleY表示转换后的圆心Y轴坐标
9. LaserCircleR表示转换后的圆半径
10. LaserStartAngle表示转化后的起始角度
11. LaserEndAngle表示转换后的终止角度
在进行绘制时,直接调用DrawLine模块,输入下列参数:
1.画笔对象
2.圆弧圆心X坐标值;
3.圆弧的圆心Y坐标值;
4.圆弧的半径值;
5.圆弧的起始角度
6.圆弧的终止角度
完整的圆弧绘制程序为:
IfnewArc.isDash = TrueThen
Draw.DrawArc(objPen, newArc.LaserCircleX - newArc.LaserCircleR, _
Form1.PictureBox1.Height - newArc.LaserCircleY - newArc.LaserCircleR,
2 * newArc.LaserCircleR, 2 * newArc.LaserCircleR, _
(360 - newArc.LaserStartAngle), FinalAngel)
ElseIfnewArc.isDotDash = TrueThen
objPen.DashStyle = Drawing2D.DashStyle.DashDotDot
Draw.DrawArc(objPen, newArc.LaserCircleX - newArc.LaserCircleR, _
Form1.PictureBox1.Height - newArc.LaserCircleY - newArc.LaserCircleR,
2 * newArc.LaserCircleR, 2 * newArc.LaserCircleR, _
(360 - newArc.LaserStartAngle), FinalAngel)
objPen.DashStyle = Drawing2D.DashStyle.DashDot
ElseDraw.DrawArc(Pens.Blue, newArc.LaserCircleX-newArc.LaserCircleR,
Form1.PictureBox1.Height - newArc.LaserCircleY - newArc.LaserCircleR,
2 * newArc.LaserCircleR, 2 * newArc.LaserCircleR, _
(360 - newArc.LaserStartAngle), FinalAngel)
综上所述,参照上面的命令可以将圆弧数据全部绘制在软件界面中。
四:结论
本文根据实际应用的需求,通过读取DXF文件的获得了AUTOCAD文件中圆弧数据的几何信息,提取了圆弧数据存储数据,并将以转化,进行重新绘制,基于VB软件进行编程。可以在实际的加工生产中促进加工效率的提升。
参考文献:
参考文献
[1]谭超,基于 AUTOCAD的DXF格式文件读写方法研究[J],计算机与网络,2009(21)
[2]方勇,基于AutoCAD的DXF文件的转换[J],苏州职业大学学报,2003,(14),3
[3]张国庆,DXF文件在激光打标系统的应用研究[J],光电技术应用,2010(5),1
1