Меню

Openscad как изменить цвет детали



Digitrode

цифровая электроника вычислительная техника встраиваемые системы

3D печать: создание моделей с помощью OpenSCAD

У вас есть 3D принтер, и вам надоело распечатывать модели из интернета и хотите создать что-то свое? Замечательно! Сегодня существует ряд программ, позволяющих рисовать свои 3D модели. Одной из таких программ является OpenSCAD. Ее особенность заключается в том, что моделирование здесь скорее представляется программированием, нежели рисованием. Большое количество полезных моделей, в том числе детали для 3D принтеров RepRap, были спроектированы с помощью OpenSCAD.

Этот материал не является полным руководством OpenSCAD, но прочитав его вы сможете создавать несложные детали самостоятельно.

В основе OpenSCAD лежит конструктивная блочная геометрия. Это метод моделирования, который для создания объектов наряду с основными логическими операциями использует базовые примитивы, например, сферу, куб, цилиндр. Как это происходит, лучше показать на примере. На картинке изображены два предмета, которые описываются нижеприведенным кодом. Он достаточно прост в понимании.

Все просто! Мы создаем сферу с радиусом 10 и цилиндр с радиусом 5 и высотой 20. Затем перемещаем цилиндр на 15 единиц по осям x и y и на 10 единиц вниз по оси z. Далее мы можем объединить эти два геометрических примитива, воспользовавшись командой union().

Помимо команды union в OpenSCAD есть еще как минимум две полезные команды. Первая из них – difference, позволяющая вычесть один объект из другого, а вторая – intersection, то есть пересечение. Вот пример команды difference:

Пример команды intersection:

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

Попробуем создать какую-нибудь стандартную инженерную деталь. В данном случае выбор пал на деталь из учебника по инженерной графики 1929 года издания. Книга хоть и стара, но христоматийна, именно по ней учились инженеры, проектировавшие космический корабль Аполлон. Посредством объединения нескольких цилиндров и кубов достаточно легко создать простую фигуру, которая станет основой для нашей конечной детали. Исходный код и рендер-результат представлены ниже.

Здесь одна единица измерения равна одной восьмой дюйма, поскольку в именно такой системе приводятся размеры детали в учебнике. Перед печатью размеры в редакторе можно будет масштабировать как угодно. Для того, чтобы завершить создание основы нашей детали, нужно на фланце добавить несколько цилиндров. Потрясающая возможность, которую предоставляет OpenSCAD заключается в том, что можно создавать мелкие детали, а затем объединить их с помощью команды union. Ниже приведен код для цилиндров:

Поскольку программа OpenSCAD код-ориентированная, то мы можем вызвать этот модуль в нужном нам месте программы. Вот как выглядит деталь теперь:

В конце нужно только добавить вырез размером 3/8″ в основании детали. В итоге полный код получится такой:

Вот так с помощью программы OpenSCAD, некоторых навыков программирования и пространственного изображения можно создавать свои собственные детали для печати на 3D принтере.

Источник

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 аффинные преобразования. Одной матрицей можно задать вращение, перемещение, отражение, сжатие/растяжение и &#34искревление&#34. Что понимать под &#34искривлением&#34? Представьте, что вместо декартовых координат с углом между осями в 90 гр. вам дали систему координат с углом, например 60 гр. соответственно все точки поверхности &#34наклонили&#34. Например, квадрат стал параллелограммом с углами 60 и 120 гр.

В каких то ситуациях функция multmatrix может быть удобна, но она достаточно сложна для понимания — особенно для тех кто не знаком с линейной алгеброй, матрицами и т.д.. Приведу пример, большей частью для информации, чтобы иметь представление, о чём идёт речь.

Здесь матрицы A, B, C — это вращение, матрица K — это коэффициенты сжатия растяжения по осям X, Y, Z.

Если вы имели дело с линейной алгеброй (матрицами), то обратили внимание, что в приведённом примере OpenSCAD поддерживает операции умножения и сложения матриц.

Работа с матрицами как с объектами линейной алгеброй, не совсем простая задача — это не совсем &#34просто&#34 таблицы. В общем случае применение таких &#34монстров&#34 неоправданно, и вполне можно обойтись стандартными функциями перемещение, вращение, сжатие/растяжение.

Цвет и прозрачность — color.

Функция color для расцветки модели и её частей. На вход функции попадает или массив, или текстовая переменна обозначающая &#34название цвета&#34. Для случая массива — задаётся [R, G, B], где R, G, B соответственно доля красного, зелёного и синего цветов в значениях от 0 до 1. Например [0,1,0] это чисто зелёный (стандартно параметры RGB задаются от 0 до 255, но разработчики OpenSCAD почему то решили сделать по-другому). Для случая задания цвета текстовой переменной — пишется название цвета в двойных кавычках &#34red&#34, &#34black&#34, &#34green&#34 и т.п., или цвета с заковыристыми названиями &#34cadetblue&#34. Таблица с названиями цветов приведена ниже.

Кроме цвета, может быть задан четвёртый параметр — прозрачность объекта от 0 (полностью прозрачный), до 1 (совсем не прозрачный). Единственно с прозрачностью вышел &#34косяк&#34, а может и не &#34косяк&#34, может так задумывалось — в общем, иногда прозрачность только местами прозрачная. Смотрите пример ниже.

Lavender
Thistle
Plum
Violet
Orchid
Fuchsia
Magenta
MediumOrchid
MediumPurple
BlueViolet
DarkViolet
DarkOrchid
DarkMagenta
Purple
Indigo
DarkSlateBlue
SlateBlue
MediumSlateBlue
Pink
LightPink
HotPink
DeepPink
MediumVioletRed
PaleVioletRed
Aqua
Cyan
LightCyan
PaleTurquoise
Aquamarine
Turquoise
MediumTurquoise
DarkTurquoise
CadetBlue
SteelBlue
LightSteelBlue
PowderBlue
LightBlue
SkyBlue
LightSkyBlue
DeepSkyBlue
DodgerBlue
CornflowerBlue
RoyalBlue
Blue
MediumBlue
DarkBlue
Navy
MidnightBlue
GreenYellow
Chartreuse
LawnGreen
Lime
LimeGreen
PaleGreen
LightGreen
MediumSpringGreen
SpringGreen
MediumSeaGreen
SeaGreen
ForestGreen
Green
DarkGreen
YellowGreen
OliveDrab
Olive
DarkOliveGreen
MediumAquamarine
DarkSeaGreen
LightSeaGreen
DarkCyan
Teal
Cornsilk
BlanchedAlmond
Bisque
NavajoWhite
Wheat
BurlyWood
Tan
RosyBrown
SandyBrown
Peru
Chocolate
SaddleBrown
Sienna
Brown
Maroon
IndianRed
LightCoral
Salmon
DarkSalmon
LightSalmon
Coral
Tomato
LightYellow
LemonChiffon
LightGoldenrodYellow
AntiqueWhite
Linen
LavenderBlush
MistyRose
PapayaWhip
Moccasin
PeachPuff
PaleGoldenrod
Khaki
DarkKhaki
DarkGoldenrod
Goldenrod
Gold
Yellow
DarkOrange
Orange
OrangeRed
Red
Crimson
FireBrick
DarkRed
White
Snow
Honeydew
MintCream
Azure
AliceBlue
GhostWhite
WhiteSmoke
Seashell
Beige
OldLace
FloralWhite
Ivory
Gainsboro
LightGrey
Silver
DarkGray
Gray
DimGray
LightSlateGray
SlateGray
DarkSlateGray
Black

Модификаторы *, !, #, %.

В OpenSCAD есть 4 модификатора:

  • * выводит модифицированный участок кода из программы — соответственно эта часть кода не отображается в окне просмотра; удобен в тех случаях, когда хочется посмотреть результат работы кода без какого-то его участка, чтобы не стирать код — используют модификатор * <. >;
  • ! оставляет только выделенный модификатором элемент — остальное исключается из кода и модели; в окне просмотра отображается только модифицированный элемент;
  • # в окне просмотра, результат работы помеченного участка кода — отображает как полупрозрачный красный объект; не меняет результат работы программы; пожалуй самый нужный модификатор при отладке модели; используется если не видно внутреннюю часть модели, или не видно вычитаемый объект и т.п.;
  • % исключает элемент из хода выполнения программы и её результата, но при этом объект отображается полупрозрачно серым цветом в окне просмотра;

Пример кода.

Плоские модели.

Проекция и сечение модели — projection.

Функция реализует проекцию и сечение. Проекция модели осуществляется НА плоскости XY, а сечение модели осуществляется ПО самой плоскости XY — других вариантов не предусмотрено. Если вам нужны &#34нестандартные&#34 сечения или проекции — вращаете и перемещаете модель относительно плоскости 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. Данный параметр необходим только для правильного отображения фигуры, в окне пред просмотра на конечный результат он не влияет. Параметр определяет количество точек пересечения произвольного луча с многоугольником. Допусти для буквы &#34С&#34 4 точки пересечения (луч вошёл, вышел, вошёл, вышел), а для буквы &#34Е&#34 уже 6 точек пересечения. На практике не помню, чтоб у меня появлялись проблемы в отображении объекта если я не указывал этот параметр. (Позже: если параметр не указан проблемы с отображением всё таки появляются. Пример бага приведу ниже при разборе функции linear_extrude. )

Функция Polygon поддерживает возможность многократного &#34вырезания&#34 отверстий в многограннике за счёт указания путей обхода точек, внутренних отверстий. Давайте посмотрим, как это реализуется.

И так функция polygon:

Функция text.

Функция служит для создания плоской модели текста. Если же вам нужен объёмный текс — вам помогут text + linear_extrude(см. ниже), всё это займёт пару строк кода.

Теперь подробней. Функция поддерживает все основные языки (в том числе и русский). Шрифты берутся из набора Windows, если вам не хватает, для полного счастья, какого либо шрифта загружаете в Windows новый шрифт, соответственно он появляется в openscad. Шрифт удобно выбирать через Word — выбранный шрифт должен поддерживать русский алфавит (Word — в окне выбора шрифта, кроме английских букв, должна быть строчка с русскими буквами). В самом OpenSCAD так же есть шпаргалка шрифтов Справка/Список шрифтов — здесь удобно подсмотреть поддерживаемые стили шрифта: жирный (bold), курсив (italic) и т.п..

Функция поддерживает символы Юникода \u. (см. пример ниже). Коды можно посмотреть в том же Word. Выбираем вставить символ — в открывшемся окне можно найти символ и его код.

  • text — строковое значение, тот текст который вы хотите получить на выходе;
  • size — числовое значение, размер шрифта, по умолчанию 10;
  • font — строковое значение, тип шрифта, стиль шрифта например font = &#34Times New Roman:style=Bold Italic&#34 (Bold и Italic должны поддерживаться шрифтом см. Справка/Список шрифтов);
  • halign — строковое значение, выравнивание по горизонтали, может принимать значения (left, center, right);
  • valign — строковое значение, выравнивание по вертикале, может принимать значения (top, center, bottom) по умолчанию baseline;
  • spacing — числовое значение, расстояние между буквами (символами), по умолчанию 1;
  • direction — строковое значение, направление текста, возможные значения ltr (left to right по умолчанию), rtl, ttb, btt;
  • language — строковое значение, язык &#34en&#34 (английский по умолчанию), &#34ru&#34 (русский);
  • script — строковое значение, сценарий языка, по умолчанию latin, честно говоря, не разобрался в назначении этой переменной;
  • $fn — числовое значение, степень сегментации кривой.

Небольшой совет: помните функцию resize — она здесь хорошо подходит, если вам нужно получить буквы строго заданной высоты.

Смещение контура фигуры — offset.

Функция смещает контур плоской фигуры внутрь или наружу, относительно исходной фигуры, а так же закругляет или срезать углы. Получается нечто вроде фаски.

Исходные параметры:

  • r или delta — если параметр r / delta положительный — контур фигуры увеличивается на эту величину в каждом направлении, при отрицательном параметре — контур уменьшается;
    • параметр r>0 все ВНЕШНИЕ углы закругляются с этим радиусом;
    • параметр r 0 и chamfer=true все ВНЕШНИЕ углы срезаются на удалении delta от вершины под углом 90 гр. к серединному углу;
    • параметр delta

    Источник