基于C#的AutoCAD二次开发技术在联轴器参数化绘图中的应用

2017-12-07 12:36侯杰
数字技术与应用 2017年9期
关键词:联轴器二次开发

侯杰

摘要:目前机械设计行业联轴器型号各异,尺寸不同,导致在变更设计时带来重复性劳动,使得设计周期长,效率低。通过在VS2010环境中应用C#对AutoCAD二次开发,实现参数化绘制联轴器平面图,为从事联轴器设计相关人员提供方便,节省几何建模时间。本文以GYS4型有对中榫凸缘联轴器为例,联合COM接口和.NET接口进行混合编程设计,最终实现了自动生成符合选择预定参数的联轴器平面图。

关键词:二次开发;AutoCAD;联轴器

中图分类号:TP391.72 文献标识码:A 文章编号:1007-9416(2017)09-0084-02

传统绘图中的某一图元对象几何尺寸修改导致此对象的相关图元几何参数都需要修改。联轴器作为系列产品之一,同一类型联轴器除了尺寸大小不同外,结构形状均一致。若对系列产品采用传统的交互式制图,导致设计人员工作量繁多,开发周期长。为解决上述问题,本文开发了基于C#实现AutoCAD二次开发的参数化绘图功能。应用参数化思想设计了内嵌于AutoCAD中的交互界面,并以GYS4型有对中榫凸缘联轴器为例,根据图元类型,结合其图层,线型等属性编写函数程序。该程序能够自动生成符合选择预定参数的联轴器平面图,简化了联轴器图绘制过程,缩短了设计周期。

1 对AutoCAD二次开发的概述

利用C#对AutoCAD二次开发是基于ActiveX Automation接口自动化对象模型和C#的结合,用户能够从 AutoCAD内部或外部以编程方式来操作AutoCAD,通过将其对象显示到“外部世界”,被显示的对象可由许多不同的编程语言和环境以及其他应用程序访问,通过控制这些对象的属性,方法从而实现对AutoCAD的程序化操作[1]。

1.1 Visual Studio 2010开发环境配置

在利用ActiveX Automation(COM)接口对AutoCAD 开发之前,要在VS2010中引用AutoCAD对象库。实施步骤:1.启动VS,新建项目。2.在解决方案资源管理器中添加引用“AutoCAD 2010 Type Libray”和“acax18enu.tle”两个DLL。

1.2 C#与AutoCAD软件的连接

在VS2010开发环境下C#与AutoCAD的连接方法为:先将程序集和命名空间添加到程序;然后编写启动AutoCAD对象函数,在程序启动代码时调用该函数,实现程序与AutoCAD软件的连接。代码示例如下:

private void 启动CAD()

{

AcadApplication AcadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");

AcadDocument AcadDocc = AcadApp.ActiveDocument;

}

2 联轴器参数化绘图程序设计思路

联轴器参数化绘图的整体思路是:在对联轴器零件外形尺寸参数化基础上将其平面图创建所关联的图元对象的参数关系对应到程序中各个图元对象,程序执行时,通过用户在界面输入不同的参数,使这些参数与程序中的各个图元对象的属性、方法中的参数对应,然后根据零件类别驱动生成相应的图形。

3 联轴器参数化绘图具体设计实例

3.1 参数界面设计

用户自定义窗体界面是直接呈現于设计者面前的部分,是计算机编程语言变成直观操作界面,并与用户形成良好交流的媒介[2]。通过VS平台在新建的类库中添加“Windows窗体”,设计者创建交互界面。将自定义窗体界面嵌入AutoCAD可采用.NET平台开发非模态对话框。作为活动焦点对话框,程序焦点可以在窗体界面和AutoCAD界面之间自由切换。定义的Class1类中部分代码为:

[CommandMethod("coupler")]

public void Dialog()

{

MyForm form= new MyForm (); //弹出自定义窗体界面

form.ShowInTaskbar = false;

Autodesk.AutoCAD.ApplicationServices.Application.Dialog(form);

}

3.2 联轴器二维图的参数化创建

3.2.1 联轴器基本参数的确定

GYS4 型有对中榫凸缘联轴器轴孔长度L有62,82mm,分别对应的轴孔直径d1,d2有25,28,30和,32,35mm。以变量L为例,代码中表示为:

Public int L;

根据图1对程序中轴颈常量D属性返回常量105,

Public int D { get{ return 105;}}

同理对常量D1、b、b1、S、w赋值55、32、48、6、2。

3.2.2 基本图元对象的绘制

基本图元对象绘制是对AcadModelSpace数据库中的图元对象本身包含的方法和属性进行操作,完成直线,圆等创建,并绘制出联轴器的平面图。在绘制基本图形之前,先创建图纸相关图层,设置其线型,线宽。以本联轴器主视图中心线所在图层为例,列举部分代码如下

AcadLayer Layer1= AcadDoc.Layers.Add(dianhuaxian);

string linetype= "CENTER";endprint

string file = "acad.lin";

AcadDoc.Linetypes.Load(linetype, file);

AcadDoc.ActiveLayer =Layer1 ;

AcadDoc.ActiveLayer.Linetype = "ACAD_IS004W100";

AcadDoc.ActiveLayer.Lineweight=ACAD_LWEIGHT.acLnWt020;

对于圆对象使用AddCircle(Center, Radius)方法完成创建,Center为圆心位置,Radius为半径。以本联轴器的左视图外圆的D创建为例,其中图层和线型,线宽设置与直线创建类似。

左视图正六边形螺栓六角头,其均匀分布在圆周,通过创建轻量多线段AddLightWeightPolyline()方法完成正六边形的绘制,然后使用ArrayPolar(Number, AngleToFill, Point)方法创建环形阵列,其中Number为环形阵列中所要创建的对象数量,AngleToFill为填充角度,Point为指定环形阵列的中心点的坐标。部分代码为:

object boltArray = lw.ArrayPolar(6, 2 * Math.PI, CenterOfCircl)

绘制剖面线对象采用AddHatch()方法,AppendOuterLoop (outerLoop)。前者方法为需要绘制剖面线的区域添加图案填充,后者是向图案填充中附加外边界,其中outerLoop为构成封闭边界的对象数组。

3.3 程序的封装

在完成联轴器图形程序设计后,需要将编译好的程序封装,通过修改注册表信息HKEY_LOCAL_MACHINE下的AutoCAD相应版本下的Application项中创建一个新项并在里面新建相应的键值以完成自动加载开发的DLL程序库[3]。其中新建的四个键值分别为:(1)"DESCRIPTION"(应用程序描述);(2)"LOADCTRLS"(控制程序随CAD加载方式,其值为e);(3) "LOADER"(应用程序的路径);(4)"MANAGED"(程序形式,其值为1,告诉CAD这是托管程序)。設置成功后,在每次启动AutoCAD 2010时会自动加载在注册表中设置的DLL,用户要实现联轴器图形的绘制只需在AutoCAD的命令行中键入程序编写时CommandMethod属性的值。

通过实例来验证程序的可靠性。启动AutoCAD 2010,在命令行键入“coupler”,设置弹出的参数选择对话框轴孔直径25mm,轴孔长度82mm,点击“绘制图形”后在图纸上自动生成联轴器图形见图2。

4 结论与展望

本文提出的基于C#的AutoCAD二次开发技术在联轴器参数化绘图中的应用实现了同一型号不同参数的联轴器平面图智能绘制,这种参数化绘图方法只需选定尺寸参数,就可在该程序驱动下自动完成图形的绘制,大大减少了设计人员重复性操作,使其更专注于设计工作,从而提高工作效率。同时也丰富了AutoCAD原有功能,同时对于完整的联轴器标准库建立具有很高的参考价值。

参考文献

[1]王若惠.基于VBA的 AutoCAD 二次开发及应用实例[J].计算机应用,2007,26(9):30-33.

[2]赵玄子.基于.NET的AutoCAD二次开发—联轴器标准库的建设[D].电子科技大学,2015.

[3]李冠亿.深入浅出AutoCAD.NET二次开发[M].北京:中国建筑工业出版社,2012.endprint

猜你喜欢
联轴器二次开发
一起起重机联轴器断裂事故的警示
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
GⅡCL型齿式联轴器失效分析及改进
高炉主卷扬柱销联轴器的改造
梅花形弹性联轴器的匹配
基于Pro/E二次开发的推土铲参数化模块开发