Объёмные тела
В этом разделе приводятся базовые примитивы CSG геометрии.
Параллелепипед
Объёмное тело - параллелипипед. Задаётся с указанием трёх размеров x, y, z. При указании одного размера a генерируется куб (a,a,a). Установка булевой опции center совмещает геометрический центр тела с началом координат.
Сигнатуры:
box(x, y, z, center=True/False)
box(size=(x,y,z), center=True/False)
box(size=a, center=True/False)
Примеры:
box(10, 20, 30, center=False)
box(size=(10,20,30), center=False) # alternate
box(10, center=True)
Сфера
Объёмное тело - сфера. Задаётся с указанием радиуса. Возможно построение сектора сферы с использованием необязательных параметров yaw, pitch.
Сигнатура:
sphere(r=radius, yaw=yaw, pitch=(minPitch, maxPitch))
Примеры:
sphere(10)
sphere(10, yaw=math.pi*2/3)
sphere(10, pitch=(deg(20), deg(60)))
sphere(10, yaw=deg(120), pitch=(deg(20), deg(60)))
Цилиндр
Объёмное тело - цилиндр. Задаётся с указанием радиуса и высоты. Возможно построение сектора цилиндра с использованием необязательного параметра yaw. Установка опции center совмещает геометрический центр тела с началом координат.
Сигнатура:
cylinder(r=radius, h=height, yaw=yaw, center=True/False)
cylinder(r=10, h=20)
cylinder(r=10, h=20, yaw=deg(45))
cylinder(r=10, h=20, center=True)
cylinder(r=10, h=20, yaw=deg(45), center=True)
Конус
Объёмное тело - конус. Задаётся с указанием нижнего радиуса r1, верхнего радиуса r2 и высоты. Возможно построение сектора конуса с использованием необязательного параметра yaw. Установка опции center совмещает геометрический центр тела с началом координат. Радиусы r1 и r2 могут равняться нулю, что соответствует остроконечному конусу.
Сигнатура:
cone(r1=botRadius, r2=topRadius, h=height, yaw=yaw, center=True/False)
Примеры:
cone(r1=20, r2=10, h=20)
cone(r1=20, r2=10, h=20, yaw=deg(45))
cone(r1=0, r2=20, h=20)
cone(r1=20, r2=0, h=20, center=True)
Тор
Объёмное тело - тор. Задаётся с указанием центрального радиуса r1 и локального радиуса r2. Возможно построение секторов тора с использованием необязательных параметров yaw, pitch.
В случае, если интервал угла pitch не содержит внутренней области, в центре образуется соответствующая цилиндрическая вставка. Если интервал угла pitch не содержит внешней области, соответствующая часть тора ограничивается плоскостью.
Сигнатура:
torus(r1=centralRadius, r2=localRadius, yaw=yaw, pitch=(minPitch, maxPitch))
Примеры:
torus(r1=20, r2=5)
torus(r1=20, r2=5, yaw=deg(120))
torus(r1=20, r2=5, pitch=(deg(-20), deg(120)))
torus(r1=20, r2=5, pitch=(deg(-20), deg(120)), yaw=deg(120))
torus(r1=20, r2=5, pitch=(deg(-140), deg(140)), yaw=deg(120))
torus(r1=20, r2=5, pitch=(deg(-20), deg(190)), yaw=deg(120))
Полупространство
Специальное объёмное тело, представляющее собой нижнее полупространство. Так же как и остальные объёмные тела, поддерживает трансформации и с использованием их может представлять любое возможное полупространство. В отличии от обычных тел не может быть отображено непосредственно. Используется вместе с операциями разности и пересечения.
sphere(r=10) - halfspace().rotateX(deg(150))
sphere(r=10) ^ halfspace().rotateX(deg(150))
Платоновы тела
Построение платоновых тел. Библиотека основана на https://github.com/qalle2/plato.scad
Правильный многогранник | Число вершин | Число рёбер | Число граней | Число сторон у грани | Число рёбер примыкающих к вершине | Тип пространственной симметрии |
---|---|---|---|---|---|---|
Тетраэдр | 4 | 6 | 4 | 3 | 3 | Td |
Гексаэдр | 8 | 12 | 6 | 4 | 3 | Oh |
Октаэдр | 6 | 12 | 8 | 3 | 4 | Oh |
Додекаэдр | 20 | 30 | 12 | 5 | 3 | Ih |
Икосаэдр | 12 | 30 | 20 | 3 | 5 | Ih |
Библиотека позволяет указывать размеры тел через радиус описанной окружности r или через длину ребра a.
Сигнатуры:
zencad.tetrahedron(r=1, a=None, shell=False)
zencad.hexahedron(r=1, a=None, shell=False)
zencad.octahedron(r=1, a=None, shell=False)
zencad.dodecahedron(r=1, a=None, shell=False)
zencad.icosahedron(r=1, a=None, shell=False)
# Альтернативный синтаксис
zencad.platonic(nfaces, r=1, a=None, shell=False)
Пример:
# Через радиус:
tetrahedron(10)
hexahedron(10)
octahedron(r=10)
dodecahedron(r=10)
icosahedron(10)
# Через длину ребра:
icosahedron(a=10)
# Альтернативный синтакис:
zencad.platonic(4, 10)
zencad.platonic(6, 10)
zencad.platonic(8, 10)
zencad.platonic(12, 10)
zencad.platonic(20, 10)