3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Universal Delete Tool, требуется помощь
Bravlin
сообщение 12/05/2014, 13:47
Сообщение #1


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 24
Регистрация: 15/02/2014
Пользователь №: 99 421



Хочю сделать универсальный тул для того что бы с одной кнопки удалять и компоненты и обьекты.
Операторов как я понял два:
DeletePolyElements; //для компонентов
doDelete; // для обьектов
в mel не очень разбираюсь, подскажите пожалуйста как получить текущий режим редактирования
что бы сообразно выбрать один из операторов.
Go to the top of the page
 
+Quote Post
witcher
сообщение 12/05/2014, 22:26
Сообщение #2


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 472
Регистрация: 10/01/2006
Пользователь №: 20 894



самое простое и напрашивающееся решение - тупой текстовый парсинг текущего выделения
сначала получаешь массив твоих текущих выделенных чегототам через ls -sl
затем пробегаешься циклом for - in по каждому элементу массива и проверяешь его следующим образом
если в имени есть паттерн ".vtx" - значит текущий выделенный объект - вертекс - соответственно применяем к нему то что надо для вертекса
если в имени есть паттерн ".e" - значит текущий выделенный объект - ребро - соответственно применяем к нему то что надо дял ребра
если в имени есть паттерн ".f" - значит текущий выделенный объект - фейс - соответственно применяем к нему то что надо для фейса
если ни то ни друго ни третее - значит выделен объект - и можно примменять к нему действия для объектов

поскольку майя никогда не даст написать символ "." (точка) в имени какой либо ноды - то такой способ достаточно надёжен и у меня есть несколько старых скриптов которые его используют и юзаются в работе лет 6-7 и ни разу никаких двусмысленных ситуаций не возникало
Go to the top of the page
 
+Quote Post
witcher
сообщение 12/05/2014, 22:30
Сообщение #3


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 472
Регистрация: 10/01/2006
Пользователь №: 20 894



и кстати такое лучше делать на питоне, (впринцыпе все скрипты в маей уже давно лучше писать на нём) напрмер та же проверка наличия строки в строке там есть из коробки ,а в мел точно не помню но скорее всего прийдётся какуюто дополнительную конструкцию наворачивать
Go to the top of the page
 
+Quote Post
Bravlin
сообщение 12/05/2014, 22:34
Сообщение #4


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 24
Регистрация: 15/02/2014
Пользователь №: 99 421



Я вот тоже всё думал насколько у MEL вообще есть будущее
но почти готовый цикл нашёл на нём так что пока для себя решил так
Код
                global proc UniversalCollapse()
                {
                     int $modeVert = `selectType -q -v`;
                     int $modeEdge = `selectType -q -eg`;
                     int $modeFace = `selectType -q -fc`;
                     int $modeUV = `selectType -q -puv`;
                    
                     if ($modeVert && !$modeEdge && !$modeFace && !$modeUV)
                         doDelete;
                     else if (!$modeVert && $modeEdge && !$modeFace && !$modeUV)
                         polyCollapseEdge;    
                     else if (!$modeVert && !$modeEdge && $modeFace && !$modeUV)
                         polyCollapseEdge;
                     else if (!$modeVert && !$modeEdge && !$modeFace && $modeUV)
                         return "UV";
                     //return "Object";
                }


Сообщение отредактировал Bravlin - 12/05/2014, 22:35
Go to the top of the page
 
+Quote Post
VUX
сообщение 14/05/2014, 12:25
Сообщение #5


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



Цитата(Bravlin @ 12/05/2014, 22:34) *
Я вот тоже всё думал насколько у MEL вообще есть будущее


На самом деле если проанализировать достоинства питона то мел - полный отстой.
Многие сидят на нем потому что просто привыкли. С 2008-го использую исключительно питон.
Можно кстати делать довольно забавные конструкции. Например у меня работа с контейнером в скрипте выглядит примерно так:

Код
container = Container()

poly_sphere = mc.polySphere()[0]
poly_cube = mc.polyCube()[0]

container < [ poly_sphere, poly_cube ]
container <= [ poly_sphere+'.t', poly_cube+'.t' ]


Расшифровка.
Создается пустой контейнер. В него добавляются куб и сфера и публикуются их аттрибуты translate. Вполне логично, по сравнению с стандартным синтаксисом.
И да, как сказал witcher работа со строками в меле - это АД по сравнению с пистоном.
Так что делайте выводы smile.gif

ПС Для универсального (правильного) удаления я бы использовал функцию filterExpand для сортировки компонентов

Сообщение отредактировал VUX - 14/05/2014, 12:34
Go to the top of the page
 
+Quote Post
witcher
сообщение 14/05/2014, 22:42
Сообщение #6


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 472
Регистрация: 10/01/2006
Пользователь №: 20 894



насчёт мела в мае добавлю так:
когда питон в мае только появился он был там достаточно коряв, неполон (не все команды мела были реализованы) и самое главное он был просто "зеркалом" мела - т.е. фактически тем же мелом но с питоновским синтаксисом (я не касаюсь питон апи это про другое). Т.е. мощные фишки питона заюзать было можно но сама интеграция в маю постоянно вставляла палки в колёса.
Вот тогда мел был нужен.
Сейчас же питон в майе цветёт и пахнет:
Тот питон-аналог-мела допилили и он полностью перекрывает все меловские встроенные функции
Добавлен PyMel - это альтернанивная интеграция питона в маю которая юзает возможности объектно ориентированного программирования, даёт из коробки кучу фич и позволяет писать более лаконичный код за счёт удобных ооп конструкций
а так же добавлен PySide (аналог PyQt) - мощный, и при этом простой в освоении проффесиональный инструмент для создания графических интерфейсов и многого другого - по сравнению с ним стандартный меловский фуекционал для GUI даже стыдно в пример приводить.
Вобщем сейчас мел в мае может пригодиться разве что для каких нибуть настроечных скриптов типа юзерсетап, или там полку сделать или менюшку добавить - для таких всяких мелочей

Сообщение отредактировал witcher - 14/05/2014, 22:43
Go to the top of the page
 
+Quote Post
VUX
сообщение 15/05/2014, 00:53
Сообщение #7


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



еще б в експрешены его втулили
Go to the top of the page
 
+Quote Post
VUX
сообщение 15/05/2014, 01:05
Сообщение #8


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



Цитата(witcher @ 14/05/2014, 22:42) *
добавлен PySide (аналог PyQt) - мощный, и при этом простой в освоении проффесиональный инструмент для создания графических интерфейсов и многого другого - по сравнению с ним стандартный меловский фуекционал для GUI даже стыдно в пример приводить.


Это вообще нонсенс facepalm.gif . И не только в мае. В любом Qt-софте где есть пистон PySide\PyQt полностью переворачивает понятие кастомизации софта
Go to the top of the page
 
+Quote Post
VUX
сообщение 15/05/2014, 01:18
Сообщение #9


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



скоро AD сделает pymel официальным и выдаст это за новую фичу wink.gif
Go to the top of the page
 
+Quote Post
Bravlin
сообщение 16/05/2014, 11:45
Сообщение #10


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 24
Регистрация: 15/02/2014
Пользователь №: 99 421



Ещё вопрос знатокам:
допустим я добавил кастомный атрибут.
Выделив его в chanelBox можно рулить с помошью CTRL+MMB
Такой вопрос: можно ли как-то прописать в процедуру что бы по её завершении выбирался этот атрибут
что бы можно было его быстро накрутить ?
То-есть мне нужно не получить значение и исправить его в теле скрипта (мне не нужен getAttr)
а мне нужно установить курсор (или сделать активным) атрибут обьекта что бы можно было его быстро накрутить.
Тут вроде нет команды Select

Есть вот такая питонская конструкция:
Код
import maya.cmds as cmds
import maya.mel as mel

def getChannels (*args):

gChannelBoxName = mel.eval('$temp=$gChannelBoxName')
chList = cmds.channelBox (gChannelBoxName, q=True, sma = True)
if chList:
for channel in chList:
print channel
else:
print 'No channels selected!'
return False

getChannels()

но я не силён в питоне и не очень понимаю выбирает ли она атрибут или просто выводит список уже выбраных отрибутов

Сообщение отредактировал Bravlin - 16/05/2014, 12:37
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/05/2014, 13:01
Сообщение #11


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



1. CTRL+MMB не обязательно, можно просто MMB, а вот в AttributeEditor-е в активном контроле CTRL+LMB - тоже "двигает" аттрибут только по другому Ну это так на всякий случай.
2. Селектить из каробки нельзя. Можно узнать список активных.
3. Для селекта неизкаробки щас чтото придумаю - мне интересно wink.gif

Сообщение отредактировал VUX - 16/05/2014, 13:03
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/05/2014, 13:55
Сообщение #12


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



как вариант

Код
def dragAttr( attr_names ):
    if not cmds.dragAttrContext('dragAttributeCtx', ex=True):
        cmds.dragAttrContext('dragAttributeCtx')
    cmds.dragAttrContext( 'dragAttributeCtx', e=True, ct=attr_names )
    cmds.setToolTo( 'dragAttributeCtx' )


Пример:
http://youtu.be/nEGa-t-RpLY

Сообщение отредактировал VUX - 16/05/2014, 14:08
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/05/2014, 14:34
Сообщение #13


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



Shift - ускоряет драг, Control - замедляет

Сообщение отредактировал VUX - 16/05/2014, 14:34
Go to the top of the page
 
+Quote Post
Bravlin
сообщение 16/05/2014, 16:31
Сообщение #14


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 24
Регистрация: 15/02/2014
Пользователь №: 99 421



Ого , апперативно. Спасибо.
Загрузили по работе, чуть позже попробую.
На всякий случай: если мне нужно ряд глобальных процедур на MEL'е прописать в .py скрипте есть какие-то нюансы синтаксиса ?
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/05/2014, 17:59
Сообщение #15


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 070
Регистрация: 17/04/2007
Из: отТуда
Пользователь №: 47 967



Вроде ничего особого сейчас не требуется:
1. Переменная возвращается по mel.eval("$temp=...") - это вы уже знаете.
2. Процедура возвращает результат нормально простым вызовом result = mel.eval('melProcedure(...)'). Раньше вроде проблемы с этим были.
3. Больше не знаю, так как mel умер для меня давно...
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






2 страниц V   1 2 >
Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 29/03/2024 - 14:14