康忠元,陈罗凤
(重庆市农业机械化学校,重庆 402160)
客运索道作为景区必备人力辅助机械系统,其设计过程的周期影响景区的高效运行,而客运索道的立柱作为索道关键承载部件,其外形较为复杂,绘制二维图纸时,因尺寸参数繁多,所以需要大量的尺寸标注和形位公差。此外,立柱与基座相连部分的加强筋、螺栓众多,且需要根据地势变化分段设计,各分段连接处也存在大量的加强筋、螺栓。由于加强筋、螺栓尺寸较小,传统的依据坐标点连成线的绘图方式,不仅使设计绘图变得异常繁琐,而且不便于修改,设计过程的冗余致使后期生产、安装工期加长,因此,客运索道立柱参数化绘图系统旨在减少设计人员较多的机械、重复操作,有效降低立柱前期设计工时,促使设计人员将主要的精力投入到立柱结构设计上。采用该系统后,用户只需给定立柱特征尺寸参数,系统就可以自动完成立柱二维计算机辅助设计 (Computer Aided Design,CAD)图纸的绘制,从而达到高效、准确绘图的目的,该系统将大量、复杂的操作进行有效的封装,设计人员只需根据设计意图调用即可。
该系统基于Visual Studio 2012(最流行的Windows平台应用程序开发环境),根据客运索道立柱的尺寸以及尺寸要素之间的关联,提取出特征参数,把大量、复杂、重复的绘图操作进行有效的封装,将其中标准螺栓制作成块,封装在系统内,用户只需设计原始尺寸参数,根据设计需要进入不同视图绘制功能界面,输入相应的特征参数,点击绘图、填充、标注按钮,即可获得索道立柱二维CAD图纸,所获图纸无需做任何补充或更改,可直接交于生产车间加工。该系统主要功能包括视图绘制、填充、标注、标题栏四大板块,系统结构流程简图见第53页图1。
绘图系统的成功建立关键在于C#语言与Auto-CAD的有效连接[1-2],通过一系列C#编程驱动AutoCAD作出绘图动作,为了确保高效率的绘图操作,在此通过一系列函数将绘图命令封装于设计类库中,设计人员只需引用相关函数命令,即可快速绘制图形。该绘图系统的建立可实现基本图形的绘制、标注,包括线型图层的设置、各种实体对象的绘制、各种对象的标注等,由于基本的绘图命令函数 (直线、圆弧、倒角等)封装在同一类下,用户可直接调用相应函数名,输入构造参数进行相关图形的绘制。为了在同一地址空间运行并能直接利用AutoCAD核心数据库以及类库,首先需要引用相应的AutoCAD命名空间,引用如下。
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Interop;
数据库可以通过定义如下代码获得:
Document acDoc=Application.DocumentManager.MdiActiveDocument;
Database acCurDb=acDoc.Database;
图1 索道立柱参数化绘图系统流程结构图
在模型空间中需要创建AutoCAD各种实体对象,从简单的直线和圆到样条曲线、椭圆和关联填充区域等等。通常引用AppendEntity()函数将相应的对象添加到BlockTableRecord(块表记录)对象。在创建一个对象后,可通过修改其相应的系统变量来改变对象的图层、颜色和线型等属性,而各种对象的线型、颜色、线宽等属性,可通过指定相应的命名图层来实现。以下列举绘制直线对象的具体代码。
acCurDb.Clayer=acLyrTbl[sLayerName1];//设置当前图层
Point3d P0=new Point3d(x1,y1,0);//直线端点
Point3d P1=new Point3d(x2,y2,0);//直线端点
lins.Add(new Line(P0,P1));//调用直线函数,连接P0,P1点构成直线
foreach(Line line in lins)//依次循环每一个,遍历CAD块表中的所有对象
{btr.AppendEntity(line);//加载直线
acTrans.AddNewlyCreatedDBObject(line,true);//添加对象到数据库中
}
几何尺寸所表示的是对象的几何测量、对象间距离或角度,亦或是一个功能属性的具体平面坐标等。AutoCAD提供了3种基本尺寸标注类型:线性标注linear、径向标注radial和角度标注angular,线性标注又分对齐标注aligned、旋转标注rotated和坐标标注ordinate 3种。以线性尺寸的标注实现为例,演示具体功能代码创建过程如下。
RotatedDimension acRotDim=new RotatedDimension();//新建标注对象
acRotDim.XLine1Point=new Point3d(0,0,0);//指定标注起点
acRotDim.XLine2Point=new Point3d(7,4,0);//指定标注端点
acRotDim.Rotation=0.707;//指定角度
acRotDim.DimLinePoint=new Point3d(0,5,0);//指定尺寸数字位置
acRotDim.DimensionStyle=acCurDb.Dimstyle;
通过创建Aligned Dimension对象和Rotated Dimension对象的实例来创建线性标注。创建线性标注实例后,可以修改文字、文字倾斜角度、尺寸线的角度。也可以通过属性选项来设定尺寸界线原点、尺寸线位置、标注文字以及应用的标注样式等属性。倘若没有给Aligned Dimension对象和Rotated Dimension对象的构造函数传递任何参数,那么对象就会使用默认属性值。
形位公差所显示的是一个功能特征的形式、轮廓、方向、位置和跳动等偏差。在AutoCAD中使用的是FeatureControlFrame对象实例来创建形位公差。FeatureControlFrame对象的构造函数需要输入:公差符号的文本串 (Text)、插入点 (Location)、法向矢量 (Normal)、方向矢量 (Direction)4个属性。具体功能代码创建过程如下。
FeatureControlFrame acFcf=new FeatureControl-Frame();//新建形位公差标注
acFcf.Text="{\Fgdt;j}%%v{\Fgdt;n}0.001%%v%%v%%v%%v";//指定文字
acFcf.Location=new Point3d(5,7,0);//指定插入点
当然也可以通过更改形位公差的系统变量和属性来控制标注的质量,形位公差的系统变量主要包含DIMCLRD(控制特征控制框的颜色)、DIMCLRT(控制公差文字的颜色)、DIMGAP(控制特征控制框与文本之间的间距)、DIMTXT(控制公差文字的字号大小)、DIMTXTSTY(控制公差文字的文字样式)5个,通过引用相应属性参数,即可完成参数设定。
各种表达视图绘制、标注、填充完毕以后,需向图形中添加各种类型文字,文字对象可以用于标题栏、标注图形部件、技术要求或者注释等。AutoCAD提供了两种文字创建方式:单行文字和多行文字,前者适用于短小简单的实体的描述,后者则多用于内部格式较长的实体。在AutoCAD中创建各种文字样式的流程主要包括:首先,新建TextStyleTableRecord对象的一个实例,用Name属性给新文字样式命名;其次,以写方式打开TextStyleTable对象,用Add方法将新创建文字样式添加到文字样式表中;最后,编辑文字属性,包括字高、角度、内容以及文字位置等。具体属性编辑功能代码如下。
DBText acText=new DBText();//创建单行文字
acText.Position=new Point3d(1,2,0);//创建文字插入位置
acText.Height=0.7;//指定字高
acText.TextString="";//指定文字内容
acText.Oblique=0.707;//指定文字倾斜角度
基于前述实体对象、标注的创建方法,提取索道立柱特征参数。针对立柱尺寸参数之间的特征关系,提取立柱直径、立柱长、基座直径、基座变截面长度以及柱壁厚度作为特征参数,根据实际使用工况计算出相应立柱承载参数后,即可利用绘图系统绘制出立柱二维CAD图纸 (见图2),其中基座加强筋个数由系统根据基座直径自动分配布置。
图2 立柱示意图
基于Visual Studio 2012,采用面向对象开发的方法,利用C#与AutoCAD核心数据库的无缝对接,将各类绘图函数进行封装[3],根据设计参数调用不同函数即可完成设计出图,有效地缩短了设计周期。但本系统仅局限于二维图纸的绘制,并未涉及立柱三维参数化造型与立柱结构的参数化优化,这也是笔者今后重点研究的领域。