李 锐,李文强,漆小华,王 萌,宋悦刚,刘 漾
(1.四川大学机械工程学院,四川成都610065;2.四川大学创新方法与创新设计四川省重点实验室,四川成都610065;3.中国电子科技集团公司第二十九研究所,四川成都610036)
CAD(computer aided design,计算机辅助设计)图纸中不仅含有产品的几何图形信息,如零件图、装配图等,还含有文本信息,如标题栏、明细表等。对于不同类型的CAD图纸,几何图形信息和文本信息的占比是不同的。对于传统的机械建筑类图纸来说,几何图形信息是图纸中的主要部分,文本信息较少;但对于某些文本图纸,其信息几乎由文字组成,如连接器电路图,图中清楚地标注了连接器名称,母板连接器名称,母板用物资代码,各个腔口名称及相应腔口中连接器的端子、特性和去向等信息。
为了提高文本图纸的生成效率,利用自动生成系统读取待生成原文件中的文本信息并在AutoCAD软件中自动生成文本图纸已成为一种发展趋势。目前,该方法在实际生产中得到了越来越广泛的应用。根据待生成原文件中文本信息的不同属性,自动生成系统会自动生成一张或多张CAD图纸[1‐5]。为保证自动生成的CAD图纸的文本信息与原文件一致,须对其文本信息进行提取并与原文件文本信息进行匹配和校核。ObjectARX是AutoCAD软件的二次开发工具,利用其单行文本类中的contents函数和多行文本类中的strings函数可分别读取通过块表记录迭代器遍历CAD图纸获得的单行文本和多行文本[6‐10]。然而,由于块表记录迭代器是按照文本信息写入顺序的逆序进行遍历的,并非按照CAD图纸中文本信息的位置进行遍历,使得提取到的文本信息是混乱无序的。此外,现有CAD图纸文本信息自动提取方法仅针对单张图纸,而对于多张CAD图纸,利用该方法提取到的文本信息混杂在一起,无法辨识其所属图纸。因此,针对自动生成的多张CAD图纸,对其文本信息进行有序提取和校核具有重要意义。
目前,国内外学者针对CAD图纸文本信息的提取已做了很多研究。Lu等基于对CAD图纸中“文本”和“图形”几何特征的分析,提出了文本字符串提取的概念,即从混合文本信息和图形的CAD图纸中去除非文本元素,而不是直接从CAD图纸中提取文本信息[11]。Chai等通过分离CAD图纸中的文本框与周围图形来识别和提取文本信息[12]。何改云等通过用户交互函数手动地选取CAD图纸中明细表的2个顶点,或在AutoCAD软件的命令行中直接输入2个顶点的坐标来构建窗口选择集,提取CAD图纸中所有的文本信息[13]。袁琼通过将CAD图纸中的每个明细表定义成一个属性块,并根据坐标依次遍历各属性块实现了CAD图纸明细表中文本信息的提取[14]。颜立坤等通过手动选取CAD图纸中明细表的坐标范围,先获取该范围内所有文本的坐标,然后采用冒泡法对这些坐标进行排序,确定其在明细表中的位置,从而实现CAD图纸文本信息的提取[15]。黄靖根据手动获取的明细表对角线上2个点的位置信息来构建窗口选择集,然后对选择集内的文本信息进行操作,从而获得了明细表中的文本及其位置信息[16]。张良栋等通过建立属性块来实现对CAD图纸中明细表信息的提取[17]。龚雄等通过遍历CAD图纸来搜索水平垂直线条和文字,并定义了2个分别记录线条端点坐标和文字字串及其坐标的结构数组,根据线条端点横、纵坐标的最小值和最大值确定了CAD图图框的坐标范围,然后依次提取图框范围内的文本信息[18]。
虽然上述方法可对CAD图纸的文本信息进行有效提取,但存在以下2点不足:一是现有图纸文本信息提取方法只能对单张CAD图纸进行提取,无法同时提取多张CAD图纸的文本信息;二是现有图纸文本信息提取方法仅能提取CAD图纸中位置固定的文本信息,无法对多张CAD图纸中位置不确定且类型多样的文本信息进行并行提取。基于上述不足,笔者提出了一种面向多张CAD图纸的文本信息自动提取方法,以实现对多张CAD图纸中多种类型文本信息的有效提取。同时,基于提出的方法开发了面向多张CAD图纸的文本信息自动提取与校核系统。
为实现对多张CAD图纸文本信息的自动提取,需解决2个方面的问题。一是当对单张CAD图纸的文本信息进行提取时,由于所有文本信息都位于一张图纸中,不存在不同图纸之间文本信息相互干扰的问题,可直接对整张CAD图纸中的文本属性块进行遍历,然后分别提取属性块中的文本信息。但对于多张CAD图纸而言,为了准确提取每张CAD图纸的文本信息,需先确定每张CAD图纸的位置,然后分别提取属于不同CAD图纸的文本信息。二是当仅对CAD图纸中标题栏或明细表中的文本信息进行提取时,由于标题栏和明细表的位置都相对固定,且其文本信息都属于同一种类型,可直接利用窗口选择集对CAD图纸中选定范围内的文本信息进行遍历,并根据其坐标进行提取。但在提取多张CAD图纸中位置不固定且类型多样的文本信息时,为了准确提取不同位置处不同类型的文本信息,需对多张CAD图纸进行遍历并对各位置处不同类型的文本信息进行分类提取。基于此,提出面向多张CAD图纸的文本信息自动提取方法,其主要包括以下3个部分。
1)确定每张CAD图纸的位置。
CAD图纸自动生成系统可生成具有块属性的CAD图纸。将不同规格的图纸(A0、A1、A2、A3和A4纸)做成相应的属性块(即图纸块),通过直接调用或插入来生成多张CAD图纸。采用ObjectARX中的块表记录迭代器对自动生成的每张CAD图纸中的线段、图形和属性块等实体进行逐个遍历,利用实体类中的isA()函数筛选得到属性块,并利用块表记录类中的getName()函数获取属性块的名称,将遍历得到的属性块与所调用图纸块进行对比,从而依次找出所有图纸块,确定CAD图纸的数量,并根据图纸块对应的图纸幅面,结合图纸块插入点的坐标确定其位置,从而将多张图纸文本信息的提取转换为单张图纸文本信息的提取,避免了不同图纸文本信息之间的相互干扰。
2)提取多张CAD图纸的文本信息。
在CAD图纸自动生成系统通过读取原文件中产品零件信息自动生成的多张CAD图纸中,文本信息已被分类,具有不同属性的文本信息以不同类型的矩形框来区分。本文根据矩形框所具有的属性特点对文本信息进行分类提取。其中,矩形框的构成方式包括多段线和属性块两种。对于由多段线构成的矩形框中的文本信息,利用矩形框的任意2个对角坐标构建窗口选择集来获取文本信息,利用容量可动态变化的Vector
基础病理学教学只针对疾病的普遍特征进行讲授,包括疾病的病因、发病机制、病理变化、结局和转归,其讲授的是疾病的基本特征,属于非专业性极强的医学课程,因此契合X型慕课,非职业“精英主义”的原则[4]。
3)自动输出与校核多张CAD图纸的文本信息。
由于获得的文本信息储存在Vector
与其他文本信息提取方法相比,面向多张CAD图纸的文本信息自动提取方法具有以下优点:1)能够自动地识别每张CAD图纸并进行文本信息提取,即无论是单张或多张CAD图纸,该方法都适用;2)不仅能对CAD图纸中位置相对固定的标题栏和明细表中的文本信息进行提取,还能对CAD图纸中位置不确定的文本信息进行自动识别和提取;3)可基于多段线和属性块的特征自动识别CAD图纸中不同类型的文本信息并进行分类提取和输出。
基于上述面向多张CAD图纸的文本信息自动提取方法,建立相应的文本信息自动提取与校核流程(如图1所示),主要步骤如下。
图1 面向多张CAD图纸的文本信息自动提取与校核流程Fig.1 Automatic extraction and verification process of text information for multiple CAD drawings
1)利用ObjectARX中的块表记录迭代器对多张CAD图纸进行遍历,依次获得所有图纸块。
2)将获得的图纸块的插入点坐标分别输入到Vector
3)排序完成后,根据数组中图纸块的插入点坐标确定每张CAD图纸的位置。循环构建窗口选择集,对每张CAD图纸文本信息所在的矩形框进行遍历。
4)将遍历得到的矩形框按属性特点进行分类,并根据矩形框在CAD图纸中的位置,对同类型的矩形框进行排序。
5)排序完成后,根据矩形框的构成方式,采用对应的方法对文本信息进行提取。
6)将提取得到的文本信息输出到新生成的Excel文件中并与原文件中的文本信息进行匹配和校核。
在Visual Studio 2008平台上通过二次开发工具ObjectARX 2010开发了一个面向多张CAD图纸的文本信息自动提取与校核系统,其主要包括以下功能模块。
1)启动模块。传统的ObjectARX程序是通过在AutoCAD软件的命令行中手动输入函数生成的启动命令来执行相应功能,但这种执行方式要求操作人员清楚地记住各个功能函数的启动命令,当启动命令的数量多且较长时,这种执行方式就会变得很麻烦。因此,本文开发的系统通过加载菜单资源的方法创建了快捷菜单的命令执行方式。其中,菜单资源加载函数的代码如下:
2)文本信息提取模块。根据属性块名称遍历得到CAD图纸中相同类型矩形框的任意2个对角坐标或插入点坐标,并根据该类矩形框在图纸中的位置对其对角坐标或插入点坐标进行排序,以保证所提取文本信息的准确排列,利用矩形框与文本之间的位置关系构建窗口选择集或炸开矩形框,以获取矩形框中的文本信息并存储到Vector
3)文本信息输出模块。利用Excel操作接口,按照1张图纸对应Excel中1个工作表的原则,将储存在数组和变量中的文本信息输出到Excel中。保存在Vector
4)文本信息校核模块。利用Visual Studio 2008中的可视化技术将提取到的文本信息以窗口形式显示出来。自定义的用户交互函数的代码如下:
利用前期开发的基于Excel文件中文本信息的CAD图纸自动生成系统,通过读取Excel文件中的文本信息,在AutoCAD软件中生成多张连接器电路图,如图2所示。利用开发的面向多张CAD图纸的文本信息自动提取与校核系统对连接器电路图中的文本信息进行自动提取和校核。
图2 自动生成的连接器电路图Fig.2 Automatically generated connector circuit diagram
1)在AutoCAD软件界面中,先点击鼠标右键弹出快捷菜单,再点击快捷菜单中的“输出并校核”选项,启动文本信息的提取和校核功能。然后,借助视图调整模块对用户窗口进行调整,使得所有电路图都处于用户窗口内,保证所提取文本信息的完整性。
2)利用块表记录迭代器对所有连接器电路图进行遍历,将遍历得到的图纸块名称及其插入点坐标分别添加到Vector
在图2所示的连接器电路图中,文本信息被划分为3种类型:类型1和类型3对应的矩形框名称为“zw_table”,类型2对应的矩形框名称为“zw_rf”,且类型3对应的矩形框被红色多段线所包围。首先,分别利用矩形框名称和红色多段线创建结果缓冲区链表;然后,利用窗口选择集分别遍历这3类文本信息所在矩形框的对角坐标和插入点坐标并排序,以保证提取的文本信息的顺序;最后,根据矩形框的坐标和尺寸,再次构建窗口选择集,分别获取3种文本信息并存储在Vector
3)利用添加的Excel接口程序及put_item函数将储存在数组中的文本信息输出到Excel的工作表中(1张电路图对应1个工作表),并将工作表名设置为对应连接器的名称,如图3所示。
图3 输出到Excel工作表中的连接器信息Fig.3 Connector information exported to Excel worksheet
4)文本信息输出完成后,AutoCAD软件的界面上会弹出1个文件选择窗口,用于提醒设计人员选择自动生成连接器电路图时所读取的Excel文件,并与图3所示的原Excel文件进行匹配和校核;然后,利用内置的可视化技术在AutoCAD软件界面上生成一个窗口,用于显示匹配结果。图4所示为上述连接器电路图文本信息匹配结果显示窗口。
图4 连接器电路图文本信息匹配结果显示窗口Fig.4 Display window of text information matching result of connector circuit diagram
针对现有图纸文本信息提取方法无法自动提取多张图纸中多种类型文本信息的问题,提出了一种面向多张CAD图纸的文本信息自动提取方法,并开发了相应的自动提取和校核系统。目前,所开发的系统已成功应用于多张连接器电路图文本信息的自动提取和校核。此外,该方法还可应用于其他产品CAD图纸的文本信息提取,具有较好的实用性和广阔的应用前景。