工艺尺寸链求解的AutoCAD C#二次开发
2021-10-20陈光霞
陈光霞
(江汉大学智能制造学院,湖北 武汉 430056)
0 前言
在设计、制造、装配机械零部件的过程中,工艺尺寸链的计算是不可或缺的,在新产品的研发过程中,其作用更为重要[1]。零件图中所标注的尺寸公差是零件加工最终所需要达到的要求,即设计要求,而工艺过程中的许多中间工序的尺寸公差,是在机械加工工艺规程设计中通过计算工艺尺寸链才能确定的[2]。传统工艺尺寸链的计算是由设计人员确定工艺尺寸链以及尺寸链中的各组成环的类别,再利用相差计算公式计算各组成环的基本尺寸及公差,此方法效率比较低且容易产生差错,导致设计错误。
AutoCAD软件是二维设计图绘制的常用软件,其功能强大,使用方便,是目前机械设计中常用的计算机辅助软件,它提供了强大的二次开发功能,如AutoLisp、ObjectARX、VBA以及C#都可对AutoCAD进行二次开发,其中C#是利用.NET环境进行二次开发的方式之一,其开发周期短、开发便捷[3],是目前较为常用的开发方式之一。
本文利用C#语言及.NET Framework组件开发了一个可以在AutoCAD环境下绘制被加工零件简图,并在其上标注工艺尺寸,形成工艺尺寸链,用户只需要选择其中的一个尺寸作为封闭环,即可自动对图中尺寸进行遍历,自动搜索尺寸,查找工艺尺寸链,最后计算出未知尺寸的基本尺寸及其公差。
1 程序实现的方法
程序实现功能的基本思路如下:
利用AutoCAD软件绘制加工零件简图,并标注相应的工艺尺寸,待求尺寸链中的环为A,如图1所示。其实现思路流程如图2所示。
图1 零件简图
图2 功能实现流程图
2 程序功能实现的关键技术
2.1 尺寸数据的获取
在AutoCAD中尺寸数据是存储在其图形数据库(Database)中,要完成尺寸链的计算必须首先获取图中所标注尺寸的数据。读取尺寸数据的步骤如下:
(1)获取当前图形文档。
Document doc=Application.DocumentManager.MdiActiveDocument
(2)获取当前工作图形数据库。
Database acCurDb=HostApplicationServices.WorkingDatabase
(3)建立当前图形数据库事务。
Transaction acTrans=acCurDb.TransactionManager.StartTransaction()
以只读方式打开当前图形数据块表记录
遍历块表记录,当实体为尺寸实体时,读取其数据存入尺寸数据数组中。
为了存储尺寸数据建立如下所示的尺寸数据结构:
public struct Dimdata
{
public string DimType;//尺寸类型
public string LoopType { get;set;}//环类型
public Point3d StartPt;//第一尺寸界线起点坐标
public Point3d EndPt;//第二尺寸界线起点坐标
public double DimVal { get;set;}//基本尺寸
public double DimTpval { get;set;}//尺寸上偏差
public double DimTmval { get;set;}//尺寸下偏差
public Point3d CenterPt;//径向尺寸圆心坐标
public ObjectId DimObjid;//尺寸实体的ID
public bool Flag;//使用标志
}。
并建立结构数组来保存尺寸相关数据。
2.2 尺寸链形成及增减环的自动判断
本文以水平尺寸链为例,如图3所示:首先判断封闭环2个尺寸界线起点的X坐标的大小,将X坐标小的作为第二尺寸界线起点(如A0为封闭环,左边为第二尺寸界线起点);然后搜索尺寸链的其它尺寸,若某个尺寸的尺寸界线起点的X坐标等于封闭环第二尺寸界线起点的X坐标(如图3所示A2的左边起点),则此尺寸为尺寸链的下一环,并将此尺寸界线起点作为A2的第一尺寸界线起点,另一个尺寸界线的起点作为第二尺寸界线的起点;第三步再判断A2的2个尺寸界线起点的X坐标大小,当第二尺寸界线起点的X坐标大于第一尺寸界线起点的X坐标,则此尺寸为增环,反之为减环(A2为增环);再以A2的第二尺寸界线起点的X坐标去搜索,当下一个尺寸的2个尺寸界线起点中有一个点的X坐标与A2的第二尺寸界线起点相等,则为尺寸链的下一环,如图3的A1,同样的方法,再判断A1两个尺寸界线起点X坐标的大小关系,从而判断其增减性。
图3 尺寸链增减环判断
如果尺寸链为垂直尺寸链,则以尺寸的尺寸界线起点坐标的Y坐标作为判断依据。如果是平面尺寸链,则以尺寸界线起点的X、Y坐标作为判断依据。
2.3 直径尺寸的处理
在工艺尺寸链的计算过程中,对直径尺寸的处理方法是基本尺寸取一半,公差也取一半作为尺寸链中的一个环。如图4中的19.8及20两个尺寸。本文以水平尺寸链为例说明其处理方法。
图4 直径尺寸的处理
当尺寸实体的类型为“AcDbDiametricDimension”或为“AcDbRotatedDimension”但其替代文本中含有“%%C”字符串时,都是直径尺寸,如果是“AcDbDiametricDimension”类型,则将尺寸线变换为水平后,求出2个尺寸界线的起点坐标,存入数组中。当一个直径的2个尺寸界线起点中有一个与现有尺寸中的尺寸界线起点坐标相同,如尺寸Φ40的左尺寸界线起点与43.6的左尺寸界线起点相同,则它的另一个尺寸界线起点用圆心坐标替代,基本尺寸及上下偏差均取半。
3 结论
图1所示的工艺尺寸链计算结果如图5所示。
图5 工艺尺寸链计算结果图
利用C#进行工艺尺寸链的自动计算,开发方法简单,可以有效地减轻计算工作量和避免计算错误,有利用于提高工艺规程设计的工作效率。