Введение
Основной структурой данных, используемой в модуле Part, является тип данных Граничное представление (рус.)BRep (англ.) из OpenCASCADE. Почти всё содержимое и типы объектов модуля Деталь (Part) доступны в сценариях Python. Сюда входят геометрические примитивы, такие как Линии, Окружности и Дуги, а также весь спектр TopoShapes, таких как Вершины, Грани, Кривые, Плоскости, Твёрдые тела и Группы (Compounds). Для каждого из этих объектов существует несколько методов создания, а для некоторых из них, особенно для TopoShapes, также доступны расширенные операции, такие как булево объединение/ разность/пересечение. Чтобы узнать больше, изучите содержимое модуля Деталь (Part), как описано на странице Основы работы со скриптами FreeCAD.
Самый простой объект, который можно создать, - это Конструктивный элемент (Feature), который имеет простое свойство ДАННЫЕРазмещение (Placement) и основные свойства для определения его цвета и внешнего вида.
Другой простой объект, используемый в плоских геометрических 2D объектах, это Деталь Деталь2DОбъект (Part Part2DObject), являющийся основой Скетчер ОбъектЭскиза (Sketcher SketchObject) и большинства элементов модуля Набросок (Draft).
Смотрите также
Тестовый скрипт
Тест выполнения команды Создать примитивы с помощью скрипта.
import parttests.part_test_objects as pto
pto.create_test_file("example_file")
Этот скрипт находится в директории установки программы, и его можно изучить, чтобы увидеть, как строятся основные примитивы.
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
Примеры
Линия
Чтобы создать элемент линия, переключитесь на консоль Python и введите:
import FreeCAD as App
import Part
doc = App.newDocument()
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
doc.recompute()
Давайте рассмотрим приведенный выше пример на Python шаг за шагом:
import FreeCAD as App
import Part
doc = App.newDocument()
Это загружает модули FreeCAD и Part и создаёт новый документ.
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
Линия на самом деле является линейным сегментом, поэтому у неё есть начальная и конечная точки.
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
Это добавляет объект типа Part в документ и назначает представление формы линейного сегмента свойству Shape
добавленного объекта. Здесь важно понимать, что мы используем геометрический примитив (Part.LineSegment
), чтобы создать из него TopoShape (с помощью метода toShape()
). В документ можно добавлять только фигуры. В FreeCAD геометрические примитивы используются как строительные конструкции для фигур.
doc.recompute()
Обновляет документ. Это также подготавливает визуальное представление нового объекта Part.
Обратите внимание, что отрезок линии также можно создать, указав его начало и конец непосредственно в конструкторе, например Part.LineSegment(point1, point2)
, или мы можем создать линию по умолчанию и задать её свойства после этого, как мы сделали это здесь.
Линию также можно создать с помощью:
import FreeCAD as App
import Part
def my_create_line(pt1, pt2, obj_name):
obj = App.ActiveDocument.addObject("Part::Line", obj_name)
obj.X1 = pt1[0]
obj.Y1 = pt1[1]
obj.Z1 = pt1[2]
obj.X2 = pt2[0]
obj.Y2 = pt2[1]
obj.Z2 = pt2[2]
App.ActiveDocument.recompute()
return obj
line = my_create_line((0, 0, 0), (0, 10, 0), "LineName")
Окружность
Окружность может быть создана схожим образом:
import FreeCAD as App
import Part
doc = App.activeDocument()
circle = Part.Circle()
circle.Radius = 10.0
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Или с помощью:
import FreeCAD as App
import Part
def my_create_circle(rad, obj_name):
obj = App.ActiveDocument.addObject("Part::Circle", obj_name)
obj.Radius = rad
App.ActiveDocument.recompute()
return obj
circle = my_create_circle(5.0, "CircleName")
Как вариант, мы можем создать круг, определив его центр, ось и радиус:
import FreeCAD as App
import Part
doc = App.activeDocument()
center = App.Vector(1, 2, 3)
axis = App.Vector(1, 1, 1)
radius = 10
circle = Part.Circle(center, axis, radius)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Или определив три точки на её периметре:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(0, 0, 10)
circle = Part.Circle(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Заметьте ещё раз, мы использовали окружность (геометрический примитив) для построения фигуры. Конечно, мы по-прежнему можем получить доступ к нашей геометрии построения после этого, выполнив следующие действия:
shape = obj.Shape
edge = shape.Edges[0]
curve = edge.Curve
Здесь мы берём Shape
нашего объекта obj
, а затем его перечень Edges
. В данном случае будет только одно ребро, потому что мы сделали фигуру из единственного круга. Поэтому мы берём только первый элемент в списке Edges
, а затем берём его кривую. У каждого ребра есть Curve
, это геометрический примитив, на котором оно основывается.
Дуга
Дуга может быть создана следующим образом:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
arc = Part.Arc(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Это рисует полуокружность. Центр находится в точке (0, 0, 0). Радиус равен 10. P1 - начальная точка на оси +X. P2 - средняя точка на оси +Y, а P3 - конечная точка на оси -X.
Мы также можем создать дугу из окружности:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
circle = Part.Circle(p1, p2, p3)
arc = Part.ArcOfCircle(circle, 0.0, 0.7854)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Здесь требуется окружность, начальный и конечный углы в радианах.
Эта страница получена от https://wiki.freecad.org/Part_scripting