——在SolidWorks EPDM实施中遇到的客户附带要求
华利敏
北京亿达四方信息技术有限公司 技术部
摘要:AutoCAD是我们在实施EPDM过程中遇到的客户使用最普遍的一种二维绘图软件,但很多客户在形成产品明细表(产品BOM)时并不能通过存在于DWG格式文件中的BOM信息自动获取,仍然需要以Excel格式手动编排产品明细。本人通过ActiveX技术,利用Visual Basic.Net对AutoCAD进行二次开发,实现了从AutoCAD图纸中获取材料明细表(BOM)信息并将其导出到Excel表格,以便客户能够统一管理与设计相关的零部件信息。
引言
AutoCAD通过ActiveX对象开发其内部数据访问和编辑功能,使用通用的面向对象的编程语言即可利用这些对象访问和编辑AutoCAD软件中相关元素,如:点、线、文本、块等。目前支持ActiveX对象的编程语言较多,考虑简便易用性,本文选用Visual Basic.Net作为对AutoCAD进行二次开发的编程语言。实现了从从AutoCAD图纸中自动提取材料明细表信息,并以Excel电子表格形式输出。
1 设计思路
考虑通常情况下企业的明细表格式都是统一的,明细表的内容固定,只需用户给定明细表内容所在区域范围,即可通过计算机快速地获取范围内所包含的BOM信息。其设计思路如下:
(1) 建立AutoCAD与开发界面之间的连接关系;
(2) 在启动AutoCAD后,由用户指定图纸中BOM内容所在范围(如:指定BOM表格的左下角与右上角所在位置);
(3) 通过编写程序获取范围内的BOM信息——多数情况下为文本或块信息,本文仅从文本角度考虑;
(4) 建立开发界面与Excel之间的连接,并实现输出;
2 具体实现
(1) 建立AutoCAD与开发界面之间的联系
首先需使用VB.Net创建一个新项目“BOM获取”,然后在项目属性“引用”标签页选择“添加”,添加与AutoCAD相关的ActiveX对象接口:AutoCAD 2010 Type Library;acadbmgd.dll以及acmgd.dll。
添加完成后,通过以下代码实现程序与AutoCAD之间的关联:
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.Interop.Common
On Error Resume Next
AcadApp = GetObject(, "AutoCAD.Application")
Do
Err.Clear()
AcadApp = CreateObject("AutoCAD.Application")
Loop While Err.Number <> 0
AcadApp.WindowState = Common.AcWindowState.acMax '设置为最大窗口显示
AcadApp.ActiveDocument.WindowState = AcWindowState.acMax '设置绘图窗口为最大
AcadApp.Visible = True
(2) 编辑用户使用界面
考虑该程序前期需用户输入BOM所在位置范围,设置用户使用窗口如下:
(3) 编写代码获取用户指定的BOM范围信息
限于篇幅,本文略去用于获取BOM范围内文本信息的代码,仅对获取方法进行介绍。
如我们需获取如下图DWG图纸中的BOM信息:
首先,因需要获取到用户给定的BOM范围,在此我们考虑以获取对角线点坐标的方式进行定位,如定义图纸中BOM范围内左下角坐标点为Point1,右上角坐标点为Point2。在AutoCAD对象中,我们可以通过GetPoint函数获取到由用户选择的范围点X、Y、Z坐标,代码如下:
Point1 = AcadApp.ActiveDocument.Utility.GetPoint(, "Enter a point: ")
Point2 = AcadApp.ActiveDocument.Utility.GetPoint(, "Enter a point: ")
由此可得Point1的X、Y、Z坐标分别为:Point1(0)、Point1(1)、Point1(2);
Point2的X、Y、Z坐标分别为:Point2(0)、Point2(1)、Point2(2);
在获取到BOM所在范围之后,我们便可以通过遍历图纸所有元素的方式,仅将范围内的元素对象名称为“AcDbMText”以及“AcDbText”形式的文本获取。需获取的信息还包括文本的最小位置坐标,用于后续输出成固定的格式到Excel表格中。
(4) 建立开发界面与Excel之间的联系,并实现输出
重复第一步中的添加与Excel相关的ActiveX对象接口操作,加载Microsoft.Office.Interop.Excle。通过以下代码实现BOM信息的输出:
Imports Microsoft.Office.Interop
Dim ExlApp As Excel.Application
Dim ExlBook As Excel.Workbook = Nothing
Dim ExlSheet As Excel.Worksheet = Nothing
Dim i, j As Integer
ExlApp = CreateObject("Excel.Application")
ExlBook = ExlApp.Workbooks.Open("F:\AutoCAD_BOM_模板.xlsx") '开启模板
ExlSheet = ExlBook.Worksheets(1)
N = Int(txtTotN.Text) '获取BOM总行数信息
For i = 0 To N - 1
For j = 0 To 7
ExlSheet.Cells(i + 1, j + 1) = xls_Table(i, j) '对Excel写入BOM信息
Next
Next
ExlBook.SaveAs("F:\AutoCAD_BOM.xlsx") '保存已导出BOM信息的Excel文件
ExlSheet = Nothing
ExlBook.Close()
ExlBook = Nothing
ExlApp.Quit()
ExlApp = Nothing
结果展示如下图:
3 结束语
通过上述步骤,便可将AutoCAD文档中的BOM导出到Excel中。使得客户能够方便、快速地获取到旧有数据相关产品信息,实现了对客户旧有数据的有效维护。
HTML地图 XML地图 网站地图 使用条款 预防盗版 隐私政策 许可协议 | ||
版权所有:上海群思信息技术有限公司 京ICP备09102030号-2 京公网安备 11010802028966号 | ||
邮箱:marketing@yidasf.com 微信:yidasf001分享按钮 |