AutoCAD文档计算机自动批阅系统的研究与实现
2016-09-27张宁
张 宁
(苏州经贸职业技术学院 江苏苏州 215000)
AutoCAD文档计算机自动批阅系统的研究与实现
张宁
(苏州经贸职业技术学院江苏苏州215000)
AutoCAD因功能强大、适用广泛成为当今流行的工程图纸绘制软件。实践证明用计算机自动批阅学生上交的图形文档是快速准确解决的途径之一。对此进行了深入的分析和探讨,成功编制AutoCAD图形文档自动批阅程序并成功投入教学,获得了良好的教学效果。
AutoCAD; 图形; 批阅; VB
AutoCAD是当今流行的工程图纸绘制软件,成为机械专业和其他相关专业学习培训的基本软件。在该软件的教学过程中,面临如何批阅AutoCAD图形文档的难题,对此笔者进行了一些研究,并成功开发了AutoCAD图形文档计算机自动批阅系统,方便迅速且准确地解决了此难题。在教学实践中使用效果良好。
1 解决总体思路
任何一个简单或复杂的CAD图形都是由若干个图元组成的。因而把对整个文档的批阅细化为对每个图元的批阅。根据此原则,本系统的批阅思路是:先做好一个标准文档,针对标准文档中的每个图元在学生作业文档中查找,若找到说明该图元已画出且正确,否则相应图元不存在。对于设置类的批阅,如图层设置、标注设置、样式设置等,其解决方法是在数据库中预先设置好该张试卷需批阅的设置项目及属性,根据该设置将标准文档与解答文档对比批阅。
2 开发环境与数据库选择
本系统是利用VBA作为工具进行开发的,因此选用了VBE作为开发环境。由于程序中所用数据量极小,且考虑到后期对批阅结果的分析及汇总的方便性,系统采用了Excel作为数据库存放批阅项目及批阅结果。
3 系统主界面、批阅主程序思路及代码
批阅前需做好标准文档作为参考,再将学生的CAD图形文件集中存放在一个文件夹中。运行本程序,批阅窗口界面如图1。操作时依次设置本次批阅的相关项目:需批阅的学生图形文件所存放的文件夹,选择标准文档,选择后系统会自动统计该文档中的图元个数,并显示在右侧,同时将该图形文件的所有图层名送入“基准图层”下拉列表,再选择基准图层,因为基准图层中图元的批阅与其他图层不一样,如果图层暂不考虑可取消“批阅基准图层图元”的选中状态,还可以设置尺寸标注是否批注、是否补画学生缺线以及补线的颜色,各图元、属性批阅时的分值等项目。
图1 批阅文档对话框
根据批阅总体思路,本系统在主程序中首先声明一个可以表示各类图元对象的实体类型变量en,再用for在标准文档中对图元遍历,通过各对象的名称ObjectName属性值,得知该图元的类型,并调用相应的函数进行批阅。不同的图元使用不同的批阅过程,其参数均为bz和jdmo,分别表示标准文档中要批阅的图元和解答文档的模型空间对象。在各类图元的批阅函数中对解答文档模型空间的图元遍历,查找相应图元是否存在,最后调用“输出”函数,将批阅结果以一行一个图元要素写入Excel工作表。
4 典型图元对象的批阅
4.1直线的批阅
直线的批阅主要由两个函数完成。一是“批阅直线”,另一个是“批阅实体直线”,前者遍历标准文档中的所有直线,对每个找到的直线调用“批阅实体直线”函数。该函数的功能是遍历解答文档,寻找同要素直线。若找到则“批阅实体直线”函数返回真,否则返回假。代码如下。
Function 批阅实体直线(li1 As AcadLine, li2 As AcadLine) As Boolean
Dim p11() As Double, p12() As Double, p21() As Double, p22() As Double
p11 = li1.StartPoint
p12 = li1.EndPoint
p21 = li2.StartPoint
p22 = li2.EndPoint
If 判断两点(p11, p21) And 判断两点(p12, p22) Or 判断两点(p11, p22) And 判断两点(p12, p21) Then 批阅实体直线 = True
End Function
判断两直线是否相同,主要是判断其两个端点的坐标是否一致,因此系统编制了一个判断两点坐标是否相同的自定义函数“判断两点”,若相同返回真,否则返回假。此函数是系统的公共函数,绝大部分图元的批阅都用到这个函数。
Function 判断两点(p1() As Double, p2() As Double) As Boolean
If p1(0) = p2(0) And p1(1) = p2(1) And p1(2) = p2(2) Then 判断两点 = True
End Function
4.2圆的批阅
批阅两圆是否一致,是通过“批阅两圆”函数实现的。将需批阅的两圆作为参数传入该函数。如果圆心坐标相同且半径大小一致,则函数返回真,否则返回假。
Function 批阅两圆(cir1 As AcadCircle, cir2 As AcadCircle) As Boolean
Dim p1() As Double, p2() As Double, r1 As Integer, r2 As Integer
p1 = cir1.Center
p2 = cir2.Center
r1 = cir1.Radius
r2 = cir2.Radius
If 判断两点(p1, p2) And r1 = r2 Then 批阅两圆 = True
End Function
4.3批阅图案填充
图案填充的批阅要比直线圆复杂些。系统创建了一个“批阅两填充”函数,将来自于标准和解答两个文档中的填充图元对象作为参数传入。其批阅分为两部分:一是填充设置的批阅。如:填充类型、图案名称、图案类型、图案角度、图案比例等相关设置。所有这些设置均可从相应属性获取对比即可,批阅相对简单。另一部分是两个图案填充边界图元的批阅。系统首先通过图案填充AcadHatch对象的边界环路数量Number of Loops属性得到标准与解答两填充边界环路的数量,若两者不同则错误,若两填充环路的数量相同,再通过bz.GetLoopAt i和bzlo和jd.GetLoopAt i, jdlo两句分别获取标准、解答各环路所含的图元对象,并赋给bzlo和jdlo两个图元数组变量,该语句中:bz是图案填充对象变量名,GetLoopAt是方法名,i是第几个环路,bzlo是图元对象数组,再通过二重循环判断标准图元数组中的所有图元是否在解答图元数组中均存在。系统中假设组成填充环路的图元仅为直线和圆两类。
4.4其他常见图元的批阅
圆弧的批阅与圆相似,只是增加了圆弧起点角(属性StartAngle)与终点角(属性EndAngle)的判断。单行文本的批阅与多行文本的批阅也基本相同。形位公差的标注内容均存放在该对象的TextString属性中,所以对比该属性的值即可判断对错。
5 文档设置的批阅
图层是几乎所有CAD文档均要进行的操作项目,是CAD操作的一项重要内容,只要题目有图层设置要求,就必须通过批阅了解学生对图层设置的操作情况。在CAD中打开图层设置对话框,会发现图层有许多设置项目,如:开关、冻结、锁定、颜色、线形、线宽等内容,但不是每道题每个项目都需批阅。系统首先将需批阅的项目写入Excel工作表中,批阅时根据表中的设置进行批阅。图层是文档的下层对象,所以系统将标准与解答两文档对象变量作为参数传入“批阅图层”过程。过程中的r表示Excle行号,c表示列号。过程首先在Excel中找到该试卷的“图层”行,再使列号c从第4列递增循环,依次取出要批阅的图层设置项目并进行批阅。
标注样式和字符样式设置的批阅与图层设置的批阅类似,因篇幅的缘故这里不再赘述。
6 其他几个与批阅相关的问题
6.1图形整体位置的问题
从理论上讲,图形的整体位置对图形本身是没有影响的,只要所有图元的相对位置关系正确就行了。但批阅时是以坐标位置为依据进行判断的,当然可以在批阅前将解答文档中的所有图元平移到指定位置,但由于精度问题会严重影响图元的坐标而产生错判。所以本系统在画图时通过题目规定了基础图元的位置,以保证所有解答文档中图元的坐标与标准完全一致。
6.2非唯一性图元的批阅
学生画图在没有具体规定时常常会按自己的习惯进行。如画矩形边框线时,可画矩形也可用四条直线图元来实现,多段线也是如此。由于镜像、复制、移动等画图手段的应用会产生一条直线中间断开的情况,应该说这也是允许的。上述情况说明:CAD的画图方式不是唯一的。同一效果可有多种画法,这给批阅带来了不便。考虑到这些因素,系统在批阅前首先运行“分解多段线”和“组合”两个过程。
分解多段线:该过程的目的是将多段线、矩形等图形分解成最小的图元。CAD-VBA中矩形与多段线的对象名均为:AcDbPolyline。Explode是多段线对象的分解方法。运行该方法将使对象分解。
组合:将头尾相连且共线的两条直线组合成一条直线。经分析得知,可以组合的两直线必须满足三个条件:一是两直线斜率相同;二是各有一个端点坐标相同且另一个不同;三是在同一图层。根据上述分析,组合分两步:第一步找出可以组合的两直线,第二步组合。寻找出可组合的两直线系统采用了如下方法:首先将所有直线图元送入直线对象a数组,再对a数组中的所有直线图元用下列语句进行二重循环,实现二二判断。组合两线实际上就是用AddLine方法按两点坐标生成一条新的直线。考虑到组合的两点在两条直线中有四种可能,必须逐个判断。对被割断的圆或圆弧也同样根据上述原理进行组合。
6.3非严格一致图元的批阅
在批阅CAD图形时,不是所有图元都必须完全一致,譬如:对称线、中心线等基准图层上的图元,它们的位置是有要求的,但其长度并不做要求。因此系统提供了“批阅基准图元”函数,以区别非基准图层图元的批阅。下面以“批阅基准直线”函数为例作一说明。本函数以两直线为参数,判断两直线是否共线,不判断其长短。函数首先根据两条直线
四个端点的水平坐标是否相同,若是则两条直线为共线的垂直线,再判断四个端点的垂直坐标是否相同,若是则两线为共线的水平线。再算出两直线的斜率,若相同再算出两直线各取出一端点组成直线的斜率,与原直线斜率是否一致,若是则两直线共线返回真,否则两直线不共线返回假。
另外考虑“分解多段线”“组合共线”以及“添加缺线”的操作会对原学生文档产生修改,因此在批阅前将每个学生文档复制一份,并在原文件名后添加“批阅结果”字样,批阅将针对此文件进行。批阅结束后保存并关闭结果文档,最后判断批阅是否补线,若不补则删除批阅文档。
7 结束语
用计算机自动批阅学生的CAD文档,提高了批阅速度,减轻了教师的工作量,更重要的是对学生作业实现了准确评判,有效地提高了教学质量,取得了良好的教学效果。
[1]张宁.ExcelVBA应用实例——Office文档自动批阅系统详解[M].上海:上海交通大学出版社,2014:138.
[2]李长勋.AutoCADVBA程序开发技术[M].北京:国防工业出版社,2004:208.
[3]曾洪飞,张凡,卢择临.AutoCAD VBA & VB.NET开发基础与实例教程[M].北京:中国电力出版社,2008:94.
Study and Implementation of Automatic Marking of AutoCAD Document in Computer
ZHANG Ning
(Suzhou Institue of Trade & Commerce, Suzhou 215000, China)
AutoCAD is the most popular engineering drawing software because of its powerful function and wide application. On the question of how to read students' graphic documents, practice proves that computer automatic marking is the fast and accurate solution. This paper makes an in-depth analysis and discussion on this issue, and successfully develops AutoCAD document automatic marking procedure, and shows that this method can obtain the desired teaching effect.Key words:AutoCAD; graph; Marking; VB
2016-04-28
张宁(1957-),男,讲师,主要研究方向:软件开发
TP 311.52
B
1672-2434(2016)04-0032-03