您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 工程图纸标题栏的自动生成及其信息提取的方法实现
计算机应用与软件ComputerApplicationsandSoftware工程图纸标题栏的自动生成及其信息提取的方法实现苗帅,王卫东(江苏科技大学计算机科学与工程学院江苏镇江212003)摘要:随着AutoCAD工程图纸的广泛应用,如何能快速的操作标题栏及组织其信息,已经成为目前迫切需要解决的问题。本文利用VBA组件设计的人机交互界面,通过调用程序自动生成了具有属性的标题栏,实现了标题栏区域内信息的自动提取,并将提取的信息存储到Oracle数据库,这样不仅提高了制图效率,同时也达到了对图纸标题栏信息的有效组织。关键词:VBAAutoCAD标题栏信息提取中图分类号:TP391.72文件标识码:THEACCOMPLISHEDMETHODOFAUTOGENERATIONANDINFORMATIONEXTRACTIONABOUTGRAPHICSTITLEBLOCKMiaoshuai,WangWeidong(SchoolofComputerScienceandEngineering,JiangsuUniversityofScienceandTechnology,ZhenjiangJiangsu212003,China)Abstract:WiththeextensiveapplicationofAutoCADengineeringgraphics,howcanquicklymanipulatetitleblockandorganizeinformationingraphicshavebecometheproblemwhichisurgentlyneededtohandle.ThispaperusesthecomponentsofVBAfordesigningthehuman-machineinterface.Atthesametime,itautomaticallygeneratedwiththepropertiesofthetitlebarbycallingtheprogramcommandandalsoachievedtheautomaticextractionofinformationwhichbelongstothetitlebar;thisinformationisultimatelystoredinOracledatabase.Thisnotonlyimprovesthemappingefficiencyandalsomanagesefficienttheinformationofthetitlebarofthegraphics.Keywords:VBAAutoCADTitleBarInformationalRetrieval0引言利用AutoCAD进行工艺装备的设计时,会产生大量的DWG文件,每个DWG文件中既可能包含一张图纸,也有可能包含多张图纸。无论是图纸信息的组织还是查询,涉及的数据信息都是海量的,这样就会给图纸的信息管理带来麻烦。所谓AutoCAD图纸的信息管理就是利用技术手段对图纸信息进行组织,分类,录入到数据库,方便用户快速的查询检索以及修改。然而这些图纸的信息通常都反映在标题栏中,因此,如何能快速准确的提取标题栏的信息并录入数据库成为图纸信息管理的前提,同时也是解决问题的关键。收稿日期:。苗帅,硕士研究生,主研领域:模式识别与信息系统。计算机应用与软件对于DWG文件标题栏信息的提取,通常采用“模块化属性文字”的方法[1],这种方法需先定义模块,这些模块包括图纸的信息和线框图形,提取信息时只需读取模块属性类别所定义的文字即可。这种方法只能满足单个企业内部当前生产需求,而且操作过程也不方便。此外,结合图形图像识别领域的技术,通过单元识别和格式识别,获取标题栏信息表的所有信息[2],但是这种方法的准确率不是很理想,特别是给用户对信息查询的带来了影响。另外,还有一种基于ActiveX技术的图纸标题栏信息自动提取的方法[3],该方法介绍了一种利用AntoCADR14版提供的新一代开发接口技术—ActiveXAutomation,通过访问AutoCADR14的对象模型,直接提取标题栏信息;这种方法很好解决了信息提取准确率的问题。但唯一的问题是要求用户设计标题栏时,用AutoCAD提供两个图形对象Attribute和Block,没有具体说明如何设计具有Attribute和Block的标题栏。通过对DWG文件标题栏信息提取现状的分析,可以得出在标题栏信息提取时,除了要考虑信息提取准确率等因素之外,还要考虑在提取之前对于标题栏的设计。特别是对于如何生成标题栏以及如何对标题栏的信息进行提取而后统一入库的系统流程没有一个完整的解决方案。因此,本文在对标题栏信息进行提取之前,首先要实现标题栏的自动生成,使其具有Attribute和Block,为之后的提取工作做好基础;然后采用VBA结合ActiveXAutomation对标题栏内的信息进行提取,确保提取信息的准确率;最后采用ADO技术把提取的信息录入到数据库中。1总体设计1.1VBAVBA是AutoCAD内嵌的基于ActiveX技术的面向对象的可视化开发编程工具,由于VBA结构精简且常驻与主程序内部,故其代码运行速度快,数据共享方便。在AutoCAD中,允许VBA编程环境与AutoCAD同时运行,并通过ActiveXAutomation接口对AutoCAD进行编程控制。它不仅能控制AutoCAD对象,也能向其它应用程序发送数据或从中提取数据[4]-[5]。1.2标题栏的生成AutoCAD中虽然提供了很多用于制作标准化图纸的模板、图块,但对图纸中的标题栏缺乏一种简便、快速的编辑方法,一般是一项费时费力而又繁琐的重复劳动[6]。因此本文按照国家标准采用VBA自动生成具有属性值的标题栏块,这样使标题栏不仅可以快速的建立,而且建立好后也方便了信息的提取。标题栏生成的算法如下:⑴遍历图纸中的所有实体,根据当前图中是否存在名称为“标题栏”的块参照来判断工作模式是创建模式或是修改模式。⑵如果是创建模式,就调用函数CreateTleBar向图形中添加一个“标题栏”的块定义(防止块定义中实体的重复添加),然后计算关键点的位置,向块定义中添加图框,标题栏分割线和标题栏文字;最后调用函数InsertBlock向图形中插入“标题栏”块参照,调用EditAttributes来根据用户在文本框中输入的参数值修改标题栏的属性值。⑶如果不是创建模式,说明图形中以存在“标题栏”块参照,还需检验是否存在属性值;如果没有,则重复上述创建过程;如果有,则进入修改模式,调用函数苗帅等:工程图纸标题栏的自动生成及其信息提取的方法实现ModifyTitleBar修改标题栏窗口的内容。⑷最后显示用户输入或修改的内容同时标题栏属性块更新,具体流程见图1。创建标题栏的核心代码如下:PrivateSubcmdOk_Click()IfcreateMode=TrueThen'创建标题栏CallCreateTitleBarElse'修改标题栏CallModifyTitleBarEndIf'创建标题栏PrivateSubCreateTitleBar()'如果图形中已经存在标题栏图块的定义IfBlkIsExist(标题栏)ThenGoToInsertBlockEndIfInsertBlock:'在图形中插入标题栏DimobjBlkRefAsAcadBlockReferenceSetobjBlkRef=ThisDrawing._ModelSpace.InsertBlock(ptInsert,标题栏,1,1,1,0)'根据文本框的值修改标题栏的属性CallEditAttributes(objBlkRef)EndSub图1标题栏创建的工作流程1.3信息的提取将按上述方法自动生成标题栏后,通过ActiveXAutomation技术就能将标题栏中的信息提取出来。基本算法如下:⑴遍历当前图纸中的所有实体,通过实体的属性判断该实体是否是标题栏属性块对象。⑵如果是标题栏属性块,则判断该标题栏中是否包含Attribute对象。⑶如果包含Attribute对象,则通过GetAttribute方法获得快参照的属性集合。然后遍历此集合,通过该集合中的元素获取每个Attribute对象中包含的属性值。⑷将属性值存入标题栏模板信息结构,判断是否结束遍历。⑸遍历结束时,标题栏中所有Attribute对象中包含的关于图纸的信息都被统一入开始是否为创建模式是否存在属性值创建和插入标题栏提取标题栏块的属性调用标题栏创建窗体初始化调用标题栏编辑窗体,修改窗口的内容显示用户输入或修改窗体中的内容把内容赋给块属性值,块更新结束计算机应用与软件库,具体流程见图2。信息自动提取的核心代码如下所示:DimEntObjAsAcadEntityDimAttRefObjsAsVariantDimnAsIntegerDimiAsIntegerDimjAsInteger'判断块是否包含属性IfEntObj.HasAttributesThen'遍历当前图形中的所有对象ForEachEntObjInSSetObj'返回属性数据AttRefObjs=EntObj.GetAttributesn=n+1'遍历属性Fori=0ToUBound(AttRefObjs)Forj=0ToLBObj.ListCount-1IfAttRefObjs(i).TagString=_LBObj.List(j)AndLBObj.Selected(j)=TrueThenIfn=1ThenxlSheet.Cells(n,j+1).Value=_AttRefObjs(i).TagStringxlSheet.Cells(n+1,j+1).Value=_AttRefObjs(i).TextStringElsexlSheet.Cells(n+1,j+1).Value=_AttRefObjs(i).TextStringEndIfEndIfNextNextNextEndIfSetEntObj=NothingEndSub图2标题栏信息提取的流程1.4提取后的信息录入数据库ADO是在AutoCADVBA中开发数据库应用程序最好的技术,利用ADO编程模型可以完成访问和更新数据源的工作[7]。由于基于VBA创建数据库的ADO连接以及把信息添加到数据库表中的研究已经非常成熟;因此根据本文的具体情况,重点说明如何建立数据库的表结构。1.4.1数据表的建立建立于ADO数据源的连接后,可以使用ADO编程模型的command对象执行SQL语句来实现Oracle数据表[8]。由于本文所处理的标题栏都是按国家标准生成的,因此本文只需建立一个表结构,数据表中的字段主要包括单位名称﹑图样名称﹑图样代号﹑重量﹑比例﹑设计者﹑设计日期﹑审核者开始是否存在标题栏属性块遍历每一个实体是否包含属性调用GetAttribute读取属性将属性值存入标题栏模板信息结构标题栏模板信息统一入库结束遍历结束?苗帅等:工程图纸标题栏的自动生成及其信息提取的方法实现以及审核日期等其他一些附属信息;但是为了信息入库后方便建立索引,需要确定表结构的主键。标题栏中一般包括签字区、更改区和名称代号区等多个部分。只有图纸的图样代号是图形文件的唯一标识,但是由于大量的工程图纸来自不同的设计单位,图样代号很难保证会出现不重复,因此本文采用一组事先已经编好并且保证不重复的代码作为表结构的主键。当一条信息录入数据库时,会自动产生一条代码与其对应作为主键,然后调用程序进入标题栏修改模式,把这个代码添加到图纸标题栏的图样代号一栏中,这样既可以保证信息在数据表中的唯一性,也提高用户查询的准确性。下面是创建数据表的部分程序:'创建ADO连接并打开SubCreateConnection()DimConStrAsString'连接字符串Setcn=NewADODB.Connectioncn.CursorLocation=adUseClientcn.Provider=Microsoft.Jet.OLEDB.4.
本文标题:工程图纸标题栏的自动生成及其信息提取的方法实现
链接地址:https://www.777doc.com/doc-181445 .html