第28卷第2期2021年4月
工程设计学报
Chinese Journal of Engineering Design
Vol.28No.2
Apr.2021
面向多张CAD图纸文本信息自动提取与实现
李锐1,2,李文强1,2,漆小华3,王萌3,宋悦刚3,刘漾3
(1.四川大学机械工程学院,四川成都610065;
2.四川大学创新方法与创新设计四川省重点实验室,四川成都610065;
3.中国电子科技集团公司第二十九研究所,四川成都610036)
摘要:针对现有图纸文本信息自动提取方法仅能提取单张图纸中的标题栏和明细表内容的情况,提出了一
种面向多张CAD(computer aided design,计算机辅助设计)图纸的文本信息自动提取方法,并开发了相应的自动提取与校核系统。采用块表记录迭代器对多张CAD图纸中的所有属性块进行遍历,基于块名筛选得到图纸块及其插入点坐标和幅面,从而确定每张图纸的位置;根据多段线和属性块对多张CAD图纸的文本信息进行属性分类,通过构建窗口选择集来获取图纸中的文本信息并进行提取;利用数组形式输出所提取的文本信息并与原文件进行对比。最后,开发了一套面向多张CAD图纸的文本信息自动提取与校核系统,并通过对连接器电路图文本信息的提取和校核验证了所提出方法和系统的可行性。结果表明,所提出的方法为CAD图纸文本信息的提取提供了新的思路,所开发的系统为企业操作人员提取CAD图纸文本信息提供了新工具,可显著提高工作效率。
关键词:图纸文本信息;自动提取;多张CAD图纸;连接器电路图
中图分类号:TH126.1文献标志码:A文章编号:1006-754X(2021)02-0148-07
Automatic extraction and realization of text information for
multiple CAD drawings
LI Rui1,2,LI Wen-qiang1,2,QI Xiao-hua3,WANG Meng3,SONG Yue-gang3,LIU Yang3(1.School of Mechanical Engineering,Sichuan University,Chengdu610065,China;
2.Innovative Methods and Innovative Design of Sichuan Key Laboratory,Sichuan University,Chengdu610065,China;
3.The29th Institute,China Electronics Technology Group Corporation,Chengdu610036,China)
Abstract:In view of the existing automatic extraction method for drawing text information that can only extract the contents of title bars and detail lists in a single drawing,a text information automatic extraction method for multiple CAD(computer aided design)drawings is proposed,and the supporting automatic extraction and verification system is developed.The block table record iterator was used to traverse all attribute blocks in the multiple CAD drawings,and the drawing block and its insertion point coordinates and format were filtered based on the block name,so as to determine the position of each drawing;the text information of multiple CAD drawings was classified according to the multi segment lines and attribute blocks,and the text information in the drawings was obtained and extracted by constructing the window selection set;the extracted text information was output in the form of array and compared with the original file.Finally,an automatic text information extraction and verification system for multiple CAD drawings was developed,and the feasibility of the proposed method and system was doi:10.3785/j.issn.1006-754X.2021.00.025
收稿日期:2020-04-08修订日期:2020-07-21本刊网址·在线期刊:www.zjujournals/gcsjxb 基金项目:科技部创新方法工作专项资助项目(2017IM040100);四川省应用基础研究项目(2018JY0119)
作者简介:李锐(1994—),男,重庆人,硕士生,从事CAD二次开发研究,E-mail:*****************,https:///0000-0002-9149-8435
通信联系人:李文强(1976—),男,新疆乌鲁木齐人,教授,博士生导师,博士,从事创新设计理论与方法研究,E-mail:******************,https:///0000-0002-9592-4454
李锐,等:面向多张CAD图纸的文本信息自动提取与实现
第2期
verified by extracting and verifying the text information of connector circuit diagrams.The results show that the proposed method provides a new idea for the extraction of CAD drawing text information,and the developed system provides a new tool for operators to extract text information of CAD drawings, which can significantly improve the working efficiency.
Key words:drawing text information;automatic extraction;multiple CAD(computer aided design)
drawings;connector circuit diagram
CAD(computer aided design,计算机辅助设计)图纸中不仅含有产品的几何图形信息,如零件图、装配图等,还含有文本信息,如标题栏、明细表等。对于不同类型的CAD图纸,几何图形信息和文本信息的占比是不同的。对于传统的机械建筑类图纸来说,几何图形信息是图纸中的主要部分,文本信息较少;但对于某些文本图纸,其信息几乎由文字组成,如连接器电路图,图中清楚地标注了连接器名称,母板连接器名称,母板用物资代码,各个腔口名称及相应腔口中连接器的端子、特性和去向等信息。
为了提高文本图纸的生成效率,利用自动生成系统读取待生成原文件中的文本信息并在AutoCAD 软件中自动生成文本图纸已成为一种发展趋势。目前,该方法在实际生产中得到了越来越广泛的应用。根据待生成原文件中文本信息的不同属性,自动生成系统会自动生成一张或多张CAD图纸[1-5]。为保证自动生成的CAD图纸的文本信息与原文件一致,须对其文本信息进行提取并与原文件文本信息进行匹配和校核。ObjectARX是AutoCAD软件的二次开发工具,利用其单行文本类中的contents函数和多行文本类中的strings函数可分别读取通过块表记录迭代器遍历CAD图纸获得的单行文本和多行文本[6-10]。然而,由于块表记录迭代器是按照文本信息写入顺序的逆序进行遍历的,并非按照CAD图纸中文本信息的位置进行遍历,使得提取到的文本信息是混乱无序的。此外,现有CAD图纸文本信息自动提取方法仅针对单张图纸,而对于多张CAD图纸,利用该方法提取到的文本信息混杂在一起,无法辨识其所属图纸。因此,针对自动生成的多张CAD图纸,对其文本信息进行有序提取和校核具有重要意义。
1CAD图纸文本信息提取的研究现状
乌鲁木齐在线招聘信息目前,国内外学者针对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图纸的文本信息自动提取与校核系统。
2面向多张CAD图纸的文本信息自动提取方法及流程
2.1面向多张CAD图纸的文本信息自动提取方法
为实现对多张CAD图纸文本信息的自动提取,需解决2个方面的问题。一是当对单张CAD图纸的文本信息进行提取时,由于所有文本信息都位于一张
·
·149
工程设计学报第28卷
图纸中,不存在不同图纸之间文本信息相互干扰的问题,可直接对整张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<Cstring>数组或Cstring变量来存储所提取的文本信息。对于由属性块构成的矩形框中的文本信息,分2类进行提取:当文本信息不属于属性块的组成部分时(即文本信息不参与属性块的构建),根据
矩形框的插入点坐标和尺寸构建窗口选择集,获取文本信息并将其存储在Vector<Cstring>数组或Cstring 变量中;当文本信息属于属性块的组成部分时(即文本信息参与属性块的构建),提取文本信息前必须先将矩形框炸开,再根据文本信息的坐标、图层名等获取文本信息并存储。
3)自动输出与校核多张CAD图纸的文本信息。
由于获得的文本信息储存在Vector<Cstring>数组或Cstring变量中,设计人员不能直接识别和利用。因此,须将储存在数组或变量中的文本信息输出并与原文件中的文本信息进行对比。本文利用Excel接口程序输出所提取的文本信息,并生成相应的Execl 文件。
与其他文本信息提取方法相比,面向多张CAD 图纸的文本信息自动提取方法具有以下优点:1)能够自
动地识别每张CAD图纸并进行文本信息提取,即无论是单张或多张CAD图纸,该方法都适用;2)不仅能对CAD图纸中位置相对固定的标题栏和明细表中的文本信息进行提取,还能对CAD图纸中位置不确定的文本信息进行自动识别和提取;3)可基于多段线和属性块的特征自动识别CAD图纸中不同类型的文本信息并进行分类提取和输出。
2.2面向多张CAD图纸的文本信息自动提取流程
基于上述面向多张CAD图纸的文本信息自动提取方法,建立相应的文本信息自动提取与校核流程(如图1所示),主要步骤如下。
1)利用ObjectARX中的块表记录迭代器对多张CAD图纸进行遍历,依次获得所有图纸块。
2)将获得的图纸块的插入点坐标分别输入到Vector<double>数组中,并根据图纸在AutoCAD软件界面中的排布方式对数组中的插入点坐标进行排序。
3)排序完成后,根据数组中图纸块的插入点坐标确定每张CAD图纸的位置。循环构建窗口选择集,对每张CAD图纸文本信息所在的矩形框进行遍历。
4)将遍历得到的矩形框按属性特点进行分类,并根据矩形框在CAD图纸中的位置,对同类型的矩形框进行排序。
5)排序完成后,根据矩形框的构成方式,采用对应的方法对文本信息进行提取。
6)将提取得到的文本信息输出到新生成的Excel 文件中并与原文件中的文本信息进行匹配和校核。
··150
李锐,等:面向多张CAD 图纸的文本信息自动提取与实现第2期3
面向多张CAD 图纸的文本信息自动提取
与校核系统
在Visual Studio 2008平台上通过二次开发工具
ObjectARX 2010开发了一个面向多张CAD 图纸的文本信息自动提取与校核系统,其主要包括以下功能模块。
1)启动模块。传统的ObjectARX 程序是通过在AutoCAD 软件的命令行中手动输入函数生成的启动命令来执行相应功能,但这种执行方式要求操作人员清楚地记住各个功能函数的启动命令,当启动命令的数量多且较长时,这种执行方式就会变得很麻烦。因此,本文开发的系统通过加载菜单资源的方法创建了快捷菜单的命令执行方式。其中,菜单资源加载函数的代码如下:
//切换当前使用的资源
acDocManager->pushResourceHandle (_hdllInstance );//创建一个菜单对象
m_pDemoMenu=new CMenu ;//加载菜单对象
m_pDemoMenu->LoadMenu (IDR_DEMO_DEFAULT_MENU );
//再把资源切换回来
acDocManager->popResourceHandle ();
2)文本信息提取模块。根据属性块名称遍历得到CAD 图纸中相同类型矩形框的任意2个对角坐标或插入点坐标,并根据该类矩形框在图纸中的位置对其对角坐标或插入点坐标进行排序,以保证所提取文本信息的准确排列,利用矩形框与文本之间的位置关系构建窗口选择集或炸开矩形框,以获取矩形框中的文本信息并存储到Vector<Cstring>数组或Cstring 变量中。其中,获取由属性块构成的矩形框中文本信息的部分代码如下:
//对A0图纸进行遍历
for (int i =0;i <poitArray_A0.length ();i++){……
//获取图纸中文本信息所在的矩形框
int rt_zw =acedSSGet (TEXT ("W"),ads_pt1,ads_pt2,rb_zw ,ssName_zw );
if (rt_zw ==5100){……
AcDbBlockReference *blkref =AcDbBlockReference ::cast (pEnt_1);
//获得矩形框的插入点坐标
AcGePoint3d pt =blkref->position ();
//将插入点坐标加入到AcGePoint3dArray 数组中ptArray_zw.append (pt );}……}
//将矩形框的插入点坐标进行排序
ptArray_zw =CCreateEnt ::swap_blk (ptArray_zw ,1);
3)文本信息输出模块。利用Excel 操作接口,按照1张图纸对应Excel 中1个工作表的原则,将储存在数组和变量中的文本信息输出到Excel 中。保存在Vector<Cstring>数组中的文本信息的输出代码如下:
for (int j =0;j <zw_l ;j++){
for (int i =0;i <zw_new_h ;i++){
//获取数组中的文本信息Cstring str_temp =v_dz [8*j +i ];//将文本信息输出到Excel 中
cells1.put_Item (COleVariant ((long )(10+i )),COleVari
图1
面向多张CAD 图纸的文本信息自动提取与校核流程
Fig.1
Automatic extraction and verification process of text information for multiple CAD drawings
·
·151
工程设计学报第28卷
ant ((long )(3+j )),COleVariant (str_temp ));
}}
4)文本信息校核模块。利用Visual Studio 2008中的可视化技术将提取到的文本信息以窗口形式显示出来。自定义的用户交互函数的代码如下:
bool CExcel ::SelectFileToOpen (const TCHAR*file ‐desc ,const TCHAR*fileExtName ,Cstring &selectedFile ){
Cstring extensionNameHaveDot =TEXT (".");extensionNameHaveDot +=fileExtName ;//弹出打开对话框Cstring filter ;
filter.Format (TEXT ("%s (*.%s )|*.%s"),filedesc ,fileExt ‐Name ,fileExtName );
filter +=TEXT ("|所有文件(*.*)|*.*||");//TRUE/FALSE 打开或另存对话框BOOL bOpenFile =TRUE ;
CFileDialog cFileDlg (bOpenFile ,extensionNameHa ‐veDot ,NULL ,OFN_HIDEREADONLY |OFN_OVER ‐WRITEPROMPT ,filter );
cFileDlg.m_ofn.lStructSize =88;//打开Office 风格的打
开文件对话框
//取得全路径文件名
if (cFileDlg.DoModal ()==IDOK ){
selectedFile =cFileDlg.GetPathName ();return true ;}else {
return false ;}}
4应用实例
利用前期开发的基于Excel 文件中文本信息的
CAD 图纸自动生成系统,通过读取Excel 文件中的文本信息,在AutoCAD 软件中生成多张连接器电路图,如图2所示。利用开发的面向多张CAD 图纸的文本信息自动提取与校核系统对连接器电路图中的文本信息进行自动提取和校核。
1)在AutoCAD 软件界面中,先点击鼠标右键弹出快捷菜单,再点击快捷菜单中的“输出并校核”选项,启动文本信息的提取和校核功能。然后,借助视图调整模块对用户窗口进行调整,使得所有电路图都处于用户窗口内,保证所提取文本信息的完整性。
2)利用块表记录迭代器对所有连接器电路图进行遍历,将遍历得到的图纸块名称及其插入点坐标分别添加到Vector<Cstring>数组和Vector<double>数组中,并对图纸块名称数组和插入点坐标数组进行同步排序。然后,根据图纸块名称所对应的图纸尺寸
(如“A0”对应的图纸尺寸为1189mm×841mm )和插入点坐标,循环构建窗口选择集并依次对每张图纸中的属性块和多段线进行遍历。
在图2所示的连接器电路图中,文本信息被划分为3种类型:类型1和类型3对应的矩形框名称为“zw_table ”,类型2对应的矩形框名称为“zw_rf ”,且类型3对应的矩形框被红多段线所包围。首先,分别利用矩形框名称和红多段线创建结果缓冲区链表;然后,利用窗口选择集分别遍历这3类文本信息所在矩形框的对角坐标和插入点坐标并排序,
以保证
图2
自动生成的连接器电路图
Fig.2
Automatically generated connector circuit diagram
·
·152