[发明专利]一种三维平面实体的布尔运算方法有效
申请号: | 201410369841.X | 申请日: | 2014-07-30 |
公开(公告)号: | CN104134236B | 公开(公告)日: | 2017-01-18 |
发明(设计)人: | 许社教;邱扬;张居峰;徐延雪;田锦;杜美玲 | 申请(专利权)人: | 西安电子科技大学 |
主分类号: | G06T17/10 | 分类号: | G06T17/10 |
代理公司: | 西安吉盛专利代理有限责任公司61108 | 代理人: | 张培勋 |
地址: | 710071 陕西省*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 三维 平面 实体 布尔 运算 方法 | ||
1.一种三维平面实体的布尔运算方法,其特征是:包括如下步骤:
步骤101:依次读入实体A和实体B的数据,将实体A的所有顶点、边、环和面的数据分别读入到A_Point_list、A_Line_list、A_Loop_list、A_Face_list链表中,实体B的所有顶点、边、环和面的数据分别读入到B_Point_list、B_Line_list、B_Loop_list、B_Face_list链表中;
步骤102:遍历链表A_Point_list、A_Line_list、A_Loop_list、A_Face_list求取实体A的包围盒值A.min.X.、A.min.Y、A.min.Z、A.max.X、A.max.Y、A.max.Z;遍历链表B_Point_list、B_Line_list、B_Loop_list、B_Face_list求取实体B的包围盒值B.min.X.、B.min.Y、B.min.Z、B.max.X、B.max.Y、B.max.Z;
步骤103:判断实体A的包围盒与实体B的包围盒是否相交,若相交则转至步骤107,若不相交则转至步骤104;
步骤104:判断实体A和实体B相离还是内含,若相离转至步骤106,若内含转至步骤105;
步骤105:若实体B内含于实体A,令A_out_B=A,B_out_A=null,A_in_B=null,B_in_A=B,转至步骤121;若实体A内含于实体B,令B_out_A=B,A_out_B=null,B_in_A=null,A_in_B=A,转至步骤121;这里链表A_out_B用于存储实体A中不与实体B相交的保留面和实体A中与实体B相交的修改面,链表B_out_A存储实体B中不与实体A相交的保留面和实体B中与实体A相交的修改面,链表A_in_B存储实体A中与实体B相交所产生的修改面,链表B_in_A存储实体B中与实体A相交所产生的修改面;保留面是实体的原有面,经过布尔运算未发生变化而被保留下来的面,修改面是经过布尔运算将原有面进行了修改并用于组成布尔运算所得实体的面;
步骤106:实体A与实体B相离,则将实体A的所有面存入A_out_B,实体B的所有面存入B_out_A,并令A_in_B=null、B_in_A=null,转至步骤121;
步骤107:遍历实体A的链表A_Point_list、A_Line_list、A_Loop_list、A_Face_list,取实体A的一个面FA;
步骤108:判断面FA是否与实体B相交,若不相交,转至步骤109,如果相交,转至步骤110;
步骤109:将实体A的面FA存入链表A_out_B,转至步骤113;
步骤110:用面FA截切实体B,得到剖面多边形,记该多边形为F1;
步骤111:对面FA多边形和剖面多边形F1进行Weiler—Atherton内裁剪运算,将内裁剪结果存入A_in_B中;
步骤112:对面FA多边形和剖面多边形F1进行Weiler—Atherton外裁剪运算,外裁剪结果存入A_out_B中;
步骤113:判断实体A的面是否全部处理完,若未处理完转至步骤107,若处理完,则转至步骤114;
步骤114:遍历实体B的链表B_Point_list、B_Line_list、B_Loop_list、B_Face_list,取实体B的一个面FB;
步骤115:判断面FB是否与实体A相交,若不相交,转至步骤116,如果相交,转至步骤117;
步骤116:将实体B的面FB存入链表B_out_A,转至步骤120;
步骤117:用面FB截切实体A,得到剖面多边形,记该多边形为F2;
步骤118:对面FB多边形和剖面多边形F2进行Weiler—Atherton内裁剪运算,将内裁剪结果存入B_in_A中;
步骤119:对面FB多边形和剖面多边形F2进行Weiler—Atherton外裁剪运算,将外裁剪结果存入B_out_A中;
步骤120:判断实体B的面是否全部处理完,若未处理完转至步骤114,若处理完,则转至步骤121;
步骤121:判断实体A和实体B的布尔运算类型,若为并运算A∪B,则转至步骤122;若为交运算A∩B,则转至步骤123;若为差运算A-B,则转至步骤124,若为差运算B-A,则转至步骤125;
步骤122:结果为链表A_out_B和B_out_A的合并;
步骤123:结果为链表A_in_B和B_in_A的合并;
步骤124:结果为将B_in_A中面的顶点顺序反向后得到的链表和A_out_B链表的合并;
步骤125:结果为将A_in_B中面的顶点顺序反向后得到的链表和B_out_A链表的合并。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410369841.X/1.html,转载请声明来源钻瓜专利网。