Render.ru

select objects by name

#1
Ребят. Безуспешно искал в мануале способ селектить обьекты по части имени.

Пример:
В сцене 50 обьектов с именами
red_win_1
red_win_2
red_win_3
.
.
.
red_win_50

нужно выбрать их по части имени red_win_
 
#3
Походу нет такого в Синей (и не больно-то хотелось :). Ты имеешь ввиду максовскую функцию по клавише «H»? Так в максе эта функция возникла потому что у него нет «Менеджера Объектов». А в Синей он есть и объекты всегда на виду. Причем их можно группировать для последующего выделения (а группа в Синьке несколько отличается от групп Макса именно прямым доступом к любому объекту без надобности что-то «открывать» «извлекать» и т.п.). Можно выбирать обводя габаритной рамкой в Objects. Можно, наконец, закреплять выбранное в Selection objects, но вот выбирать по алфавиту по-моему нельзя (или нужно ждать более искушенную публику для расстановки всех точек над i).
 
#4
Видимо, нужно ждать более искушенную публику, поскольку все, кроме информации про макс (которым я не пользуюсь :), мне уже известно.
Спасибо, что не поленился и набрал такой длинный текст. ;)
 
#5
2 Nek. Ты какой-то злой и невежливый. Нехорошо. Люди ведь к тебе доброжелательно... Кто как может, тот так и помогает.
А ты, блин, сама язва и желчь!
Ну куда это годится?
 
#6
Ну не удержался.
Задал вопрос ведь нормально, а мне вместо ответа выдали кучу бесполезной информации. Я своей репликой показал, что это был не ответ. Вот АкаМу реальное спасибо. Его и поблагодарил. Он такой ответ дал, который скорей всего пригодится не только мне.
Выходит, что я и добрым и злым бываю.
 
#7
Ну и слава Богу что никто не стал в бутылку лезть.
А то ведь у нас тут все равно такой хороший форум. Вполне теплая и дружелюбная обстановка. Это, кстати, сильно мне бросилось в глаза когда я впервые сюда зашел и начал людей спрашивать... Хотелось бы ее такой же доброжелательной сохранить и впредь.
 
#8
Вообще, ты очень прав.
Синьковская русскоязычная коммьюнити рулит!
 
#9
> поскольку все, кроме информации про макс (которым я не пользуюсь :),
> мне уже известно.

Тогда это подозрительно… :)
А где ты видел что можно так выделять? (прямо как в анекдоте про жениха, который покрасил свое орудие перед первой брачной ночью в зеленый цвет, чтоб на вопрос невесты «а почему он зеленый?» поинтересоваться «а где ты видела не зеленый??!» :)

Если ты создавал дубликаты, то ведь они сразу сгруппировались. Клон тоже делает все в одной куче. Как же у тебя так получилось? И почему нельзя просто «обвести» нужные объекты в менеджере?
 
#10
Выбирать обьекты по имени совершенно нормальная операция для большого проекта с кучей обьектов. Очень удобный, естественный и прозрачный для пользователя способ селекции.
Если бы его не было, стоило бы его придумать.
Но вообще придуман до меня. :)
Способ выбора обьектов по имени есть например в Maya и LW3d.

У меня проект экспортированный из Макса в .fbx и загруженный в Синьку.
В нем куча обьектов сгруппированных таким образом, что обвести их не выходит.

И вообще, я Синьку в последнее время просто заобожал. Очень хочется найти способ селектить обьекты по имени. Единственный ее минус в моем рабочем процессе. Может плаг какой есть? :)
 
#11
не уверен, но скорее всего есть плагины/скрипты на оф. сайте максонов. там всего до ... очень много. мож и это есть
а если нет, то можешь и сам написать скрипт (если разберешься)
либо ещё можно попросить AkaM (он написал такой хороший плаг aligner)

просто масса вариантов :)
 
#12
Объекты не выделяются прямоугольным или ещё каким там выделением только потому, что оси объектов находятся чёрте знает где :), а выделение происходит именно по захвату оси.
 
#13
Ну, раз функция выделения группы объектов по части имени в Cinema4D обнаружена не была ... то можно сделать следующую штуку.

В папке Plugins (где Синема установлена) создаем текстовый докумет. Вставляем в него следующий текст:
-----------------------------------------------------
const var Plugin_ID = 1000098;
var plgDlg;
enum
{ MOTHER_GRP = 1000,
H_GRP,
NAME,
NAME_TITLE,
SELECT
}
class pluginDialog : GeDialog
{ public:
pluginDialog();
CreateLayout();
Command(id,msg);
}
pluginDialog::pluginDialog()
{ super(Plugin_ID); }
pluginDialog::CreateLayout()
{ SetTitle("pnSelect");
AddGroupBeginV(MOTHER_GRP, BFH_SCALEFIT, 1, "", 0);
AddGroupBorderSpace(2, 1, 1, 1);
AddGroupBorder(BORDER_GROUP_IN);
AddGroupBeginH(H_GRP, BFH_LEFT, 1, "", 0);
AddStaticText(NAME_TITLE, BFH_LEFT, 0, 0, "Name (part):", 0);
AddEditText(NAME, BFH_LEFT, 250, 0);
AddGroupEnd();
AddButton(SELECT, BFH_CENTER, 100, 1, "Select");
AddGroupEnd();
return TRUE;
}
pluginDialog::Command(vID,vMSG)
{ if (vID == SELECT)
{ var sOBJ = GetActiveDocument()->GetFirstObject();
StopAllThreads();
if (GetString(NAME) == "")
return;
do
{ if (strstr(sOBJ->GetName(),GetString(NAME))== -1)
{ if (sOBJ->GetBit(BIT_AOBJ))
sOBJ->ToggleBit(BIT_AOBJ);
}
else
{ if (!sOBJ->GetBit(BIT_AOBJ))
sOBJ->ToggleBit(BIT_AOBJ);
}
GeEventAdd(NEW_ACTIVE_OBJECT);
if (sOBJ->GetDown())
{ sOBJ = sOBJ->GetDown();
continue;
}
if (sOBJ->GetNext())
{ sOBJ = sOBJ->GetNext();
continue;
}
do
{ if (sOBJ->GetUp())
{ sOBJ = sOBJ->GetUp();
if (sOBJ->GetNext())
{ sOBJ = sOBJ->GetNext();
break;
}
}
else
sOBJ = NULL;
}
while (sOBJ);
}
while (sOBJ);
}
}
class selectPlugin : MenuPlugin
{ public:
selectPlugin();
GetID();
GetName();
GetHelp();
Execute(doc);
RestoreLayout(secret);
}
selectPlugin::selectPlugin() {super();}
selectPlugin::GetID() {return Plugin_ID;}
selectPlugin::GetName() {return "pnSelect";}
selectPlugin::GetHelp() {return "Select Objects by part of name";}
selectPlugin::Execute(doc)
{ if (!plgDlg) plgDlg=new(pluginDialog);
plgDlg->Open(TRUE, -1, -1);
}
selectPlugin::RestoreLayout(secret)
{ if (!plgDlg) plgDlg=new(pluginDialog);
plgDlg->RestoreLayout(secret);
}
main()
{
Register(selectPlugin);
}
----------------------------------------------------
Расширение " .txt " меняем на " .cof ". Имя можно задать любое. Запускаем Cinema4D и смотрим в Plugins. Строчка Name Select нам поможет.

Для удобства плагин можно встроить в Layout и/или присвоить ему HotKey.
 
#14
Ты настоящий Гуру.

PS
Пробую запустить плагин на маке. :)
В остальном, для меня Cinema 4d теперь лучший пакет.
 
#15
> Dr.NO!

Неужели сам написал? Круто! … всегда завидовал знаниям.

> Nek

А я так и думал что это экспорт. В Синеме с самого начала можно всё делать так, чтоб не захлебнуться в куче объектов.
 
#16
хехе....хе......хе

Это АкаМ так шутит.....

...так, что прошу завидовать ему...

зы Он еще и не так, бывает шутит... :)))
 
#19
Маленькая поправочка, чтобы кнопка не была узкой линией.


const var Plugin_ID = 1000098;
var plgDlg;
enum
{ MOTHER_GRP = 1000,
H_GRP,
NAME,
NAME_TITLE,
SELECT
}
class pluginDialog : GeDialog
{ public:
pluginDialog();
CreateLayout();
Command(id,msg);
}
pluginDialog::pluginDialog()
{ super(Plugin_ID); }
pluginDialog::CreateLayout()
{ SetTitle("pnSelect");
AddGroupBeginV(MOTHER_GRP, BFH_SCALEFIT, 1, "", 0);
AddGroupBorderSpace(2, 1, 1, 1);
AddGroupBorder(BORDER_GROUP_IN);
AddGroupBeginH(H_GRP, BFH_LEFT, 1, "", 0);
AddStaticText(NAME_TITLE, BFH_LEFT, 0, 0, "Name (part):", 0);
AddEditText(NAME, BFH_LEFT, 250, 0);
AddGroupEnd();
AddButton(SELECT, BFH_CENTER, 100, 15, "Select");
AddGroupEnd();
return TRUE;
}
pluginDialog::Command(vID,vMSG)
{ if (vID == SELECT)
{ var sOBJ = GetActiveDocument()->GetFirstObject();
StopAllThreads();
if (GetString(NAME) == "")
return;
do
{ if (strstr(sOBJ->GetName(),GetString(NAME))== -1)
{ if (sOBJ->GetBit(BIT_AOBJ))
sOBJ->ToggleBit(BIT_AOBJ);
}
else
{ if (!sOBJ->GetBit(BIT_AOBJ))
sOBJ->ToggleBit(BIT_AOBJ);
}
GeEventAdd(NEW_ACTIVE_OBJECT);
if (sOBJ->GetDown())
{ sOBJ = sOBJ->GetDown();
continue;
}
if (sOBJ->GetNext())
{ sOBJ = sOBJ->GetNext();
continue;
}
do
{ if (sOBJ->GetUp())
{ sOBJ = sOBJ->GetUp();
if (sOBJ->GetNext())
{ sOBJ = sOBJ->GetNext();
break;
}
}
else
sOBJ = NULL;
}
while (sOBJ);
}
while (sOBJ);
}
}
class selectPlugin : MenuPlugin
{ public:
selectPlugin();
GetID();
GetName();
GetHelp();
Execute(doc);
RestoreLayout(secret);
}
selectPlugin::selectPlugin() {super();}
selectPlugin::GetID() {return Plugin_ID;}
selectPlugin::GetName() {return "pnSelect";}
selectPlugin::GetHelp() {return "Select Objects by part of name";}
selectPlugin::Execute(doc)
{ if (!plgDlg) plgDlg=new(pluginDialog);
plgDlg->Open(TRUE, -1, -1);
}
selectPlugin::RestoreLayout(secret)
{ if (!plgDlg) plgDlg=new(pluginDialog);
plgDlg->RestoreLayout(secret);
}
main()
{
Register(selectPlugin);
}
 
#20
AkaM, 5 балов !!! :))
... Ну ежели Вы еще и фарфор сумеете употребить...
© Формула любви
 
Сверху