目录
一,概述
二,等效
三,函数
在一些VEX函数,可将边看成为每个面非共享的半边;
一,概述
在houdini,边通常被视为面之间无方向且共享的,然而,对于一些任务(如简化或清理几何体),将面视为有自己的边是非常有用的;
可理解为,将无方向且共享的边,沿着其长度切成两条半边(half-edge),对于边界的边当然只有一条半边;
每个半边是有方向的,起始于一个顶点终止于一个顶点;
半边函数可快速查找半边的源顶点和目标顶点,下一个半边,从相同边获取其他半边,查找共享点的所有半边等;
二,等效
如两半边是从同一共享边切开的,则这两半边是等效的;如下图,三个面共享一条边,则此三条半边e/f/g也是等效的;方向性并不重要,即使方向相反,e/f/g也是等效的;
半边的源顶点(目标顶点)可唯一标识它,意味着,一给定源顶点最多只能有一条半边;这是因为一个顶点只能属于一个面;然而,由于多个顶点可以被连接到一个点,半边可共享源和目标点(point);换一句话说等效,如顶点被两个相同点共享,则两半边等效;
一组等效半边中的其中一条被认为是主半边;vex函数,可检测一条给定的半边是否是主,或给定一非主半边查找其等效的主半边;在一条未共享的边,则仅有一条主半边;
三,函数
hedge_isvalid | 检测半边是否有效 |
hedge-isprimary | 检测半边是否是主 |
hedge-primary | 查找主等效半边,如是非共享的边,则返回相同的半边; |
hedge-isequiv | 测试两半边是否等效 |
hedge-nextequiv | 返回下一个等效半边 |
hedge-equivcount | 获取等效半边的个数 |
hedge-srcvertex | 获取半边的源顶点 |
hedge-dstvertex | 获取半边的目标顶点 |
hedge-presrcvertex | 获取半边源顶点的前顶点 |
hedge-postdstvertex | 获取半边目标顶点的后顶点 |
hedge-prim | 获取半边的面 |
hedge-srcpoint | 获取半边的源点 |
hedge-dstpoint | 获取半边的目标点 |
hedge-presrcpoint | 获取半边的前源点 |
hedge-postdstpoint | 获取半边的后目标点 |
hedge-next | 获取面内的下一个半边 |
hedge-prev | 获取面内的前一个半边 |
pointedge | 查找两点间的半边,顺序不同,结果不同; |
pointhedge | 查找给定源和目标点的半边, 查找给定源点的半边,多个半边返回较小的; |
pointhedgenext | 返回共享给定源点半边的下一个半边 |
vertexhedge | 获取给定源顶点的半边 |
primhedge | 获取给定面上的一条半边 |
四,案例
//点层级,Dual mesh,类似divide节点的Dual功能
int hedge = pointhedge(0, @ptnum);
int ncount = neighbourcount(0, @ptnum);
int pts[];
for(int i=0; i<ncount; i++){
int prim = hedge_prim(0, hedge);
vector pos = prim(0, 'P', prim);
int pt = addpoint(0, pos);
append(pts, pt);
hedge = hedge_prev(0, hedge);
hedge = hedge_nextequiv(0, hedge);
}
addprim(0, 'poly', pts);
int prims[] = pointprims(0, @ptnum);
foreach(int prim; prims){
removeprim(0, prim, 1);
}