Свободное ПО моделисту: делаем аэроглиссер

b03b276b73f5298df8b8d6809b64b19f.png

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

Почему аэроглиссер? Я собрал несколько моделей самолетов из потолочки (потолочной плитки), и вроде с ними все хорошо, но именно мои недолговечны и с ними нужно выезжать по пробкам к ближайшему полю почти час (мы же законопослушные, в закрытых зонах не летаем). А тут рядом с домом есть озеро. Но по опыту пусков катера желательно, чтобы ниже ватерлинии не было ничего. Мое озеро не располагает к купанию, а водорослей на нем много. Плюс есть небольшая площадка для покатушек зимой по снегу (да и по замерзшему озеру). Поэтому было решено приземлить/приводнить один комплект электроники (кочующий от пенолета к пенолету) на аэроглиссер. Еще для новичка такая машина — хорошая практика, — живет в двух координатах и не разбивается, падая с третьей.

Следующим шагом было изучение того, что предлагает сеть. И вроде есть варианты от куска пенопласта с рулем до более-менее красивых моделей, но опять же целиком из потолочки. Хотелось чего-то посложнее и пожестче в плане конструкции. Тут то и всплыли из моего детства образы неких аэросаней. Видел я их в подборке Моделист-конструктора деда. Недолгие поиски привели к изделию А-3 КБ Туполева. Красивое такое, вроде как самолет, но не самолет, но с винтом и хвостами. Решено! Будем строить А-3.

Иллюстрация из того самого «Моделист-конструктора»Иллюстрация из того самого «Моделист-конструктора»

Так как с лобзиком и временем у меня не сложилось, то применять будем современные технологии разработки и ЧПУ фрезер. Тут то и приходит на помощь свободное ПО — как основной инструмент проектирования выступает на арену Blender, и немножко на подхвате Inkscape. Может кто-то и скажет, что Blender это сложно, давайте тут развеивать этот миф.

Первым делом скачиваем эти две программы и устанавливаем. Blender я использую версию 3.0. При первом запуске появится окно начальных настроек, где можно выбрать роль основных кнопок по выделению, проигрыванию анимации, тему или нажать Load 2.9.0 Settings если вы старовер. Я использую этот режим.

Типичный старовер сейчас:

47dbfb1f71980722a90b73080a332332.png

 Далее быстро осваиваемся с управлением в 3D viewport: зажатое колесо — вращение сцены, колесо+shift — панорамирование. Пятерка на numpad — переключение с перспективной на ортогональную 3D проекцию. Выбор проекций видов: 7 — верх, 1 — фронт, 3 — право. Если вы новичок — заставляйте себя использовать хоткеи, потом значительно упрощает работу. Еще надо попробовать интересную особенность Blender — настраиваемый интерфейс. Если верхний правый угол 3D viewport (курсор становится крестом) потянуть влево, то появится новое окно 3D viewport. Схлопнуть его можно там-же, только тянуть вправо (курсор станет стрелкой).

Итак, почти все готово к началу моделирования. В центре сцены у нас уже есть куб, источник света и камера. И еще 3D курсор. Это место силы, где появляются объекты, относительно него можно выполнять операции выравнивания, копирования, перемещения.

Теперь ищем три проекции. Я нашел такой чертеж:

26a1a133df43040e8f8aec6ace4404dd.jpg

Вырезаем из файла три картинки с видами (я использовал «ножницы» Windows). В настройках сцены выбираем метрическую систему и миллиметры.

f855ebda5325332e69cd7ff2f77c9704.png

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

Теперь создадим габаритный бокс на основе размеров с чертежа и знания диаметра модельного винта. Для этого будем использовать уже существующий куб (не отправлять же его на блендер-кладбище дефолтных кубов).

e1333ca47f709a846621ffcdc770a225.png

Для ввода размеров предназначена панель Dimensions. Панель открывается (и закрывается) нажатием кнопки N. Далее нажатием Z переключаем режим отображения в «проволочный каркас» (wireframe). Тоже самое можно достичь пиктограммой самого левого шарика в верхнем правом углу. Все готово для загрузки первой опорной картинки — вид справа.

Нажимаем Shift+A и выбираем Reference. Картинка появится в том месте, где у вас был 3D курсор (если нужно поставить в центр — Shift+S-Cursor to world origin).
Далее подгоняем картинку под габаритный бокс.

8cf9e0e6c8771db3f6cd931a4f037298.png

Во вкладке Image окна Properties можно настроить размер и положение картинки относительно центра, отрегулировать её прозрачность. Немного об организации сцены. Очень удобно для этого использовать коллекции окна Outliner. Это напоминает слои. В настройках окна выбираем настройки запрета выделения и видимости (потом можно будет скрывать референсы). Референсы складываем в одну коллекцию. Повторяем действия для верхней и фронтальной проекции и получаем такую заготовку.

23509cd56464ead6accadc26d37893bb.png

Теперь все готово к моделированию. Блокируем всю коллекцию референсов, габаритный бокс можно скрыть (выделить его и нажать H). Добавляем новый куб в центр сцены. Масштабируем, чтоб влезал в сцену (хоткей S). Нажимаем Tab (режим редактирования объекта). Моделировать будем половинку, вторую достроит модификатор mirror. Для этого разрежем куб пополам. Последовательность следующая — жмем Shif+R и двигаем мышью, располагая желтую рамку будущего разреза вертикально. Далее два раза ввод.

Нарезка кубиковНарезка кубиков

Образовались новые вершины. Переходим в вид сверху, выделяем верхние вершины (хоткей B — выделение рамкой, в режимах кроме wireframe будут выделяться только видимые вершины, или включить режим X-Ray для всех режимов) и удаляем их (X-Vertices). Применяем модификатор mirror. В настройках указываем ось, по которой зеркалить — Y.

57aa681bcdb32d327ef86fcc07cd01a5.png

Далее творческая работа. Выделяем вершины фронтального полигона (или полигон в режиме выделения полигонов) и двигаем (хоткей G) их к носу (нажимаем X, чтобы двигаться вдоль оси Х). Образуем новые разрезы, как делали с кубом в ключевых местах изменения геометрии, только теперь щелчком мыши устанавливаем разрез вертикально, двигаем в нужное место и вторым щелчком фиксируем разрез.

Образование новых вершинОбразование новых вершин

Потом выравниваем вершины по проекциям, не моделируя пока кабины и рулей.

9abee74ba8660280ea1e5d5965ae9a73.png

Для фронтального вида делаем разрез вдоль. Далее выделяем нижнее ребро (Alt+Shift+Щелчок по вершине нижнего ребра), снимаем выделение с первой и последней вершины и тянем ребро вверх по оси Z.

0dddf8b37a76b316e55eeeeba67b5c13.png

Теперь еще один разрез в верхней части вдоль кабины и аналогичное выравнивание по фронтальному виду.

0ecb17aed45c766f5023d9a8d5972841.png

Ну вот, уже появляется лаптеобразная заготовка.

0116a9cadb4b689feaf84ad14b3abcb6.png

Теперь новый инструмент — нож (K). В виде сверху режем по контуру кабины. Завершается разрез вводом.

3f003dab9ae1b2e539a061e1198bbdd2.png

Этим действием мы образовали новые полигоны. Теперь в режиме работы с полигонами выделяем их и выдавливаем (E) вдоль оси Z.

dc3b07fcb3e6b49d1d4257b360ab1d03.png

Дальше по аналогии — разрез — выравнивание. A few hours later применяем модификатор сглаживания.

«Что это? Птица? Самолёт? Нет, это… Аэроглиссер!»⁠⁠

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

Первым делом возьмемся за стрингеры. Перед следующими операциями болванку нужно дублировать (Shift+D+Ввод) и применить в меню модификаторов модификатор сглаживания. Дальше выберем несколько продольных ребер на корпусе, как показано на рисунке, в ключевых изменениях геометрии (Alt+Shift+Щелчок в режиме редактирования объекта). Отделим эти ребра от модели комбинацией Shift+D+Ввод (дублирование) P-Selection (отделение в новый объект).

4c34d9c33da87271ffbc33c5fe23451c.png

Это будут профили, по которым мы будем тянуть сечение стрингеров. Теперь переходим в режим операций с объектами (Tab) и выделяем вновь образованный объект и опять заходим в режим редактирования объекта (этот пока еще составной объект можно поместить в отдельную коллекцию). Теперь повествование пойдет об одном стрингере, остальные делаются аналогично.

Задача от этого набора отделить одну линию, конвертировать её из mesh в кривую (curve), нарисовать сечение рейки (стрингера) и вытянуть его вдоль этого пути. Отделяем одно связанное ребро так как описано выше.

76c61fa1ae102cc0d2d219706f695e93.png

Выбираем вновь отделенную линию и нажимаем сочетание Alt+C-Curve. Теперь доступны операции с кривыми.

b2c2fd698e1f8301a59b90a142677303.png

Выходим из режима редактирования этой кривой и где-нибудь в начале или конце добавляем плоскость (Shift+A-Plane). Через панель Transform задаем ей размеры 5×5 мм. В параметрических системах по-хорошему этот размер выносится в отдельный параметр (вроде плагин BlenderCAD это умеет), и меняя только этот размер, можно пересчитать все пазы с 5 мм рейки на 3 мм рейку, но так пока проще. Конвертируем плоскость в кривую (как делали с мешем выше, в режиме редактирования объекта) и меняем тип кривой, как на рисунке ниже. Выходим из режима редактирования, выбираем наш стрингер-сплайн и в меню сплайнов подменю geometry в опции bevel находим созданный из плоскости сплайн. После этого кривая примет вид огромной квадратной трубы. Её размер будет отличаться в 20 раз.

83ed2e8e0dddc46cdb462458f81d7edf.png

Почему происходит так, я не знаю. Я и применял трансформации, и искал ответ в интернете. Возможно знающие люди подскажут и я в этом месте исправлю текст. Но пока, чтобы привести размер в норму, нужно разделить размеры профиля на 20. Выбираем профиль, во вкладке Dimensions, прямо рядом с размером ставим слеш и пишем 20, жмем ввод — размеры сечения «трубы» придут к 5 мм квадрату.

a238de028af1aad5f2bb26c740484e5e.png

Сечения оставшихся стрингеров формируем по аналогии. В результате получится следующая заготовка.

a3e6e100ffc531c3a50b5d10d766ab00.pngbfb6bba4729d81ffb1d0cd4370d93ffd.png

Теперь займемся шпангоутами. На этом этапе вдоль центра модели нужно предусмотреть некий стапель. У меня это алюминиевый стержень квадратного сечения со стороной 10 мм и две рейки для самого первого шпангоута (стержень там мимо пролетает). При сборке на этом стапеле будут размещаться шпангоуты через определенный шаг. Так не должна уйти геометрия (у меня все-же ушла немного, ниже объясню почему). Для создания шпангоутов нужно нарисовать секущие плоскости. В центре добавляем плоскость (Shift+A-Plane) Масштабируем, разворачиваем как на рисунке (хоткей R, потом нажимаем нужные оси (ХYZ) и цифрами набираем градусы, на которые нужно повернуть плоскость (90 или 180), жмем ввод).

fd16e073e3799789bb32e4dc6240a212.png

Теперь эту секущую плоскость нужно размножить. Выделяем её, и набиваем на клавиатуре Sift+D (дублировать) Х (по оси Х) -50 (и передвинуть на 50 мм в отрицательном направлении) и ввод. Далее Shift+R, чтобы повторить предыдущую комбинацию — размножить плоскость по оси Х через 50 мм. Аналогично в другую сторону, только 50 мм без минуса.

8f9a7eba0bf4810339643acd132ccd64.png

Выделяем плоскости и жмем Ctrl+J — получаем один объект. Теперь выделяем болванку корпуса, дублируем (чтобы сохранить её, работать будем с дубликатом) в панели модификаторов (гаечный ключ) выбираем священный Boolean с опцией Difference, указывая на объект секущих плоскостей. И получаем сечения.

e04c94477b334e68aea250eb61d773c8.png

Дальше применяем весь стек модификаторов для этого объекта (Ctrl-A, когда мышь в зоне вкладки модификаторов или из выпадающего меню (галочка вниз)). На данном этапе нужно сформировать внутреннюю полость модели. Для этого нужно разделить все заготовки шпангоутов в отдельные объекты и сформировать внутренний контур. Рассмотрим на одном шпангоуте. Переходим в режим редактирования (помните как?). В режиме выделения полигонов выделяем один единственный полигон.

b9d94da82880166b3cf136276d1ad60a.png

Нажимаем хоткей I и двигаем так, чтобы граница полигона была шире 5 мм с запасом материала в местах, где будет вычитаться стрингер. Двигать нужно до момента образования каши из ребер как на рисунке выше.

Если нужна большая ширина — останавливаемся до пересечения ребер щелчком мыши и потом этот полигон масштабируем (S). Можно зажимать в процессе масштабирования нужные оси, чтобы добавить/убрать будущий материал. Затем командой X удаляем центральный полигон с опцией Delete only faces.

8b009c9170dfbf9149aa4746db9374dc.png

Спустя несколько Артемо-часов получаем вот такой скелет:

ca2e16a437465d468951ea2f9b5885ba.png

Полученные объекты объединяем в один и вычитаем булевой операцией стрингеры (их нужно обратно конвертировать в mesh, Alt+C и отзеркалить).

78223b4c9637e7333c0e82c3c9a3315b.png

На рисунке видно, что с кормы и носа (это же частично судно) я не удалял внутренности нескольких шпангоутов. Один разрезал сверху под пилон двигателя, и в одном предусмотрел ложемент под площадку для электроники. Делалось все в режиме редактирования одного шпангоута с его половинкой. Вторая часть отзеркаливалась.

Чтобы не усложнять и не увеличивать статью, держатели стапеля в шпангоутах я дорисовал в Inkscape, но центральный квадрат для него мы получим из Blender«а.

Используя аналогичные техники, были нарисованы: площадка под электронику, пилон-моторама и кили-рули. Алгоритм следующий: добавляется плоскость, разрезанием и движением вершин подгоняется под чертеж (или ваше видение инженера-созидателя), далее выдавливается на толщину вашего материала (да, тут бы параметрически… хочешь 3 мм фанеру, хочешь пять –, но у меня была только пятерка). Симметричные детали рисуем половинками. Крепление шип-паз формируем булевыми операциями с дубликатами деталей. Так дубликатами элементов моторамы я получил отверстия и вырезы для крепления моторамы и пилона, а для крепления килей я дублировал и вычитал пересекающиеся их части со шпангоутами. Сервопривод я скачал и вычел из площадки для оборудования, а двигатель смоделировал из цилиндров по имеющимся размерам. Разместил и проверил, не пересекаются ли с винтом тяги рулей (тоже цилиндры). Тем, кто умеет работать с костями и инверсной кинематикой можно даже прямо тут в 3D пошевелить рулями.

6c12d02143a888b15051710b5e30d609.png

В процессе проектирования я учитывал толщину только задних шпангоутов (те, которые участвуют в пересечениях с внутренней структурой), а с передних брал только контур. Это привело к набегающей к носу ошибке в длине. В результате у меня передний шип площадки для электроники не дотянул до своего паза на 7 мм, и сама модель получилась несколько длиннее. Это так, в плане поделиться с вами своими граблями.

Теперь получим векторные изображения деталей. Короткий план : разместить по проекциям ортогональные камеры, включить FreeStyle рендер и, по очереди, скрывая детали и оставляя нужные, получить их рендеры в SVG формате. Молодцевато, как опытный пианист, одной рукой жмем Ctrl+Alt+U и вызываем настройки. В пункте addons находим Freestyle SVG exporter. В результате этого действа во вкладке Render Properties появятся новые настройки. Делаем как на рисунке.

cb8d1371fbc24ff76eae6edce9179df8.png

Ставим камеру, жмем Ctrl+F12 и ждем окончания рендера. В той папке, где сохранена модель, появится SVG файл с именем номера кадра.

122fb8f52b1a6cd7a93203a32dfd65c1.png

Ну практический инженерный арт. Теперь на примере одного шпангоута посмотрим, как получить его чертеж.

Выделяем камеру, переходим во фронтальную проекцию и выравниваем камеру по виду (Ctrl+Alt+0 на num pad, или жмем пробел и начинаем набирать align…. до появления нужного пункта).

80f3e0088912b072e2892dcbea39b6c7.png

Переключаем тип камеры — с перспективной в ортографическую. Масштабом подгоняем так, чтобы объекты были в поле зрения камеры. Теперь нужно оставить только нужные объекты для рендера. Снимаем выделение со всего (A), выделяем нужный шпангоут и стапель, инвертируем выделение (Ctrl+I) и скрываем все остальное (H). В outliner выключаем опцию рендера для всех невидимых объектов. Если иконка фотографического аппарата отсутствует, включаем её в настройках (символ воронки-фильтра). Если вы разбивали логически сцену на коллекции, можно скрыть целиком коллекцию.

2e309a38dc9f19aa5527dff948368c05.png

Рендерим изображение и получаем векторный файл:

437ec7416e1f8ba53bcf90afb1def241.png

Один важный нюанс. Объекты для этих рендеров должны быть плоские. Иначе Freestyle рендер будет добавлять линию над линией и дальше в Inkscape для получения замкнутых контуров придется дополнительно их редактировать. Я в проекции «боком» к детали в режиме редактирования выдавленной детали выделяю вершины одной плоскости и удаляю их, получая плоскую деталь — так формирую отдельную коллекцию для итогового ренедера.

Если тема интересна, во второй части статьи опишу, как собрать эти файлы в лист, немного доработать их, получить G-code для фрезеровки/лазерной резки. Ну и описать процесс сборки модели. Модель кстати собрана, функционирует, радуя детвору (и взрослых дядь) и огорчая уток.

В заключении хочется сказать, что когда задача разбивается на небольшие подзадачи (О декомпозиция!) то не так уж и сложно. И Blender становится дружелюбен. Отдельное спасибо товарищам Павлу Жовнеру, Сергею @dlinyj, Денису Веберу и многим другим авторам, которые меня тут на протяжении лет учили и заряжали своим интересом и образом достижения целей. За сим пока все, выключаем «высокое».

© Habrahabr.ru