Houdini VEX:流控制语句

  • 循环语句

    • do statement [while (condition)]
    • for (init; condition; change) statement
    • foreach (type value; array) statement
    • foreach (int index, type value; array) statement
    • while (condition) statement
int i = 0;

for (float foo = 1; foo <= 128; foo *= 2, i++) {
    vector pos = point(0, "P", i);
    --pos.y;
    setpointattrib(0, "P", i, pos);
}
for (int n = 0; n < 10; n++) {
    addpoint(0, set(n, 0, 0));
}
s@a = "andyvfx";

foreach (string s; @a) {
    printf("%g\n", s);
}
i[]@a = {10, 20, 30, 40, 50, 60};

foreach (int i; @a) {
    printf(itoa(i) + "\n");
}
i[]@a = {10, 20, 30, 40, 50, 60};

foreach (int i; int v; @a) {
    printf(itoa(i) + "\n");
    printf(itoa(v) + "\n");
}
  • 条件语句

    • if (condition) statement_if_true [else statement_if_false]
    • if (condition) statement_if_true [else if (condition) statement_if_true] else statement_if_false
  • break & continue & return

int max(int a, b) {

    if (a > b) {
        return a;
    }

    return b;
}
for (int i = 0; i < sizes; i++) {
    mixamount += getAmount(roughness);

    if (mixamount > 1) {
        break;
    }
}
foreach (x; myarray) {

    if (x < 10) continue;
    ...
}
  • 与或非 && || !
if (@ptnum % 2 == 0) {
    print("%g\n", @ptnum);
}


if (@ptnum % 2) {
    print("%g\n", @ptnum);
}
  • 条件表达式
@Cd = @ptnum ? 1 : 0;