CN102682476B - 三角网格数据的布尔运算方法及其系统 - Google Patents

三角网格数据的布尔运算方法及其系统 Download PDF

Info

Publication number
CN102682476B
CN102682476B CN201210149907.5A CN201210149907A CN102682476B CN 102682476 B CN102682476 B CN 102682476B CN 201210149907 A CN201210149907 A CN 201210149907A CN 102682476 B CN102682476 B CN 102682476B
Authority
CN
China
Prior art keywords
triangle
array
new
grid
local
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.)
Active
Application number
CN201210149907.5A
Other languages
English (en)
Other versions
CN102682476A (zh
Inventor
叶建平
张吉帅
郭李云
张磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHENZHEN YORKTAL DMIT CO Ltd
Original Assignee
SHENZHEN YORKTAL DMIT CO Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHENZHEN YORKTAL DMIT CO Ltd filed Critical SHENZHEN YORKTAL DMIT CO Ltd
Priority to CN201210149907.5A priority Critical patent/CN102682476B/zh
Publication of CN102682476A publication Critical patent/CN102682476A/zh
Application granted granted Critical
Publication of CN102682476B publication Critical patent/CN102682476B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Image Generation (AREA)

Abstract

本发明适用于几何建模技术领域,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。借此,本发明降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。

Description

三角网格数据的布尔运算方法及其系统
技术领域
本发明涉及几何建模技术领域,尤其涉及一种三角网格数据的布尔运算方法及其系统。
背景技术
几何建模技术是指计算机里组织数据类型和数据结构以表示物体在空间的形状、尺寸及位置信息。目前大量使用在3D游戏和动画,计算机辅助设计,电影特效,数字城市,地质建模,分子生物学,数字医学等领域。三维空间的几何模型简称为三维模型,主要有线框模型、表面模型和实体模型三种表示方法,其中表面模型运用最为广泛,三角网格数据是表面模型的一种常用形式。几何模型布尔运算是指对两个模型的空间信息进行并、交、差等操作以得到新的模型。在建立和处理复杂模型时,可运用布尔运算对模型进行灵活的加工和修改。
现有的商用几何建模软件有AutoCAD,SolidWorks,Maya,3dMax,UG等,都集成了三维模型布尔运算功能,但目前的布尔运算方法要求参与布尔运算的模型必须是封闭的,而且在处理大规模的模型数据时速度较慢,存在多次运算导致软件速度下降甚至出错的问题。
综上可知,现有的几何建模技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。
发明内容
针对上述的缺陷,本发明的目的在于提供一种三角网格数据的布尔运算的方法,以降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;
为了实现上述目的,本发明提供一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:
A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
根据所述的方法,所述步骤A包括:
A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;
A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
根据所述的方法,所述步骤A1包括:
A11、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;
A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;
A13、使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;
A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
根据所述的方法,所述步骤B包括:
B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
B4、将在所述包围盒范围内的新规整化的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
根据所述的方法,所述步骤C包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
根据所述的方法,在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角网格的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
根据所述的方法,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者
以空间划分或者分叉树的方式查询相邻的顶点。
根据所述的方法,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者
在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者
所述步骤C4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。
根据所述的方法,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
为了实现本发明的另一发明目的,本发明还提供了一种用于实现上述任意一项方法的三角网格数据的布尔运算的系统,所述系统包括:
归并处理模块,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
规整化模块,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
重建模块,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始终消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有一个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。
附图说明
图1是本发明第一实施例提供的三角网格数据的布尔运算的系统结构示意图;
图2是本发明第二实施例提供的三角网格数据的布尔运算的方法流程图;
图3A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算前的三维模型示意图;
图3B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的差运算后的三维模型示意图;
图4A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算前的三维模型示意图;
图4B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的并运算后的三维模型示意图;
图5A是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算前的三维模型示意图;
图5B是本发明的一个实施例提供的进行三角网格数据的布尔运算中的交运算后的三维模型示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1,在本发明的第一实施例中提供了三角网格数据的布尔运算的系统100,包括:
归并处理模块10,用于对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
规整化模块20,用于提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
重建模块30,用于将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
在该实施例中,提供了一种三角网格数据的布尔运算的系统100,通过该系统进行三角网格数据的布尔运算,首先解决了三角网格的悬边、悬点消除和重合点归并问题,接着解决了提取包含相交区域的局部三角网格的问题,最后解决了碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接等问题。并且该系统可以是硬件单元或软硬件结合单元。降低了三角网格数据的布尔运算出错的概率,提高了布尔运算的计算速度;同时在进行内外关系判断时消除了对模型封闭性的依赖。
参见图2,在本发明的第二实施例中,提供了一种三角网格数据的布尔运算的方法,所述方法包括如下步骤:
步骤S201中,归并处理模块10对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
步骤S202中,规整化模块20提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
步骤S203中,重建模块30将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型。
在该实施例提供的三角网格数据的布尔运算的方法,将悬边、悬点消除和重合点归并很大程度上降低了布尔运算出错的概率;局部三角网格提取有效加快了布尔运算的计算速度;同时提出的内外关系判断方法消除了对模型封闭性的依赖。
在本发明的第三实施例中,所述步骤S201包括:
步骤A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
在该步骤中,使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
步骤A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
步骤A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者以空间划分或者分叉树的方式查询相邻的顶点。
步骤A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
步骤A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
步骤A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在该实施例中,悬边、悬点和重合点是几何模型中常见的拓扑歧义形式。在三角网格数据中,两点构成边,三条边按统一的顺时针或逆时针次序首尾相连构成三角形,相邻三角形以共享边的形式展开成为网格。悬边是指不属于任何三角形的一条边或多条相连的边,悬点是指不属于任何边的顶点,重合点是指顶点坐标相同或坐标间的欧氏距离小于某特定值的一个或多个顶点。具体的归并处理模块10对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格的实现方法如下:
a)使用线性浮点型数组保存三角形的顶点坐标,每个顶点的x、y、z坐标分别占用连续的三个浮点数,该数组称为顶点数组;使用线性整型数组保存三角网格的顶点索引,每个三角形的顶点分别占用连续的三个整型数,成为一个拓扑单元,该数组称为三角形数组;使用二维整型数组保存顶点所属的三角形索引,其中每一行对于一个顶点的相应索引信息,该数组称为相邻关系数组。构建新的顶点数组,三角形数组和相邻关系数组,以表示一个新规整的三角网格数据。
b)顺序访问输入三角形数组的拓扑单元,若已经全部访问完成,则转e步骤。取出三个顶点索引,若其中两个或三个索引相同,则该单元保存的是退化三角形,不作处理转步骤b,否则转c步骤。
c)根据三个顶点索引去输入顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中,即先检查数组中是否存在重合点,若存在则返回该顶点索引,若不存在则作为新坐标插入。检查的方法既可以是遍历所有顶点坐标,也可以空间划分或分叉树的方式来快速查询相邻顶点。
d)若这三个顶点在新顶点数组中的索引互不相同,则把三个索引作为一个拓扑单元插入新的三角形数组中。转回步骤b,取出下一个拓扑单元重新执行,否则丢弃这三个顶点,转回步骤b,取出下一个拓扑单元重新执行该步骤b。
e)顺序访问新构建的三角形数组,根据每个拓扑单元的三个顶点索引,将三角形索引写入顶点对应的相邻关系数组行中。
f)遍历相邻关系数组,若某行没有数据,则该行对应的顶点为悬点,标记为“不可用状态”。上述步骤完成后得到两个新规整化的三角网格。
在本发明的第四实施例中,步骤S202包括:
步骤B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
步骤B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
步骤B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
步骤B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中。
在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在该实施例中,提取包含相交区域的局部三角网格以参与布尔运算的两个规整化三角网格为输入,执行以下步骤:
a)分别遍历它们的顶点数组,计算出顶点x、y、z坐标的最大值和最小值,形成两个包围盒。
b)分别构建它们的局部三角网格的顶点数组,三角形数组和相邻关系数组。
c)分别遍历它们的三角形数组,若三角形有一个顶点处于对方的包围盒范围内,则把该三角形标记为“应删除状态”,并使用第三实施例中的步骤A3~A6的处理方式将该三角形的顶点、拓扑和相邻关系写入所述局部三角网格的顶点数组、三角形数组、相邻关系数组中。
在本发明的第五实施例中,步骤S203包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
在所述C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
在所述C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
并且,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;在所述步骤4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
在该实施例中,碰撞检测计算、三角剖分、网格重构、内外关系判断和布尔运算结果三角网格拼接以上述两个局部三角网格为输入,执行以下步骤:
a)采用常见的层次包围盒树碰撞检测方法,计算出相交三角形对,与通常的碰撞检测不同的是这里还要计算出每一个三角形上的交线,本发明取所有交点中距离最大的两个构成交线。
d)将相交三角形对标记为“应删除状态”,对每一个相交三角形,使用Delaunay(三角剖分算法)三角化方法根据交点和三角形顶点重新生成三角形,若交点同时在非相交的三角形上,也应该对其做同样操作。在Delaunay三角化过程中应该以三角形的边和交线作为约束条件,从而不破坏生成三角形和相邻三角形的共享边。
e)动态构建一个或多个新局部三角网格的顶点数组,三角形数组和相邻关系数组,并使用第三实施例中的步骤A3~A6的处理方式以交线为边界,将未标记为“应删除状态”原局部三角网格数据,以及Delaunay三角化生成的三角形写入新数组中。动态构建是因为原三角网格可能被交线分割成数目不确定的新局部三角网格,仅在获得交线后才能动态确定新局部三角网格的个数。
f)判断每一个新局部三角网格的与原局部三角网格的内外关系。并且可使用传统的射线法判断内外关系,也可以使用最近三角形法。而前者要求原三角网格是封闭的,后者没有封闭性要求。在判断内外关系时,为了处理新局部三角网格仅有一个三角形的情况,可以取三角形的形心而不是顶点参与计算。
g)根据内外关系和布尔运算类型标记出要输出的新局部三角网格的组合,使用第三实施例中的步骤A3~A6的处理方式输出结果三角网格。所述布尔运算类型包括了布尔运算中的差运算、并运算以及交运算等。
参见图3A和图3B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的差运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施差运算,取原第一个三角网格之内的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。
参见图4A和图4B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的并运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施并运算,取原第一个三角网格之外的部分和原第二个三角网格之外的部分,拼接成要输出的三角网格。
参见图5A和图5B,在本发明的一个实施例中,对于一个采用两个三角网格表示的三维模型,依照下述步骤进行三角网格数据的布尔运算中的交运算:
1)通过步骤S201获得到两个新的规整化的三角网格;
2)分别计算两个规整化三角网格的包围盒,提取处于对方包围盒内的局部三角网格;
3)采用常见的层次包围盒树碰撞检测方法计算交线;
4)根据交线剖分相交三角形,并以交线为边界,动态重构出一个或多个局部三角网格;
5)判断每一个新局部三角网格与原局部三角网格的内外关系,实施交运算,取原第一个三角网格之内的部分和原第二个三角网格之内的部分,拼接成要输出的三角网格。
综上所述,本发明通过对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型,实现了三角网格数据的快速布尔运算方法,相应的还提供了三角网格数据的布尔运算的系统。该方法及系统在计算过程中始终消除并避免产生悬边、悬点和重合点,从而极大降低了拓扑歧义引发计算出错的概率;局部三角网格提取开发了局部性,有效的提高了三角网格数据的布尔运算速度;另外,在采用最近三角形法进行内外关系判断时,提取三角形的形心判断内外关系,可以处理仅有一个三角形的三角网格;并且采用最近三角形法判断内外关系,消除了对原三角网格封闭性的依赖。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (6)

1.一种三角网格数据的布尔运算的方法,其特征在于,所述方法包括如下步骤:
A、对采用三角网格表示的三维模型进行悬边、悬点消除和重合点归并处理,获得新规整化的两个三角网格;
B、提取包含所述新规整化的两个三角网格的相交区域的局部三角网格;
C、将所述局部三角网格进行碰撞检测计算、三角剖分、网格重构、内外关系判断以及布尔运算,拼接且输出新的三角网格表示的三维模型;
所述步骤A包括:
A1、分别获取所述三角网格中的每个三角形的顶点数组、三角形数组以及相邻关系数组,并且分别构建两个新的三角网格;
A2、顺序访问每个所述三角形的三角形数组的拓扑单元,若已经完成全部所述三角形访问,则执行步骤A5;
若没有完成全部所述三角形访问,则取出每个所述三角形的三个顶点索引;若所述三个顶点索引中的两个或者三个顶点索引相同时,则所述拓扑单元为退化单元三角形,丢弃所述退化单元三角形,并重新开始执行所述步骤A2,顺序取出下一个拓扑单元;在所述三个顶点索引中的三个顶点索引均不相同时,则执行步骤A3;
A3、根据所述三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到新构建的顶点数组中;
A4、将所述三个顶点索引作为一个拓扑单元插入新构建的三角形数组中,并且返回所述步骤A2,顺序取出下一个拓扑单元,重新开始执行所述步骤A2;
A5、顺序访问所述新构建的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
A6、查看所述三角网格中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;
所述步骤B包括:
B1、分别查看所述新规整化的两个三角网格的顶点数组,计算所述新规整化的两个三角网格的X、Y、Z坐标的最大值和最小值,构成两个包围盒;
B2、分别构建所述新规整化的两个三角网格的局部三角网格的顶点数组、三角形数组和相邻关系数组;
B3、分别查看所述新规整化的两个三角网格的局部三角网格的三角形数组,若其中一个所述新规整化的三角网格的三角形有一个顶点处于另一个所述新规整化的三角网格的包围盒范围内,则将所述三角形标记为应删除状态;
B4、将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;
所述步骤C包括:
C1、采用层次包围盒树碰撞检测方法,计算出所述新规整化的两个三角网格的局部三角网格的相交三角形对,以及所述相交三角形对中的每一个三角形上的交线;
C2、将所述相交三角形对标记为应删除状态,对每一个相交三角形使用三角化方法根据其交点和三角形顶点重新生成三角形;
C3、动态构建一个或者多个新局部三角网格的顶点数组、三角形数组和相邻关系数组,以所述交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及使用所述三角化方法生成的三角形写入所述新局部三角网格的数组中;
C4、判断每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系;
C5、根据判断后的所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系和布尔运算类型,标记需要输出的新局部三角网格的组合,并输出对应的三角网格。
2.根据权利要求1所述的方法,其特征在于,所述步骤A1包括:
A11、使用线性浮点型数组保存所述三角网格中的每个三角形的顶点坐标,获得所述三角网格的顶点数组;
A12、使用线性整数型数组保存所述三角网格的顶点索引,获得所述三角网格的三角形数组;
A13、使用二维整型数组保存所述三角网格中的每个三角形的顶点所属的三角形索引,获得所述三角网格的相邻关系数组;
A14、根据所述三角网格的顶点数组、三角形数组以及相邻关系数组分别构建两个新的三角网格。
3.根据权利要求1所述的方法,其特征在于,在所述步骤B4中通过步骤D1~D4将在所述包围盒范围内的三角形的顶点、拓扑单元以及相邻关系写入所述新规整化的两个三角网格的局部三角网格的顶点数据、三角形数组以及相邻关系数组中;所述步骤D1~D4为:
D1、分别根据在所述包围盒范围内的三角形的顶点的三个顶点索引在所述新规整化的两个三角网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述新规整化的两个三角网格的局部三角网格的顶点数组中;
D2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述新规整化的两个三角网格的局部三角网格的三角形数组中;并且返回所述步骤D1,顺序取出下一个拓扑单元,重新开始执行所述步骤D1;
D3、顺序访问所述新规整化的两个三角网格的局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
D4、查看所述新规整化的两个三角网格的局部三角网格的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C3中通过步骤E1~E4将以交线为边界,将未标记为应删除状态的所述新规整化的两个三角网格的局部三角网格数据,以及所述三角化方法生成的三角形写入所述新局部三角网格的数组中;所述步骤E1~E4为:
E1、分别根据所述步骤C2中的所述相交三角形对和所述重新生成的三角形的顶点的三个顶点索引在所述一个或者多个新局部网格的顶点数组获取顶点坐标,并以不重合的方式插入到所述一个或者多个新局部网格的顶点数组中;
E2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述一个或者多个新局部网格的三角形数组中;并且返回所述步骤E1,顺序取出下一个拓扑单元,重新开始执行所述步骤E1;
E3、顺序访问所述一个或者多个新局部网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
E4、查看所述一个或者多个新局部网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态;和/或
在所述步骤C5中通过步骤F1~F4输出对应的三角网格;所述步骤F1~F4为:
F1、分别根据所述标记需要输出的新局部三角网格的三角形的顶点的三个顶点索引在所述顶点数组获取顶点坐标,并以不重合的方式插入到所述标记需要输出的新局部三角网格的顶点数组中;
F2、在所述三个顶点索引中的三个顶点索引均不相同时,将所述三个顶点索引作为一个拓扑单元插入所述标记需要输出的新局部三角网格的三角形数组中;并且返回所述步骤F1,顺序取出下一个拓扑单元,重新开始执行所述步骤F1;
F3、顺序访问所述标记需要输出的新局部三角网格的三角形数组,根据每个拓扑单元的三个顶点索引将三角形索引写入顶点对应的相邻关系数组行中;
F4、查看所述标记需要输出的新局部三角网格的中的所有相邻关系数组,将所述相邻关系数组中没有数据的行所对应的顶点标记为不可用状态。
4.根据权利要求1所述的方法,其特征在于,在所述以不重合的方式插入到新构建的顶点数组中的步骤中,首先检测所述顶点数组中是否有重合点,所述检测方式包括查看所有顶点坐标;或者
以空间划分或者分叉树的方式查询相邻的顶点。
5.根据权利要求1所述的方法,其特征在于,在所述步骤C1中取所述相交三角形对的所有交点中距离最大的两条构成所述交线;或者
在所述步骤C2中采用三角化方法的过程中,以所述三角形的边和交线作为约束条件;或者
所述步骤C4中通过射线法或者最近三角形法对所述每一个新局部三角网格与所述新规整化的两个三角网格的局部三角网格的内外关系进行判断。
6.根据权利要求5所述的方法,其特征在于,在通过所述最近三角形法进行所述内外关系的判断时,提取所述三角形的形心参与计算。
CN201210149907.5A 2012-05-15 2012-05-15 三角网格数据的布尔运算方法及其系统 Active CN102682476B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210149907.5A CN102682476B (zh) 2012-05-15 2012-05-15 三角网格数据的布尔运算方法及其系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210149907.5A CN102682476B (zh) 2012-05-15 2012-05-15 三角网格数据的布尔运算方法及其系统

Publications (2)

Publication Number Publication Date
CN102682476A CN102682476A (zh) 2012-09-19
CN102682476B true CN102682476B (zh) 2015-11-25

Family

ID=46814339

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210149907.5A Active CN102682476B (zh) 2012-05-15 2012-05-15 三角网格数据的布尔运算方法及其系统

Country Status (1)

Country Link
CN (1) CN102682476B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022865B (zh) * 2015-06-30 2018-04-17 西安交通大学 一种基于stl模型布尔运算的飞机油箱内表面模型提取方法
US10109105B2 (en) * 2016-07-12 2018-10-23 Nature Simulation Systems Inc. Method for immediate boolean operations using geometric facets
CN106325211B (zh) * 2016-11-16 2019-01-04 清华大学 一种基于stl模型交线环的材料去除算法
CN106649992B (zh) * 2016-11-17 2020-05-12 复旦大学 舰船与尾迹的网格模型的融合与优化方法
CN108171793B (zh) * 2018-01-19 2021-10-15 北京建筑大学 一种探查层叠区域三角网格的方法
CN110544255B (zh) * 2019-07-26 2020-05-19 山东大学 面向3d打印的三角网格孔洞的分割方法及系统
CN113345091A (zh) * 2020-02-18 2021-09-03 广东博智林机器人有限公司 一种重叠工作面的面积统计方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101510225A (zh) * 2009-03-26 2009-08-19 山东理工大学 产品stl模型布尔运算方法
CN100583084C (zh) * 2005-06-30 2010-01-20 微软公司 对程序几何对象进行三角剖分

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100583084C (zh) * 2005-06-30 2010-01-20 微软公司 对程序几何对象进行三角剖分
CN101510225A (zh) * 2009-03-26 2009-08-19 山东理工大学 产品stl模型布尔运算方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于TIN的体布尔算法及其地质应用;兰向荣等;《地理与地理信息科学》;20080731;第24卷(第4期);第6-10页 *

Also Published As

Publication number Publication date
CN102682476A (zh) 2012-09-19

Similar Documents

Publication Publication Date Title
CN102682476B (zh) 三角网格数据的布尔运算方法及其系统
CN102194253B (zh) 一种面向三维地质层面结构的四面体网格生成方法
CN102306396B (zh) 一种三维实体模型表面有限元网格自动生成方法
CN102682103B (zh) 一种面向海量激光雷达点云模型的三维空间索引方法
CN101807308B (zh) 三维模型分割装置和方法
Kim et al. Quasi-triangulation and interworld data structure in three dimensions
CN104966317B (zh) 一种基于矿体轮廓线的三维自动建模方法
CN105022865A (zh) 一种基于stl模型布尔运算的飞机油箱内表面模型提取方法
CN101976468B (zh) 一种多分辨率动态地形可视化方法及系统
Zhao et al. Mathematical morphology-based generalization of complex 3D building models incorporating semantic relationships
Feito et al. Fast and accurate evaluation of regularized Boolean operations on triangulated solids
Marchandise et al. CAD and mesh repair with radial basis functions
CN103413297A (zh) 基于一体化三维gis模型的切割方法
CN104361632A (zh) 一种基于Hermite径向基函数的三角网格补洞方法
CN107464286B (zh) 三维城市模型中的孔洞修复方法及装置、设备及可读介质
CN102737407A (zh) 三角网格数据的拟合优化的方法及其系统
CN102819865A (zh) 一种大地电磁三维地质结构模型的建模方法
CN103236088A (zh) 基于复合网格的三维地质体构造建模方法与系统
CN1936962A (zh) 一种基于pc平台的三维游戏中大型地形生成方法
CN111243094A (zh) 一种基于点灯法的三维模型精确体素化方法
CN105225272A (zh) 一种基于多轮廓线三角网重构的三维实体建模方法
Guo et al. Line-based 3d building abstraction and polygonal surface reconstruction from images
CN105022910A (zh) 一种三维CSG-BRep模型的拓扑元素的访问方法
CN101546438B (zh) 基于约束狄郎宁三角网技术的多个区域拓扑层叠置分析方法
CN101609565A (zh) 基于L-Rep模型的三维实体布尔运算方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant