技术领域
[0001] 本发明涉及工程制图技术领域,具体的说是一种基于三维模型的差异性对比方法。
相关背景技术
[0002] 目前国内多数模具设计企业已由2D设计转换为3D设计模式,多数模具设计企业会在产品发生变更的后,对模具进行相应的同步变更,以便确保模具设计的正确性。因此在修改模具过程中查找产品的差异处则占主导地位,大约占比80%,修改模具20%。设计师在修改产品后,要找出产品修改前和修改后的变更位置一般须肉眼查看,肉眼查看须花大量的时间进行查找比对并且正确率也无法保证,容易遗漏变更位置。
具体实施方式
[0034] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0035] 目前常见的差异化对比软件无法精确的显示差异处的位置,主要原因是由于只对三维模型的特征进行对比分型,只能对比一个比较特殊的面,对于普通的曲面无法做到精确的处理分析,因此无法实现找到所有的差异处。本发明直接将三维模型的所有曲面离散,直接将三维模型的信息最小化,然后再将这些离散的信息进行比对,从而提高比对的正确率。
[0036] 如图1和图2所示,本发明实施例提供了一种基于三维模型的差异性对比方法,包括以下步骤:
[0037] S1、对不同三维模型中的曲面数据分别进行解析,并转化为过滤比对所需的信息保存至内存中,同时将不同三维模型中的曲面数据进行比对,过滤具有相同曲面数据的曲面;
[0038] 过滤相同的曲面的常规分析方法是直接将所有的离散信息存储,求2个3D模型中离散点之间的距离,从而判断两者之间是否相同。其时间复杂度为N^2,N为离散的点的数量,对于一个100mm*100mm*100mm的三维模型,对比精度为0.01,其N的值则为1e12,存储所占内存约为1G,调用系统API函数,平均每次计算耗时为1e-5s,整体计算对比耗时约为1e7s,大约是3000小时。
[0039] 本发明采取用严格的过滤条件过滤掉相同的面,只计算可能存在差异的面,在所有的对比中我们不是简单粗暴的只是进行点的对比,而是采取找到位置相同的面,将位置相同的面进行离散,存储数据的内存用完即可释放,减少大数据的存储。如果单个面的尺寸是100mm*100mm,那么N的数据是1e7,采用二分法进行比对,其复杂度为log2(N),调用系统的API耗时约为1e-5,单个面的耗时为7s,整体耗时约为700s。
[0040] 具体地,所述步骤S1包括:
[0041] 计算曲面的外形尺寸;
[0042] 三角化曲面并计算三角平面的方向,将其保存在内存中;
[0043] 在被比对的三维模型中找到与比对的三维模型中的曲面的外形尺寸相同的面,并比对其三角平面的方向,如果被比对的三维模型中曲面的三角平面与比对的三维模型中曲面的三角平面存在一一对应的方向,则认为两曲面相同。
[0044] S2、对不同三维模型中的平面数据分别进行解析,并对位置相同的平面进行平面数据的差异化比对,通过比对平面上边的不同,将平面上没有重合的端点点集化并存储为差异的点集;
[0045] 在上述技术方案中,平面因其特殊性,在进行比对时对其进行特殊化的处理,是可以节省较多的时间。平面存在差异的位置只有可能是边不同,那么就可以将其差异处精确到边,再通过边的不同来确定平面的差异的位置。
[0046] 具体地,所述步骤S2包括:
[0047] 筛选出三维模型中的平面;
[0048] 计算平面的外形尺寸以及平面的位置;
[0049] 在被比对的三维模型中找到与比对的三维模型中位置相同的平面;
[0050] 获取平面的边的信息,并获取边的端点,存储到map中避免同一的端点不重复存储,并找到两平面重合的端点;
[0051] 如没有重合的端点,则将所有边按一定数量点集化,并存储为差异的点集;
[0052] 如有存在重合的,找到点所在的边,并以重合的点为起始按一定的距离将边点集化,并按照二分法找出不同的点。
[0053] S3、点集化曲面得到最小单元的数据,比对曲面所在单元是否相同,不同的曲面且在同一位置的一组曲面,则对比所在单元区域进行比对找出存在差异的位置,剩余的面则归为一组,利用上述相同的方法找到面上不同的点集,并进行存储;
[0054] 具体地,所述步骤S3包括:
[0055] 计算三维模型的外形尺寸;
[0056] 三角点集化曲面,并获取计算最小单元的大小;
[0057] 根据三维模型外形尺寸和最小单元的大小,将最小单元的数量向上圆整;
[0058] 按照X、Y、Z方向依次比对,如果当前单元的最小值大于三角平面的最大值,或者当前单元的最大值小于三角面的最小值,则三角面与当前单元不相交,依次往下找,直到找到可能相交的单元;
[0059] 按照X、Y、Z方向依次比对,如果三角面的点只要有一个点在当前单元中,则判定在当前单元中,否则计算最小单元各点到三角平面的距离,如果至少两个角点到三角平面的距离大于0,则判定在为在当前单元中,否则认为贴合不在当前单元。
[0060] 在上述技术方案中,曲面如果只是按照比对的精度进行离散成点,一个100mm*100mm的则有1e8个点,所占的内存会很大,调用系统的API耗时为1e-6,离散成点击耗时约为20s。
[0061] 本发明采用将面按一定的精度单元化,在相同单元中的任意两点的距离是在比对精度范围内的,因此只需要比对曲面所在单元是否相同即可。三角平面与单元的相交存在以下几种:三角的点部分在单元内、三角的点不在单元内以及三角面与单元相贴合。
[0062] 三角的点不在单元内,只需保证三角的三个点不在单元的同一侧即可保证与单元相交。
[0063] 三角的点部分在单元内,则保证三角的任意一点的X、Y、Z在三角内。
[0064] 三角面与单元贴合,存在单元上的点到三角面的距离为0,则认为是贴合的。
[0065] S4、利用找到的差异处的点集,按照单元化进行归置,并找到相邻单元的差异化点集并归为一组,并最后将每组差异的点集显示出来。
[0066] 在上述技术方案中,差异处比对结束后,如何能够让设计师能够直观的看到差异处的位置是一个很大的问题。目前常见的方式要么显示面,要么显示特征,这些都不能给使用者很直观的展示,或者是直接用点表示,差异的区域不具有整体化。
[0067] 本发明则是利用找到的差异处的点集,按照单元化进行归置,以一个单元找相邻的单元,形成一组,以保证某一处的差异是一个整体。
[0068] 具体地,所述步骤S4包括:
[0069] 获取差异的点集所在的计算单元,并将所有的单元进行排序,以便于分组节省时间;
[0070] 将差异中的第一个单元创建一个组,并在差异中找到全部的相邻的单元,加入到创建的组中,并在原差异中删除,避免后续重复查找节省时间,在创建的组中找第二个单元所有相邻的差异单元,依次查找所有相邻的单元加入到当前组中,直到找到最后一个;
[0071] 将每一组中的点按一定的比例系数N创建,N的值按显示效果来确定,以节省时间并且达到好的查看效果。
[0072] 综上,本发明首先对三维模型的尺寸、面的尺寸位置的分析,分出平面和一般性的曲面。平面则根据其面的特殊性可以转为对应边的差异性的比对,找到位置相同的平面后,对这组面的边进行分析处理,找到边的差异处即找到这组面的差异处。曲面则对面的各个方向进行分析,过滤掉完全相同的曲面。不同的曲面且在同一位置的一组曲面,则对比所在单元区域进行比对找出存在差异的位置,剩余的面则归为一组,利用上述相同的方法找到面上不同的点集。并进行存储。得到差异性的点集进行单元化,并找到相邻单元的差异化点集并归为一组,最后将每组差异的点集显示出来。
[0073] 本发明可以极大的降低因人员疲劳而产生的错误,进而降低反复沟通,反复修改的成本。
[0074] 以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。