Houdini, Python: ключевые кадры диапазона, случайного выбора и временного сдвига - PullRequest
0 голосов
/ 29 мая 2020

У меня есть простая модель object_A с 10 keyframes.
Фреймы 1-5 вращаются только по X, фреймы 6-10 вращаются только по Y.

Per copy to point (Houdini) Я копирую object_A как instance в каждую точку сетки.

Теперь я хотел бы range, randomize and timeshift ключевых кадров для каждого экземпляра.
В range из 1 -5, выберите ключ random и timeshift этот ключевой кадр для frame 1.

Я также хочу определить ключевые кадры в раскрывающемся списке. В раскрывающемся списке есть два токена и две метки ((1, 5), (rotation_x)) и ((6, 10), (rotation_y))

Мои первые строки выглядят так:

import random

def retime_frames():

    # values from dropdown tokens
    fr_get = hou.evalParm('choose_frame_set')

    for frX in range(fr_get):
        fRandom = (random.choice(frX))
        hou.parm('retime_frame').set(str(fRandom))
        print fRandom

Я получаю сообщение об ошибке и не знаю где. Если я использую список вроде [1, 2, 3, 4, 5], он работает. Но как только я пытаюсь использовать диапазон (var), он больше не работает.

TypeError: range() integer end argument expected, got str.

enter image description here

1 Ответ

0 голосов
/ 31 мая 2020

Я нашел решение для случайных кадров.

import random

""" Give out randomized, single frame
from given frame sequence preset. To add more presets
modify 'Choose Frame Set' menu in parameters.
'token' example1: '1-5' = frames 1 till 5.
'token' example2: '1-3, 7, 10-12' = 1 till 3 + 7 + 10 till 12
"""

def retime_frames():

    fr_range = hou.evalParm("choose_frame_set")
    fr_sequence = []

    for frames in fr_range.split(','):
        if '-' in frames:
            a, b = frames.split('-')
            a, b = int(a), int(b)
            fr_sequence.extend(range(a, b + 1))
        else:
            a = int(part)

    # random frame from frame_sequence, stepping (frame_range, step)
    random_frame = random.sample(fr_sequence, 1)

    hou.parm('retime_frame').set(str(random_frame)[1])
    print str(random_frame)[1]

retime_frames

...