2.2 自动调整圆角
目前CAD软件在处理圆角过程中,只能逐个选择圆角,操作复杂繁琐,为了方便用户操作,增强功能的易用性,需要软件能够按照圆角尺寸、凹凸性等条件自动检索识别出来,同时为了方便管理圆角面,需归类识别出所有圆角面,最大化满足用户的使用要求。
此外,由于型面数据的精度问题,不能完全保证识别出所有的圆角面,还需要对不能自动识别的圆角进行分割处理,如图3所示,使其大部分面变成规则圆角面,便于后续提高圆角调整的成功率。通过自动批量处理的方法,实现快速的调整圆角,提高圆角的处理效率,同时也要提供多种应用方法来满足不同场景的圆角。
图3 圆角分割示意图
因此,在自动调整圆角部分需提供以下三个命令:
(1)圆角检索
把曲面中符合条件的圆角面检索出来,圆角检索流程如图4所示,根据面的UV方向计算距离是否在允许公差范围内,判断识别是否是圆角面。从需求实现角度来看,主要实现以下功能:
检索对象:把指定面作为检索对象,检索出面中所有的圆角面。
检索设置:检索一定半径范围内的所有凸或凹圆角面。
颜色和图层设置:检索出的圆角面指定颜色和分配图层。
图4 检索圆角面流程
圆角检索命令中检索曲面上所有单个面的关键算法代码如下:
stat=TiInqComFac(&idCom1,&numfac1,&faceidP);
if (stat != 0){
goto rtn;}
stat=TiInqComFac(&idCom2,&numfac2,&faceidP);
if (stat != 0){
goto rtn;}
(2)圆角分割
把曲面中不规则的圆角面分割为规则和不规则的圆角面,不规则的圆角面将不能再被分割,主要实现功能:根据面的几何拓扑关系,自动分割圆角面。
圆角分割命令中的面分割关键算法部分代码如下:
if (m_SetDivSEve != ITEM_SEVE_VALUE) {
m_cmbSetDiv.SetCurSel(m_SetDivSEve);}
{return m_cmbSetDiv.GetCurSel();}
if (nDivide == 1) {
DivideFillet(&tmpFltInf,divComFlt,divFacFlt); }
(3)圆角减小
参照圆角周围面的延长面,根据减小的圆角半径值,重新创建圆角面,实现圆角的减小处理,主要实现以下功能:
调整方式:提供按比例缩小、指定半径值、指定减小值三种调整方式,可自定义相关参数。
颜色和图层设置:减小的圆角面指定颜色和分配图层。
圆角分割:针对不规则的圆角,增加自动分割圆角处理功能。
圆角减小命令中逐个圆角循环处理的关键算法代码如下:
while (pos != NULL) {
if (!UpdateProgress(++nLoop)) {
break; }
if (nMode == D4OPT2 || fltRadInf.FltType == FIXEDRAD) {
bRet = ReduceGradualRadius(&fltInf, nMode, dValue, nDivide, newFltidAry);
} else{
continue; }}