RevK ® ‘s ramblings
There are a lot of tools for making 3D models, and if you have a 3D printer it is useful to have some of these. One of the most useful tools I have found is OpenSCAD. There are many types of tools, some more artistic, some scanning, but OpenSCAD is an engineering drawing programatic tool that lets you create 3D objects using code.
There is a a Secret Heart on Thingiverse which is really excellent and creates a complete object that then twists between a heart and lozenge shape, locking the compartments that only open when in the heart shape. I was always impressed with it and it «just works» on the Makerbot replicator 2. I tried it on my new TAZ 6 and it did not quite work, which is unsurprising. They publish the OpenSCAD file and I tinkered and did not get far, so in the end I decided it would be a really good learning exercise to make one from scratch.
There are a lot of small details in the final model, so I won’t bore you with those, just some of the basics.
How to make a heart shape?
Well, let’s start with a few basic constants :-













But this was not enough. I needed the hollow to have chamfered edges, else the thin wall would mean the slicer had trouble bridging the top, so how to do that?
Well, make it have an offset for horizontal and vertical.




That is just the basic shape of the heart sorted, hollow, chamfered edges on inside. There was a lot more detail to add, to make joints and hinges and so on, but that should give you some idea of how OpenSCAD works for now.
And yes, the moral of the story is that a Valentine’s heart starts with a pair of balls.
P.S. I am used to coding, and usually with code there is a reasonably clear end point when it all works — apart from finding and fixing bugs. But this is more art than code in many ways, so I have spent a couple of days fine tuning the design and doing test prints — you really do not know when to stop with things like this — there is always some tiny tweak to improve it either technically or aesthetically, and there is always a way to test the limits of the printer.
1 comment:
OpenSCAD is the ideal tool for me — all right, I have experience with PoVray and I've been doing design with CSG for something like a quarter of a century at this point, but it's always seemed like the most sensible way to go about things.
Comments are moderated purely to filter out obvious spam, but it means they may not show immediately.
Royal Mail API (RMAPI v4)
We have used Royal Mail for postage for some time. They had an XML API which we have used, and it works. What is interesting is how all of t.



Search This Blog
About Me
RevK 10x geek, techie, occasional expert, a bit tactless. Oh, and I run an ISP.
Voxel heart

Вам нравятся Cults и вы хотите помочь нам продолжить наш путь самостоятельно? Обратите внимание, что мы — маленькая команда из 3 человек, поэтому поддержать нас в поддержании деятельности и создании будущих разработок очень просто. Вот 4 решения, доступные для всех:
РЕКЛАМА: Отключайте блокировщик баннеров AdBlock и кликайте на наши рекламные баннеры.
АФФИЛИАЦИЯ: Совершайте покупки онлайн, переходя по нашим партнерским ссылкам здесь Amazon.
ПРИГЛАШЕНИЕ ДРУЗЕЙ: Приглашайте своих друзей, откройте для себя платформу и великолепные 3D-файлы, которыми делится сообщество!
(Решено) Напиши программу для OpenSCAD, чтобы получилось сердце …
OpenSCAD — это язык программирования для создания 3D-моделей, в котором объекты описываются математическими формулами. Для создания сердца в OpenSCAD нам понадобится использовать команду «union», которая объединяет несколько объектов в один.
Сначала создадим две полусферы с помощью функции «sphere». Одна полусфера будет находиться выше оси координат, а другая — ниже.
«`
top = sphere(r=10, $fn=50); // верхняя часть сердца
bottom = translate([0,0,-10]) sphere(r=10, $fn=50); // нижняя часть сердца
«`
Здесь мы задали радиус полусфер и количество граней ($fn) для их отображения. Вторую полусферу мы сдвинули на -10 по оси z с помощью функции «translate».
Теперь, используя команду «difference», вырежем из первой полусферы часть, соответствующую второй полусфере, чтобы получить нижнюю часть сердца.
«`
heart = difference() <
top;
bottom;
>
«`
Мы создали переменную «heart», в которую поместили разность двух полусфер.
Сердце получилось достаточно пологим, поэтому добавим к нему коническую форму в центре, которая поднимет его.
«`
middle = translate([0,0,5]) scale([1,1,2]) cylinder(r1=10, r2=5, h=8, $fn=50); // центр сердца
«`
В этом примере мы использовали функцию «cylinder», чтобы создать конусообразную форму, затем повернули ее на 5 вверх на оси z. Полученную форму разместим в переменной «middle».
Теперь объединим все три формы — верхнюю и нижнюю полусферы и центр — с помощью команды «union».
В переменную «heart» добавляем содержимое переменной «middle».
После выполнения всех этих шагов получилось 3D-изображение сердца, которое можно экспортировать в STL-файл для последующей печати на 3D-принтере.
Конечный код программы для OpenSCAD будет выглядеть следующим образом:
«`
top = sphere(r=10, $fn=50); // верхняя часть сердца
bottom = translate([0,0,-10]) sphere(r=10, $fn=50); // нижняя часть сердца
heart = difference() <
top;
bottom;
>
middle = translate([0,0,5]) scale([1,1,2]) cylinder(r1=10, r2=5, h=8, $fn=50); // центр сердца
heart = union() <
heart;
middle;
>
«`
Чтобы оставить комментарий, необходимо авторизоваться.
Задай любой вопрос нейросети!
Для того, чтобы задать вопрос нейросети, необходимо войти на сайт.
Последние вопросы
Искусственный интеллект ChatGPT на русском: полный обзор, возможности и использование
(Решено) Барн дома строительство …
(Решено) Чем отличается герундий от презент континиуса напиши понятно с ппримерами…
(Решено) Напиши продающий текст для дорожного велосипеда Endurace CF 7 All-Road . Текст должен занимать на чтение не более 2 минут …
(Решено) сделай скрипт для бега на кнопку shift в роблокс…
(Решено) Какими параметрами и свойствами обладает антивирус Kaspersky Security Cloud Free?…
(Решено) Как назвать магазин женской спортивной одежды …
(Решено) Водоснабжение дома в Москве и области…
(Решено) в поддержку сервиса Я.Почта пришло письмо. Попробуйте ответить на него:Текст письма:Зря, многие живут прошлым, вы сотрете память и люди себя забуду…
Хотите задать любой вопрос нейросети?
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет»
Форма репорта неправомерного контента.
Обратная связь с администрацией проекта
Уведомление об использовании cookie файлов
Наш сайт, как и большинство других, использует файлы cookie и другие похожие технологии (пиксельные тэги и т. п.), чтобы предоставлять услуги, наиболее отвечающие Вашим интересам и потребностям, а также собирать статистическую и маркетинговую информацию для анализа и совершенствования наших услуг и сайтов.
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie и других похожих технологий в соответствии с настоящим Уведомлением.
Если Вы не согласны, чтобы мы использовали данный тип файлов, Вы должны соответствующим образом установить настройки Вашего браузера или не использовать наш сайт.
Обращаем Ваше внимание на то, что при блокировании или удалении cookie файлов, мы не можем гарантировать корректную работу нашего сайта в Вашем браузере.
Cookie файлы, которые сохраняются через веб-сайт, не содержат сведений, на основании которых можно Вас идентифицировать.
Что такое файл cookie и другие похожие технологии
Файл cookie представляет собой небольшой текстовый файл, сохраняемый на вашем компьютере, смартфоне или другом устройстве, которое Вы используете для посещения интернет-сайтов.
Некоторые посещаемые Вами страницы могут также собирать информацию, используя пиксельные тэги и веб-маяки, представляющие собой электронные изображения, называемые одно-пиксельными (1×1) или пустыми GIF-изображениями.
Файлы cookie могут размещаться на вашем устройстве нами («собственные» файлы cookie) или другими операторами (файлы cookie «третьих лиц»).
Мы используем два вида файлов cookie на сайте: «cookie сессии» и «постоянные cookie». Cookie сессии — это временные файлы, которые остаются на устройстве пока вы не покинете сайт. Постоянные cookie остаются на устройстве в течение длительного времени или пока вы вручную не удалите их (как долго cookie останется на вашем устройстве будет зависеть от продолжительности или «времени жизни» конкретного файла и настройки вашего браузера).
Cookie файлы бывают различных типов:
Необходимые. Эти файлы нужны для обеспечения правильной работы сайта, использования его функций. Отключение использования таких файлов приведет к падению производительности сайта, невозможности использовать его компоненты и сервисы.
Файлы cookie, относящиеся к производительности, эффективности и аналитике. Данные файлы позволяют анализировать взаимодействие посетителей с сайтом, оптимизировать содержание сайта, измерять эффективность рекламных кампаний, предоставляя информацию о количестве посетителей сайта, времени его использования, возникающих ошибках.
Функциональные файлы cookie запоминают пользователей, которые уже заходили на наш сайт, их индивидуальные параметры (такие как язык и регион, например) и предпочтения, и помогают индивидуализировать содержание сайта.
Рекламные файлы cookie определяют, какие сайты Вы посещали и как часто, какие ссылки Вы выбирали, что позволяет показывать Вам рекламные объявления, которые заинтересуют именно Вас.
Электронная почта. Мы также можем использовать технологии, позволяющие отслеживать, открывали ли вы, прочитали или переадресовывали определенные сообщения, отправленные нами на вашу электронную почту. Это необходимо, чтобы сделать наши средства коммуникации более полезными для пользователя. Если вы не желаете, чтобы мы получали сведения об этом, вам нужно аннулировать подписку посредством ссылки «Отписаться» («Unsubscribe»), находящейся внизу соответствующей электронной рассылки.
Кнопки доступа к социальным сетям. Они используются для того, чтобы пользователи могли поделиться ссылкой на страницу в социальных сетях или сделать электронную закладку. Данные кнопки являются ссылками на веб-сайты социальных сетей, принадлежащих третьим лицам, которые, в свою, очередь могут фиксировать информацию о вашей активности в интернете, в том числе на нашем сайте. Пожалуйста, ознакомьтесь с соответствующими условиями использования и политикой конфиденциальности таких сайтов для понимания того, как они используют ваши данные, и того, как можно отказаться от использования ими ваших данных или удалить их.
Сторонние веб-сервисы. Иногда на данном сайте мы используем сторонние веб-сервисы. Например, для отображения тех или иных элементов (изображения, видео, презентации и т. п.), организации опросов и т. п. Как и в случае с кнопками доступа к социальным сетям, мы не можем препятствовать сбору этими сайтами или внешними доменами информации о том, как вы используете содержание сайта.
Как управлять файлами cookie?
Большинство интернет-браузеров изначально настроены на автоматический прием файлов cookie.
В любое время Вы можете изменить настройки вашего браузера таким образом, чтобы блокировать файлы cookie или предупреждать вас о том, когда они будут отправляться к вам на устройство (обратитесь к руководству использования конкретного браузера). Отключение файлов cookie может повлиять на Вашу работу в интернете.
Если вы используете несколько устройств и (или) браузеров для доступа в интернет, соответствующие настройки должны быть изменены в каждом из них.
Заключительные положения
По собственному усмотрению мы можем периодически изменять настоящее Уведомление.
По возникающим вопросам с нами можно связаться, используя контакты, размещенные на нашем сайте.
OpenSCAD Урок 2. Учимся на простых примерах — функции minkowski, hull, projection. Модели плоских (2D) фигур.
Примеры с функциями minkowski, hull. Дополнительные методы обработки и отладки моделей.
Векторная сумма — minkowski.
Результатом работы функции является Сумма Минковского для нескольких тел. Точки поверхностей N тел векторно суммируются — результатом является некая новая фигура. На слух это воспринимается с трудом, но визуально это достаточно легко понять — поэтому приведу несколько примеров работы с данной функцией.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Для случая когда одно из слагаемых имеет прямые грани — сумма Минковского выглядит достаточно просто. Если же применять её к сферическим поверхностям с искажённой формой — результат будет сложно представить заранее. Предлагаю вам поэкспериментировать самостоятельно.
Общая оболочка — hull.
Принцип действия полностью соответствует названию. Представьте, что вы размещаете в пространстве две произвольные фигура, а потом обтягиваете их резиновой оболочкой — это и есть функция hull().
![]() |
hull— в некоторых случаях просто незаменима. С трудом могу себе представить, как в OpenSCAD, без неё, можно сделать переход из трубы с круглым сечением в трубу с квадратным сечением. С hull() это можно сделать в несколько строк кода.
![]() |
Отражение модели — mirror.
Из несимметричных объектов, с помощью вращений и переносов, невозможно получить зеркальную копию. От мучений по постройке зеркальной копии модели нас спасает функция с одноимённым названием mirror. В качестве входного параметра, функция принимает координаты вектора нормали (перпендикуляра) к плоскости отражения. По умолчанию вектором нормали является ось X ( mirror([1,0,0]) ), а плоскостью отражения соответственно является плоскость YZ. Плоскость отражения всегда проходит через центр координат
![]() |
Изменение размера — resize.
Аффинные преобразования — multmatrix.
Функция multmatrix — реализует в OpenSCAD аффинные преобразования. Одной матрицей можно задать вращение, перемещение, отражение, сжатие/растяжение и "искревление". Что понимать под "искривлением"? Представьте, что вместо декартовых координат с углом между осями в 90 гр. вам дали систему координат с углом, например 60 гр. соответственно все точки поверхности "наклонили". Например, квадрат стал параллелограммом с углами 60 и 120 гр.
В каких то ситуациях функция multmatrix может быть удобна, но она достаточно сложна для понимания — особенно для тех кто не знаком с линейной алгеброй, матрицами и т.д.. Приведу пример, большей частью для информации, чтобы иметь представление, о чём идёт речь.
Здесь матрицы A, B, C — это вращение, матрица K — это коэффициенты сжатия растяжения по осям X, Y, Z.
Если вы имели дело с линейной алгеброй (матрицами), то обратили внимание, что в приведённом примере OpenSCAD поддерживает операции умножения и сложения матриц.
Работа с матрицами как с объектами линейной алгеброй, не совсем простая задача — это не совсем "просто" таблицы. В общем случае применение таких "монстров" неоправданно, и вполне можно обойтись стандартными функциями перемещение, вращение, сжатие/растяжение.
Цвет и прозрачность — color.
Функция color для расцветки модели и её частей. На вход функции попадает или массив, или текстовая переменна обозначающая "название цвета". Для случая массива — задаётся [R, G, B], где R, G, B соответственно доля красного, зелёного и синего цветов в значениях от 0 до 1. Например [0,1,0] это чисто зелёный (стандартно параметры RGB задаются от 0 до 255, но разработчики OpenSCAD почему то решили сделать по-другому). Для случая задания цвета текстовой переменной — пишется название цвета в двойных кавычках "red", "black", "green" и т.п., или цвета с заковыристыми названиями "cadetblue". Таблица с названиями цветов приведена ниже.
Кроме цвета, может быть задан четвёртый параметр — прозрачность объекта от 0 (полностью прозрачный), до 1 (совсем не прозрачный). Единственно с прозрачностью вышел "косяк", а может и не "косяк", может так задумывалось — в общем, иногда прозрачность только местами прозрачная. Смотрите пример ниже.
Модификаторы *, !, #, %.
- * выводит модифицированный участок кода из программы — соответственно эта часть кода не отображается в окне просмотра; удобен в тех случаях, когда хочется посмотреть результат работы кода без какого-то его участка, чтобы не стирать код — используют модификатор * <. >;
- ! оставляет только выделенный модификатором элемент — остальное исключается из кода и модели; в окне просмотра отображается только модифицированный элемент;
- # в окне просмотра, результат работы помеченного участка кода — отображает как полупрозрачный красный объект; не меняет результат работы программы; пожалуй самый нужный модификатор при отладке модели; используется если не видно внутреннюю часть модели, или не видно вычитаемый объект и т.п.;
- % исключает элемент из хода выполнения программы и её результата, но при этом объект отображается полупрозрачно серым цветом в окне просмотра;
Плоские модели.
Проекция и сечение модели — projection.
Функция реализует проекцию и сечение. Проекция модели осуществляется НА плоскости XY, а сечение модели осуществляется ПО самой плоскости XY — других вариантов не предусмотрено. Если вам нужны "нестандартные" сечения или проекции — вращаете и перемещаете модель относительно плоскости XY до тех пор пока не получите желаемого.
Если входной параметр функции — cut установлен в true функция будет выдавать сечение объекта плоскостью XY ( Z=0 ).
Если cut установлен в false, или параметр незадан — получаем проекцию фигуры на XY.
Следует иметь ввиду, что на выходе projection получается 2D объект — не имеющий высоты, хотя визуально она присутствует. Соответственно, как и с любым другим 2D объектом — можно выполнять операции linear_extrude и rotate_extrude, которые будут рассмотрены ниже, но нельзя выполнять многие функции для 3D объектов.
В примере ниже приведены несколько сечений модели при разных её положениях по оси Z. Проекция фигуры совпадает с первым её сечением на картинке.
![]() |
![]() |
![]() |
![]() |
![]() |
Объекты 2D square(), circle(), polygon()
Плоские примитивы в OpenSCAD представлены прямоугольником square, кругом circle, многоугольником polygon. Прямоугольник и круг в пояснении они особо не нуждаются примеры кода с полным и сокращенным написанием приведены ниже. Остановлюсь на многоугольнике. Очень мощный инструмент при правильном использовании (смотри пример ниже). Входными параметрами функции polygon являются массив точки заданных координатами X,Y (Z=0) и массив содержащий путь обхода точек, если массив обхода по точкам не задан принимается та очерёдность, в которой указаны точки. Зачем нужен путь обхода по точкам? Надеюсь, у всех в детстве была игра соединить точки по номерам и получить интересный рисунок, если вы отклонялись от указанного порядка — рисунок не получался. Здесь ситуация аналогична. Забыл указать про ещё один параметр convexity. Данный параметр необходим только для правильного отображения фигуры, в окне пред просмотра на конечный результат он не влияет. Параметр определяет количество точек пересечения произвольного луча с многоугольником. Допусти для буквы "С" 4 точки пересечения (луч вошёл, вышел, вошёл, вышел), а для буквы "Е" уже 6 точек пересечения. На практике не помню, чтоб у меня появлялись проблемы в отображении объекта если я не указывал этот параметр. (Позже: если параметр не указан проблемы с отображением всё таки появляются. Пример бага приведу ниже при разборе функции linear_extrude. )
Функция Polygon поддерживает возможность многократного "вырезания" отверстий в многограннике за счёт указания путей обхода точек, внутренних отверстий. Давайте посмотрим, как это реализуется.
И так функция polygon:
![]() |
![]() |
![]() |
![]() |
Функция text.
Функция служит для создания плоской модели текста. Если же вам нужен объёмный текс — вам помогут text + linear_extrude(см. ниже), всё это займёт пару строк кода.
Теперь подробней. Функция поддерживает все основные языки (в том числе и русский). Шрифты берутся из набора Windows, если вам не хватает, для полного счастья, какого либо шрифта загружаете в Windows новый шрифт, соответственно он появляется в openscad. Шрифт удобно выбирать через Word — выбранный шрифт должен поддерживать русский алфавит (Word — в окне выбора шрифта, кроме английских букв, должна быть строчка с русскими буквами). В самом OpenSCAD так же есть шпаргалка шрифтов Справка/Список шрифтов — здесь удобно подсмотреть поддерживаемые стили шрифта: жирный (bold), курсив (italic) и т.п..
Функция поддерживает символы Юникода \u. (см. пример ниже). Коды можно посмотреть в том же Word. Выбираем вставить символ — в открывшемся окне можно найти символ и его код.
- text — строковое значение, тот текст который вы хотите получить на выходе;
- size — числовое значение, размер шрифта, по умолчанию 10;
- font — строковое значение, тип шрифта, стиль шрифта например font = "Times New Roman:style=Bold Italic" (Bold и Italic должны поддерживаться шрифтом см. Справка/Список шрифтов);
- halign — строковое значение, выравнивание по горизонтали, может принимать значения (left, center, right);
- valign — строковое значение, выравнивание по вертикале, может принимать значения (top, center, bottom) по умолчанию baseline;
- spacing — числовое значение, расстояние между буквами (символами), по умолчанию 1;
- direction — строковое значение, направление текста, возможные значения ltr (left to right по умолчанию), rtl, ttb, btt;
- language — строковое значение, язык "en" (английский по умолчанию), "ru" (русский);
- script — строковое значение, сценарий языка, по умолчанию latin, честно говоря, не разобрался в назначении этой переменной;
- $fn — числовое значение, степень сегментации кривой.
Небольшой совет: помните функцию resize — она здесь хорошо подходит, если вам нужно получить буквы строго заданной высоты.
![]() |
Смещение контура фигуры — offset.
Функция смещает контур плоской фигуры внутрь или наружу, относительно исходной фигуры, а так же закругляет или срезать углы. Получается нечто вроде фаски.
- r или delta — если параметр r / delta положительный — контур фигуры увеличивается на эту величину в каждом направлении, при отрицательном параметре — контур уменьшается;
- параметр r>0 все ВНЕШНИЕ углы закругляются с этим радиусом;
- параметр r 0 и chamfer=true все ВНЕШНИЕ углы срезаются на удалении delta от вершины под углом 90 гр. к серединному углу;
- параметр delta




























