一种基于特征的CAD体网格模型编辑、优化算法的制作方法

文档序号:11953705阅读:来源:国知局

技术特征:

1.一种基于特征的CAD体网格模型编辑、优化算法,其特征在于,包括以下步骤:

1)基于特征的CAD体网格模型编辑

1.1)读入CAD体网格模型并对外表面区域进行分割,提取相应的外表面区域;

1.2)用户交互式地选取外表面区域,作为要编辑的形状特征的操作区域;

1.3)对用户选定的每一个形状特征的“操作区域”,进行以下计算:

针对当前“操作区域”,建立局部坐标系,该“操作区域”对应的“操作点”作为当前局部坐标系的原点;计算并记录网格所有顶点在当前局部坐标系中的坐标,便于通过操作区域、操作点来对整个网格进行编辑;

1.4)对每个“操作点”,构建优化方程,并利用Eigen求解优化方程,求得每个“操作点”对网格上每个顶点的权重;并对“操作点”的权重进行归一化操作,使得网格上的每个顶点,各个操作点对其的权重总和为1;

1.5)记录用户对每个“操作区域”进行的旋转平移编辑操作,将相应的操作作用在以对应“操作点”为原点的局部坐标系的每个顶点坐标上;将每个“操作点”为原点的局部坐标系下的每个顶点的坐标数据变换到全局坐标系即最初模型所处的坐标系,将每个顶点的坐标数据乘以其对应“操作点”的权重,加和得到最终顶点的坐标数据,这样,每个顶点的坐标都得以更新,模型的编辑操作也已经完成;

2)基于特征的CAD四面体网格模型优化

2.1)如果执行的迭代次数小于迭代阈值,则执行步骤2.2),否则,执行步骤2.3);

2.2)对于网格的每一条边,如果其边长大于4/5*target_edge_length,其中target_edge_length是目标边长,则对其执行边分裂操作;如果其边长小于4/5*target_edge_length,那么对其执行边收缩操作;本步骤的两种操作将会对网格模型的拓扑单元进行增加与删除;然后执行步骤2.4);

2.3)检查网格的每一条边与每一个面,对于符合条件的边与面,对其邻接的四面体单元执行四面体翻转的操作,然后执行步骤2.4);

2.4)执行网格顶点坐标的平滑操作,过程如下:

2.4.1)对网格外表面上的顶点进行平滑,平滑时只根据这个顶点的一邻域中在外表面上的顶点来确定顶点平滑后的坐标;平滑过程中注意保持模型的语义形状特征,位于网格特征线上的顶点不应该进行平滑操作;另外,如果网格的外表面不是平面,那么表面顶点平滑后的位置往往不在外表面上,这就需要在平滑之后,对外表面上的顶点进行一个向原始网格即输入网格的外表面投影的操作;

2.4.2)对网格的内部顶点进行平滑;

2.5)如果执行了前四个步骤后,网格的拓扑元素数目相比于执行前变化不大,或者达到执行次数的上限,停止,否则,执行步骤2.1)。

2.根据权利要求1所述的一种基于特征的CAD体网格模型编辑、优化算法,其特征在于,在步骤1.4)中,所述的操作点权重的计算,其方法为:

定义M=(V,E,F,H)为具有n个顶点的四面体网格,V,E,F,H分别为该网格的顶点集合、边集合、面集合以及四面体集合,对于顶点i∈M,其笛卡尔坐标被表示为vi=(xi,yi,zi);定义Rj=(Vj,Ej,Fj),j=1,...,m为用户选取的所有的外表面操作区域,共m个,Pj,j=1,...,m为每个操作区域所对应的操作点;wj是操作点j在网格所有顶点上的权重集合,以向量的形式表示,wj(vj),则是操作点j对顶点i的权重;

由于Ls包含了网格的所有拓扑邻接信息,并且,操作点的权重,在当前操作区域所包含的顶点上应该为1,在非当前操作区域包含的顶点上,应该为0;由此,能够将求解操作点权重的问题建模为一个最优化问题,通过对这个最优化问题的求解来求得当前操作点对网格上所有顶点的权重,见下面的公式:

<mrow> <munder> <mi>argmin</mi> <mrow> <msub> <mi>w</mi> <mi>j</mi> </msub> <mo>,</mo> <mi>j</mi> <mo>=</mo> <mn>1</mn> <mo>,</mo> <mo>...</mo> <mo>,</mo> <mi>m</mi> </mrow> </munder> <mrow> <mo>(</mo> <mo>|</mo> <mo>|</mo> <msub> <mi>L</mi> <mi>s</mi> </msub> <msub> <mi>w</mi> <mi>j</mi> </msub> <mo>|</mo> <msup> <mo>|</mo> <mn>2</mn> </msup> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

满足:

<mrow> <msub> <mi>w</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <msub> <mi>v</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mn>1</mn> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&Element;</mo> <msub> <mi>R</mi> <mi>j</mi> </msub> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>w</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mn>0</mn> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&Element;</mo> <mrow> <mo>(</mo> <mi>R</mi> <mo>-</mo> <msub> <mi>R</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </munderover> <msub> <mi>w</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mn>1</mn> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&Element;</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <mn>0</mn> <mo>&le;</mo> <msub> <mi>w</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>&le;</mo> <mn>1</mn> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&Element;</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo> </mrow> </mrow>

其中,R为用户选取的所有操作区域的集合,Rj=(Vj,Ej,Fj),j=1,...,m的并集,Ls是体网格下的拓扑拉普拉斯算子,它的构建方式与面网格下的类似,即:

<mrow> <msub> <mrow> <mo>(</mo> <msub> <mi>L</mi> <mi>s</mi> </msub> <mo>)</mo> </mrow> <mrow> <mi>i</mi> <mi>j</mi> </mrow> </msub> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mrow> <msub> <mi>d</mi> <mi>i</mi> </msub> <mo>,</mo> <mi>i</mi> <mo>=</mo> <mi>j</mi> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>-</mo> <mn>1</mn> <mo>,</mo> <mrow> <mo>(</mo> <mrow> <mi>i</mi> <mo>,</mo> <mi>j</mi> </mrow> <mo>)</mo> </mrow> <mo>&Element;</mo> <mi>E</mi> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mn>0</mn> <mo>,</mo> <mi>o</mi> <mi>t</mi> <mi>h</mi> <mi>e</mi> <mi>r</mi> <mi>w</mi> <mi>i</mi> <mi>s</mi> <mi>e</mi> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow>

Ls也被称为网格的拉普拉斯矩阵,能够表示网格的顶点之间的连接关系;di表示顶点i的度数,即与顶点i通过边相连的顶点的个数;(i,j)表示网格中由顶点i与顶点j构成的边,E为网格的边集合;通过对此优化问题的求解,能够得到每个操作点在每个顶点上的权重wj(vi);并且,每个顶点上,所有操作点对其的权重和为1,每个操作点在每个顶点上的权重取值范围是[0,1]。

3.根据权利要求1所述的一种基于特征的CAD体网格模型编辑、优化算法,其特征在于,在步骤2.2)中,所述的边收缩方法,在保持形状特征方面,需要注意以下条件:

如果一条边的两个顶点为A、B,一个顶点A位于四面体的内部,而另一个顶点B位于四面体的外表面上,那么则应该拒绝进行边收缩的操作,否则将会使模型的外表面以顶点B为中心凹陷进去;

如果边AB不在网格模型的外表面上,但是边的两个顶点A、B均在网格的外表面上,那么说明顶点A、B分属于模型的两个不同的外表面区域,这种情况下应该拒绝进行边收缩的操作,否则将会使模型的外表面以这两个顶点为中心,向内凹陷成一个点,破坏模型形状的同时,也容易产生非法的拓扑单元;

如果想要进行边收缩的边的一个顶点在特征线的交汇处,那么另一个顶点不管是在网格的内部还是在其表面,都应该拒绝进行边收缩的操作,否则将会严重损毁CAD模型的形状特征。

4.根据权利要求1所述的一种基于特征的CAD体网格模型编辑、优化算法,其特征在于,在步骤2.3)中,所述的外表面四面体翻转操作,其方法为:

外表面的边与两个四面体相邻,直接进行四面体2-2翻转;

外表面的边与三或四个四面体相邻,这时候则能够先对相邻四面体中完全位于网格内部的边即指没有顶点位于网格外表面上的边执行边收缩操作,这样能够将其转换为当前边仅与两个四面体相邻的情况来操作,即利用四面体2-2翻转来处理;

外表面的边与大于四个四面体相邻,将这条边相邻的四面体单元看作一个整体,提取其与其他四面体相邻的三角面片以及外表面边翻转后的两个三角面片组成一个封闭的区域,利用TETGEN对此封闭区域进行四面体生成,删除原四面体后,用新生成的四面体填充这块区域,实现外表面边翻转的操作。

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