Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 6, 2012 03:53:08

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

Написал такой скрипт для программы Autodesk Maya:
http://pastebin.com/VDvLuv1Q
Что он делает написано в комментариях к скрипту, но почему то если сразу выбирать компоненты и применить скрипт, он не срабатывает, а вот если еще раз выбрать компоненты и применить то тогда срабатывает, т.е. если изначально сразу выбирать компоненты срабатывает со второго раза, в чем ошибка не могу понять.
C остальными условиями все работает сразу как и нужно, проблема только с этими компонентами (17-19 строки), вчера весь день голову ломал, чет так и не понял с чем связана данная проблема.
Help me

Офлайн

#2 Дек. 6, 2012 11:49:12

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

может elif нужно заменить на if

if cmds.selectMode(q=True, co=True):
autodesk не знаю, написал в расчете на то что вы неправильно поняли условные операторы т.к. в
if not obj:
...
elif obj:
...
правильнее было бы сделать
if not obj:
...
else:
...


Офлайн

#3 Дек. 6, 2012 12:36:07

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

sergeek, спасибо, ну в данном случае else не помогло, зато до меня наконец то доперло почему не работает, это косяк в maya, там короче если выделять компоненты через горячую клавишу или через нормальное меню, то cmds.selectMode(q=True, co=True) вернет истину, и все сработает с первого раза, а вот если выделять через маркинг менюшки (как бы панель для быстрой навигации по основным командам или что то типа того), вот тут как раз и косяк, майа переключает на компоненты только в графическом виде, а вот скажем так на программном уровне остается object mode. Поэтому cmds.selectMode(q=True, co=True) роли не играет, т.к. на программном уровне компоненты как будто и не были выделены.

Отредактировано smoke853 (Дек. 6, 2012 12:37:08)

Офлайн

#4 Дек. 6, 2012 13:18:33

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

исправить надо было тут

if cmds.selectMode(q=True, co=True):
то что я писал ниже работает одинаково верно, просто в вашем варианте делается лишняя проверка условия
в этом коде
   #и если включен object mode.
    if cmds.selectMode(q=True, o=True):
        #включается инструмент insert edge loop tool и можно нарезать столько лупов, сколько нужно.
        cmds.setToolTo(cmds.polySelectEditCtx())
    #и если включен component mode и выбраны к примеру вертексы или эджи.
    elif cmds.selectMode(q=True, co=True):
        #применить connect component к выделенным компонентам.
        cmds.polyConnectComponents(obj, ch=True)
если включен обжект мод (если в проверке все верно) то условие:
   elif cmds.selectMode(q=True, co=True):
        #применить connect component к выделенным компонентам.
        cmds.polyConnectComponents(obj, ch=True)
не будет проверяться и его тело не выполнится. Поэтому оно и работает в только в моде, отличном от обжект мода. Мне кажется это не то что вам нужно

Офлайн

#5 Дек. 6, 2012 15:23:21

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

sergeek, судя по вашему ответу во 2-м посте, я исправил так, я правильно понял суть исправления ?

import maya.cmds as cmds
obj = cmds.ls(sl=True)
if not obj:
    cmds.setToolTo(cmds.polyCutCtx())
else:
    if cmds.selectMode(q=True, o=True):
        cmds.setToolTo(cmds.polySelectEditCtx())
    if cmds.selectMode(q=True, co=True):
        cmds.polyConnectComponents()
P.S. и это не сработало.
cmds.selectMode() возвращает True или False.
http://download.autodesk.com/global/docs/maya2013/en_us/CommandsPython/selectMode.html

т.е. если не будет кода cmds.selectMode(q=True, co=True) то как же майа поймет что в данном случае включен component mode.
Вообщем как я и написал выше сейчас все работает, просто в компонентный режим нужно переходить либо через hotkey либо через иконку. Тогда вот этот скрипт работает: http://pastebin.com/VDvLuv1Q

А вот если выбирать вот так, то уже условие 2.2. работает только со второго раза:
http://savepic.ru/3438411.jpg
http://savepic.ru/3432267.jpg
Запускаю скрипт, он у меня на хоткей назначен.
http://savepic.ru/3418955.jpg

Отредактировано smoke853 (Дек. 6, 2012 15:25:57)

Офлайн

#6 Дек. 7, 2012 14:49:36

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Никак не пойму в чем ошибка.

Сегодня меня осинило, и я переписал скрипт, теперь все работает идеально. как и задумывалось.
http://pastebin.com/fyTtGbKY

Отредактировано smoke853 (Дек. 7, 2012 15:10:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version