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

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


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

> Мелкие скрипты и разработки, То, что недостойно отдельной темы   
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
а че за координаты он выдает ? мин и макс, это откуда считать не понятно, от центра обьекта или это глобальные координаты? какие то странные цифры выдает
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 2.07.2015 - 16:44 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
GetBBox глобальные. Соответственно можно посчитать:
длинна объекта(-ов): max-min
центр (здесь фрагмент кода из одного скрипта, так что вектор совсем не обязателен):
Код
oBBox = Application.GetBBox(Application.Selection)
oCenterObj = XSIMath.CreateVector3(((oBBox[3] - oBBox[0])/2)+oBBox[0], \
                                  ((oBBox[4] - oBBox[1])/2)+oBBox[1], \
                                  ((oBBox[5] - oBBox[2])/2)+oBBox[2])
Application.LogMessage(oCenterObj.Get2())

А те что из геометрии вызываются наверное в локальных считают, точно не помню уже.

PS: и на всякий случай, помню у меня был косяк с этим расчетом центра. При делении пополам там странные вещи творились, только потом допер почему. Собственно иллюстрация:
Код
a = 3
b = 3.0
Application.LogMessage(a/2)
Application.LogMessage(b/2)
# INFO : 1
# INFO : 1.5
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 2.07.2015 - 18:11 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
ну да про флот и интежер по питону уже эту хитрость знаю)
a = 3
b = 3.0

спасибо в очередной раз)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 2.07.2015 - 21:20 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
че т в какие то дебри чувствую уже полез)
есть ли возможность выдать глобальные координаты каждой точки кривой ?
нашел только такие команды которые работают с курвой, и ваще не удобно работать с этим сдк, раздел курв не могу найти, если он ваще есть

Код
sel = Application.Selection(0)
xmax1 = Application.GetCurveLength(sel)(0)
xmax2 = Application.GetNumberOfKnots(sel)(0)


и что такое NurbsCurve ? это не тоже самое? или это нюрбсовые кривые какие то
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 3.07.2015 - 08:27 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
и еще, можно ли как то занести какие то данные в буфер, чтоб он их глобально запомнил, не только внутри скрипта, к примеру мне надо все выделенные обьекты запихнуть в список и запомнить, и потом через какое то время их вызвать, и выделить этот список или че то с ним сделать


вот список то создал
Код
sel = Application.Selection
list = []
for i in range(0, sel.Count):
   list.append(sel(i))


а как чтоб он их глобально запомнил?

апд. а вот, получилось setGlobal и getGlobal
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 3.07.2015 - 09:24 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Да, с курвами там все довольно припаршиво, через поисковик порой хрен что найдешь и приходится долго во все тыкать, пока нужной ссылки не найдется.
Получение всех точек работает по той же схеме как и при работе с полимешем.
Код
xsi = Application
oSel = xsi.Selection
oPoints = oSel[0].ActivePrimitive.Geometry.Points
for i in range(0, oPoints.Count):
   xsi.LogMessage(oPoints[i].Position.Get2())

Позишн будет в виде вектора (X, Y, X) или можно брать конкретную составляющую Position.X, Position.Y, Position.Z

Сама по себе разница между NurbsCurve и NurbsCurveList в том, что NurbsCurve это часть NurbsCurveList объекта, то есть сабкурва.
NurbsCurveList: http://docs.autodesk.com/SI/2015/ENU/Softi...sCurveList.html
NurbsCurve: http://docs.autodesk.com/SI/2015/ENU/Softi...NurbsCurve.html

По поводу буфера. Можно юзать непосредственно буфер памяти (Clipboard) для временных данных, можно записывать данные в кастомную property, сохраняя ее непосредственно в объекте, корне сцены, customPreferences или записывая во внешний файл - тут по задачам надо смотреть.
Можно конечно и setGlobal и getGlobal юзать, но в SDK так и написано, что лучше использовать что-то еще. Потому что я даже хз где эти переменные висят.
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 3.07.2015 - 10:34 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
отлично!
теперь сложнее) я даж не знаю как это искать и как называется, в общем я нашел расстояние между двумя точками, и надо вычислить вектор что ли, или как это, вобщем надо некий обьект повернуть по направлению этих двух точек, помню как то в айсе делал, ноя тогда ниче не понимал, по уроку делал) вектор ту ротейшн что ли, по какой нить оси
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 3.07.2015 - 13:24 Top
Gescort
Профиль
Статус: слон
Группа: Заслуженные артисты
Рейтинг: 3
Как раз тот вариант, когда логику сначала проще отработать на айсе))
Смотри это ли надо сделать?
(IMG:http://i72.fastpic.ru/thumb/2015/0703/27/6407126c9d677c44c97a73620196b427.jpeg)
Персональное сообщениеПисьмо на e-mail пользователю
Цитировать сообщение Дата 3.07.2015 - 13:58 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
похоже на то) ток не пойму куда обьект смотрит, надо чтоб он смотрел на один из нулей, короче как по пути если пустить обьект))
но с математическими нодами понятно, но как теперь в код перевести ноды типа axis and angle и rotate vector ?)
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 3.07.2015 - 14:47 Top
Mr.Core
Профиль
Статус: -
Группа: Модераторы
Рейтинг: 17
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователя
Цитировать сообщение Дата 3.07.2015 - 14:56 Top
maxFox
Профиль
Статус: нажиматель кнопок
Группа: Элита
Рейтинг: 17
eistan
в СДК кажется есть функции поворота, если точка представлена КСИ-вектором, и ось поворота, само собой.
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQ
Цитировать сообщение Дата 3.07.2015 - 22:59 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
maxFox
ну вот и пытаюсь во всем этом разобраться, голову ломаю, гуглю всю математику, изучаю кватернионы, эйлера с нуля и прочие штуки, дабы как то посчитать угол от вектора в пространстве имея два нуля, и как потом эти данные еще применить на обьект чтоб он повернулся в сторону одной из нулей, то есть лег на вектор между ними.. короче вот он ступор) до этого было все пока понятно, а щас все, приплыл))
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 4.07.2015 - 13:17 Top
maxFox
Профиль
Статус: нажиматель кнопок
Группа: Элита
Рейтинг: 17
что значит имея два нуля? угол считается между двумя векторами. Если у тебя один вектор, это текущее положение объекта, а второй - это нужное направление, то нужно
1. посчитать угол между векторами.
2. найти ортогональтый вектор (CROSS)
3. Повернуть объект на найденный угол, вокруг ортогонального вектора.
Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQ
Цитировать сообщение Дата 4.07.2015 - 22:02 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
Gescort
слушай, меня все коробило и не давало покоя что в твоем скрипте Replace много повторяющихся строчек типа этого

Цитата
xsi.SetValue(str(oClone) + ".kine.global.posx", oPosX, "")
                xsi.SetValue(str(oClone) + ".kine.global.posy", oPosY, "")
                xsi.SetValue(str(oClone) + ".kine.global.posz", oPosZ, "")
                xsi.SetValue(str(oClone) + ".kine.global.rotx", oRotX, "")
                xsi.SetValue(str(oClone) + ".kine.global.roty", oRotY, "")
                xsi.SetValue(str(oClone) + ".kine.global.rotz", oRotZ, "")
                xsi.SetValue(str(oClone) + ".kine.global.sclx", oSclX, "")
                xsi.SetValue(str(oClone) + ".kine.global.scly", oSclY, "")
                xsi.SetValue(str(oClone) + ".kine.global.sclz", oSclZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.psclx", oPsclX, "")
                xsi.SetValue(str(oClone) + ".kine.local.pscly", oPsclY, "")
                xsi.SetValue(str(oClone) + ".kine.local.psclz", oPsclZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.protx", oProtX, "")
                xsi.SetValue(str(oClone) + ".kine.local.proty", oProtY, "")
                xsi.SetValue(str(oClone) + ".kine.local.protz", oProtZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.pposx", oPposX, "")
                xsi.SetValue(str(oClone) + ".kine.local.pposy", oPposY, "")
                xsi.SetValue(str(oClone) + ".kine.local.pposz", oPposZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcsclx", oPcsclX, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcscly", oPcsclY, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcsclz", oPcsclZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcrotx", oPcrotX, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcroty", oPcrotY, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcrotz", oPcrotZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcposx", oPcposX, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcposy", oPcposY, "")
                xsi.SetValue(str(oClone) + ".kine.local.pcposz", oPcposZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.nsclx", oNsclX, "")
                xsi.SetValue(str(oClone) + ".kine.local.nscly", oNsclY, "")
                xsi.SetValue(str(oClone) + ".kine.local.nsclz", oNsclZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.nrotx", oNrotX, "")
                xsi.SetValue(str(oClone) + ".kine.local.nroty", oNrotY, "")
                xsi.SetValue(str(oClone) + ".kine.local.nrotz", oNrotZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.nposx", oNposX, "")
                xsi.SetValue(str(oClone) + ".kine.local.nposy", oNposY, "")
                xsi.SetValue(str(oClone) + ".kine.local.nposz", oNposZ, "")
                xsi.SetValue(str(oClone) + ".kine.local.nsclorix", oNscloriX, "")
                xsi.SetValue(str(oClone) + ".kine.local.nscloriy", oNscloriY, "")
                xsi.SetValue(str(oClone) + ".kine.local.nscloriz", oNscloriZ, "")



помню ты говорил что он старый и ты еще не шарил тогда =) и щас бы так писать не стал)

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

тут работает по типу MatchTransform, выдялем обьект, жмем скрипт, тыкаем на другой обьект и он перенимает все глобальные параметры с первого выделенного
Цитата

sel = Application.Selection(0)

pick = Application.PickObject("Select Source", "Select Source").Value("PickedElement")

for i in range(0,sel.Kinematics.Global.Parameters.Count):
    Application.SetValue(pick.Kinematics.Global.Parameters(i) ,sel.Kinematics.Global.Parameters(i).Value, "")
    Application.LogMessage(sel.Kinematics.Global.Parameters(i))



плюс ко всему заморочился добраться до глубоких параметров типа "Wrap V" так же без использования имен, оказалось не так то просто, но вот замутил поставление на всех обьектах галки повторения текстур "Wrap U", "Wrap V", "Wrap W", "Seam V", "Seam U"

Tile UVW
Цитата

sel = Application.Selection

for o in range(0,sel.Count):
    if Application.Selection(o).Type == "polymsh":
        sel = Application.Selection(o).ActivePrimitive.Geometry
        for n in range(0,sel.Clusters.Count):
            for i in range(0,sel.Clusters(n).Properties.Count):
                for x in range(0,sel.Clusters(n).Properties(i).NestedObjects.Count):
                    if sel.Clusters(n).Properties(i).NestedObjects(x).Type == "uvprojdef":
                        for y in range(0,sel.Clusters(n).Properties(i).NestedObjects(x).Parameters.Count):
                            if sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y).Name == "Wrap U":
                                Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")
                            if sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y).Name == "Wrap V":
                                Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")
                            if sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y).Name == "Wrap W":
                                Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")
                            if sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y).Name == "Seam V":
                                Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")
                            if sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y).Name == "Seam U":
                                Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")
        else:
                Application.LogMessage("Select geometry!")


тут думаю как можно заменить повторяющийся код в if, вроде как то через and можно прописывать же условия в if
Цитата
Application.SetValue(sel.Clusters(n).Properties(i).NestedObjects(x).Parameters(y), True, "")

Персональное сообщениеПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Цитировать сообщение Дата 14.07.2015 - 11:09 Top
eistan
Профиль
Статус: леонардо
Группа: Заслуженные артисты
Рейтинг: 2
и еще не могу допереть как выделить сам обьект если выделен его подобьект типа текстуры проекции или кластер в эксплорере, пробую прибавлением .Parent к селекшну и цикла while как то сварганить, но не выходит, обычно прибавляют стринг, а тут другое

то есть думал сделать цикл перечисления парентов до самого "polymsh" типа, но на некоторых обьектах, когда они выделены, полный путь не показывает и выделить не может, например если выделен Texture_Coordinates_AUTO
Код

sel = Application.Selection(0)
Application.LogMessage(sel.Parent.Type)

while sel.Type !== "polymsh":
   sel = Application.Selection(0)
   Application.LogMessage(sel.Parent.Type)
   Application.SelectObj(sel.Parent.Name)

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

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

 

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