如何根据Houdini中的属性删除点?

How to remove points based on their attributes in Houdini?

我用几个点创建了一条曲线。现在我想根据它们的属性之一删除一些点 (will_be_removed)。

如上图所示,那些i@will_be_removed设置为1的点将被移除。

我尝试使用下面的 VEX 代码,但它说类型下标无效:int.will_be_removed

if(@ptnum.will_be_removed == 1)
{
    removepoint(0, @ptnum);
}

如何正确引用这些点?

我想我想出了一个办法。使用@will_be_removed代替@ptnum.will_be_removed代替:

if(@will_be_removed == 1)
{
    removepoint(0, @ptnum);
}

这段代码中的错误

if(@ptnum.will_be_removed == 1)
{
    removepoint(0, @ptnum);
}

是因为@ptnum是一个VEX type int@ptnum 也可以写成 i@ptnum 来明确表示它的类型,但由于它是一个众所周知的属性(请参阅 link 中的文档),您也可以将它写成 shorthand 作为 @ptnum.

int类型是数字,不包含其他数据的集合。

关于属性,如果它们是 vertex, point, primitive, or detail attributes,您还需要记住。

Attribute precedence

When two components in the same geometry have an attribute with the same name, the attribute on the "lower level" of geometry is used, so:

Vertex attributes, which override:

     Point attributes, which override:

         Primitive attributes, which override:

                 Detail (whole geometry) attributes

或者一位 liner wrangler 将是

if (@will_be_deleted == 1) removepoint(0, @ptnum);