基于注塑模CAD/CAE的自由曲面的裁剪(上)
<P>介绍一种基于离散曲面的裁剪算法,该算法适用于注塑模CAD/CAE或其它产品设计和有限元分析的领域,实践证明该算法自动化程度高、速度快、稳定可靠.</P><P>1、引 言</P>
<P> 在注塑模CAD/CAE中,自由曲面的设计与描述始终占有十分重要的地位.塑料制品种类繁多、形状各异,而且注塑成形是一次成形,所以要求注塑模CAD/CAE软件的几何造型系统具有较强的曲面处理能力,能够快速、方便地生成塑料制品图和模具型腔图.在实际工程中有许多产品的某些外表面不能或不便于用一张曲面表示,而用多张曲面构造一个产品的曲面模型时,某些曲面又有多余部分.因此,利用曲面裁剪技术把单张曲面不需要的部分裁剪掉或将多张曲面拼接后的多余部分裁剪掉,便可以得到所需的曲面模型.曲面裁剪不仅是构造产品曲面模型的重要手段,也是采用缝合技术构造曲面实体模型必备的操作.<BR> 由于注塑模CAE分析要求尽可能方便、高效地构造出产品的几何模型,并且对裁剪曲面或曲面裁剪后拼接成的曲面进行网格划分时,要求能够处理公共边界的信息,即2个曲面在拼接处具有相同的离散边界,便于注塑模CAE后续的流动、保压和翘曲等有限元模拟分析,而对于曲面的精度允许有一定的误差,因此本文介绍一种基于离散曲面的裁剪方法.所谓离散曲面,是一类采用组成曲面多边形网的点、线、面及其拓扑信息完整的描述曲面.<BR> 根据作者的研究和实践,认为基于注塑模CAD/CAE的曲面裁剪主要涉及以下问题:(1)曲面分割;(2)曲面求交;(3)曲面片的裁剪;(4)生成裁剪曲面的自动搜索算法.</P>
<P>2、曲面分割和离散曲面</P>
<P> 曲面分割是将任意一自由曲面,按照某一给定的分割算法进行不断的分割加密而成,每一次分割均生成一个比原来的多边形网更加致密的多边形网,其极限曲面是一张光滑曲面.在本文中采用文献[1,2]的分割算法,其中提出了平面度的概念,以平面度作为控制精度,当分割的次数使得多边形网与极限曲面之离差小于控制精度后,就不再细分,这时的多边形网便是一张离散曲面.</P>
<P>3、离散曲面求交</P>
<P> 离散曲面的求交实质可归于一些小的平面多边形求交,对于控制精度高的曲面,相应的离散网格便很致密,小的平面片就很多,因此提高求交效率对整个曲面裁剪的效率非常重要.</P>
<P>3.1 曲面数据的存储</P>
<P> 曲面的数据存储如图1所示,分别用3个链表形成的网状结构存储曲面(Surface)、网格平面片(Patch)和顶点(Vertex)的数据,这种结构便于数据的查找,并且存储冗余小.如图2所示,一张曲面由n个Patch组成,如果分别存储每一个Patch的顶点信息,则曲面中间的一个结点就会被存储4次,边界上的点也会被存储2次(除角点外).而采用图1所示的存储结构,Vertex链表的结点与图2所示的网格结点一一对应,即只存储一次,而每个Vertex表中的结点与Patch表中的结点则形成一对多的关系.</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="90%" border=0>
<TBODY>
<TR>
<TD width="50%">
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=141 alt="t105-1.gif (2094 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_rrpbif1110t105-1.gif" width=320></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图1 曲面的数据存储方式</FONT></P></TD>
<TD width="50%">
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt"><FONT size=2> <IMG height=192 alt="t105-2.gif (6780 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_8saae21110t105-2.gif" width=173> </FONT>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图 <FONT face="Times New Roman">2</FONT> 离散曲面</FONT></P></TD></TR></TBODY></TABLE></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt"><FONT size=2><BR><STRONG><FONT face="Times New Roman">3.2</FONT> 求交算法</STRONG> </FONT>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2> 步骤<FONT face="Times New Roman">1. </FONT>遍历<FONT face="Times New Roman" size=2>2</FONT>个曲面的数据链,获取几何信息,如平面方程、直线方程等<FONT face="Times New Roman" size=2>.</FONT>记录每个曲面中<FONT face="Times New Roman" size=2>Patch</FONT>之间的相邻关系,供裁剪后自动搜索时用<FONT face="Times New Roman" size=2>.<BR></FONT> 步骤<FONT face="Times New Roman" size=2>2. </FONT>由空间坐标信息排除根本不可能相交的<FONT face="Times New Roman" size=2>Patch</FONT>对,避免不必要的求交运算,求取有可能相交的<FONT face="Times New Roman" size=2>Patch</FONT>的交点<FONT face="Times New Roman" size=2>.<BR></FONT> 步骤<FONT face="Times New Roman" size=2>3. </FONT>交点的有效性判断<FONT face="Times New Roman" size=2>.</FONT>如图<FONT face="Times New Roman" size=2>3</FONT>所示,交点必须同时在<FONT face="Times New Roman" size=2>Patch1</FONT>所表示的多边形区域内和 <FONT face="Times New Roman" size=2>Patch2</FONT>的一条边界所在的线段内<FONT face="Times New Roman" size=2>.</FONT>后者判断很简单,对前者处理本文采用射线法<SUP>[3]</SUP><FONT face="Times New Roman" size=2>.</FONT></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=132 alt="t105-3.gif (989 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_qkamgo1110t105-3.gif" width=110></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图3 两平面片相交</FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2> 步骤<FONT face="Times New Roman">4. </FONT>交点排序<FONT face="Times New Roman" size=2>.</FONT>前面的<FONT face="Times New Roman" size=2>Patch</FONT>对相交时,记录下相交线段,便可通过线段顶点比较法将每个<FONT face="Times New Roman" size=2>Patch</FONT>内随机求出的交线排序,如图<FONT face="Times New Roman" size=2>4</FONT>所示<FONT face="Times New Roman" size=2>.</FONT></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=111 alt="t105-4.gif (803 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_db8kmn1110t105-4.gif" width=105></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图4 平面片求交后交点排序</FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2> 步骤<FONT face="Times New Roman">5. </FONT>处理交线通过<FONT face="Times New Roman" size=2>Patch</FONT>的顶点或边的特殊情况<FONT face="Times New Roman" size=2>.<BR></FONT><FONT face="Times New Roman" size=2></FONT></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2><FONT face="Times New Roman" size=2>循环处理完<FONT face="Times New Roman" size=2>2</FONT>个曲面链表中的每个<FONT face="Times New Roman" size=2>Patch.</FONT></FONT> </P>
<P></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><STRONG><FONT size=2><FONT face="Times New Roman">4</FONT>、曲面裁剪</FONT></STRONG></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2> 为了使曲面裁剪具有自动化的能力,即在求交结束后就能自动分为要保留和要裁剪掉的<FONT face="Times New Roman">2</FONT>个部分,然后由用户交互取舍,而且要满足注塑模<FONT face="Times New Roman" size=2>CAE</FONT>中网格划分对公共边界的要求,作者设计了一种及时分片法,算法如下:<BR> 步骤<FONT face="Times New Roman" size=2>1. </FONT>对裁剪曲面中每个<FONT face="Times New Roman" size=2>Patch</FONT>在求交完毕后随即将其分割成<FONT face="Times New Roman" size=2>2</FONT>个或多个<FONT face="Times New Roman" size=2>Patch</FONT>,不论是<FONT face="Times New Roman" size=2>2</FONT>个或多个<FONT face="Times New Roman" size=2>Patch</FONT>,必须按一定规则将其分为<FONT face="Times New Roman" size=2>2</FONT>类,一类保留,另一类裁剪掉,因而称为及时分片法<FONT face="Times New Roman" size=2>.</FONT>如图<FONT face="Times New Roman" size=2>5</FONT>所示,一般情况下一个<FONT face="Times New Roman" size=2>Patch</FONT>被一分为二,则这<FONT face="Times New Roman" size=2>2</FONT>个新生成的<FONT face="Times New Roman" size=2>Patch</FONT>自然分为上述<FONT face="Times New Roman" size=2>2</FONT>类<FONT face="Times New Roman" size=2>.</FONT>但在某些情况下,也可能被分为多个<FONT face="Times New Roman" size=2>Patch</FONT>,如图<FONT face="Times New Roman" size=2>6</FONT>所示<FONT face="Times New Roman" size=2>.</FONT>用逐次二分法将其分解为多个<FONT face="Times New Roman" size=2>Patch</FONT>后,本文采用交线包容法,同样可将这多个<FONT face="Times New Roman" size=2>Patch</FONT>分为<FONT face="Times New Roman" size=2>2</FONT>类,如图<FONT face="Times New Roman" size=2>7</FONT>所示<FONT face="Times New Roman" size=2>.</FONT>所谓交线包容法是将包含原<FONT face="Times New Roman" size=2>Patch</FONT>内所有交线的多边形作为一类,如图<FONT face="Times New Roman" size=2>7(a)</FONT>所示,其它的作为另一类,如图<FONT face="Times New Roman" size=2>7(b)</FONT>所示<FONT face="Times New Roman" size=2>.</FONT></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=65 alt="t105-5.gif (1110 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_9stufi1110t105-5.gif" width=214> </FONT>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图 5 1个平面片裁剪后生成2个平面片</FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=205 alt="t106-1.gif (2197 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_kl1aha1110t106-1.gif" width=192> </FONT>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图 6 逐次二分法分解平面片</FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=91 alt="t106-2.gif (1157 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_vh8him1110t106-2.gif" width=278></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图 <FONT face="Times New Roman">7</FONT> 交线包容法分类</FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=left><FONT size=2> 步骤<FONT face="Times New Roman">2. </FONT>将新生成的<FONT face="Times New Roman" size=2>Patch</FONT>加入到<FONT face="Times New Roman" size=2>Patch</FONT>链表中,去掉原<FONT face="Times New Roman" size=2>Patch.<BR></FONT> 步骤<FONT face="Times New Roman" size=2>3. </FONT>处理如图<FONT face="Times New Roman" size=2>8</FONT>所示的特殊情况<FONT face="Times New Roman" size=2>.</FONT>一个<FONT face="Times New Roman" size=2>Patch</FONT>中出现内环,无法用<FONT face="Times New Roman" size=2>2</FONT>个多边形来描述分割后的图形,对这种情况本文采取加密离散网格的方法,避免出现内环<FONT face="Times New Roman" size=2>.</FONT></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2><IMG height=102 alt="t106-3.gif (756 bytes)" src="http://www.chmcw.com/upload/news/RCL/13220_wla4aq1110t106-3.gif" width=102></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 17pt" align=center><FONT size=2>图 <FONT face="Times New Roman" size=2>8</FONT> 平面片内环情况</FONT></P></FONT></FONT>
页:
[1]