SoftimageRu Форум -> Мелкие скрипты и разработки

Новости • Форум • Помощь • Поиск • Участники • Календарь • База


Страницы: (16) « Первая ... 2 3 [4] 5 6 ... Последняя »  ( Перейти к первому непрочитанному сообщению ) Ответ в темуОтвет      Создание новой темыНовая тема   

> Мелкие скрипты и разработки, То, что недостойно отдельной темы   
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Пока что гоню инструментарий чисто под свои задачи. Сейчас это моделинг/текстуринг, дальше пойдет работа с объектами в сцене, так что скорее всего буду смотреть в организацию сцены и библиотеки ресурсов. Хотелось бы еще инструментарий по удобному управлению нормалями, но там работы много будет, так что пока отложил в сторону.

А на сегодня скриптик позволяющий создать выделение в наложении кластеров. Может очень помочь в чистке импортированных моделей (да и своих тоже :) ), если имеющиеся кластеры удалять не желательно, а вручную определить пересечения трудоемко или неудобно.
Алгоритм работы немного паршивый — на сравнении массивов индексов полигонов выделенных кластеров, поэтому на тяжелых моделях с большим количеством задействованных в кластерах поликов будет изрядно подвисать. Есть мысли по доработке, но пока не уверен, даст ли это существенной производительности.

Для работы скрипта необходимо выделить 2 или более кластера и запустить скрипт. Если наложения есть, то будут выделены полики, в которых эти наложения присутствуют, если наложения нет, то соответствующее сообщение, что все в порядке.

Установка: забросить скрипт по пути c:\Users\Admin\Autodesk\Softimage_2015\Application\Plugins\ либо по своему усмотрению.


Скачать findOverlapPlugin.py: https://www.dropbox.com/s/b5srdqkg1if7qu4/f...verlapPlugin.py
Login require!
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.07.2014 - 18:50 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Обновление для QuickMerge, теперь позиция смердженного объекта сохраняется и для Partitions по позиции первого объекта (смерженный объект не будет переноситься в Background_Objects_Partition по умолчанию).
И окончательно исправил косяк с настройками Preferences.

Удаление старой версии: Просто удалить аддон через unInstallAddon и перезагрузиться.
Установка новой версии: Закинуть аддон во вьюпорт и перезагрузиться.

Скачать QuickMerge_v1.2: https://www.dropbox.com/s/qq1d7ureah6t0rs/Q...kMerge_v1.2.zip
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 13.07.2014 - 22:35 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Совсем мелочевка, но по мне довольно неплохо экономит время — при создании новой модели если в выделении присутствует только один объект, то новая модель имеет имя этого объекта, во всех остальных случаях по умолчанию "Model". Команду повесить на хоткей или на кнопку.

Установка: забросить скрипт по пути c:\Users\Admin\Autodesk\Softimage_2015\Application\Plugins\ либо по своему усмотрению.

Скачать createNewModelPlugin.py: https://www.dropbox.com/s/hrrncbcq5mull6z/c...wModelPlugin.py
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 18.07.2014 - 11:27 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
createNewModel более корректнее, теперь если в сцене имеются например cube, cube1, cube2, cube3 и модель создается для cube1 она и будет иметь имя cube1, а не cube4. Т.е. раньше в имени перескакивал числовой порядок. Теперь все ОК.

Установка: забросить скрипт по пути c:\Users\Admin\Autodesk\Softimage_2015\Application\Plugins\ либо по своему усмотрению.

Скачать createNewModelPlugin.py: https://www.dropbox.com/s/hrrncbcq5mull6z/c...wModelPlugin.py
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 22.07.2014 - 21:35 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
Gescort
напишу тут у тебя ибо кстати, заодно и помощи попрошу)

Тему я уже эту поднимал - "перенос оператора с объекта на объект". Макс сказал, что это скриптами не реализовать.

Тогда хоть обрывки этой идеи попробовать). Сейчас пользуюсь 2мя кнопками

Выделяю нужный оператор и давлю
SavePreset ".", "\temp3.Preset", , 4, True, False
Выделяю ОПЕРАТОР куда переносить и
LoadPreset "\temp3.Preset", "."

Знаю, что можно сохранить при первом нажатии заодно и имя Оператора "Х" (в Ивент или Лог файл, ибо он в выделении), чтобы пользовать во втором скрипте.

Второй скрипт уже чтоб делал:
- Если это ОБЪЕКТ, то искать "Х" и применять пресет. (тут сразу можно будет применять к нескольким объектам)
- Если ОПЕРАТОР, то сразу применять пресет(а вдруг несколько похожих)

Ну или не усложнять с если, а просто искать в объекте.

В идеале конечно было "вычеслять оператор" и его применять к объекту, потом грузить пресет, сейчас применяешь оператор и потом грузишь пресет.

Помогите реализовать народ. Вроде мелочь, а время экономит.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 4.09.2014 - 17:51 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
неудобство сейчас именно в том, что нужно выделить обьект и найти в нём оператор, именно это автоматизировать хотелось бы.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 4.09.2014 - 17:53 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Затею понял, попробовал реализовать.
Скачать copyPasteOperators: https://www.dropbox.com/s/xvislq9263xuoz9/c...rators.zip?dl=0

Установка: забросить скрипты в папку со скриптами, например: c:\Users\Admin\Autodesk\Softimage_2015\Application\Plugins\
Папка, куда сохраняются темповые пресеты: c:\Users\Admin\Autodesk\Softimage_2015\Data\DSPresets\Operators\

Вызов команд: Application.copyOperator() и Application.pasteOperator(), лучше всего повесить на кнопку или хоткей.

Имеем следующее:
1. Первый скрипт на копирование. При выделенном объекте или компонентах (выделять сам оператор не надо, да и нельзя, иначе начинается проблематично делать проверку типа выделенного элемента) ищет последний оператор в стеке операторов (здесь поиск сквозной, всерху вниз включая анимацию, шейпы и т.д., могу сделать только для стека моделинга), т.е. последнее действие над объектом. Делает экспорт во временную папку + лог с именем этого оператора.
Проще говоря настроили оператор, нажали кнопочку скопировать.

2. Второй скрипт на вставку. При выделенном объекте или компонентах (аналогично первому скрипту оператор выбирать не надо) ищет в стеке операторов последний оператор с именем, который был записан в лог. Если подходящий оператор был найден, то к нему применяется импорт временно сохраненного пресета. Если подходящий оператор найден не был, то выводится соответствующее сообщение.
Проще говоря на другом или этом же объекте заюзали тот же самый оператор и нажали кнопочку вставить.
При вставке выдает какую-то ошибку, но как бы все равно работает. Посмотри если такая реализация годится, то покопаюсь в чем там проблемка.
Если есть какие-то еще идеи по доработке, то напиши - подумаем. Пока реализовал самым простым на мой взгляд вариантом.

Думал по поводу вставки, если подходящего оператора нет, чтобы его создать. Но тип оператора и команда для его вставки различаются, поэтому просто его в ApplyOp не запихнуть, придется какую-то микро базу соответствия заводить. Как-то не лучший вариант реализации получается. Плюс выделение подходящих компонентов нужно будет.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 4.09.2014 - 23:31 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
Всё робит!
:thankyou:
Маленькое дополнение, на исходнике бывает что нужный оператор не в топе стэка, если добавить условие при сохранении:
-ОБЪЕКТ в выделении - брать последний оператор в стеке
-ОПЕРАТОР в выделении - брать его

А так для задач моих шикарно), то, что канает при выделении компонентов - тож здорово, теперь тот же бевел перетащить с еджа на едж очень удобно, крутяк!

Если создать базу соответствия, то это вообще вещь не заменимая будет.) Готов помочь, что делать?)

Глянул в скрипт, этож можно пару кнопок такой времянной памяти сделать. Частично решаеться проблемма с быстрым изменением дефолтных пресетов.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.09.2014 - 08:57 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Цитата
Маленькое дополнение, на исходнике бывает что нужный оператор не в топе стэка, если добавить условие при сохранении:
-ОБЪЕКТ в выделении - брать последний оператор в стеке
-ОПЕРАТОР в выделении - брать его


Как раз это вначале и хотел сделать, но незадача вышла вот тут. Выделяем полимеш, вызываем скрипт:
Цитата
xsi = Application
oSel = xsi.Selection
xsi.LogMessage(str(oSel[0]) + " -> " + str(oSel[0].Type))

Получаем: grid -> polymsh, т.е. выделен грид, его тип полимеш
Применяем бевел, выделяем его в стеке, запускаем скрипт. Получаем: grid.polymsh.bevelop -> bevelop
Применяем инсет, выделяем его в стеке, запускаем скрипт. Получаем: grid.polymsh.extrudecompaxisop -> extrudecompaxisop
Т.е. у каждого оператора есть свое имя для его типа, поэтому когда я произвожу проверку, то для выделенного меша это всегда polymsh, для компонентов: polySubComponent, edgeSubComponent, pntSubComponent, а у операторов тип всегда разный. Могу запустить в качестве исключения если не меш или компонент, то всегда считать что выделен оператор, но будет некрасиво, когда выделен не оператор и вылазить ошибки. Хотя пока писал пришла мысль попробовать сделать проверку не по типу, а по классу, может там будет как надо - потом попробую проверить.

И проблема когда нужного оператора для вставки не найдено. Например копировали пресет для бевела, получили для него тип bevelop, но команда для инициализации бевела: Application.ApplyTopoOp("BevelComponent", "grid.edge[1]", "siUnspecified", "siPersistentOperation", "")
т.е. BevelComponent, поэтому есть идея сделать список соответствия: bevelop -> BevelComponent и т.д. для каждой команды. Возможно можно и без этого реализовать, но откуда вытащить эти соответствия хз.
Если есть желание, то можешь прогнать все основные команды для которых возможно сохранение пресета и из строки ApplyTopoOp выдернуть их имена пресетов (например BevelComponent) и скриптом выше при выделенном операторе в стеке его тип, тогда можно будет замутить автоматическую инициализацию оператора, если подходящего найдено не было.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.09.2014 - 09:45 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
Цитата
мысль попробовать сделать проверку не по типу, а по классу

да ClassName точно разделяет, где оп, а где поли.

Цитата
идея сделать список соответствия: bevelop -> BevelComponent

Да размечтался я), посмотрел как операторы применяются:
Создать например бенд - .ApplyOp, создать бевел - .ApplyTopoOp, создать Меш из курвы - ApplyGenOp.
Ну так то можно попробовать для начала в пределах ApplyTopoOp, список возможных команд с привязкой к типу в сдк есть, там не так уж и много и большая часть даже из этого списка не нужны.

вид списка такой должен быть? чтоб далее не редактировать

Цитата
bevelop -> BevelComponent
extrudecomponentop -> ExtrudeComponent
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.09.2014 - 14:00 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Да, в таком виде будет вполне понятно.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.09.2014 - 14:16 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Обновил скрипты для copyPasteOperators.
Теперь реагируют на выделенный оператор, принимая его в качестве активного.
При вставке иногда возникает ошибка, которая на работоспособность скриптов никак не влияет. Как я понял возникает если пресет был сохранен из оператора bevelop, а применен к bevelop1, т.е. имеющем в стеке другой порядковый номер.
Upd: если выделен неверный оператор для вставки, то в предупреждение выводится какой оператор сохранен в пресете — можно ориентироваться, если забыли что там было сохранено. Как бы в таком виде уже крайне юзабильно.
Скачать: https://www.dropbox.com/s/xvislq9263xuoz9/c...rators.zip?dl=0
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.09.2014 - 20:50 Top
Bravlin Pechatnik
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
Когда-нибудь , настанет тот день, когда в ксюхе появится интересный бевил )))
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 6.09.2014 - 10:56 Top
мюф
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 2
Gescort
из всех команд у Dice только заморочка с разными типами, на него, я так думаю, надо забить). У остальных универсально. Проверил все команды из списка "Topology Operator Presets"(прямую ссылку в сдк не дает, печаль). С курвами и сурфэйсами связываться не стал. Те что имеет смысл:
Цитата
Если ОБЪЕКТ
dicepolygonsop -> DiceObject

Если КОМПОНЕНТ
dicepolygonsop -> DicePolygons



bevelop -> BevelComponent
extrudenormalop -> ExtrudeComponentNormal
extrudecompaxisop -> InsetPolygons
meshlocalsubdivisionop -> MeshLocalSubdivision
offsetpolygonsop -> OffsetPolygons
polygonreductionop -> PolygonReduction
quadrangulateop -> Quadrangulate
slicepolygonsop -> SlicePolygons
subdivideedgeop -> SubdivideEdge
subdividepolygonop -> SubdividePolygon
symmetrizepolygonop -> SymmetrizePolygon
weldedgesop -> WeldEdges
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 6.09.2014 - 11:26 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Bravlin Pechatnik, Базовый расчет уже есть, но стандартные инструменты SplitEdge и AddEdge не совсем удобно для этого приспособлены, т.к. изначально делят грань в процентном отношении. Поэтому добавление необходимых эйджей необходимо делать делать через формирование общей топологии, а в этом случае необходимо как следует разобраться в порядке формирования и индексации вертексов и эйджей. Особенно проблематичным кажется ситуация когда выделено более двух параллельных граней, т.к. порядок индексации должен сильно меняться.
Думаю стоит попробовать поэкспериментировать с вариантами просто добавления эйджей на необходимые грани и далее их уже повертексно перемещать в нужную позицию. В этом случае реализация конечно будет кривой, но возможно более простой для исполнения. Можно даже на айсе попробовать поэкспериментировать.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 6.09.2014 - 13:43 Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (16) « Первая ... 2 3 [4] 5 6 ... Последняя » Ответ в темуОтвет      Создание новой темыНовая тема   

 

Текстовая версия