CN101609565A - 基于L-Rep模型的三维实体布尔运算方法 - Google Patents
基于L-Rep模型的三维实体布尔运算方法 Download PDFInfo
- Publication number
- CN101609565A CN101609565A CNA2009100271267A CN200910027126A CN101609565A CN 101609565 A CN101609565 A CN 101609565A CN A2009100271267 A CNA2009100271267 A CN A2009100271267A CN 200910027126 A CN200910027126 A CN 200910027126A CN 101609565 A CN101609565 A CN 101609565A
- Authority
- CN
- China
- Prior art keywords
- rep
- model
- rep model
- dimensional
- boolean operation
- 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
- 239000007787 solid Substances 0.000 title claims abstract description 58
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000005070 sampling Methods 0.000 claims abstract description 42
- 230000008520 organization Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 238000003491 array Methods 0.000 claims description 2
- 238000004364 calculation method Methods 0.000 abstract description 43
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 6
- 238000010276 construction Methods 0.000 description 4
- 238000013499 data model Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000005641 tunneling Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- SEQDDYPDSLOBDC-UHFFFAOYSA-N Temazepam Chemical compound N=1C(O)C(=O)N(C)C2=CC=C(Cl)C=C2C=1C1=CC=CC=C1 SEQDDYPDSLOBDC-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000000059 patterning Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000012732 spatial analysis Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公布了一种基于L-Rep模型的三维实体布尔运算方法:根据实际应用所需的精度要求,将基于B-Rep模型的三维实体转化为基于采样线的L-Rep模型,以X、Y、Z三个轴向的采样线来表达三维实体对象包括外部边界、内部边界以及内部断裂在内的几何信息;将两个三维实体间的三维布尔运算转化为L-Rep模型中采样线间的一维布尔运算,求出基于L-Rep模型表达的三维实体间布尔运算结果对象;再将基于L-Rep模型表达的三维实体间布尔运算结果转化为B-Rep模型,作为最终计算结果,以便为其他应用所使用。本发明可以在满足实际应用精度需要的前提下,实现三维实体间快速、稳定、健壮的实体布尔运算。
Description
技术领域
本发明涉及计算机图形学、计算几何、CAD、GIS领域,具体涉及B-Rep模型及其在计算机内存中的组织方式、L-Rep模型、B-Rep模型与L-Rep模型的相互转化算法、L-Rep模型的实体布尔运算等内容。
背景技术
长期以来,空间实体的表达以集合论、拓扑数学为理论基础,其中两个空间实体通过布尔代数算子(如交、并、差)构建出一个新的空间实体被称为空间实体的布尔运算。在实际应用中,Rhind将三维空间实体布尔运算列为三维GIS可能包括的10项功能,并分析了切割断面、开挖隧道(tunneling)、建筑(building)等现实应用,指出这类应用均可以归结为三维空间实体间的布尔运算。
田宜平等采用B-Rep模型进行三维地质建模,将三维交互式分析操作归结为三维矢量剪切的组合,以线条、填充多边形、曲面和注释四种图元的剪切为基础,建立了盆地三维数字构造-地层体的矢量剪切模型。Muuss和Butler在CAD几何造型理论研究中将三维实体间布尔运算归结为求交、分类和归并三个步骤,给出了三维实体间布尔运算的理论与算法框架。
这类方法需要进行大量的几何计算与拓扑重构操作,因此在计算速度与算法的健壮性上一直存在很大的问题。这也是基于矢量模型的三维空间分析方法所面临的共性问题。
发明内容
本发明的目的在于解决目前基于B-Rep模型的实体布尔运算方法存在着算法复杂、计算量大与稳定性难以保障等问题,实现一种能够满足实际应用精度需求的三维快速实体布尔运算方法。本发明的核心是将基于B-Rep模型表达的三维实体对象转化一种以采样线段为基本构成元素的L-Rep模型,将三维的实体间布尔运算转化为一维的采样线段间的布尔运算,并将实体布尔运算结果L-Rep模型转化为B-Rep模型。
本发明的技术方案是:基于L-Rep模型的三维实体布尔运算方法,该方法包括以下四个部分:
步骤1读入两个实体模型数据并构建基于B-Rep模型的内部数据组织;
步骤2将B-Rep模型转化为以X、Y、Z三个轴向的采样线(Sample Line,SL)为基本要素的L-Rep模型;
步骤3实现两个L-Rep模型中采样线间的一维布尔运算;
步骤4将基于L-Rep模型表达的结果实体对象转化为B-Rep模型。
所述步骤1是指将存储于外部文件中的实体模型描述数据读入内存中,重建其表面几何与拓扑邻接关系,并以基于B-Rep模型的内部数据组织方式加以组织,作为算法后续步骤实施的基础。
所述步骤2中L-Rep模型是以X、Y、Z三个轴向上按一定间距排列的采样线组成,每条采样线中记录其起点坐标(x、y、z)及其与三维实体对象外部边界、内部边界及内部断裂面的交点相对于起点坐标的深度信息。
所述步骤2是在步骤1的基础上,根据应用精度需要及实体模型的轴对称包围盒等基本信息,计算L-Rep模型的基本参数;通过转化算法,逐个处理B-Rep模型中每个外部边界多边形、内部边界多边形和内部断裂面多边形,构建L-Rep模型中X、Y、Z三个轴向的采样线,将基于B-Rep模型表达的三维实体对象转化为基于L-Rep模型表达。
所述步骤3是在步骤2的基础上,对于两个L-Rep模型中处于同一轴线,相同投影坐标的采样线进行一维布尔运算。以两个L-Rep模型中的所有采样线的一维布尔运算结果,作为两个L-Rep模型的布尔运算结果。
所述步骤4是指将步骤3中所获得的L-Rep模型间布尔运算结果,提取三维实体对象的外部边界、内部边界及内部断裂信息,重建出基于B-Rep模型表达的三维实体对象,并将结果以原文件格式保存在外部文件中。
本发明旨在解决现阶段基于B-Rep模型三维实体布尔运算中存在的算法复杂、计算量大与稳定性难以保障等问题,提出了面向地理空间实体对象的L-Rep模型。该模型可以很好地表达实体的外部边界与内部裂缝、接触面等复杂几何信息,同时可以完整地表达实体内部的属性信息,能够满足地理空间对象的建模需求,并给出了从B-Rep模型构建L-Rep模型的快速构建算法。在此基础上,提出了基于L-Rep模型的布尔运算方法,该方法将三维实体的布尔运算转化为L-Rep模型中线段与线段的一维布尔运算,极大地降低了算法的复杂性、提高了算法效率与数值稳定性,实现了针对三维实体的快速布尔运算。最后给出了从L-Rep模型的表面重建算法,将L-Rep模型重新转化为B-Rep模型,以此满足其他应用的需求。
附图说明
图1是本发明实施例1的流程图
图2a是本发明实施例1L-Rep模型中的第一种采样点
图2b是本发明实施例1L-Rep模型中的第二种采样点
图2c是本发明实施例1L-Rep模型中的第三种采样点
图3a是本发明实施例1采样线与三角形棱边一种相交情况
图3b是本发明实施例1采样线与三角形棱边另一种相交情况
图4a是本发明实施例1采样线与三角形顶点相交情况
图4b是本发明实施例1采样线与三角形顶点相交情况
图5是本发明实施例1选择4条采样线
图6是本发明实施例1虚拟体素的创建示意图
图7a是本发明实施例1采样线之间的交布尔运算示意图
图7b是本发明实施例1采样线之间的并布尔运算示意图
图7c是本发明实施例1采样线之间的差布尔运算示意图
图8a是本发明实施例1带内部接触点的采样线之间的交布尔运算示意图
图8b是本发明实施例1带内部接触点的采样线之间的并布尔运算示意图
图8c是本发明实施例1带内部接触点的采样线之间的差布尔运算示意图
图9a是本发明实施例1基于L-Rep模型的实体布尔运算示意图之一
图9b是本发明实施例1基于L-Rep模型的实体布尔运算示意图之二
图9c是本发明实施例1基于L-Rep模型的实体布尔运算示意图之三
图10是本发明实施例1球体与立方体的B-Rep模型
图11是本发明实施例1立方体减去球体的差对象的B-Rep模型
具体实施方式
下面结合附图和实施例做进一步详细说明。
实施例1
如图1所示,基于L-Rep模型的三维实体布尔运算方法,该方法包括以下四个部分:
步骤1读入两个实体模型数据并构建基于B-Rep模型的内部数据组织;
步骤2将两个B-Rep模型转化为以X、Y、Z三个轴向的采样线(Sample Line,SL)为基本要素的L-Rep模型;
步骤3实现两个L-Rep模型中采样线间的一维布尔运算;
步骤4将基于L-Rep模型表达的结果实体对象转化为B-Rep模型。
本实例以Windows XP SP3为操作系统环境,Visual Studio 2008 SP1为开发环境,C++为开发语言,以斯坦福大学提出的PLY文件格式为三维实体对象B-Rep模型外部文件格式。
具体实施步骤如下:
步骤1读入两个实体模型数据并构建基于B-Rep模型的内部数据组织。
基于B-Rep模型的三维实体在计算机内存中的数据组织方式是指利用计算机编程语言所实现的内存数据结构,组织与管理基于B-Rep模型的三维空间实体对象,描述实体对象的几何及拓扑邻接信息。
在Windows XP SP3平台下,Visual Studio 2008 SP1建立C++语言的Win32动态链接库,命名为LRepBoolean。本实施例LRepBoolean中采用的数据结构为半边结构,包括CHalfEdgeVertex、CHalfEdgeEdge、CHalfEdgeCell、CHalfEdgeSolid四部分,详细定义如下:
Vertex的数据结构:包括点的ID号、点的坐标和法向量坐标,以及从这个顶点出发的任意一条半边。
class CHalfEdgeVertex
{
public:
int id; //存放点的ID号
float x; //点的x坐标
float y; //点的y坐标
float z; //点的z坐标
float nx;//(nx,ny,nz)是点的法向量坐标
float ny;
float nz;
CHalfEdgeEdge*edge;//从顶点出发的一条半边
};
Edge的数据结构:半边数据结构以“边”为核心。一条边表示成拓扑意义上方向相反的两条“半边”。由该半边的终点、邻接面、下一条半边和该半边的对边组成。通过这样的设计,可以很容易地找到该半边所属的Cell,对边的Cell以及下一半边的Cell。
class CHalfEdgeEdge
{
public:
CHalfEdgeVertex*endPoint;//该条半边的终点
CHalfEdgeEdge*pair;//该条半边的对边,如果是边界边,则对边为NULL
CHalfEdgeCell*cell;//该边的邻接面
CHalfEdgeEdge*next;//该边的下一条边
};
Cell的数据结构:以半边为基础构成的环(Loop)。由Cell的ID号,任意一条邻接边和它的法向量构成。
class CHalfEdgeCell
{
public:
int id; //该Cell的ID号
CHalfEdgeEdge *edge; //该Cell的任意一条邻接边
float nx; //该Cell的法向量(nx,ny,nz)
float ny;
float nz;
};
Solid的数据结构:由两部分组成,public部分包括Vertex坐标排序列表和ID排序列表,采用C++语言标准模板库STL中的Map数据结构进行管理;Edge的列表和Cell的列表,采用STL中的Vector数据结构进行管理。private部分包括Vextex到其发射半边的坐标排序列表、Vextex到其发射半边的ID号排序列表,由STL中的Map管理。
其中,Vertex列表采用Map通过自定义严格弱排序来实现二叉平衡树,目的是为了在生成线状缓冲区细分圆面的时候,列表中点的坐标值从小到大的顺序排序,ID号和坐标值排序相对应,这样在构建三角形的时候就可以按序取出所需的点。
Private部分的两个map管理,一个是为了添加三角形的各点坐标,一个是为了添加三角形各点的ID号。
class CHalfEdgeSolid
{
public:
map<ChalfEdgeVertex,HalfEdgeVertex*,vertexLessEqual>
vertexMapByCoordList;//顶点的坐标排序列表
map<int,CHalfEdgeVertex*>vertexMapByIdList;
//顶点的ID排序列表
vector<CHalfEdgeEdge*>edgeList;//边列表
vector<CHalfEdgeCell*>cellList;//面列表
private:
map<CHalfEdgeVertex*,vector<CHalfEdgeEdge*>>vertexMap2Edges_Coord;
map<CHalfEdgeVertex*,vector<CHalfEdgeEdge*>>vertexMap2Edges_Index;
};
步骤2将B-Rep模型转化为以X、Y、Z三个轴向的采样线为基本要素的L-Rep模型。
L-Rep模型及其在计算机内存中的数据组织方式是指在Dexel模型基础上提出的一种能够描述三维实体对象外部边界、内部边界及内部断裂的三维空间数据模型及其在内存中的数据组织方式。
L-Rep模型建立的基本方法是在XOY、XOZ、YOZ三个平面上,分别沿Z轴方向、Y轴方向和X轴方向,按一定采样间距向三维空间实体对象发射采样线段(SampleLine,SL),每条采样线段记录其与三维空间实体相交的交点,三个轴向上所有的采样线段的集合构成的L-Rep模型。
采样线是组成L-Rep模型的核心,而采样线中记录的是其对三维空间实体的采样点信息。为了完整表达空间对象的集合及属性信息,采样线中记录三种类型的采样点,分别是边界点(Boundary Point)、接触点(Touch Point)和内部点(Interior Point),如附图2a-2c所示。
附图2a中为边界点,用于记录射线与实体对象外表面(Shell)的交点。在一个射线中边界点的个数必然是成对出现的;附图2b中为接触点,用于记录射线与实体内部断裂面、接触面的交点;附图2c中为内部点,用于记录实体内部的属性信息,可以根据需要录该点的空间坐标、采样点的类型及采样点的属性信息。由于同属于一条采样线的采样点的三个坐标值中有两个是相同的,因此仅记录该采样点相对于采样线上第一个采样点的相对深度信息。
对采样点创建C++类CSamplePoint、CSampleLine、CLineRep,采样点C++类定义如下所示:
Class CSamplePoint
{
public:
int id;
spType pointType;
double depth;
}
其中id为该采样点的唯一标示,可以根据该标示在属性表中查询该点的属性信息;pointType为该采样点的类型;depth为该采样点相对于采样线起点的相对深度,用于记录该点的空间位置。
L-Rep模型中的采样线是模型的核心部分,其中记录了其轴向、起点坐标(x、y、z)以及其上的所有采样点信息,其C++类定义如下:
class CSampleLine
{
public:
LineOriented m_oriented;
double m_x,m_y,m_z;
list<CSamplePoint*>spList;
}
其中LineOriented用于标示采样线的轴向信息;m_x、m_y、m_z用于记录该采样线与三维实体第一个交点的三维空间坐标,也是其上所有采样点的基准坐标信息;spList为存放所有采样点信息的STL容器list,其中所有的采样点按照其深度值depth进行排序。
用于描述一个三维实体对象的L-Rep模型除了采样点和采样线信息外,还需要记录实体对象的包围盒信息以及采样线的采样步长等基本参数。其C++类定义如下:
class CLineRep
{
public:
double m_xMin,m_xMax,m_yMin,m_yMax,m_zMin,m_zMax;
double m_xStep,m_yStep,m_zStep;
int m_xDim,m_yDim,m_zDim;
CSampleLine**m_lineGroupXY;
CSampleLine**m_lineGroupXZ;
CSampleLine**m_lineGroupYZ;
}
其中m_xMin、m_xMax、m_yMin、m_yMax、m_zMin、m_zMax为三维实体对象的轴对称包围盒参数;m_xStep、m_yStep、m_zStep为X、Y、Z三个方向上的采样步长;m_xDim、m_yDim、m_zDim为X、Y、Z三个方向的采样线个数;m_lineGroupXY、m_lineGroupXZ、m_lineGroupYZ用于存放X、Y、Z三个轴向的采样线信息。
在实现CsamplePoint、CsampleLine及ClineRep基础上,实现B-Rep模型到L-Rep模型的转换函数CLRep*BRep2LRep(CHalfEdge*brepModel,int xDim,int yDim,intzDim)及函数CHlafEdge*LRep2BRep(CLRep*lrepModel)。使用者调用该函数实现从B-Rep模型转化为L-Rep模型。
从B-Rep模型到L-Rep模型的转化算法包括:
构成L-Rep模型的采样线的个数与对实体描述的精度成反比,所以在满足实体布尔运算的精度的前提下,L-Rep模型中的采样线数目会非常大。假设三维实体对象B-Rep模型是由n个三角形组成,L-Rep模型在X、Y、Z轴上分别采样mx、my、mz条采样线。那么最直观的构建方法是逐个采样线与B-Rep模型中的每个三角形进行相交计算,得到每条采样线上交点的信息。此时的算法复杂度为O((mx×my+mx×my+my×mz)×n)。当处理真实的复杂地理空间实体对象时,计算速度难以满足实际应用的需求。以某矿体数据为例,表面三角形个数为3520,如果按照X、Y、Z轴分别采样100次,则最终的L-Rep模型构成需要计算的线段与三角形相交次数维(100×100+100×100+100×100)×3520=105600000≈108。因此研究快速的L-Rep模型构建算法是实现基于L-Rep模型的三维实体布尔运算的前提。
为了加快从B-Rep模型构建L-Rep模型的速度,采用将B-Rep边界面元向XOY、XOZ、YOZ三个平面投影的方法来计算L-Rep模型中的采样线信息。以三角形面元的B-Rep模型为例阐述算法。
首先,确定L-Rep模型的基本参数,包括:三维实体的轴对称包围盒信息(m_xMin,m_xMax,m_yMin,m_yMax,m_zMin,m_zMax);根据布尔运算所需的计算精度确定的X、Y、Z三个轴向的采样线采样间距(m_xStep,m_yStep,m_zStep);从包围盒信息及采样间距计算出X、Y、Z方向的采样线个数(m_xDim,m_yDim,m_zDim);创建三个二维数组,用于记录X、Y、Z三个轴向的采样线(m_lineGroupXY,m_lineGroupXZ,m_lineGroupYZ)。
其次,将B-Rep模型中逐个面元(以三角形为例)T3向XOY、YOZ、XOZ三个轴向进行投影,计算该方向的采样线中交点信息。算法流程如下:
1)计算T3的平面方程
设三角形T3的的三个顶点分别为v0(x0,y0,z0),v1(x1,y1,z1),v2(x2,y2,z2)。三角形平面方程为Ax+By+Cz+D=0。根据以下公式,获得A、B、C、D参数。
m0=x1-x0
m1=y1-y0
m2=z1-z0
m3=x2-x0
m4=y2-y0
m5=z2-z0
A=m1*m5-m2*m4
B=-(m0*m5-m2*m3)
C=m0*m4-m1*m3
D=-A*x0-B*y0-C*z0
2)将T3投影倒指定的平面上,获得投影三角形T2
根据指定的轴向,将T3投影到相应的平面上,获得一个二维的投影三角形T2;
3)计算T2范围内的采样线信息
根据投影三角形T2计算其二维轴对称包围盒(triXMin,triXMax,triYMin,triYMax),将包围盒坐标转化为对应的采样线二维数组的下标(xStart,xEnd,yStart,yEnd),
xStart=(int)((triXMin-this->m_xMin)/this->m_xStep);
xEnd=(int)((triXMax-this->m_xMin)/this->m_xStep);
yStart=(int)((triYMin-this->m_yMin)/this->m_yStep);
yEnd=(int)((triYMax-this->m_yMin)/this->m_yStep);
对在投影三角形T2的二维轴对称包围盒内的采样线,依次计算其与T2的关系。求出采样线的起点的空间坐标(x,y)。
x=this->m_xMin+this->m_xStep*xi;
y=this->m_yMin+this->m_yStep*yi;
判断该起点与投影三角形T2的空间关系,分为三种情况:1、该点在T2外,则直接忽略该采样线;2、该点在T2内,则该采样线需要中需要加入关键点;3、该点在T2的边上或顶点上,此时需要特殊处理,后续将专门阐述。
对于需要加入关键点的情况,首先计算出关键点的空间坐标:
z=(0-D-A*x-B*y)/C
根据该采样线的下标,在采样线数组中获得采样线:
CSampleLine*sLine=this->m_lineGroupXY[xi+yi*this->m_xDim];
将该关键点加入采样线中:
sLine->spListaddKeyPoint(z)
当采样线与三角形的棱边或顶点相交时,如果出现附图3a或附图4a的情况,则该采样线与三角形的交点需要计算,如果出现附图3(b)或附图4b则该采样线是和实体对象的边界(内部或外部)相切而过,此时不需要将该交点加入采样线中。
当采样线与三角形棱边或顶点相交时,此时可能会出现该采样线和实体对象的边界(内部或外部)相切而过,因此需要进行专门的判断。这类特殊情况的判断是L-Rep模型生成中的关键。
采样线与三角形的棱边相交会有两种情况,如附图3a、3b所示。附图3a中,采样线与三维实体为相交情况,此时该点需要加入采样线中;附图3b中,采样线与三维实体为相切情况,此时该点忽略。由此可以看出,一个交点是否需要加入采样线中取决与该点的邻域与采样线是否为相交状态,可以通过分析棱边两侧三角形T1、T2与该棱边L相对的顶点V1、V2的空间关系来判断。将V1、V2及棱边L按照当前采样线的轴向投影至相应平面上获得投影点V1′,V2′及L′,如果V1′,V2′位于L′的两侧,则说明该采样线穿面上获得投影点V1′,V2′及L′,如果V1′,V2′位于L′的两侧,则说明该采样线穿越了交点的邻域,需要将该交点加入采样线中,反之则忽略。
采样线与三角形的顶点相交会有两种情况,如附图4a、4b所示。附图4a中,采样线与三维实体为相交情况,此时该点需要加入采样线中;附图4b中,采样线与三维实体为相切情况,此时该点忽略。与交点位于三角形棱边的情况相同,一个交点是否需要加入采样线中取决与该点的邻域与采样线是否为相交状态。可以通过将该问题转化为判断采样线与该交点周围所有棱边相交的情况来分别判断,只要有一个棱边与采样线的交点可以忽略,则该采样线与此三角形的顶点的相交即为忽略,反之则需将该交点加入采样线中。
L-Rep模型的实体布尔运算算法中:基于L-Rep模型的三维实体表达是以采样线为基本单位,因此实体间的布尔运算被简化为扫描线与扫描线间的一维布尔运算,因此运算速度快,精度高。运算原理如附图7所示。
对于内部存在裂缝、断裂面等内部边界的实体对象,进行布尔运算时,可以将原采样线按照接触点分为若干子部分,分别进行采样线间的布尔运算。如附图8a-8c所示。
基于L-Rep模型进行三维实体布尔运算被分为两部分:第一部分是构建实体A和实体B的L-Rep模型,第二部分是在实体A、B的L-Rep模型中的采样线进行一维的布尔运算。构建实体A和实体B的L-Rep模型算法流程如下:
1)获取实体A、B的共同最大包围盒(cxMin,cxMax,cyMin,cyMax,czMin,czMax);
2)以同样的步长与共同最大包围盒分别构建实体A、B的L-Rep模型。
步骤3实现两个L-Rep模型中采样线间的一维布尔运算
对于两个L-Rep模型中处于同一轴线,相同投影坐标的采样线进行一维布尔运算;以两个L-Rep模型中的所有采样线的一维布尔运算结果,作为两个L-Rep模型的布尔运算结果。
由于采用了共同最大包围盒以及相同的步长,因此实体A、B的L-Rep模型的采样线在相同轴向上、相同位置上是相互重叠的,对于所有重叠的采样线,使用前文所描述的采样线布尔运算方法进行一维线段与线段间的布尔运算。附图9a-9c中,第一部分为实体A、第二部分为实体B,构建其L-Rep模型,图中边框包围部分为对实体A、B进行布尔运算的结果部分C。
L-Rep模型与基于栅格模型的三维数据场不同,在各个轴向上可以明确地限定出边界的位置,因此可以避免从栅格模型的三维数据场中重建表面的MC(Marching Cubes)算法需要遍历所有单元的缺陷,提高了算法的效率。算法的基本方法是从L-Rep模型中采样线上的边界点和接触点构建位于实体对象边界的虚拟体元,然后采用经典的MC算法从虚拟体元中构建实体对象几何表面。算法流程如下:
1)以L-Rep模型基本参数构建一个虚拟的三维规则数据场(Virtual DataSet),建立一个空队列用于存放描述对象几何信息的虚拟体元;
2)按照逐行逐个的顺序处理XOY、XOZ、YOZ三个平面中采样线数组内的采样线SP。每条采样线在数组中的下标为(i,j),获取其相邻采样线(i+1,j)、(i+1,j+1)及(i,j+1),如附图5所示;
3)对于选中的采样线SP,取其边界点及内部接触点,根据几何坐标转化为虚拟三维规则数据场中体素的坐标,建立一个虚拟体素单元,将对应边界点及内部接触点的几何坐标信息记录在虚拟体素单元的棱边上,如附图6所示;
4)当处理完XOY、XOZ、YOZ三个采样线数值后,按照传统MC算法处理保存下的描述对象边界几何信息的所有虚拟体元,即可获得对象外部与内部的边界几何信息,重建实体对象的B-Rep模型。
步骤5:创建C++类CLRepBoolean,实现函数CLineRep*boolOp(BooleanOpType opType,char*sourceBrepFileName,char*toolBrepFileName,int xDim,int yDim,int zDim),其中opType描述了布尔运算类型(交、并、差),sourceBrep与toolBrep为需要进行布尔运算的两个三维实体对象的B-Rep模型外部文件名及路径,xDim、yDim、zDim描述了布尔运算的精度要求,精度越高则值取的越大,精度要求低则值取的越小。该函数中,首先以步骤1中所描述的半边数据结构存储从外部文件中读取的B-Rep模型数据;其次使用步骤2中所描述的方法,实现B-Rep模型到L-Rep模型的转化;再使用步骤3所描述方法实现L-Rep模型间的布尔运算;最后使用步骤4所描述的方法实现步骤3中获得的布尔运算结果对象的L-Rep模型向B-Rep模型的转化。
附图10为球体与立方体的B-Rep模型,附图11为立方体减去球体后的差对象的B-Rep模型。在本实例中,xDim、yDim、zDim均取值为100。
Claims (8)
1、基于L-Rep模型的三维实体布尔运算方法,该方法包括以下四个部分:
步骤1读入两个实体模型数据并构建基于B-Rep模型的内部数据组织;
步骤2将B-Rep模型转化为以X、Y、Z三个轴向的采样线为基本要素的L-Rep模型;
步骤3实现两个L-Rep模型中采样线间的一维布尔运算;
步骤4将基于L-Rep模型表达的结果实体对象转化为B-Rep模型。
2、根据权利要求1所述的布尔运算方法,其特征是,
所述步骤1是指将存储于外部文件中的实体模型描述数据读入内存中,重建其表面几何与拓扑邻接关系,并以基于B-Rep模型的内部数据组织方式加以组织,作为算法后续步骤实施的基础;
所述步骤2是指在步骤1的基础上,根据应用精度需要及实体模型的轴对称包围盒等基本信息,计算L-Rep模型的基本参数;通过转化算法,逐个处理B-Rep模型中每个外部边界多边形、内部边界多边形和内部断裂面多边形,构建L-Rep模型中X、Y、Z三个轴向的采样线,将基于B-Rep模型表达的三维实体对象转化为基于L-Rep模型表达;
所述步骤3是指在步骤2的基础上,对于两个L-Rep模型中处于同一轴线,相同投影坐标的采样线进行一维布尔运算;以两个L-Rep模型中的所有采样线的一维布尔运算结果,作为两个L-Rep模型的布尔运算结果;
所述步骤4是指将步骤3中所获得的L-Rep模型间布尔运算结果,提取三维实体对象的外部边界、内部边界及内部断裂信息,重建出基于B-Rep模型表达的三维实体对象,并将结果以原文件格式保存在外部文件中。
3、根据权利要求1所述的布尔运算方法,其特征是:所述步骤1中,所述L-Rep模型建立的方法是:在XOY、XOZ、YOZ三个平面上,分别沿Z轴方向、Y轴方向和X轴方向,按一定采样间距向三维空间实体对象发射采样线段,每条采样线段记录其与三维空间实体相交的交点,三个轴向上所有的采样线段的集合构成的L-Rep模型。
4、根据权利要求1所述的布尔运算方法,其特征是:所述步骤3中,两个L-Rep模型中采样线间的一维布尔运算是:对于两个L-Rep模型中处于相同轴向,并在相应的平面上投影坐标相同的采样线,进行一维布尔运算,将布尔运算的结果作为两个L-Rep模型布尔运算结果的一部分。
5、根据权利要求1所述的布尔运算方法,其特征是:所述B-Rep模型到L-Rep模型的转化按照以下算法进行:根据包括应用精度需要及实体模型的轴对称包围盒在内的基本信息,计算出L-Rep模型的基本参数,包括轴对称包围盒参数(xMin,xMax,yMin,yMax,zMin,zMax)、采样线间距(xStep,yStep,zStep)和X、Y、Z三个轴向采样线个数(xDim,yDim,zDim),创建YOZ平面、XOZ平面、XOY平面中空白采样线段数组;依次处理B-Rep模型所表达的实体对象的外部边界多边形、内部边界多边形与内部裂缝多边形,将每个多边形分别投影至XOY、XOZ、YOZ平面,计算出与其相交的Z、Y、X三个轴向的采样线,并将交点加入采样线中,最终实现将B-Rep模型转化为L-Rep模型。
6、根据权利要求1所述的布尔运算方法,其特征是:所述步骤4包括以下步骤:以L-Rep模型基本参数构建一个虚拟的三维规则数据场;按照逐行逐个的顺序处理XOY、XOZ、YOZ三个平面中采样线数组内的采样线SP;每条采样线在数组中的下标为(i,j),获取其相邻采样线(i+1,j)、(i+1,j+1)及(i,j+1);对于选中的采样线SP,取其边界点及内部接触点,根据几何坐标转化为虚拟三维规则数据场中体素的坐标,建立一个虚拟体素单元,将对应边界点及内部接触点的几何坐标信息记录在虚拟体素单元的棱边上;当处理完XOY、XOZ、YOZ三个采样线数值后,按照传统MC(Marching Cubes)算法处理保存下的描述对象边界几何信息的所有虚拟体元,即可获得对象外部与内部的边界几何信息,重建出实体对象的B-Rep模型,并保存至外部数据文件中。
7、根据权利要求1所述的布尔运算方法,其特征是:所述从L-Rep模型到B-Rep模型的转化算法是:从L-Rep模型中采样线上的边界点和接触点构建位于实体对象边界的虚拟体元,然后采用经典的MC算法从虚拟体元中构建实体对象几何表面。
8、根据权利要求1所述的布尔运算方法,其特征是:从L-Rep模型到B-Rep模型的转化算法流程如下:
1)以L-Rep模型基本参数构建一个虚拟的三维规则数据场,建立一个空队列用于存放描述对象几何信息的虚拟体元;
2)按照逐行逐个的顺序处理XOY、XOZ、YOZ三个平面中采样线数组内的采样线SP。每条采样线在数组中的下标为(i,j),获取其相邻采样线(i+1,j)、(i+1,j+1)及(i,j+1);
3)对于选中的采样线SP,取其边界点及内部接触点,根据几何坐标转化为虚拟三维规则数据场中体素的坐标,建立一个虚拟体素单元,将对应边界点及内部接触点的几何坐标信息记录在虚拟体素单元的棱边上;
4)当处理完XOY、XOZ、YOZ三个采样线数值后,按照传统MC算法处理保存下的描述对象边界几何信息的所有虚拟体元,即可获得对象外部与内部的边界几何信息,重建实体对象的B-Rep模型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100271267A CN101609565A (zh) | 2009-05-22 | 2009-05-22 | 基于L-Rep模型的三维实体布尔运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100271267A CN101609565A (zh) | 2009-05-22 | 2009-05-22 | 基于L-Rep模型的三维实体布尔运算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101609565A true CN101609565A (zh) | 2009-12-23 |
Family
ID=41483311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100271267A Pending CN101609565A (zh) | 2009-05-22 | 2009-05-22 | 基于L-Rep模型的三维实体布尔运算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101609565A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104134236A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 一种三维平面实体的布尔运算方法 |
CN105205206A (zh) * | 2015-08-19 | 2015-12-30 | 西安电子科技大学 | 一种复杂平面片交线段的求取方法 |
CN109782272A (zh) * | 2018-12-30 | 2019-05-21 | 中国电子科技集团公司第十五研究所 | 三维雷达体的布尔融合方法 |
CN110973859A (zh) * | 2019-12-19 | 2020-04-10 | 江苏艾佳家居用品有限公司 | 一种家装设计中定制厨柜的台面、前后挡水生成的方法 |
CN112401866A (zh) * | 2020-11-11 | 2021-02-26 | 中国科学技术大学 | 基于布尔运算的电阻抗成像方法 |
CN119203287A (zh) * | 2024-11-26 | 2024-12-27 | 北京通用人工智能研究院 | 占用网格数据处理方法、装置、设备、介质及程序产品 |
-
2009
- 2009-05-22 CN CNA2009100271267A patent/CN101609565A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104134236A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 一种三维平面实体的布尔运算方法 |
CN104134236B (zh) * | 2014-07-30 | 2017-01-18 | 西安电子科技大学 | 一种三维平面实体的布尔运算方法 |
CN105205206A (zh) * | 2015-08-19 | 2015-12-30 | 西安电子科技大学 | 一种复杂平面片交线段的求取方法 |
CN105205206B (zh) * | 2015-08-19 | 2018-05-15 | 西安电子科技大学 | 一种复杂平面片交线段的求取方法 |
CN109782272A (zh) * | 2018-12-30 | 2019-05-21 | 中国电子科技集团公司第十五研究所 | 三维雷达体的布尔融合方法 |
CN110973859A (zh) * | 2019-12-19 | 2020-04-10 | 江苏艾佳家居用品有限公司 | 一种家装设计中定制厨柜的台面、前后挡水生成的方法 |
CN110973859B (zh) * | 2019-12-19 | 2021-08-31 | 江苏艾佳家居用品有限公司 | 一种家装设计中定制厨柜的台面、前后挡水生成的方法 |
CN112401866A (zh) * | 2020-11-11 | 2021-02-26 | 中国科学技术大学 | 基于布尔运算的电阻抗成像方法 |
CN119203287A (zh) * | 2024-11-26 | 2024-12-27 | 北京通用人工智能研究院 | 占用网格数据处理方法、装置、设备、介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Haimes et al. | The engineering sketch pad: A solid-modeling, feature-based, web-enabled system for building parametric geometry | |
Gong et al. | Three-dimensional modeling and application in geological exploration engineering | |
CN100468418C (zh) | 由边界表示数据生成体数据的方法及其程序 | |
Greß et al. | GPU‐based collision detection for deformable parameterized surfaces | |
CN103413297A (zh) | 基于一体化三维gis模型的切割方法 | |
CN101609565A (zh) | 基于L-Rep模型的三维实体布尔运算方法 | |
KR102670898B1 (ko) | 증강 현실에서 빌딩 정보 모델 시각화를 위한 3d 엔진 기반 기하학적 최적화 방법 | |
CN114169055B (zh) | 使bim模型轻量化的方法及系统 | |
JP4783100B2 (ja) | 境界データのセル内形状データへの変換方法とその変換プログラム | |
Thiemann | Generalization of 3D building data | |
Rossignac et al. | Solid modeling | |
Xu et al. | Developing an extended IFC data schema and mesh generation framework for finite element modeling | |
Pütz et al. | The mesh tools package–introducing annotated 3d triangle maps in ros | |
Miao et al. | SymmSketch: Creating symmetric 3D free-form shapes from 2D sketches | |
CN102646286B (zh) | 三维空间结构的数字图形介质模拟方法 | |
CN102890830B (zh) | 基于三角面片模型的拓扑面分离方法 | |
JPH0623989B2 (ja) | 境界表現ソリツド・モデリング・システム | |
Tuan | Overview of three-dimensional GIS data models | |
Dakowicz et al. | Building reconstruction using LIDAR data | |
Koca et al. | A hybrid representation for modeling, interactive editing, and real-time visualization of terrains with volumetric features | |
Bærentzen | Volume sculpting: intuitive, interactive 3D shape modelling | |
Li et al. | Efficient ray casting polygonized isosurface of binary volumes | |
Wang | Robust Geometry Kernel and UI for Handling Non-orientable 2-Mainfolds | |
Shakaev et al. | View-Dependent Level of Detail for Real-Time Rendering of Large Isosurfaces | |
Rassovsky | Cubical marching squares implementation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20091223 |