LibreLogo и BeetleBlocks, черепашья графика в 3D-моделировании

Александр Григорьев

В прошлой статье я рассказал о том, как создать трехмерный объект из плоского рисунка в LibreOffice Draw и, используя FreeCAD, подготовить STL-файл для печати на 3D-принтере. Мы редактировали изображение вручную, а затем преобразовывали его в тело вращения. Теперь займемся превращением плоских фигур в объемные методом «выдавливания». На носу Новый год, будем делать украшение на елку. Напечатаем снежинку Коха. И, как Вы уже поняли, будем рисовать ее программно, при помощи команд черепашьей графики и рекурсивных алгоритмов. Надеюсь, что к Иванову дню нам будет по силам и лист папортника:

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

Download
LibreLogo - быстрый старт.
LibreLogo_QuickStart.zip
Compressed Archive in ZIP Format 99.4 KB

Займемся программированием. Я не буду рассказывать о синтаксисе, командах, приемах и концепциях, это отдельная большая тема, для начала просто воспроизведите готовый текст программы. Черепашка будет двигаться и оставлять за собой след; «fd», «lt», «rt» — команды ее перемещения (forward, left, right). Об остальном написано в «LibreLogo - быстрый старт».

Создадим новый документ LibreOffice Writer и наберем в нем следующее:

Код
To side :d
  if :d<5 [
    fd :d
  ] [
    side :d/3 lt 60 side :d/3 rt 120 side :d/3 lt 60 side :d/3
  ]
end

to shape :d
  repeat 3 [ side :d rt 120 ]
  fill
end

home clearscreen pd fillcolor “skyblue”
shape 210
pu lt 90 fd 100 rt 180



Важно не забывать ставить пробелы рядом с открывающими и закрывающими квадратными скобками.

Теперь отобразим панель «Logo» (меню «Вид», «Панели инструментов», «Logo») и нажмем кнопочку «Старт». Появилась черепашка и начала рисовать. Любуемся результатом:

Судя по всему, подобная детализация для печати на 3D-принтере избыточна, поэтому отредактируем строку, ограничивающую вложенность рекурсивного вызова («if D<5»). Кроме того, хотелось бы в результате получить ажурную вещь, а не тяжелую «лепешку». План таков. Нарисуем внутри фигуру поменьше, а затем произведем операцию логического вычитания одной фигуры из другой. Алгоритм для рисования второй фигуры получится сложнее, будем ставить точку за точкой в нужные позиции, а потом разом объединим их в замкнутый контур. Итоговая программа:

Код
To side :d
  if :d<10 [
    fd :d
  ] [
    side :d/3 lt 60 side :d/3 rt 120 side :d/3 lt 60 side :d/3
  ]
end

to shape :d
  pd
  repeat 3 [ side :d rt 120 ]
  fill
end

to  left60andAddMarker
  rt 60 fd 5 point bk 5 lt 120
end

to internalSide :d
  if :d<10 [
    fd :d
  ] [
    internalSide :d/3 
    left60andAddMarker
    internalSide :d/3
    rt 120
    internalSide :d/3
    left60andAddMarker
    internalSide :d/3
  ]
end

to internalShape :d
  pu
  repeat 3 [ internalSide :d rt 120 ]
  fill
end

to snowflake :d
  picture [
    fillcolor “blue” shape :d
    fillcolor “skyblue” internalShape :d
  ]
end

home clearscreen 
snowflake 210
; picture “snowflake.svg” [ snowflake 210 ]
pu bk 100



Получившийся рисунок:

Выделяем его в документе, копируем в буфер обмена (Ctrl-C), открываем LibreOffice Draw, вставляем (Ctrl-V). Передвинем рисунок поближе к верхнему левому углу листа А4. Во FreeCAD центр координатной сетки будет находиться именно там («Выровнять» — «По левому краю», «Выровнять» — «По верхнему краю»).

Теперь надо сохранить рисунок в формате ODG («Файл» — «Сохранить как») и экспортировать в SVG («Файл» — «Экспорт», выбрать «SVG (Scalable Vector Graphics)»). Закрываем программы LibreOffice Writer и LibreOffice Draw, дальше будем работать во FreeCAD.

Мы могли бы сохранить SVG-файл непосредственно из LibreOffice Writer командой «picture “snowflake.svg” [ snowflake 210 ]», но, к сожалению, эта операция выполняется нестабильно. Файл мы получим, но придется побороться с зависшим LibreOffice. По этой причине данная команда оставлена в комментариях.

Открываем FreeCAD. Базовые приемы работы с ним описаны в предыдущей статье, повторяться я не буду. Закрываем стартовую страницу, выбираем верстак, открываем новый документ, импортируем SVG файл как набор геометрических примитивов. Видим пугающее количество объектов.

Тем не менее, найти необходимое нам достаточно легко.

Для начала внешняя рамка листа А4. Это первый объект в списке. Верхний левый угол рамки имеет нулевые координаты (0,0,0). Зная это, нам будет проще ориентироваться. Переименовываем («рамка»), прячем клавишей «Пробел».

Изменим масштаб, чтобы лучше все было видно. Теперь нам нужно найти обе фигуры с ненулевой площадью, все оставшиеся контуры удалить. Щелкнем по метке «рамка» в окне комбо-панели, нажмем стрелку на клавиатуре, курсор побежит вниз по списку. Очень быстро мелькнет фигура с большей площадью, надо вернуться к ней. Это «Path011». Переименовываем («фигура1»), прячем.

Вторая фигура, меньшая, это предпоследний объект в списке. Переименовываем («фигура2»).

Теперь удаляем лишнее, отображаем необходимое, переходим в аксонометрическую проекцию.

Будем «выдавливать». Вначале меньшую фигуру. Подсветим, нажмем кнопку «Выдавить выбранный эскиз».

Выберем толщину фигуры («длина», 4 мм), «Создать твердое тело», нажмем на кнопку «Ок»

Получилось. Вместо объекта «фигура2» у нас теперь «Extrude».

Выдавливаем фигуру большего размера, тоже толщиной 4 мм. Она поглощает собой внутреннюю. У нас появился объект «Extrude01».

Осталось вычесть одну фигуру из другой. А еще можно было бы пересечь или объединить. Операции над множествами в наглядной форме.

Подсветим «Extrude01». Удерживая клавишу «Control», подсветим «Extrude». Нажмем на кнопку «Выполнить обрезку двух фигур».

Ждем. Наша снежинка.

Сохраняем готовую 3D-модель, экспортируем в STL-файл (выбрав объект «Cut»).

На этом можно было бы закончить, если бы возможности черепашьей графики ограничивались исключительно работой на плоскости. Но это не так. На сайте www.beetleblocks.com расположен онлайн-сервис на базе проекта «Snap!», позволяющий создавать трехмерные объекты. Исполнитель, симпатичный жучок, способен перемещаться в пространстве и оставлять там, где находится, графические примитивы: сферы, цилиндры, параллелепипеды. К его системе команд помимо «рысканья» (поворот влево-вправо) добавлены также «крен» (заваливание налево-направо) и «тангаж» (нос вверх-вниз). 
Это визуальная среда программирования, поэтому нет нужды учить синтаксис, можно сразу приниматься за дело. Но самое главное, созданные объекты можно сохранять как STL-файл! И совсем несложно сваять самому и распечатать на 3D-принтере что-то подобное.

Пока что с проектом можно работать только онлайн и только в браузере Google Chrome, однако разработчики обещают скоро выпустить оффлайн версию. Объем статьи не позволяет мне писать подробно еще и о BeetleBlocks. К возможностям проекта я постараюсь вернуться в следующих публикациях. Тем не менее, основное Вам уже известно. Он есть! smile.gif 

Прикрепленные файлы
Download
snowflake.zip
Compressed Archive in ZIP Format 18.9 KB
Download
Koch_Snowflake_Algorithm.zip
Compressed Archive in ZIP Format 15.7 KB