一种使用几何面的即时布尔运算方法与流程

文档序号:18093566发布日期:2019-07-06 10:54阅读:608来源:国知局
一种使用几何面的即时布尔运算方法与流程

本发明提供了一种用于构建三维几何建模的即时布尔运算方法,从初级几何对象到在产品设计、制造和仿真中广泛应用的计算机辅助设计、计算机制图、实体造型系统和曲面造型系统。机械工业、文化体育,有几何形状的任意地方,就可能有cad/cg应用。



背景技术:

计算机硬件是如此高度发达,甚至普通的个人电脑都可以用来安装和运行商业cad/cg系统,它们通常具有布尔操作功能,包括and、or和not。pc组件包括输入设备,如鼠标和键盘,主计算机,屏幕和打印机。软件系统包含几何和非几何功能。图1为pc机的主要组成部分,图2a到2d描绘了一个典型的cad/cg软件系统架构。

布尔运算为cad/cg/实体造型系统提供了一个从不同的几何形状构建复杂实体几何对象的一般程序,包括初级几何对象、扫描对象和挤压对象。lee应用布尔运算来划分曲面[leeuspatentno.6,307,555]。

布尔运算可以依赖构造实体几何(csg)来记录主几何对象和操作序列的层次结构,这在技术上很容易实现,然而边界表示(b-rep)被认为是一种支持更多几何图形的更加灵活的方法,如扩展的几何图形[gursoz,1991]。

本发明提出五(5)个布尔运算命令:组合、交集、排除、差和除法,它们直接作用于从用于绘制函数的几何面分解出来的三角形且不需要数据结构的构造实体几何或边界表示。本发明中定义的数据结构是一些简单的类,即包含在本发明中的算法是简洁的且易于实现,且这五(5)个命令允许用户不仅可以通过选择几何对象的类型来创建几何模型,还可以通过定义面来创建几何模型。图3展示了一个有6个面的箱状体和一个有不同面的球体截然不同的结果。

虽然这五(5)个命令是为实体建模和曲面建模而设计的,本发明所包含的修剪命令为曲面造型提供了一种替代方法,且其标识一个面是否以不同的方式模糊。

本发明提出了一种不同于csg和b-rep的数据结构和算法,包含在本发明中的算法包括三角形-三角形相交、分割三角形与子相交线,确定一个面是否模糊,并重新分组三角形形成几何模型。



技术实现要素:

本发明提供了一个用于执行布尔运算的数据结构和算法的集合,来生成复杂的几何模型,并直接在由几何面分解的三角形上进行处理,用于由计算机硬件绘制数据以及绘制如opengl库的函数。一个几何形体,例如球面、圆锥、圆柱、箱状体、三角形面、挤压对象或扫描对象和曲面块,经过三角化,生成一个用于显示的集,记为triangleset。当为执行布尔运算选择了两个几何形体时,相邻的三角形被添加到triangleset中的每个三角形中,每个形体形都产生了另一个集合,bloptriangleset。

本发明描述的布尔运算的第二步是在三角形集之间搜索和创建相交线。它首先找到一对相交的三角形:这个系统为每个三角形建立一个轴对齐的最小边界框,并检查两个边界框是否重叠以决定是否需要对边-三角形相交进行计算。当边-三角形相交点位于三角形内时,该系统完成搜索任务,并将点数据存储到相交线集内。

为了扩展当前相交线,此方法跟踪相邻三角形并计算边-三角形相交点,直到相交线闭合。

这个发明描述的布尔运算的第三步是拆分三角形。相交线的每一段引用两个三角形,其中的每个三角形具有至少一个子相交线,它包含一个或多个线段,线段将三角形划分为三个或更多的小三角形。拆分三角形后,删除原始三角形,并将这些较小的三角形添加到bloptriangleset中。

这个发明描述的布尔运算的第四步是确定每个三角形是否可见。如果一个三角形被其他三角形所包围,则它是不可见的。三角形是可见的,表示它位于另一个对象之外。

本发明所描述的布尔运算的第五步是重新组合三角形:其中一些必须被删除,有些需要放在一起,重组共有五种情况。这个发明描述的布尔运算的最后一步是将bloptriangleset映射到triangleset。

所述的曲面裁剪命令也包含六步骤。最初,该系统将曲面映射到bloptriangleset,并将其裁剪轮廓线之一映射成为挤压形状以形成bloptriangleset。步骤二、三和六与布尔运算相同。步骤四是检查三角形在裁剪轮廓线的左侧还是右侧,以决定是否需要保留。步骤五,重新组合三角形,在系统裁剪曲面时,仅删除左侧或右侧三角形。

附图说明

图1显示个人电脑的主要部件,一般包括一台主机,输入设备,包括鼠标和键盘、显示器和打印机。高度发达的cad/cg系统可以在pc机上运行。

图2a到2d描述了一个软件体系结构,其中一个cad/cg/几何建模系统采用布尔运算和曲面修剪来建立几何模型。

图3表示不同面产生的各种结果,甚至是它们的原始几何对象类型大小是相同的:左边的示例包含较少的面,右边的示例包含较多的面。在这些例子中,布尔交运算适用于方块和球体。

图4是使用几何面的即时布尔运算的流程图。

图5描述了一个三角形有三个相邻三角形,给定一个三角形及其两个顶点,在实体模型中只有一个相邻三角形。

图6a和图6b显示两个最小边界箱状体不重叠和两个箱状体相互重叠。每个三角形实际上都有一个最小边界框。如果两个箱状体不重叠,包含在两个箱状体中的三角形不相交。若箱状体重叠,则边-三角形相交计算是必需的。

图7a到7c描述三种三角形相交情况:交点下降在三角形内部,交点位于三角形的边上,交点就是顶点一个三角形的。

图8a到8d显示搜索候选集,其允许系统接下来遍历三角形,用于通过边-三角形计算来扩展交点线。三角形充满颜色是最后一对相交的三角形,未填充的三角形由成员m_neigtri的数据结构triangle3dex,它引导系统搜索最小值创建交点线时的一组三角形。集合包含一个三角形、两个三角形或零。

图9a到9d显示四个相交线的例子。一个箱状体与一个球体相交,球体有不同的面数。

图10a到10c给出三个以暗色显示的子相交线的例子。图10a有一个子交点线,图10b有两个,图10c有一个。

图11a到11d显示四个示例,子交点线把三角形分成三角形集。

图12a到12h显示了一个delaunny二维网格序列,其中插入每个交点一步一步地进入网格。

图13是图12a到12h的delaunny二维网格weston方法的流程图。

图14显示了三角形及其delaunny二维网格。原始三角形被删除,只有delaunay网格是为后期计算预留的。

图15显示t缓冲区中t可能是正的和负的。如果大小为负t和正t在t-buffer中是平衡的,所涉及的三角形被另一个对象封闭且模糊。

图16a到16e显示五个使用长方体和球体进行布尔运算的示例。图16f和图16g描述了两个布尔运算结果的内部网格:组合和排除。

图17显示了修剪封闭表面、变形球体的轮廓线,并产生两个孔。

图18给出了一个实施例,其中通过轮廓线修剪挤压的面、管并产生了一个孔。

具体实施方式

本发明定义了这些数据结构:继承了用于绘制几何对象的point3d、triangle3d、triangle3dset存储面的point3dex、triangle3dex、bloptriangel3dset。当执行布尔运算时,所述系统映射绘制面到bloptriangel3dset,且所有的下列程序集中在bloptriangel3dset的数量和属性。图4为描述本发明实施的布尔运算的主要程序的流程图。在布尔程序完成以后,所述系统将存储在bloptriangel3dset中的结果映射到绘制面。

cad系统常用面表示几何对象,如球面、锥面、箱状体、圆柱、挤压对象或扫描对象。一个面包括三个或更多点,面通常被分解成三角形,便于计算。一个箱状体有六个面分解成十二个三角形。球体可能有十八个面,构成二十四个三角形。球体也可以使用超过1000个面和三角形来表示。图3显示用不同的面绘制的球面。在绘制几何对象时,该方法使用triangle3dset作为三角形集数据结构,它包含两个属性:三维点集和三角形集,其中triangle3d引用point3d。

布尔运算的三角形

本发明描述的布尔运算方法定义了三个关键类:bloptriangleset、triangle3dex和point3dex。

datatypeii可能是整数、长整数、无符号长整数或其他整数类型。datatypeiii是浮点数据类型,如浮动、双精度甚至长双精度。

类triangle3dex说明每个三角形可能有三个相邻三角形。在bloptriangleset中每个三角形仅存储一个副本。用箱状体为示例,最简单的情况是它有十二个三角形,即使它们中的每个三角形都有三个相邻三角形,bloptriangleset仍然总共存储十二个三角形。

技术上triangle3d可能具有属性m_normal。如果datatypei和datatypeiv是同一类型,例如,double,那么属性m_normal可以继承。

数据映射

将triangle3dset映射到bloptriangleset的过程包括从绘制状态复制点集和三角形集,并填充默认属性(defaultattribute)。数据映射包含以下过程:

1)将点从triangle3dset中复制到bloptriangleset,并确保没有相同的点。

2)将三角形从triangle3dset中复制到bloptriangleset。

3)对于bloptriangleset中的每个三角形,设置其相邻的三角形。

4)计算bloptriangleset中每个三角形的法线并建立平面方程。

备注1:给定两个点a和b,如果|xa-xb|<ε且|ya-yb|<ε且|za-zb|<ε,其中ε为正值浮点数字,例如5.0e-16,则b与a相同。

备注2:当将点从绘制数据映射到bloptriangleset时,系统检查bloptriangleset中是否存在相同的点。

备注3:具有三点的三角形定义了一个平面,其数学公式为ax+by+cz+d=0,在类平面内部,将其记录为四个数字的数组,如m_abcd[4]。

备注4:三角形,如果其三点不相同,则始终具有有效的法线。即使它与m_abcd有关,一份单独的副本仍使事情变得更加清晰,便于以后处理。

备注5:每个三角形有三条边,当没有重叠点时,它在实体模型中有三个相邻三角形。图5显示了一个例子:一个充满暗色的三角形和它的三个相邻三角形。当关注用于曲面修剪的曲面块时,三角形的一个或两个相邻三角形可能为空。

第一交点

每个三角形都有三个顶点,它们定义一个最小边界箱状体。该方法采用了轴线对齐最小边界框的概念。

给定一对三角形,如果它们的边界框不重叠,则两个三角形没有相交点;否则,该方法进行边-三角形相交计算。

如果三角形ta的一条边与三角形tb定义的平面相交,而相交点位于三角形tb内,则相交点(pet)是第一个交点。如果相交点位于tb之外,则将对中的三角形位置(ta、tb)对调为(tb、ta),并再进行边-三角形相交计算。

给定三角形ta的第i条边,i∈[0,2],它的公式是:p=pi+t*(p(i+1)%3-pi);由三角形tb定义的平面,其公式为:ax+by+cz+d=0。如果两个方程式有一个解,则边与平面相交。如果边-平面相交点落在三角形tb内,则该点是边-三角形的相交点。

扩展相交线

此方法将相交点的数据结构定义为pntegtri:

根据在三角形上的相交点的位置,pntegtri,一种简单的相交点,可分成如图7a到7c所示的三类。

1)最普通的情况是边-三角形相交,相交点位于三角形ta边上,并在三角形tb内;

2)边-边相交,相交点位于三角形ta的边上,并位于三角形tb的边上;

3)边-顶点相交,相交点位于三角形ta的边上和三角形tb的顶点。

当扩展相交线时,系统捕获下一个相邻的三角形,并检查边-三角形相交的情况,直到相交线闭合或遍历完所有三角形。

子相交线

相交线通过一组三角形,将其中的每个三角形都划分为多个分区。三角形内相交线的线段构成子相交线。图10a到10c显示三个的例子,其中暗线是子相交线。实际上,三角形可能有零条、一条、两条或三条子相交线。

由下面的算法显示如何获取具有至少一个子相交线的三角形的有效参考值:

对于每个相交线,

对于每个相交点,获取三角形的参考值:(m_tri0,m_tri1),

对三角形对中的每一个三角形,是否对每一个相交线进行了拆分,

对每个相交线,

搜索并生成子相交线

给定一个有效的三角形和一条相交线,决定相交点pet是否属于三角形的子相交线,此方法检查是否:

1)相交点在三角形的边上,

2)或相交点在三角形内,

3)或相交点等于三角形的顶点。

拆分三角形

给定一组子相交线,拆分一个三角形,此方法

1)删除重复的交点。如果相邻的交点是相同的,这个方法只保留一个副本。

2)确定始未交点的位置:检查每个交点位于三角形的哪个边上。

3)拆分三角形的上部分区、下部分区和中间分区,如果这个分区存在。

给定一个平面上的一组点,代表一个三角形的区域,将平面分解成一组三角形,本发明修改了狄劳尼(delaunny)二维网格沃森(watson)方法,原文是在1981年出版的[沃森,1981]。

狄劳尼二维网格有三个数据集:三角形集,记录生成的三角形;已删除的三角形集,只存储已删除的三角形;一个多边形,记录已删除三角形集的轮廓。

修改后的狄劳尼二维网格沃森方法,包含以下步骤:

1)建立一个三维轮廓点序列,链接子相交线和三角形的顶点,如果存在的话。

2)根据三角形的法线,将三维点序列映射到二维平面上,产生二维点序列。

3)添加四点,形成一个大一些的边界框,包含所有的二维点。

4)假设边界框的一个对角线将该框拆分为两个三角形,并将其添加到三角形集中。

5)将除边界框之外的每个点逐步插入到三角形集合中。

a)对于每个点,检查三角形集合中的每个三角形,它的外接圆是否包含此点或最后一个线段通过该三角形。如果条件满足,将其从三角形集合中删除,并将其添加到已删除的三角形集。

b)使用已删除的三角形集来生成多边形并立即清空已删除的三角形集。

c)使用多边形生成三角形集并将它们添加到三角形集合中。

图12a至12h显示了狄劳尼二维网格序列。

删除已拆分的三角形

在上面的步骤中,一个已拆分的三角形得到了一个标记。遍历所有三角形后,此方法将删除有标记的三角形。图14显示了一个删除结果。

不可见的面

给定两组三角形a和b,如果a包围b的三角形tb,那么tb就不可见;如果b包围a的三角形ta,那么ta是不可见的。

要检查三角形t是否被对象o包围,本发明使用以下步骤。

1)计算三角形t的质心c;

2)构造一条直线l:p=c+t*n,它穿过质心并沿三角形t的法线n;

3)对于对象o中的每个三角形to,计算直线与平面相交点。如果有一个有效的相交点,且交点落在三角形to内,然后计算t,它由质心c和相交点位置确定,并把t添加到深度缓冲区中。

4)检查t缓冲区中存储的负t和正t数量的大小。如果t缓冲区中负t的大小等于正t的大小,则三角形t是不可见的。

当执行曲面裁剪时,此系统执行下面的过程以确定三角形是否不可见。

1)将有关曲面面片bloptriangleset的每个point3dex的成员m_id设置为0。

2)按升序或降序标记该曲面裁剪中相交线的point3dex的m_id,这取决于所述相交线和裁剪轮廓线是否在同一个方向上,例如,两者都是逆时针的。

3)根据每个三角形的成员m_points的m_id,确定它是否为边界三角形。

4)对于每个边界三角形,确定它是在裁剪轮廓线的左侧还是右侧,并将其相邻的三角形设置为左或右。

重组面

本发明给定了五种布尔运算,每个都有不同的重组过程。

组合操作,逻辑上是or,合并两个实体几何对象,生成一个新对象,通常丢弃不可见的区域并保留从外部查看可见的部分,具有以下过程。

1)删除对象a不可见的三角形;

2)删除对象b不可见的三角形;

3)合并对象a和b的三角形。

相交操作在逻辑上是and,它使用两个几何对象的公共区域创建一个实体几何对象,并丢弃共享公共区域之外的a和b的任何部分,具有以下过程。

1)删除对象a的非不可见三角形;

2)删除对象b的非不可见三角形;

3)合并对象a和b的三角形。

排除操作通过剔除两个几何图形对象的公共区域并保持不共享分区,从而生成一个实体几何对象,其步骤如下:

1)将对象a的不可见三角形复制到缓冲区中,buffera;

2)删除对象a中的不可见三角形;

3)将对象b的不可见三角形复制到对象a;

4)从对象b中删除不可见的三角形;

5)将buffera中的三角形复制到对象b;

6)反转a和b每个不可见的三角形的法线;

7)合并两个对象的三角形。

差分操作,通过删除b内部的任何a部分,将几何对象b与几何对象a切掉,具有以下过程。

1)删除对象a不可见的三角形;

2)删除对象b的非不可见三角形;

3)反转对象b中每个三角形的法线;

4)将对象a和b的三角形合并。

分割运算将两个实体几何对象a和b划分为三个对象,两个几何对象的公共部分,a和b的不共享部分,具有以下过程。

1)将对象a的不可见三角形复制到缓冲区中,buffera;

2)将对象b的不可见三角形复制到buffera;

3)将对象a的不可见三角形复制到另一个缓冲区,bufferb;

4)删除对象a的不可见三角形;

5)将对象b的不可见三角形复制到对象a;

6)删除对象b的不可见三角形;

7)复制对象a存储在buffera中的不可见三角形到对象b;

8)反转a和b的每个不可见三角形的法线。

映射用于绘制面

布尔运算完成后,此方法将bloptriangleset映射用于绘制三角形。

1)bloptriangleset中的每个point3dex都映射到triangleset中的一个point3d;

2)bloptriangleset中的每个triangle3dex都映射到triangleset中的一个triangle3d。

美国专利文件

6,307,55510/2001lee345/423

其他出版物

″booleansetoperationsonnon-manifoldboundingrepresentationobjects″,e.gursozetal.,computer-aideddesign23(1991)jan./feb.no.1london,gb.

“computingthen-dimensionaldelaunaytessellationwithapplicationtovoronoipolytopest”,d.f.watson,thecomputerjournal24(2)1981.

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1