Render.ru

Mel ожидающий или mel срабатывающий

Ro

Знаток
Рейтинг
38
#1
Добрый день, подскажите, пожалуйста, как сделать:
1. Запускаем мел-команду, которая ждет и никак себя не выдает до тех пор, пока в сцене не появится объект pSphere1. Когда пользователь создает эту сферу, мел сразу сам пишет "Hello world!" и отключается.
Или другой вариант, если первый не покатит:
2. Мел-команда срабатывает каждый раз при любос действии пользователя - создание обьектов, редактирование, удаление и т.д. до тех пор, пока пользователь ее не отключит другой, специально обученной, командой
Заранее благодарю
 

Ro

Знаток
Рейтинг
38
#4
sanctus, благодарю. Только не нашел способа, что бы scriptJob выполнял действия пока не выполнено нужное условие, после чего он бы сам себя завершал. Для примера простой скрипт - выполняется scriptJob, которsq должен самозавершиться, когда пользователь выберет куб. Пишет, что не может закрыть сам себя
polyCube;
scriptJob -e "SelectionChanged" parcing;
proc parcing(){
string $selection2[] = `ls -sl`;
if ($selection2[0] == "pCube1") scriptJob -ka;
}
sanctus, есть мнения, как это реализовать без нагромождения процессов?
 

sanctus

Активный участник
Рейтинг
15
#5
дело в том что скриптджоб нужно удалять по его номеру.
а номер ему выдается при созданиии, то есть в теле функции, вы не можете его заранее знать.
обойти можно.

посмотрите у меня в блоге в разделе загрузок старый автосейв, в нем кажется я писал подробные комменты.
 

Cyberika

Знаток
Рейтинг
21
#8
Если я правильно понял, то код будет выглядеть будет так :

Код:
import maya.cmds as cmds

class ExampleClass:
    def __init__(self):
        
        self.createScriptJob()
        
    def createScriptJob(self):
        self.scriptJobNum = cmds.scriptJob(event=["SelectionChanged", self.myFunction], killWithScene=True)
        
    def deleteScriptJob(self):
        cmds.scriptJob(k = self.scriptJobNum, force=True)    
        
    def myFunction(self):
        
        selectedObject = []
        selectedObject = cmds.ls(selection=True)
        
        if not selectedObject: 
            return
               
        if selectedObject[0] == "pSphere1":
            print "hello world"
            self.deleteScriptJob()
        
        
object = ExampleClass()
object.myFunction()
 

Cyberika

Знаток
Рейтинг
21
#9
Создайте сферу(pSphere1), куб и еще какие нибудь примитивы. Выделите примитивы по очереди, когда дойдете до сферы код выведет- "Hello World" После чего скриптДжоб удалится.
 

Cyberika

Знаток
Рейтинг
21
#14
А вы уверены , что все правильно делаете? Потому, что я его протестил на двух разных компах и он работает. Иногда по пока непонятным причинам не видит булеан значение для флага selection команды ls, но это лечится повторным вводом кода.
 

Cyberika

Знаток
Рейтинг
21
#15
Вечером, когда вернусь с работы постараюсь снять скрин-видео и выложить его на ютубе.
 
Сверху