背景技术
目前主流的AutoCAD二次开发工具(API接口)主要有ObjecArx\ActiveX Automation\Visual LISP。其中,ObjectArx是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。ObjectArx与其它开发工具相比具有如下优点:
1、ObjectArx API是以C++语言为基础的面向对象的开发环境和应用程序接口,ObjectArx程序本质上为Windows 动态链接库(DLL)程序,与AutoCAD 共享地址空间,并能直接利用AutoCAD 核心数据结构和代码,使得二次开发者可以直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,能够在运行期间实时扩展AutoCAD的功能。
2、包含了基于MFC的界面扩展类库,使用户可以创建出与AutoCAD内建界面一致的用户界面(UI),同时它也是一个可扩展的编程框架,可以扩展AutoCAD 的对象和协议,即在AutoCAD现有的类层次基础上派生自定义类,以满足用户特定功能的需要。
3、用其开发的CAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效以及代码可重用性强等特点。
目前对图纸信息的编辑处理程序大多只能处理单个文件,且图纸信息如图表号、图名、页码等多采用标注文字的形式体现,图纸信息和图框实体是分离的,两者不存在依存关系,如果CAD文件中的图纸信息中某一项被删除了,则必须手动重新标注,同样的如果需要编辑某一项或多项,则必须手工重新修改文字对象的内容。上述两项目工作对于需要编辑众多图纸时,则会带来相当大的重复劳动,而且难易维护及图纸信息的自动更新。
有鉴于此,有必要提出了一种新的基于ObjectArx的CAD图纸信息批量处理方法。
发明内容
本发明的目的在于提供一种基于ObjectArx的CAD图纸信息批量处理方法,其利用扩展CAD对象来自定义CTKInfo(图纸信息类),实现图纸信息批量处理功能,包括图纸信息批量填写、编辑、标注以及图纸页码自动编排等功能,具有模块性好、独立性强、连接简单、使用方便、内部功能高效以及代码可重用性强等特点。
本发明的一种基于ObjectArx的CAD图纸信息批量处理方法,包括以下步骤:
S1、在AutoCAD中通过APPLOAD命令加载程序;
S2、进行通用设置,包括指定特征图框、信息项目在特征图框上的相对位置、页码格式和标注比例;
S3、添加CAD文件,将CAD图纸填入文件列表框中;
S4、将图表信息填入图表信息列表框中;
S5、打开CAD图纸,将符合特征图框特性的多段线实体ID保存在TKArray数组中,并判断TKArray数组中的特征图框是否附加有CTKInfo,若是,则不添加,若否,则给特征图框附加CTKInfo;
S6、将所述TKArray数组按多段线角点的X坐标进行排序,以便按顺序编排页码;
S7、依次读取图表信息列表框中的图纸信息项,按“模型空间”、“图纸空间”顺序填入所述打开CAD图纸中特征图框的CTKInfo中,并在预设位置按预设比例Scale添加相关标注信息;
S8、重复步骤S5~S7,直至最后一张CAD图纸处理结束。
作为本发明的进一步改进,所述步骤S5中,判断多段线实体是否符合特征图框特性的方法具体为:
通过布局字典遍历器依次遍历“模型空间”、“图纸空间”中的多段线实体。
作为本发明的进一步改进,所述步骤S2具体为:
通过创建通用设置对话框,采用交互式在AutoCAD中点取特征图框、图纸信息相对位置点,编辑框中填写页码格式、标注比例,并将上述信息分别保存至静态变量。
作为本发明的进一步改进,所述静态变量包括static AcDbPolyline TK、static AcDbPoint Points[]、static CString szFormat、static double Scale。
作为本发明的进一步改进,所述步骤S4中将图表信息填入图表信息列表框中的方法包括手工填写方式和Excel导入方式。
作为本发明的进一步改进,所述手工填写方式采用CEditListCtrl扩展控件实现。
作为本发明的进一步改进,所述Excel导入方式采用COM技术实现与当前打开的Excel文件实现动态数据通信,将用户在Excel文件中选择的区域动态导入图表信息列表框的各列项中。
作为本发明的进一步改进,所述步骤S4中图表信息列表框中的图标信息通过表头升序或降序排列。
作为本发明的进一步改进,所述特征图框设有属性编辑对话框,用于查看或编辑特征图框的CTKInfo中的信息。
本发明利用ObjectArx对AutoCAD的对象进行扩展,自定义一个新对象——CTKInfo类(图纸信息类),并将这个属性类“封装”在图框多段线实体的扩展词典(AcDbDictionary)中,即可实现CTKInfo类与图框多段线“绑定”。这样做有以下优点:
1、图框的标注信息的丢失或删除,不会影响到图纸信息类。由于图纸信息属性类还附着在多段线中,可以通过命令容易地实现标注信息的再现;
2、图纸信息维护简单方便,实现图纸信息标注与图纸信息类的保持一致,实现图纸信息标注自动更新;
3、可以通过对话框界面方式方便直观地编辑或保存图纸属性类的各个信息项。
具体实施方式
本发明的一种基于ObjectArx的CAD图纸信息批量处理方法,包括以下步骤:
S1、在AutoCAD中通过APPLOAD命令加载程序;
S2、进行通用设置,包括指定特征图框、信息项目在特征图框上的相对位置、页码格式和标注比例;
S3、添加CAD文件,将CAD图纸填入文件列表框中;
S4、将图表信息填入图表信息列表框中;
S5、打开CAD图纸,将符合特征图框特性的多段线实体ID保存在TKArray数组中,并判断TKArray数组中的特征图框是否附加有CTKInfo,若是,则不添加,若否,则给特征图框附加CTKInfo;
S6、将TKArray数组按多段线角点的X坐标进行排序,以便按顺序编排页码;
S7、依次读取图表信息列表框中的图纸信息项,按“模型空间”、“图纸空间”顺序填入打开CAD图纸中特征图框的CTKInfo中,并在预设位置按预设比例Scale添加相关标注信息;
S8、重复步骤S5~S7,直至最后一张CAD图纸处理结束。
上述方法利用扩展CAD对象来自定义CTKInfo(图纸信息类),实现图纸信息批量处理功能,包括图纸信息批量填写、编辑、标注以及图纸页码自动编排等功能,具有模块性好、独立性强、连接简单、使用方便、内部功能高效以及代码可重用性强等特点。
以下将结合附图所示的各实施方式对本发明进行详细描述。但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。
图纸信息一般包括图名、图号、页码、总页数、日期、及设计复核审核人员等基本项目。在实际工作中,一般是通过手工填写的方式将上述信息以CAD文字对象的方式填在图框各栏目中,当图纸数量众多时比较烦索而且不易维护,特别是对图号、页码等在图纸编辑过程中经常需要更改,往往带来重复性劳动。为解决上述问题,本发明通过ObjectArx对AutoCAD二次开发实现对图纸信息批量处理功能。
参图1所示为本发明基于ObjectArx的CAD图纸信息批量处理方法的流程示意图,其包括以下步骤:
S1、在AutoCAD中通过APPLOAD命令加载程序;
S2、进行通用设置,包括指定特征图框(多段线)、信息项目在特征图框上的相对位置、页码格式和标注比例。具体实现方法为:
通过创建通用设置对话框(非模态对话框),采用交互式在AutoCAD中点取特征图框(多段线)、图纸信息相对位置点,编辑框中填写页码格式、标注比例,最终将上述信息分别保存至静态变量。其中静态变量包括static AcDbPolyline TK、static AcDbPoint Points[]、static CString szFormat、static double Scale;
S3、添加CAD文件,将CAD图纸填入文件列表框中。具体实现方法为:
调用MFC类库中的通用打开文件对话框CFileDialog,添加cad文件,分别提取文件名、路径、修改时间等信息分别填入文件列表控件中的相应列项中。该列表控件采用MFC的CListCtrl控件,每个单元格不可编辑,只供显示添加的文件信息,以防止用户修改出错。文件列表顺序可以通过单击表头实现升序、降序的排序功能;
S4、将图表信息填入图表信息列表框中,本实施方式中图表信息列表顺序可以通过单击表头实现升序、降序的排序功能。其中,将图表信息填入图表信息列表框中的方法包括手工填写方式和Excel导入方式。具体方式为:
1、手工填写方式:采用CEditListCtrl扩展控件实现。由于MFC的CListCtrl所提供的编辑功能只局限于第一列,也就是说只有第一列可编辑。这样显然无法满足用户对图表信息各项的输入要求,本发明中将CListCtrl扩展为每个子项都能编辑的CEditListCtrl类,具体操作类似Excel表格,以提供人性化的编辑、输入界面;
2、Excel导入方式:采用COM技术实现与当前打开的Excel文件实现动态数据通信,将用户在Excel文件中选择的区域动态导入图表信息列表框的各列项中。这样可利用Excel强大的数据处理及编辑功能;
S5、打开CAD图纸,将符合特征图框特性的多段线实体ID保存在TKArray数组中,并判断TKArray数组中的特征图框是否附加有CTKInfo(图纸信息类),若是,则不添加,若否,则给特征图框附加CTKInfo。其中,判断多段线实体是否符合特征图框特性的方法是通过布局字典遍历器依次遍历“模型空间”、“图纸空间”中的多段线实体;
S6、将TKArray数组按多段线角点的X坐标进行排序,以便按顺序编排页码;
S7、依次读取图表信息列表框中的图纸信息项,按“模型空间”、“图纸空间”顺序填入打开CAD图纸中特征图框的CTKInfo中,并在预设位置按预设比例Scale添加相关标注信息;
S8、重复步骤S5~S7,直至最后一张CAD图纸处理结束。
进一步地,本发明中为便于手工修改某个特征图框的CTKInfo中的信息,特征图框设有属性编辑对话框,用于查看或编辑特征图框的CTKInfo中的信息,方便手工更改相应信息。同时利用ObjectArx为开发者提供了反应器机制,它类似于MFC的消息处理,利用它可以响应输入事件、实体添加/编辑/删除等事件,实现属性编辑与标注信息同步更新。
本发明利用ObjectArx对AutoCAD的对象进行扩展,自定义一个新对象——CTKInfo(图纸信息类),并将这个属性类“封装”在图框多段线中,即可实现图纸信息与图框多段线“绑定”,具有图纸信息维护简单方便,实现图纸信息标注与图纸信息类的保持一致,实现图纸信息标注自动更新等优点;
同时,界面用到了MFC的CListCtrl控件,并对其功能实现了扩展(CeditListCtrl),使人机交互界面更加人性化,同时通过COM技术实现与Excel文件动态数据交换,最后通过对话框界面方式方便直观地编辑或保存图纸属性类的各个信息项。
本发明利用ObjectArx对AutoCAD的对象进行扩展,自定义一个新对象——CTKInfo类(图纸信息类),并将这个属性类“封装”在图框多段线实体的扩展词典(AcDbDictionary)中,即可实现CTKInfo类与图框多段线“绑定”。这样做有以下优点:
1、图框的标注信息的丢失或删除,不会影响到图纸信息类。由于图纸信息属性类还附着在多段线中,可以通过命令容易地实现标注信息的再现;
2、图纸信息维护简单方便,实现图纸信息标注与图纸信息类的保持一致,实现图纸信息标注自动更新;
3、可以通过对话框界面方式方便直观地编辑或保存图纸属性类的各个信息项。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施方式或者实施方式的某些部分所述的方法。
应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。