彭林山
(成都建筑材料工业设计研究院有限公司,成都市 610051)
Autodesk公司旗下的产品AutoCAD软件已经成为各个行业广大设计者最为常用的设计工具。对于不同行业领域的设计者,除了应用AutoCAD本身所具有的功能,还需要针对自己的设计需要开发更多的功能来提高设计工作的效率,这就需要对AutoCAD进行二次开发。目前,针对某个行业,应用AutoCAD二次开发的实例已经有很多了。在水泥厂设计中,存在着大量非标准件的设计,本文针对非标准件设计的具有数量大、重复性和规律性强等特点,进行了AutoCAD的二次开发,提高了非标准件设计效率。
在Visual Studio 2012开发环境中,利用AutoCAD软件的ActiveX®(COM自动化)技术,使用Visual Basic.net编程语言对AutoCAD2013进行二次开发。Visual Studio 2012作为一个集成解决方案,适用于个人或者各种规模的开发团队,可以进行良好的数据封装,以更好的方式进行面向对象的程序设计,同时也能更好的和其他应用程序进行数据交换[1]。
AutoCAD软件的ActiveX®技术将AutoCAD中的对象暴露出来,使得编程环境可以访问到AutoCAD的对象,通过对象的属性、方法和事件来实现我们想要的功能。AutoCAD软件的ActiveX®技术提供了许多可以访问的对象,这些对象分为图像对象(例如:直线,圆弧,文本,尺寸标注等)和样式设置对象(例如:线型和尺寸标注样式等)等,甚至AutoCAD应用程序也可以看做是一个对象,这些对象具有一定的层次和隶属关系,我们在编程过程中都可以访问得到。
在水泥厂建设工程设计中,非标准件的设计是一项繁复的设计工作,很多非标准件的法兰接口在外形上都十分相似,只是尺寸大小不同,螺栓孔数量不同而已。本文通过AutoCAD的二次开发,只是输入法兰的相关尺寸,就可以自动绘制出相应的法兰,从而提高设计效率,这种类似于参数化设计。程序开发过程大致介绍如下。
在Visual Studio 2012开发环境中,新建一个VB类库的项目(.dll),添加相应的应用(AcCoreMgd.dll、AcDbMgd.dll、AcMgd.dll、Autodesk.AutoCAD.Interop.dll 和Autodesk.AutoCAD.Interop.Common.dll,在AutoCAD安装目录都可以找到)。为了简化AutoCAD设计的界面,这里设计了个用户控件定义为AutoCAD的内部窗口(palette),作为用户输入尺寸的界面,界面设计如图1。
图1 用户控件界面
实现代码如下:
其中“方和圆的法兰”是用户控件对象的名称,语句mypaletteset.Add("palette1", mypalette)将用户对象添加为AutoCAD的内部窗口。用文本框对象相关输入法兰的尺寸。两个名称为“比例”的下拉菜单可以选择绘制法兰的比例(1∶100,1∶50,1∶40,1∶20,1∶10和1∶5可供选择),“标注样式”下拉菜单可以选择当前活动AutoCAD程序中的已有的标注样式,比例的选择与标注样式要相对应。以下代码实现了将当前活动AutoCAD程序中的已有的标注样式添加到“标注样式”下拉菜单中。
直线和线型标注的绘制以方形法兰右边的中心线的绘制为例。代码如下∶
其中lineobj为直线对象,lineobj.Layer = "center"设置直线的图层为 “center”,改图层应该先在AutoCAD中创建。用AddDimAligned方法添加名称为mydimension 的线型标注对象。mydimension.StyleName = ComboBox2.SelectedItem.ToString将“标注样式”下拉菜单中所择的标注样式赋值给mydimension 标注对象的StyleName属性,从而可以灵活创建不同标注样式的尺寸标注。
圆和直径标注的绘制大致与直线和线型标注的绘制大致相同,圆形法兰的螺栓孔的绘制可以用ArrayPolar方法生成圆周阵列来绘制。
在输入相关尺寸,选择了比例和标注样式后,单击确定按钮,提示用户输入插入点,用户只需要在模型空间中想要绘制法兰的位置单击鼠标即可,实现代码如下:
ctr = ThisDrawing.ActiveDocument.Utility.GetPoint(, vbCrLf + "输入插入点:")
ctr为双精度型一维数组,存储插入点的三维坐标。
程序编写调试完成后,生成dll程序集,在AutoCAD中输入netload加载该程序集,加载成功后,输入palette即出现图1所示的面板,输入相关尺寸、比例和标注样式,单击确定按钮,输入插入点,即绘出了相应的法兰,最后根据图纸布局调整标注的位置即可。该程序较以前的其他作者编写的程序相比,用该程序绘制出的法兰几乎不用做任何的修改而且准确,可直接打印出图,再者,该程序启动和关闭非常方便,界面友好,通俗易懂。
目前,在编制图纸目录时,都是从AutoCAD里复制非标准件名称和重量,再粘贴到Excel表格里,如果遇到非标准件多的时候,这个将是非常消耗时间的工作,而且是机械性重复复制粘贴命令。现在利用Excel的COM接口可以和AutoCAD进行混合编程,只需要在AutoCAD中反复选择各个非标准件的名称和重量,自动在Excel表格生成。编写以下过程来获得Excel对象。
其中myExcel为全局变量,类型为Object,以上过程运行后,如不出现错误,myExcel就为Excel对象了。myExcel.Workbooks.Add添加Excel的工作簿。用GetString和GetEntity方法来得到用户输入的信息,赋值给当前活动表格中的单元格。程序也编写了处理输入错误的方法。
当选择完所有的非标准件的名称和重量后可以按Esc键退出。退出后弹出Excel界面如图。这样就可以很方便的复制粘贴到设备表中。需要说明的是,非标准件的名称过长的话,应该在AutoCAD中改为多行文本。
运行截图见图2:
图2 程序运行截图
通过AutoCAD的二次开发,可以满足设计人员特定的绘图需要,从而可以大大提高设计效率。本文仅介绍了两个简单的功能,在工程设计过程中还有很多重复绘图的过程可以通过AutoCAD的二次开发来提高设计效率,本文仅列举了简单的法兰及材料表的绘制作为例证,非标件的绘制都可以通过本方法进行过程简化,实现了非标件的规范高效设计。
[1]凌咏红,黄小微.基于C#的AutoCAD二次开发在建筑工程中的应用 [J].中国科技论文在线.1999(04).