Я бы хотел, чтобы одна из моих процедур MEL Maya выполнялась каждые x секунд. Есть ли способ сделать это?Как выполнить процедуру Maya MEL с регулярными интервалами
ответ
В общем, нет. Однако в Python я был в состоянии создать что-то, что работает очень хорошо:
import time
def createTimer(seconds, function, *args, **kwargs):
def isItTime():
now = time.time()
if now - isItTime.then > seconds:
isItTime.then = now # swap the order of these two lines ...
function(*args, **kwargs) # ... to wait before restarting timer
isItTime.then = time.time() # set this to zero if you want it to fire once immediately
cmds.scriptJob(event=("idle", isItTime))
def timed_function():
print "Hello Laurent Crivello"
createTimer(3, timed_function) # any additional arguments are passed to the function every x seconds
Я не знаю, что накладные расходы, но он работает только на холостом ходу в любом случае, так что это, вероятно, не имеет большого значения.
Большая часть этого может быть выполнена в Мел (но, как обычно, не так элегантно ...). Самое большое препятствие - это время. В Меле вам придется разобрать звонок system time
.
Edit: Имея это Python, вы можете вызвать ваш код Мел внутри питона timed_function()
Установка Mel будет
scriptJob -e "idle" "yourScriptHere()";
Однако это трудно, чтобы получить время в секундах от Мел-система («время/т») даст вам время на минуту, но не второе на окнах. В системе Unix («дата + \»% H:% M:% S \ "") вы получите часы, минуты и секунды.
Основным недостатком scriptJob является то, что незанятые события не будут обрабатываться, когда пользователь или сценарий будет работать - если либо графический интерфейс, либо скрипт что-то долго не будет вызывать в течение этого периода события.
Вы можете сделать это в Python с потоками, а также:
import threading
import time
import maya.utils as utils
def example(interval,):
global run_timer = True
def your_function_goes_here():
print "hello"
while run_timer:
time.sleep(interval)
utils.executeDeferred(your_function_goes_here)
# always use executeDeferred or evalDeferredInMainThreadWithResult if you're running a thread in Maya!
t = threading.Thread(None, target = example, args = (1,))
t.start()
Нити гораздо более мощным и гибким - и большая боль в приклад. Они также страдают от того же ограничения, что и случайное событие scriptJob; если Майя занята, они не будут стрелять.
- 1. Как сделать скрипт bash выполнить команду с регулярными интервалами
- 2. Maya MEL scripting sprintf эквивалент
- 3. Maya MEL/Python Сохранение данных
- 4. сплит-строка с регулярными интервалами
- 5. Трехмерная сетка с регулярными интервалами
- 6. Joomla Возможно ли выполнить плагин автоматически с регулярными интервалами?
- 7. Очистка базы данных с регулярными интервалами
- 8. Сценарий Maya MEL для создания неявных поверхностей
- 9. Maya, MEL, ошибка при выполнении всего скрипта
- 10. Съемка с регулярными интервалами (Android Camera API)
- 11. Тестирование интернет-соединения с регулярными интервалами
- 12. Вызывающая функция рекурсивно с регулярными интервалами
- 13. Передача переменных из MEL в выражение MAYA
- 14. Что такое эквивалент Python (Mel) Substitute, Maya
- 15. Maya C++ API-эквивалент MEL setKeyframe
- 16. Maya MFnPlugin :: registerUI для вызова Python вместо сценариев MEL
- 17. Как подключить MEL UI к редактору UV Texture от Maya?
- 18. Создание простой иерархической структуры в Maya с использованием mel/python
- 19. Как перемешать изображения с регулярными интервалами времени при наведении курсора
- 20. Как автоматизировать службу WCF, которая выполняет задание с регулярными интервалами
- 21. Как разделять строку с регулярными интервалами в Python 3
- 22. Как узнать имена доступных атрибутов узла? (Maya Python или MEL)
- 23. Провайдерите приложение с регулярными интервалами при использовании UIBackgroundModes = location
- 24. Вызывать метод с регулярными интервалами с использованием Java
- 25. Выполнение задач с регулярными интервалами с использованием while (true)
- 26. Как выполнить процедуру sub
- 27. Maya Python/MEL скрипт для замены/замены материала
- 28. Невозможно заставить horizontalSlider скользить с регулярными временными интервалами
- 29. Команда AttrFieldSliderGrp, используемая в MEL/Python в Maya
- 30. Subversion: Слияние версий исходного кода поставщика с регулярными интервалами
Вы уверены, что функция Python не будет аннулировать майю, пока она не вернется полностью? Кроме того, я бы вообще не рекомендовал 'idleEvent' * *. [Doc] (http://download.autodesk.com/global/docs/maya2013/en_us/Commands/scriptJob.html) правильно говорит. * Используйте idleEvents с осторожностью. * У этого есть плохие побочные эффекты, из которых один из них является пустой редактор атрибутов, чистый сланец! Вы попадаете в ногу, используя его. Хотя вы предлагаете «простоя», я не уверен, что все иначе. –
Пользовательский интерфейс Maya работает на одном потоке, поэтому его всегда будет блокировать код, который работает в потоке пользовательского интерфейса (mel или Python). Однако с потоками python вы можете запускать длинные фоновые процессы _without_ blocking, кроме случаев доставки результата (вызовы executeDeferred и evalDeferredInMainThreadWithResult вызывают этот бит выполнения в основной поток). К сожалению, большинство сценарных манипуляций также входят в поток пользовательского интерфейса. Idle является «безопасным» в том смысле, что он работает, но вы просто хотите запускать очень легкий код в режиме ожидания, или вы сделаете программу очень медленной. – theodox