基于NX二次开发的特征识别与提取

2021-07-29 14:04长春理工大学机电工程学院
电子世界 2021年13期
关键词:小图库中二次开发

长春理工大学机电工程学院 于 洋

本文论述了NX二次开发的方法,开发了与NX界面一体化的特征识别与提取功能模块。通过调用NX Open API函数,实现了箱体零件模型中几何信息的获取;预先建立自定义的加工特征映射库,引入解决子图同构问题的VF2算法,实现了箱体零件模型中特征的识别与提取。最后,通过实例验证了此功能模块的有效性。

CAPP是利用计算机的数值计算、逻辑判断和推理等功能来制定零件机械加工工艺过程的一种技术。零件机械加工工艺的研究主要是通过零件设计模型,运用特征识别技术自动识别零件待加工特征,结合加工特征抑制技术得到零件工序模型,然后通过必要的人机交互完成工艺路线、工艺规程的编制,最后输出零件三维工艺卡片及对应的NC代码。采用软件对零件进行工艺分析与决策的过程中,最核心的技术难题是确定加工特征和读取加工特征的属性,而现行的工艺设计过程又无法有效地和商业三维CAD软件无缝集成。基于此,对NX软件进行二次开发,以箱体零件为研究对象,将自己定制的特征识别与提取功能模块与NX界面融成一体,运用基于子图同构的特征匹配技术,使工艺设计人员参与程度大大降低,系统的运行效率显著提高。

1 NX二次开发技术

本文运行平台为Windows 10,开发平台为NX 10.0,与NX 10.0集成的开发平台为Visual Studio 2017。主要应用NX工具包中的NX Open MenuScript创建用户自己的菜单及工具条,NX Open Block UI Styler用来开发NX对话框,NX Open API是NX与外部应用程序之间的接口,并提供一系列函数的集合,有助于实现所要开发的功能。

2 基于子图同构的特征识别技术

2.1 基于子图同构的特征匹配

构造三维实体模型的属性化面邻接图,主要考虑的几何元素是面和面与面相交构成的边,将图定义为,其中V表示模型中面的集合,E表示模型中边的集合,p为面的属性集合,即面的类型:平面,柱面,锥面等;q为边的属性集合,包括边的类型及凹凸性,边的类型包括线性,圆弧,椭圆等。

箱体设计模型中的几何元素具有无向性,可以抽象为无向图,所以子图同构算法适用于解决几何拓扑匹配问题。把输入模型作为大图,把加工特征映射库中的每个加工特征作为小图,特征识别问题即转化为在大图中寻找存在哪些小图的过程。

解决子图同构问题的常用算法有Ullmann算法与VF2算法,当节点数目相同时,在时间复杂度和空间复杂度方面VF2算法更具优势。VF2算法的目标是,给定小图Gq和大图Gt,找出在Gt中所有与Gq同构的子图。在查询过程中,引入中间状态s,用来存储Gt与Gq成功匹配的节点对P(s),从Gq的任意节点出发,在Gt中寻找到与之匹配的节点后,继续在其邻居节点进行扩展匹配,直到s中包含所有Gq中的节点时,则说明在Gt中找到了一个与Gq同构的子图。

2.2 加工特征映射库的建立

运用VF2算法寻找匹配点对,在开始寻找时是随机的,为了提高匹配效率,对大图中不存在的小图特征尽早舍弃,减少多余的空间搜索,降低时间复杂度,因此将小图中第一个参加匹配的节点进行人为规定,并命名为源节点。源节点就是小图中比较特殊的节点,即比较特殊的面:非平面属性的面,含有内环数最多的面,有最多邻接边的面,组成该面的边的凹凸转换数量最多的面。

由于自定义的加工特征映射库并不能完全包括所有待识别零件模型的特征,在使用时可能需要进一步完善特征库,所以此特征库应该是开放式的,可以对其中的特征进行新建添加、更改等操作,便于管理使用。

3 特征识别与提取模块的二次开发

3.1 菜单的制作

在NX软件的菜单栏中添加自定义菜单,菜单界面显示如图1所示。

图1 自定义菜单界面

3.2 编程的流程

首先对实体模型进行遍历,获取面、边的几何信息,并分别存储在面、边列表中。主要函数如下:

int scope = UF_UI_SEL_SCOPE_WORK_PART;

uf_list_p_t face_list;

UF_MODL_create_list(&face_list);

UF_MODL_ask_body_faces(object_tag,&face_list);

int b=0;

UF_MODL_ask_list_count(face_list,&b);

UF_MODL_ask_face_data(face_tag,&type,point,dir,box,&radius,&rad_data,&norm_dir); //输入面的tag值,输出面的相关数据,例如面的类型:16=圆柱面,17=圆锥面,23=倒圆角面,等

UF_MODL_ask_face_edges(face_tag,&edge_list);

UF_MODL_ask_edge_type(edge_id,&edge_type); //获得边的属性类型信息,如UF_MODL_LINEAR_EDGE为线性,UF_MODL_ELLIPTICAL_EDGE为椭圆形,等

UF_MODL_ask_face_props(face_tag,face_param,face_point,face_u_deriv1,face_v_deriv1,face_u_deriv2,face_v_deriv2,face_normal,face_radii); //获得面的法向量

UF_VEC3_cross(vec1,vec2,vec_ccw);//输出vec_ccw=vec1*vec2

UF_VEC3_angle_between(vec1,vec2,vec_ccw,&angle); //输出两个向量的夹角

完成对实体模型的分析后,接下来实现与加工特征映射库中加工特征的匹配,运用VF2算法循环匹配,直到映射库中的特征被完全遍历,提取出输入模型中包含的所有库中的特征为止。由于输入模型中可能存在库中所没有的特征,而为了更快的区分出这些特征,在匹配过程中,对于输入模型中已经匹配到的特征通过高亮显示,然后改变特征对象的颜色来加以区分。首先调用函数UF_DISP_set_highlight(object_tag,1),为高亮显示,然后将其设定为其他颜色,UF_OBJ_set_color(object_tag,color),其中int color的数值范围在1-216之间有效。

4 实例运行

最后,以减速箱体为例,对NX二次开发扩充的特征识别与提取模块进行验证,给出实例进行功能演示,如图2所示。

图2 特征识别与提取功能演示

猜你喜欢
小图库中二次开发
街头的人
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
小图的夏天
智趣
拼图
西门子Easy Screen对倒棱机床界面二次开发
从今天开始
智能盘库在自动化立体库中的探索和应用
ID3算法在构件库中的应用