Render.ru

Pickbutton & Mous tools

#1
Господа, очень нужна помошь. В скриптовом плагине класса SimpleObject объект создается с участием пути (при помощи Pickbutton выбирается сплайн, элементы объекта выравниваются вдоль него ). Если сплайн выбирать после создания объекта все идет нормально. Но нужно чтобы объект создавался непосредственно по характеристикам сплайна, т.е. сплайн должен выбираться первым. В этой ситуации обрабатывается on PButton picked Obj и создание обекта прекрашается - закрывается панель. Насколько я понимаю, если еще не создана сетка обработчиком tool Create, где мышкой задаются позиция пивота и прочие параметры, клик на другом обекте воспринимается как сигнал к выходу из скрипта. Но у некоторых максовских объектов этот вариант прокатывает - AEC Extended - AEC Railing в шестом максе. Подскажите пожалуйста, как мне выпутаться. Обязательно нужна возможность выбора сплайна до создания объекта!!!
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Ни что не совершенно, а скрипт в особености.
Для таких деталей нужна SDK.

Но совсем не обязательно создавать обьект из панели
Можо сделать UIкнопку к нему и уже из макро скрипта
вызывать c нужными параметрами - такими как выделенный сплайн.
 
#3
Спасибо за отзыв.
К сожалению, в данном случае нужно именно из панели объект создавать - требования заказчика. Придется, видимо, смириться с тем, что нужно сначала произвольный объект мышкой нарисовать, а потом уже ему путь присвоить. Самое обидное, что после выбора сплайна ролаут напанели криэйт закрывается и дальше объект настроить можно только из модифай...
А про SDK я думал, конечно... Пора, видимо, С вспоминать - 10 лет без него обходился:)
Но надежду что-нибудь придумать средствами максскритпт я не теряю. Если кто поможет - буду благодарен от всего сердца!
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Чтонибуть то придумать можно но это будет как всегда ...
Pickbutton до создания можно смело отключать, конфликт с toool create
ничем не решить, по сему видится несколько вариантов:
1. Логично если это навеска на обьект делать в виде модификатора
2. Самый простой способ если делать все-же в виде обьекта,
сделать по принципу компауд обьектов те. - на выделенный
тк. обьект мы еще не создали, можно будет просмотреть выделенные
и использовать эту информацию - плюс этого метода в том что можно сэкономить на нажатии на кнопку.
3. Самай.Самый. ;)
Вместо Pickbutton по началу делаем видимой обычную кнопку
по нажатию которой мы добавляем еще один клик в событие
mousePoint (в начало, сдвигая события по созданию в конец)
по которому при щелчке в окне можем получить обьекты под
курсором с помощью команды boxPickNode - которой задается регион
но никто не мешает нам сделать его в пару пикселей.
После фильтруем наш обьект, если не найден то сможем все повторить
Еще раз нажав кнопку.

PS.
Извращятся так до конца.
 
#5
Вообще не могу понять, как повернуть полигон или набор точек!!!
говорю ему
SetVertSelection $ #{2..4}
rotate ($.selectedVerts) angleaxis 45 [0,0,1]
а он говорит undefined !!!

и еще вопрос на засыпку - нужно в случае удаления пути переместить пивот объекта в определенную точку. Естественно, когда удаляется сплайн, сам объект не выделен, т.е. нельзя из скрипта к нему обратиться $.pivot. Если напрямую по имени к нему обратиться - то неизвестно как его уже переименовать могли... Как же обратиться из скрипта к ТЕКУЩЕМУ обрабатываемму им объекту не зная его имени?
 
#6
Спасибо боьшое. Я в общем-то, пришел к тем-же выводам. Но решить проблему решился иначе - обойдется заказчик без возможности выбрать путь до создания объекта:)
Возникла зато другая проблема - выстраивая объект (на основе бокса) вдоль пути, я экструдирую на нулевое значение полигон, сдвигаю его точки в нужную позицию (в соответствии и интерполяцией путевого сплайна), поворачиваю полигон перпендикулярно касательному вектору в соответствующей точке пути, снова экструдирую (чтобы получить новые точки - и т.д.
Так должно быть в принципе. Но полигоны поворачиваться не хотят упрямо.
не прокатывает ни
rotate UPR.selectedVerts (angleaxis ANG [0,0,1])
ни
setFaceNormal UPR 7 (lengthTangent PTHOBJ i/SEG
ни
rotate UPR.selectedFaces (angleaxis ANG [0,0,1])
Ошибки не выдает, но полигоны с места не трогаются.
В то время как meshop.movevert успешно сдвигает точки...
Что я не так делаю?
(UPR - пустая меш, к которой приаттачен Box.mesh
точки и полигоны выбираю те - проверял неоднократно)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
>Вообще не могу понять, как повернуть полигон или набор точек
Не все так просто.
Тут тебе прийдется вспомнить курс векторной геометрии
составить матрицу трансформации и перемножить на нее точки.

>Как же обратиться из скрипта к ТЕКУЩЕМУ
Попробуй через this
 
#8
:) Что не просто, это я уже понял:) И про матрицу думал, но обошелся синусами - косинусами.
Через this обращаться пробовал, пока не выходит. Честно говоря, не очень четко представляю что после него идти должно. $* чтоли?
Я надумал просто сохранить имя текушего объекта в еще одну переменную.
И про конфликт пикбуттон и криэйт мысль появилась одна.
В криэйт по on freemove сразу создавать объект, упрощенный до невозможности, отключая его видимость по on OkToDisplay. Пока не пробовал еще...
А что простым rotate нельзя фэйс повернуть - не ожидал, честно говоря. Вообще, век живи, век учись. И направление касательного вектора в конечной точке сплайна (с точки зрения lengTangent) меня потрясло до глубины души... Значение непредсказуемое..
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#9
Посмотрел нет через this не выйдет - указавает на текущий класс обьекта,
а нам надо добраться до node

>Я надумал просто сохранить имя текушего объекта в еще одну переменную
К сожалению похоже это единственный выход
Но с таким подходом у тебя возникнут как минимум две проблемы
при копировании и при содании не из под панели
 
#10
Проблема решилась просто. Есть хороший обработчик событий, я его как-то упустил из внимания, а зря.

on attachedToNode OBJCT do
(
BF = OBJCT
flagForeground BF true
)
on detachedFromNode BF do flagForeground BF false

В тексте скрипта из любого места можно теперь к этой BF обратиться без проблем. И содержит она именно ссылку на текущий обрабатываемый объект (node).
Спасибо за помошь.
 
Сверху