利用VBA自动提取CAD图纸明细表并进行数据库管理
EXCEL引用autocadvba,自动加载其类型库

EXCEL引⽤autocadvba,⾃动加载其类型库Sub AutoADDAutoCADTypeLib()Dim Ref As VariantDim hasAutoTypeLib As Boolean, hasAXDBLib As Boolean, acadName As StringhasAutoTypeLib = False: hasAXDBLib = FalseFor Each Ref In ThisWorkbook.VBProject.ReferencesIf = "AutoCAD" Then hasAutoTypeLib = TrueIf = "AXDBLib" Then hasAXDBLib = TrueNext RefDim wshell As ObjectSet wshell = CreateObject("WScript.Shell")Dim strAcadShardFd As String, acadCurVer1 As String, acadCurVer2 As String, acadLanguage As String'读取cad的版本acadCurVer1 = wshell.regread("HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\CurVer")'读取cad的语⾔版本acadCurVer2 = wshell.regread("HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\" & acadCurVer1 & "\CurVer")'读取cad的最后⼀次启动的语⾔版本acadLanguage = wshell.regread("HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\" & acadCurVer1 & "\" & acadCurVer2 & "\AllUsersFolder")Dim LanguagePath As Variant, acadVer As StringLanguagePath = VBA.Split(acadLanguage, "\")acadVer = VBA.Mid(acadCurVer1, 2, 2) & LanguagePath(UBound(LanguagePath) - 1)acadName = LanguagePath(UBound(LanguagePath) - 3)'读取cad的64位类型库的路径strAcadShardFd = wshell.regread("HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\" & acadCurVer1 & "\" & acadCurVer2 & "\AutodeskSharedFolder")'读取cad的32位类型库的路径'strAcad32ShardFd = wshell.regread("HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\" & acadCurVer1 & "\" & acadCurVer2 & "\AutodeskShared32Folder") Set wshell = NothingIf hasAutoTypeLib = False ThenThisWorkbook.VBProject.References.AddFromFile (strAcadShardFd & "acax" & acadVer & ".tlb")MsgBox acadName & " AutoCAD Type Lib Already add to referecne scucces"ElseMsgBox "AutoCAD Type Lib Already add to referecne, no need add aagin"End IfIf hasAXDBLib = False ThenThisWorkbook.VBProject.References.AddFromFile (strAcadShardFd & "axdb" & acadVer & ".tlb")MsgBox acadName & " AXDBLib Already add to referecne scucces"ElseMsgBox "AXDBLib Already add to referecne, no need add aagin"End IfEnd Sub。
基于VBA的AutoCAD二次开发在图纸明细表中的应用

解 决 上 述 问 题 成 为 构 建 应 用 项 制 作 成 属 性 块 , 程 序 调 用 插 入 时 , 程 序 的 关 键 , 应 用 程 序 设 计 的 基 根 据 用户 输 入 的表 项 内容 ,程 序 自动
关键 词 : 总装 图 ; 明细 表 ;A t C D u o A ;二 次 丌 发 ;V A B
O引 言
图 纸 文 件 中 总 装 图 是 产 品 必 不 可
多 条 表 项 时 , 需 要 手 工 调 整 表 项 位 置 F r p i a o )、O e t R 等 , o A pl c ti n bj c A X 并 重 新 编 辑 表 项 的 序 号 值 : 3 明 细 ) 利 用 这 些 开 发 工 具 用 户 可 以方 便 地 自
间 , 而 且 易 出 错 。A t C D 于 T g 建 uo A 中 ., J 装 图 中 引 用 了 子 部 件 , 子 部 件 同样 有
述 的手 工 操 作 完 成 的 种 种 不 足 之 处 。
明 细 表 的 一 般 方 法 是 表 项 采 用 属 性 块
生成 ,指 引线采 用L a e 命令 生成 , edr
对 象 的 关 键 不 是 如 何 创 建 、 编 辑 对 象 表 头 、 明 细 表 表 项 等 对 象 。 指 引 线 由 及 其 后 处 理 , 问题 的关 键 在 于 : 1 明 点 、 直 线 或 圆 单 行 文 字 等 组 成 , ) 、 用 札 + D + 细 表 对 象 创 建 后 如 何 存 储 在 图 形 文 件 户 选 择 点 后 由程 序 自动 生 成 , 生 成 后
在CAD中利用表格和数据库进行数据管理

在CAD中利用表格和数据库进行数据管理CAD(计算机辅助设计)软件在工程设计和制图中起着至关重要的作用。
然而,在处理大量数据时,手动管理数据变得十分繁琐和容易出错。
为了解决这个问题,我们可以利用CAD软件中的表格和数据库功能,以便更高效地管理数据。
首先,让我们来介绍CAD软件中的表格功能。
表格在CAD软件中通常用于展示和管理设计中的各类数据。
例如,在建筑设计中,我们可以使用表格来记录房间的尺寸、材料的使用情况等。
而在机械设计中,表格可以被用来记录零件的规格、数量等信息。
在CAD软件中创建表格非常简单。
首先,我们需要在软件的菜单中找到“表格”或“插入表格”的选项。
接下来,我们可以选择表格的列数和行数,并按需求调整表格的尺寸。
在建立表格之后,我们可以使用鼠标选中表格中的单元格,然后输入相应的数据。
当然,我们也可以导入已有的外部数据表格,以便更快速地填充表格。
通过使用表格功能,我们可以方便地管理设计数据。
例如,当我们需要对设计进行修改时,我们只需要更新相关数据表格中的数据,而不需要逐个在图纸中进行修改,大大提高了工作效率和减少了错误的发生。
除了表格功能之外,CAD软件还提供了数据库功能,以便更为高级地管理数据。
通过使用数据库,我们可以将大量的设计数据集中存储,并灵活地对其进行管理。
在CAD软件中,我们可以将设计数据导入到数据库中,并根据需要进行查询和修改。
例如,在一个建筑项目中,我们可以将各个房间的尺寸、面积、用途等数据存储到数据库中。
当我们需要查找某个特定类型的房间时,我们可以使用数据库提供的查询功能迅速定位到所需数据,并进行相应的操作。
此外,CAD软件中的数据库功能还可以与其他软件进行数据交互。
例如,在建筑设计中,我们可以将CAD软件中的设计数据导出到BIM (建筑信息模型)软件中,以便更全面地进行工程管理。
通过数据库功能,我们可以实现CAD与其他软件之间的无缝衔接,提高工作效率和数据的准确性。
总结起来,利用CAD软件中的表格和数据库功能,我们可以更为高效地管理设计数据。
利用编程实现提取CAD图纸中的料表数据自动生成电子表格的功能

利用编程实现提取CAD图纸中的料表数据自动生成电子表格的功能随着科技的不断发展,CAD(Computer-Aided Design)软件已经被广泛应用于各行各业的设计中,尤其是在建筑、机械、电子等领域中。
然而,CAD图纸中的料表数据提取和整理一直是设计师们的一项耗时且繁琐的工作。
为了解决这个问题,许多开发人员利用编程技术实现了自动提取CAD图纸中的料表数据,以便于设计师们更好地完成设计任务。
这种方法能够快速地处理大量的图纸,将图纸中的料表数据整合成一个电子表格,使得整个过程更加简单高效。
实现此功能的原理是建立一套自动化软件流程,可用于处理从CAD到电子表格的数据传输,采用黑盒自动输入、自动识别和自动输出,并能够在自动化处理过程中自适应调整数据格式和处理规则。
这样即可实现高效率和高可靠性的数据提取和转换。
在具体实现中,该自动化软件流程主要实现以下几个步骤:第一步,导入CAD图纸文件在这一步骤中,必须将需要提取料表数据的CAD图纸导入自动化软件流程中以备处理。
第二步,进行CAD标注扫描和解析把导入的CAD文件进行解析和处理,将其中的料表数据通过算法扫描和识别出来,并确保其准确性和完整性。
第三步,判断并区分不同栏目和关键字通过针对施工图翻转过程中常见的料表编写识别算法,将施工图中的不同栏目和关键字进行区分和判断。
第四步,将数据存储到电子表格中将提取出来的料表数据储存到电子表格中,并按照所需格式进行排版和格式化。
最后,生成表格和导出数据将自动产生的电子表格统计数据呈现给用户详细查看,同时将其保存并导出到Excel文件中,以便于用户进行修改和补充。
如此,利用编程实现提取CAD图纸中的料表数据自动生成电子表格的功能已成为现实。
这种方法大大提高了工作效率,减少了手动操作造成的错误,同时也可以使设计师们将更多的精力放在具体设计的方案上,从而更加专注于实现设计目标。
VBA编程中的跨文件操作和数据提取技巧

VBA编程中的跨文件操作和数据提取技巧VBA(Visual Basic for Applications)是一种用于Microsoft Office软件中的宏编程语言。
它允许用户自定义和自动化各种任务,从而提高工作效率。
在VBA编程中,经常需要跨文件进行操作和提取数据。
本文将介绍一些在VBA编程中实现跨文件操作和数据提取的技巧。
1. 打开和关闭其他文件在VBA中,可以使用Workbooks集合来管理工作簿(即Excel文件)。
要打开其他文件,可以使用Workbooks.Open方法,并指定文件的路径和名称。
例如,以下代码将打开名为“Data.xlsx”的Excel文件:```vbaDim wb As WorkbookSet wb = Workbooks.Open("C:\Path\Data.xlsx")```在进行了跨文件操作后,为了释放资源和关闭其他文件,可以使用Close方法来关闭工作簿:```vbawb.Close SaveChanges:=True ' 保存文件```2. 复制和粘贴数据在VBA中,可以使用Copy和Paste方法来复制和粘贴数据。
以下代码演示了如何将Sheet1中的A1单元格的内容复制到Sheet2的B2单元格中:```vbaWorksheets("Sheet1").Range("A1").CopyDestination:=Worksheets("Sheet2").Range("B2")```3. 读取和写入数据通过使用Range对象,VBA允许我们直接读取和写入工作表的数据。
以下代码演示了如何从Sheet1中的A1单元格读取数据,并将其写入Sheet2的B2单元格:```vbaDim data As Variantdata = Worksheets("Sheet1").Range("A1").ValueWorksheets("Sheet2").Range("B2").Value = data```4. 在多个文件中循环有时我们需要在多个文件中循环执行操作,可以使用FileSystemObject对象来实现。
VBA自动化数据整理技巧

VBA自动化数据整理技巧自动化数据整理是一个重要的技能,在处理大量数据时可以大大提高效率。
VBA(Visual Basic for Applications)是Microsoft Office应用程序自带的一种宏语言,可以通过编写代码实现自动化任务,包括数据整理。
本文将介绍一些VBA自动化数据整理的技巧,帮助你更高效地处理数据。
1. 自动填充列在处理数据时,经常需要将特定的值自动填充到一列或多列中。
使用VBA可以快速实现这个功能。
首先,你需要打开Visual Basic编辑器。
在Excel中,可以通过按下"ALT+F11"来打开编辑器。
然后,在编辑器中插入一个新的模块。
可以通过选择插入-模块,或者按下"ALT+I+M"快捷键来插入。
接下来,编写以下的VBA代码,然后按下"F5"键运行代码。
假设要将值"VBA"填充到A1:A100的单元格中。
```VBASub 填充列()Range("A1:A100").Value = "VBA"End Sub```这段代码会将"VBA"填充到A1:A100的单元格中。
2. 自动筛选数据筛选数据是处理大量数据时经常需要进行的操作之一。
使用VBA可以编写代码来自动筛选数据,并复制筛选结果到其他位置。
首先,你需要打开Visual Basic编辑器。
在Excel中,可以通过按下"ALT+F11"来打开编辑器。
然后,在编辑器中插入一个新的模块。
可以通过选择插入-模块,或者按下"ALT+I+M"快捷键来插入。
接下来,编写以下的VBA代码,然后按下"F5"键运行代码。
假设要筛选出A列中数值大于等于10的行,并将该结果复制到B列。
```VBASub 自动筛选()Range("A1:A100").AutoFilter Field:=1, Criteria1:=">=10"Range("A1:B100").SpecialCells(xlCellTypeVisible).Copy Range("B1")ActiveSheet.AutoFilterMode = FalseEnd Sub```这段代码会将A列中数值大于等于10的行筛选出来,并将筛选结果复制到B列。
AutoCAD VBA自动获取Excel数据生成塔基断面图

AutoCAD VBA编程:自动获取Excel数据生成塔脚断面图原以为这辈子再不会写程序了,无奈,还得继续……1、测量原始数据、处理结果。
如图:2、原始数据录入Excel ,并整理如下格式:3、因断面图用于设计高低柱、长短腿,在AutoCAD里面只生成A、B、C、D四个腿、以及横线路方向(E)即可。
在CADVBA程序管理器中录入以下程序段:Sub yema()Dim xcelApp As Excel.ApplicationDim xcelSheet As Excel.WorksheetDim strFile As StringstrFile = ThisDrawing.Application.VBE.ActiveVBProject.FileNameSet xcelApp = CreateObject("Excel.Application")xcelApp.Workbooks.Open Left$(strFile, Len(strFile) - 11) & "test.xlsx", , ReadOnly Set xcelSheet = xcelApp.ActiveWorkbook.Sheets(1)Dim mytxt As AcadTextStyleSet mytxt = ThisDrawing.TextStyles.Add("standard")mytxt.fontFile = "c:\windows\fonts\SIMFANG.TTF"ThisDrawing.ActiveTextStyle = mytxt'Dim newl, newl1, xxyLine, xxxLine As AcadSpline'取消顺线路方向Dim newl, newl1, xxyLine As AcadSplineDim startTan(0 To 2) As DoubleDim endTan(0 To 2) As DoublestartTan(0) = 0: startTan(1) = 0: startTan(2) = 0endTan(0) = 0: endTan(1) = 0: endTan(2) = 0Dim ptArr(0 To 92) As DoubleDim ptArr1(0 To 92) As DoubleDim ptArr2(0 To 92) As Double'Dim ptArr3(0 To 92) As DoubleDim i, j As Integeri = 1j = 0Do While i < 32ptArr(j) = xcelSheet.Range("C" & i): ptArr(j + 1) = xcelSheet.Range("D" & i): ptArr(j + 2) = 0ptArr1(j) = xcelSheet.Range("G" & i): ptArr1(j + 1) = xcelSheet.Range("H" & i): ptArr1(j + 2) = 0ptArr2(j) = xcelSheet.Range("K" & i): ptArr2(j + 1) = xcelSheet.Range("L" & i): ptArr2(j + 2) = 0'ptArr3(j) = xcelSheet.Range("O" & i): ptArr3(j + 1) = xcelSheet.Range("P" & i): ptArr3(j + 2) = 0i = i + 1j = j + 3LoopSet newl = ThisDrawing.ModelSpace.AddSpline(ptArr, startTan, endTan)Set newl1 = ThisDrawing.ModelSpace.AddSpline(ptArr1, startTan, endTan)Set xxyLine = ThisDrawing.ModelSpace.AddSpline(ptArr2, startTan, endTan)'Set xxxLine = ThisDrawing.ModelSpace.AddSpline(ptArr3, startTan, endTan) newl.color = acRednewl1.color = acYellowxxyLine.color = acBlue'xxxLine.color = acBlueDim aText, cText, bText, dText As AcadTextDim txtP(0 To 2) As DoubletxtP(0) = ptArr(0) + 20txtP(1) = ptArr(1)txtP(2) = 0Set aText = ThisDrawing.ModelSpace.AddText("A", txtP, 800)txtP(0) = ptArr(90) - 20txtP(1) = ptArr(91)txtP(2) = 0Set cText = ThisDrawing.ModelSpace.AddText("C", txtP, 800)txtP(0) = ptArr1(0) + 20txtP(1) = ptArr1(1)txtP(2) = 0Set bText = ThisDrawing.ModelSpace.AddText("B", txtP, 800)txtP(0) = ptArr1(90) - 20txtP(1) = ptArr1(91)txtP(2) = 0Set dText = ThisDrawing.ModelSpace.AddText("D", txtP, 800)'画坐标Dim xLine As AcadLineDim yLine As AcadLineDim stPoint(0 To 2) As DoubleDim enPoint(0 To 2) As DoublestPoint(0) = -20000: stPoint(1) = 0: stPoint(2) = 0enPoint(0) = 20000: enPoint(1) = 0: enPoint(2) = 0Set yLine = ThisDrawing.ModelSpace.AddLine(stPoint, enPoint)stPoint(0) = 0: stPoint(1) = -13000: stPoint(2) = 0enPoint(0) = 0: enPoint(1) = 13000: enPoint(2) = 0Set yLine = ThisDrawing.ModelSpace.AddLine(stPoint, enPoint)'加坐标度ThisDrawing.SetVariable "PDMODE", 2ThisDrawing.SetVariable "PDSIZE", 300Dim zbPoint As AcadPointDim zbTxt As AcadTexti = -15Do While i < 16stPoint(0) = i * 1000: stPoint(1) = 0: stPoint(2) = 0Set zbPoint = ThisDrawing.ModelSpace.AddPoint(stPoint)stPoint(0) = i * 1000: stPoint(1) = -700: stPoint(2) = 0If i < 0 ThenSet zbTxt = ThisDrawing.ModelSpace.AddText(-i, stPoint, 250) ElseSet zbTxt = ThisDrawing.ModelSpace.AddText(i, stPoint, 250) End Ifi = i + 1Loopi = -6Do While i < 7stPoint(0) = 0: stPoint(1) = i * 2000: stPoint(2) = 0Set zbPoint = ThisDrawing.ModelSpace.AddPoint(stPoint)stPoint(0) = -650: stPoint(1) = i * 2000 - 100: stPoint(2) = 0Set zbTxt = ThisDrawing.ModelSpace.AddText(i, stPoint, 250)i = i + 1Loop'加塔号、塔型Dim titTxt As AcadTextstPoint(0) = 1000: stPoint(1) = -10000: stPoint(2) = 0Set titTxt = ThisDrawing.ModelSpace.AddText(xcelSheet.Range("B32") & "(" & xcelSheet.Range("B33") & ")", stPoint, 800)ThisDrawing.Application.UpdateZoomAllxcelApp.ActiveWorkbook.ClosexcelApp.Workbooks.ClosexcelApp.QuitEnd Sub4、运行结果如下图(OK):。
利用VBA自动提取CAD图纸明细表并进行数据库管理

自动提取CAD图纸明细表及数据库管理的研究与实践本文TAG:工程图明细表自动提取AutoCAD数据库管理2008-10-21作者:尹胜安出处:e-works阅读:1582推荐:0本文详细介绍了如何开发应用AutoCAD来自动提取CAD图纸明细表及管理数据库,其切切实实的为设计工作节约了大量的时间。
制造企业工程技术人员在利用CAD进行产品设计时产生大量的DWG文件,每一个DWG文件中包含一张或数张图纸,设计的基础资料如:工程项目、图号、设备(物料)名称、型号规格、材质、数量、重量、备注等等文本信息都记录在图纸标题栏明细表中。
设计工作完成后,工艺编制、成本预算、物料消耗、物流采购、计划调度、车间生产等项管理业务都将依据图纸进行操作。
在通常的管理中,各业务部门往往通过人工的方式从CAD图纸或纸质图纸明细表中获取技术文件数据,再利用WORD或EXCEL进行手工二次录入,编制各自需要的明细表、经过汇总,生成相应的报表,并在此基础上产生工艺技术文件通俗简称为(工单),按不同的用途也有的称之为物料消耗单、物料清单BOM等。
这种单页面的文本制作方式虽然使用了电脑操作,但并未能摆脱繁重的手工录入和编辑工作,不能进行数据的自动处理,存在图纸与制表数据不一致、差错率高、工作量大、编制周期长、效率低下、查询繁琐、数据不能共享等多种弊端。
因此,采用自动提取CAD明细表与进行数据库管理的方法是克服以上弊端提高企业设计、技术、管理效率和工作质量的有效途径。
AutoCAD是AutoDesk公司开发的通用CAD工作平台,在机械、造船、电子、汽车、测绘、建筑等许多行业中得到广泛的应用,其完善的图形绘制和编辑功能,多种接口文件,较强的数据交换能力,特别是开放的二次开发功能给用户提供了有力的技术支撑。
Microsoft VBA (Visual Basic for Application) 是一个面向对象的可视化编程环境,它是由Visu al Basic派生而来,AutoCAD内嵌的VBA提供了与Visual Basic相似的丰富的开发能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动提取CAD图纸明细表及数据库管理的研究与实践本文TAG:工程图明细表自动提取AutoCAD数据库管理2008-10-21作者:尹胜安出处:e-works 阅读:1582 推荐:0本文详细介绍了如何开发应用AutoCAD来自动提取CAD图纸明细表及管理数据库,其切切实实的为设计工作节约了大量的时间。
制造企业工程技术人员在利用CAD进行产品设计时产生大量的DWG文件,每一个DWG文件中包含一张或数张图纸,设计的基础资料如:工程项目、图号、设备(物料)名称、型号规格、材质、数量、重量、备注等等文本信息都记录在图纸标题栏明细表中。
设计工作完成后,工艺编制、成本预算、物料消耗、物流采购、计划调度、车间生产等项管理业务都将依据图纸进行操作。
在通常的管理中,各业务部门往往通过人工的方式从CAD图纸或纸质图纸明细表中获取技术文件数据,再利用WORD或EXCEL 进行手工二次录入,编制各自需要的明细表、经过汇总,生成相应的报表,并在此基础上产生工艺技术文件通俗简称为(工单),按不同的用途也有的称之为物料消耗单、物料清单BOM等。
这种单页面的文本制作方式虽然使用了电脑操作,但并未能摆脱繁重的手工录入和编辑工作,不能进行数据的自动处理,存在图纸与制表数据不一致、差错率高、工作量大、编制周期长、效率低下、查询繁琐、数据不能共享等多种弊端。
因此,采用自动提取CAD明细表与进行数据库管理的方法是克服以上弊端提高企业设计、技术、管理效率和工作质量的有效途径。
AutoCAD是AutoDesk公司开发的通用CAD工作平台,在机械、造船、电子、汽车、测绘、建筑等许多行业中得到广泛的应用,其完善的图形绘制和编辑功能,多种接口文件,较强的数据交换能力,特别是开放的二次开发功能给用户提供了有力的技术支撑。
Microsoft VBA (Visual Basic for Application) 是一个面向对象的可视化编程环境,它是由Visual B asic派生而来,AutoCAD内嵌的VBA提供了与Visual Basic相似的丰富的开发能力。
AutoCAD从R14版开始增加了作为ActiveX Automation服务器应用程序的功能,这是一个功能强大的接口,它提供了一系列开放的对象,通过这些对象,VBA应用程序便可以对AutoCAD进行编程控制。
AutoCAD2000及以后版本其功能进一步扩充,强化了AutoCAD与数据库的通讯能力,能够使AutoCAD与其它应用程序(例如Microsoft Excel、Word、Access)直接共享数据。
它是对AutoCAD进行二次开发的一种强有力的手段。
笔者以AutoCAD2004为背景,应用VBA开发工具和Access数据库技术成功地实现了自动提取CAD 图纸明细表与进行数据库管理的研究目标并取得较好的实用效果。
一、自动提取AUTOCAD图纸明细表工程技术图纸的右下角区域一般都布置着标题明细栏,记载着图形总体和明细的特征信息和基本技术要数,它是所有派生技术文件的信息源头和依据,CAD图纸继承了这个惯例。
我国国家技术标准GB/T10 609.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和Prompt。
Tag项是该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表)。