基于C#二次开发AutoCAD 在汽车制造装备行业中的应用
2022-01-17付腊梅李永刚于海洋邢向宇张怀礼
付腊梅,曹 伟,李永刚,于海洋,张 涛,邢向宇,张怀礼
(国机铸锻机械有限公司,山东 济南 250306)
随着计算机技术的迅猛发展,计算机辅助设计已经广泛应用于各行各业中,在工程设计越来越自动化的今天,通过AutoCAD 二次开发技术,可以实现图形内的数据处理和算法优化,在数控操作中,将CAD 图形转化为数控系统可识别的NC 程序,大大减少了操作员的工作量。
AutoCAD 二次开发工具主要有:
(1)AutoLISP:简单易学,但程序运行速度慢,缺乏保护机制;
(2)ADS:代码冗余,一般不选择该方式;
(3)Visual LISP;
(4)objectARX:功能强大,编程效率高,但必须使用C++来开发,相对较难;
(5)ActiveX:VB 语言和C#;由于VB 语言相对落后,语法啰嗦,与当下流行的语言差别比较大。
所以选择C#来进行二次开发AutoCAD。
1 AutoCAD ActiveX
ActiveXAutomation 是微软公司推出的一个技术标准,该技术是OLE 技术的进一步扩展,其作用是在Windows 系统的统一管理下协调不同的应用程序,允许应用程序之间相互控制、相互调用[2]。
AutoCADActiveX 可以使编程者通过编程手段从AutoCAD 的内部或外部来操纵AutoCAD。ActiveX 是由一系列的对象,按一定的层次组成的一种对象结构,每一个对象代表了AutoCAD 中一个明确的功能,如绘制图形对象、定义块和属性等[2]。ActiveX 具有大部分AutoCAD 的功能,以方法或属性的存在封装在库中,使用时只需调用对应的方法或对象属性即可实现对AutoCAD 的操作,从而达到二次开发的目的。
2 设计实例
2.1 流程图
程序设计流程图如图1 所示。
图1 设计流程图
2.2 应用程序
在设计程序前,需要安装Visual studio 2012 和AutoCAD2014。在Visual studio.net 中新建一个标准应用程序,首先需要在应用程序中新增引用,引用Auto-CAD 的类,acdbmgd.dll,acmgd.dll,accoremgd.dll 等。这些类将提供如下操作的控件,在头文件中添加命名空间:①Autodesk.AutoCAD.EditorInput——与用户交互有关的类;②Autodesk.AutoCAD.ApplicationServices——用来定义和注册新的AutoCAD 命令;③Autodesk.AutoCAD.Runtime——提供了系统级别的功能;④Autodesk.AutoCAD.DatabaseServices——database类;⑤Autodesk.AutoCAD.Geometry——point3d 的命名空间。
2.2.1 设置窗体
引用和控件都加载完成后,需要创建窗体、类,窗体主要有“主窗体”,“板材”,“模具”,“配刀”,主窗体如图2 所示,板材窗体如图3 所示。
图2 主窗体
图3 板材窗体
2.2.2 画板材
在AutoCAD 中画板材和形成框,用两种不同颜色的线来区分。AutoCAD 图形数据库包含有表和记录,一个数据库包含9 个符号表(块表、层表、文字样式表、线型表、视图表、UCS 表、视口表、注册应用程序表、标注样式表)。记录是表的单元。要创建一个图形对象,①需要得到创建对象的图形数据库;②需要在内存中创建实体类的一个对象;③打开图形数据库的块表;④打开存储实体的块表记录;⑤将该对象添加到块表记录中。
部分代码如下:
2.2.3 模具
首先把模具信息逐行从txt 文件中读出来,放入数组;C# 中通过streamReader 类读取文本wenda 读取模具文件的信息,刀具类型、刀具号、刀具尺寸等信息,如下示例:
块和属性在AutoCAD 绘图操作中是提高绘图效率的重要手段,为了在后面配刀和优化提高效率,在读取模具的时候就同时创建对应刀具的块,到时候直接调用就可以。创建块首先创建一个Block-TableRecord 对象并设置块的名称;其次利用Transaction 类的GetObject()函数获得当前图形的块表对象;第三、创建组成块的实体对象;第四、调用Block-TableRecord 类的成员函数AppendEntity 将组成块的实体写入块表记录中;]第五、调用BlockTable 类的Add 函数将创建的块表记录写当前图形的块表中[3]。如下示例:
2.2.4 配刀
配刀首先需要获取孔的选择集并放入数组中,根据直径大小将合适的刀具号依次放入对应的数组中,同时在AutoCAD 图形中找到对应孔的圆心做标志,方便手动修改刀具号,同时知道哪些配刀成功,哪些没有成功。这里需要用到的知识点就是获取选择集,将之前画好的刀具块放到对应的图形。选择集调用通过调用Editor 类的GetSelection 及SelectImplied 类来实现。如图4 所示,红色的为配刀成功的孔。
图4 配刀示意图
2.2.5 优化
这是非常关键的环节,一般一个加工图形中会有上百甚至几百个孔,怎么排序显得特别重要,所以这里就需要根据机械设备,加工方法以及产品尺寸来确定优化算法,这里用距离比较法,及把前边获取的孔数据放入对应数组,然后循环遍历数组,逐一比较它们之间的距离,按从小到大排序,这样就把要加工的孔按由近及远放入一个新的数组,同时达到了我们优化路径的目的,部分代码如下:
2.2.6 导出NC 程序
根据优化排序拼接NC 加工程序并导出到文本中,如图6 所示。
图6 NC 加工程序示例
3 结论
通过AutoCAD 二次开发技术,可以实现复杂图形的设计,以及图形内的数据处理和算法优化,在数控操作中,将CAD 图形转化为数控系统可识别的NC 程序,减少了操作员的工作量。通过不断的优化算法、优化路径,大大提高了车间的加工效率,节省人力成本,起到了明显的节能降耗作用。