目录
1.hedge_dstpoint/hedge_srcpoint
2.hedge_dstvertex/hedge_srcvertex
参考
Half Edge数据结构有什么优点? - 知乎 (zhihu.com)
Half Edge概念
Half Edge结构即半边结构,是网格数据结构的其中一种表达方式,可在建模软件中储存多边形(另外两种用于储存多边形的数据结构是:Polygon Soup和incidence matrice,其中polygon的储存开销远小于其他两种)。Half Edge是个有向图,把一条边表示成两个有向的半边(如图),由于Half Edege构造需要一定的开销,因此一般都用下图iTriMesh三角网格这种简单的网格表达方式。
网格属性
由顶点(vertex)、边(edge)和面(primitive)三个元素组成,Houdini中可操作的常用属性(attribute value)就是这三个。
顶点(vertex)
起点(source vertex)和终点(destination vertex),由于同一个point可以充当很多的vertices,因此half-edges可以有相同的起点和终点。
边(edge)
可以是边界边(the boundary edge):边界上的边,邻接面为1,且这个边的half-edge为1;
内部边(interior edge):edge有的half-edge数量为2;
非流形边(non-manifold edge):这样的edge存在与non-manifold mesh网格中,如下图:
等价(Equivalence)
如果两个半边(two half-edges)是从同一个边(edge)分离出来的,则这两个半边等价(equivalent),等价的半边可能有相反的方向;从顶点的角度可以说:如果两个半边的顶点位置相同,那它们是是等价的。
Houdini中的VEX functions
1.hedge_dstpoint/hedge_srcpoint
hedge_dstpoint(“defgeo.bgeo”,3); //从几何体中得到3号半边终点位置的point number
2.hedge_dstvertex/hedge_srcvertex
hedge_dstvertex("defgeo.bgeo",3); //从几何体中得到3号半边终点位置的vertex number
3.hedge_equivcount
hedge_equivcount(geometry,hedge_number); //返回跟hedge等价的半边的数量(包括这个半边所以返回的数目至少是1)
这个function可以用来判断这个半边所属的edge的类型,是几何体的边界(return 1)?还是内部边(returns 2)?还是这个网格划分不行(即是非流形的,returns ≥3)
4.hedge_next
hedge_next(geometry,hedge_number); //返回在网格划分中顺序排在当前半边下一个的半边的number(下一个hedge的起点是当前hedge的终点)
5.hedge_nextequiv
hedge_nextequiv(geometry,hedge_number); //返回下一个等价的hedge,如果没有等价的,则返回hedge自己
6.hedge_isequiv
hedge_isequiv(geometry,hedge1_num,hedge2_num); //两个hedges是否等价,是返回1。
7.hedge_prim
hedge_prim(geometry,hedge_num); //返回hedge所在的面的primitive number
8.pointedge
pointedge(geometry,point1_num,point2_num); //1、2之间有edge存在则返回number,没有则返回-1.
9.pointhedge
pointhedge(geometry,point); //返回以point为起点的hedge
pointhedge(geometry,srcpoint,dstpoint);// 返回srcpoint为起点和dstpoint为终点的hedge
10.primhedge
primhedge(geometry,prim_num); // 返回面上任意一个hedge的num
11.vertexhedge
vertexhedge(geometry,vertex); // 返回以这个vertex为起点的hedge的number