CN113902870A - 布尔运算方法、装置、计算机设备和存储介质 - Google Patents
布尔运算方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113902870A CN113902870A CN202111061661.1A CN202111061661A CN113902870A CN 113902870 A CN113902870 A CN 113902870A CN 202111061661 A CN202111061661 A CN 202111061661A CN 113902870 A CN113902870 A CN 113902870A
- Authority
- CN
- China
- Prior art keywords
- triangle
- intersecting
- model
- bounding box
- triangles
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本申请涉及布尔运算方法、装置、计算机设备和存储介质。所述方法包括:获取第一模型和第二模型;获取所述第一模型和所述第二模型相交所得的相交线段集;根据所述相交线段集进行三角剖分,获得剖分后的三角形;根据所述剖分后的三角形进行布尔运算,获得布尔运算结果;对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。采用本申请的方法能够提高布尔运算之后所获得的模型的质量。
Description
技术领域
本发明涉及计算机计算领域,特别是涉及一种布尔运算方法、装置、计算机设备和存储介质。
背景技术
布尔运算是数字符号化的逻辑推演法。在图形处理操作中引用了这种逻辑运算方法以使简单的基本图形组合产生新的形体,并由二维布尔运算发展到三维图形的布尔运算。传统的布尔运算方法通过对两个或者两个以上的物体进行交运算、差运算、并运算等,从而得到新的物体形态。然而,传统的布尔运算方法所得到的结果可能是带破面的、或者错误的结果,导致布尔运算之后所得到的模型质量差。
发明内容
基于此,有必要针对上述技术问题,提供一种布尔运算方法、装置、计算机设备和存储介质。
一种布尔运算方法,所述方法包括:
获取第一模型和第二模型;
获取所述第一模型和所述第二模型相交所得的相交线段集;
根据所述相交线段集进行三角剖分,获得剖分后的三角形;
根据所述剖分后的三角形进行布尔运算,获得布尔运算结果;
对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
一种布尔运算装置,所述装置包括:
模型获取模块,用于获取第一模型和第二模型;
线段集获取模块,用于获取所述第一模型和所述第二模型相交所得的相交线段集;
剖分模块,用于根据所述相交线段集进行三角剖分,获得剖分后的三角形;
运算模块,用于根据所述剖分后的三角形进行布尔运算,获得布尔运算结果;
处理模块,用于对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现各方法实施例的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现各方法实施例的步骤。
上述布尔运算方法、装置、计算机设备和存储介质,获取第一模型和第二模型以及相交所得的相交线段集,根据相交线段集进行三角剖分,获得剖分后的三角形,根据剖分后的三角形进行布尔运算,获得布尔运算结果,由于此时所获得的布尔运算结果质量较差,因此对布尔运算结果中预设类型的三角形进行删除处理,即在得到布尔运算结果后进行后处理获得流形模型,使得布尔运算之后得到的模型没有破面,没有错误结果,模型质量佳。
附图说明
图1为一个实施例中布尔运算方法的流程示意图;
图2为一个实施例中获得相交退换三角形的示意图;
图3为一个实施例中重叠三角形的示意图;
图4为一个实施例中获取第一模型和第二模型相交所得的相交线段集的流程示意图;
图5为一个实施例中布尔运算装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变,所述的连接可以是直接连接,也可以是间接连接。
另外,在本发明中如涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。除本发明特有的说明外,“第一”和“第二”用于表示不同的事物。例如,第一模型和第二模型虽然都是模型,然而第一模型和第二模型不是同一模型。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本申请中提供的布尔运算方法,能够应用在计算机设备中。计算机设备可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。计算机设备还可以是服务器。服务器可以用独立的服务器或者是多个服务器组成的服务器集群实现。
在一个实施例中,如图1所示,提供了一种布尔运算方法,以该方法应用于计算机设备上为例进行说明,包括以下步骤:
步骤102,获取第一模型和第二模型。
其中,第一模型和第二模型不是同一模型。第一模型和第二模型均可以是STL(StereoLithography,立体光刻)格式的模型。STL(StereoLithography,立体光刻)是用于立体光刻计算机辅助设计软件的文件格式。用于描述三维物体的表面几何形状。
具体地,第一模型和第二模型为各自独立的模型。第一模型和第二模型可以是任意形状的模型,例如球形、方形、动物形等不限于此。第一模型和第二模型具体是预先完成的模型。第一模型和第二模型具体均为三维模型。在计算机设备获取第一模型和第二模型之前,可对第一模型和第二模型进行精度控制。
步骤104,获取第一模型和第二模型相交所得的相交线段集。
其中,相交线段集中可包含多个相交环。每个相交环中包括至少三条相交线段。相交线段是指第一模型和第二模型相交时的线段。可以理解的是,相交线段集中也可以直接包含多条相交线段。
具体地,计算机设备可根据第一模型中的三角形集合以及第二模型中的三角形结合构建BSP树或者KD树,并通过带有三角形信息的BSP树或者KD树确定相交的三角形对。计算机设备根据相交的三角形对确定第一模型和第二模型相交所得的相交线段集。
步骤106,根据相交线段集进行三角剖分,获得剖分后的三角形。
其中,三角剖分具体可以采用(Delaunay)三角剖分算法进行剖分。
具体地,计算机设备对包含相交线段集中的相交线段的三角形进行三角剖分,获得剖分后的三角形。将剖分后的三角形替换掉原始三角形。
步骤108,根据剖分后的三角形进行布尔运算,获得布尔运算结果。
其中,布尔运算结果是指经过交运算、并运算、差运算中至少一种后的第一模型和第二模型的组合体。布尔运算结果中可保留第一模型和第二模型的三角形。
具体地,由于剖分后的三角形可以是由第一模型中的三角形剖分而来的,也可以是由第二模型中的三角形剖分而来的。因此,计算机设备需要根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合。计算机设备可通过射线法判断第一模型和第二模型中各三角形的内外状态。计算机设备获取布尔运算的类型;根据布尔运算的类型和各三角形的内外状态进行布尔运算,获得布尔运算结果。
步骤110,对根据布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
其中,流形模型是指任意一条边有且仅对应两个三角形且不存在重叠三角形的模型。
具体地,计算机设备对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。其中,预设类型的三角形包括第一类型的三角形、第二类型的三角形中至少一种。第一类型的三角形是指根据布尔运算结果直接得到的三角形,如重复三角形和游离三角形中至少一种。第二类型的三角形是指根据布尔运算结果进行合并后的三角形,如相交退化三角形和重叠退化三角形中至少一种。
退化三角形是指面积为0的三角形。相交退化三角形是指将目标相交线段上的三角形的顶点移动至目标相交线段的端点所得到的。重叠退化三角形是指将重叠三角形的一个顶点往其余三角形的顶点移动使得该重叠三角形的面积为0的三角形。
重复三角形是指至少两个相同的三角形。相同的三角形是指三个顶点一一对应,且对应顶点之间的距离小于预设距离的三角形。
游离三角形是指至少两条边仅对应自身一个三角形的三角形。上述布尔运算方法,获取第一模型和第二模型以及相交所得的相交线段集,根据相交线段集进行三角剖分,获得剖分后的三角形,根据剖分后的三角形进行布尔运算,获得布尔运算结果,由于此时所获得的布尔运算结果质量较差,因此对根据布尔运算结果所得到的预设类型的三角形进行删除处理,即在得到布尔运算结果后进行后处理获得流形模型,使得布尔运算之后得到的模型没有破面,没有错误结果,模型质量佳。此外,通过对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,使得模型可以进行多次连续布尔运算后仍然可以得到流形模型。
在一个实施例中,对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,包括:根据布尔运算结果,从相交线段集中确定对应至少三个三角形的目标相交线段;将目标相交线段上的三角形的顶点移动至目标相交线段的端点,获得相交退化三角形;删除相交退化三角形。
其中,布尔运算结果中还保留第一模型的三角形集合和第二模型的三角形集合。目标相交线段是指同一直线作为至少三个三角形的边。目标相交线段的端点是指该直线的端点。
具体地,计算机设备根据布尔运算结果中的三角形,从相交线段集中确定对应至少三个三角形的目标相交线段。计算机设备将目标相交线段上的三角形的顶点连着对应三角形移动至目标相交线段的端点,获得相交退化三角形。目标相交线段上的三角形的顶点具体可以朝着与该三角形的顶点最近的目标相交线段的端点移动。其中,在三角形的顶点移动的过程中,与该三角形的顶点相关的三角形也随着该三角形的顶点移动。
本实施例中,如图2所示,为一个实施例中获得相交退换三角形的示意图。图2(a)中包括三个三角形,目标相交线段为AE。AE上有三角形的顶点C点。那么将C点移动至E点,得到如图2(b)中的C’点,C’点与E点重合。如图2(b)此时三角形ABC变化为三角形AB’E(C’),三角形C’DE是相交退化三角形,删除三角形C’DE,留下三角形AB’E。则实现一条边对应两个三角形,获得流形模型。
本实施例中,由于流形模型是指一条边有且仅对应两个三角形的模型,因此当出现对应至少三个三角形的目标相交线段时,说明布尔运算结果出错,因此通过根据布尔运算结果,从相交线段集中确定对应至少三个三角形的目标相交线段,将目标相交线段上的三角形的顶点移动至目标相交线段的端点,获得相交退化三角形,并删除相交退化三角形,能够对多余的三角形进行去重,提高布尔运算所获得的布尔运算之后模型的质量。
在一个实施例中,对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,包括:获取布尔运算结果中各三角形的法向量;根据各三角形的法向量确定满足预设法向量条件的重叠三角形;将重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形;删除重叠退化三角形。
其中,重叠三角形是指至少两个三角形共面且有一条公共边,且面积有重叠的部分(即重叠面积大于0),则这些三角形即为重叠三角形。重叠退化三角形是指面积为0的重叠三角形。
预设法向量条件是指至少两个三角形的法向量相同或者法向量相反。相同和相反取决于法向量的计算方式。
具体地,计算机设备获取布尔运算结果中各三角形的法向量。计算机设备根据各三角形的法向量确定满足预设法向量条件的重叠三角形。由于在顶点移动的过程中可能会存在其它的错误,计算机设备可多次尝试将重叠三角形中一个三角形的顶点向其余三角形的顶点偏移,直至获得重叠退化三角形。
本实施例中,如图3所示,为一个实施例中重叠三角形的示意图。图3(a)中包括三角形ABC和三角形BCD,其中三角形ABC和三角形BCD在同一平面上。并且三角形ABC和三角形BCD有重叠部分。计算机设备将D点向C点偏移,或者D点向B点偏移等,均可得到重叠退化三角形BCD’。图3中是将D点向C点偏移,删除重叠退化三角形BCD’后得到图3(b),即三角形ABC。计算机设备具体可以枚举所有点偏移的结果,最终采用能够得到重叠退化三角形的方式。
本实施例中,由于在布尔运算结果中可能存在共面的且有面积重叠的部分,因此获取布尔运算结果中各三角形的法向量,根据各三角形的法向量确定满足预设法向量条件的重叠三角形,将重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形,删除重叠退化三角形,能够有效去除重叠三角形,提高布尔运算所得到的模型的准确性。
在一个实施例中,对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,包括:当布尔运算结果中存在相同的重复三角形时,保留重复三角形中的一个三角形,将重复三角形中其余三角形删除。
其中,重复三角形是指至少两个相同的三角形。相同的三角形是指三个顶点一一对应,且对应顶点之间的距离小于预设距离的三角形。
具体地,当计算机设备检测到布尔运算结果中存在完全相同的重复三角形时,保留重复三角形中的任意一个三角形,将重复三角形中其余的三角形删除。
本实施例中,在布尔运算结果中有可能出现重复三角形,保留重复三角形中的一个三角形,将重复三角形中其余三角形删除,能够对布尔运算结果中的三角形进行去重,提高布尔运算之后获得的模型的质量。
在一个实施例中,对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,包括:确定布尔运算结果中各三角形的边所对应的三角形个数;根据各三角形的边所对应的三角形个数,确定至少两条边均仅对应一个三角形的游离三角形;删除游离三角形。
其中,游离三角形即三角形的两条边或者三条边仅对应自身一个三角形的三角形。
具体地,计算机设备确定布尔运算结果中各三角形的边所对应的三角形个数。根据各三角形的边所对应的三角形个数,确定在同一三角形中的至少两条边仅对应一个三角形的游离三角形。计算机设备删除该游离三角形。
例如,计算机设备确定三角形ABC的AB、AC、BC分别对应的三角形个数。若AB边仅对应ABC一个三角形,AC边也仅对应ABC一个三角形,BC边对应三角形ABC和三角形BCD,那么实际上三角形ABC为游离三角形。计算机设备删除该游离三角形。
本实施例中,由于布尔运算结果是由三维模型得到的,流形模型是一条边仅对应两个三角形,那么至少两条边仅对应自身一个三角形的游离三角形即为有误的三角形,因此,通过确定布尔运算结果中各三角形的边所对应的三角形的个数,根据各三角形的边所对应的三角形个数,确定至少两条边均对应一个三角形的游离三角形,删除游离三角形,能够删除不符合流形模型的多余三角形,提高布尔运算之后获得的模型的质量。
在一个实施例中,根据剖分后的三角形进行布尔运算,获得布尔运算结果,包括:根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合;确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态;根据布尔运算的类型和各三角形的内外状态进行布尔运算,获得布尔运算结果。
其中,三角形的内外状态用于表征三角形是否位于第一模型和第二模型相交的区域。内部状态的三角形是指一个模型的三角形在空间上处于另一个模型空间的内部的三角形。外部状态的三角形是指在相交包围盒外的三角形。布尔运算的类型包括交运算、差运算、并运算等。
具体地,由于剖分后的三角形部分可能是第一模型或者第二模型的一部分,因此计算机设备根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合。计算机设备可采用射线法等方式确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态。计算机设备获取布尔运算的类型。当布尔运算的类型为交运算时,计算机设备保存内外状态为内部状态的三角形。当布尔运算的类型为差运算时,计算机设备保存第一模型中的外部状态的三角形和第二模型中的内部状态的三角形。当布尔运算的类型为并运算时,计算机设备保留内外状态为外部状态的三角形。从而计算机设备获得布尔运算结果。
本实施例中,根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合,确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态,根据布尔运算的类型和各三角形的内外状态进行布尔运算,能够准确获得布尔运算结果。
在一个实施例中,确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态,包括:
步骤(a1),根据第一模型的三角形集合和第二模型的三角形集合中各三角形进行连通性判断,获得具有连通关系的三角形组合。
具体地,计算机设备采用并查集(Union-Find)算法,对第一模型的三角形集合和第二模型的三角形集合中各互相相邻的三角形进行连通性判断,获得至少一个具有连通关系的三角形组合。例如,对两个相邻且公共边是非相交环的三角形id(比如10和11),进行Union(10, 11),最后可以将大部分三角形合并成若干个组合,最后只要确定一个组合内一个三角形的内外状态就可以确定整个组合的三角形内外状态。
本实施例中,计算机设备可选定外部状态的任意三角形进行连通性判断,则该三角形组合均为外部状态。从而减少了计算第一个三角形的标签的时间和提高了计算稳定性。
步骤(a2),确定三角形组合的内外状态。
具体地,计算机设备可获取边界三角形的内外标签,将三角形组合对应的边界三角形的内外标签所表示的内外状态作为该三角形组合的内外状态。或者,计算机设备可根据已选定的用于连通性判断的三角形的内外状态确定对应三角形组合的内外状态。
步骤(a3),将三角形组合的内外状态作为对应三角形组合中三角形的内外状态。
具体地,计算机设备将三角形组合的内外状态作为该三角形组合中三角形的内外状态。
步骤(a4),获取未在三角形组合中的目标三角形。
具体地,由于通过连通性判断后可能还存在一些三角形没有判断出内外状态。因此,计算机设备获取未在三角形组合中的目标三角形。
步骤(a5),遍历目标三角形的周围三角形,直至遍历至边界三角形。
其中,目标三角形的周围三角形是指目标三角形周围的互相相邻的三角形。边界三角形是指位于内外边界上的三角形。例如,位于第一模型和第二模型相交区域的三角形为内部状态的三角形,而未位于相交区域的三角形为外部状态的三角形。那么边界三角形即为位于第一模型和第二模型的相交边界处的三角形。具体地,计算机设备遍历目标三角形的周围三角形,直至遍历至边界三角形。
步骤(a6),获取边界三角形的三角形内外标签。
其中,边界三角形的三角形内外标签是人工预先标注的。
步骤(a7),根据三角形内外标签确定目标三角形的内外状态。
具体地,计算机将三角形内外标签所表示的内外状态作为目标三角形的内外状态。
本实施例中,对第一模型的三角形集合和第二三角形的三角形集合中各三角形进行连通性判断,获得各具有连通关系的三角形组合,确定各三角形组合的内外状态,将三角形组合的内外状态作为三角形组合中三角形的内外状态,通过连通性判断能够快速得到大多数三角形的内外状态;通过获取未在三角形组合中的目标三角形,遍历目标三角形的周围三角形,直至遍历至边界三角形,获取边界三角形的三角形内外标签,根据三角形内外标签确定目标三角形的三角形内外状态,能够提高内外状态判断的速度,同时保证第一模型和第二模型中的三角形均判断出内外状态,提高布尔运算的准确性。
在一个实施例中,如图4所示,为一个实施例中获取第一模型和第二模型相交所得的相交线段集的流程示意图,包括:
步骤402,获取第一模型的第一包围盒和第二模型的第二包围盒。
其中,包围盒是一种求解最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体来近似地代替复杂的集合对象。包围盒的形状不限,可以是方形、圆形等。
具体地,第一包围盒即为第一模型所对应的包围盒。第二包围盒即为第二模型所对应的包围盒。
步骤404,确定第一包围盒和第二包围盒相交所得到的相交包围盒。
具体地,相交包围盒是指第一包围盒和第二包围盒的相交区域的包围盒。例如,第一包围盒为boxA,第二包围盒为boxB,相交包围盒为BoxIntersect。
步骤406,确定第一模型中各三角形的第一三角形包围盒,以及确定第二模型中各三角形的第二三角形包围盒。
具体地,第一模型中包含多个第一三角形。计算机设备获取第一模型中各三角形的第一三角形包围盒。第二模型中包含多个第二三角形。计算机设备获取第二模型中各三角形的第二三角形包围盒。
步骤408,获取与相交包围盒相交的第一三角形包围盒所对应的第一三角形索引。
其中,第一三角形索引和第二三角形索引均可以是通过数组存储,能够使得读取速度更快。
具体地,第一三角形索引是指与相交包围盒相交的第一三角形包围盒所对应的三角形的索引。与相交包围盒相交的第一三角形包围盒可视为可能与第二三角形包围盒相交的包围盒。
例如,计算机设备获取与BoxIntersect相交的第一三角形包围盒所对应的第一三角形索引taList。
步骤410,获取与相交包围盒相交的第二三角形包围盒所对应的第二三角形索引。
具体地,第二三角形索引是指与相交包围盒相交的第二三角形包围盒所对应的三角形的索引。与相交包围盒相交的第二三角形包围盒可视为可能与第二三角形包围盒相交的包围盒。
例如,计算机设备获取与BoxIntersect相交的第二三角形包围盒所对应的第二三角形索引tbList。
步骤412,确定第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对。
其中,三角形包围盒对中其中一个包围盒是第一三角形索引对应的第一三角形包围盒,另一个是第二三角形索引对应的第二三角形包围盒。第一三角形索引可用于指示第一三角形的位置,也可以用于指示第一三角形包围盒的位置。第二三角形索引可用于指示第二三角形的位置,也可以用于指示第二三角形包围盒的位置。
具体地,计算机设备确定第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对。例如,第一三角形索引为1和2,1所对应的三角形包围盒为a,2所对应的包围盒为b;第二三角形索引为8和9,8所对应的三角形包围盒为h,9所对应的三角形包围盒i,那么计算机对a和h、a和i、b和h、b和i做相交判断,获得三角形包围盒对ai和bh。
本实施例中,当第一三角形索引和第二三角形索引的个数均小于预设个数时,对第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒进行相交判断,获得相交的三角形包围盒对。
步骤414,获取各三角形包围盒对所对应的相交三角形对。
例如,对taList和tbList中所有的包围盒进行相交判断。如果存在某taList中的一个三角形的包围盒与tbList中一个三角形的包围盒相交,则记录相交三角形对IntersectSet。
步骤416,获取各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集。
具体地,计算机设备获取多个相交三角形对中各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集。
本实施例中,通过先确定第一包围盒和第二包围盒相交所得到的相交包围盒,通过相交包围盒筛选出可能位于模型相交区域的第一三角形索引和第二三角形索引,再通过这些索引对应的三角形筛选出三角形包围盒对,从而获得相交线段集,通过多次筛选,能够降低计算的复杂度,提高布尔运算效率。
在一个实施例中,相交三角形对中包括第一相交三角形和第二相交三角形;
获取各相交三角形对的相交线段,包括:
对于各相交三角形对,将第一相交三角形的三条边与第二相交三角形相交判断,将第二相交三角形的三条边与第一相交三角形相交判断;
当第一相交点坐标、第二相交点坐标中的至少一种的个数满足预设个数条件时,根据第一相交点坐标、第二相交点坐标中至少一种获得第一模型和第二模型相交所得的相交线段;第一相交点坐标是将第一相交三角形的三条边与第二相交三角形相交判断得到的;第二相交点坐标是将第二相交三角形的三条边与第一相交三角形相交判断得到的。
其中,第一相交点坐标和第二相交点坐标不一定同时存在。例如,三角形ABC与三角形DEF不共面,三角形DEF穿过三角形ABC,那么则仅有第一相交点坐标或第二相交点坐标。
具体地,对于各相交三角形对,计算机设备将第一相交三角形的三条边与第二相交三角形相交判断,将第二相交三角形的三条边与第一相交三角形相交判断。
第一相交三角形的三条边分别与第二相交三角形的相交判断结果可能是0、1或2个第一相交点坐标。同样地,第二相交三角形的三条边分别与第一相交三角形的相交判断结果可能是0、1或2个第二相交点坐标。因此,本实施例中可能存在没有第一相交点坐标的情况,或者没有第二相交点坐标的情况。
预设个数条件可以是相交点坐标的个数为2个。第一相交点坐标、第二相交点坐标中至少一种的个数满足预设个数条件则包括第一相交点坐标的个数为2个、第二相交点坐标的个数为两个,或者第一相交点坐标的个数和第二相交点坐标的个数均为两个。
例如,从相交三角形对IntersectSet中提取一个三角形对,再从第一模型和第二模型中分别获取该两个三角形的三个顶点信息。分别用第一模型中的第一三角形的三条边和第二模型的第二三角形进行相交判断并计算交点,再用第二模型中的第二三角形的三条边和第一模型的第一三角形进行相交判断并计算交点,会出现以下情况:
①如果没有交点,说明两个三角形不相交。
②如果仅有一个交点,则忽略该交点。(需要去重,也即如果上述六次计算出了两个交点,但是他们的坐标是一样的,则视为一个交点。两个三角形在非共面的情况下最多只有两个交点。)
③如果有两个不重复的交点,则记录该线段至线段集中。并在两个三角形中添加该线段的信息,用于后续的三角形剖分。
本实施例中,由于在三维模型中,第一相交三角形的边与第二相交三角形相交,与第二相交三角形的边与第一相交三角形相交不同,因此需要各自进行判断,从而获得相交线段集,提高布尔运算结果的准确性。
在一个实施例中,当检测到相交三角形对的相交线段位于三角形边上,则将该三角形边作为相交线段。即对于相交三角形对,当相交三角形对的相交线段未位于三角形边上时,将第一相交三角形的三条边与第二相交三角形判断,将第二相交三角形的三条边与第一相交三角形相交判断。
在一个实施例中,相交三角形对中包括第一相交三角形和第二相交三角形。该布尔运算方法还包括:当第一相交三角形和第二相交三角形共面时,将第一模型或者第二模型移动预设距离;执行获取各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集的步骤。
其中,预设距离具体是预先配置在计算机设备中的数值。预设距离可以是一个较小的数值。预设距离的具体数值可以是小于模型的精度。例如0.001等。
具体地,当第一相交三角形和第二相交三角形共面时,计算机设备将第一模型或第二模型移动预设距离。在移动预设距离后,第一模型和第二模型的相交三角形对的变化不大,因此,可以保留相交三角形对。而相交线段由于模型的移动有一定的变换,因此删除在此之前所获得的相交线段集以及记录在三角形内部的信息,重新执行获取各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集的步骤。
本实施例中,当存在三角形共面的情况时,即当第一相交三角形和第二相交三角形共面时,将第一模型或者第二模型移动预设距离,能够有效避免三角形共面的情况,并且不需要重新确定相交三角形对,重新执行根据各相交三角形对确定第一模型和第二模型相交所得的相交线段,获得相交线段集的步骤即可,能够在保证模型准确性的同时减少布尔运算时间。
在一个实施例中,确定第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对,包括:
当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于或等于预设个数时,将第一三角形索引所对应的包围盒分成第一预设数量份第一三角形包围盒集;
将第二三角形索引所对应的包围盒分成第二预设数量份第二三角形包围盒集;
对各份第一三角形包围盒集与各份第二三角形包围盒集进行相交判断,获得相交的三角形包围盒集对;
对于各相交的三角形包围盒集对,对相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒进行相交判断,获得相交的三角形包围盒对。
其中,预设个数是指预先设置在计算机设备上的个数。
第一三角形索引所对应的包围盒可以视为多个第一三角形所对应的一个大的包围盒。同理,第二三角形索引所对应的包围盒可以视为多个第二三角形所对应的一个大的包围盒。第一预设数量和第二预设数量可以相同,也可以不同。
第一三角形包围盒集中包含多个第一三角形索引中各第一三角形索引所对应的第一三角形包围盒。第二三角形包围盒集中包含多个第二三角形索引中各第二三角形索引所对应的第二三角形包围盒。第一三角形包围盒集可以视为是一个包围盒,第二三角形包围盒集也可以视为一个包围盒。
具体地,当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于预设个数时,计算机设备将第一三角形索引所对应的包围盒按照该包围盒所处位置分成第一预设数量份,获得第一预设数量份第一三角形包围盒集。包围盒所处位置可以是指包围盒的x轴、y轴、z轴中至少一种。例如,第一三角形索引所对应的包围盒的x轴的取值范围是0-100,那么可以将其分成10份,得到0-10、10-20...90-100一共十份。
计算机设备将第二三角形索引所对应的包围盒按照该包围盒所处位置分成第二预设数量份,获得第二数量份第二三角形包围盒集。
计算机设备对各份第一三角形包围盒集与各份第二三角形包围盒集进行相交判断,获得相交的三角形包围盒集对。例如,第一三角形包围盒集为A、B、C,第二三角形包围盒集为D、E、F,那么A分别与D、E和F相交判断,B分别与D、E和F相交判断,C分别与D、E和F相交判断,获得相交的三角形包围盒集对AD、EB和CF。
对于各相交的三角形包围盒集对,计算机设备获取相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒。计算机设备对相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒进行相交判断,获得相交的三角形包围盒对。例如,计算机设备将相交的三角形包围盒集对AD中的三角形包围盒进行相交判断,获得相交的三角形包围盒对。
本实施例中,当各相交的三角形包围盒集对中三角形包围盒的数量仍然大于该预设个数时,将三角形包围盒集对中的第一三角形包围盒分成第三预设数量份,将三角形包围盒集对中的第二三角形包围盒分成第四预设数量份,再将每份第一三角形包围盒和第二三角形包围盒进行相交判断,直至获得相交的三角形包围盒对。
例如,判断taList和tbList的三角形的个数,如果小于预设个数(例如30个),则直接对taList和tbList对应的三角形包围盒进行相交判断。如果某taList对应的一个三角形包围盒与tbList对应的一个三角形包围盒相交,则记录该相交三角形对IntersecSet。如果大于或等于预设个数,以taList和tbList所对应的包围盒的取值范围为0-100为例,那么将taList所对应的包围盒按照x轴分成10份,得到0-10、10-20…90-100等十个范围的第一三角形包围盒集。将tbList所对应的包围盒按照x轴分成10份,得到0-10、10-20…90-100等十个范围的第二三角形包围盒集。那么将10个第一三角形包围盒集和10个第二三角形包围盒集进行相交判断,得到相交的三角形包围盒集对。然后将三角形包围盒集对中的taList_subx和tbList_subx进一步进行判断。下一次判断将taList_subx看成taList,将tbList_subx看成tbList。如果taList和tbList的个数仍然较多,则再按照y轴做分隔。若按照y轴做分隔后的索引个数仍然较多,则再按照z轴做分隔。为避免分隔的深度过深,目前限制最深的节点为三层,也即按照z轴分隔之后不再进行分隔。
本实施例中,当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于预设个数时,说明三角形索引个数较多,因此需要将包围盒分成三角形包围盒集,对三角形包围盒集进行相交判断,再对三角形包围盒集中的三角形包围盒进行相交判断,能够提高布尔运算速度。
在一个实施例中,传统的布尔运算可能存在无法处理模型部分共面的情况、并且要求两个实体必须是严格的流形模型、对某些模型进行布尔运算会得到带破面的或者错误的结果、内存需求大和计算速度慢等一个或多个问题。
因此提出本发明实施例中的一种布尔运算方法,包括:
步骤(b1),获取第一模型和第二模型。
步骤(b2),获取第一模型的第一包围盒和第二模型的第二包围盒。
步骤(b3),确定第一包围盒和第二包围盒相交所得到的相交包围盒。
步骤(b4),确定第一模型中各三角形的第一三角形包围盒,以及确定第二模型中各三角形的第二三角形包围盒。
步骤(b5),获取与相交包围盒相交的第一三角形包围盒所对应的第一三角形索引。
步骤(b6),获取与相交包围盒相交的第二三角形包围盒所对应的第二三角形索引。
步骤(b7),当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于或等于预设个数时,将第一三角形索引所对应的包围盒分成第一预设数量份第一三角形包围盒集。
步骤(b8),将第二三角形索引所对应的包围盒分成第二预设数量份第二三角形包围盒集。
步骤(b9),对各份第一三角形包围盒集与各份第二三角形包围盒集进行相交判断,获得相交的三角形包围盒集对。
步骤(b10),对于各相交的三角形包围盒集对,对相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒进行相交判断,获得相交的三角形包围盒对。
步骤(b11),当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数小于预设个数时,对第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒进行相交判断,获得相交的三角形包围盒对。
步骤(b12),获取各三角形包围盒对所对应的相交三角形对。相交三角形对中包括第一相交三角形和第二相交三角形。
步骤(b13),对于各相交三角形对,将第一相交三角形的三条边与第二相交三角形相交判断,将第二相交三角形的三条边与第一相交三角形相交判断。
步骤(b14),当第一相交点坐标、第二相交点坐标中的至少一种的个数满足预设个数条件时,根据第一相交点坐标、第二相交点坐标中至少一种获得第一模型和第二模型相交所得的相交线段,获得第一模型和第二模型相交所得的相交线段集;第一相交点坐标是将第一相交三角形的三条边与第二相交三角形相交判断得到的;第二相交点坐标是将第二相交三角形的三条边与第一相交三角形相交判断得到的。
步骤(b15),当存在第一相交三角形和第二相交三角形共面时,将第一模型或者第二模型移动预设距离。
步骤(b16),返回执行对于各相交三角形对,将第一相交三角形的三条边与第二相交三角形相交判断,将第二相交三角形的三条边与第一相交三角形相交判断的步骤。
步骤(b17),根据相交线段集进行三角剖分,获得剖分后的三角形。
步骤(b18),根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合。
步骤(b19),根据第一模型的三角形集合和第二模型的三角形集合中各三角形进行连通性判断,获得各具有连通关系的三角形组合。
步骤(b20),确定各三角形组合的内外状态。
步骤(b21),将三角形组合的内外状态作为三角形组合中三角形的内外状态。
步骤(b22),获取未在三角形组合中的目标三角形。
步骤(b23),遍历目标三角形的周围三角形,直至遍历至边界三角形。
步骤(b24),获取边界三角形的三角形内外标签。
步骤(b25),根据三角形内外标签确定目标三角形的内外状态。
步骤(b26),根据布尔运算的类型和各三角形的内外状态进行布尔运算,获得布尔运算结果。
步骤(b27),当根据布尔运算结果,从相交线段集中确定对应至少三个三角形的目标相交线段时,将目标相交线段上的三角形的顶点移动至目标相交线段的端点,获得相交退化三角形。
步骤(b28),删除相交退化三角形。
步骤(b29),获取布尔运算结果中各三角形的法向量。
步骤(b30),当根据各三角形的法向量确定满足预设法向量条件的重叠三角形时,将重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形。
步骤(b31),删除重叠退化三角形。
步骤(b32),当布尔运算结果中存在相同的重复三角形时,保留重复三角形中的一个三角形,将重复三角形中其余三角形删除。
步骤(b33),确定布尔运算结果中各三角形的边所对应的三角形个数。
步骤(b34),当根据各三角形的边所对应的三角形个数,确定至少两条边均仅对应一个三角形的游离三角形时,删除游离三角形,获得流形模型。
本实施例中,获取第一模型和第二模型以及相交所得的相交线段集,根据相交线段集进行三角剖分,获得剖分后的三角形,根据剖分后的三角形进行布尔运算,获得布尔运算结果,由于此时所获得的布尔运算结果质量较差,因此对相交退化三角形、重叠退化三角形、重复三角形和游离三角形中至少一种进行删除处理,即在得到布尔运算结果后进行后处理获得流形模型,使得布尔运算之后得到的模型没有破面,没有错误结果,模型质量佳。此外,通过对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,使得模型可以进行多次连续布尔运算后仍然可以得到流形模型。此外,还采用了连通性判断、对索引对应的包围盒等方式用以提高布尔运算速度。
应该理解的是,虽然上述图1和图4的流程图中各个步骤按照箭头的指示依次显示,步骤(a1)至步骤(a7)、步骤(b1)至步骤(b34)中的各个步骤按照标号指示依次显示,但是这些步骤并不是必然按照箭头或者数字指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1和图4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,为一个实施例中布尔运算装置的结构框图,提供了一种布尔运算装置,包括模型获取模块502、线段集获取模块504、剖分模块506、运算模块508和处理模块510,其中:
模型获取模块502,用于获取第一模型和第二模型;
线段集获取模块504,用于获取第一模型和第二模型相交所得的相交线段集;
剖分模块506,用于根据相交线段集进行三角剖分,获得剖分后的三角形;
运算模块508,用于根据剖分后的三角形进行布尔运算,获得布尔运算结果;
处理模块510,用于对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
上述布尔运算装置,获取第一模型和第二模型以及相交所得的相交线段集,根据相交线段集进行三角剖分,获得剖分后的三角形,根据剖分后的三角形进行布尔运算,获得布尔运算结果,由于此时所获得的布尔运算结果质量较差,因此对根据布尔运算结果所得到的预设类型的三角形进行删除处理,即在得到布尔运算结果后进行后处理获得流形模型,使得布尔运算之后得到的模型没有破面,没有错误结果,模型质量佳。此外,通过对对根据布尔运算结果所得到的预设类型的三角形进行删除处理,使得模型可以进行多次连续布尔运算后仍然可以得到流形模型。
在一个实施例中,处理模块510用于根据布尔运算结果,从相交线段集中确定对应至少三个三角形的目标相交线段;将目标相交线段上的三角形的顶点移动至目标相交线段的端点,获得相交退化三角形;删除相交退化三角形。
本实施例中,由于流形模型是指一条边有且仅对应两个三角形的模型,因此当出现对应至少三个三角形的目标相交线段时,说明布尔运算结果出错,因此通过根据布尔运算结果,从相交线段集中确定对应至少三个三角形的目标相交线段,将目标相交线段上的三角形的顶点移动至目标相交线段的端点,获得相交退化三角形,并删除相交退化三角形,能够对多余的三角形进行去重,提高布尔运算所获得的布尔运算之后模型的质量。
在一个实施例中,处理模块510用于获取布尔运算结果中各三角形的法向量;根据各三角形的法向量确定满足预设法向量条件的重叠三角形;将重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形;删除重叠退化三角形。
本实施例中,由于在布尔运算结果中可能存在共面的且有面积重叠的部分,因此获取布尔运算结果中各三角形的法向量,根据各三角形的法向量确定满足预设法向量条件的重叠三角形,将重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形,删除重叠退化三角形,能够有效去除重叠三角形,提高布尔运算所得到的模型的准确性。
在一个实施例中,处理模块510用于当布尔运算结果中存在相同的重复三角形时,保留重复三角形中的一个三角形,将重复三角形中其余三角形删除。
本实施例中,在布尔运算结果中有可能出现重复三角形,保留重复三角形中的一个三角形,将重复三角形中其余三角形删除,能够对布尔运算结果中的三角形进行去重,提高布尔运算之后获得的模型的质量。
在一个实施例中,处理模块510用于确定布尔运算结果中各三角形的边所对应的三角形个数;根据各三角形的边所对应的三角形个数,确定至少两条边均仅对应一个三角形的游离三角形;删除游离三角形。
本实施例中,由于布尔运算结果是由三维模型得到的,流形模型是一条边有且仅对应两个三角形,那么至少两条边仅对应自身一个三角形的游离三角形即为有误的三角形,因此,通过确定布尔运算结果中各三角形的边所对应的三角形的个数,根据各三角形的边所对应的三角形个数,确定至少两条边均对应一个三角形的游离三角形,删除游离三角形,能够删除不符合流形模型的多余三角形,提高布尔运算之后获得的模型的质量。
在一个实施例中,运算模块508用于根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合;确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态;根据布尔运算的类型和各三角形的内外状态进行布尔运算,获得布尔运算结果。
本实施例中,根据剖分后的三角形更新第一模型的三角形集合和第二模型的三角形集合,确定第一模型的三角形集合和第二模型的三角形集合中各三角形的内外状态,根据布尔运算的类型和各三角形的内外状态进行布尔运算,能够准确获得布尔运算结果。
在一个实施例中,运算模块508用于根据第一模型的三角形集合和第二模型的三角形集合中各三角形进行连通性判断,获得各具有连通关系的三角形组合;确定各三角形组合的内外状态;将三角形组合的内外状态作为对应三角形组合中三角形的内外状态;获取未在三角形组合中的目标三角形;遍历目标三角形的周围三角形,直至遍历至边界三角形;获取边界三角形的三角形内外标签;根据三角形内外标签确定目标三角形的内外状态。
本实施例中,对第一模型的三角形集合和第二三角形的三角形集合中各三角形进行连通性判断,获得各具有连通关系的三角形组合,确定各三角形组合的内外状态,将三角形组合的内外状态作为三角形组合中三角形的内外状态,通过连通性判断能够快速得到大多数三角形的内外状态;通过获取未在三角形组合中的目标三角形,遍历目标三角形的周围三角形,直至遍历至边界三角形,获取边界三角形的三角形内外标签,根据三角形内外标签确定目标三角形的三角形内外状态,能够提高内外状态判断的速度,同时保证第一模型和第二模型中的三角形均判断出内外状态,提高布尔运算的准确性。
在一个实施例中,线段集获取模块504用于获取第一模型的第一包围盒和第二模型的第二包围盒;确定第一包围盒和第二包围盒相交所得到的相交包围盒;确定第一模型中各三角形的第一三角形包围盒,以及确定第二模型中各三角形的第二三角形包围盒;获取与相交包围盒相交的第一三角形包围盒所对应的第一三角形索引;获取与相交包围盒相交的第二三角形包围盒所对应的第二三角形索引;确定第一三角形索引所对应的第一三角形包围盒和第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对;获取各三角形包围盒对所对应的相交三角形对;获取各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集。
本实施例中,通过先确定第一包围盒和第二包围盒相交所得到的相交包围盒,通过相交包围盒筛选出可能位于模型相交区域的第一三角形索引和第二三角形索引,再通过这些索引对应的三角形筛选出三角形包围盒对,从而获得相交线段集,通过多次筛选,能够降低计算的复杂度,提高布尔运算效率。
在一个实施例中,相交三角形对中包括第一相交三角形和第二相交三角形。线段集获取模块504,用于对于各相交三角形对,将第一相交三角形的三条边与第二相交三角形相交判断,将第二相交三角形的三条边与第一相交三角形相交判断;当第一相交点坐标、第二相交点坐标中的至少一种的个数满足预设个数条件时,根据第一相交点坐标、第二相交点坐标中至少一种获得第一模型和第二模型相交所得的相交线段;第一相交点坐标是将第一相交三角形的三条边与第二相交三角形相交判断得到的;第二相交点坐标是将第二相交三角形的三条边与第一相交三角形相交判断得到的。
本实施例中,由于在三维模型中,第一相交三角形的边与第二相交三角形相交,与第二相交三角形的边与第一相交三角形相交不同,因此需要各自进行判断,从而获得相交线段集,提高布尔运算结果的准确性。
在一个实施例中,线段集获取模块504还用于当第一相交三角形和第二相交三角形共面时,将第一模型或者第二模型移动预设距离;获取移动后的各相交三角形对的相交线段,获得第一模型和第二模型相交所得的相交线段集。
本实施例中,当存在三角形共面的情况时,即当第一相交三角形和第二相交三角形共面时,将第一模型或者第二模型移动预设距离,能够有效避免三角形共面的情况,并且不需要重新确定相交三角形对,重新执行根据各相交三角形对确定第一模型和第二模型相交所得的相交线段,获得相交线段集的步骤即可,能够在保证模型准确性的同时减少布尔运算时间。
在一个实施例中,运算模块508用于当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于或等于预设个数时,将第一三角形索引所对应的包围盒分成第一预设数量份第一三角形包围盒集;
将第二三角形索引所对应的包围盒分成第二预设数量份第二三角形包围盒集;
对各份第一三角形包围盒集与各份第二三角形包围盒集进行相交判断,获得相交的三角形包围盒集对;
对于各相交的三角形包围盒集对,对相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒进行相交判断,获得相交的三角形包围盒对。
本实施例中,当第一三角形索引的个数和第二三角形索引的个数中至少一种的个数大于预设个数时,说明三角形索引个数较多,因此需要将包围盒分成三角形包围盒集,对三角形包围盒集进行相交判断,再对三角形包围盒集中的三角形包围盒进行相交判断,能够提高布尔运算速度。
关于布尔运算装置的具体限定可以参见上文中对于布尔运算方法的限定,在此不再赘述。上述布尔运算装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端设备,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种布尔运算方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各布尔运算方法实施例的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各布尔运算方法实施例的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例中流程。其中,本申请所提供的各实施例中所使用地对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (14)
1.一种布尔运算方法,其特征在于,所述方法包括:
获取第一模型和第二模型;
获取所述第一模型和所述第二模型相交所得的相交线段集;
根据所述相交线段集进行三角剖分,获得剖分后的三角形;
根据所述剖分后的三角形进行布尔运算,获得布尔运算结果;
对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
2.根据权利要求1所述的方法,其特征在于,所述对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,包括:
根据所述布尔运算结果,从所述相交线段集中确定对应至少三个三角形的目标相交线段;
将所述目标相交线段上的三角形的顶点移动至所述目标相交线段的端点,获得相交退化三角形;
删除所述相交退化三角形。
3.根据权利要求1所述的方法,其特征在于,所述对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,包括:
获取所述布尔运算结果中各三角形的法向量;
根据各三角形的法向量确定满足预设法向量条件的重叠三角形;
将所述重叠三角形中一个三角形的顶点向其余顶点偏移,获得重叠退化三角形;
删除所述重叠退化三角形。
4.根据权利要求1所述的方法,其特征在于,所述对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,包括:
当所述布尔运算结果中存在相同的重复三角形时,保留所述重复三角形中的一个三角形,将所述重复三角形中其余三角形删除。
5.根据权利要求1所述的方法,其特征在于,所述对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,包括:
确定所述布尔运算结果中各三角形的边所对应的三角形个数;
根据各三角形的边所对应的三角形个数,确定至少两条边均仅对应一个三角形的游离三角形;
删除所述游离三角形。
6.根据权利要求1所述的方法,其特征在于,所述根据所述剖分后的三角形进行布尔运算,获得布尔运算结果,包括:
根据所述剖分后的三角形更新所述第一模型的三角形集合和所述第二模型的三角形集合;
确定所述第一模型的三角形集合和所述第二模型的三角形集合中各三角形的内外状态;
根据布尔运算的类型和所述各三角形的内外状态进行布尔运算,获得布尔运算结果。
7.根据权利要求6所述的方法,其特征在于,所述确定所述第一模型的三角形集合和所述第二模型的三角形集合中各三角形的内外状态,包括:
根据所述第一模型的三角形集合和所述第二模型的三角形集合中各三角形进行连通性判断,获得具有连通关系的三角形组合;
确定所述三角形组合的内外状态;
将所述三角形组合的内外状态作为所述三角形组合中三角形的内外状态;
获取未在所述三角形组合中的目标三角形;
遍历所述目标三角形的周围三角形,直至遍历至边界三角形;
获取所述边界三角形的三角形内外标签;
根据所述三角形内外标签确定所述目标三角形的内外状态。
8.根据权利要求1所述的方法,其特征在于,所述获取所述第一模型和所述第二模型相交所得的相交线段集,包括:
获取所述第一模型的第一包围盒和所述第二模型的第二包围盒;
确定所述第一包围盒和所述第二包围盒相交所得到的相交包围盒;
确定所述第一模型中各三角形的第一三角形包围盒,以及确定所述第二模型中各三角形的第二三角形包围盒;
获取与所述相交包围盒相交的第一三角形包围盒所对应的第一三角形索引;
获取与所述相交包围盒相交的第二三角形包围盒所对应的第二三角形索引;
确定所述第一三角形索引所对应的第一三角形包围盒和所述第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对;
获取各所述三角形包围盒对所对应的相交三角形对;
获取各所述相交三角形对的相交线段,获得所述第一模型和所述第二模型相交所得的相交线段集。
9.根据权利要求8所述的方法,其特征在于,所述相交三角形对中包括第一相交三角形和第二相交三角形;
所述获取各所述相交三角形对的相交线段,包括:
对于各所述相交三角形对,对所述第一相交三角形的三条边与所述第二相交三角形进行相交判断,对所述第二相交三角形的三条边与所述第一相交三角形进行相交判断;
当第一相交点坐标、第二相交点坐标中的至少一种的个数满足预设个数条件时,根据所述第一相交点坐标、第二相交点坐标中至少一种获得所述第一模型和第二模型相交所得的相交线段;所述第一相交点坐标是将所述第一相交三角形的三条边与所述第二相交三角形相交判断得到的;所述第二相交点坐标是将所述第二相交三角形的三条边与所述第一相交三角形相交判断得到的。
10.根据权利要求8所述的方法,其特征在于,所述相交三角形对中包括第一相交三角形和第二相交三角形;
所述方法还包括:
当存在第一相交三角形和第二相交三角形共面时,将所述第一模型或者所述第二模型移动预设距离;
执行所述获取各所述相交三角形对的相交线段,获得所述第一模型和所述第二模型相交所得的相交线段集的步骤。
11.根据权利要求8所述的方法,其特征在于,所述确定所述第一三角形索引所对应的第一三角形包围盒和所述第二三角形索引所对应的第二三角形包围盒相交的三角形包围盒对,包括:
当所述第一三角形索引的个数和所述第二三角形索引的个数中至少一种的个数大于或等于预设个数时,将所述第一三角形索引所对应的包围盒分成第一预设数量份第一三角形包围盒集;
将所述第二三角形索引所对应的包围盒分成第二预设数量份第二三角形包围盒集;
对各份第一三角形包围盒集与各份第二三角形包围盒集进行相交判断,获得相交的三角形包围盒集对;
对于各相交的三角形包围盒集对,对相交的三角形包围盒集对中各第一三角形的包围盒和各第二三角形的包围盒进行相交判断,获得相交的三角形包围盒对。
12.一种布尔运算装置,其特征在于,所述装置包括:
模型获取模块,用于获取第一模型和第二模型;
线段集获取模块,用于获取所述第一模型和所述第二模型相交所得的相交线段集;
剖分模块,用于根据所述相交线段集进行三角剖分,获得剖分后的三角形;
运算模块,用于根据所述剖分后的三角形进行布尔运算,获得布尔运算结果;
处理模块,用于对根据所述布尔运算结果所得到的预设类型的三角形进行删除处理,获得流形模型。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111061661.1A CN113902870A (zh) | 2021-09-10 | 2021-09-10 | 布尔运算方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111061661.1A CN113902870A (zh) | 2021-09-10 | 2021-09-10 | 布尔运算方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113902870A true CN113902870A (zh) | 2022-01-07 |
Family
ID=79027570
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111061661.1A Pending CN113902870A (zh) | 2021-09-10 | 2021-09-10 | 布尔运算方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113902870A (zh) |
-
2021
- 2021-09-10 CN CN202111061661.1A patent/CN113902870A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1710720B1 (en) | Method of computer-aided design of a modeled object having several faces | |
JP2915826B2 (ja) | 干渉チェック装置 | |
KR20060047436A (ko) | 2차원 및 3차원 도형의 데이터를 컴퓨터의 메모리에기록하는 데이터 구조, 프로그램 및 기록 매체 | |
KR20160082481A (ko) | 워크피스의 가공의 시뮬레이팅 | |
EP2498192A2 (en) | Method for creating finite element model of rubber composite | |
CN105760570A (zh) | 选择对象集的视点 | |
CA2739398A1 (en) | Methods and systems for adapting a multi-block structured mesh topology of an object to a modification in its geometry | |
CN116432329A (zh) | 利于制造和结构性能的具有特征厚度控制的计算机辅助生成设计 | |
JP3526605B2 (ja) | 3次元的な物体の変形方法及びモデリングシステム | |
CN109509259A (zh) | 一种医学图像三维重建等值面网格提取方法 | |
CN116484487B (zh) | 墙板配筋方法、装置、设备及存储介质 | |
CN113902870A (zh) | 布尔运算方法、装置、计算机设备和存储介质 | |
JP6216211B2 (ja) | 3次元モデル生成装置、3次元モデル生成方法及びプログラム | |
CN103823922A (zh) | 设计对象的圆形交错图案 | |
JP2007193552A (ja) | 面モデルの作成装置と作成方法 | |
CN115601512B (zh) | 交互式三维重建方法、装置、计算机设备及存储介质 | |
CN117689832B (zh) | 交通标牌生成方法、装置、设备和存储介质 | |
JP5831054B2 (ja) | プログラム、情報処理装置、およびメッシュ修正方法 | |
US20240126933A1 (en) | Computer aided shape synthesis with connectivity filtering | |
CN116468866A (zh) | 一种交互式连续路面道路三维模型参数化建模的方法 | |
CN114998380A (zh) | 点云数据的分割方法、装置、计算机设备和存储介质 | |
JP6286591B2 (ja) | 配筋検証支援装置及びそのプログラム | |
Mäkinen | Line-segment insertion in constrained triangulations with applications in path-planning | |
CN106327524B (zh) | 一种快速流体图像表面追踪方法 | |
JP2020024546A (ja) | 六面体メッシュデータ生成装置、六面体メッシュデータ生成方法及び六面体メッシュデータ生成プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |