自动提取自动提取 CAD 图纸明细表及数据库管理的研究与实践图纸明细表及数据库管理的研究与实践本文 TAG:工程图 明细表 自动提取 AutoCAD 数据库管理 2008-10-21作者:尹胜安 出处:e-works 阅读:1582 推荐:0本文详细介绍了如何开发应用 AutoCAD 来自动提取 CAD 图纸明细表及管理数据库,其切切实实的 为设计工作节约了大量的时间 制造企业工程技术人员在利用 CAD 进行产品设计时产生大量的 DWG 文件,每一个 DWG 文件中包 含一张或数张图纸,设计的基础资料如:工程项目、图号、设备(物料)名称、型号规格、材质、数量 、重量、备注等等文本信息都记录在图纸标题栏明细表中设计工作完成后,工艺编制、成本预算、物 料消耗、物流采购、计划调度、车间生产等项管理业务都将依据图纸进行操作在通常的管理中,各业 务部门往往通过人工的方式从 CAD 图纸或纸质图纸明细表中获取技术文件数据,再利用 WORD 或 EXC EL 进行手工二次录入,编制各自需要的明细表、经过汇总,生成相应的报表,并在此基础上产生工艺技 术文件通俗简称为(工单),按不同的用途也有的称之为物料消耗单、物料清单 BOM 等。
这种单页面的 文本制作方式虽然使用了电脑操作,但并未能摆脱繁重的手工录入和编辑工作,不能进行数据的自动处 理,存在图纸与制表数据不一致、差错率高、工作量大、编制周期长、效率低下、查询繁琐、数据不能 共享等多种弊端因此,采用自动提取 CAD 明细表与进行数据库管理的方法是克服以上弊端提高企业设 计、技术、管理效率和工作质量的有效途径AutoCAD 是 AutoDesk 公司开发的通用 CAD 工作平台,在机械、造船、电子、汽车、测绘、建筑 等许多行业中得到广泛的应用,其完善的图形绘制和编辑功能,多种接口文件,较强的数据交换能力, 特别是开放的二次开发功能给用户提供了有力的技术支撑 Microsoft VBA (Visual Basic for Application) 是一个面向对象的可视化编程环境,它是由 Vis ual Basic 派生而来,AutoCAD 内嵌的 VBA 提供了与 Visual Basic 相似的丰富的开发能力AutoCA D 从 R14 版开始增加了作为 ActiveX Automation 服务器应用程序的功能,这是一个功能强大的接口 ,它提供了一系列开放的对象,通过这些对象,VBA 应用程序便可以对 AutoCAD 进行编程控制。
Auto CAD2000 及以后版本其功能进一步扩充,强化了 AutoCAD 与数据库的通讯能力,能够使 AutoCAD 与其它应用程序(例如 Microsoft Excel、Word、Access)直接共享数据它是对 AutoCAD 进行二 次开发的一种强有力的手段 笔者以 AutoCAD2004 为背景,应用 VBA 开发工具和 Access 数据库技术成功地实现了自动提取 C AD 图纸明细表与进行数据库管理的研究目标并取得较好的实用效果一、自动提取一、自动提取 AUTOCAD 图纸明细表图纸明细表工程技术图纸的右下角区域一般都布置着标题明细栏,记载着图形总体和明细的特征信息和基本技术 要数,它是所有派生技术文件的信息源头和依据,CAD 图纸继承了这个惯例我国国家技术标准 GB/T 10609.1~2-1989 对图纸标题明细栏的形式、内容、尺寸都作了具体规定虽然各企业图纸标题明细 栏样式不尽相同,但大同小异,基本结构一致标题栏记载着图形的外部信息,明细栏记载着图形内在 的详细要素和彼此的关联图一)明细栏由若干明细行组成,明细行则由各栏目组合自动提取 AUTOCAD 图纸明细表的信息其实质就是针对 明细行对各栏目进行提取数据的操作。
提取明细行数据的方法概括起来,通常有坐标定位法和块行取值法两种:1.坐标定位法:即先点选起始明细行左下角坐标与末尾明细行右上角坐标所在的位置,确定提取数据的区 域范围,对该区域范围内的所有实体对象进行逐一扫描,读出文字对象(TEXT、MTEXT)的(X、Y)坐标 属性和字符串属性通过文字对应坐标值的分析确定该文字在明细表中的位置,实现自动提取数据的操作这 种方法对单图的 DWG 文件效果较好,但对多图的 DWG 文件和不规则的标题明细栏操作起来就很复杂且取数 的精度也较难控制,实用效果不够理想,这种方法对以往标题栏未作规范要求的老图纸其作用显而易见2.块行取值法:即利用 AutoCAD 块行属性特征来提取明细栏的信息 在 AutoCAD 内部对象模型(AutoCAD Object Model)以层次结构组织起来,顶层可编程的 Application 对象启 动 AutoCAD 应用程序的一个实例,通过 Application 对象定位到其它对象;第 2 层是 Document 和 Preference 对象,Document 对象代表当前在 AutoCAD 应用程序窗口中打开并操作的一个 AutoCAD 图形文件,Preference 对象对应于 Preference 对话框包含 AutoCAD 当前的配置信息;第 3 层是 Document 的集合对象,如 ModelSpace,PaperSpace,Blocks 对象等等,通过集合对象我们就可以访问当前图形中的所有实体。
块行取值法主要使用集合中 Attribute 和 Block 两个对象具体设计明细行时,没有格式限制,唯一要求就 是必须使一个 Attribute 对象对应明细行中的一个栏目项,将对应明细行中所有栏目的 Attribute 对象组合在一 起放入 Block 对象中,该 Block 对象就是用户定义的块行(明细行) 将定义好的块行依次插入(复制)到图 纸标题栏上方,组成图纸明细栏其操作如下: ·绘图→块→定义属性(图二、图三)·修改→对象→属性→块属性管理器(图四、图五)图二图三图四图五图六Attribute 对象是具有交互功能的一种标签,含有 3 个配置项:Tag,Value 和 PromptTag 项是该 Attribute 对象的标志符,即 Attribute 对象的名字例如 Tag 设置为“件号“,表示该 Attribute 对应明细栏中的“件号“栏目 Value 项表示 Attribute 中包含的真实数值,如某个具体的件号值为“001“在定义 Attribute 对象时,由于 初始明细栏目中的具体内容不确定,则该属性一般暂不输入数据待块行建立后其输入的数据就存储在 Attribute 对象中,这样通过程序访问 Attribute 对象的 Value 属性就可以获取其中的数据。
Prompt 项表示 Attribute 的提示信息,引导用户完成数据输入操作Block 对象是一个容器对象,该 Block 包含多个 Attribute 对象在 AutoCAD 图形中插入明细行后,只要 点击该行系统就会提示用户输入相应的值,并显示在图形标题明细栏中在开发中要注意区分 Block 和 BlockRef(块引用对象) 、Attribute 和 AttributeRef(属性引用对象)对象 在 AutoCAD 图形中定义 Block 时,该 Block 对应 Block 对象将定义好的 Block 插入到另一个图形中,就是 基于 Block 的定义生成一个实例,该实例就是 BlockRef 对象;同样,在 AutoCAD 图形中定义 Attribute 时,该 Attribute 对应 Attribute 对象将包含在 Block 中 Attribute 插入到另一个图形中,就是基于 Attribut e 的定义生 成实例,实例对应的就是 AttributeRef 对象因此在从 AutoCAD 图形的明细栏中自动提取管理信息时,涉及 到的两种对象是 BlockRef 和 AttributeRef 对象.将按上述方法定义好的规范明细栏插入到 AutoCAD 图形中后,通过 ActiveX Automation 技术就能将明细 栏中的信息提取出来。
在 Document 的集合对象中 Modelspace 对象是一个特殊最大的 BLOCK,包含图纸中所 有实体(图形对象) ,由于 BLOCK、Attribute 允许嵌套,因此为搜索当前实体中的属性信息提供了方便基本 算法上使用了递归调用扫描当前图纸中的所有实体,通过实体的 EntityType 属性判断该实体是否是 BlockRef 对象,如果是,则判断该 BlockRef 对象中是否包含 AttributeRef 对象如果包含则获取 AttributeRef 对象的 列表然后扫描此列表,通过 TagString 和 TextString 属性获取每个 AttributeRef 对象中的数据,并同步写入 ACCESS 数据库;当扫描结束时,明细栏中所有 AttributeRef 对象中包含的信息都被提取出来,自动在 ACCESS 数据库中即可形成初步的明细数据表在 AUTOCAD 中自动提取明细表数据解决方案思路如(图七)所示:图七二、二、VBA 编程自动提取编程自动提取 CAD 图纸明细表及进行数据库管理的要点图纸明细表及进行数据库管理的要点本研究采用 AutoCAD2004 设计图纸明细表,Access2003 数据库进行管理。
系统设计可分为 AutoCAD2004 二次开发和数据库管理两个组成部分,使用 VBA 编程工具开发系统一)AutoCAD2004 二次开发1.建立自定义菜单:启动 CAD→工具→自定义→编辑自定义文件→当前菜单→进入 ACAD 记事本→编辑 →查找 POP11→修改→保存自定义菜单修改内容:***POP11**vba 应用ID_vba 应用 [&vba 应用]ID_提取图纸明细表 [->&提取图纸明细表]ID_保存为 Excel 表 [&保存为 Excel 表]^C^C_-vbarun m_excel.dtexcelID_保存为 Access 表 [&保存为 Access 数据库]^C^C_-vbarun m_access.dtaccess***POP12 注释: ***POP11----第 11 项**vba 应用应用----别名ID_vba 应用应用 [&vba 应用应用]----显示“vba 应用应用“菜单项ID_提取图纸明细表提取图纸明细表[->&提取图纸明细表提取图纸明细表]---表示有下级子菜单显示“提取图纸明细表“ID_保存为保存为 Excel 表表[&保存到保存到 Excel 表表]^C^C_-vbarun m_excel.dtexcel----显示“保存到保存到 Excel 表表“,并运行 ACAD 工程中的模块 m_excel 中的宏(过程)dtexcel(打开图纸时操作菜单自动提取明细表到指定的 Excel 表)。
ID_保存为保存为 Access 表表[&保存为保存为 Access 数据库数据库]^C^C_-vbarun m_access.dtaccess----显示“保存到 Access 表“,并运行 ACAD 工程中的模块 m_access 中的宏(过程)dtaccess (打开图纸时操作菜单自动提取明细表到指定的 Access 表)将编辑后的 acad.dvb 文件 COPY 到 C:\Program files\autocad 2004\support\目录中2.编制.编制 VBA 提取图纸明细表数据程序:提取图纸明细表数据程序:((1)提取数据到)提取数据到 Excel 表的程序要点表的程序要点2)提取数据到)提取数据到 Access 表的程序要点表的程序要点(二)建立(二)建立 ACCESS 数据库管理信息系统数据库管理信息系统1.建立数据库 MDB 应用文件:为了统一。