На сайте c 29.05.2011
Сообщений: 1748
по ссылке с Яндекса
Граждане, кто в курсе как это сделать?
Есть, допустим переменная name="Box"
И есть куча объектов, в именах которых содержится или не содержится этот "Box".
Нужно устроить всем объектам в сцене (или в выделении) проверку на содержание в их именах этого Box'а, и объекты содержащие в имени Box уложить в другую переменную-массив.
На сайте c 29.05.2011
Сообщений: 1748
по ссылке с Яндекса
Цитата Maketer:
пусть M - это переменная-массив, тогда для всех обьектов в сцене: M=for i in $*Box* collect i Для выделенных: M=for i in $*Box* where i.isSelected==true collect i
Пасиб за ответ, но нет, фишка в том, что кусок имени - это переменная величина.
Собстевенно вопрос и содержится в том, чтобы выделить все объекты, часть имени которых содержится в переменной.
Я пока решил так, но имхо как-то коряво:
currentname = "box"
currentnametoexecute = "$*" + currentname as string + "*"
На сайте c 29.05.2011
Сообщений: 1748
по ссылке с Яндекса
Цитата Maketer:
Вы же не сказали сначала, что выделить хотите этот массив с обьектами "box"))
Нет, смысл в том, что мне надо, чтобы была переменная, допустим currentname, в ней лежал кусок имени - box, sphere, xpeh, пофиг какой, и этот кусок меняется постоянно.
В вашем варианте нет переменной, в которой содержится кусок имени, по которому собираются объекты. Т.е. если надо не *box* собрать, а например *sphere*, то придётся переписывать скрипт.
В моём варианте можно менять переменную currentname, и собирать коллекции объектов по ситуации.
А вообще, это кусок скрипта из более большого скрипта, который опрашивает все объекты, находит повторяющиеся имена, и группирует объекты с повторяющимися именами в отдельные группы. Именно поэтому "референсный" кусок должен быть отдельной переменной, которую можно изменить в процессе действия скрипта, а не прибитым куском максскрипта.
На сайте c 14.11.2016
Сообщений: 41
Россия, Санкт-Петербург
Цитата Maketer:
Ок, эту задачу можно решить разными способами) Вот еще вариант
Для всех обьектов:
currentName=Box
t=currentName as string
SelM=#()
for i in objects do (
a=(trimRight i.name t)
b = (trimLeft i.name t)
if a!=i.name or b!=i.name do append SelM i)
Select SelM
Для выделенных обьектов:
currentName=Box
t=currentName as string
SelM=#()
for i in selection do (
a=(trimRight i.name t)
b = (trimLeft i.name t)
if a!=i.name or b!=i.name do append SelM i)
Select SelM
У меня похожая задача, но нужно проверить выбранные объекты на наличие среди них только сплайнов, чтобы можно было назначить на них модификатор Edit Spline.
Что-то вроде такого, но с программированием у меня туго, поэтому это скрипт не работает, как нужно)
if SelChek=(
for i=1 to selection.count do isKindOf selection[i] SplineShape!=1
Т.е. нужно сначала прогнать цикл, записать итоговый результат проверки в переменную и потом уже проверять на условие true или false, но и тут проблема, как прописать правильно условие, чтобы сплайн или шейп отличить от меша или камеры.Прописывать все возможные объекты точно не вариант.
На сайте c 14.11.2016
Сообщений: 41
Россия, Санкт-Петербург
Цитата -NiK-:
Цитата kolt_050:
А где можно посмотреть список всех супер-классов?
superclasses :)
Спасибо!
Сейчас ещё пишу скрипт для Mirror по горизонту или вертикали, в зависимости от того, как расположен объект относительно вида или камеры.Пока готова первая часть скрипта с проверкой на ориентацию вида.
Но вот с Mirror относительно опорной точки объекта или вида, которая может меняться в панели меню, у меня проблемы. Нигде не могу найти информацию по этому поводу. Как учитывать именно отображаемую опорную точку, а не локальную или центра координат.
На сайте c 14.11.2016
Сообщений: 41
Россия, Санкт-Петербург
Цитата Evilis:
по второму, мне немного сложно вас понять :) возможно это Mirror
, и это coordsys
вам поможет
Скрипт нужен для того, чтобы не париться на счёт выбора осей по которым нужно отзеркалить объект и не тратить время на диалоговое окно стандартного инструмента Mirror в максе.
Мне гораздо быстрее просто повернуть камеру вокруг объекта, выбрав нужный ракурс для отображения объекта по горизонту или по вертикали.
Пока я сделал его только для локальной опорной точки самого объекта.
Осталось только в скрипте прописать ноду координат [in] coordsys <matrix3> которую он должен считывать с выбранной опорной точки вида. Вот в этом и загвоздка, не понимаю, как можно считать её координаты в пространстве.
проверить на щэйп или тип удобнее если сделать нужный предикат как отдельную функцию например
fn is_shape geo = canconvertto geo SplineShape /* add more tests if needed */
local shapes_only = for obj in selection where is_shape obj collect obj;
для мирор под камеру, если нужно выбрать обсолютную ось достатончо просто сдеьать крос вектор камеры и вверх, потом выбрать самую длиную ось, если не обсолютную ось а прям под камеру все тоже самое только перпендикулярный вектор камеры и верх переводим в угол поворота относительно поворота обьекта, скармливаем в mod.Mirror_Center.rotation
На сайте c 29.05.2011
Сообщений: 1748
по ссылке с Яндекса
Цитата dontpiter:
А чего все до сих пор на макскрипте пишут? Макс вроде Пайтон поддерживает давно..
1) не все переходят на новые версии макса, я год пытаюсь к 2021 привыкнуть, он более падучий, чем богоподобный 2014, интерфейс менее удобный, и до сих пор не нашёл где выключается зум в полигон с колеса мыши, а не в бесконечность, до сих пор чертыхаюсь
2) если постоянно пишешь скрипты и тулзы, которые в принципе похожи друг на друга, то часто используешь куски из старых скриптов, поэтому переезд на пайтон зачастую то еще приключение
3) максскрипт работает и зачем пересаживаться на пайтон?)))
На сайте c 14.11.2016
Сообщений: 41
Россия, Санкт-Петербург
Цитата QuixelMega:
для мирор под камеру, если нужно выбрать обсолютную ось достатончо просто сдеьать крос вектор камеры и вверх, потом выбрать самую длиную ось, если не обсолютную ось а прям под камеру все тоже самое только перпендикулярный вектор камеры и верх переводим в угол поворота относительно поворота обьекта, скармливаем в mod.Mirror_Center.rotation
Нашёл ещё такой вот приём, но как использовать не совсем понятно.
Нормализованные XYZ векторы камеры въюпорта
Их можно использовать для рассчёта положений, трансформаций и перемещений относительно камеры въюпорта
Нашёл ещё такой вот приём, но как использовать не совсем понятно.
Я не до конца понял чего вы пытаетесь добиться.
Вам нужно, чтобы объект зеркалился по осям текущей системы координат? И из этих осей должны выбираться 2 наиболее перпендикулярные вьюпорту?
Камера это типа наш вьюпорт. Тогда вертикальный миррор выбирает ось (1), а горизонтальный (2)? Это если выбраны локальные координаты объекта. Если выбраны мировые координаты, то соответственно выбирать нужно из них?