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

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


Страницы: (16) « Первая ... 7 8 [9] 10 11 ... Последняя »  ( Перейти к первому непрочитанному сообщению ) Ответ в темуОтвет      Создание новой темыНовая тема   

> Мелкие скрипты и разработки, То, что недостойно отдельной темы   
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
спасибо, понял)
а возможно ли удалять шейдер по ProgID ? Он когда удаляет пишет имя
Gescort ты ж как раз писал вроде материал либрэри свой, все про маты и шейдеры уже знаешь там ))
или например все с таким то ProgID удалить с обьекта, например "Softimage.material-phong.1.0"
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 24.06.2015 - 19:40 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Вот код найти все фонги и удалить
Код
xsi = Application
oSel = xsi.Selection
oFind = xsi.FindObjects("", "{6495C5C1-FD18-474E-9703-AEA66631F7A7}")
for i in range(0, oFind.Count):
   if str(oFind[i].ProgID) == "Softimage.material-phong.1.0":
       xsi.DeleteObj(oFind[i])

Соответственно если только в выделенном, то дополнительно узнаешь для найденного фонга Parent3DObject и есть ли он в Selection, если да, то на удаление.

В материал либрари там было немного по другому, как таковую работу с материалами и не делал - только импорт/экспорт. Но как-то все коряво с реализацией вышло и не совсем удобно. Сейчас сам лично использую для перебрасывания матов из проекта в проект. Ну и некоторые базовые пресеты храню. А так чтобы реально библиотекой не очень пошло.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 24.06.2015 - 20:42 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
а как проверять наличие обьектов? все не могу с этим разобраться.. постоянно нужна проверка, если есть этот обьект значить не запускать код, к примеру сейчас надо проверить есть ли Texture_Coordinates_AUTO или Texture_Projection, не знаю что из них, но пробую писать типа
Код

sel = Application.Selection(0)
if sel.Material.CurrentUV:

хотя понимаю что не то, но найти в сдк как правильно не могу, понимаю что в этом случае надо булеан вызвать, а с чем сравнить допереть не могу) у тебя в предыдущих кодах сравнения с стринг именем, хз тут то так сканает ли
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 29.06.2015 - 09:18 Top
Angel 07
Профиль
Статус: слон
Группа: Артисты
Рейтинг: 7
Код

object = Application.Dictionary.GetObject("objectName", False)
if object:
   do something
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 29.06.2015 - 10:16 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Можно как Angel 07 подсказал, но надо будет знать имя объекта, который нужно проверять.
Или вот общий цикл проверки на наличие текстурных проекций у объекта.
Код
xsi = Application
oSel = xsi.Selection
for i in range(0, oSel.Count):
   oClusters = oSel[i].ActivePrimitive.Geometry.Clusters
   for j in range(0, oClusters.Count):
       if str(oClusters[j].Type) == "sample":
           if oClusters[j].Properties.Count > 0:
               xsi.LogMessage("Object has texture projections")
           for k in range(oClusters[j].Properties.Count):
               xsi.LogMessage(str(k+1) + " texture projection: " + str(oClusters[j].Properties[k].Name))
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 29.06.2015 - 10:27 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Спасибо люди добрые, чтоб я без вас делал :)

дабы разобраться пока убрал все лишнее и достаточно такой строчки чтоб работало

Код
if sel.ActivePrimitive.Geometry.Clusters.Count > 0:


позже уже нагружу условиями типа множеств обьектов и кластеров
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 29.06.2015 - 13:21 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
eistan
только учти, что если задача найти все-таки текстурную проекцию, то этот код учитывает наличие любых кластеров. Т.е. если будет полигональный кластер и не будет проекции, то он посчитает True, поэтому проверять их по типу придется обязательно.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 29.06.2015 - 20:11 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
ну да, я так и понял что он кластеры все считает, но пока норм) просто почему то твой не хочет работать если так пишу
Код

xsi = Application
oSel = xsi.Selection(0)
oClusters = oSel.ActivePrimitive.Geometry.Clusters(0)
if str(oClusters.Type) == "sample":
    if oClusters.Properties.Count > 0:
         xsi.LogMessage("Object has texture projections")


не пойму почему ругается на 4 строчку, если с твоим не отличается, только лишь for убрал
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 29.06.2015 - 20:17 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Вообще у меня не ругается. Но наверное все зависит от того объекта на котором тестируешь.
Особенность порядка кластеров в том, что они хранятся в порядке их добавления. Если объекту был первым добавлен семл кластер с текстурной проекцией, а потом все остальные, то забирая нулевой объект oClusters = oSel.ActivePrimitive.Geometry.Clusters(0) все будет ок, а если наоборот - сначала любые другие кластеры, а потом семпл кластер, то получишь другой кластер и условие if не выполнится. Именно по этому я пробегал по ним всем циклом for.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 29.06.2015 - 20:38 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
не, я тестирую на обьекте где нет вообще ничего, мне вот надо чтоб такие обьекты тоже проверялись) простое условие, либо есть, либо нет текстур прожекшн
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 29.06.2015 - 20:39 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Тогда правильно ругается - забирая первый индек кластера ты получаешь "NoneType", а у него нет свойства Type.
Вставляй условие if oClusters.Count > 0
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 29.06.2015 - 20:41 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
а можно ли как то получить данные размера картинки? хочу сделать сркипт создающий плэейн с размером пикчи, или может уже есть такой ?)

апд. получил такой строчкой

Код
Application.Selection(0).Material.CurrentImageClip.ResX.Value


но выдал 128 цифру, это что ? размер картинки в пикселях 1200х1200


апд. а вот нашел

Код
Application.Selection(0).Material.CurrentImageClip.Source.Parameters("XRes").Value
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 2.07.2015 - 10:58 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
вобщем вдруг кому надо)
кидаем картинку в материал менеджер, выделяем ее, и запускаем скрипт, создает плэйн размером с картинкой и назначает сразу как текстурой констант

createGridFromImage
Код
if Application.Selection.Count > 0:
   sel = Application.Selection(0)
   XRes = sel.Source.Parameters("XRes").Value
   YRes = sel.Source.Parameters("YRes").Value
   grid = Application.CreatePrim("Grid", "MeshSurface", "ImagePlane", "")
   Application.SetValue(str(grid)+".polymsh.geom.subdivu", 1, "")
   Application.SetValue(str(grid)+".polymsh.geom.subdivv", 1, "")
   
   Application.SetValue(str(grid)+".grid.ulength", XRes/100, "")
   Application.SetValue(str(grid)+".grid.vlength", YRes/100, "")

   Application.ApplyShader("$XSI_DSPRESETS\\Shaders\\Material\\Constant.Preset", "", "", "", "siLetLocalMaterialsOverlap")
   
   Application.NestShaders(str(sel), grid.Material)
   Application.SIConnectShaderToCnxPoint(str(sel), str(grid.Material)+".Constant.color", False)
   Application.CreateProjection(str(grid), "siTxtPlanarXZ", "siTxtDefaultPlanarXZ", "", "Texture_Projection", "", "", "")
   Application.FreezeModeling("", "", "")
else:
   Application.LogMessage("Select the Image")


и как работает собственно, хотя можно было и не писать видео) и так все понятно


Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 2.07.2015 - 12:17 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
а есть ли в питоне возможность вернуть глобальный размер обьекта как bounding box? чтоб потом учитывая эти размеры расчитывать расстояния и прочее
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 2.07.2015 - 15:36 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
GetBBox - возвращает глобальные размеры введенных объектов, т.е. можно в него пихать не один, а сразу несколько (Selection) и вернет параметры для этой группы: http://docs.autodesk.com/SI/2015/ENU/Softi...ds/GetBBox.html

И различные варианты - для объекта x3dobject: http://docs.autodesk.com/SI/2015/ENU/Softi...oundingBox.html
И для Geometry: http://docs.autodesk.com/SI/2015/ENU/Softi...oundingBox.html
Там же можно вызывать GetBoundingCapsule и GetBoundingSphere.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 2.07.2015 - 15:46 Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (16) « Первая ... 7 8 [9] 10 11 ... Последняя » Ответ в темуОтвет      Создание новой темыНовая тема   

 

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