Вскоре после окончания колледжа я был нанят Dreamworks Animation для участия в программе под названием FX Challenge. Это была программа обучения, в ходе которой они берут выпускников начального уровня и обучают их на художников по спецэффектам в течение 6 месяцев. Поскольку компания работала в магазине Linux, изучение командной строки стало важным уроком для Dreamworks. Одним из их первых заданий было найти красивое изображение и сделать его красивее. Наши инструменты для этого? Набор проприетарных инструментов для работы с изображениями из командной строки. После базового знакомства с терминалом мы должны были изучить доступные нам инструменты и использовать их для достижения нашей цели - сделать красивее изображение красивее. Это было потрясающе.

Я понял, что именно субъективный характер задания сделал его таким успешным. Мы были вынуждены создать что-то, что мы считали красивым, а не просто проверять, что мы использовали все инструменты. Наша страсть вызвала желание найти нужный нам инструмент. Мы исследовали, мы учились и мы творили.

Любой, кто занимается самоделкой, знает этот процесс. Вы задумали что-то создать, но есть навыки, которым нужно научиться в первую очередь. Вы находите видео или учебник по необходимому навыку, выясняете, как применить его в своем проекте, а затем создаете его. Лучшее обучение происходит как побочный эффект творчества. Как педагог я считаю важным находить проекты, которые люди хотят реализовать, и извлекать из них важные уроки. Большинство людей не собираются изучать терминал, но если вы хотите установить ретро-игровой стол на базе Raspberry Pi, держу пари, вы кое-что о нем узнаете. Точно так же, если вы только что распаковали свой новый 3D-принтер, возможно, вы захотите узнать, как с его помощью что-нибудь сделать. Моя цель в этом посте - рассказать, как использовать терминал в проекте 3D-моделирования, а затем распечатать объект. Мы сделаем это с помощью набора команд, который я разработал, под названием stl_cmd.

Я впервые начал работать над пакетом stl_cmd несколько лет назад. Я начал с простых команд, которые отображают информацию о файлах STL, наиболее распространенном формате 3D-моделей, используемом в 3D-печати. stl_count выводит количество треугольников в файле. stl_bbox отображает ограничивающую рамку файла. Затем я создал stl_cube, который просто выводит куб в начале координат с заданным размером. stl_transform был наиболее полезным, имея возможность выполнять любое количество переводов, масштабов и вращений в файле STL. Вскоре после этого, когда я экспериментировал с резьбой для 3D-печати, я написал stl_threads, который генерирует резьбу на основе метрического стандарта резьбы ISO. Команды были полезны для ограниченного числа применений, но для того, чтобы люди действительно захотели их использовать, им нужно было сделать больше. Недавно я добавил stl_boolean, который может добавлять, вычитать и пересекать трехмерные формы. В сочетании с рядом команд, которые могут генерировать примитивные формы (stl_cube, stl_sphere, stl_cylinder, stl_cone и stl_torus), stl_boolean можно использовать для 3D-моделирования с помощью вашего терминала!

Некоторые из моих сообщений в блоге используют Open JSCAD для представления трехмерного виджета, который можно использовать для настройки проекта. OpenAOAD предоставляет простой способ создания 3D-моделей с использованием JavaScript в среде живого кодирования. Это фантастический пример того, как научиться программировать как побочный эффект создания 3D-моделей для 3D-печати. Я знал, что если бы я мог добавить аналогичную функциональность к stl_cmd, я мог бы достичь того же самого с целью также узнать что-нибудь о терминале. Основная технология, лежащая в основе Open JSCAD, - это CSG.js, библиотека JavaScript. Однако я не хотел реализовывать stl_boolean с использованием CSG.js, потому что мне не нужны накладные расходы или зависимость от Node.js. Я решил портировать библиотеку CSG.js на C ++, чтобы stl_boolean был быстрым и автономным, как и все другие stl_cmds. Я только недавно закончил простой порт, так что еще многое предстоит сделать (тестирование, реализация пары функций), но он очень удобен.

Если вы хотите попробовать stl_cmd, вам нужно будет собрать его из исходного кода, который должен быть простым:

git clone https://github.com/AllwineDesigns/stl_cmd 
cd stl_cmd 
make # a bin directory is created and can be added to your path, or 
make install # installs to /usr/local/bin by default

Чтобы сгенерировать ту же 3D-модель, что и программа по умолчанию, загружаемая в OpenAOAD, вы можете выполнить следующие команды:

stl_cube -w 3 > cube1.stl 
stl_sphere -r 2 > sphere1.stl 
stl_boolean -a cube1.stl -b sphere1.stl -d diff.stl # -d for difference 
stl_sphere -r 1.3 > sphere2.stl 
stl_cube -w 2.1 > cube2.stl 
stl_boolean -a sphere2.stl -b cube2.stl -i int.stl # -i for intersect 
stl_boolean -a diff.stl -b int.stl -u union.stl # -u for union 
stl_transform -tz 1.5 -s 10 union.stl out.stl

Окончательный результат будет в out.stl. Вы можете увидеть базовое перенаправление для захвата вывода примитивных команд (stl_sphere и stl_cube), некоторые аргументы командной строки и управление файлами (и, конечно же, вы можете обсудить свой путь и рабочий каталог). У меня есть планы включить дополнительные возможности потоковой передачи, чтобы передавать вывод от одной команды к другой, но у меня еще не было возможности.

Я до сих пор не использовал это в каких-либо учебных заведениях, но очень хочу попробовать. Дайте мне знать, если вы попробуете!

Первоначально опубликовано на www.allwinedesigns.com.