edgeRunner WIP

Главные вкладки

23

Решил написать сей скрипт публично.

И так:

Что надо получить:
Выделяем пару ребер и активируем. Первое ребро "скользит" по второму, но только общей вершиной.

Скрипт должен работать при любом количестве выделенных ребер, но не менее двух, и не сбрасывать выделение.
Действие производить только с последними двумя выделенными ребрами.
Тэги полигонов и ребер должны остаться прежними - Material, Part, Selection Set. А так же Weight ребер.
Скрипт должен выполняться, если одно или два из последних выделенных ребер лежат на краю только одного полигона. См. рис. ниже.

23 Комментария

#

Добавляйте от себя мысли по использованию скрипта, если таккя постановка задачи не удовлетворяет требованиям.
Буду выкладывать скрины кода с описанием хода написания. Подключайтесь, делитесь мыслями, у кого есть)

#

Первый блин)

3 вывод строки в Log
4 запрос и присвоение количества выделенных ребер переменной $edgeN
5 если ребер больше 1, то выполняем след команды
6 в массив @edgeO записываем результат запроса выделееных ребер в порядке выделения пользователем (нулевой элемент - первое ребро, и т.д.)
10 вывод в лог строки с именами предпоследнего и последнего выделенных ребер
11 если условие в строке 5 не выполнено, то выводим строку - Select more edges.

#

Нужны логическое мышление, синтаксис скрипта из интернета, синтаксис команд модо из хелпа и с офсайта, правила хорошего тона при написании кода и конечно же желание. И очень помогает острая нехватка какой-нибудь штуки для модо.
Ньюансы совместного применения скрипта и команд модо, да и сама логика команд в модо, что для чего - в общем связка двух сущностей, это то, на что я попытаюсь пролить свет в этом випе. Всего что знаю здесь конечно не охвачу, потому как для начала постарался выбрать пример попроще.

#

Немного вырос.

2 - Добавил условие для проверки компонентного режима, скрипт выполняется только если выбран режим ребер.
7 и 8 строки - Запрос из 6 строки возвращает для каждого ребра 3 значения в следующем формате: (индекс слоя, индекс 0, индекс 1). Индексы это вершины на ребре. Слой - меш, в котором находится ребро. Разбиваю полученные данные о ребрах, и полученные значения помещаю в массивы.
с 12 по 31 строки - Нахожу схожие вершины, по очередно сравнивая значения массивов. При нахождении совпадающих вершин, выделяю не совпадающие.
с 36 по 39 - Если совпадения найдены, то разделяю полигон по выделенным вершинам и перехожу в режим ребер.

 

Остаётся удалить ребро 1, назначить на получившийся полигон и новое ребро все тэги и вернуть выделение вершин к исходному состоянию, если таковое имелось.
Текущий алгоритм описывает не все ситуации из поставленной задачи (варианты 4 и 7 на скрине ниже), т.к. просто нет полигона, который можно было бы разделить.
Как правило, выполнение того функционала, ради которого пишется скрипт, занимает не слишком значимое количество строк кода, по сравнению с описанием условий и ситуаций которые могут возникнуть или неизбежно возникают в результате выполнения самого скрипта. Посмотрим как выйдет в этом случае.
Продумывая дальнейшие действия, проверяю на прочность алгоритм новыми ситуациями:

Продолжение следует.

#

Может вернуться к истокам бытия, в родную деревню. Edge separator- рёбра разделитель.) Шучу.

Edge runner мне очень нравится. Голосуем за него. Подключайтесь модонавты. Тем более кто этот скрипт породил, тот его просто обязан назвать, сам.

#

Для редактирования сетки. Так же как Spin или Slide, только со своей спецификой.
Чтобы не слайсить новые ребра ручками, удаляя старые. А потом ещё и тэги править, так как это уже совсем другие ребра. Так и упустить что-то можно, да и просто надоедает такая рутина.
Можно конечно сразу всё правильно делать, но бывает подправить надо.

#

Подправлять всегда надо. Что нибудь с весами сделать, когда их трогать начинаешь, было бы очень приятно понимать. Понятно в режиме весовых карт все видно... но а как на тактильном уровне?

#

Сабдивный вес ребра скрипт переносит, вес не теряется. Если речь о обычных весовых картах, то там значения хранятся только на вершинах. Вершины я не трогал, потому как ситуации разные могут быть.
Если есть пожелания и корректировки под нужды использования этого скрипта, то внести и подправить можно. Заявка нужна.