法律状态公告日
法律状态信息
法律状态
2022-09-06
实质审查的生效 IPC(主分类):G06F30/17 专利申请号:2022106250170 申请日:20220602
实质审查的生效
技术领域
本发明涉及一种在Creo中建立的三维模型的加工特征识别方法,特别涉及一种基于AAG的MBD模型的加工特征自动识别方法。
背景技术
现有的加工特征的识别方法有基于图的方法、基于体分解的方法、基于规则的方法等。基于图的方法通过获取模型面与边的几何拓扑关系,构建模型AAG,利用子图匹配识别出加工特征;基于体分解的方法将CAD模型的所有面进行求交,将零件的切削体分解为凸单元体,然后经过处理将凸体单元组合成特征单元,最后将组合得到的单元与预定义的特征匹配,得到相应的特征类型;基于规则的方法需要为每一类待识别的特征制定预定义的规则,通过判断是否符合规则进行识别。
以上现有的方法中对模型信息的表达不够全面,缺乏对凸特征的识别,识别结果不够准确且效率较低,而且识别结果仅表达了特征类型,没有考虑到相关工艺信息,不利于后续的工艺设计,两个拓扑结构和几何尺寸完全相同的模型,若其特征表面的粗糙度数和公差等级差别较大,其加工工艺可能完全不同,导致识别结果出现偏差。
基于AAG的加工特征识别,是指根据模型几何与拓扑信息构建模型AAG并对其进行分解,通过与预定义特征的匹配实现加工特征的识别。
发明内容
针对现有技术的不足,本发明提供一种基于AAG的MBD模型的加工特征识别方法。
本发明的目的是,提供基于AAG的MBD模型加工特征识别方法,实现对使用Creo建模软件建立的MBD模型中的加工特征进行自动识别与提取。本发明为实现上述目的所要解决的技术问题是,提取MBD模型的信息,构建模型的AAG表达,分解AAG得到特征子图,匹配特征子图和预定义特征,实现加工特征的识别。
术语解释:
1、MBD,基于模型的定义(Model Based Definition,MBD),弥合了三维模型直接用于制造的间隙。实际上,MBD是一种基于3D的产品数字化标注技术,它采用三维数字化模型对产品数字化信息的完整描述。
2、AAG,属性邻接图(Attributed Adjacency Graph,AAG),一种数据结构形式,在图的基础上扩展了节点以及节点连线表达的属性。
3、Creo软件,是美国PTC公司推出的机械产品三维数字化设计与分析软件,其主要功能包括产品的三维参数化建模、模型的运动学、动力学、热、磁场等的分析、以及零件的数控加工编程等。
4、AAM,属性邻接矩阵(Attribute Adjacency Matrix,AAM),一种属性邻接图的存储方式,本专利中用于存储AAG分解后的特征子图。
5、分解基面,指三维模型中包含一个或一个以上内轮廓的表面。内轮廓是指在模型表面内部,由首尾相连的边所构成的封闭环。如图1所示,六面体顶面f包含一个由四条模型边构成的内轮廓,f面即为三维模型中的一个分解基面。
6、特征基面,是指三维模型中的平面、且该平面属于凹面、且沿该面法向方向不存在该三维模型的实体。如图2中键槽底面,属于凹平面且沿其法向方向无该模型的实体,该面为此三维模型特征基面。
7、联合基面:是指两个不相连的模型表面,在实际加工中需要作为同一个面进行加工,其需要满足的条件为:两模型表面具有相同的方程表达式且至少有一个为凹面。如图3中的面f3和面f4,满足以上定义,是模型的联合基面。
8、最大凹连接子图:模型AAG中,某节点的最大凹连接子图是以此节点为起始节点,沿凹属性的节点连线向外延伸所能得到的最大连通图。
本发明的技术方案为:
一种基于AAG的MBD模型加工特征识别方法,是指:以在Creo软件中建立的MBD模型为基础,提取MBD模型的信息,构建MBD模型的AAG,通过分解AAG得到其特征子图,将特征子图与预定义特征匹配,实现加工特征的识别。
根据本发明优选的,根据MBD模型的信息,自动识别模型中的加工特征,并与工艺信息相关联,包括步骤如下:
步骤1:提取MBD模型的信息;
MBD模型的信息包括MBD模型的几何拓扑信息与注释信息;几何拓扑信息包括两个方面:一是面与边的连接关系,表现在面与边的凹凸性、面的邻接面以及边的邻接面;二是面与边的几何数据,面的几何数据为面的ID、面的类型以及面上的轮廓信息,边的几何数据为边的ID、边的类型;注释信息包括公差信息及粗糙度信息,公差信息包括公差符号、公差类型、公差值以及关联几何元素的ID、公差有无基准要求、基准面的ID,粗糙度信息包括粗糙度数值和粗糙度注释的关联面ID;
步骤2:构建MBD模型的AAG;
根据MBD模型的信息,定义AAG中的节点以及节点连线的属性,构建MBD模型的AAG;
步骤3:分解AAG得到其特征子图;
通过基于模型面的AAG分解算法,从模型面具有的属性出发,在AAG中搜寻具有分解基面属性的节点,根据其内轮廓组成边的凹凸属性,分类别提取凹凸特征的子图,并判断凸特征子图中是否仍含有凹特征子图;然后删除剩余AAG中非加工面对应的节点,并提取具有特征基面属性节点的最大凹连接子图;通过基于联合基面的子图重构算法,实现分割特征的子图合并;
步骤4:将特征子图与预定义特征匹配;
以AAM表示特征子图,通过基于AAM的特征匹配算法,识别模型中的加工特征,并得到其类型;
步骤5:加工特征识别结果的处理;
获得加工特征的特征面、刀具接近方向int类型变量TAD、粗糙度、公差信息,构造存储识别结果的数据结构,将加工特征与加工特征相关的工艺信息统一存储。
根据本发明优选的,步骤1中,提取MBD模型的信息的过程如下:
首先,定义结构体数据Surface_data、Edge_data、Contour_data、Surffinish_data以及Gtol_data,Surface_data包括surface_id、surf_type、surface_at、in_contour、surffinish_value以及gtol_data,分别用于存储面的ID、面的类型、面的凹凸性、面的内轮廓属性、面的粗糙度数值以及面的公差数据;Edge_data包括edge_id、edge_type、edge_at、adj_surf_id以及edge_in,分别用于存储边的ID、边的类型、边的凹凸性、边的相邻面ID以及边的内轮廓属性;Contour_data包括contour_type、c_edge_id,分别用于存储轮廓的类型、轮廓的组成边ID;Surffinish_data包括sur_symbol、sur_value、sur_asso_element,分别存储粗糙度的符号、数值、粗糙度关联元素ID;Gtol_data的成员包括gtol_symbol、gtol_type、gtol_value、gtol_asso_element、reference_id,分别用于存储公差的符号、类型、数值、关联几何元素ID、基准面ID;
然后,定义MBD模型信息结构体数组存储提取的MBD模型的信息,MBD模型信息结构体数组包括以Surface_data定义的模型表面信息结构体数组surface[]、以Edge_data定义的模型边信息结构体数组edge[]、以Contour_data定义的轮廓信息结构体数组contour[]、以Surffinish_data定义的表面粗糙度信息结构体数组surffinish[]、以Gtol_data定义的公差信息结构体数组gtol[]。
通过Creo软件的二次开发工具Creo TOOLKIT,开发应用程序读取Creo模型的内部数据结构,提取MBD模型的信息,并将其存储到定义的MBD模型信息结构体数组中。
进一步优选的,MBD模型的几何拓扑信息的提取方法为:
通过函数ProMdlCurrentGet获取MBD模型句柄,将MBD模型句柄作为遍历函数的输入参数,首先,调用ProSolidSurfaceVisit遍历MBD模型的面,输出面的句柄数组,将面的句柄数组元素作为输入参数,调用函数依次获取MBD模型的面的ID、面的类型、面的凹凸性以及邻接面ID;然后,调用ProSurfaceContourVisit,遍历面上的轮廓,判断轮廓类型并获得轮廓组成边ID;最后,调用ProContourEdgeVisit获取边的句柄数组,将其作为函数的输入参数,依次调用函数获取边的ID、边的类型、边的凹凸性、边的相邻面ID。
进一步优选的,MBD模型的注释信息的提取方法为:
通过调用ProSolidSurffinishVisit获得粗糙度的句柄数组,以粗糙度的句柄数组的元素作为函数的输入参数,调用函数获得粗糙度符号、粗糙度数值、粗糙度关联元素ID;调用ProMdlGtolVisit遍历MBD模型公差,获取其句柄数组并将句柄数组元素作为函数的输入参数,调用函数获得公差符号、公差类型、公差数值以及关联几何元素的ID、基准面的ID。
根据本发明优选的,步骤2中,构建MBD模型的AAG,包括步骤如下:
201:定义AAG中的节点以及节点连线的属性;
AAG中的节点对应MBD模型中的面,AAG中的节点连线对应MBD模型的边;其定义如下:
AAG中的节点的属性包括面的类型、面的凹凸性、分解基面、特征基面及联合基面;
面的类型:用整型变量标识面的类型属性,分为平面、圆柱面、圆锥面、以及其他曲面;
面的凹凸性:用整型变量标识面的凹凸性;
分解基面:用布尔变量标识面的分解基面属性,如果该面为分解基面,则标识为True;否则,标识为False;
特征基面:用布尔变量标识面的特征基面属性,如果该面为特征基面,则标识为True;否则,标识为False;
联合基面:用整型变量标识面的联合基面属性,如果两面为联合基面,则将两面的联合基面属性标识为相同的整型数值;
AAG中的节点连线的属性包括边的类型、边的凸凹性及内轮廓边;
边的类型:用整型变量标识边的类型,分为直线边、圆弧边和其他曲线边;
边的凸凹性:用整型变量标识边的凸凹性,分为凹边、凸边和光滑边;
内轮廓边:用布尔变量标识边的内轮廓边属性;
202:构建MBD模型的AAG;
通过搜索步骤1中已经提取的MBD模型的信息,建立AAG;步骤如下:
首先,构造存储AAG节点的数据结构Node以及存储节点连线的数据结构Line,结构体Node包括surface_id、adj_line、node_type、node_at、d_face、f_face以及c_face,分别存储面的ID、与节点相连接的节点连线、节点的类型属性、节点的凹凸性属性、节点的分解基面属性、节点的特征基面属性以及节点的联合基面属性;结构体Line包括edge_id、node1、node2、line_type、line_at以及in_contour,分别用于存储边的ID、节点连线连接的节点一、节点连线连接的节点二、节点连线的类型属性、节点连线的凹凸属性以及节点连线的内轮廓属性;分别定义数据类型为Node的结构体数组node[]以及类型为Line的结构体数组line[];节点连线连接的节点一、节点连线连接的节点二是指节点连线的两端节点;
其次,初步构建AAG:令node[].surface_id等于surface[].surface_id,令line[].edge_id等于edge[].edge_id;
再次,根据模型面与边的拓扑关系判断节点与节点连线的连接关系:根据node[]中元素所代表的模型面,获得该模型面上的边的ID,若line[]中某元素含有该ID,则将对应的node[]写入line[].node1或者line[].node2,将line[]写入node[].adj_line中;
最后,添加数组node[]、line[]各元素的其它成员信息;包括:
①确定node[]的其它信息,具体为:根据node[].surface_id获得面的类型,若面为平面,则node[i].node_type=1,若面为圆柱面,则node[i].node_type=2,若面为圆锥面,则node[i].node_type=3,若面为其它曲面,则node[i].node_type=4;根据node[].surface_id获得面的凹凸性,若面为凹面,则node[i].node_at=-1,若面为凸面,则node[i].node_at=1;若ID为node[].surface_id的面为分解基面,则node[i].d_face=true,否则node[i].d_face=false;若ID为node[].surface_id的面为特征基面,则node[i].f_face=true,否则node[i].f_face=false;若ID为node[i].surface_id的面与ID为node[j].surface_id的面为联合基面,则node[i].c_face=node[j].c_face=k,k为一个整数;
②确定line[]的其它信息,具体为:若ID为line[i].edge_id的边分别为直线边、圆弧边、其它类型的边,则分别对应line[i].line_type=1、line[i].line_type=2、line[i].line_type=3;若ID为line[i].edge_id的边分别为凹边、光滑边、凸边,则分别对应line[i].line_at=-1、line[i].line_at=0、line[i].line_at=1;若ID为line[i].edge_id的边是内轮廓边,则line[i].in_contour=true,否则line[i].in_contour=false。
根据本发明优选的,步骤3中,包括步骤如下:
301.分解AAG
以结构体数组node[]为基础,根据节点间的连接关系以及分解基面、特征基面、联合基面属性信息,将其拆分为多个子部分,通过子部分包含的节点获取其节点连线,最后输出每个子部分对应的节点连线与节点;
进一步优选的,分解AAG的具体实现过程如下:
首先,遍历node[],若其中的元素的分解基面属性为true,则遍历与该节点相连接的节点连线,若节点连线具有内轮廓属性以及凹边属性,标记该节点为-1,并将该节点连线删除;若节点连线具有内轮廓属性以及凸边属性,标记该节点为1,并将该节点连线删除;
然后,重新遍历数组node[],若节点标记为-1,获取与该节点相连接的node[]与line[],并删除具有凹边属性的line[],将结果写入数组node1[][]与line1[][]中;若节点标记为1,获取与该节点相连接的node[]与line[],分别写入数组node1[][]与line1[][]中;
再次,删除line[]与node[]已提取的元素,重新遍历node[],若node[]具有凸面属性,则删除与其有连接关系的line[];
最后,再重新遍历node[],若node[]具有特征基面属性,提取与node[]有连接关系的line[]以及与line[]相连接的其它node[],将结果写入node1[][]与line1[][]中。
302.重构特征子图
步骤301将存储AAG信息的数组line[]与node[]被分解为多个子部分,并用node1[][]、line1[][]分别存储各子部分所包含的节点以及节点连线,在node1[][]中搜寻具有相同联合基面属性的节点,合并其所在的子部分,实现特征子图的重构。
进一步优选的,重构特征子图的具体实现过程如下:
遍历数组node[][],若某一数组元素node[i][k]具有联合基面属性,则继续在数组node[][]中寻找与该数组元素node[i][k]的联合基面属性相同的元素node1[j][m],并将node1[j][m]的成员数据信息写入node1[i][k]中,更新line1[][]、node1[][]得line2[m][]、node2[m][]。
根据本发明优选的,步骤4中,将特征子图转化为AAM,实现特征的匹配,包括步骤如下:
401:建立AAM
AAM使用二维数组M[n][n]来表示,其结构如式(I)所示:
式(I)中,n-特征子图的节点数;m
矩阵M[n][n]中元素的取值规则定义如下:
以三位正整数表示数组元素m
以两位正整数表示数组元素m
402:AAM的匹配
首先,判断特征子图AAM与预定义AAM阶数是否相同;
然后,判断特征子图AAM与预定义AAM的对角线元素所构成的集合是否相等;
最后,判断特征子图AAM与预定义AAM的每一行元素所构成的集合是否相似;每一行元素所构成的集合是否相似,是指:特征子图AAM每一行元素构成的集合与预定义AAM每一行元素构成的集合存在一一映射的关系;
如果特征子图AAM与预定义AAM阶数相同,对角线元素所构成的集合相等,且AAM的每一行元素所构成的集合相似,则匹配成功,否则,则匹配不成功。
根据本发明优选的,步骤5中,处理方法为:
构建结构体Featrue_data描述加工特征及其相关信息,以结构体Featrue_data定义结构体数组featrue[]存储加工特征;
结构体Featrue_data的具体成员包括:字符串类型变量featrue_id和featrue_type;Surface_data类型变量surface;刀具接近方向int类型变量TAD;double类型变量Ra;Gtol_data类型变量gtol,分别存储加工特征的ID、类型、特征面、刀具接近方向、粗糙度以及形位公差;其中,刀具接近方向int类型变量TAD取值为1~6,分别代表+x、-x、+y、-y、+z、-z六个方位。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述基于AAG的MBD模型的加工特征识别方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于AAG的MBD模型的加工特征识别方法的步骤。
本发明的有益效果为:
本发明中基于AAG的MBD模型的加工特征识别,通过提取模型面与边的几何拓扑信息,构建模型AAG,并扩展了AAG的表达内容,使得AAG对模型的表达更准确,根据一定的算法规则,对模型AAG进行分解,并通过AAM实现加工特征的匹配,识别出加工特征的类型,通过对识别结果的处理,获得加工特征的其它信息,实现加工特征与工艺信息的关联。
附图说明
图1为分解基面的示意图;
图2为特征基面的示意图;
图3为联合基面的示意图;
图4为本发明实施例中的MBD模型示意图;
图5为本发明实施例中的MBD模型的表面示意图;
图6为基于AAG的MBD模型加工特征识别方法的流程示意图。
具体实施方式
下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
实施例1
一种基于AAG的MBD模型加工特征识别方法,是指:以在Creo软件中建立的MBD模型为基础,提取MBD模型的信息,构建MBD模型的AAG,通过分解AAG得到其特征子图,将特征子图与预定义特征匹配,实现加工特征的识别。基于MBD的模型中除了包含模型结构、尺寸外,还定义了表面粗糙度和形位公差。
实施例2
根据实施例1所述的一种基于AAG的MBD模型加工特征识别方法,其区别在于:根据MBD模型的信息,自动识别模型中的加工特征,并与工艺信息相关联,如图6所示,包括步骤如下:
步骤1:提取MBD模型的信息;
MBD模型的信息包括MBD模型的几何拓扑信息与注释信息;几何拓扑信息包括两个方面:一是面与边的连接关系,表现在面与边的凹凸性、面的邻接面以及边的邻接面;二是面与边的几何数据,面的几何数据为面的ID、面的类型以及面上的轮廓信息,边的几何数据为边的ID、边的类型;注释信息包括公差信息及粗糙度信息,公差信息包括公差符号、公差类型、公差值以及关联几何元素的ID、公差有无基准要求、基准面的ID,粗糙度信息包括粗糙度数值和粗糙度注释的关联面ID;
步骤2:构建MBD模型的AAG;
根据MBD模型的信息,定义AAG中的节点以及节点连线的属性,构建MBD模型的AAG;
步骤3:分解AAG得到其特征子图;
通过基于模型面的AAG分解算法,从模型面具有的属性出发,在AAG中搜寻具有分解基面属性的节点,根据其内轮廓组成边的凹凸属性,分类别提取凹凸特征的子图,并判断凸特征子图中是否仍含有凹特征子图;然后删除剩余AAG中非加工面对应的节点,并提取具有特征基面属性节点的最大凹连接子图;通过基于联合基面的子图重构算法,实现分割特征的子图合并;
步骤4:将特征子图与预定义特征匹配;
以AAM表示特征子图,通过基于AAM的特征匹配算法,识别模型中的加工特征,并得到其类型;
步骤5:加工特征识别结果的处理;
获得加工特征的特征面、刀具接近方向int类型变量TAD、粗糙度、公差信息,构造存储识别结果的数据结构,将加工特征与加工特征相关的工艺信息统一存储。刀具接近方向int类型变量TAD存储时用整型变量存储。
实施例3
根据实施例1所述的一种基于AAG的MBD模型加工特征识别方法,其区别在于:
步骤1中,提取MBD模型的信息的过程如下:
首先,定义结构体数据Surface_data、Edge_data、Contour_data、Surffinish_data以及Gtol_data,Surface_data包括surface_id、surf_type、surface_at、in_contour、surffinish_value以及gtol_data,分别用于存储面的ID、面的类型、面的凹凸性、面的内轮廓属性、面的粗糙度数值以及面的公差数据;Edge_data包括edge_id、edge_type、edge_at、adj_surf_id以及edge_in,分别用于存储边的ID、边的类型、边的凹凸性、边的相邻面ID以及边的内轮廓属性;Contour_data包括contour_type、c_edge_id,分别用于存储轮廓的类型、轮廓的组成边ID;Surffinish_data包括sur_symbol、sur_value、sur_asso_element,分别存储粗糙度的符号、数值、粗糙度关联元素ID;Gtol_data的成员包括gtol_symbol、gtol_type、gtol_value、gtol_asso_element、reference_id,分别用于存储公差的符号、类型、数值、关联几何元素ID、基准面ID;
然后,定义MBD模型信息结构体数组存储提取的MBD模型的信息,MBD模型信息结构体数组包括以Surface_data定义的模型表面信息结构体数组surface[]、以Edge_data定义的模型边信息结构体数组edge[]、以Contour_data定义的轮廓信息结构体数组contour[]、以Surffinish_data定义的表面粗糙度信息结构体数组surffinish[]、以Gtol_data定义的公差信息结构体数组gtol[]。
各结构体数组定义如表1所示。
表1
通过Creo软件的二次开发工具Creo TOOLKIT,开发应用程序读取Creo模型的内部数据结构,提取MBD模型的信息,并将其存储到定义的MBD模型信息结构体数组中。
MBD模型的几何拓扑信息的提取方法为:
通过函数ProMdlCurrentGet获取MBD模型句柄,将MBD模型句柄作为遍历函数的输入参数,首先,调用ProSolidSurfaceVisit遍历MBD模型的面,输出面的句柄数组,将面的句柄数组元素作为输入参数,调用函数依次获取MBD模型的面的ID、面的类型、面的凹凸性以及邻接面ID;然后,调用ProSurfaceContourVisit,遍历面上的轮廓,判断轮廓类型并获得轮廓组成边ID;最后,调用ProContourEdgeVisit获取边的句柄数组,将其作为函数的输入参数,依次调用函数获取边的ID、边的类型、边的凹凸性、边的相邻面ID。
MBD模型的注释信息的提取方法为:
通过调用ProSolidSurffinishVisit获得粗糙度的句柄数组,以粗糙度的句柄数组的元素作为函数的输入参数,调用函数获得粗糙度符号、粗糙度数值、粗糙度关联元素ID;调用ProMdlGtolVisit遍历MBD模型公差,获取其句柄数组并将句柄数组元素作为函数的输入参数,调用函数获得公差符号、公差类型、公差数值以及关联几何元素的ID、基准面的ID。
其流程如下面伪代码所示:
具体的,本实施例中的MBD模型如图4所示,MBD模型的表面如图5所示,结果如表2-表5所示。表2为模型面的数据,表3为模型边的数据,表4为粗糙度信息,表5为公差信息。
表2
表3
表4
表5
步骤2中,构建MBD模型的AAG,包括步骤如下:
201:定义AAG中的节点以及节点连线的属性;
AAG中的节点对应MBD模型中的面,AAG中的节点连线对应MBD模型的边;其定义如下:
AAG中的节点的属性包括面的类型、面的凹凸性、分解基面、特征基面及联合基面;
面的类型:用整型变量标识面的类型属性,分为平面、圆柱面、圆锥面、以及其他曲面;
面的凹凸性:用整型变量标识面的凹凸性;
分解基面:用布尔变量标识面的分解基面属性,如果该面为分解基面,则标识为True;否则,标识为False;
特征基面:用布尔变量标识面的特征基面属性,如果该面为特征基面,则标识为True;否则,标识为False;
联合基面:用整型变量标识面的联合基面属性,如果两面为联合基面,则将两面的联合基面属性标识为相同的整型数值;
节点各属性的属性值定义如表6所示。
表6
AAG中的节点连线的属性包括边的类型、边的凸凹性及内轮廓边;
边的类型:用整型变量标识边的类型,分为直线边、圆弧边和其他曲线边;
边的凸凹性:用整型变量标识边的凸凹性,分为凹边、凸边和光滑边;
内轮廓边:用布尔变量标识边的内轮廓边属性;
节点连线各属性的属性值定义如表7所示。
表7
202:构建MBD模型的AAG;
通过搜索步骤1中已经提取的MBD模型的信息,建立AAG;本发明使用结构体数组表达AAG节点信息、节点连线信息以及其属性信息。模型AAG建立步骤如下:
(1)通过访问模型表面信息结构体数组surface[]、模型边信息结构体数组edge[],获取B-Rep,表示模型的几何拓扑信息;
(2)建立存储AAG中的节点的数据结构Node,建立存储节点连线的属性的数据结构Line,以此为基础,分别定义数据类型为Node的结构体数组node[]以及类型为Line的结构体数组line[];
(3)确定结构体数组node[]所代表的模型面以及结构体数组line[]所代表的模型边,以模型面与模型边的拓扑关系为依据,确定结构体数组node[]与结构体数组line[]的连接关系;
(4)以模型表面信息结构体数组surface[]中储存的信息为基础,根据模型面的相关属性定义,为结构体数组node[]添加对应属性;以模型边信息结构体数组edge[]中储存的信息为基础,根据模型边的相关属性定义,为结构体数组line[]添加对应属性。
具体过程如下:
首先,构造存储AAG节点的数据结构Node以及存储节点连线的数据结构Line,结构体Node包括surface_id、adj_line、node_type、node_at、d_face、f_face以及c_face,分别存储面的ID、与节点相连接的节点连线、节点的类型属性、节点的凹凸性属性、节点的分解基面属性、节点的特征基面属性以及节点的联合基面属性;结构体Line包括edge_id、node1、node2、line_type、line_at以及in_contour,分别用于存储边的ID、节点连线连接的节点一、节点连线连接的节点二、节点连线的类型属性、节点连线的凹凸属性以及节点连线的内轮廓属性;分别定义数据类型为Node的结构体数组node[]以及类型为Line的结构体数组line[];节点连线连接的节点一、节点连线连接的节点二是指节点连线的两端节点;
其次,初步构建AAG:令node[].surface_id等于surface[].surface_id,令line[].edge_id等于edge[].edge_id;
再次,根据模型面与边的拓扑关系判断节点与节点连线的连接关系:根据node[]中元素所代表的模型面,获得该模型面上的边的ID,若line[]中某元素含有该ID,则将对应的node[]写入line[].node1或者line[].node2,将line[]写入node[].adj_line中;
最后,添加数组node[]、line[]各元素的其它成员信息;包括:
①确定node[]的其它信息,具体为:根据node[].surface_id获得面的类型,若面为平面,则node[i].node_type=1,若面为圆柱面,则node[i].node_type=2,若面为圆锥面,则node[i].node_type=3,若面为其它曲面,则node[i].node_type=4;根据node[].surface_id获得面的凹凸性,若面为凹面,则node[i].node_at=-1,若面为凸面,则node[i].node_at=1;若ID为node[].surface_id的面为分解基面,则node[i].d_face=true,否则node[i].d_face=false;若ID为node[].surface_id的面为特征基面,则node[i].f_face=true,否则node[i].f_face=false;若ID为node[i].surface_id的面与ID为node[j].surface_id的面为联合基面,则node[i].c_face=node[j].c_face=k,k为一个整数;
②确定line[]的其它信息,具体为:若ID为line[i].edge_id的边分别为直线边、圆弧边、其它类型的边,则分别对应line[i].line_type=1、line[i].line_type=2、line[i].line_type=3;若ID为line[i].edge_id的边分别为凹边、光滑边、凸边,则分别对应line[i].line_at=-1、line[i].line_at=0、line[i].line_at=1;若ID为line[i].edge_id的边是内轮廓边,则line[i].in_contour=true,否则line[i].in_contour=false。
其流程如下面伪代码所示:
具体的,本实施例中AAG的节点数据以及AAG的节点连线数据如表8、表9所示。
表8
表9
步骤3中,包括步骤如下:
301.分解AAG
以结构体数组node[]为基础,根据节点间的连接关系以及分解基面、特征基面、联合基面属性信息,将其拆分为多个子部分,通过子部分包含的节点获取其节点连线,最后输出每个子部分对应的节点连线与节点;
分解AAG的具体实现过程如下:
首先,遍历node[],若其中的元素的分解基面属性为true,则遍历与该节点相连接的节点连线,若节点连线具有内轮廓属性以及凹边属性,标记该节点为-1,并将该节点连线删除;若节点连线具有内轮廓属性以及凸边属性,标记该节点为1,并将该节点连线删除;
然后,重新遍历数组node[],若节点标记为-1,获取与该节点相连接的node[]与line[],并删除具有凹边属性的line[],将结果写入数组node1[][]与line1[][]中;若节点标记为1,获取与该节点相连接的node[]与line[],分别写入数组node1[][]与line1[][]中;
再次,删除line[]与node[]已提取的元素,重新遍历node[],若node[]具有凸面属性,则删除与其有连接关系的line[];
最后,再重新遍历node[],若node[]具有特征基面属性,提取与node[]有连接关系的line[]以及与line[]相连接的其它node[],将结果写入node1[][]与line1[][]中。
其流程如下面伪代码所示:
302.重构特征子图
由于特征相交使部分特征被分割,经过AAG分解,被分割的特征被分解为两个特征子图,然后重构特征子图。步骤301将存储AAG信息的数组line[]与node[]被分解为多个子部分,并用node 1[][]、line1[][]分别存储各子部分所包含的节点以及节点连线,在node1[][]中搜寻具有相同联合基面属性的节点,合并其所在的子部分,实现特征子图的重构。
重构特征子图的具体实现过程如下:
遍历数组node[][],若某一数组元素node[i][k]具有联合基面属性,则继续在数组node[][]中寻找与该数组元素node[i][k]的联合基面属性相同的元素node1[j][m],并将node1[j][m]的成员数据信息写入node1[i][k]中,更新line1[][]、node1[][]得line2[m][]、node2[m][]。
其流程如下面伪代码所示:
具体的,本实施例各子部分的节点数据及各子部分的节点连线数据结果如表10、表11所示。
表10
表11
步骤4中,将特征子图转化为AAM,实现特征的匹配,包括步骤如下:
401:建立AAM
AAM使用二维数组M[n][n]来表示,其结构如式(I)所示:
式(I)中,n-特征子图的节点数;m
矩阵M[n][n]中元素的取值规则定义如下:
以三位正整数表示数组元素m
以两位正整数表示数组元素m
AAM建立流程如下面伪代码所示:
首先,判断特征子图AAM与预定义AAM阶数是否相同;
然后,判断特征子图AAM与预定义AAM的对角线元素所构成的集合是否相等;
最后,判断特征子图AAM与预定义AAM的每一行元素所构成的集合是否相似;每一行元素所构成的集合是否相似,是指:特征子图AAM每一行元素构成的集合与预定义AAM每一行元素构成的集合存在一一映射的关系;
如果特征子图AAM与预定义AAM阶数相同,对角线元素所构成的集合相等,且AAM的每一行元素所构成的集合相似,则匹配成功,否则,则匹配不成功。
其流程如下面伪代码所示:
具体到本实施例中,AAM使用二维数组M[n,n]来表示,n表示节点数量。根据分解得到的各子部分的节点node2[][]以及节点连线line2[][],本实施例生成对应特征子图的AAM如下所示:
M
通过将各AAM与预定义的AAM相匹配,识别出其所表示的加工特征类型,分别为:M
步骤5中,为使识别结果更好地应用于工艺设计中,对其进行处理。处理方法为:
构建结构体Featrue_data描述加工特征及其相关信息,以结构体Featrue_data定义结构体数组featrue[]存储加工特征;
结构体Featrue_data的具体成员包括:字符串类型变量featrue_id和featrue_type;Surface_data类型变量surface;刀具接近方向int类型变量TAD;double类型变量Ra;Gtol_data类型变量gtol,分别存储加工特征的ID、类型、特征面、刀具接近方向、粗糙度以及形位公差;其中,刀具接近方向int类型变量TAD取值为1~6,分别代表+x、-x、+y、-y、+z、-z六个方位。通过构建的数据结构,将加工特征与MBD模型信息相关联,丰富加工特征所表达的信息。
其算法流程如下面伪代码所示:
具体到本实施例中,以结构体数组featrue[]存储识别出的加工特征共计11个,其结果如表12所示。
表12
实施例4
一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现实施例1-3任一所述的基于AAG的MBD模型的加工特征识别方法的步骤。
实施例5
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现实施例1-3任一基于AAG的MBD模型的加工特征识别方法的步骤。
机译: 基于多模型特征的恶意软件识别方法,系统及相关装置
机译: 基于声学特征提取和概率模型的声音识别方法
机译: 基于声学特征提取和连续冲动概率模型的声音识别方法