Булевы операции.
CSG геометрия операется на булевы операции. В zencad представлены операции объединения, вычитания и пересечения 3д и 2д объектов. В zencad есть два группы этих операций:
- над массивами тел с помощью функций union, difference, intersect
- над парами тел с помощью операторов + - ^
! Примечание: ! Не стоит пытаться с помощью булевых операций получить составную линию из простых линий или сшить оболочку из граней. Для этих манипуляций, существуют специальные процедуры сшивки, освещенные в соответствующих разделах.
Объединение тел.
Сигнатура:
# Функция:
result = union(array)
# Оператор:
result = shp0 + shp1
Пример:
#with operators:
sphere(r=10) + cylinder(r=5, h=10, center=True) + cylinder(r=5, h=10, center=True).rotateX(deg(90))
#with function:
union([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
Вычитание тел.
Сигнатура:
# Функция:
result = difference(array)
# Оператор:
result = shp0 - shp1
Пример:
#with operators:
sphere(r=10) - cylinder(r=5, h=10, center=True) - cylinder(r=5, h=10, center=True).rotateX(deg(90))
#with function:
difference([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
Пересечение тел.
Сигнатура:
# Функция:
result = intersect(array)
# Оператор:
result = shp0 ^ shp1
Пример:
#with operators:
sphere(r=10) ^ cylinder(r=5, h=10, center=True) ^ cylinder(r=5, h=10, center=True).rotateX(deg(90))
#with function:
intersect([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
Пересечение оболочек.
Побратим операции intersect, производящий вычисление пересечения оболочек тел.
Сигнатура:
# Функция:
result = section(a, b)
Пример:
m0 = section(box(10, center=True) - sphere(4))
m1 = section(box(10, center=True), sphere(7))
Булевы операции над двумерными телами.
Точно также как и к трёхмерным объектам, перечисленные выше операции могут применяться к двумерным объектам до тех пор, пока они находятся в одной плоскости.
Пример:
m0 = sphere(10) - square(10)
m1 = sphere(10) + square(10)
m2 = sphere(10) ^ square(10)
m2 = section(sphere(10), square(10))