1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Pickbutton & Mous tools

Тема в разделе "MAXScript", создана пользователем -, 3 апр 2004.

Модераторы: Savin Denis
  1. Guest

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

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Ни что не совершенно, а скрипт в особености.
    Для таких деталей нужна SDK.

    Но совсем не обязательно создавать обьект из панели
    Можо сделать UIкнопку к нему и уже из макро скрипта
    вызывать c нужными параметрами - такими как выделенный сплайн.
     
  3. Guest

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

    Savin Denis Moderator Команда форума

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

    PS.
    Извращятся так до конца.
     
  5. Guest

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

    и еще вопрос на засыпку - нужно в случае удаления пути переместить пивот объекта в определенную точку. Естественно, когда удаляется сплайн, сам объект не выделен, т.е. нельзя из скрипта к нему обратиться $.pivot. Если напрямую по имени к нему обратиться - то неизвестно как его уже переименовать могли... Как же обратиться из скрипта к ТЕКУЩЕМУ обрабатываемму им объекту не зная его имени?
     
  6. Guest

    Спасибо боьшое. Я в общем-то, пришел к тем-же выводам. Но решить проблему решился иначе - обойдется заказчик без возможности выбрать путь до создания объекта:)
    Возникла зато другая проблема - выстраивая объект (на основе бокса) вдоль пути, я экструдирую на нулевое значение полигон, сдвигаю его точки в нужную позицию (в соответствии и интерполяцией путевого сплайна), поворачиваю полигон перпендикулярно касательному вектору в соответствующей точке пути, снова экструдирую (чтобы получить новые точки - и т.д.
    Так должно быть в принципе. Но полигоны поворачиваться не хотят упрямо.
    не прокатывает ни
    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
    точки и полигоны выбираю те - проверял неоднократно)
     
  7. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    >Вообще не могу понять, как повернуть полигон или набор точек
    Не все так просто.
    Тут тебе прийдется вспомнить курс векторной геометрии
    составить матрицу трансформации и перемножить на нее точки.

    >Как же обратиться из скрипта к ТЕКУЩЕМУ
    Попробуй через this
     
  8. Guest

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

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Посмотрел нет через this не выйдет - указавает на текущий класс обьекта,
    а нам надо добраться до node

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

    Проблема решилась просто. Есть хороший обработчик событий, я его как-то упустил из внимания, а зря.

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

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

Поделиться этой страницей