Руководство: Простое введение
- Введение
- Открываем для себя FreeCAD
- Работа с FreeCAD
- Первый взгляд на все верстаки
- Традиционное моделирование методом CSG (КБГ)
- Традиционное двумерное черчение
- Моделирование для проектирования продукта
- Подготовка для 3D печати
- Создание двумерных чертежей
- Моделирование BIM
- Использование электронных таблиц
- Создание анализа методом конечных элементов
- Создание визуализаций (рендеринга)
- Написание скриптов на Python
- Сообщество
Python (рус.)(англ.) - широко используемый язык программирования с открытым исходным кодом, признанный за свою простоту, универсальность и наглядность. Он часто встраивается в приложения в качестве языка сценариев, и FreeCAD не является исключением. Такая интеграция позволяет пользователям автоматизировать задачи, настраивать рабочие процессы и расширять функциональность программы далеко за пределы её графического интерфейса.
Python обладает рядом преимуществ, которые делают его особенно подходящим для пользователей FreeCAD. Он дружелюбен к новичкам, имеет ясный и интуитивно понятный синтаксис, что делает его простым в изучении даже для людей, не имеющих опыта программирования. Такая доступность особенно важна в сообществе FreeCAD, где многие пользователи являются представителями различных профессий, таких как инженеры, архитекторы и дизайнеры, и не имеют обширных знаний в области программирования.
Кроме того, широкое распространение Python в других приложениях, таких как Blender для 3D-моделирования, Inkscape для векторной графики и GRASS GIS для геопространственного анализа, делает его необходимым навыком для тех, кто хочет расширить свои возможности по написанию скриптов (сценариев). Освоение Python в FreeCAD не только расширит ваши возможности по созданию пользовательских инструментов и макросов, но и позволит получить навыки, которые можно применять в различных программных платформах.
В FreeCAD скрипты Python позволяют тебе:
- Автоматизировать повторяющиеся задачи, чтобы сэкономить время и уменьшить количество ошибок.
- Создавать пользовательские параметрические объекты, которые динамически адаптируются к изменениям.
- Разрабатывать персонализированные макросы и инструменты для конкретных рабочих процессов.
- Взаимодействовать с интерфейсом прикладного программирования (API) FreeCAD для программного доступа и манипулирования геометрией, сценами и элементами пользовательского интерфейса.
Используя Python, пользователи FreeCAD могут раскрыть весь потенциал программы, превратив её в мощный и гибкий инструмент, отвечающий их уникальным потребностям.
FreeCAD включает в себя расширенную консоль Python, доступную через Вид → Панели → Python Консоль. Этот инструмент позволяет пользователям выполнять операции, выходящие за рамки графического интерфейса, такие как доступ к расширенным функциям, устранение ошибок геометрии и автоматизация задач. Она также регистрирует команды Python для действий в графическом интерфейсе, если включена опция Показывать команды сценария в консоли Python (Правка → Параметры → Python → Macro). Держа консоль открытой, вы можете наблюдать, как код Python разворачивается в процессе работы, предлагая интуитивно понятный способ изучения языка в процессе знакомства с возможностями FreeCAD. Наконец, во FreeCAD есть система макросов, которая позволяет записывать действия для последующего воспроизведения. Эта система также использует консоль Python, просто записывая всё, что в ней делается.
В этой главе мы познакомимся с языком Python в общих чертах. Если вы хотите узнать больше, то в вики-документации FreeCAD есть обширный раздел, посвящённый Python программированию.
Написание кода на Python
В FreeCAD вы можете писать код на Python двумя основными способами: через консоль Python (Вид → Панели → Консоль Python) или с помощью редактора макросов (Макро → Макросы → Создать). Консоль Python позволяет вводить команды по одной за раз, которые выполняются сразу после нажатия кнопки Return, что делает её идеальной для быстрого тестирования или интерактивного исследования. Редактор макросов, с другой стороны, используется для написания и сохранения более сложных скриптов, состоящих из нескольких строк кода. Эти макросы могут быть выполнены как единое целое позже из окна Макросов, предоставляя мощный способ автоматизации повторяющихся задач и расширения функциональности FreeCAD. В этой главе вы сможете использовать оба метода, но настоятельно рекомендуется использовать Консоль Python, так как она немедленно сообщит вам о любых ошибках, допущенных при вводе текста.
Если вы впервые используете Python, прочтите это краткое введение в программирование на Python, прежде чем двигаться дальше, оно разъяснит основные понятия Python.
Манипуляция объектами FreeCAD
Начнём с создания нового пустого документа:
doc = FreeCAD.newDocument()
В консоли Python FreeCAD, как только вы набираете FreeCAD. (слово «FreeCAD», за которым следует точка), появляется окно автозаполнения. Эта функция не только ускоряет рабочий процесс, предлагая доступные команды, но и помогает открыть для себя новые функции и возможности FreeCAD. Каждый пункт в списке содержит подсказку, объясняющую его назначение, что облегчает понимание и изучение доступных функций. Эта функция автозаполнения особенно полезна для новичков, изучающих скриптинг на Python, и для опытных пользователей, эффективно ориентирующихся в обширном API FreeCAD. Уделите время изучению опций в окне автозаполнения - возможно, вы обнаружите команды, которые упростят ваш рабочий процесс или откроют новые возможности.
Набрав FreeCAD.newDocument(), ты создашь новый, пустой документ во FreeCAD, как и при нажатии кнопки Новый документ на панели инструментов. Когда ты выполняешь команду doc = FreeCAD.newDocument(), новый объект документа присваивается переменной doc, что позволяет манипулировать им программно. Используя doc, ты можешь добавлять объекты, изменять свойства или же сохранять документ.
В Python точка (.) используется для обозначения того, что один элемент содержится внутри другого. Например, newDocument - это функция внутри модуля FreeCAD, поэтому мы пишем FreeCAD.newDocument. Появившееся окно автозаполнения показывает всё, что доступно в модуле FreeCAD. Если бы вы набрали точку после newDocument (без добавления круглых скобок), то отобразилось бы всё, что относится к функции newDocument. Это иллюстрирует, как Python организует объекты и доступ к ним и их компонентам. Важно отметить, что круглые скобки обязательны при вызове функции Python, так как они указывают на выполнение функции.
Теперь вернёмся назад в документ. Посмотрим, что мы можем с ним сделать. Введи следующее и изучи доступные варианты:
doc.
В FreeCAD соглашения об именовании команд Python помогут вам понять их назначение:
- Имена, начинающиеся с заглавной буквы, обычно являются атрибутами, которые хранят значения или данные, например, свойства объекта.
- Имена, начинающиеся со строчной буквы, обычно представляют собой функции (также называемые методами), которые выполняют действия или операции, такие как создание или изменение объектов.
- Имена, начинающиеся с символа подчёркивания (_), обычно предназначены для внутреннего использования внутри модуля и обычно могут быть проигнорированы.
Это различие поможет тебе ориентироваться в API FreeCAD и выбрать подходящую команду для твоих нужд. Например, ты можешь использовать метод для добавления нового объекта в документ. Метод выполняет действия по созданию и добавлению объекта, а атрибуты хранят свойства объекта. Понимание этой структуры облегчает изучение доступных функций, особенно при использовании функции автозаполнения или чтении всплывающих подсказок. Давай добавим куб.
box = doc.addObject("Part::Box", "myBox")
Команда box = doc.addObject("Part::Box", "myBox") добавляет в документ новый объект 3D-куб. Вот простое объяснение:
- „“'doc.addObject'„“: Это указывает FreeCAD на добавление нового объекта в документ.
- „“'Part::Box'„“: Это указывает тип создаваемого объекта, в данном случае 3D-куб.
- „“'myBox'„“: присваивает имя новому объекту, что облегчает его идентификацию и последующее использование.
В результате этой команды в активном документе появляется бокс, а переменная box сохраняет ссылку на него, чтобы вы могли изменять его или взаимодействовать с ним позже. Наш куб добавлен в дерево проекта но в 3D-виде пока ничего не происходит, потому что при работе из Python документ никогда не пересчитывается автоматически. Мы должны делать это вручную, когда это необходимо:
doc.recompute()
Теперь наша куб появился в 3D-виде. Многие кнопки панели инструментов, добавляющие объекты в FreeCAD, на самом деле делают две вещи: добавляют объект и пересчитывают. Попробуйте теперь добавить сферу с помощью соответствующей кнопки в верстаке Part - Деталь, и вы увидите, как две строки кода Python выполняются одна за другой.
You can get a list of all possible object types like Part::Box:
doc.supportedTypes()
Теперь давай изучим содержимое нашего куба:
box.
Ты сразу же увидишь несколько очень интересных вещей, таких как:
box.Height
Это выведет текущую высоту нашего куба. Теперь давай попробуем изменить её:
box.Height = 5
Если ты выделишь свой куб мышью, то увидишь, что на панели свойств, на вкладке Данные, появится наше свойство Height - Высота с новым значением. Все свойства объекта FreeCAD, которые появляются на вкладках Данные и Вид, доступны непосредственно через Python, по их именам, как мы это сделали со свойством Height - Высота. Доступ к свойствам данных осуществляется непосредственно из самого объекта, например:
box.Length
В FreeCAD визуальными свойствами управляет объект ViewObject Каждый объект FreeCAD имеет связанный с ним объект ViewObject, который хранит информацию о том, как объект отображается в графическом интерфейсе, например, цвет, прозрачность или видимость. Однако объект ViewObject доступен только тогда, когда FreeCAD запущен с графическим интерфейсом. Если FreeCAD запущен в неграфическом режиме - например, из терминала с опцией командной строки -c или при использовании в качестве библиотеки Python во внешнем скрипте - объект ViewObject будет недоступен. Это происходит потому, что в этих режимах нет визуального представления объекта, так как графический интерфейс не загружен.
Попробуй выполнить следующий пример, чтобы получить доступ к цвету линии нашего куба:
box.ViewObject.LineColor
Вектора и Размещение
Векторы - это фундаментальное понятие в любом 3D-приложении. Вектор - это список из трёх чисел (x, y и z), которые описывают точку, положение или направление в 3D-пространстве. Векторы имеют решающее значение для определения геометрии, трансформаций и взаимодействий в 3D-среде. Они служат строительными блоками для таких операций, как перемещение, вращение и масштабирование.
В FreeCAD векторы широко используются для создания объектов и манипулирования ими. Они позволяют выполнять широкий спектр математических операций, таких как сложение, вычитание, перекрестные произведения, точечные произведения и проекции. Эти операции позволяют вычислять расстояния, углы и направления или определять отношения между объектами в пространстве.
Понимание векторов и того, как они работают, необходимо для эффективного создания сценариев и настройки FreeCAD. Например, векторы используются для позиционирования объектов, определения их ориентации или даже расчёта траекторий для сложных операций, таких как развёртка или выдавливание с переходом.
В FreeCAD векторы представлены с помощью класса Vector, который предоставляет различные методы и свойства для выполнения операций и доступа к своим компонентам. Освоение этих возможностей значительно расширит ваши возможности по программному взаимодействию с 3D-средой FreeCAD. В FreeCAD векторы работают следующим образом:
myvec = FreeCAD.Vector(2, 0, 0)
print(myvec)
print(myvec.x)
print(myvec.y)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)
Вот краткое описание вышеуказанных команд:
- myvec = FreeCAD.Vector(2,0,0): Создаёт вектор myvec с X = 2, Y = 0, Z = 0.
- print(myvec): Выводит вектор myvec с его компонентами (X, Y, Z).
- print(myvec.x): Выводит X-компоненту вектора myvec.
- print(myvec.y): Выводит Y-компоненту myvec.
- othervec = FreeCAD.Vector(0,3,0): Создаёт второй вектор othervec с X = 0, Y = 3, Z = 0.
- sumvec = myvec.add(othervec): Складывает myvec и othervec для создания нового вектора sumvec, содержащего сумму их компонентов.
Другой общей характеристикой объектов FreeCAD является их Placement - Размещение'. Как мы видели в предыдущих главах, каждый объект имеет свойство Placement - Размещение, которое содержит позицию (Base - База) и ориентацию (Rotation - Поворот) объекта. Этими свойствами легко манипулировать из Python, например, чтобы переместить наш объект:
print(box.Placement)
print(box.Placement.Base)
box.Placement.Base = sumvec
otherpla = FreeCAD.Placement()
otherpla.Base = FreeCAD.Vector(5, 5, 0)
box.Placement = otherpla
Вот краткое описание вышеперечисленных команд:
- print(box.Placement): Выводит размещение куба, которое включает его положение, поворот и ориентацию в 3D-пространстве.
- print(box.Placement.Base): Выводит положение (Base - Базы) куба, которое представляет собой вектор, отображающий его местоположение в 3D-пространстве.
- box.Placement.Base = sumvec: Устанавливает базовую позицию (местоположение) куба на вектор sumvec, эффективно перемещая бокс в эту новую позицию.
- otherpla = FreeCAD.Placement(): Создаёт новый объект размещения с именем otherpla.
- otherpla.Base = FreeCAD.Vector(5,5,0): Устанавливает базовую позицию otherpla в вектор с координатами (5, 5, 0).
- box.Placement = otherpla: Применяет otherpla к кубу, обновляя его размещение в новой позиции и ориентации, определенной otherpla.
Читать далее
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub


