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

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


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

> Мелкие скрипты и разработки, То, что недостойно отдельной темы   
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Несколько безделушек, которые надо было бы написать еще раньше. Все для работы с UV/проекциями.
subProjPlane и subProjCubic соответственно создают сабпроекцию для выделенных полигонов/ребер/точек. Сабпроекция применяется только на первую Texture_Projection, не затрагивая другие (но при желании можно убрать одну строку с скриптах и будут все для объекта). Если текстурной проекции вообще к объекту не применено, то создается базовая UniqueUVs и к выделению сабпроекция.
scaleTo1SI - вообще делал именно для скаллирования Texture_Support'ов, но скаллирует вообще все. Сохраняя пропорции объекта уменьшает его до вписывания по всем сторонам до 1SI. Конкретно для проекций удобно для приведения их к реальным размерам.
И до кучи WrapUVW. Я его как-то выкладывал в виде autoUVW, но там он не всегда растайливает тектурные проекции, поэтому ручной вызов тоже полезен. Растайливает вообще все текстурные проекции в сцене.

Забросить скрипты по пути: c:\Users\Admin\Autodesk\Softimage_2015\Data\Scripts\ или где будет удобно.

Скачать: https://www.dropbox.com/s/e4j8hiikx59vjrb/p...lugins.zip?dl=0
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 5.06.2015 - 09:35 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
добавлю и свои 5 копеек, или даже 1 копейку.. тока начал учить питон, поэтому за организацию сильно не бить =) а дополнение и комменты приветствуются)
встала задача написать такое, за неимением в гугле подобного (я не нашел).
есть к примеру куча сиквенций в одной папке, тыщи сотни разных пассов и рендеров, и надо раскинать их по папкам с соответствующим названием.
Копируем в кси этот код, врубаем питон, в переменной Path пишем путь к своей папке с кучкой сиквенций (обязательно двойные слэши такие "\\" вместо одних) и запускаем!

import os, glob, os.path, shutil
import array
path = 'e:\\test\'
def sequence(path):
for file in glob.glob(path + '*.*'):
cat = os.path.basename(os.path.splitext(file)[0])
tot = cat.split('.')[0]
for ggg in glob.glob(path + tot + '*.*'):
if os.path.exists(path + tot):
shutil.move(ggg, path + tot)
else:
os.mkdir(path + tot)

def udalenie(kat, P = True):
if os.path.isdir(kat):
if len(os.listdir(kat)) > 0:
for x in os.listdir(kat):
if os.path.isdir(os.path.join(kat,x)):
if len(os.listdir(os.path.join(kat,x))) == 0: os.rmdir(os.path.join(kat,x))
else: udalenie(os.path.join(kat,x))
if P: udalenie(kat, False)
else: os.rmdir(kat)

udalenie(path)
sequence(path)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 8.06.2015 - 08:05 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
eistan
Что-то я не соображу как отступы отбить, у меня все каталоги создаются, но переноса в них что-то нет.
Пост все форматирование убил, может куда-то скрипт лучше залить или проследи чтобы после отправки сообщения форматирование осталось.

А так вещь полезная, только надо ее к интерфейсу прикручивать - создавать property, где путь выставляется и кнопка "рассортировать быстро", чтобы удобнее пользоваться было. Если надо могу помочь разобраться с этим.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 8.06.2015 - 09:14 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
да интерфейс через кьюти пишу, но так как опыта и знаний мало, очень тяжко)) точнее панельку нарисовать труда не составляет и кнопки создать и диалоговое окно дял указания папки, а как дело доходит до самого скрипта, то оно не пашет, так как я туплю и не пойму в чем ошибка ))

а по поводу работы скрипта как то у меня тож стал странно работать, причем дома все гуд и с любой папкой работал, а на работе хрень выдает, не пойму в чем ошибка, хоть и пишет ее... в общем если много путей в папках начинает тупить, а если в корне диска одна папка и в ней сиквенции то все норм, например как тут 'e:\\test\'
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 8.06.2015 - 09:56 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Не я про интерфейс стандартный в кси, qt'шный кстати пока даже не пробовал. Просто удобнее когда не в скрипт эдитор надо скрипт тащить а где-то кнопку повесить и она стандартный ксишный PPG вызывала, а там задается путь и кнопка Пуск.
Ну раз у тебя тоже что-то не так пашет, то ждем исправленной версии :girl_cra:
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 8.06.2015 - 10:06 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
вот кстати еще накидал сейчас налепку, мож кому надо, быстро создает воронои шаттер на любой выделенный обьект и сколько угодно, не пересекаясь, есесно питон, можно на кнопку кинуть, правда я добавил вконце чтобы удалял исходные файлы и фризил, если кому не надо, удалить предпоследние 3 строчки



Цитата

import random
selected = Application.Selection[0]

pc = Application.GetPrim("PointCloud", "", "", "")
shutter = Application.SetValue(str(pc) + ".Name", "pcshutter01", "")
shutterselected = Application.Selection[0]


emesh = Application.GetPrim("EmptyPolygonMesh", "", "", "")
shmesh = Application.SetValue(str(emesh) + ".Name", "meshshutter01", "")
shmeshselected = Application.Selection[0]


Application.ApplyOp("ICETree", shutterselected, "siNode", "", "", 0)
Application.AddICECompoundNode("Build Slice Planes", str(shutterselected) + ".pointcloud.ICETree")


Application.ConnectICENodes(str(shutterselected) + ".pointcloud.ICETree.port1", str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.execute")
Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Reference1", str(selected), "")


Application.ApplyOp("ICETree", shmeshselected, "siNode", "", "", 0)
Application.AddICECompoundNode("Create Basic Shatter from Point Cloud", str(shmeshselected) + ".polymsh.ICETree")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.port1", str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Execute")

Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")
Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.reference", str(shutterselected), "")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Point_Cloud_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.outname")

Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")

Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].reference", str(selected), "")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Polygon_Mesh_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].outname")

r = random.randint(1,1000)
Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Seed", r, "")

Application.FreezeModeling(str(shmeshselected), "", "")
Application.DeleteObj(str(selected))
Application.DeleteObj(str(shutterselected))


Application.DeselectAll()
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 9.06.2015 - 16:31 Top
steelbug
Профиль
Статус: no comment
Группа: Заслуженные артисты
Рейтинг: 8
такие мелочи хорошо облегчают рутинные процесы. КвикМерж уже базовый инструмент у меня) спасибо
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 9.06.2015 - 23:49 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Еще немного модернизировал скрипт и теперь можно шаттерить выделенные полигоны, любое кол-во.

как работает этот и предыдущий скрипт



Скрипт на ShutterPolygon ниже:

Цитата
allobj = Application.Selection[0]
obj, ttt, yyy = str(allobj).rpartition('.')
Application.ExtractFromComponents("ExtractPolygonsOp", "", "", True, "siImmediateOperation", "siKeepGenOpInputs", "")

import random
selected = Application.Selection[0]

pc = Application.GetPrim("PointCloud", "", "", "")
shutter = Application.SetValue(str(pc) + ".Name", "pcshutter01", "")
shutterselected = Application.Selection[0]


emesh = Application.GetPrim("EmptyPolygonMesh", "", "", "")
shmesh = Application.SetValue(str(emesh) + ".Name", "meshshutter01", "")
shmeshselected = Application.Selection[0]


Application.ApplyOp("ICETree", shutterselected, "siNode", "", "", 0)
Application.AddICECompoundNode("Build Slice Planes", str(shutterselected) + ".pointcloud.ICETree")


Application.ConnectICENodes(str(shutterselected) + ".pointcloud.ICETree.port1", str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.execute")
Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Reference1", str(selected), "")


Application.ApplyOp("ICETree", shmeshselected, "siNode", "", "", 0)
Application.AddICECompoundNode("Create Basic Shatter from Point Cloud", str(shmeshselected) + ".polymsh.ICETree")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.port1", str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Execute")

Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")
Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.reference", str(shutterselected), "")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Point_Cloud_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.outname")

Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")

Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].reference", str(selected), "")
Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Polygon_Mesh_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].outname")

r = random.randint(1,1000)
Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Seed", r, "")

Application.FreezeModeling(str(shmeshselected), "", "")
Application.DeleteObj(str(selected))
Application.DeleteObj(str(shutterselected))


Application.ApplyGenOp("MeshMerge", "", str(obj)+","+str(shmeshselected), 3, "siPersistentOperation", "siKeepGenOpInputs", "")
merge = Application.Selection[0]
Application.SetValue(str(merge)+".polymsh.mergemesh.tolerance", 0, "")
Application.TransferAllPropertiesAcrossGenOp(str(merge)+'.polymsh.mergemesh', str(merge), "", True, True)
Application.DeleteGeneratorInputs(str(merge))

Application.FreezeModeling(str(merge), "", "")
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 10.06.2015 - 09:37 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
С шаттером забавная вещь. Я вообще не знал что его оказывается так просто можно дефолтными средствами делать.
eistan, кстати есть вариант объединить все это под одну универсальную кнопочку. Посмотри на этот код и сразу сообразишь.
Код
xsi = Application
oSel = xsi.Selection
for i in range(0, oSel.Count):
   if str(oSel[i].Type) == "polymsh":
       xsi.LogMessage("shatterForMesh")
   if str(oSel[i].Type) == "polySubComponent":
       xsi.LogMessage("shatterForComponent")

-------------------------------------------------------------

Ну и продолжая тему мелких полезностей. Часто приходится работать с модельками сделанными в другом софте, в частности в максе, регулярно приходится перескейливать масштаб.
Сделал две команды для кратного увеличения/уменьшения скейла в 10 раз.

Скрипты как всегда забросить в дефолтную папку c:\Users\Admin\Autodesk\Softimage_2015\Application\Plugins\ либо по своему усмотрению.
Вызов Application.increaseSclToSI() и Application.decreaseSclToSI()
Но лучше на кнопку или хоткей.

Скачать: https://www.dropbox.com/s/eldzea71thfrpqy/SclToSI.zip?dl=0


Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 10.06.2015 - 22:16 Top
Mr.Core
Профиль
Статус: -
Группа: Модераторы
Рейтинг: 17
фабричный шаттер не умеет вогнутые меши резать, можно достаточно просто пофиксить
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователя
Цитировать сообщение Дата 10.06.2015 - 23:08 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
о, точно, спасибо, уже повесил)

а никто не делал unmerge на питоне? есть на яве сепарейт, и на вбскрипте от деполя, но надо на питоне) чтоб хоть я мог чего то свое добавить и усовершенствовать, все пытаюсь написать, и как то не выходит, и while и for юзаю, точнее выходит, но вконце ошибку выдает а дальше скрипт не пашет, а я хочу чтоб он записал все обьекты в список и выделил по окончанию скрипта, пока вот так, с ошибкой(

Цитата
selcount = Application.Selection(0).ActivePrimitive.Geometry.Polygons.Count
sel = Application.Selection(0)
list = []
i=0

while sel:
Application.SelectGeometryComponents(str(sel)+".poly[0]")
Application.SelectAllConnectedComponents("")
Application.ExtractFromComponents("ExtractPolygonsOp", "", "", True, "siImmediateOperation", "siKeepGenOpInputs", "")
lol = Application.Selection(i)
Application.MoveCtr2Vertices("", True)
list.append(lol)
i = i+1
else:
#Application.LogMessage (list)
Application.SelectObj(list, "", True)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 11.06.2015 - 21:12 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Все, разобрался, вобщем новый Unmerge на питоне с выделением всех обьектов после операции, дабы не потерять или в группу запихнуть, иногда необходимо, как говорится Хэв Фан:

Цитата
selcount = Application.Selection(0).ActivePrimitive.Geometry.Polygons.Count
sel = Application.Selection(0)
list = []

while selcount > 0:
Application.SelectObj(str(sel), "", True)
Application.SelectGeometryComponents(".poly[0]")
Application.SelectAllConnectedComponents("")
Application.ExtractFromComponents("ExtractPolygonsOp", "", "", True, "siImmediateOperation", "siKeepGenOpInputs", "")
lol = Application.Selection(0)
Application.MoveCtr2Vertices("", True)
list.append(lol)
Application.SelectObj(str(sel), "", True)
selcount = Application.Selection(0).ActivePrimitive.Geometry.Polygons.Count

#Application.LogMessage(list)
Application.DeleteObj(sel)
Application.SelectObj(list, "", True)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 11.06.2015 - 22:14 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
eistan прошу тебя обратить внимание, что в таком виде твоим кодом большинство, кто не владеет минимальными понятиями о Питоне, не сможет воспользоваться.
Сдохли отступы табуляции!
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 11.06.2015 - 23:07 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
оу, точно, сорри, в порыве радости что заработал совсем забыл и не заметил про табуляции, да и вообще цитатой их пихал :blush2: а исправить сообщения уже нельзя((
тогда еще раз все запощу, да и у меня их пока не много, всего два)


Unmerge (с выделением вконце обьектов)
Код

selcount = Application.Selection(0).ActivePrimitive.Geometry.Polygons.Count
sel = Application.Selection(0)
list = []

while selcount > 0:
       Application.SelectObj(str(sel), "", True)
       Application.SelectGeometryComponents(".poly[0]")
       Application.SelectAllConnectedComponents("")
       Application.ExtractFromComponents("ExtractPolygonsOp", "", "", True, "siImmediateOperation", "siKeepGenOpInputs", "")
       lol = Application.Selection(0)
       Application.MoveCtr2Vertices("", True)
       list.append(lol)
       Application.SelectObj(str(sel), "", True)
       selcount = Application.Selection(0).ActivePrimitive.Geometry.Polygons.Count

#Application.LogMessage(list)
Application.DeleteObj(sel)
Application.SelectObj(list, "", True)





QuickShutter (как для выделенных поликов так и для обьектов, после этого скрипта можно сразу юзать анмердж, можно верхний скрипт добавить сразу после этого и будет на автомате все)
Код
import random

def shutter():

       selected = Application.Selection[0]

       pc = Application.GetPrim("PointCloud", "", "", "")
       shutter = Application.SetValue(str(pc) + ".Name", "pcshutter01", "")
       shutterselected = Application.Selection[0]


       emesh = Application.GetPrim("EmptyPolygonMesh", "", "", "")
       shmesh = Application.SetValue(str(emesh) + ".Name", "meshshutter01", "")
       shmeshselected = Application.Selection[0]


       Application.ApplyOp("ICETree", shutterselected, "siNode", "", "", 0)
       Application.AddICECompoundNode("Build Slice Planes", str(shutterselected) + ".pointcloud.ICETree")


       Application.ConnectICENodes(str(shutterselected) + ".pointcloud.ICETree.port1", str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.execute")
       Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Reference1", str(selected), "")


       Application.ApplyOp("ICETree", shmeshselected, "siNode", "", "", 0)
       Application.AddICECompoundNode("Create Basic Shatter from Point Cloud", str(shmeshselected) + ".polymsh.ICETree")
       Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.port1", str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Execute")

       Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")
       Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.reference", str(shutterselected), "")
       Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Point_Cloud_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode.outname")

       Application.AddICENode("GetDataNode", str(shmeshselected) + ".polymsh.ICETree")

       Application.SetValue(str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].reference", str(selected), "")
       Application.ConnectICENodes(str(shmeshselected) + ".polymsh.ICETree.Create_Basic_Shatter_from_Point_Cloud.Polygon_Mesh_Name", str(shmeshselected) + ".polymsh.ICETree.SceneReferenceNode[1].outname")

       r = random.randint(1,1000)
       Application.SetValue(str(shutterselected) + ".pointcloud.ICETree.Build_Slice_Planes.Seed", r, "")

       Application.FreezeModeling(str(shmeshselected), "", "")
       Application.DeleteObj(str(selected))
       Application.DeleteObj(str(shutterselected))


xsi = Application
oSel = xsi.Selection
for i in range(0, oSel.Count):
       if str(oSel[i].Type) == "polymsh":
             shutter()
       if str(oSel[i].Type) == "polySubComponent":
             allobj = Application.Selection[0]
             obj, ttt, yyy = str(allobj).rpartition('.')
             Application.ExtractFromComponents("ExtractPolygonsOp", "", "", True, "siImmediateOperation", "siKeepGenOpInputs", "")
             shutter()
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 12.06.2015 - 07:42 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
а еще сортировка секвенций по папкам с табуляциями

Код
import os, glob, os.path, shutil
import array
path = 'e:\\test\\'
def sequence(path):
   for file in glob.glob(path + '*.*'):
       cat = os.path.basename(os.path.splitext(file)[0])
       tot = cat.split('.')[0]
       for ggg in glob.glob(path + tot + '*.*'):
           if os.path.exists(path + tot):
               shutil.move(ggg, path + tot)
           else:
               os.mkdir(path + tot)

def udalenie(kat, P = True):
   if os.path.isdir(kat):
       if len(os.listdir(kat)) > 0:
           for x in os.listdir(kat):
               if os.path.isdir(os.path.join(kat,x)):
                   if len(os.listdir(os.path.join(kat,x))) == 0: os.rmdir(os.path.join(kat,x))
                   else: udalenie(os.path.join(kat,x))
           if P: udalenie(kat, False)
       else: os.rmdir(kat)


sequence(path)
udalenie(path)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 12.06.2015 - 07:51 Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

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

 

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