Как убрать очки на основе их атрибутов в Гудини?

Я создал кривую с несколькими точками. Теперь я хочу удалить некоторые точки на основе одного из их атрибутов (will_be_removed).

[img] https://imgur.com/T9DLpk6 [/ img]

Как показано на рисунке выше, те точки с i@will_be_removed, установленным в 1, будут удалены.

Я попытался использовать код VEX ниже, но он сказал недопустимый индекс для типа: int.will_be_removed

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

Как я могу правильно ссылаться на эти точки?

3 ответа

Решение

Я думаю, я найду способ сделать это. Вместо этого используйте @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 int. @ptnum также может быть написано i@ptnum чтобы явно указать его тип, но так как это хорошо известный атрибут (см. документацию в ссылке), вы также можете написать его как @ptnum,

int типы являются числами и не содержат наборов других данных.

Что касается атрибутов, вы также должны иметь в виду, являются ли они атрибутами вершин, точек, примитивов или деталей.

Приоритет атрибута

Когда два компонента в одной и той же геометрии имеют атрибут с одинаковым именем, используется атрибут на "нижнем уровне" геометрии, поэтому:

Атрибуты вершины, которые переопределяют:

Атрибуты точек, которые переопределяют:

Примитивные атрибуты, которые переопределяют:

Атрибуты детали (всей геометрии)

или один лайнер будет

      if (@will_be_deleted == 1) removepoint(0, @ptnum);
Другие вопросы по тегам