原视频:https://www.youtube.com/playlist?list=PLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI
Bili:Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili
Houdini版本:19.5
1、group-组是一种特殊属性Attribute
groupe无法提供与属性相关的功能,须通过其它方式进行访问。group值为0或1,表示是否存在该组中。
下面是<多边形sphere+group节点>,选择不同的Group Type(Verteices、Points、Primitive),Group会在相对应的组件表格中中显示,GroupType(Edges)在表格中仅指向Verteices、Points、Primitive但不显示:
2、使用setpointattrib设置点属性(官方文档介绍)

geohandle:节点第几个输入点(计算机中索引以0开始,第1个输入点就是0);
name:要设置的点属性名字;
point_num:处理的点,若使用@ptnum,则按顺序访问每个点的点号,当然也可以指定点号;
value:设置属性的值;
mode:可选参数,使用“set”可覆盖圆属性值;更多用法可查看标题链接的官方文档。
【setprimattrib()、setvertexattrib()类似】
eg.示例
i@A = 10;
setpointattrib(0, 'B', @ptnum, 20);
setpointattrib(0, 'C', 1, 30);
第一行代码结果与第二行代码运行结果相同。第一行代码应用于所有点,具有局限性;使用setpointattrib()更灵活。代码运行结果如下:
3、使用setpointgroup设置点组(官方文档介绍)

对点组进行添加或删除
geohandle:节点第几个输入点(计算机中索引以0开始,第1个输入点就是0);
name:组名字
point_num:需要处理的点(point number,若是@ptnum则遍历所有点);
value:0(删除)或1(添加);
mode:可选参数;更多用法可查看标题链接的官方文档。
【setprimgroup()、setvertexgroup()类似】
eg.setpointgroup()基本用法
setpointgroup(0, 'A', @ptnum, 1);
setpointgroup(0, 'B', @ptnum, 1);
setpointgroup(0, 'B', 3, 0);
运行代码结果如下:
4、使用inprimgroup函数检查primitive是否在组中(官方文档介绍)
检查primnum是否在groupname组中,存在则返回1,不存在返回0。
【inpointgroup()、invertexgroup()类似】
创建sphere、box、torus三个对象,其中sphere、box添加groupe节点,并把三个对象结合mergy
添加命名为access_group的代码节点,类型选择为primitive,运行代码
i@inbox = inprimgroup(0, 'box', @primnum) *5;
i@insphere = inprimgroup(0, 'sphere', @primnum) *10;
结果如下;
5、使用nprimgroup统计Primitives数量(官方文档介绍)
返回groupename组的primitive数量。
【npointsgroup()、invertexgroup()等类似】
eg.统计sphere小球对象的Primitives数量,运行代码
i@numFaces = nprimitivesgroup(0, 'sphere');
运行结果如下
5、使用expandprimgroup函数展开数组(官方文档介绍)
返回一个primitives数组,即展开数组。
【expandpointgroup()、expandvertexgroup()类似】
eg.继续使用<eg4>展开box组的Primitives,使用新的AttributeWrangle节点运行代码
i[]@prims = expandprimgroup(0, 'box');
结果如下
6、使用nearpoint()函数查找距离最近的点(官方文档介绍)
a.查找距离pt最近的点;
b.查找距离pt最近的点,查找最大距离为maxdist;
c.在ptgroup组内查找距离pt最近的点;
d.在ptgroup组内查找距离pt最近的点,查找最大距离为maxdist;
【nearpoints()类似,其返回一个数组】
【小知识:节点运行顺序从左只右,从上往下】
eg.创建sphere、box对象,groupe节点类型为Points,并把两个对象结合mergy;再Add添加一个点,在sphere、box内查找距离pt最近的点,
i@sphereNpt = nearpoint(1, 'sphere', @P);
i@boxNpt = nearpoint(1, 'box', @P);
运行代码结果如下
7、常用选择筛选点的几种方法
.创建sphere、box对象,groupe节点类型为Points,命名为sphere、group;并把两个对象结合mergy;再添加一个AttributeWrangle节点
方法一:直接在Group处选择组
方法二:点击下图中的符号,在sence窗口直接鼠标框选(小眼睛按钮可以选择是否同时选择模型背面的点)
方法三:直接键入点或使用简单正则表达式(官方文档介绍)
方法四:拓展-使用较为复杂的VEXpression方式