中望3D 2020 图层管理器(图层的设置+移动图层+复 制图层)
当前,由于容差带来的数值计算不稳定性、几何表示不准确的问题普遍存在三维建模过程中。如不同的CAD平台进行数据交互会产生模型质量损失、容差模型在新的CAD平台中进行编辑修改发生错误或直接失败。
三维几何建模平台由于采用不同的建模核心和几何建模方法,在几何计算、几何精度设定的方法.上面存在差异。目前80%三维CAD平台所采用的两大建模内核均为ACIS或Parasolid内核,其中ACIS内核使用的是0.001mm的建模公差精度,Parasolid 内核则使用的是0.0254mm。因为公差精度差异而导致的数据导入后几何丢失、实体布尔运算操作失败、工程图投影错误等几何容差问题客观存在。
当前不同的CAD平台均使用不同的容差建模技术,用来优化因为几何精度而产生的问题,其中有使用全局的固定公差方法来保证模型所有设计和细节特征维持一致的几何建模精度,也有使用自适应公差的做法来提高建模的成功率。
三维几何建模是指通过计算机及其图形系统来表示和构造形体的几何形状,建立计算机内部的三维模型。从最早的二维空间的手工图板绘图,到60年代开始的三维计算机绘图,期间三维建模技术经历了从线框建模、曲面建模、实体建模等发展过程。近年来直接建模、混合建模、细分曲面建模等细分技术也作为补充性的建模技术应用到不同的三维CAD设计系统中。目前CAD集成化系统普遍采用实体模型作为产品造型系统,成为从微机到工作站上各种图形系统的核心。
实体建模技术(Solid Modeling)的核心是CSG(Constructive Solid Geometry)和B-Rep(Boundary Representation)模型。CSG表达的是建模的顺序过程,而B-REP表示的则是三维模型的点、线、面、体信息,及造型结果的三维实体信息。
目前大多数主流的CAD开发平台普遍采用CSG和B-Rep混合的实体几何建模方式,随着几何建模技术在基础理论方面的日渐成熟,发展出几大著名的建模核心,包括Parasolid、ACIS、Granite,同时基于这些建模核心推出了许多商品化的通用及专用的CAD设计系统,诸如CATIA、NX、PRO/E、Solidworks,但目前这些著名的CAD/CAM系统知识产权均给欧美的公司所拥有并垄断。
我国对三维几何建模技术的研究起步较之欧美晚,高校方面始于60年代末。当时只有为数不多的几个产业部门(如机械、航空、船舶等)和几所高等院校开始研究CAD技术,随着国家的重视,多所高校都逐渐加大这方面的研究投入,譬如北航的唐荣锡教授从1980年到1984年就与课题组教师和研究生研制出了中国第一个多面体实体造型原型系统PANDA,随即向国内研究所和学校低价或无偿提供源程序,公开技术;之后又开发出了基于线框和NURBS曲面的几何造型、数控加工原型系统PANDA4,但由于诸多原因,PANDA4未能实现商品化。尽管如此,在三维几何建模研究的领域,我国逐渐积累了优秀的技术人才,而且关于几何计算、几何图形学的学科研究也越来越多,涉及的也越来越深入。90年代初,浙江大学在著名数学家苏步青的指导下成立了几何设计与图形学科研组(CAGD&CGGroup),迄今为止一直是我国活跃在几何建模技术研究的有生科研团队,团队的成员也均在几何计算、几何逼近和几何处理等领域的研究取得一定的成果。
企业方面,近年来,有很多CAD/CAM技术应用的公司也尝试转变方式,通过并购、重组和合作的方式,引入外国的核心建模技术。因为经过多年的经验教训,企业要直接开发一套全新的建模平台用以和成熟的建模核心进行竞争不大现实,所以通过技术引入的方式成为一-种新的技术尝试。2004 年,北京数码大方基于美国子公司IronCAD三维设计平台推出了《CAXA 实体设计软件》,其使用的是Parasolid和ACIS的双核心,目前最新版CAXA实体设置2020 ;2008年,山大华天与日本的UEL公司进行合作后,基于其三维设计平台CADMeister 推出了《SINOVATION 2008》,目前最新版为SINOVATION9.1,并且其源代码相互开放和共享;2010年,中望龙腾软件在年收购美国VX CAD/CAM后推出了《中望3D2010》,目前最新版为中望3D2021,其平台使用的是OverDrive的建模核心,享有源代码的完全知识产权。这些企业的发展也为相关技术人才提供了深入研究三维几何建模技术的机会与平台。
1.几何容差问题的研究情况
在三维几何建模中,由于误差带来的数值计算不稳定性、几何表示不准确一直是重要的研究问题。主要原因是在几何建模当中普遍应用的边界表示法(B-Rep)中,其几何实体(点、线、面)在计算机当中均被看做理想的数学几何,但实际,上只有很少一部分数学物体能够在计算机中精确表示,而大部分的几何物体在计算机中都只能以浮点数来近似表示。浮点数表示的几何物体是不精确的,这个不精确的表示就导致了几何实体的几何与拓扑之间的不一致性,也就是误差的产生。如图1-1a)中所示是正确的布尔求和的结果,但是因为半径的浮点表示以,及数值操作计算,其相交线如图1-1 b)所示该变成两条交线,这就是误差导致的几何拓扑结构变化。
针对上述误差问题,从80年代以来,围绕关于如何进行稳定的几何表示及计算的问题,有大量的研究工作,也因此发展出两种主流的解决方法:精确方法和非精确方法,精确方法认为误差产生的根源来源于计算机内采用的浮点算法,可以直接采用准确计算,但这种方法随之.给否定,因为整数运算和有理数运算能做到绝对精确,但(根号2)这样的有理数无法做到绝对精确。随后Karasick 等人也指出就算是简单的有理运算也无法得到完全精确的结果。之后一些研究者从另一个角度考虑对几何设计与计算中误差的处理,这一类方法并不以得到精确的计算结果或逼近结果为研究目的,二是通过适当的方法对运算后产生的误差给予描述和界定,这种方法称之为“非精确方法”。
基于“非精确方法”的理论,维也纳工业大学的Pottmann首次从纯几何的角度,研究几何计算中误差的传播问题,开辟了几何容差(Geometric Tolerance)的研究领域。使用凸多边形表示误差区域,基于误差分析方法中的最坏情况法,实现一种误差分析工具,用以检查几何算法或几何结构中引进的误差量的传播情况和危险程度,从而提供几何算法优劣的判别标准。
随着几何建模技术的发展,对几何容差的研究和理解也逐渐深入,建模平台应用当中因为容差引起的建模问题日渐受到几何建模平台的开发商所重视。EDS公司的几何建模内核Parasolid发现从其它CAD系统导入数据(尤其是裁剪曲面)存在数据丢失的问题,而且之后的编辑操作容易引起问题。为此Parasolid技术部门的David J.Jackson认为这些问题就是不同CAD几何精度体系,导致数据交换后的几何容差问题,提出了一种容差几何(Tolerant geometry)和容差建模(Tolerantmodeling)的技术方案。通过为每条边赋予不同的容差,使模型交互可靠、精确,避免了几何数据的丢失、缝隙的产生及其他误差。并且从2008年发布UG4.0版本开始就在相关命令中支持局部的公差设置,用以解决此类容差模型的问题。图1-2中分别表示几何模型的三种状态,图1-2 a)是没有容差的精确模型、图1-2b)是存在间隙的问题模型、图1-2c)则是赋予了容差的容差模型。
而另一个主流的三维几何内核ACIS则提出一种基于经验判断的容差模型定义规则:当两点距离小于时,认为两点重合;当两张邻面的法矢夹角小于时,认定两面有公共切平面;用样条拟合一条精确曲线的逼近误差为;计算机对数字的最大分辨能力为,即将设定为零。对于计算中出现的其它建模问题,还需要约定特殊的处理方法。正因为这些不同的CAD系统的精度设置方法和数值的差异,造成了异构系统间交换产品几何模型数据的困难,当前不少CAD设计系统都在完善修补自己产品的几何容差体系,以便与其他CAD系统更好集成。
2.几何容差的几何原理
边界表示法(B-Rep)是当前被主流建模系统普遍使用的实体模型的表示方法,几何容差中的处理和操作对象都是基于B-Rep模型的,对B-Rep模型的几何拓扑结构分析,可以总结出几何容差在B-Rep模型中的存在形式。
2.1 B-Rep模型的几何拓扑结构
计算机中表示三维几何模型,根据几何的特点可以分为线框模型、表面模型和实体模型三类。如果按照表示几何的表示方法进行分类,实体模型又可以分为分解构造表示CSG(Constructive Solid Geometry)和边界表示B-Rep(BoundaryRepresentation)两大类。基于两种表示方法的特点,目前在主流的几何建模系统中,都采用将两者结合起来、共同表示实体的方法。主要以CSG法为系统外部模型、B-Rep法为内部模型。其中CSG法适于做用户接口,B-Rep法则适合在计算机内部描述数据模型,这样可以完整的表达物体的几何、拓扑信息,便于构造产品模型。本文对容差建模的研究,其主要的研究对象也是基于B-Rep方法构造的几何模型。
边界表示法中一般将模型的拓扑结构按层次分解为以下对象:
1)体(Body):是实体对象的最高层次,由封闭表面围成的有效空间
2)壳(Shell):互联的线或面的集 合,它可以界定实体的外部或内部区域
3)面(Face):如图2-1,面是被一个或多个边(Edge)组成的环(Loop)所界定的曲面中的联通区域
环(Loop):如图2-2中,面的边界中互相连接的部分,它由一系列的有向边组成,通常是封闭的。
4)边(Edge):相邻面的交界,由顶点界定
5)有向边(Coedge/Pre-edge):如图2-3中,是两条共边缘的集 合
6)顶点(Vertex):边的端点,为两条或两条以上边的交点
图2-4的楔形体通过B-Rep的描述方法,展示了面(Face)、边缘(Edge)和顶点(Vertex)的构成,其中包含了4个面,6个边缘,6个顶点,同时6个有向边,又封闭成4个环。
综上,在边界表示法中,边界表示是按照体一壳一面一环一边一点的层次,并详细记录构成形体的所有几何元素的几何信息及其相互连接的拓扑关系。因此在进行各种运算和操作中,拓扑结构不断发生变化,拓扑关系也在不断重组,这个过程就涉及容差的计算。
2.2几何容差在拓扑结构中的三种存在形式
对于边界表示法的B-Rep模型来说,其主要构成就是一张张的面,因此无论是建模还是模型修复,都必须以面作为基础。精确的没有容差的B-Rep模型,面与面之间的连接是完全重合如图2-5 a),但因为几何容差,面与面之间将存在间隙,如图2-5 b)。
在图2-5 b)的六面体中,提取三个相连面进行分析。如图2-6,描述面与面之间连接关系的边(Edge)以及描述边与边之间连接关系的顶点(Vertex)因为几何容差产生间隙,原本精确模型中的,3条共边缘分裂成6条,1个共顶点也分裂成3个。因此在存在几何容差在B-Rep模型中的存在形式主要是依赖于顶点、边缘和面,对几何容差模型的问题研究从根本.上来说就是对容差顶点、容差边缘和容差面的分析研究。
1)容差顶点(Vertex)
顶点(vertex)的位置用几何点(Gp__Pnt)来表示。点是几何造型中的最基本元素,自由曲线、曲面或其他形体均可用有序的点集表示。用计算机存储、管理、输出形体的实质就是对点集及其连接关系的处理。在正则形体定义中,不允许孤立点存在。顶点的另一个 重要属性是容差(Tolerance),用来表示位置精度。
如图2-7,顶点容差T的几何意义为以顶点为圆心半径为T的球。这个球包含所有与这个顶点相连的边的曲线的端点。
2)容差边缘(Edge)
边(Edge)是边界表示法中的重要结构,因为边界表示法(B-Rep)是用形体的边界来描述形体的一种方法。B-Rep认为形体是由有限数量的边界表面(平面或曲面)构成,而每个表面又由若干边界边与顶点构成,所有的单元面构成了形体的边界,形体的边界将形体和周围的环境分隔开来。
图2-8是ACIS建模核心中对容差边的描述,容差模型从边缘(Edge),有向边(Pre-edge)得到一个新的容差边缘Tedge,其存储容差并且以静态参数化来约束边缘。边缘的公差值定义为有二维空间上有向边(Pre-edge)与相邻面的最大距离。
3)容差面:
面(Face)是用来描述三维实体边界的拓扑实体。面是由底层的曲面及一个或多个环(Wire)来描述。例如,一个圆柱体包含三个面:底面、顶面和侧面。
每个面都是无限的(无 界的)(Geom_Plane 和Geom_CylindricalSurface),通过边界来限定无限的面得到面。即用位于Geom_Circle.上的边形成的环,限定出底面和顶面。侧面包含四条边:其中两条边与顶面和底面其享,剩下的两条边是缝合边(Seam edge)。
如图2-9所示,面的容差的几何意义是包围面的一个具有厚度的板。
与边和顶点的容差相比,建模算法中涉及到处理面的容差的情况相对要少。通常都使用建模公差的默认值,而且面的容差<=边的容差<=顶点的容差。
2.3几何容差产生的原因
通过对B-Rep模型中几何、拓扑关系分析,可以明确的了解到要在三维建模系统中要完整的描述一个几何模型的需要保证几何元素的完整性、拓扑关系的正确性。但在计算机进行几何建模(建立数学模型)的过程中,对一个完整复杂的几何模型通过最基本的几何构造和拓扑关系描述的时候,首先在单一平台会因为计算误差、几何的迭代产生几何容差,其次跨平台的核心算法差异,也会在数据交换后产生几何容差。
下面将对几何容差产生的原因做具体的分析。
2.3.1不同的几何建模核心
几何建模核心是指几何建模平台使用的几何建模引擎,是几何建模中最关键的算法集 合。目前主流的几何建模核心是美国的Parasolid和ACIS,发展比较早、应用也相当广泛。俄罗斯的C3D建模核心也在一-些软件平台得到应用,另外一个代码开源的建模核心是Open CASCADE,主要一些教育机构和企业简单的CAX软件利用其进行开发,商业化程度较低。国产的建模核心的代表是中望3D使用的Overdrive核心。
几何建模核心有一个线性公差(Linear tolerance),这个公差数值是用来严格零值使用的。当两个数的差值小于这个公差的时候,则认为它们是一样的。
如图2-10 中Parasolid的线性公差示意图,蓝色 区域表示公差区域,只要在数值在 区间内,都是等同零值。
目前不同建模核心本身使用的线性公差是不一样的,主流的建模核心的公差可见表2-1。
除线性公差外,所有几何建模平台还有-一个建模公差(Modeling tolerance),建模公差不同于线性公差,其控制的不是数值的精度,而是几何拓扑结构中代表两个几何元素的间距在多少以内可以被视为是足够接近。譬如当顶点(Vertex)和边缘(Edge)小于这个公差的时候,建模系统就认为他们是重合一致的。
如图2-11所示,蓝色点V1、V2是两个顶点,蓝色线则是两个边缘,红色圆柱区表示的就是建模公差带,只要顶点V1、V2在圆柱的顶面和底面圆圈内,建模系统认为共点,同理如果蓝色边缘在圆柱内,则系统认为共边缘。
GB/T18784-2002(CAD/CAM 数据质量标准)推荐的建模公差值是0.02,但现实情况中,基于几何核心开发各个三维CAD/CAM设计平台所使用的建模公差各不相同,如表2-2是各主流CAD平台的建模公差值。
目前这种差异化的现实情况无法改变,其中一个主要原因是不同的几何造型引擎中对几何拓扑的组织和描述、几何算法的差异,每个建模引擎都会根据实际的运算法则选择最适合自己的建模公差值;另外一个原因是应用几何造型的CAD/CAM平台由于面对的不同行业和客户要求,难以使用统一的建模公差。如CATIA普遍应用于航天汽车制造的高端行业,其默认建模公差使用的是0.001mm,而面向通用机械制造行业的中端CAD平台Solidworks则用的是0.0254mm。
2.3.2 不同的几何模型设计要求
就算使用统一的几何建模平台进行设计,考虑到实际模型产品的应用场景和总体和局部的细节要求需要各种不同的公差,首先就不同产品的应用场景而已,如图2-12 a)中一款高端的汽车的几何模型的公差要求肯定要比图2-10b)一个普通作业的小推车的几何模型公差要求要高。
其次就模型本身而言,总体的公差和局部的公差也存在差异。这就是大尺寸用大公差、小尺寸用极小公差的设计原则。例如对图2-13的某推进器零件(外形尺寸1500x600x450mm)进行建模时,其外形的几何建模公差只要设定成0.1mm就能满足装配的要求。但对于某些内部的精密零件如机电装置或轴承表面,需要达到0.005mm的建模公差,才能保证后续CNC加工的质量。
综上,几何模型的应用场景不一样,其设计过程中对几何的精度要求存在差异。当然理论,上均使用统一的极小的建模精度可以解决这个问题,但现实上这种方案是不可行也没有必要。首先基于几何计算考虑,极小的精度公差会导致计算过程更长、储存的数据量更大;其次从产品的开发制造流程分析,极小的精度公差会给后续CAM加工、CAE分析增加时间和人力的成本。
2.3.3数据交互标准和方法的差异
如果仅在同一个CAD系统中进行数据交互,采用中性文件格式,如NX的中性格式X-T/X-B,CATIA中的SAT均是系统的中性格式,可以避免几何精度的损失,保证数据质量,从而减少几何容差的问题。但如果数据交互双方采用不同的系统,就必须采用标准的协议格式进行转换,例如STEP、IGES、VDAFS、SET等交换数据。
就应用最为广泛的数据格式IGES和STEP分析,两者均是通用的国际数据交换标准,IGES是最早出现的CAD产品数据交互规范,是1981由ANSI提出的标准,STEP则是1984 年由ISO(国际标准化组织)提出的数据标准。但IGES和STEP格式由于精度等级的差异、几何语义的差异,在两者间进行数据交互会出现精度的误差。
图2-14中的示例是一-种常见的设计情景,从A系统中把几何模型导出STEP格式后,导入B系统进行后续编辑,然后再导出IGES格式到其它系统,这个时候的IGES格式对比A系统的源数据就发生了精度的变化,也就产生了几何容差的问题。
2.4几何容差引起的建模问题
2.4.1数据导入后模型质量损失
数据导入的质量问题普遍发生在不同三维CAD/CAM系统平台之间的数据交互过程中,而由几何容差引起的主要是因为不同平台间建模精度的不统一。
2.4.1.1几何原型分析
1)高精度的模型导入到低精度的CAD系统当中
图2-15由边缘(e1,e2,e3)构成的狭长面(facel),当facel 的面积区域小于建模公差的时候,由建模公差的定义可知:边缘el,e3被认为重合。
之后会有两种结果出现,具体根据不同的CAD系统的算法处理。比较通用的算法处理如图2-16是延伸e5、e6创建相交点,然后从顶点v1连接此相交点创建新的v3,形成封闭的区域。
从上述分析可以得出,在高精度的几何模型导入到低精度的建模公差的系统中,在交互过程中,狭长面(Tiny face)导入后丢失了。
2)低精度的模型导入到高精度的CAD系统
低精度的模型导入到高精度的CAD系统中,更容易出现问题,是因为低精度系统中认为重合的有向边(Pre-edge)和顶点均被认为是宽松的,这个是导致顶点(Vertex)开叉和开放间隙(Gap)的主要原因。
图2-17中的低精度模型的显示的两个平面face1和face2的有向边缘(Pre-edge)可以理解为右图示中的公差有向边(TPre-edge),由于在建模公差的公差带范围内,所以在原系统中是重合的。
但导入的高精度建模公差的系统中,如图2-18中由于新的系统使用更小的建模公差值,公差棒小于原低精度模型的有向边的间隙,在新的系统中就认为他们不是重合而是开放的,这就是导入质量中间隙形成的主要原因。
图2-19中的低精度模型的4个边缘(e1,e2,e3,e4)构成的顶点v1在原几何建模系统因为大公差的原因是认为重合的,但导入到新的系统后,在更小的建模公差的公差棒范围内,不被认为重合,所以造成顶点v1开叉。
2.4.1.2实际案例呈现
1)面丢失
图2-20中的轮毂的几何模型,从原设计系统导入的新的系统中,放大后如图2-21中一狭长条形面丢失;
2)缝隙(Gap)
产生图2-22中的几何模型,从原设计系统导入的新的系统中,使用开放边检查工具可见多处存在开放的间隙(Gap):
3)顶点(Vertex)错误
图2-23中的汽车刹车钳的几何模型,从原设计系统导入的新的系统中,线框模式下查看或用专用的模型质量检查工具,可见顶点开叉:
2.4.2布尔运算操作失败
布尔运算作为建模主要操作之一,基本所有的基础建模特征以及加强筋、螺纹、用面裁剪/分割体等几何建模命令都会涉及,而布尔运算的底层是几何相交线的求交,所以由于几何容差导致的布尔运算失败就是相交线的求交失败。
2.4.2.1几何原型分析
图2-24中当几何容差的模型A在face1和face 2建的边缘处有几何容差,而模型B的求交面(face 3)刚好在此边缘求交,求交失败。
当几何容差的模型A在顶点v1处开叉,而模型B的求交边缘(edge 2)刚好穿过此顶点,求交失败。
2.4.2.2实际案例呈现
如图2-25所示模具分型设计中,执行布尔求差的操作,从本体(Base)减去工具体(Operator),由于几何容差的问题,导致计算结果错误,出现开放面。
2.4.3工程图投影错误
几何容差引起的工程图投影错误,主要是因为射线穿过了容差几何,本应被遮挡的轮廓线被误判成为了可见线。
2.4.3.1几何原型分析
1)当投影射线(Ray)穿过存在几何容差的e1,原本应该认为被遮挡的e1,由于容差间隙的存在,边缘e2会被误认为没有遮挡,导致本应显示为消隐虚线却成为可见实线。
2)另外一种情况是如图2-27,当投影射线(Ray)穿过存在边缘e1,e2.e3.
e4构成的几何容差的顶点v1,与射线相交的边缘e5的消隐状态会改变,此容差顶点区域的e5段会被误判为可见实线。
2.4.3.2实际案例呈现
如图2-28所示的缸体模型,因为存在几何容差,如图2-29某些轮廓线原本属于消隐虚线,但投影后给误判成了可见线。
3.容差建模的技术分析
容差建模就是在三维设计平台中接受来自存在几何容差的“不准确数据",通过赋予存在误差的非精确模型一定的容差范围,既增加了导入的数据的范围,也解决了与导入不准确的数据或模型几何泄露相关的问题。同时容差建模技术还可以保持有效拓扑的同时接受较不精确的几何数据、容忍顶点和边缘的逼近情况,修复顶点和边缘几何容差误差,创建具有正确拓扑的容差模型。
容差建模技术也可用于处理几何逼近的非精确的建模操作,包括布尔运算、混合计算等,而且应用容错建模的技术不会影响几何模型当中精确建模的稳健性和可靠性。
3.1基于全局单一容差的容差体系
传统的边界表示(B-Rep)实体建模使用固定统一的全局容差来执行计算,但其优点和缺点均是明显的。优点是所有计算都只执行一个容差数值来进行判断和计算,存储的信息量小,计算速度快。缺点是始终固定的容差值,数值过大会导致精度损失,模型质量下降,过小的数值反而会增加计算时间,而且会把导入的来自其它平台的数据识别成开放的间隙。
另外一个更严重的问题是会导致建模不稳定。如图3-1中使用固定公差的一个建模例子,蓝色曲线分割一个面,如果上部短边缘的长短小于4倍的容差值,分割后的两条短边会由于两个顶点的容差重合,此条短边在系统中会被认为是重合的顶点而不能正确生成。
3.2基于自适应的容差的容差体系
如图3-2中,基于自适应的容差方法是在涉及几何拓扑变化的过程中,当涉及容差的计算的时候,通过特定的算法计算拓扑结构中的顶点、边缘位置,在几何模型不同位置使用最适合的容差值,这种方法能够保证拓扑结构使用最优的容差值,不会出现固定统一容差方法的建模稳定问题.
理论上自适应的容差方法是最优的,但实践证明这种方法在应用上不可行,主要原因是这种方法的计算过程复杂、计算速度慢。特别对于参数化过程的几何建模平台,由于有特征树驱动模型,只要重生成建模过程,就要重新进行计算,效率低下的问题严重。
3.3基于中望3D的容差建模的应用
中望3D是国产的CAD平台,虽然和主流平台一样均使用B-Rep表示法的实体模型,但是使用的是不同于Parasolid和ACIS的Overdrive建模核心,所以在底层核心的算法上面是有差异的。通过上述对容差建模的技术方法分析,使用一种基于局部容差的容差建模方法,完成容差模型的算法定义和计算法则,并基于这个定义和法则在软件中通过编写代码实现VxVtxGetTol和Vegetal两个获取容差顶点和容差边的数据的函数接口。
3.3.1基于局部容差的容差体系
图3-3表示的是基于局部容差的容差建模方法,吸收了自适应容差方法中使用局部容差的优点,但容差值的计算方式不是自适应判断的,而是经过对实际几何容差情况的分析,设计一种定义规则,来计算和获取容差顶点和容差边缘的数据,而且对几何容差范围做一些限制,超过合理范围的大容差的几何拓扑不进行处理,维持其几何容差。
3.3.2容差边缘的定义与计算法则
容差模型从边缘(Edge),环边(Pre-edge)得到一个新的容差边缘Tedge,其存储容差并且以静态参数化来约束边缘。边缘的公差值定义为有二维空间上有向边(Pre-edge)与相邻面的最大距离。
3.3.2.1容差边缘的模型分析
除了在数值上考虑对容差边缘的定义,在平台应用上,还要考虑能被判断为容差边缘的因素需要不至于破坏其它拓扑结构。因此对容差边缘的定义还需要基于一些应用的案例进行分析从而限定。
1)案例一:图3-4中Pre-edge和公差边缘间存在较小gap,但范围可控,没有破坏LoopA和LoopB,是合格的容差边缘。
2)案例二:图3-5中Pre-edge和公差边缘存在较大gap,如果不进行修复或容差建模介入处理,当使用P1分割公差边缘的时候,新生成的Vertex会是一个坏的有问题的Vertex
具参考图3-6,可以看到公差范围已经跨越两个Vertex之间
3)案例三:在图3-7中,在Edge和Pre-edge端点存在gaps,当使用P1分割边缘的时候会引起失败,
3.3.2.2容差边缘的算法定义
综合上述对几何容差边在实际应用情况的分析和比较结果,在中望3D平台中对容差边缘的判断规则设定如下:
1)设定默认建模公差为VgTolPoint()-0.01mm,开放自定义设置的范围为
V_TOL PROX-MIN()=0.0001mm
V-TOL PROX-MAX()=10.0mm
2)容差的数值判断范围适用于容差边缘和容差顶点,与VgTolPoint()关联设定为:
TolPointExact()=0.001xVgTolPoint
TolPointLoose()=10.0xVgTolPoint
在中望3D平台中对容差边的计算定义如下,并通过编写代码形成VxEdgGetTol函数在软件平台实现:
1)边的局部容差由环边的最大距离决定。如果边只有一条环边,那么边的局部容差为0;
2)如果边有两条环边,那么边的局部容差等于两条环边的最大距离;
3)如果边有多条环边,那么边的局部容差等于多条环边两两距离的最大值。
如图3-8所示,边有三条蓝色的有向边,如果有向边1和有向边2之间的距离为d1、有向边2和有向边3之间的距离为d2、有向边1和有向边3之间的距离为d3,那么边的局部容差dLocalTolerance=max(d1,d2,d3}
3.3.3容差顶点的定义与计算法则
如图3-9中,包含容差值的容差顶点Tvertex派生自顶点Vertex,各自公差值表示从Vertex几何体到在顶点附近终止的所有相邻边缘的端点的最大距离。容差顶点是用于限制Edge或Tedge的二维拓扑实体,而几何模型的拓扑结构保持不变。
如果它们的点之间的距离小于容差顶点和全局建模公差的最大值,则容差顶点和顶点是被认为重合的。
3.2.2.1容差顶点的模型分析
跟容差边缘一样,不是所有在边缘的交叉处开裂的顶点,都应该被定义为容差顶点,除了数值的合理设定,还要考虑容差顶点不至于引起几何模型拓扑几何变化的,才能被定义为良好的容差顶点,下面将分析几种典型的容差顶点的案例。
1)案例一:如图3-10中的顶容差顶点,由于顶点的误差范围小于Edge 1和Edge 2的距离,可以被认为是良好的容差顶点,在此处几何边缘的交点可以被认为是重合的。
2)案例二:如图3-11中,Loop A和Loop D之间存在顶点位置一个更大的间隙,Edge1和Edge2之间的最短距离小于顶点公差的范围。
否则如图3-12所示,假设在Edge2处存在一个分割点(Split point),而这个分割点刚好落在容差顶点区域上,Edge1也被认为受到分割,那么就会因为顶点公差太大,导致分割Edge2失败或者分割错误。
因此这种顶点开叉的情况,不适宜定义为容差顶点,而需要把顶点开放间隙,必须使用模型修复和模型重建的方法来重新构造几何。
如图3-13中在LoopA和LoopB之间构建一条新的边缘。
3)案例三:图3-14中,Loop A和Loop D之间存在在顶点位置一个间隙,小于Edge 1和Edge 2的之间的最短距离。但是顶点的误差范围跨越了Edgel的Vertex1,会导致Edge1引起退化。
因此这种顶点开叉的情况,也不适宜定义为容差顶点,同样需要进行几何修复。
图3-15和图3-16分别是两种可以修复的结果。
通过上述的容差顶点案例的分析,容差模型中的容差顶点的定义不仅要有合理的公差范围,而且需要考虑几何拓扑的结构。否则容差顶点不但没有起到增加模型容忍度的作用,反而引起其它的建模问题。
3.2.2.2容差顶点的算法定义
在中望3D平台中对容差顶点的判断规则跟容差边缘一样,均使用相同的范围限定。
对容差边的计算定义如下,并通过编写代码形成VxVtxGetTol函数在软件平台实现:
1)容差顶点的容差大小应该小于任何相邻边的最小距离Tvertex D(Edgel->Edge2)
2)容差顶点不应该跨越任何非相邻边缘
3)容差顶点不能跨越任一相邻的整边缘
4)顶点公差的大小应该小于V_TOL_PROX_MAX
3.4算法结果的测试
在中望3D平台基于局部容差方法的优化,分别完成了对容差边缘和容差顶点的计算函数VxVtxGetTol和VxEdgGetTol并集成到中望3D平台中进行体现,以下是新版本中的成果体现及同平台新老版本的对比,及与其它主流平台的结果对比。
3.4.1中望3D平台中的结果验证
对全局默认建模公差设定:
如图3-19中的组合和分割命令的对话框截图,所有涉及容差计算的建模命令均实现支持局部容差的设定:
实际案例的结果验证:
使用实际的模型例子来验证局部容差的方法是否正确运行,首先如图3-20中,在中望3D的平台基于默认的0.01mm的容差来创建一个封闭的六面体,然后将几何体以偏移0.05mm的解散为6个单独的几何面。这时候边缘的间隙在0.06mm
验证一:重新以0.01mm的默认容差缝合,执行结果如图3-21,因为0.01mm<0.05mm,所以失败的结果符合预期。
验证二:调整容差为大于间隙0.05mm的0.07mm。如图3-22,执行结果成功,几何模型重新缝合为封闭的一个几何实体。此处可判断局部容差的调整是有效的,得以保证使用到容差计算的建模操作可以调用局部容差的数值。
由于中望3D平台优化了着色模式的显示,如图3-23切换到线框模式下观察,可以看到虽然模型分叉的容差顶点和容差边,也就是说局部容差成功应用到几何容差的顶点和边缘上,让不准确的模型成为容差模型,同时0.05mmkTolPointLoose(),所以这里对容差值的判断和容差顶点和边缘生成均是准确的。
3.4.2与其它主流平台的结果对比
通过与其它主流CAD软件平台NX.Solidworks进行对比,进一步验证中望3D实施的基于局部容差建立的容差体系在建模中的效果。实验思路将使用同一几何模型、使用一样的容差参数设定执行涉及容差计算的建模操作,分别比较三者的成功率、时间和精度。
1)图3-24的测试模型素材:两两相交,进行布尔运算,多处几何拓扑的重组均涉及容差的计算。
2)分别在中望3D 2020,NX10、Solidworks 2017的软件平台,执行布尔并集、差集、交集,理论的正确结果如图3-25所示。
3)使用局部容差0.01mm执行计算:三个平台的布尔运算操作均失败。
4)调整局部容差为0.05mm重新执行计算:中望3D ,NX10能够得到正确结果,Solidworks失败。
5)调整局部容差为0.07mm重新执行计算:中望3D ,NX10和Solidworks中均能得到正确结果。
通过测试结果分析,默认容差无法均无法处理操作得到结果,判断为容差模型,分别调整容差值到0.05mm、0.07mm后执行。
更小的容差值能得到正确的结果表示模型的精度会更高。所以成功率方面:
中望3D=NX>Solidworks
在计算效率(时间)上:
中望3D>NX>Solidworks
由于在精度的判断上,通过容差值的成功率判断,只能得出中望3D和NX比Solidworks更高,但两者均在容差值为0.05mm的时候运行成功。所以两者还需要通过更进一步的验证比较。
如图3-26中分别在中望3D和NX中在同样0.05mm的容差值执行相交线,对比生成的相交线的曲线质量来判断其精度高低:
图3-27是中望3D中的相交线的控制点为6个,而右图中在NX中生成的相交线的控制点为10个。根据Nurbs样条曲线的几何逼近原理,控制点越多,越逼近精确结果,因此可以判断同样的容差值,布尔运算的结果:NX>中望3D
综合判断,在和其它主流平台的结果对比上,中望3D上实施的局部容差的容差建模技术在效率和成功率上都要优于其它平台,在模型精度上比中端的Solidworks要好,但比高端的NX平台稍差。
4.数据导入的原理描述
使用B-Rep数据描述三维模型,拓扑结构自顶到下包括:Shape,Shell.Face,Loop,Pre-edge,Edge.Vertex.Face关联几何曲面,Edge关联三维曲线,preEdge关联2维uv曲线,在导入时,读取源文件中的三维模型数据,然后使用目标平台的B-Rep结构描述。
4.1原数据导入策略的缺陷
原基于精确建模的导入方式,其策略是在创建单个面的时候就完善几何,然后再使用缝合逻辑把面缝合到一起。这种方式对几何的优化是在局部进行的,会破坏全局的拓扑关系。其中,基于精确建模问题来源主要有2点:第一,在导入过程做太多的纠错工作,这极大地加大了算法设计的难度,导致很多正确性问题,以边次序错误为例,由于期望纠正边次序错误,导致不能直接利用原始文件中的次序信息,只能通过几何的连接性重新构建次序关系,当Loop中存在自交或相邻边在几何上不是严格相邻时非常困难,而且一旦构建错误,整个面就会出现严重问题,事实上,基本所有主流三维CAD平台均不支持边次序错误的纠正。第二,为了保证Loop几何上的封闭性,精确建模的导入方法进行了大量的计算,这些计算一方面破坏了文件中的原始数据,另一方面加大了算法的难度而导致模型质量问题。
4.2 基于局部容差模型的导入策略
基于局部容差模型的导入策略,是一种通过几何反算出拓扑,然后再依据拓扑完善几何的新的导入策略。相比基于精确建模的导入方式,导入单个面时先不尝试完善几何,先利用文件中的信息把拓扑构建起来,引入容差顶点和容差边的
判断和计算规则,识别容差模型,脱离范围而在容差模型外的几何容差问题,后续再通过平台的修复工具去优化几何,这样对几何的优化是基于全局数据进行的,正确性更高。
相比基于精确建模的导入方式,基于容差建模的导入更加信任和利用了更多的原始数据,只有发现原始数据存在明显问题时才尝试进行修正;其主要策略的算法流程如下:
1)利用原始文件中的Vertex信息.
2)利用原始文件中边次序信息。
3)利用原始文件中边的方向信息。
4)不轻易改变edge对应的三维曲线,当边界曲线不在surface上时,引入容差边。
5)不通过Trim,extend等方式进行几何优化。
)必要时引入容差顶点以保证loop拓扑上的封闭性。
7)导入时,不删除tiny edge,缝合完毕后再统一删除tiny edge。
4.3基于局部容差模型导入的算法优化
4.3.1维护和利用原始文件中的Vertex信息
由于基于精确建模的导入要求生成模型顶点必须在边上,而原始数据中顶点不一定满足这个要求,所以基于精确建模的导入方式忽略文件中的顶点信息。
当顶点为容差顶点时,如果不记录原始的顶点信息,后期通过计算还原原始的顶点信息基本是不可能的,因此,基于容差建模的导入策略引入了原始的顶点信息,并在整个导入模块中维护该数据:
1)Zs-XILpCv::startPoint和Zs-XILpCv::endPoint用于保存2个顶点坐标,如果从文件中传入顶点坐标,则使用传入的数据,否则根据几何曲线计算出2个顶点的坐标。
2)ZsXILpCv::idVtx1和ZsXILpCv::idVtx2用于存储顶点拓扑id.
3)维护一个Attfield-->VtxZwID的map
4.3.2边次序和边方向的处理
基于精确建模的导入忽略文件中边的次序信息,而边的方向信息也主要是通
过计算得到(注:原始方向信息会影响计算得到的结果),基本思路是分析所有的曲线,通过几何邻近关系,确定次序和方向。
对于一些简单案例,这样是可行,但是对于某些复杂案例,考虑到可能的Loop自交和Gap,通过计算很难得到正确的结果。事实上,涉及的各种格式都要求原始数据中边的次序是正确的,而其它主流软件,当边的次序信息错误时也都无法得到正确结果,因此基于容差建模的导入模块采信文件中边的次序信息,而边的方向信息则根据相邻边界信息进行一定程度的校正。
遍历每一条IpCv,假设其下一条lpCv为lpCvNxt,当满足以下条件时把IpCvNxt->fLoopDir设置为-1:
IdCurrent = IpCv->fLoopDir == 1pCv->idVtx2:1pCv->idVtx1;PointCurrent = lpCv->ILoopDir == IpCv->endPoint:IpCv->startPoint;(id1,point1)和(id2,poin2)分别对应1pCvNxt的起始点和终止点。
若idCurrent,idl,id2不等于-1,则根据拓扑判断,如果idCurrent==id2且idCurrent!= id1,需要把1pCvNxt->fLoopDir设置为-1.
否则根据几何临近关系进行判断,如果dist(pointCurrent,pointl)>10xdist(pointCurrent,point2)则需要把1pCvNxt->fLoopDir设置为-1,可以看出,软件只有当检测出明显错误时才进行方向纠正,否则软件选择信任文件中的原始数据。
4.3.3容差边的处理和Seam边的选择
当文件中存在容差边时,由于该边不在Surface上,基于精确建模的导入必须把该边拉到Surface上,这样破坏了原始的数据,导致后续缝合过程无法和相邻面缝合到一起。而基于容差建模的导入则不会修改边界曲线,这样确保后续缝合过程可以和相邻面正确地缝合到一起。
如图4-1,对于处于SEAM上的边,通过为其从两条备选UV曲线中选择一条作为最终使用的UV曲线,基于精确建模的导入采取比较复杂的逻辑来进行选择,基于容差建模的导入策略将根据SEAM边和相邻两条边的几何关系,以及Seam边的方向来进行判断。把备选UV曲线的两个端点和相邻两条UV曲线的两个端点的距离之和作为比较的标准,如果两条备选UV曲线存在明显差异时,则选择距离小的那条UV曲线,否则以确保Loop逆时针为原则根据边的方向进行选择,只要源数据中边的方向是正确的,则根据UV曲线的方向都能做出正确的选择。
软件不能简单地根据距离大小作出选择:
如图4-2所示,如果简单地根据距离大小进行选择,可能得到错误的结果,Seam边本来应该放在左边,但是却错误地把其放在右边,因为放在左边和放在右边算出的距离和基本是一样的。
同时,如果边的端点处于极点上或者相邻边同样为Seam边时,和相邻边的距离也同样不作为判断依据:
如图4-3,Loop包含2条UV曲线,其中一条在Seam上,该Seam边的两个端点都在pole上,因此不能根据和相邻边的距离选择Seam边,否则会错误地选择右边的Seam边。但是通过Seam边的方向,可以正确地选择左边的Seam边。
4.4新的Loop生成算法
基于精确建模的导入通过Trim.Extend等方式确保Loop在几何上是闭合的,该方式由于是在局部对几何进行优化,会导致后续出现开放边,基于容差建模的导入不再采取该方式,但是必要时会引入容差顶点以确保Loop拓扑上的封闭性;新的导入策略主要通过以下几个步骤来保证Loop拓扑上的封闭性,下面通过一个实例来介绍:
如图4-4所示,曲面包含里外层2个Loop,两个Loop都跨Seam,而且里层Loop中存在局部容差,所以相邻的三维边界之间存在gap
从文件中得到的几何边界为((a3d,b3d,c3d,d3d),(e3d,f3d,g3d,h3d)}
投影后得到的uv曲线如下:
{(al,a2,b,cl,c2,d),(el,e2,f,gl,g2,h)},投影图如图4-5所示。
在内存对应的两个Zs_LpCv双向链表图4-6所示。
1)Zs_XILoop的分裂
遍历Zs_LpCv链表,当链表上两条相邻的lpCv的端点之间的距离显著大于端点和参数空间边界的距离时,把链表在该处打断,并登记参数空间边界上的打断点。
其中发现len(al->endpoint,a2->startPoint)远大于len(al->endPoint,v10),故把链表打断:
同时登记{(V10,Near al->end),(V3,Near al->start)}
再依次处理每个结点,最后得到图4-8所示的链表图:
值得注意的是,虽然e2和f之间存在明显gap,但是并不会在该处打断链表,因为,这个gap并没有明显大于e2,f端点到曲面参数空间边界的距离。
2)沿天然边界补边。
当对Zs_XILoop进行分裂时,软件记录了参数空间边界上的分裂点,接下来将利用这些数据沿天然边界进行补边。
软件将按照以下策略选择添边方案:
如果文件中明确给出了外层Loop,则优先选择只沿某一个参数方向补边的补边方案(只沿U向或只沿v向)。
默认情况下,根据边的方向进行补边,只要文件中边的方向正确,通过这种方向都能够得到正确的补边结果。
针对上例,将选择如图4-9的补边方案,因为该方案只沿v向进行了补边:
相应地,前面得到的4个链表通过增加的4条IpCv连接成一个闭合的链表。
1)必要时重新计算Loop之间的里外层关系以及校正Loop的方向,和基于精确建模的导入一样。
5.布尔运算的原理解析
布尔运算是(Boolean)通过对两个以上的几何进行并集、差集、交集的运算,从而得到新的几何模型形态,几何建模主要的4种布尔运算方式:并集(Union)、交集(Intersection)、差集(Subtraction)和分割(Split)。
如图5-1所示,蓝色的长方体被黄色长方体的一个面分割成两块,而黄色长方体与蓝色长方体相交的面则被蓝色长方体分割成两个面。所有涉及布尔运算的操作(交集、分割、差集、联集)求交后产生了4条相交线,所以运算的成功与否可以分解为相交线能否正确生成,并形成封闭的区域。
在第三章中本文就分析了几何容差引起布尔运算失败的原因,是因为算法不能保证找到正确的交线。因此布尔运算操作算法最关键的部分就是找到正确的交线。两个封闭实体对象的交点处应该至少有一个完整封闭的交点曲线(例如:循环),如果对象相交在多个点,那么有可能会产生多个循环,如果这些循环都是封闭的,那么这是没有问题的。相交线在几何容差的地方无法得到,也就代表着相交曲线不是封闭的,那么布尔操作将注定失败,这是因为相交曲线无法完整切割对象,而三维建模系统无法得知如何切割实体,因此无法布尔运算而给予运算失败的信息。
如图5-2所示,两实体两交,执行分割(Split)的布尔运算操作,会因为容差顶点和容差点,相交线生成存在间隙,无法形成有效的封闭区域,因此建模操作执行失败。
5.2基于局部容差模型的求交线优化
容差建模技术在处理上述容差模型的建模问题,就是优化求交线的算法,当相交线穿过狭长面、容差顶点和容差边时,让相交线的间隙能够闭合,使布尔运算得以成功执行。这种方法在原来算法上增加了对相交线有间隙的三种情况的额外处理手段,让相交线能形成闭环。新的算法程序的流程图如图5-3.
5.3相交线穿过狭长面的算法处理
如图5-4所示当f2相交的位置刚好穿过f1的狭长面区域求交,理论上可以求得一条短相交线,但是在当前运行的几何系统中的建模公差(虚线圆)大于狭长面边缘e4,e5与2的两个交点的距离,也就是说圆则上,此处要生成两个新的顶点,但是由于顶点的距离小于当前建模公差,它们被认为是重合的。
为了保证整个布尔运算操作的成功,图5-5中的顶点v1和v2,软件系统将在完成布尔运算,得到建模结果后在新的模型中再对v1和v2进行合并。
5.4相交线穿过容差顶点的算法优化
通过实际的案例分析得出,边缘形成的容差顶点的情况有如图5-6中三种情况,其主要表象是边缘的端点在几何上不是绝对重合的,但是拓扑上面为了让几何模型能够继续工作下去,平台容忍了这种顶点错误,通过设置局部公差,拓扑上成为一个容差顶点。
但在相交线的计算的时候是基于几何的相交,所以求出的交线就会在容差顶点处存在间隙。如图5-7在几何上的处理是,相互延伸修剪边缘的端点形成理论上的交点,然后再与相交面进行求交。
5.5相交线穿过容差边的算法优化
相交线穿过容差边的情况可以分为两种:
1)当穿过容差边的相交线间隙小于容差顶点的公差:V(pl->p2)<V(Tvertex),如图5-8中所示f1,12与13求交,在Predge处的相交点为p1,p2,但pl到p2的距离小于容差棒的大小,那么可以认为此处新生成的容差顶点重合,相交计算有效。
当穿过容差边的相交线间隙大于容差顶点的公差:V(pl->p2)<V(Tvertex)如下图所示,pl到p2的距离大于容差棒的大小,不能在此处创建容差顶点。如图5-9中通过p1、p2创建一条连接的直线line1,让相交线能够形成封闭的环,保证布尔运算的操作成功。