Топология и селекторы
Геометрические объекты состоят из более простых компонентов: тел, граней, рёбер и вершин. Подробнее — в описании BREP.
Получение компонентов
Методы возвращают коллекции ShapeList с соответствующим типом элементов:
shape.vertices() # -> ShapeList[Vertex]
shape.solids() # -> ShapeList[Solid]
shape.faces() # -> ShapeList[Face]
shape.edges() # -> ShapeList[Edge]
shape.wires() # -> ShapeList[Wire]
shape.shells() # -> ShapeList[Shell]
shape.compounds() # -> ShapeList[Compound]
shape.compsolids() # -> ShapeList[CompSolid]
Координаты вершины доступны через vertex.point(). Индексирование, срезы, фильтры и сортировка сохраняют граф вычислений; len(), итерация, geometry_types() и group_by() вычисляют коллекцию.
Выбор элементов
import zencad as z
body = z.box(20, 20, 30, center="xy")
vertical = body.edges().filter_by(z.Axis.Z)
rounded = z.fillet(body, 2, vertical)
side_faces = body.faces().filter_by_position(z.Axis.Z, 15)
tapered = z.draft(body, side_faces, z.deg(5))
top = body.faces().planar().sort_by(z.Axis.Z)[-1]
assert len(side_faces) == 4
assert abs(float(top.center().z) - 30) < 1e-7
rounded.assert_valid()
tapered.assert_valid()
| Запрос | Значение |
|---|---|
filter_by(GeomType.PLANE) / planar() |
Плоские поверхности |
normal_to(Axis.Z) |
Плоские грани с нормалью параллельно Z, обоих знаков |
filter_by_position(Axis.Z, z) |
Центр на заданной высоте |
filter_by(Plane.xy(z)) |
Центр на указанной плоскости |
sort_by(Axis.Z) |
Порядок по проекции центра |
sort_by_distance(point) |
Порядок по минимальному расстоянию до формы |
longer_than(length) |
Рёбра/проволоки с большей длиной |
largest() |
Наибольшая длина, площадь или объём по типу формы |
only() |
Ровно один элемент, иначе ошибка при вычислении |
Индекс не закреплён за конкретной гранью: после изменения модели порядок может измениться. Предпочитайте выбор по геометрическим свойствам.
fillet и chamfer принимают рёбра, draft — грани. Подробнее: контракт селекторов.
Ближайший элемент
Функции возвращают компонент формы shp, ближайший к точке pnt:
near_edge(shp, pnt) # -> Edge
near_face(shp, pnt) # -> Face
near_vertex(shp, pnt) # -> Vertex; .point() -> Point3
Проверка состава и восстановление типа
Проверка отсутствия тел (грани и рёбра при этом могут присутствовать):
len(shp.solids()) == 0
restore_shapetype извлекает единственный подходящий компонент формы. Если нужен ровно один solid, используйте shp.solids().only().
original_shp = restore_shapetype(shp)