3DCenter.ru

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

 
Reply to this topicStart new topic
> Скрипт для определения типа выделенного компонента или объекта.
Nevajno
сообщение 16/04/2014, 08:16
Сообщение #1


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



Приветствую!
Давно не скриптовал, сейчас туплю wacko.gif
Не получается создать скрипт для определения типа выделенного компонента или объекта.
Точнее, надо, чтоб при разном выделении выполнялись разные команды.
Подскажите, плз!


Сообщение отредактировал Nevajno - 16/04/2014, 08:28
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 16/04/2014, 09:20
Сообщение #2


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



может это?

Цитата
string $mesh[] = `ls -type mesh`;
select $mesh;
Go to the top of the page
 
+Quote Post
Nevajno
сообщение 16/04/2014, 09:44
Сообщение #3


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



QUOTE (ECXIMER @ 16/04/2014, 13:20) *
может это?

QUOTE
string $mesh[] = `ls -type mesh`;
select $mesh;


Эм.. По-моему этого недостаточно для выполнения моей задачи.
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/04/2014, 15:04
Сообщение #4


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

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



Код
mc.filterExpand( sm=(.., ) )

В sm (selectionMask) указываются типы итемов. Например:
Код
if mc.filterExpand( items, sm=(34,) ):
     do something

В данном случае будет фильтровать итемы по полигонам. Исли итемы не указаны то будет работать с текущим выделением. В маске можно указывать разные типы. В доке есть описание масок.
Это пистон, но я думаю понятно что к чему...

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


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

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



Go to the top of the page
 
+Quote Post
Nevajno
сообщение 16/04/2014, 20:03
Сообщение #6


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



Спасибо, попробую. Правда, питоном совсем не пользовался.
Можно ли в нем вызывать мел-команды?

Сообщение отредактировал Nevajno - 16/04/2014, 20:15
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/04/2014, 20:11
Сообщение #7


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

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



MEL

Код
$polygons=`filterExpand -sm 34`;
if (size($polygons) > 0)
{
    \\ DO SOMETHING WHITH SELECTED POLYGONS
}
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/04/2014, 22:22
Сообщение #8


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

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



Цитата(Nevajno @ 16/04/2014, 20:03) *
Можно ли в нем вызывать мел-команды?

Код
from maya.mel import eval as mel
mel('sphere;')
Go to the top of the page
 
+Quote Post
VUX
сообщение 16/04/2014, 22:31
Сообщение #9


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

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



Цитата(Nevajno @ 16/04/2014, 08:16) *
Приветствую!
Давно не скриптовал, сейчас туплю wacko.gif
Не получается создать скрипт для определения типа выделенного компонента или объекта.
Точнее, надо, чтоб при разном выделении выполнялись разные команды.
Подскажите, плз!


а что нужно в скрипте - мож помогу smile.gif
Go to the top of the page
 
+Quote Post
Nevajno
сообщение 17/04/2014, 03:21
Сообщение #10


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



QUOTE (VUX @ 17/04/2014, 02:31) *
QUOTE (Nevajno @ 16/04/2014, 08:16) *
Приветствую!
Давно не скриптовал, сейчас туплю wacko.gif
Не получается создать скрипт для определения типа выделенного компонента или объекта.
Точнее, надо, чтоб при разном выделении выполнялись разные команды.
Подскажите, плз!


а что нужно в скрипте - мож помогу smile.gif

Изначально решил расширить функции Маркинг меню:
Сам уже давно сделал, чтоб разных окнах вызывались разные ММ. Вот и решил добавить возможности, чтоб при разных видах выделении (типа объекта или его компонентов), вызывались разные маркинг менюшки.

Уже давно хотел заняться этим, да всё времени не было. Но недавно, описывая преимущество ММ на соседнем форуме, вновь вспомнил об этом улучшении...

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

Сообщение отредактировал Nevajno - 17/04/2014, 03:29
Go to the top of the page
 
+Quote Post
Nevajno
сообщение 17/04/2014, 13:44
Сообщение #11


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



Вроде бы сам разобрался. Получилось вот так:

if(size(`filterExpand -sm 12`)>=1)
print "Polygon";
else
if(size(`filterExpand -sm 10`)>=1)
print "NURBS";
else
if(size(`filterExpand -sm 9`)>=1)
print "Curve";
else
if(size(`filterExpand -sm 31`)>=1)
print "Vertex";
else
if(size(`filterExpand -sm 32`)>=1)
print "Edges";
else
if(size(`filterExpand -sm 34`)>=1)
print "Face";
else
if(size(`filterExpand -sm 35`)>=1)
print "UV";


Начальный шаблон готов. Остальное - дело техники... cool.gif

Сообщение отредактировал Nevajno - 17/04/2014, 13:52
Go to the top of the page
 
+Quote Post
VUX
сообщение 17/04/2014, 15:54
Сообщение #12


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

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



Я бы так сделал. Меньше вычислений и больше эффективности:
Код
$items = `ls -sl`;
if ( size($items) ) > 0
{
    $polyMeshes = `filterExpand -sm 12 $items`;
    $nurbsSurfaces = `filterExpand -sm 10 $items`;
    $nurbsCurves = `filterExpand -sm 9 $items`;
    $polyVerts = `filterExpand -sm 31 $items`;
    $polyEdges = `filterExpand -sm 32 $items`;
    $polyFaces = `filterExpand -sm 34 $items`;
    $polyUVs = `filterExpand -sm 35 $items`;

    if ( size($polyMeshes) ) > 0
    {
        // Poly Meshes in Selection. Also other types can exists in selection
    }

    ...
}
else print "Empty selection !!!";


Так же, чем больше входиш во вкус тем более универсальным хочется его сделать.
Например чтобы в выделении требовались только вертексы и ничего иного, то продолжаем проверять условия по типу: если polyVerts>0 и polyFaces==0 и т.д. и т.п.

Чтобы работало в разных панелях по разному, рыть в сторону getPanel -t ...

Сообщение отредактировал VUX - 17/04/2014, 15:56
Go to the top of the page
 
+Quote Post
Nevajno
сообщение 17/04/2014, 18:20
Сообщение #13


Персональный аниматор
Иконка группы

Группа: Участник
Сообщений: 1 743
Регистрация: 11/01/2005
Из: Новосибирск
Пользователь №: 9 411



QUOTE (VUX @ 17/04/2014, 19:54) *
Я бы так сделал. Меньше вычислений и больше эффективности:
CODE
$items = `ls -sl`;
if ( size($items) ) > 0
{
    $polyMeshes = `filterExpand -sm 12 $items`;
    $nurbsSurfaces = `filterExpand -sm 10 $items`;
    $nurbsCurves = `filterExpand -sm 9 $items`;
    $polyVerts = `filterExpand -sm 31 $items`;
    $polyEdges = `filterExpand -sm 32 $items`;
    $polyFaces = `filterExpand -sm 34 $items`;
    $polyUVs = `filterExpand -sm 35 $items`;

    if ( size($polyMeshes) ) > 0
    {
        // Poly Meshes in Selection. Also other types can exists in selection
    }

    ...
}
else print "Empty selection !!!";


Так же, чем больше входиш во вкус тем более универсальным хочется его сделать.
Например чтобы в выделении требовались только вертексы и ничего иного, то продолжаем проверять условия по типу: если polyVerts>0 и polyFaces==0 и т.д. и т.п.

Чтобы работало в разных панелях по разному, рыть в сторону getPanel -t ...

Спасибо, попробую.
А с панелями, как я уже писал раньше, разобрался давным-давно.
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Fast ReplyReply to this topicStart new topic

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

 



RSS Текстовая версия Сейчас: 18/08/2019 - 12:25