摘要:模具图纸的尺寸标注是一项费时费力的工作,在标注中通常会出现尺寸线疏密不当,标注不直观,图面繁杂的缺陷。基于这些不足,本文对高效、智能化坐标尺寸自动标注系统进行了研究。着重介绍了该系统智能取点、尺寸线自动生成、防止尺寸线干涉等核心算法,在VC环境下利用ObjectARX进行二次开发的关键技术,以及采用数据链表动态的组织管理图形数据的设计方法。
关键词:坐标尺寸标注;链表;ObjectARX
0 引言
近年来,我国在模具CAD/CAM方面的研究中取得了很大的进展,不少高校和科研单位都相继推出了一些模具CAD/CAM系统,但这些系统往往存在着各种不足,其中之一表现在工程图生成方面。因为模具设计最终提供的是完整的工程图纸,它包括正确的视图关系及完备的尺寸标注,技术要求及零件明细表。以一般的中等复杂的级进模系统为例,其图纸工作量往往在100张以上,需花费的工作时间一般在半个月以上。在现有的CAD/CAM中,设计者花在工程图纸部分的时间远大于模具结构设计的时间,其主要原因是在结构设计中,没有考虑图形标注所需的信息,出图部分很大程度上仍然是计算机上的手工劳动。目前国内外大多数企业仍然把二维工程图纸作为设计、施工、检验的主要依据。根据调研的结果,国内冲压模具使用的大多数是基于三视图的二维工程图的产品输入。因而体现CAD系统优劣的一个重要标志,就是其最终能否灵活、方便、省时地生成使用户满意的二维工程图纸。本文主要针对这些问题进行研究,开发出自动标注为主,人机交互为辅的高效、方便的工程图生成系统。本系统基于坐标尺寸标注的方法,在AutoCAD2000平台上开发出的面向实用化的自动标注模块。
1 系统的组织与实现框图
尺寸标注一般采用传统的相对尺寸标注和坐标尺寸标注两种方法,图1和图2为传统的相对尺寸标注和坐标尺寸标注方法的比较。坐标尺寸标注是将图形中相对于给定参考定位点的所有结点的X、Y坐标值标注出来,用以反映图形中所有实体的几何尺寸大小的一种尺寸标注方法。当前模具行业已经普遍采用坐标尺寸标注的方法,而AutoCAD本身提供的坐标标注功能存在一定的不足,在标注时需手工逐一选择待标注的点,并人工确定尺寸线位置。本系统针对这些缺陷,一次性选取所有待标注的点,然后自动均匀排布所有标注线位置,实现高效、智能化标注。 (图片)
图1 相对尺寸标注 (图片)
图2 坐标尺寸标注 整个系统是在VC环境下采用面向对象的编程技术实现。其坐标尺寸自动生成框图如图3所示。(图片)
图3 坐标尺寸自动生成框图 标注过程中,系统首先要做的就是先对当前图形进行处理,取得当前零件图中所需标注的实体。AutoCAD优异的开放性使得人们可以查询其内部图形数据库,从而得到组成零件图的所有实体的图形定义数据,这些数据指的是直线的两端点坐标,圆/圆弧的半径值,圆弧的初始、终结角度值,多义线(须进一步分成直线和圆弧两种实体数据)等,经过一定的计算取得零件图中所有要标注的结点集;对已取得的结点集进行过滤排序处理。前面所得到的结点集其内部是杂乱无章的,而且存在着大量坐标值相同的点,必须过滤结点集,去除那些冗余点,使得在零件图上的每个结点位置只标注一次。最后自动生成尺寸标注线。
2 系统核心算法
2.1 智能化选取点集(参看图3的各种基本实体)
坐标尺寸标注需要处理大量点的坐标,因此,应选择一种能快速得到所需标注的点集的算法。
(1)调用ARX函数acedSSGet(),提示用户选取需标注的实体对象,使系统返回所有需要标注的对象。根据用户的习惯,设置一个预处理的交互对话框,让其选择字高、颜色、标注方向、是否需要对圆和圆弧段进行自动标注等。
(2)定义一个最初的以链表的形式出现的实体数据点集(包含起始点,中心点),对这些点的X和Y坐标进行排序,得到最初始的Xmax、Xmin、Ymax、Ymin,用以确定标注域的基本范围(根据整体的美观效果一般选择矩形区域)。
(3)调用函数acedSSLength(),获得实体的数目,根据AcRx类提供的函数cast(),把实体分解成圆、弧、线段和多义线四大类。基于规则的过滤掉螺纹线、倒圆角、倒角、切线。下面具体分析:
1)当函数AcDbArc∷cast(pEnt)返回值不为NULL时,生成一个链表形式的圆弧实体数据点集。首先考虑螺纹线的情况,利用扩展数据函数Xdata()对螺纹线进行处理。确定圆弧实体的各种数据点,其方法与上述2中初始链表的定义相同。由于最初形成的标注域只是根据初始链表中的各个实体的属性点比较得到的,而针对圆弧处有其特殊性,除了端点外,圆弧上的有些点可能在已有的标注范围之外,因此就需要比较该圆弧段的矩形区域是否完全被包含在标注域之内,如果没有,则重新定义标注范围,替换掉现有的Xmax、Xmin、Ymax、Ymin。
2)当函数AcDbCircle∷cast(pEnt)返回值不为NULL时,生成圆的实体数据的点集。选取圆心作为标注点来实现对圆的标注,然后比较圆的矩形标注域和已有的标注域,更新标注的范围。
3)当函数AcDbLine∷cast(pEnt)返回值不为NULL时,生成一个直线数据的点集。
4)当函数AcDbPolyline∷cast(pEnt)返回值不为NULL时,生成多义线的点集。将多义线分成直线和圆弧,分别生成直线和圆弧的链表,逐一访问链表得到多义线的属性点,从而进行标注。由于圆弧段的影响,必须考虑可能出现出界的点,因此要利用多义线的边界点与现有标注域进行比较。直线段则不需要考虑“出界”的问题。这样,最后确定了标注所需的标注域大小。
2.2 标注尺寸线的自动生成
当各种点集智能化选出后,就可以定位生成尺寸标注线。坐标尺寸标注所需的定义基准点可以是任意点,亦可以由用户自己定义。若这个点不在所生成的点集中,则将其加进点集中。标注线有三种标准(分为长、中、短),给用户默认的是短的标注线(即从边界点引出的标注线的长度,这是一个定值)。在对话框中给用户定义出四个标注方向(分为上、下、左、右四个方向),其分向算法为:
(1)从智能化选取的点集中得到Xmax、Xmin、Ymax、Ymin。以此设想出一个矩形标注域(标注时不画出),坐标标注线都从这个域引出。这个假想矩形对角线的交点,即为标注域的中心点(Xmid,Ymid)。
(2)考虑到用户的习惯,在点集的分类时,首先分成水平和垂直两个大类。如果用户选择标注只有两个方向,就直接标出,否则就转入(3)和(4)。
(3)将所得到的水平点集中的点与中心点X坐标比较。当X>Xmid时,标注的引线方向朝右,当X
(4)同理,将垂直点集中各点与中心点的Y坐标比较,得出向上和向下的分向。
通过这个算法,我们将已有的各种点集进行最后的点集分类,水平方向分为向左和向右的点集;垂直方向分为向上和向下的点集。以水平点集标注线生成为例说明算法,其它相同。下面是其算法:
(1)从线性点集中取点,动态分配一个空间,定义一个头指针指向第1个结点,使之作为链表的第1项。
(2)取第2个结点的X坐标与第1个结点的X坐标进行比较,如果两点坐标值的差值小于定值(如0 001mm),就可以认为是相同点,则放弃当前结点转到下一结点,否则就添加进水平点集中。
(3)将所取点的坐标值与已有的链表中点的坐标逐一进行比较,排除相近的点。
(4)对点集中的点进行排序,逐一访问链表,当第2项比第一项的坐标值小时则交换位置。表中其余项依次后移,最后生成一无重复项的从小到大的有序链表。
定义一个生成标注线的函数。根据标注的统一标准,设置文本高度、文本与标注线以及文本与标注线端点的间隙值、文本标注方向等标注特性,调用这个函数遍历这些点集中的结点作出尺寸线。顺便强调一下,尺寸线画出后还可以对其位置进行调整。
2.3 防止尺寸线干涉的优化方法
在零件图的尺寸标注中,当两条尺寸线的距离小于字高与间隙值之和时,就会发生干涉。为此,可采取相关的优化方法对其调整:
(1)在链表中逐一取点的同时,将当前标注点的坐标与上一次标注尺寸线的点的坐标值进行比较,如果小于一个字高加文本与尺寸线的间隙值之和,则转入3;否则转入2。
(2)直接标注当前结点,即尺寸线与坐标轴平行,记录标注尺寸线的终结点。
(3)调整标注,使之满足当前标注尺寸线与上一次标注尺寸线的距离大于一个字高与间隙值之和。
2.4 精度及公差设置
一个完整的标注系统除了尺寸线的标注外,还应有公差及精度的设置。为此,提供一个常用的公差模块,让用户自己添加。
由于在智能化取点模块中定义一个点的时候,除了点的基本几何数据外,还同时定义了一个关于精度的辅助数据(一般定为0 001mm),因此在对点进行处理时,就可以同步对精度进行操作。设置一个对话框,让用户自己进行修改,根据其选择,在模块中设置所需的精度。以图2为例,本系统最终生成的标注图如图4所示。(图片)
图4 标注系统最终生成图 3 结论
本系统采用友好的用户界面,可操作性强,用户只需根据需要进行简单的参数选择和输入,便可以完成尺寸的坐标标注。系统稳定可靠,用户在操作过程中,可以根据需要进行参数的自主设置,提高了用户的主动性,满足了不同用户的不同要求。但对一个完整的工程图来说,自动标注除了尺寸线自动标注、公差及精度设置外,还需要标题栏与BOM表的自动生成,将另文撰述。
12/16/2004
|