Manual/ru: Difference between revisions
No edit summary |
No edit summary |
||
Line 36: | Line 36: | ||
== Структура документа FreeCAD == |
== Структура документа FreeCAD == |
||
{{:Document structure/ru| |
{{:Document structure/ru|Структура документа FreeCAD}} |
||
== Настройка пользовательских предпочтений == |
== Настройка пользовательских предпочтений == |
||
Line 58: | Line 58: | ||
{{:Mesh Module/ru}} |
{{:Mesh Module/ru}} |
||
== Инструмент |
== Инструмент Деталь (Part) == |
||
{{:Part Module/ru}} |
{{:Part Module/ru}} |
||
== Инструментарий |
== Инструментарий Черчениея == |
||
{{:Drawing Module/ru}} |
{{:Drawing Module/ru}} |
||
== Инструментарий |
== Инструментарий Трассировка лучей == |
||
{{:Raytracing Module/ru}} |
{{:Raytracing Module/ru}} |
||
== Инструментарий |
== Инструментарий Изображение == |
||
{{:Image Module/ru}} |
{{:Image Module/ru}} |
||
== Инструмент 2D |
== Инструмент 2D черчение == |
||
{{:2d Drafting Module/ru}} |
{{:2d Drafting Module/ru}} |
||
Line 116: | Line 116: | ||
{{:Testing/ru}} |
{{:Testing/ru}} |
||
{{:Branding/ru}} |
{{:Branding/ru}} |
||
{{:Localisation/ru}} |
{{:Localisation/ru|Локализация}} |
||
{{:Extra python modules/ru}} |
{{:Extra python modules/ru}} |
||
Revision as of 06:39, 3 August 2011
Это руководство по программе FreeCAD. Оно включает в себя важные части wiki документации по FreeCAD. Оно создано для просмотра или печати как один большой документ. Если Вы хотите изучать это руководство по частям, Вы можете обратиться к Online-версии, которая удобнее для просмотра.
Добро пожаловать на страницу помощи FreeCAD
Этот документ был создан автоматически из содержимого официальной вики документации FreeCAD, которую можно прочитать в Интернете по адресу онлайн. Так как вики активно поддерживается и постоянно развивается сообществом FreeCAD разработчиков и пользователей, Вы можете обнаружить, что онлайн-версия содержит больше количество более актуальной информации, чем этот документ. Здесь так же можно найти текущий перевод документации на несколько языков. Но всё же, мы надеемся, что здесь Вы найдете всю необходимую информацию. В случае, если у Вас есть вопросы, на которые вы не можете найти ответы в данном документе, просмотрите форум FreeCAD. Возможно, там Вы сможете найти ответ, на свой вопрос или кто-то сможет Вам помочь.
Как пользоваться
Этот документ состоит из нескольких разделов: введение, использование, написание сценариев и разработка. Последние три раздела предназначены для трёх разных категорий пользователей FreeCAD: обычные пользователи, которые просто хотят использовать эту программу, опытные пользователи, которые интересуются возможностью написания сценариев в FreeCAD и хотели бы изменить некоторые ее аспекты, и разработчиков, которые будут помогать разрабатывать FreeCAD или использовать её в качестве базы для разработки собственных приложений. Если вы абсолютный новичок в FreeCAD, мы рекомендуем просто начать с введения.
Many pages of this wiki are also grouped into an easier to read Manual. If you are new to FreeCAD, we suggest you start reading the manual.
Содействие
Как, возможно, Вы заметили, программисты действительно плохие писатели справочной информации для изучения программ! Для них всё совершенно ясно, потому что они сами это так сделали. Поэтому очень важно, чтобы опытные пользователи помогали нам писать и исправлять документацию. Да, мы имеем в виду Вас! Как, спросите Вы? Просто зайдите в раздел пользователя Wiki. Вам нужна учётная запись на Wiki FreeCADа, чтобы войти. Спросите на форуме или на канале IRC права на редактирование wiki (wiki защищена от записи из-за опасности спама) и мы сделаем учётную запись для Вас. В настоящее время учётная запись wiki и форума раздельны, но имя учётной записи на wiki будет такой же, как и на форуме. После этого Вы сможете начать редактирование! Так же посмотрите эту страницу, чтобы узнать, как ещё Вы можете помочь FreeCAD.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Введение
FreeCAD это универсальная параметрическая 3D САПР , чья разработка полностью базируется на принципах открытого исходного кода (LGPL License). FreeCAD непосредственно направлен на разработку в сферах машиностроения и дизайна объектов, но также подходит для более широкого круга применений в инженерных задачах, таких как архитектура, анализ методом конечных элементов, 3D печать, и других.
Во FreeCAD имеются инструменты аналогичные CATIA, SolidWorks или Solid Edge, и, следовательно, он также попадает в категорию САПР, PLM, CAx и CAE. Это параметрический моделлер с модульной программной архитектурой, которая позволяет предоставлять дополнительные функциональные возможности без изменения базовой системы.
Как и во многих пакетах САПР, в нем много 2D-компонентов для создания плоских фигур или создания рабочих чертежей. Однако прямое 2D-рисование (как например в Inkscape или AutoCAD LT) не является основным, так же как анимация или редактирование сеток (например Blender, Maya, 3ds Max, или Cinema 4D). Тем не менее, благодаря своей широкой адаптивности, FreeCAD может оказаться полезным в гораздо более широкой области, чем его текущая сфера деятельности.
FreeCAD интенсивно использует библиотеки с открытым исходным кодом, существующие в области научных вычислений. Среди них Open Cascade Technology (OCCT), мощное ядро САПР; Coin3D, инструментарий для разработки 3D-графики, совместимый с Open Inventor; Qt, всемирно известный пользовательский интерфейс; и Python, современный язык сценариев. Сам FreeCAD также может быть использован в качестве библиотеки другими программами.
FreeCAD также является мультиплатформенным и в настоящее время работает в операционных системах Linux/Unix, Windows и macOS с одинаковым внешним видом и функциональностью на всех платформах.
Более подробнее о возможностях FreeCADа, можно узнать в разделах: "Список функций", "Информация о версиях", "Начало работы". Так же вы можете посмотреть скриншоты.
О проекте FreeCAD
Проект FreeCAD начался в далёком 2001 году, как описано на странице его истории.
FreeCAD поддерживается и проектируется сообществом энтузиастов, проектировщиков и пользователей (смотри страницу contributors). Они работают на FreeCAD добровольно, в свободное время. Они не могут гарантировать, что FreeCAD содержит всё, что Вы можете пожелать, но они делают всё, что могут! Сообщество зовёт на форум FreeCAD, где обсуждается большая часть идей и пожеланий. Смело присоединяйтесь к нам здесь!
About the FPA
The FreeCAD project is also supported by a non-profit organization, the FreeCAD project association (FPA). The FPA is an independent body created by some FreeCAD veterans in 2021 to collect donations and other resources to support the project and its community, to help protect that community and allow it to continue developing in the best conditions, and to represent the project against other bodies such as companies and institutions.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Это обширный, но неполный список функций, реализованных во FreeCAD.
Информация о версиях
- Release 0.20 - Июнь 2022
- Release 0.19 - Март 2021
- Release 0.18 - Март 2019
- Release 0.17 - Апрель 2018
- Release 0.16 - Апрель 2016
- Release 0.15 - Март 2015
- Release 0.14 - Март 2014
- Release 0.13 - Январь 2013
- Release 0.12 - Декабрь 2011
- Release 0.11 - Март 2011
Основные функции
- Полное геометрическое ядро, основанное на OpenCasCade, позволяет производить сложные трёхмерные операции над сложными типами форм, со встроенной поддержкой таких понятий, как: Граничное представление (boundary representation, BREP), Кривые и поверхности неоднородных рациональных B-сплайнов (Non-uniform rational basis spline, NURBS), широкий спектр геометрических объектов, булевы операции над фигурами или сопряжения и встроенную поддержку форматов STEP и IGES
- Полностью параметрическая модель данных. Объекты FreeCAD параметрические в основе, то есть их форма может полностью зависеть от параметров или даже зависеть от других объектов, все изменения пересчитываются по запросу, и записываются в стеке отмен-возвратов. Легко могут быть добавлены новые объекты, которые могут быть даже написаны на python
- Модульная архитектура, позволяющая добавлять функциональность через плагины (модули). Эти расширения могут быть комплексными и программироваться на C++, или простыми как скрипты Python или записываемые самостоятельно макросы. У Вас есть полный доступ из встроенного интерпретатора Python, макросов или внешних сценариев к практически любой части FreeCAD, позволяя создавать и изменять геометрию, двумерное и объёмное представление этой геометрии (scenegraph) или даже интерфейс FreeCAD
- Импорт/экспорт в стандартные форматы, такие как: STEP, IGES, OBJ, файла) STL, DXF, SVG,U3D, DAE, IFC, OFF, NASTRAN, VRML, кроме собственного формата FreeCAD Fcstd. Уровень совместимости между FreeCAD и данными форматами может различаться, поскольку зависит от поддерживающего их модуля.
- Модуль эскизирования со встроенным вычислителем ограничений, позволяющий создавать эскизы с геометрически ограниченными двухмерными формами. Создаваемые с помощью Sketcher двумерные геометрические фигуры с ограничениями могут использоваться как база для построения других объектов FreeCAD.
- Модуль робототехники, позволяющий изучать движение роботов в графическом интерфейсе.
- Удобный новый модуль для создания традиционных чертежей с опциями вроде видов детализации, сечений, образмеривания и других, которые позволяют создать двумерный вид вашей трёхмерной модели. Эти модули создают листы, готовые к экспорту в SVG или PDF. Так же есть более старый модуль черчения с его небогатыми возможностями графического интерфейса, но мощной функциональностью через Python.
- Модуль рендеринга может экспортировать 3D объекты для рендеринга во внешние программы. Пока что он поддерживает только POV-Ray и LuxRender
- Модуль архитектуры позволяет работать по процессу информационного моделирования здания (Building Information Modeling, BIM), при совместимости со спецификацией IFC.
- Модуль Path посвящён автоматизации механической обработки (Computer-aided manufacturing, CAM), например, фрезерования, и может выводить, показывать и настраивать G-код.
- Интегрированный обработчик электронных таблиц и выражений, который может использоваться для управления моделями через формулы и централизованной организации данных моделей.
Общие функции
- кроссплатформенность. FreeCAD запускается и ведёт себя точно также на Windows, Linux, macOS и других платформах.
- полностью графическое приложение. FreeCAD обладает законченным Графическим Интерфейсом Пользователя, основанном на инструментарии Qt, с 3D просмотрщиком, основанным на Open Inventor, позволяющим быстро отрисовывать 3D сцены c весьма доступным представлением SceneGraf.
- может работать, как консольное приложение из командной строки. В режиме командной строки FreeCAD запускается без графического интерфейса, но со всеми инструментами геометрии. В этом режиме он требует относительно мало памяти и может быть использован, например, в качестве сервера для создания содержимого другим приложениям.
- может быть импортирован как модуль Python. FreeCAD может импортироваться в любое приложение, способное запускать сценарии Python. В консольном режиме интерфейсная часть FreeCAD отсутствует, но все геометрические инструменты доступны.
- концепция верстаков. В интерфейсе FreeCAD инструменты сгруппированы по верстакам. Это позволяет отображать только инструменты, используемые для выполнения конкретной задачи, сохраняя рабочее пространство незагромождённым и отзывчивым, а также позволяет приложению быстро загружаться.
- фреймворк плагинов/модулей для последующей загрузки типов данных/функциональностей. FreeCAD разделён на основное приложение с модулями, которые загружаются при необходимости. Почти все инструменты и типы геометрии хранятся в модулях. Модули ведут себя как плагины, кроме отложенной загрузки, отдельные модули могут быть добавлены или удалены из существующей установленной версии FreeCAD.
- параметрически связанные объекты документа. Все объекты в документе FreeCAD могут быть заданы параметрами. Эти параметры могут быть изменены и пересчитаны в любое время. Поскольку связи между объектами сохраняются, изменение одного объекта автоматически распространяется на все зависимые объекты.
- создание параметрических примитивов. Примитивы вроде куба, сферы, цилиндра и т.д. могут создаваться определением их геометрических ограничений.
- операции по графическому изменению. FreeCAD может выполнять перемещение, вращение, масштабирование, отражение, смещение (простое или описанное в Jung/Shin/Choi) или изменение формы в любой плоскости трёхмерного пространства.
- конструктивная блочная геометрия (булевы операции). FreeCAD может выполнять операции конструктивной блочной геометрии (объединение, разность, пересечение).
- создание планарной геометрии. Отрезки, ломаные, прямоугольники, сплайны, дуги и окружности могут создаваться через графический интерфейс на любой плоскости трехмерного пространства.
- моделирование с прямым или круговым выдавливанием, сечением и скруглением сопряжений.
- топологические компоненты вроде вершин, ребер, ломаных и плоскостей.
- тестирование и восстановление. В FreeCAD есть инструменты для тестирования сеток (тест на твёрдотельность, тест non-two-manifolds, тест на самопересечение) и для их починки (заполнение пустот и исправление ориентации сегментов).
- аннотации. В FreeCAD можно вставлять аннотации (пояснения) к надписям или размерам.
- инфраструктура отмены/возврата. В FreeCADе всё отменяемо/возвращаемо, с пользовательским доступом к стэку выполненных действий. Множество шагов может быть отменено единовременно.
- ориентация на транзакции. Стек отмен/возвратов хранит транзакции документа, а не одиночные действия, что позволяет каждому инструменту точно определить, что должно быть отменено или переделано.
- встроенная инфраструктура сценариев. FreeCAD обладает встроенными Python интерпретатором, с API, которые охватывают практически любую часть предложения, интерфейса, геометрии и представления этой геометрии в 3D просмотрщике. Интерпретатор может запускать как сложные сценарии, так и одиночные команды, целые модули могут быть полностью запрограммированы на Python.
- встроенная консоль Python. Интерпретатор Python включает консоль с подсвечиванием синтаксиса, автодополнением и просмотром классов. Команды Python могут быть выполнены прямо в FreeCAD и напрямую возвращать результаты, позволяя программистам тестировать работу на ходу, раскрывая содержимое модулей FreeCAD'а и легко изучая его внутренности.
- отражение действий пользователя в Python консоли. Всё, что пользователь делает в интерфейсе FreeCAD, выполняется в виде кода Python, который может быть выведен в консоль и записан в макрос.
- полная запись и редактирование макросов. Команды Python, которые вызываются при манипулировании пользовательским интерфейсом, могут быть записаны, отредактированы и сохранены для дальнейшего использования.
- составной (основанный на ZIP) формат хранения документов. Документы FreeCAD сохраняются с расширением .FCStd. Он может содержать множество различных типов информации, таких как геометрия, сценарии или иконки миниатюр. Файл .FCStd представляет собой архив zip, так что сохранённый файл FreeCAD уже сжат по умолчанию.
- полностью настраиваемый/сценарируемый Графический Интерфейс Пользователя. Основанный на Qt интерфейс FreeCAD полностью доступен из интерпретатора Python. Помимо простых функций самого FreeCAD предоставляются инструментарии, а также полный доступ к структуре Qt. Пользователь может выполнять любые операции с ГИП, такие как создание, документирование, изменение и удаление виджетов и панелей инструментов.
- миниатюры. (пока только в Linux системах) Значки документа FreeCAD, показывающие содержимое файла в большинстве файловых менеджеров таких как Nautilus в Gnome.
- модульный установщик MSI. Установщик FreeCAD производит гибкую установку в системе Windows. Также поддерживаются пакеты системы Ubuntu.
Внешние верстаки
Опытные пользователи создали различные пользовательские внешние верстаки.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Загрузка
Текущая стабильная версия
Релиз FreeCAD версии 0.21.2 был опубликован 14.11.2023. Чтобы узнать о нововведениях, ознакомьтесь с примечаниями к выпуску.
Контрольные суммы SHA256 для проверки целостности вашей загрузки вы можете найти на странице релиза 0.21.2.
Предыдущие версии можно загрузить со страницы релизов.
Примечания для пользователей Windows
- Поддерживаются следующие версии Windows: 64-разрядные версии 7/8/10/11. 32-разрядная версия Windows не поддерживается.
- Пакет также можно установить из менеджера пакетов Chocolatey. Пакет из Chocolatey пока не в новейшей версии.
Примечания для пользователей macOS
- macOS 10.12 Sierra — минимальная поддерживаемая версия.
- Для macOS 12 и более ранних версий следует использовать «Неподписанный образ диска Intel», подписанная версия в этих системах не работает.
Примечания для GNU/Linux пользователей
Большинство дистрибутивов поддерживают FreeCAD из их официальных репозиториев, однако, если дистрибутив не следует модели гладкого обновления, версия может быть устаревшей. Вместо установки из репозитория вы можете загрузить AppImage по ссылке сверху, разрешить загруженному файлу права на исполнения и запустить его без установки.
Смотрите страницу Установка в Linux насчёт дополнительных опций установки, включая однодневные сборки для Ubuntu и производных.
Портативную версию, не требующую установки, можно создать, запустив FreeCAD с следующими командами:
cd path/to/directory_containing_AppImage/
chmod +x ./name_of_AppImage_file.AppImage
HOME="$PWD/Settings" FREECAD_USER_HOME="$PWD/Settings" ./name_of_AppImage_file.AppImage
Дополнительную информацию о переменных среды FreeCAD можно найти на странице конфигурирования.
Разрабатываемые версии
FreeCAD активно развивается.
- Для получения информации о сборках и исходном коде разработки, смотрите страницу weekly builds.
- Чтобы скомпилировать новейший исходный код, смотри страницу Компиляция.
Дополнительные модули и макросы
Сообщество FreeCAD предлагает множество различных модулей и макросов. Начиная с версии 0.17 они могут быть легко установлены напрямую из FreeCAD через Менеджер дополнений.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Установка
Установка в Windows
Стандартная установка
Самый простой способ установить последнюю стабильную версию FreeCAD - использовать программу установки:
Если вы хотите загрузить версию для разработчиков (которая может быть нестабильной), смотрите страницу Еженедельных сборок.
После загрузки программы установки, дважды щёлкните по ней, чтобы запустить процесс установки.
Ниже приведена дополнительная информация о некоторых технических вариантах. Но большинству пользователей не нужно больше, чем эта программа установки. Перейдите в Начало работы после завершения установки.
Installation for all users of the Windows system
By default FreeCAD will be installed for the user that executes the installer. If this user only has user permissions, the default installation path is:
- C:\Users\<username>\AppData\Local\Programs\FreeCAD X.YY
If the installer is executed by an admin user, or you execute it as admin, you can choose if FreeCAD should be installed for all users of the system or just for you. The default is for all users.
If installed for all users, the default installation path is:
- C:\Program Files\FreeCAD X.YY
Тихая (автоматическая) установка
To install FreeCAD silently, you can execute the installer from the command line:
FreeCAD-~.exe /S
Default settings will be used for all options. A custom installation path can be specified in this manner:
FreeCAD-~.exe /S /D=A path to FreeCAD with spaces
By default, even with silent installations, there will be a short popup when the installer is checked for corruption. This so-called cyclic redundancy check only takes a few seconds at most. To disable this corruption check:
FreeCAD-~.exe /S /NCRC
Note that this /NCRC
flag is not recommended since the corruption check assures that the installer was e.g. completely downloaded.
Chocolatey
Using the Chocolatey package manager is currently not recommended as that repository is no longer kept up-to-date.
Удаление
To uninstall FreeCAD it is preferable to use the Windows tools for uninstalling software. Alternatively you can execute the uninstaller directly. This is the file:
- Uninstall-FreeCAD.exe
You can find it in the folder where FreeCAD is installed.
The uninstaller can also be executed silently using the command line:
Uninstall-FreeCAD.exe /S
Note that (silent) uninstallation will fail if there is a running instance of FreeCAD, even if that instance is not the version being uninstalled.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Установка в Unix/Linux
Обзор
Установка FreeCAD на наиболее известных системах Linux теперь поддерживается сообществом и FreeCAD должен быть доступен напрямую через диспетчер пакетов вашего дистрибутива. Команда FreeCAD также предоставляет:
- «Официальные» пакеты при выпуске новых релизов доступны через Snap packages, AppImages, Flatpaks и PPA
- Экспериментальные сборки доступны через PPA daily repository, AppImages, Ubuntu Snaps.
Ubuntu и Ubuntu подобные системы
Многие дистрибутивы Linux базируются на Ubuntu и используют их репозитории. Кроме официальных вариантов (Kubuntu, Lubuntu и Xubuntu), существуют неофициальные дистрибутивы, такие как Mint, Voyager и другие. Приведенные ниже опции установки должны быть совместимыми с этими системами.
Официальная версия
FreeCAD доступен в репозиториях Ubuntu Universe и может быть установлен через Центр управления программным обеспечением или через терминал:
sudo apt install freecad
Примечание: пакет Ubuntu Universe может быть устаревшим, так как упаковка может отставать от последнего стабильного исходного кода. В этом случае рекомендуется установить пакет из PPA -stable
ниже. Кроме того, для тестирования ветки разработки можно установить пакет -daily
.
Стабильная PPA версия
Предупреждение: FreeCAD PPA в настоящее время не поддерживается и ищет добровольцев. Пожалуйста, используйте альтернативу (snap, appimage), пока проблема не будет устранена!
Персанальный Архив Пакетов (Personal Package Archive (PPA)) для стабильной версии FreeCAD поддерживается сообществом FreeCAD на Launchpad community. Launchpad репозиторий называется как FreeCAD Stable Releases .
С помощью графического интерфеса
Установка стабильного PPA с помощью графического интерфейса (GUI):
- 1. Перейдите на Ubuntu Software → Software & Updates → Software Sources → Other Software
- 2. Кликните на Add, затем скопируйте и вставьте следующую строку
ppa:freecad-maintainers/freecad-stable
- 3. Добавьте источник, закройте диалоговое окно, и перезагрузите свои источники софта, если нужно.
Теперь вы можете найти и установить последнюю стабильную версию FreeCAD из Ubuntu Software Center.
Через командную строку
Установите стабильный PPA через коммандную строку:
- 1. Добавьте PPA в свои источники программного обеспечения:
sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
- 2. Извлеките обновленные списки пакетов:
sudo apt update
- 3. Затем установите FreeCAD вместе с комплектом оффлайн документации:
sudo apt install freecad freecad-doc
Note: из-за проблем с упаковкой в некоторых версиях Ubuntu у пакета freecad-doc
возникают коллизии с пакетом самого FreeCAD или одной из его зависимостей; в этом случае удалите пакет freecad-doc
и установите только пакет freecad
. Если пакет freecad-doc
не существует, проигнорируйте его установку.
Проверка Установки
- 4. Как только вы добавите стабильный PPA в свои исходные файлы одним из вышеперечисленных методов, пакет
freecad
установит эту версию PPA поверх версии, предоставленной репозиторием Ubuntu Universe. Вы можете просмотреть доступные версии с помощью следующей командыapt-cache
: apt-cache policy freecad
- Результат должен выглядеть примерно так (конечно, информация о версии будет отличаться):
freecad:
Installed: (none)
Candidate: 2:0.18.4+dfsg1~201911060029~ubuntu18.04.1
Version table:
2:0.18.4+dfsg1~201911060029~ubuntu18.04.1 500
500 http://ppa.launchpad.net/freecad-maintainers/freecad-stable/ubuntu bionic/main amd64 Packages
0.16.6712+dfsg1-1ubuntu2 500
500 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
ubuntu@ubuntu:~$ apt-cache policy freecad-doc
- 5. Вызовите стабильную (PPA) версию FreeCAD через графический интерфейс или через командную строку. Последний метод заключается в следующем:
./freecad
Development PPA (Daily)
Поскольку FreeCAD находится в постоянном развитии, вы можете установить пакет daily, чтобы быть в курсе последних улучшений и исправлений ошибок. Репозиторий также размещен на Launchpad и называется freecad-daily.
Эта версия компилируется ежедневно из официального главного репозитория. Имейте в виду, что хотя он будет содержать новые функции и исправления ошибок, он также может содержать новые ошибки и быть нестабильным.
Добавьте PPA типа "daily" к вашим источникам программного обеспечения, обновите списки пакетов и установите ежедневный пакет:
sudo add-apt-repository ppa:freecad-maintainers/freecad-daily
sudo apt-get update
sudo apt-get install freecad-daily
Каждый день вы можете обновлять до последней ежедневной:
sudo apt-get update
sudo apt-get install freecad-daily
Примечание: в некоторых случаях новый код или зависимости, добавленные в FreeCAD, вызывают ошибки упаковки; в этом случае пакет "daily" может не создаваться до тех пор, пока майнтайнеры не исправят проблемы вручную.
Запустите ежедневную (PPA) версию FreeCAD:
freecad-daily
Примечание: в одной системе можно установить как пакеты -stable
, так и -daily
.Это полезно, если вы хотите работать со стабильной версией и при этом иметь возможность тестировать новейшие функции в разработке. Обратите внимание, что исполняемый файл для ежедневной версии - это freecad-daily
, а для стабильной версии это просто freecad
.
Debian и прочие базирующиеся на нём системы
Начиная с Debian Lenny, FreeCAD доступен прямо из программных репозиториев Debian и может быть установлен через synaptic или просто через:
sudo apt-get install freecad
OpenSUSE
FreeCAD обычно устанавливается через YAST (сокр. Yet another Setup Tool, Еще один инструмент установки), инструмент установки и настройки операционной системы Linux, или в терминале/консоли (нужны права root) с помощью:
zypper install FreeCAD
Примечание: Эта процедура распространяется только на установку официально выпущенных стабильных версий программы FreeCAD, в зависимости от установленных ссылок на репозитории программных пакетов вашей версии ОС. Пакет openSUSE «может быть устаревшим», так как упаковка может отставать от последнего стабильного исходного кода.В этом случае рекомендуется установить пакет вручную из отмеченных (Expand) репозиториев исходников.
Предлагается обширная программа выпуска для сборок пакетов FreeCAD. Посетите для обзора:
Обычно для выбора правильного дистрибутива openSUSE необходимо щелкнуть по особой кнопке View.
Стабильная версия
Стабильная версия пакета: Стабильные репозитории на openSUSE. Требуемая версия дистрибутива openSUSE должна быть выбрана в нижней части веб-страницы.
Примечание: openSUSE имеет несколько вариантов на выбор при загрузке FreeCAD. Чтобы просмотреть эти варианты, посетите Обзор стабильных репозиториев на openSUSE.
В разработке
Последние выпуски разработчика unstable: Списки нестабильных репозиториев в openSUSE
Рекомендуется загружать бинарные пакеты напрямую. Затем выберите правильный дистрибутив для установленной вами ОС openSUSE.
Gentoo
FreeCAD может быть скомпилирован/установлен просто вызовом:
emerge freecad
Fedora
FreeCAD выл включён в официальные пакеты начиная с Fedora 20. Он может быть установлен из командной строки:
sudo dnf install freecad
Для предыдущих выпусков Fedora:
sudo yum install freecad
Также может быть использован менеджер пакетов с графическим интерфейсом. Задайте поиск "freecad". Версия пакета официального релиза как правило сильно отстает от релизов FreeCAD. Package: freecad показывает версии, включенные в репозитории Fedora с течением времени и версии.
Более свежие версии можно получить, загрузив один из .AppImageрелизов из репозитория github. Они отлично работают на Fedora.
Если вы хотите быть в курсе самых последних ежедневных сборок, FreeCAD также доступен на coprЧтобы установить сборку оттуда введите в терминале:
sudo dnf copr enable @freecad/nightly
sudo dnf install freecad
Это оставляет copr хранилище активным, так что
sudo dnf upgrade
или эквивалентной, обновится до последней сборки FreeCAD вместе с обновлениями из любых других активных репозиториев. Если вы хотите что-то более стабильное, вы можете отключить @freecad/nightly снова после первоначальной установки. Репозиторий copr сохраняет только сборки за последние 2 недели. Это не подходит, если вы хотите выбрать более старую конкретную версию.
Инструкции также доступны на компиляция FreeCAD самостоятельно, включая сценарий специально для Fedora. С небольшим изменением, чтобы проверить конкретную фиксацию из git, любая версия начиная примерно с FreeCAD 0.15 может быть построена на любом дистрибутиве начиная с Fedora 21.
Arch
Установка FreeCAD в Arch Linux и производных (например, Manjaro):
pacman -S freecad
Прочие
Если Вы обнаружите, что Ваша система использует FreeCAD, но не описана на этой странице, пожалуйста сообщите нам на форум!
В сети доступны многие альтернативные, неофициальные пакеты FreeCAD, например для систем вроде slackware или fedora. Поиск в сети быстро даст Вам какие-нибудь результаты.
Установка в других Linux/Unix системах
Многие распространенные дистрибутивы Linux теперь включают в себя скомпилированный FreeCAD как часть стандартных пакетов. Он часто устаревший, но хорошая стартовая точка. Проверьте стандартные менеджеры пакетов для вашей системы. С помощью одного из следующих (частичных) списков команд можно установить официальную версию FreeCAD для вашего дистрибутива из терминала. Для этого вероятно потребуются права администратора.
apt-get install freecad
dnf install freecad
emerge freecad
slackpkg install freecad
yum install freecad
zypper install freecad
pacman -Sy freecad
Имя пакета чувствительно к регистру, поэтому попробуйте `FreeCAD`, а также `freecad`. Если это не работает для вас, либо из-за того, что у вашего менеджера пакетов нет предварительно скомпилированной версии FreeCAD, либо из-за того, что доступная версия устарела для ваших нужд, вы можете попробовать загрузить один из .AppImage релизов из репозитория github. Они работают на большинстве 64-битных дистрибутивов Linux без какой-либо специальной установки. Просто убедитесь, что загруженный файл помечен как исполняемый, а затем запустите его.
Если и этого недостаточно, и вы не можете найти другой источник предварительно скомпилированного пакета для вашей ситуации, вам потребуется скомпилировать FreeCAD самостоятельно.
Следующий Шаг
После того, как вы установили FreeCAD, пора приступить к работе!
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Установка в Mac OS
FreeCAD можно установить на macOS из пакета .dmg, который вы можете просто перетащить в вашу папку приложений:
If you would like to download a development version, which may be unstable, see the Weekly builds download page.
Для обновления программного обеспечения, Вы также можете использовать менеджер пакетов, например такой как HomeBrew. Инструкции по установке HomeBrew можно посмотреть здесь. После установки HomeBrew вы можете просто установить FreeCAD 0.18.4 через свой bash терминал
brew install --cask freecad
и чтобы использовать последнюю доступную версию (0.19 pre) на HomeBrew, вы должны запустить
brew install freecad
Если у вас есть какие-либо проблемы с HomeBrew Cask или Formula, вы можете сообщить о них здесь.
На этой странице описано использование и функции установщика FreeCAD. Есть также инструкция по удалению. После установки вы можете начать работать!
Простая установка
Установщик FreeCAD предоставляется в виде пакета приложения (.app), помещенного в файл образа.
Установщик FreeCAD предоставляется в виде пакета приложений (.app), заключенного в файл образа диска.
Вы можете загрузить последнюю версию установщика со страницы Download. После загрузки файла просто смонтируйте образ диска, затем перетащите его в папку «Приложение» или в папку по вашему выбору.
Вот и все. Просто нажмите на приложение, чтобы запустить FreeCAD. Если у вас появляется сообщение «FreeCAD не может быть запущен, так как его разработчик неизвестен». Откройте папку (Приложение) и щелкните правой кнопкой мыши на приложении, затем нажмите «Открыть» и «Подтвердить», чтобы открыть приложение.
Удаление
В настоящее время для FreeCAD нет деинсталятора. Чтобы полностью удалить FreeCAD и все установленные компоненты, перетащите следующие файлы и папки в корзину:
- В /Приложения:
- FreeCAD
Если вы установили FreeCAD вместе с homebrew, просто используйте команду brew uninstall freecad
. Это все, что требуется.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Обзор FreeCAD
Предисловие
FreeCAD - это система параметрического 3D моделирования, разработанная в первую очередь, для решения задач в области машиностроения, однако это далеко не единственные направление. FreeCAD также поддерживает и иные варианты применения в случаях, когда нужно моделировать объемные объекты с заданной точностью и контролем над историей моделирования.
FreeCAD находится в стадии разработки c 2002 года и предлагает большой список функций. Возможностей по-прежнему не хватает, но он достаточно мощен для использования в хобби или малых мастерских. Имеется быстрорастущее сообщество увлеченных пользователей, участвующих в форуме FreeCAD, и вы можете найти здесь множество примеров качественных проектов, разработанных с использованием FreeCAD. Смотрите так же использование FreeCAD в производстве.
Как и все проекты со свободным кодом, проект FreeCAD зависит от своего сообщества в своём росте, усилении возможностей и исправлении ошибок. Не забывайте об этом, используя FreeCAD, если он вам нравится, то вы можете сделать пожертвование и помочь FreeCAD разными способами, такими как написание документации и создании переводов.
Смотри так же:
Установка
Чтобы приступить к работе скачайте и установите FreeCAD. Информацию о текущей версии и последних обновлениях можно получить на странице загрузки. Инструкции по установке под определенные операционные системы изложены на следующих страницах: (Windows, Linux, Mac). Так же имеются готовые пакеты установки для Windows (.msi), Ubuntu и Debian (.deb), openSUSE (.rpm) и Mac OSX. FreeCAD доступен в менеджерах пакетов множества других дистрибутивов Linux. Существует исполняемый файл формата AppImage, который пригоден для запуска на большинстве современных 64-битных Linux систем. FreeCAD является программным обеспечением с открытым исходным кодом, что дает возможность, любому пользователю скачать исходный код и скомпилировать его самостоятельно.
Обзор интерфейса
Стандартный интерфейс FreeCAD
Более подробное описание находится на странице интерфейс.
- 1. Главный вид - может содержать различные окна с вкладками, в данном случае открыта вкладка трёхмерного вида.
- 2. Вкладки главного вида - список всех открытых объектов и документов в виде вкладок.
- 3. Древо проекта (часть комбинированной панели) - показывающее иерархию и историю проектирования объектов в документе, может так же отображать панель задач активных команд.
- 4. Редактор свойств (часть комбинированной панели) - позволяет просматривать и изменять свойства выделенных объектов.
- 5. Вид выделения - отображает объекты или под элементы выбранных объектов (вершины, ребра, грани).
- 6. Отчёт (или окно вывода Python) - в данной панели отображаются сообщения, предупреждения и ошибки в работе FreeCAD.
- 7. Консоль Python - консоль для ввода Python кода и просмотра результатов его исполнения.
- 8. Cтрока состояния - отображает некоторые сообщения и подсказки.
- 9. Раздел панелей инструментов - область в которой расположены панели инструментов.
- 10. Переключатель верстаков - позволяет переключить верстак.
- 11. Стандартное меню - содержит базовые операции программы.
Основная концепция интерфейса FreeCAD в разделении её на верстаки. Верстаки представляют собой набор инструментов, приспособленных для отдельной задачи, такой как работа с сетками, или черчение двумерных объектов, или эскизов с направляющими. Текущий верстак можно переключить с помощью селектора верстаков. Есть возможность настроить инструменты каждого верстака, добавить их из другого верстака или даже создать самим, которые мы называем макросы. Широко используются в качестве стартовых точек верстаки PartDesign и Part.
Когда вы впервые запускаете FreeCAD, открывается Стартовая страница. Вот как это выглядит для версии 0.19:
Стартовая страница позволяет быстро перейти к одному из самых распространённых верстаков, открыть один из последних файлов, или посмотреть последние новости из мира FreeCAD. Верстак по умолчанию можно изменить в настройках.
Навигация в трехмерном пространстве
В FreeCAD есть несколько режимов навигации, которые меняют способ использования мыши для взаимодействия с объектами в трёхмерном окне и сам вид. Один из них сделан под тачпады, где средняя кнопка не используется. Нижеследующая таблица показывает режим по умолчанию, называемый CAD' (Можно быстро сменить текущий режим навигации правым кликом на пустом месте трёхмерного вида):
Вы так же можете выбрать несколько стандартных видов(вид сверху, спереди и т.д.) из меню Вид, на панели инструментов Вид, а также с помощью горячих клавиш (1, 2, и т.д.), а правым кликом на пустом месте трёхмерного вида Вы получите доступ к некоторым частым операциям, таким как выбор отдельного вида или нахождение объекта в Дереве проекта.
Первые шаги в FreeCAD
FreeCAD ориентирован на создание высокоточных трёхмерных моделей, сохранение четкого контроля над этими моделями (сохранение возможности вернуться назад по истории модели и изменить параметры), и при необходимости изготовить эти модели (через трёхзмерную печать, станками с ЧПУ или на заводе). Поэтому он отличается от некоторых других трёхмерных приложений, сделанных для других целей, таких как создание анимации или игр. Его кривая обучения может быть сложной для освоения, особенно если это ваш первый контакт с 3D-моделированием. Если Вы застряли на каком-то месте, не забудьте, что дружественное сообщество пользователей на форуме FreeCAD способно быстро подсказать Вам решение.
Верстак, с которого Вы начнёте использование FreeCAD, зависит от типа работы, которую Вам надо выполнить: если Вам нужно работать над механической моделью, или вообще над любым небольшим объектом, Вам возможно подойдёт верстак PartDesign. Если Вы работаете на плоскости, то переключитесь на верстак Draft, или верстак Sketcher, который позволяет работу с ограничениями. Если Вам требуется разработка здания по BIM, переключитесь на Arch_Workbench. А если Вы привыкли к OpenSCAD, попробуйте верстак OpenSCAD. Также доступно множество внешних верстаков, разработанных сообществом.
Верстак можно переключить в любой момент, а так же настроить ваш верстак и добавить инструменты с других верстаков.
Работа с верстаками PartDesign и Sketcher
Верстак PartDesign спроектирован для создания сложных объектов, начиная с простых форм и добавляя и удаляя элементы (так называемые "features"), пока Вы не получите итоговый объект. Все элементы, которые Вы добавите во время моделирования, сохраняются в отдельном виде, называемом древом проекта, который так же содержит другие объекты вашего документа. Объект PartDesign можно понимать как последовательность операций, применяемых к результатам предыдущих, создавая одну большую цепочку. В древе проекта виден финальный объект, но Вы можете раскрыть его и восстановить все предшествующие стадии и изменить любые их параметры, которые автоматических обновят финальный объект.
Верстак PartDesign широко использует другой верстак, Sketcher. Он позволяет рисовать плоские эскизы, которые определяются установкой ограничений (Constraints) к двумерной форме. Например, Вы можете нарисовать прямоугольник и установить размер стороны применением ограничений к одной из сторон. Размеры этой стороны теперь могут быть изменены лишь при изменении ограничений.
Эти двумерные формы, созданные в верстаке эскизов, широко используются в верстаке PartDesign, например, для создания трёхмерных объёмов или черчения полей на гранях вашего объекта, которые затем будут выдолблены из вашего объёма. Вот типичный рабочий процесс PartDesign:
- Создать новый эскиз
- Нарисовать замкнутую фигуру (необходимо убедиться, что все точки соединены)
- Закрыть эскиз
- Растянуть эскиз в твердое тело с помощью pad tool
- Выбрать одну грань твердого тела
- Создать второй эскиз (на этот раз он будет нарисован на выбранной грани)
- Нарисовать замкнутую фигуру
- Закрыть эскиз
- Создать карман из второго эскиза на первом объекте
Что создаст объект вроде этого:
В любой момент Вы можете выделить оригинальный эскиз и изменить его или или изменить параметр выдавливания операции pad или pocket, что изменит итоговый проект.
Работа с верстаками Draft и Arch
Верстаки Draft и Arch действуют немного по-разному, хотя они следуют общим правилам для FreeCAD. Если коротко, Sketcher и PartDesign созданы в первую очередь для проектирования единых деталей, а Draft и Arch для работы с несколькими простыми объектами.
Верстак Draft предоставляет двумерные инструменты вроде тех, что можно найти в традиционных двумерных САПР вроде AutoCAD. Тем не менее двумерное черчение находится вне задач FreeCAD, и не ожидайте найти здесь полное множество инструментов, которые предлагают эти специализированные инструменты. Большинство инструментов верстака Draft работают не только на плоскости, но и в объёме, и получают пользу от специальных вспомогательных систем вроде выбора плоскости и привязки к объектам.
Верстак Arch добавляет FreeCAD инструмент BIM, позволяя создавать архитектурные модели через параметрические объекты. Верстак Arch зависит от других модулей, таких как Draft и Sketcher. Все инструменты Draft так же имеются в верстаке Arch, и большинство инструментов Arch используют вспомогательные системы Draft.
Типичный рабочий процесс с верстаками Arch и Draft может быть таким:
- Нарисовать набор лилий с помощью инструментаDraft Line
- Выбрать каждую линию и использовать инструмент Wall, чтобы создать стену на каждом из них
- Соединить стены, выбрав их и нажав на инструмент Arch Add
- Создать объект floor (пол), и поместить Ваши стены на него из древа проекта
- Создать объект building, и переместить ваш пол и в него из древа проекта
- Создать окно, нажав на инструмент Window, выбрать предустановки в его панели, затем нажать на поверхность стены
- Добавить размеры, сначала установив рабочую плоскость если необходимо, затем испольжуя инструмент Draft Dimension
В результате получится следующее:
Дальнейшее на странице Учебники (то же на английском).
Дополнения, макросы и сторонние верстаки
Принцип дополнений основан на разработке дополнений верстаков. Любой пользователь может разработать функцию, которая, по его или её мнению, отсутствует для нужд его/её, или даже сообщества. На форуме пользователь может запросить оценку, помощь форума. Он может поделиться, или нет, объектом его разработки, в соответствии с установленным им копирайтом. Это его выбор. Для разработки пользователю доступны функции для скриптов.
Есть два типа расширений:
- Макросы: небольшие отрезки кода Python, дающие дополнительные инструменты или функциональность. макросы обычно начинаются как способ упростить или автоматизировать задачи рисования или редактирования отдельных объектов. Если многие из этих макросов собраны в каталоге, весь каталог может распространяться как новый верстак.
- Сторонние верстаки: собрание инструментов, запрограммированных на Python или C++, которые существенно расширяют FreeCAD. Если верстак успешно разработан и хорошо документирован, он может быть включён одним из верстаков FreeCAD. На странице External workbenches можно найти принципы и список существующих библиотек.
Программирование
И в заключение, один из самых мощных свойств FreeCAD это скриптовое окружение. Из встроенной консоли python (или из любого другого внешнего скрипта python) можно получить доступ почти ко всем частям FreeCAD, создание и изменение геометрии, изменение отображения объектов на экране, а также доступ и изменение интерфейса. Скрипты могут быть использованы в макросах, с помощью которых легко создавать свои команды.
Что нового?
- Смотрите в заметках о выпусках детальный список возможностей.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Обзор
Каждый стиль навигации определяет собой методы для навигации в трёхмерном пространстве, а так же методы взаимодействия с трехмерными объектами (перемещение, вращение и т.п.). FreeCAD поддерживает несколько стилей навигации и управления. По умолчанию установлен CAD стиль навигации, он очень простой и практичный, но FreeCAD так же предлагает альтернативные стили навигации, которые вы можете выбрать по своим предпочтениям. Назначенный пользователем стиль навигации будет использоваться для всех верстаков.
Дополнительные сведения о способах выбора объектов см. в разделе Методы выбора объектов.
Дополнительные сведения о способах преобразования объектов см. на странице описания команды Преобразование.
Выбор стиля навигации
- Выполните одно из следующих действий:
- Нажмите на кнопку в Строке состояния.
- Щелкните правой кнопкой мыши в пустую область в 3D Виде, и выберите Стили навигации в контекстном меню.
- Откройте Редактор настроек через пункт главного меню Редактировать → Настройки... В нем выберите раздел Отображение → вкладку Навигация → пункт Трехмерная навигация.
- Выберите стиль из списка.
- При необходимости укажите стиль Ващения: нажмите на кнопку в Строке состояния и выберите в контекстом меню пункт Настройки → Вращение. Подробности см. в описании Редактора настроек.
- При необходимости укажите Режим вращения. Подробности см. в описании Редактора настроек.
- Если выбран стиль навигации CAD: при необходимости укажите параметр настроек Включить анимацию. Подробности см. в описании Редактора настроек.
Доступные стили навигации
With all navigation styles, unless selecting objects from a sketch in edit mode, you must hold Ctrl to select multiple objects.
Навигация Blender
Стиль навигации Blender основан на модели управления используемой в редакторе Blender.
Навигация CAD
Это стиль навигации по умолчанию и позволяет пользователю простейшее управление видом, не требуя использования клавиатуры, кроме как для множественного выделения.
Выбор | Перемещение | Масштабирование | Вращение обычное |
Вращение альтернативным методом |
---|---|---|---|---|
Нажмите левую кнопку мыши над объектом, который вы хотите выбрать.
При нажатии средней кнопки мыши вид центрируется по положению указателя. |
{{{Pan_text}}} | {{{Zoom_text}}} | Удерживая среднюю кнопку мыши, нажмите и удерживайте левую кнопку мыши, затем перемещайте указатель.
Если кнопки будут отпущены до того, как вы остановите движение мыши, Вид продолжит вращение, в случае если включен поворотный просмотр объекта. Двойное нажатие средней кнопкой мыши устанавливает новый центр вращения. |
Удерживая среднюю кнопку мыши, нажмите и удерживайте правую кнопку мыши, затем перемещайте указатель.
При этом методе средняя кнопка мыши может быть отпущена после того как правая кнопка осталась нажатой. Пользователи, использующие мышь правой рукой могут счесть этот метод проще исходного. |
Ctrl+ | Ctrl+Shift+ | Shift+ | ||
{{{Pan_mode_text}}} | Режим приближения: удерживая клавиши Ctrl и Shift, нажмите правую кнопку, и перемещайте указатель. | Режим вращения: удерживая клавишу Shift, нажмите правую кнопку мыши, затем перемещайте указатель. |
Навигация Gesture (Жестами)
Этот стиль был разработан специально для работы с сенсорным экраном с помощью стилуса или жестами. Тем не менее он также может применяться при управлении мышью, кроме того данный стиль управления рекомендуется использовать при управлении трекпадом в Mac.
Выбор | Перемещение | Масштабирование | Вращение | Наклонить вид | |
---|---|---|---|---|---|
Нажмите левую кнопку мыши над объектом, который хотите выбрать. | Удерживайте правую кнопку мыши и перемещайте указатель. | Используйте колёсико мыши для масштабирования. | Удерживайте левую кнопку мыши и тяните указатель.
В режиме Sketcher и некоторых других это действие заблокировано. Удерживайте Alt при нажатии кнопки мыши для перехода в режим вращения. Чтобы установить точку фокуса камеры для вращения, кликните новую точку средней кнопкой мыши. Взамен, нацельте указатель в новую точку и нажмите кнопку H на клавиатуре. |
Удерживайте левую и правую кнопку мыши и тяните указатель в сторону. | |
Коснитесь пальцем экрана для выбора. | Коснитесь экрана двумя пальцами и перемещайте их в нужном направлении.
Или, коснитесь экрана одним пальцем, удерживайте его некоторое время, а потом перемещайте в нужном направлении. Это равносильно перемещению с помощью правой кнопки мыши. |
Сдвиньте пальцы для масштабирования (т.е. потяните два пальца к/от друг друга). | Потяните одним пальцем для вращения.
Удерживайте вдобавок Alt в режиме Sketcher. |
Вращайте воображаемую линию между двумя точками касания.
Начиная с версии v0.18 этот метод по умолчанию отключён. Для разрешения Правка → Настройки → Отображение, и снимите метку "Отключить жест наклона для сенсорного экрана". |
Навигация Maya-Gesture (Жестами в стиле Maya)
В стиле навигации MayaGesture, перемещение, масштабирование и вращение Вида выполняется при зажатой клавише ALT и нажатии одной из трех кнопок мыши, поэтому этот стиль навигации полноценно можно использовать только с трехкнопочной мышью. В данном стиле также можно использовать жесты из обычного стиля навигации жестами, так как этот стиль был разработан на его основе.
Навигация OpenCascade
Стиль навигации OpenCascade основан на модели управления используемой в OpenCascade.
Навигация OpenInventor
Стиль навигации OpenInventor основан на модели управления используемой в редакторе Open Inventor. Для выбора объектов, необходимо удерживать нажатой клавишу Shift или Ctrl.
Данный стиль управления отличен от того, что применен в Autodesk Inventor.
Навигация OpenSCAD
Стиль навигации OpenSCAD основан на модели управления используемой в редакторе OpenSCAD.
version 0.21 and below Hold Ctrl and Shift when pressing the mouse button to drag an object in a sketch in edit mode. |Pan_text=Hold the right mouse button, then move the pointer. |Zoom_text=Hold the middle mouse button, then move the pointer. Alternatively, hold Shift and the right mouse button, then move the pointer. |Rotate_view_text=Hold the left mouse button, then move the pointer.
Alternatively, and when a sketch is in edit mode, hold the middle mouse button, then press and hold the right mouse button, then move the pointer. }}
Навигация Revit
Стиль навигации Revit основан на модели управления используемой в редакторе Revit.
Навигация TinkerCAD
Стиль навигации TinkerCAD основан на модели управления используемой в редакторе TinkerCAD.
Навигация Touchpad
В режиме навигации тачпадом, перемещение, масштабирование и вращение Вида требует использования вместе с тачпадом модифицирующих клавиш.
Поддержка оборудования
В FreeCAD так же поддерживает некоторые устройства 3D ввода.
Рекомендуемый стиль управления для MacOS
На MacBook с трекпадом навигация жестами работает хорошо, но жесты имеют особое значение:
- Масштабирование: касание и перемещение двумя пальцами.
- Вращение: касание и перемещение тремя пальцами.
- Перемещение: Ctrl + касание и перемещение тремя пальцами.
Разработка собственного стиля навигации
Руководство по добавлению нового стиля навигации с помощью мыши в FreeCAD ориентирует разработчиков, которые хотят разработать собственный стиль навигации с помощью мыши. Требуется знание синтаксиса C++.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Работа в FreeCAD
Структура документа FreeCAD
Документ FreeCAD содержит все объекты проекта. Он может содержать группы, и предметы, сделанные с любого инструментария(workbench). Поэтому вы можете переключаться между инструментариями, и до сих пор работать на том же документе. Получившийся документ будет сохранён на диске при сохранении работы. В FreeCAD, вы также можете открывать несколько документов одновременно и открыть несколько видов одного и того же документа.
В документе объекты могут быть помещены в группы и им можно присвоить уникальные имена. Управлять группами, объектами и именами объектов осуществляется главным образом с помощью древовидного списка. примечание: Также это можно сделать, как и всё в FreeCAD, с помощью интерпретатора Python. В древовидном списке вы можете создавать группы, перемещать объекты в группы, удалять объекты или группы, кликнув правой клавишей на объект в древовидном списке, переименуйте объекты. Также можно переименовать объект выделив его в древовидном списке и нажав F2, также возможны другие комбинации в зависимости от текущего инструментария.
Объекты входящие в FreeCAD документ могут быть различных типов. Каждый инструментарий может создать свои собственные типы объектов, для примера Верстак полигонального моделирования создаёт объекты состоящие из полигонов, Верстак Деталей создает детали, Чертежный Верстак также создаёт детали, и т.д.
Если есть по крайней мере один документ открытый в FreeCAD, всегда есть один и только один активный документ. Этот документ отображается в текущем окне 3D просмотра, это документ над которым вы сейчас работаете.
Приложения и интерфейс пользователя
Как почти все в FreeCAD, графический пользовательский интерфейс(GUI) отделен от основной части приложения(App). Также и с документами. Документы также состоят из двух частей: документ Приложение, содержащий ваши объекты, и документ как Вид, который содержит представление на экране наших объектов.
Думайте об этом как о двух местах, где определены ваши объекты. Их конструктивные параметры (это куб? конус? его размер?) хранятся в документе Приложении, а их графическое представление (отображать его в черных линиях? с синими гранями?) хранятся в части документ Вид. Зачем это сделано? Потому что FreeCAD может быть использован без графического интерфейса, например в других программах, и мы должны быть в состоянии управлять нашими объектами, даже если ничего не будет отображаться на экране.
Еще в части документа Вид содержатся объёмные виды. Один документ может иметь несколько открытых видов, так что вы можете просматривать ваш документ одновременно с нескольких точек зрения. Может быть вы хотели бы одновременно смотреть на ваш объект спереди и сверху? Тогда в вашем документе будет две части Вид документа. Создать новые виды или закрыть старые виды можно с помощью меню Вид или кликнув правой кнопкой мыши по закладке вида.
Программирование
Документы легко могут быть созданы и изменены с помощью интерпретатора Python. Например:
FreeCAD.ActiveDocument
Вернет текущий (активный) документ
FreeCAD.ActiveDocument.Blob
Даст доступ к объекту с именем "Blob" внутри вашего документа
FreeCADGui.ActiveDocument
Вернет вид-документ связаный с текущим документом
FreeCADGui.ActiveDocument.Blob
Получить доступ к графическому представлению (виду) объекта с именем Blob
FreeCADGui.ActiveDocument.ActiveView
Вернет текущий активный вид.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Настройка пользовательских предпочтений
Введение
Чтобы запустить Редактор настроек выберите пункт меню Правка → Настройки.... В Mac OS пункт Настройки... может находиться в меню FreeCAD (это типичное расположение для большинства приложений Mac).
FreeCAD использует концепцию верстаков, в которой каждый верстак отвечает за свои конкретные задачи и функции. Верстак может иметь свой собственный раздел с настройками. Раздел этот появляется в редакторе настроек только после того, как верстак был открыт (загружен) хотя-бы один раз после запуска FreeCAD. Подробнее об этом можно узнать в разделе Рабочее окружение.
To preserve resources, FreeCAD does not automatically load all available workbenches. See Workbenches for more information. For a list of workbench related preferences see Workbench related preferences.
Изначально в Редакторе настроек доступны четыре секции (даже если ни один верстак не был загружен). Это секции: Основные, Отображение, Рабочее окружение и Импорт/Экспорт. Верстаки которые могут быть загружены в процессе работы, имеют свою вкладку настроек и будут рассмотрены далее.
Обратите внимание, что нажатие кнопки Reset в левом нижнем углу диалога Настроек сбросит все настройки FreeCAD к значениям по умолчанию.
Некоторые дополнительные настройки можно изменить только в Редакторе параметров. На странице Точных настроек перечислены некоторые из них.
Основные
Этот раздел настроек имеет 9 вкладок: Основные, Документ, Выделение, Кэш, Редактор кода, Консоль Python, Просмотр отчёта, Макрос, Единицы измерения. И 10 вкладка "Помощь", будет добавлена если дополнение Помощь включено. Это дополнение может быть установлено через Менеджер дополнений.
In version 0.21 and below the seventh tab, Help, is only available if the Help Addon has been installed.
Основные
Вкладка Основные позволяет настроить следующие параметры:
Название | Описание |
---|---|
Изменить язык | Выберите язык пользовательского интерфейса FreeCAD |
Размер списка последних файлов | Укажите, сколько файлов должно быть указано в списке последних файлов. |
Включить фон из повторяющегося узора | Если этот флажок установлен, фон главного окна FreeCAD по умолчанию будет состоять из плиток этого изображения:
Optionally, imported files can be excluded from this list, and exported files can be included. See Fine-tuning. |
Enable tiled background | If checked, the background of FreeCAD's main window will by default consist of tiles of this image:
Этот параметр действует только в том случае, если Таблица стилей не выделенна. Изображение можно изменить, добавив папки Gui/Images в папку: %APPDATA%/FreeCAD (в Windows), $HOME/.FreeCAD (в Linux) или $HOME/Library/Preferences/FreeCAD (в MacOS). Поместите туда файл с именем background.png и включите/отключите этот параметр, чтобы увидеть измененный файл. |
Enable cursor blinking | If checked the text cursor in the Python console and the Macro editor will blink. |
Стиль интерфейса | Выбор стиля оформления. Стиль оформления определяют внешний вид пользовательского интерфейса FreeCAD. |
Размер значков на панелях инструментов | Выбор размера значков панели инструментов:
|
Режим отображения древовидного представления документа | Настройка отображения панели древовидного представления документа. Для того, чтобы настройки вступили в силу, требуется перезапуск FreeCAD. Возможны следующие варианты представления:
|
При запуске автоматически загружать верстак | Выбор того, какой верстак будет использоваться сразу после запуска FeeCAD |
Включение экрана-заставки при запуске | Если пункт выбран, при запуске отображается заставка FreeCAD.
Изображение экрана-заставки можно изменить, поместив файл с именем splash_image.png в папку Images, уже упомянутую в разделе Включить фон из повторяющегося узора. |
Включить перенос слов | Слова будут перенесены, когда они превысят доступное горизонтальное пространство в консоли Python. Эта консоль отображается с помощью меню Вид → Панели → Консоль Python. |
Документ
Вкладка Документ позволяет настроить следующие параметры:
Название | Описание |
---|---|
Создавать новый документ при запуске | Если отмечено, FreeCAD создаст новый документ при запуске |
Уровень сжатия сохраняемого документа | Спецификация уровня сжатия для файлов FCStd. Файлы FCStd являются сжатыми файлами ZIP. Поэтому вы можете переименовать их суффикс .FCStd в .zip и открыть их с помощью программы ZIP-архива. |
Отмены/Повторы | Если пункт выбран, все изменения в документах сохраняются, чтобы их можно было отменить/повторить. |
Максимум шагов отмен/повторов | Укажите, сколько шагов Отмена/Повтор нужно записать |
Разрешить отмену перерасчета | Allow to aborting the document recomputation by pressing Esc. This may slightly increase the recomputation time. |
Запуск автоматического восстановления при запуске | Если файл восстановления доступен, FreeCAD автоматически запустит восстановление файла при запуске. Таким образом, файлы могут быть восстановлены в случае сбоя. |
Автосохранение каждые | Определяет, как часто будет записывается файл автосохранния. |
Сохранить миниатюру в файл проекта при сохранении документа | Если пункт выбран, то при сохранении документа также будет сохранена его миниатюра. Например, миниатюра будет отображаться в списке последних файлов в Верстаке Start. It is possible to select a Size between 128×128 and 512×512 pixels for the thumbnail. Common sizes are the powers of two: 128, 256, 512. |
Добавить логотип программы в генерируемую миниатюру | Если пункт выбран, логотип программы FreeCAD будет добавлен к миниатюре. Этот параметр действует только в том случае, если используется Сохранить миниатюру в файл проекта при сохранении документа. |
Максимальное количество файлов резервных копий, при пересохранении документа | Если пункт выбран, файлы резервных копий будут сохраняться при сохранении документа. Вы можете указать количество сохраняемых файлов резервных копий. Они содержат ранее сохраненную версию документа. Первый файл резервной копии будет иметь суффикс файла .FCStd1, второй .FCStd2 и т.д. |
Use date and FCBak extension | If checked, backup files will get the extension .FCbak and their file names get a date suffix according to the specified date format. For a description of the date format see this site.
With the default settings the backup file will get for example this name TD-Cube.20200315-215654.FCBak (original filename is TD-Cube.FCStd). |
Разрешить идентичные метки объектов в одном документе | Если пункт выбран, объекты могут иметь одинаковую метку/имя. Например, разные части или элементы могут иметь одинаковое имя в одном и том же документе. |
Disable partial loading of external linked objects | Enable partial loading of external linked document. When enabled, only the referenced objects and their dependencies will be loaded when a linked document is auto opened together with the main document. A partially loaded document cannot be edited. Double click the document icon in the tree view to reload it in full. A more detailed explanation of the feature can be found on the Assembly3 documentation page |
Имя автора | Все документы, которые будут созданы, получат указанное имя автора. Оставьте поле автора пустым для анонимного автора. Если опция Устанавливать при сохранении отмечена, поле Last updated by будет установлено для указанного автора при сохранении файла. Это поле можно просмотреть с помощью меню Файл → Информация о проекте. |
Компания | Все документы, которые будут созданы, получат указанное название компании |
Лицензия по умолчанию | Выбор лицензии по умолчанию для новых документов. Для предопределенной лицензии URL-адрес лицензии будет автоматически установлен соответствующим образом. Выберите «Другое» для собственной или специальной лицензии. |
URL адрес лицензии | Указание URL-адреса, описывающего лицензию, выбранного в Лицензия по умолчанию |
Выделение
Вкладка Выделение (представлено в версии 0.19) позволяет настроить следующие параметры:
Название | Описание |
---|---|
Автопереключение в 3D вид, содержащий выбранный элемент | Включает/выключает опцию Синхронизировать вид |
Автоматический разворачивать элемент дерева при выделении соответствующего объекта в 3D виде | Включает/выключает опцию Синхронизировать выделение |
Выделить объект в режиме 3D при наведении курсора на элемент дерева | Включает/выключает опцию Предвыборка |
Записывать выделение в древе для перехода назад/вперед с помощью кнопки навигации | Включает/выключает опцию Записать выделение |
Добавить флажки для выделения в древе документов | Если пункт выбран, то каждый элемент древа документа получает флажок. Это к примеру может быть удобно для выбора нескольких элементов при работе на сенсорном экране. |
Кэш
These preferences are related to the cache directory where FreeCAD stores temporary files.
On the Cache tab (introduced in version 0.20) you can specify the following:
Name | Description |
---|---|
Location | Specifies the path of the cache directory. |
Check periodically at program start | Controls the frequency with which the directory size is checked. The options are:
|
Cache size limit | Specifies the maximum size of the directory. You will be notified if a check is performed and the size exceeds this value. The options are:
|
Current cache size | Shows the current size of the directory, if available. Press the Check now... button to update the value. |
Notification Area
These preferences control the Notification Area and its notifications.
On the Notification Area tab (introduced in version 0.21) you can specify the following:
Name | Description |
---|---|
Enable Notification Area | If checked, the Notification Area will appear in the status bar. |
Enable non-intrusive notifications | If checked, non-intrusive notifications will appear next to the Notification Area in the status bar. |
Errors | If checked, errors will appear in the Notification Area. |
Warnings | If checked, warnings will appear in the Notification Area. |
Maximum Duration | Maximum duration during which notifications are shown (unless mouse buttons are clicked). |
Minimum Duration | Minimum duration (idem). |
Maximum Number of Notifications | Maximum number of notifications shown simultaneously. |
Notification width | Width of the Notification Area in pixels. |
Hide when other window is activated | If checked, open notifications will disappear when another window is activated. |
Do not show when inactive | If checked, notifications will not appear if the FreeCAD window is not the active window. |
Maximum Messages (0 = no limit) | The maximum number of messages kept in the list. Set to 0 for no limit. |
Auto-remove User Notifications | If checked, notifications will be removed from the message list when the Maximum Duration has elapsed. |
Report view
Параметры вывода влияют на поведение Представление отчета. Эта панель отображается с помощью меню Вид → Панели → Отчет.
Вкладка Просмотр отчёта позволяет настроить следующие параметры:
Название | Описание |
---|---|
Выводить обычные сообщения (normal) | Если пункт выбран, обычные сообщения будут записываться в отчёт. Они будут выделены в отчёте цветом указанным в пункте Выделение сообщений → Обычные сообщения. |
Выводить информационные сообщения (log) | Если пункт выбран, то также будут отображаться информационные сообщения. Они будут выведены на панель Отчет цветом, установленным в Журнал (logs). Эта панель активируется с помощью меню Вид → Панели → Отчет. |
Выводить предупреждения (warnings) | Если пункт выбран, то предупреждения будут отображаться. Они будут выведены на панель Отчет цветом, установленным в Предупреждения (warnings). |
Выводить сообщения об ошибках (errors) | Если пункт выбран, то будут отображаться сообщения об ошибках. Они будут выведены на панель Отчет цветом, установленным в Ошибки (errors) |
Показать отчёт в случае ошибки | Если пункт выбран, то the Report view will be shown automatically when an error is recorded |
Показать отчёт в случае предупреждения | Если пункт выбран, то the Report view will be shown automatically when a warning is recorded |
Показать отчет при выводе обычного сообщения | Если пункт выбран, то the Report view will be shown automatically when a normal message is recorded |
Показать отчёт в журнале | Если пункт выбран, то the Report view will be shown automatically when a log message is recorded |
Включить код времени для каждой записи | Если пункт выбран, то each message and warning will receive a timecode |
Обычные сообщения (normal) | Задание цвета шрифта для обычных сообщений на панели Отчет. |
Информационные сообщения (log) | Задание цвета шрифта для сообщений журнала на панели Отчет. |
Предупреждения (warnings) | Задание цвета шрифта для предупреждающих сообщений на панели Отчет. |
Сообщения об Ошибках (errors) | Задание цвета шрифта для сообщений об ошибках на панели Отчет.
|
Перенаправлять внутренний вывод Python в отчёт | Если пункт выбран, то внутренний вывод Python будет перенаправляться из консоли Python в отчёт |
Перенаправлять внутренние сообщения об ошибках Python в отчёт | Если пункт выбран, то внутренние сообщения об ошибках Python будут перенаправляться из консоли Python в отчёт |
Справка
On the Help tab you can specify the following:
Name | Description |
---|---|
Help location | Specifies the location of the Help files. The options are:
|
Display | Specifies where the documentation should be displayed. The options are:
|
Custom stylesheet | Specifies an optional custom stylesheet. Not used for the Wiki URL. |
Отображение
Этот раздел настроек имеет три стандартные вкладки: 3D Вид, Навигация и Цвета. Четвертая вкладка, Отображение Mesh, добавляется, если верстак Mesh был загружен.
3D Вид
Вкладка 3D Вид позволяет настроить следующие параметры:
Название | Описание |
---|---|
Показывать систему координат в углу | Если пункт выбран, то основная система координат всегда будет отображаться в правом нижнем углу в открытых файлах |
Показывать перекрестие осей по умолчанию представлено в версии 0.19 | Если пункт выбран, то пересечение осей будет показано по умолчанию при создании или открытии файла |
Показывать счетчик кадров в секунду | Если пункт выбран, то время, необходимое для последней операции, и полученная частота кадров [2] всегда будут отображаться в нижнем левом углу в открытых файлах. |
Запомнить активный верстак вкладкой представлено в версии 0.19 | Если пункт выбран, то приложение запомнит текущий активный верстак для независимо каждой вкладки в Main view area. При переключении на вкладку этот верстак будет автоматически восстановлен. |
Использовать програмное обеспечение OpenGL представлено в версии 0.19 | Если пункт выбран, то OpenGL will use the CPU instead of the GPU. This option is useful for troubleshooting graphics card and driver problems. Changing this option requires a restart of the application. |
Использовать OpenGL VBO (объекты буфера вершин) | Если пункт выбран, то будут использоваться объекты буфера вершин (VBO). VBO - это функция OpenGL, которая предоставляет методы для загрузки данных вершин (положение, вектор нормали, цвет и т.д.) на видеокарту. VBO обеспечивает существенный выигрыш в производительности, потому что данные находятся в графической памяти, а не в системной памяти, и поэтому они могут отображаться непосредственно графическим процессором. Для получения дополнительной информации см. эту веб-страницу. |
Кэш рендера представлено в версии 0.19 | "Кэш рендера" или "Render Acceleration" is explained in more detail in Link#render-caching. There are 3 options:
|
Сглаживание | Выбор используемого типа Multisample сглаживания |
Прозрачные объекты представлено в версии 0.19 | Render type of transparent objects. The types are:
|
Размер метки | Выбор размера вершины (точки) в верстаке Sketcher. The clickable area of points can be additionally enlarged by increasing Pick radius (on Colors tab). |
Расстояние между глаз для стерео режима | Спецификация расстояния между глазами, используемого для стереопроекции. Указанное значение является коэффициентом, который будет умножен на размер ограничивающего прямоугольника трехмерного объекта, который отображается в данный момент. |
Цвет подсветки | Если пункт выбран, то подсветка включена с заданным цветом. Backlight is used for rendering back sides of faces (usually, you don't see them in solids, unless you slice one with a clipping plane, or if the faces aren't oriented correctly). It is only active for objects whose Lighting property (on View tab) is set to "One side". If disabled, back sides of faces of objects in "One side" lighting mode will be black.
The related Intensity setting specifies the intensity of the backlight. |
Тип камеры | Выбор типа проекции камеры. |
Навигация
Вкладка Навигация позволяет настроить следующие параметры:
Название | Описание |
---|---|
Куб навигации | Если значение установлено, то Навигационный куб будет отображаться.
Шаги вращения Определяет количество шагов требуемых для полного оборота навигационного куба при использовании стрелок поворота. Если Поворачивать к ближайшему включенно, the 3D view is rotated to the nearest most logical state when a cube face is clicked. When it is off, clicking to a cube face will and up always to the same position, no matter in what cube state you were when you clicked the face. представлено в версии 0.20 Размер куба Определяет размер навигационного куба. представлено в версии 0.20 |
Трехмерная навигация | Selection of a navigation settings set. To see what each set defines, select it and then press the Mouse... button. |
Стиль вращения | Selection of the rotation orbit style. When viewing a part in the x-y plane and being in the rotation mode of the 3D navigation, the difference is: If Trackball is selected, moving the mouse horizontally will rotate the part around the y-axis, if Turntable is selected the part will be rotated around the z-axis. |
Режим вращения | Определяет центр вращения. Можно выбрать Центр окна, Перенести к курсору или Центр объекта. |
Ориентация камеры по умолчанию | Selection of the camera orientation for new documents. This setting is also used by the Std ViewHome command. |
Масштаб нового документа | Affects the initial camera zoom level for new documents. The value you set is the diameter of a sphere that fits in 3D view. Default is 100 mm. It also sets the initial size of origin features (base planes in new PartDesign Bodies). |
Включить анимацию | If checked, rotations can be animated. If for example the 3D Navigation set CAD is used and the mouse is moved while the scroll wheel and the right mouse button are pressed, parts are rotated. If one keeps the mouse moving while releasing e.g. the right mouse button, the rotation will continue as animation. To end the animation left-click with the mouse. |
Зум туда, где мышь | If checked, zoom operations will be performed at the position of the mouse pointer. Otherwise zoom operations will be performed at the center of the current view. The Zoom step defines how much will be zoomed. A zoom step of 1 means a factor of 7.5 for every zoom step. |
Инвертировать зум | If checked, the direction of zoom operations will be inverted |
Отключить жест наклона для сенсорного экрана | If checked, the tilting gesture will be disabled for pinch-zooming (two-finger zooming). This only affects the 3D Navigation set Gesture. |
Color sets the base color for all elements. introduced in version 0.21
Угол Определяет место положение Навигационного куба на экране.
Font name specifies the font used for the cube's texts. introduced in version 0.21
Font size sets the size of the font used for the cube's texts. introduced in version 0.21
|- | 3D Navigation | Specifies a mouse navigation style. To see the details of each style, select it and then press the Mouse... button. |- | Orbit style | Specifies the rotation orbit style used when in rotation mode. The options are:
- Turntable: Moving the mouse will divide the rotation in steps, rotations around the different axes are performed sequentially.
- Trackball: Rotations around the different axes are performed simultaneously.
- Free Turntable: Like Trackball, but if possible the rotation axis is kept collinear with the global 3D view axis. introduced in version 0.21
|- | Rotation mode | Defines the rotation center. The options are:
- Window center
- Drag at cursor
- Object center
|- | Default camera orientation | Specifies the camera orientation for new documents. This setting is also used by the Std ViewHome command. |- | Camera zoom | Affects the initial camera zoom level for new documents. The value you set is the diameter of a sphere that fits in 3D view. The default is 100 mm. It also sets the initial size of origin features (base planes in new PartDesign Bodies and Std Parts). |- | Enable animation | If checked, and 3D Navigation is set to CAD, rotations can be animated. If the mouse is moved while the scroll wheel and the right mouse button are pressed, the view is rotated. If one keeps the mouse moving while releasing the right mouse button, the rotation will continue. To end this animation left-click with the mouse. |- | Zoom at cursor | If checked, zoom operations will be performed at the position of the mouse pointer. Otherwise zoom operations will be performed at the center of the current view. The Zoom step defines how much will be zoomed. A zoom step of 1 means a factor of 7.5 for every zoom step. |- | Invert zoom | If checked, the direction of zoom operations will be inverted. |- | Disable touchscreen tilt gesture | If checked, and 3D Navigation is set to Gesture, the tilting gesture will be disabled for pinch-zooming (two-finger zooming). |- | Enable rotation center indication | If checked, the rotation center of the view is shown when dragging. introduced in version 0.22 |}
Цвета
Вкладка Цвета позволяет настроить следующие параметры:
Название | Описание |
---|---|
Включить подсвечивание при наведении курсора | Если этот флажок установлен, предварительный выбор включен и будет выделен указанным цветом. Предварительный выбор означает, что, например, ребра в деталях будут выделены при наведении курсора на них, чтобы указать, что они могут быть выбраны. |
Включить подсвечивание выделенного | Если флажок установлен, подсветка выделения включена и для нее будет использоваться указанный цвет |
Один цвет | Если пункт выбран, то фон 3D Вида для деталей будет иметь выбранный цвет |
Цветовой градиент | Если пункт выбран, то фон 3D Вида для деталей будет иметь выбранный вертикальный цветовой градиент. Первый цвет будет цветом верха фона, второй будет цветом низа. |
Средний цвет | Доступно только если выбрано Цветовой градиент. Если этот флажок установлен, цветовой градиент получит выбранный цвет как средний цвет. |
Объект редактируется | Выбор цвета фона для объектов в виде дерева, которые в данный момент редактируются |
Активный контейнер | Выбор цвета фона для активных контейнеров в виде дерева. Например, если в древовидном представлении есть несколько частей и одна часть переключается как активное тело, она получит выбранный цвет фона в древовидном представлении. |
Просмотр в виде полигональной сетки
Данная вкладка становится доступной, только после загрузки Верстака Mesh.
Вкладка Просмотр в виде полигональной сетки позволяет настроить следующие параметры:
Название | Описание |
---|---|
Цвет полигональной сетки по умолчанию | Определяет цвет полигонов полигональной сетки по умолчанию |
Цвет линии по умолчанию | Определяет цвет линий полигональной сетки по умолчанию |
Прозрачность полигональной сетки | Определяет прозрачность полигонов полигональной сетки по умолчанию |
Прозрачность линии | Определяет прозрачность линий полигонов полигональной сетки по умолчанию |
Двустороннее отображение | Если пункт выбран, цвет внутренних сторон граней будет таким же, как и на внешней стороне. Иначе внутренние стороны граней будут подсвечены цветом подсветки или будут отображены просто черным цветом если подсветка будет отключена. |
Отображать границы габаритных размеров для подсвеченных или выбранных полигональных сеток | Если пункт выбран, тогда будет отображаться желтый прямоугольный каркас отображающий границы габаритных размеров для подсвеченных или выбранных полигональных сеток. |
Задавать нормаль для каждой вершины | Если пункт выбран, тогда вместо плоского затенения будет применяться затенение по Фонгу. Тип затенения определяет внешний вид поверхностей. При плоском затенении нормали поверхности не определяются для каждой вершины. Это приводит к нереалистичному внешнему виду криволинейных поверхностей. В то время, как затенение по Фонгу приводит к более реалистичному внешнему виду. |
Угол сгиба | Угол сгиба-это пороговый угол между двумя гранями. Он может быть установлен только в том случае, если включена опция: задавать нормаль доля каждой вершины.
|
Рабочее окружение
В этом разделе настроек есть одна вкладка: Доступные верстаки.
Доступные Верстаки
These preferences control workbench loading.
On the Available Workbenches tab you can specify the following:
Name | Description |
---|---|
Workbench list | The list displays all installed workbenches. The list can be reordered by drag and drop (introduced in version 0.21) and sorted by right-clicking the list and selecting Sort alphabetically (introduced in version 0.22). The order of the list also determines the order of the Workbench selector.
|
Start up workbench | The workbench that is activated when FreeCAD starts. |
Workbench selector position introduced in version 0.21 | Defines where the Workbench selector appears. The options are:
|
Remember active workbench by tab | If checked, FreeCAD will remember and restore the workbench that was active for each tab in the Main view area. |
Python
This preferences section (introduced in version 0.21) has three tabs: Macro, Python console and Editor.
Макрос
Вкладка Макрос позволяет настроить следующие параметры:
Название | Описание |
---|---|
Запуск макросов в локальном окружении | Если параметр включен, переменные, определенные макросами, создаются как локальные переменные, в противном случае они создаются как глобальные переменные Python |
Куда записывать макросы | Путь к папке в которой находятся макросы |
Записать команды интерфейса | Если параметр включен, записанные макросы также будет содержать команды интерфейса пользователя |
Записывать как комментарий | Если параметр включен, записанные макросы также будет содержать команды интерфейса пользователя, но в виде комментариев. Это полезно, если вы не хотите выполнять видимые действия при запуске макроса, а видеть, что можно сделать визуально. |
Показать команды скрипта в консоли Python | Если параметр включен, команды, выполняемые макросами, отображаются в консоли Python. Эта консоль отображается с помощью меню Вид → Панели → Консоль Python. |
Размер списка недавних макросов | Значение определяет длину списка недавно открытых макросов. |
Количество ярлыков | Значение определяет длину списка недавно открытых макросов которые можно запустить с помощью комбинации клавиш |
Комбинация клавиш | Определяет, какая комбинация клавиш клавиатуры используются для запуска макросов, например если значение равно Ctrl+Shift+ это означает что маеросы можно запустить с помощью комбинаций клавиш Ctrl+Shift+1, Ctrl+Shift+2 и так далее. |
Консоль Python
These preferences control the behavior of the Python console. This console can be opened using the View → Panels → Python console menu option.
Note that the color and font settings for the console are defined on the Editor tab.
On the Python console tab (introduced in version 0.20) you can specify the following:
Name | Description |
---|---|
Enable word wrap | If checked, words will be wrapped if they exceed the available horizontal space in the console. |
Enable block cursor | If checked, the cursor will have a block shape. |
Save history | If checked, Python history is saved across sessions. |
Редактор кода
Настройки предпочтений редактора влияют на поведение редактора макросов. Этот редактор можно открыть с помощью меню Макрос → Макросы... → Редактировать/Создать.
Настройки цвета и шрифта также оказывают влияние на консоль Python. Эта консоль отображается с помощью меню Вид → Панели → Консоль Python.
Вкладка Редактор кода позволяет настроить следующие параметры:
Название | Описание |
---|---|
Показывать номера строк | Если пункт выбран, то строки кода будут пронумерованы |
Шаг табуляции | Определение шага табулятора (количество пробелов). Если, например, установлено значение «6», при нажатии Tab будет выполнен переход к символу 7, 13, 19 и т.д., в зависимости от текущей позиции курсора. Этот параметр используется только в том случае, если выбран Символы табуляции. |
Размер отступа | Указывает, сколько пробелов будет вставлено при нажатии Tab. Этот параметр используется только в том случае, если выбран Заменять на пробелы. |
Символы табуляции | Если пункт выбран, то нажатие Tab вставит табулятор с растром, определяемым Шаг табуляции |
Заменять на пробелы | Если пункт выбран, то нажатие Tab вставит количество пробелов, определяемых Размер отступа |
Показать пункты | Выбор типа кода. Настройки цвета и шрифта будут применены к выбранному типу. Результат можно проверить в окне "Предпросмотр". |
Шрифт | Выбор типа шрифта, который должен использоваться для выбранного типа кода |
Размер | Выбор размера шрифта, который должен использоваться для выбранного типа кода |
Цвет | Определение цвета, который должен использоваться для выбранного типа кода |
Менеджер Дополнений
This preferences section has a single tab: Addon manager options.
Настройки менеджера дополнений
These preferences control the behavior of the Addon manager.
On the Addon manager options tab (introduced in version 0.20) you can specify the following:
Name | Description |
---|---|
Automatically check for updates at start (requires git) | If checked, the Addon manager will check for updates when it is launched. Git must be installed for this to work. |
Download Macro metadata (approximately 10MB) | If checked, macro metadata is downloaded for display in the Addon manager's main addon listing. This data is cached locally. |
Cache update frequency | Controls the frequency with which the locally cached addon availability and metadata information is updated. The options are:
|
Hide Addons marked Python 2 Only | If checked, addons marked as "Python 2 Only" are not included in the listing. These addons are unlikely to work in the current FreeCAD version. |
Hide Addons marked Obsolete | If checked, addons marked as "Obsolete" are not included in the listing. |
Hide Addons that require a newer version of FreeCAD | If checked, addons that require a newer FreeCAD version are not included in the listing. |
Custom repositories | Custom repositories can be specified here.
To add a repository press the button. Both the Repository URL and the Branch, typically To remove a repository select it in the list and press the button. introduced in version 0.21 |
Proxy | The Addon manager includes experimental support for proxies requiring authentication, set up as user-defined proxies. |
Python executable (optional) | The Addon manager attempts to determine the Python executable that should be used for the automatic pip-based installation of Python dependencies. To override this selection, the path to the executable can be set here. |
git executable (optional) | The Addon manager attempts to determine the git executable. To override this selection, the path to the executable can be set here. introduced in version 0.21 |
Show option to change branches (requires git) | If checked, the Addon manager provides an interface on the addon's details screen that allows switching which git branch is currently checked out. This is intended for advanced users only, as it is possible that a non-primary-branch version of an addon may result in instability and compatibility issues. Git must be installed for this to work. Use with caution. |
Disable git (fall back to ZIP downloads only) | If checked, git downloads are disabled. introduced in version 0.21 |
Addon developer mode | If checked, Addon manager options intended for developers of addons are activated. introduced in version 0.21 |
Импорт/Экспорт
The Import-Export preferences affect how files are imported and exported. They are described on the Import Export Preferences page.
Настройки верстаков
Настройки для более распространенных верстаков приведены ниже. У некоторых верстаков нет настроек. Другие дополнительные верстаки могут быть не перечислены. Эти ссылки так же перечислены в Category:Preferences
- Настройки Arch
- Настройки Draft
- Drawing Preferences (none) упразднено в версии 0.16
- Настройки FEM
- Настройки Image (нет)
- Настройки Inspection (нет)
- Настройки Mesh Design (нет)
- Настройки OpenSCAD
- Настройки Part : верстак Part так же использует настройки верстака PartDesign
- Настройки PartDesign
- Настройки Path
- Настройки Plot (нет)
- Настройки Points (нет)
- Настройки Raytracing
- Настройки Reverse Engineering (нет)
- Настройки Robot (нет)
- Настройки Sketcher
- Настройки Spreadsheet (нет)
- Настройки Стартовой страницы
- Настройки Surface (нет)
- Настройки TechDraw
- Настройки Test Framework (нет)
- Настройки Web (нет)
Программирование
См. так же: Основы составления скриптов в FreeCAD.
For a scripting example see Std DlgParameter.
Сопутствующая информация
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Настройка интерфейса
Введение
Интерфейс FreeCAD базируется на современном инструментарии Qt, и имеет современную организацию. Некоторые аспекты интерфейса могут быть настроены. Вы можете, например, добавить пользовательские панели инструментов с инструментами из нескольких рабочих мест или инструментами, определенными в макросах, и вы можете создавать свои собственные сочетания клавиш. Не могут быть изменены меню и панели инструментов по умолчанию, которые поставляются с FreeCAD и его верстаками.
introduced in version 0.21: The Workbenches tab is no longer available. Its functionality has been moved to the Available Workbenches tab in the Workbenches section of the Preferences Editor.
Диалоговое окно настройки
Применение
- The commands available in the Customize dialog box depend on the workbenches that have been loaded in the current FreeCAD session. So you should first load all workbenches whose commands you want to have access to.
- There are several ways to invoke the Std DlgCustomize command:
- The Customize dialog box opens. For more information see Options.
- The Help button starts the Std WhatsThis command.
- Press the Close button to close the dialog box.
Опции
In the Customize dialog box the following tabs are available:
Клавиатура
Вкладка "Клавиатура"
On this tab custom keyboard shortcuts can be defined. Shortcuts for macro commands can be defined on the Macros tab.
Search
You can search for commands by entering at least 3 characters of their menu text or name in the search field. The search is case-insensitive.
It is also possible to search for shortcuts:
- In the search field special keys in shortcuts must be entered as strings. For example to search for commands that use Ctrl in their shortcut enter
ctrl
(4 letters). - Add parenthesis to search for single character shortcuts, for example:
(c)
. - Add a comma and space between the characters of multi-character shortcuts, for example:
g, b, b
.
Добавление пользовательской комбинации клавиш
- Select a command category from the Category dropdown list.
- Select a command from the Commands panel.
- Optionally click the
Command
,Shortcut
orDefault
column headings to reorder the list. - Optionally drag the splitter to the right of the panel to resize it.
- Optionally click the
- The Current shortcut box displays the current short cut, if available.
- Enter a new shortcut in the New shortcut input box. Shortcuts can be up to 4 inputs long. Each input is either a single character, a combination of one or more special keys or a combination of one or more special keys and a character. Use Backspace to correct mistakes.
- Other active commands (see Notes) that already use the shortcut will be listed in the Shortcut priority list.
- Press the Assign button to assign the new shortcut.
- If the Shortcut priority list contains more than one command: optionally change its order by selecting individual commands and pressing the Up button or the Down button. If active commands share the same shortcut, the shortcut will trigger the one that is highest in the list.
Remove a shortcut
- Select a command category from the Category dropdown list.
- Select a command from the Commands panel.
- Press the Clear button.
Restore a default shortcut
- Select a command category from the Category dropdown list.
- Select a command from the Commands panel.
- Press the Reset button.
Restore all default shortcuts
- Нажмите на кнопку Reset All.
Notes
- Shortcuts only work for active commands. Active commands are commands that appear in the standard menu, or in the menu of the active workbench, or commands that appear in a visible toolbar.
Панели инструментов
Вкладка "Панели инструментов"
На этой вкладке можно создать и изменить специальные панели инструментов.
Search
See Keyboard.
Выбор верстака
- In the dropdown list on the right select the workbench whose custom toolbars you want to modify. The
Global
option is there for custom toolbars that should be available in all workbenches.
Создание панели инструментов
- Press the New... button.
- Enter a name in the dialog box that opens.
- Press the OK button.
- The new toolbar will appear in the panel on the right.
Переименование панели инструментов
- Select a toolbar in the panel on the right.
- Press the Rename... button.
- Enter a new name in the dialog box that opens.
- Press the OK button.
Удаление панели инструментов
- Select a toolbar in the panel on the right.
- Press the Delete button.
Disable a toolbar
- Uncheck the checkbox in front of the toolbar name in the panel on the right.
- A disabled toolbar will be invisible in the FreeCAD interface.
Добавление команды
- At least one custom toolbar is required. See Create a toolbar.
- Select the correct toolbar in the panel on the right. If no toolbar is selected, the command will be added to the first toolbar in the list.
- Select a command category from the Category dropdown list. Macro commands that have been set up on the Macros tab appear in the
Macros
category. - Select a command from the Commands panel, or select
<Separator>
to add a separator (a line between two toolbar buttons).- Optionally drag the splitter to the right of the panel to resize it.
- Press button.
Переименовывание команды
Изменение расположения команд на панели инструментов
- If required, expand the toolbar in the panel on the right.
- Select a command.
- Press the button or the button.
- Optionally repeat this until the command is in the correct position.
Notes
- Toolbars belonging to the current workbench are updated immediately, but after disabling/re-enabling a toolbar a workbench change is required (switch to a different workbench and then switch back).
- To update global toolbars a workbench change (if commands have been added or removed) or a restart (if the order of a toolbar has changed or a toolbar was renamed) is required.
Макросы
Вкладка "Макросы"
On this tab macro commands can be set up. Once set up, they can be added to custom toolbars. Macros installed with the Addon Manager are set up automatically, and added to a Global
toolbar (see Toolbars), if you confirm the Add button popup during the installation process.
If you want to use a macro downloaded from a different source you will have to install it manually. See How to install macros for more information. Note that FreeCAD uses a dedicated folder for macros and only macros in that folder can be set up. Use the Std DlgMacroExecute command to find this folder on your system.
Добавление макро команды
- In the Macro dropdown list select a macro.
- Enter a Menu text. This will be the name used to identify the macro command and will also appear in the toolbar if there is no icon.
- Optionally enter a Tool tip. This text will appear near the location of the mouse when you hover the toolbar icon.
- Optionally enter a Status text. This text will appear in the status bar when you hover the toolbar icon.
- Optionally enter the wiki page for the macro, if available, in the What's this input box. Enter the page name, not the full URL.
- Optionally enter a shortcut in the Accelerator input box. See Keyboard for more information.
- To add an icon:
- Press the Pixmap ... button.
- The Choose Icon dialog box opens.
- If required press the Icon folders... button to add an icon folder.
- Select an icon from the panel. The Choose Icon dialog box closes automatically.
- Press the Add button.
- The macro command appears in the panel on the left.
- The macro command can now be selected on the Toolbars tab.
Переименовывание макро команды
- Select the macro command in the panel on the left.
- Press the Remove button.
Изменение макро команды
- Double-click the macro command in the panel on the left.
- Make the required changes. Note that you cannot remove the icon, you can only replace it.
- Press the Replace button.
Spaceball Motion
This tab is blank if no Spaceball is detected. See: 3Dconnexion input devices.
Spaceball Buttons
This tab is blank if no Spaceball is detected. See: 3Dconnexion input devices.
Темы
FreeCAD supports complete theming of the interface, via .qss stylesheets. The qss format is very similar to the css format used in web pages, it basically adds methods to reference the different widgets and elements of the Qt interface. You can change the default theme (which simply takes the style defined by your desktop system) by selecting a style sheet in the FreeCAD preferences.
You can also create your own theme if you are not satisfied with the themes that are bundled with FreeCAD, for example by editing an existing style sheet. Your new style must be placed in a specific folder for it to be found by FreeCAD:
- %APPDATA%/FreeCAD/Gui/Stylesheets (on Windows). The %APPDATA% folder can be retrieved by entering
App.getUserAppDataDir()
in the Python console. - $HOME/.FreeCAD/Gui/Stylesheets (on Linux).
- $HOME/Library/Application Support/FreeCAD/Gui/Stylesheets (on macOS).
Дополнения
Addons from the Addon Manager offer yet another way to customize the user interface. Several Preference Packs to change the theme are available.
In the Workbenches category of the Addon Manager some addons by user triplus can be found:
- https://github.com/triplus/CubeMenu (for version 0.20 and below)
- https://github.com/triplus/Glass.
- https://github.com/triplus/IconThemes
- https://github.com/triplus/Launcher
- https://github.com/triplus/PieMenu
- https://github.com/triplus/RemBench
- https://github.com/triplus/ShortCuts
- Стандартное меню: Файл, Правка, Вид, Инструменты, Макросы, Окна, Справка
- Структура: Std Part, Std Group, Std LinkMake
- Файл: Создать, Открыть, Закрыть, Закрыть всё, Сохранить, Сохранить как, Сохранить копию, Сохранить всё, Вернуться, Импортировать, Экспортировать, Объединить проект, Информация о проекте, Печать, Предварительный просмотр, Экспортировать в PDF, Недавние файлы, Выход
- Правка: Отменить, Вернуть, Вырезать, Копировать, Вставить, Дублировать выбранное, Обновить, Выделить область, Box element selection, Выбрать всё, Удалить, Расположение, Выравнивание, Редактировать/закончить редактирование, Настройки
- Вид: Создать новый вид, Ортогональная проекция, Перспективная проекция, На весь экран, Стандартные виды (Уместить всё, Уместить выделенное, Isometric, Dimetric, Trimetric, Спереди, Сверху, Справа, Сзади, Снизу, Слева, Повернуть влево, Повернуть вправо), Freeze display (Save views, Load views, Freeze view, Clear views), Стиль представления (Как есть, Плоские линии, Shaded, Каркас, Точки, Скрытые линии, Без затенения), Bounding box, Стерео (Стерео красный/голубой, Четверная буферизация стерео, Стерео с чередованием строк, Стерео с чередованием столбцов, Выключить стерео, Выводить положения камеры), Масштаб (Увеличить, Уменьшить, Увеличить область), Окно документа (Закреплённое, Откреплённое, На весь экран), Показать/скрыть оси координат, Плоскость сечения, Текстурирование, Видимость (Видимость, Показать выделенные, Скрыть выделенные, Выбрать видимые объекты, Инвертировать все видимости, Показать все объекты, Скрыть все объекты, Откл/вкл выделяемость, Показывать замеры, Удалить замер), Навигация/редактирование, Внешний вид, Случайный цвет, Верстак, Панели инструментов (Файл, Верстак, Макрос, Вид, Структура, Навигация), Панели (Отчёт, Иерархия документа, Окно свойств, Просмотр выделения, Комбо панель, Консоль Python, DAG view), Tree view actions (Sync view, Sync selection, Sync placement, Pre-selection, Record selection, Single document, Multi document, Collapse/expand, Initiate dragging, Go to selection), Строка состояния
- Инструменты: Редактор параметров, Сохранить изображение, Инспектор сцены, Граф зависимостей, Project utility, Измерить расстояние, Text document, Поворотный просмотр, Конвертор величин, Настройка, Addon manager
- Макросы: Запись макроса, Остановить запись макроса, Макрос, Выполнить макрос, Отладка макросов, Остановить отладку, Шаг с обходом, Шаг с заходом, Установить/снять точку останова
- Окна: Следующее, Предыдущее, Плиткой, Каскадом, Окна
- Справка: Справка, Сайт FreeCAD, Пользовательская документация, Документация по созданию скриптов на Python, Автоматически сгенерированная документация Python, Форум FreeCAD, FreeCAD ЧаВо, О FreeCAD, Что это?
- Preferences Editor, Interface Customization
- Главное окно: Standard menu, Main view area, 3D view, Combo view (Tree view, Task panel, Property editor), Selection view, Report view, Python console, Status bar, DAG view, Workbench Selector
- Дополнительные окна: Scene inspector, Dependency graph
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Свойства объекта
Introduction
Свойство - это доля информации вроде числа или строки текста, прилагаемая к документу FreeCAD или объекту в нём. Свойства могут быть просмотрены и - если это разрешено - изменены с помощью редактора свойств.
Свойства играю важную роль в FreeCAD, поскольку он с самого начала создан для работы с параметрическими объектами, которые есть объекты, определяемые только их свойствами.
Пользовательские параметрические объекты в FreeCAD могут обладать свойствами следующих типов:
Boolean Float FloatList FloatConstraint Angle Distance Integer IntegerConstraint Percent Enumeration IntegerList String StringList Link LinkList Matrix Vector VectorList Placement PlacementLink Color ColorList Material Path File FileIncluded PartShape FilletContour Circle
Properties play a very important role in FreeCAD. As objects in FreeCAD are "parametric", this means that their behavior is defined by their properties, and how these properties are used as input for their class methods. See also FeaturePython Custom Properties and PropertyLink: InList and OutList
All property types
Custom scripted objects can use any of the property types defined in the base system:
Name | Unit (if any) | Remark |
---|---|---|
Acceleration | m/s^2 | |
AmountOfSubstance | mol | |
Angle | ° | |
Area | m^2 | |
Bool | ||
BoolList | ||
Color | ||
ColorList | ||
CurrentDensity | A/m^2 | introduced in version 0.21 |
Density | kg/m^3 | |
Direction | ||
DissipationRate | m^2/s^3 | introduced in version 0.21 |
Distance | m | |
DynamicViscosity | Pa*s | introduced in version 0.21 |
ElectricalCapacitance | F | introduced in version 0.21 |
ElectricalConductance | S | introduced in version 0.21 |
ElectricalConductivity | S/m | introduced in version 0.21 |
ElectricalInductance | H | introduced in version 0.21 |
ElectricalResistance | Ohm | introduced in version 0.21 |
ElectricCharge | C | introduced in version 0.21 |
ElectricCurrent | A | introduced in version 0.21 |
ElectricPotential | V | introduced in version 0.20 |
Enumeration | ||
ExpressionEngine | ||
File | ||
FileIncluded | ||
Float | ||
FloatConstraint | ||
FloatList | ||
Font | ||
Force | N | |
Frequency | Hz | |
HeatFlux | W/m^2 | introduced in version 0.21 |
Integer | ||
IntegerConstraint | ||
IntegerList | ||
IntegerSet | ||
InverseArea | 1/m^2 | introduced in version 0.21 |
InverseLength | 1/m | introduced in version 0.21 |
InverseVolume | 1/m^3 | introduced in version 0.21 |
KinematicViscosity | m^2/s | introduced in version 0.21 |
Length | m | |
Link | ||
LinkChild | ||
LinkGlobal | ||
LinkHidden | ||
LinkList | ||
LinkListChild | ||
LinkListGlobal | ||
LinkListHidden | ||
LinkSub | ||
LinkSubChild | ||
LinkSubGlobal | ||
LinkSubHidden | ||
LinkSubList | ||
LinkSubListChild | ||
LinkSubListGlobal | ||
LinkSubListHidden | ||
LuminousIntensity | cd | introduced in version 0.21 |
MagneticFieldStrength | A/m | introduced in version 0.21 |
MagneticFlux | Wb or V*s | introduced in version 0.21 |
MagneticFluxDensity | T | introduced in version 0.21 |
Magnetization | A/m | introduced in version 0.21 |
Map | ||
Mass | kg | introduced in version 0.21 |
Material | ||
MaterialList | ||
Matrix | ||
PartShape | a Part property, is accessed asPart::PropertyPartShape
| |
Path | ||
Percent | ||
PersistentObject | ||
Placement | ||
PlacementLink | ||
PlacementList | ||
Position | ||
Power | W | introduced in version 0.21 |
Precision | ||
Pressure | Pa | |
PythonObject | ||
Quantity | ||
QuantityConstraint | ||
Rotation | ||
ShearModulus | Pa | introduced in version 0.21 |
SpecificEnergy | m^2/s^2 or J/kg | introduced in version 0.21 |
SpecificHeat | J/kg/K | introduced in version 0.21 |
Speed | m/s | |
Stiffness | m/s^2 | |
Stress | Pa | introduced in version 0.21 |
String | ||
StringList | ||
Temperature | K | introduced in version 0.21 |
ThermalConductivity | W/m/K | introduced in version 0.21 |
ThermalExpansionCoefficient | 1/K | introduced in version 0.21 |
ThermalTransferCoefficient | W/m^2/K | introduced in version 0.21 |
Time | s | introduced in version 0.21 |
UltimateTensileStrength | Pa | introduced in version 0.21 |
UUID | ||
VacuumPermittivity | s^4*A^2 / (m^3*kg) | |
Vector | ||
VectorDistance | ||
VectorList | ||
Velocity | m/s | introduced in version 0.21 |
Volume | l or m^3 | |
VolumeFlowRate | l/s or m^3/s | introduced in version 0.21 |
VolumetricThermalExpansionCoefficient | 1/K | introduced in version 0.21 |
Work | J | introduced in version 0.21 |
XLink | ||
XLinkList | ||
XLinkSub | ||
XLinkSubList | ||
YieldStrength | Pa | introduced in version 0.21 |
YoungsModulus | Pa | introduced in version 0.21 |
Internally, the property name is prefixed with App::Property
:
App::PropertyBool
App::PropertyFloat
App::PropertyFloatList
...
Remember that these are property types. A single object may have many properties of the same type, but with different names.
For example:
obj.addProperty("App::PropertyFloat", "Length")
obj.addProperty("App::PropertyFloat", "Width")
obj.addProperty("App::PropertyFloat", "Height")
This indicates an object with three properties of type "Float", named "Length", "Width", and "Height", respectively.
Scripting
See also: FreeCAD scripting basics
A scripted object is created first, and then properties are assigned.
obj = App.ActiveDocument.addObject("Part::Feature", "CustomObject")
obj.addProperty("App::PropertyFloat", "Velocity", "Parameter", "Body speed")
obj.addProperty("App::PropertyBool", "VelocityEnabled", "Parameter", "Enable body speed")
In general, Data properties are assigned by using the object's addProperty()
method. On the other hand, View properties are normally provided automatically by the parent object from which the scripted object is derived.
For example:
- Deriving from
App::FeaturePython
provides only 4 View properties: "Display Mode", "On Top When Selected", "Show In Tree", and "Visibility". - Deriving from
Part::Feature
provides 17 View properties: the previous four, plus "Angular Deflection", "Bounding Box", "Deviation", "Draw Style", "Lighting", "Line Color", "Line Width", "Point Color", "Point Size", "Selectable", "Selection Style", "Shape Color", and "Transparency".
Nevertheless, View properties can also be assigned using the view provider object's addProperty()
method.
obj.ViewObject.addProperty("App::PropertyBool", "SuperVisibility", "Base", "Make the object glow")
Source code
In the source code, properties are located in various src/App/Property* files.
They are imported and initialized in src/App/Application.cpp
.
#include "Property.h"
#include "PropertyContainer.h"
#include "PropertyUnits.h"
#include "PropertyFile.h"
#include "PropertyLinks.h"
#include "PropertyPythonObject.h"
#include "PropertyExpressionEngine.h"
- 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
Работа с инструментариями
FreeCAD, подобно многим современным приложениям для проектирования, таким как Revit или CATIA, базируется на концепции верстаков. Верстаки можно рассматривать как набор инструментов, специально сгруппированных под определенные задачи. В традиционных мебельных мастерских, вы имели бы рабочий стол для человека работающего с деревом, другой для работающего с металлическими частями, и, возможно, третий для того, который монтирует все это вместе.
Тоже самое относится и к FreeCAD. Инструменты сгруппированы в верстаки в соответствии с задачами, к которым они относятся.
Когда вы переключаетесь с одного верстака на другой, доступные в интерфейсе инструменты меняются. Панели инструментов, командные панели и, возможно, другие части интерфейса, переключаются на новый инструментарий, но содержание вашей сцены не меняется. Вы могли бы, например, начать рисовать 2D форму в Чертежном инструментарии, а дальше работать над ней в инструментарии Деталей.
Следует отметить, что иногда верстаки называют модулями. Однако, стоит отметить, что верстаки и модули это разные понятия. Модуль - это любое расширение FreeCAD, в то время как Верстак - это специальный тип модуля со своей собственной конфигурацией графического интерфейса (панели инструментов и меню).
Встроенные верстаки
Current
Следующие верстаки идут в комплекте с каждой установкой FreeCAD:
- Стандартные инструменты. На самом деле это не верстак, а скорее категория 'стандартных' команд и инструментов, которые можно использовать на всех верстаках.
- Верстак Arch для работы с элементами архитектуры.
- The Assembly Workbench for building and solving mechanical assemblies. introduced in version 0.22
- The CAM Workbench is used to produce G-Code instructions. This workbench was called "Path Workbench" in version 0.21 and below.
- Верстак Draft содержит 2D-инструменты и основные операции 2D и 3D CAD.
- Верстак FEM обеспечивает рабочий процесс анализа Методом Конечных Элементов (МКЭ).
- Верстак Inspection сделан для того, чтобы дать вам специфические инструменты для осмотра форм. Он всё ещё находится в стадии разработки.
- Верстак Mesh для работы с триангулярными (разбитыми на треугольники) сетками.
- Верстак OpenSCAD обеспечивает совместимость с OpenSCAD и восстановление истории модели конструктивной твердотельной геометрии (CSG).
- Верстак Part для работы с деталями САПР.
- Верстак Part Design для построения фигур деталей из эскизов.
- Верстак Points для работы с облаками точек.
- Верстак Reverse Engineering предназначен для предоставления специальных инструментов для преобразования форм/тел/сеток в параметрические элементы, совместимые с FreeCAD. Он все ещё находится в стадии разработки.
- Верстак Robot для изучения движений робота.
- Верстак Sketcher для работы с геометрически ограниченными эскизами.
- Верстак Spreadsheet для создания и обработки данных электронной таблицы.
- Верстак Start Center позволяет быстро перейти к одному из наиболее распространённых верстаков.
- Верстак Surface предоставляет инструменты для создания и изменения поверхностей. Он похож на опцию Грань из отрезков Построителя Форм.
- Верстак TechDraw для создания технических чертежей из 3D-моделей. Это преемник Верстака Drawing.
- Верстак Test Framework предназначен для отладки FreeCAD.
- Верстак Web предоставляет окно браузера вместо 3D вида FreeCAD.
Obsolete
The following workbenches are no longer included after version 0.20:
- Верстак Drawing использовался для изготовления технических чертежей, но в настоящее время устарел. По-прежнему необходимо читать старые файлы FreeCAD, содержащие объекты, созданные с помощью этого верстака. Верстак TechDraw является его более продвинутой заменой. obsolete in version 0.17
- Верстак Image для работы с растровыми изображениями.
- Верстак Raytracing для работы с трассировкой лучей (рендеринг).
Внешние верстаки
Верстаки FreeCAD легко программируются в Python, поэтому многие разрабатывают дополнительные верстаки вне кодовой базы FreeCAD.
Страница внешние верстаки перечисляет все известные сообществу. Большинство из них легко устанавливается из FreeCAD, используя Addon Manager через меню Инструменты → Addon manager.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструментарий Сетка (Mesh)
Введение
Верстак Mesh оперирует с треугольными сетками. Сетки (Meshes) - это особый тип 3D объектов, составленный из треугольных граней, соединенных по ребрам и вершинам.
Многие из 3D приложений, такие, как sketchup, blender, maya или 3d studio max используют сетки (meshes) в качестве основного типа 3D объекта. Сетки это очень простые объекты, содержащие только вершины (точки), ребра и (треугольные) грани, их очень легко создать, модифицировать, разбивать, растягивать, и можно легко передаваться из одного приложения в другое без потерь в деталях. Кроме того, поскольку сетки определяются очень простыми данными, 3D приложения обычно могут управляться с очень большими их количеством без использования чрезмерных ресурсов. По этим причинам сетки как 3D объекты часто выбирают для приложений, работающих с кино, анимацией и созданием изображений.
Однако Для инженерных применений, сетки обладают очень большим ограничением: они только создают поверхность, и не содержат информацию о массе, так что они не ведут себя как твердые тела. Это означает что все твердотельные операции, такие как сложение, вычитание, на сетках выполнять всегда труднее. Верстак Mesh полезен для импорта трёхмерных данных в формате сеток, для их анализа, обнаружения ошибок, и в итоге конвертирует их в твёрдые тела для использования в верстаке Part.
Инструменты
Модуль полигонального моделирования сейчас обладает очень простым интерфейсом, все его функции сгруппированы в меню Сетки.
- Import mesh...: Imports a mesh object from a file.
- Export mesh...: Exports a mesh object to a file.
- Create mesh from shape...: Creates mesh objects from shape objects.
- Refinement...: Remeshes a mesh object.
Анализ
Анализ кривизны, граней и проверка может ли сетка безопасно преобразована в твердое тело
- Оценить и отремонтировать сетку...: Анализирует и чинит сетку
- Информация о поверхности: Даёт информацию о поверхностях
- Данные о кривизне: Даёт информацию о кривизне
- Проверить прочность сетки: Проверить, можно ли тело превратить в сетку
- Информация о структуре...: Вычисляет границы сетки
- Curvature plot: Creates Mesh Curvature objects for mesh objects.
- Harmonize normals: Harmonizes the normals of mesh objects.
- Flip normals: Flips the normals of mesh objects.
- Fill holes...: Fills holes in mesh objects.
- Close hole: Fills selected holes in mesh objects.
- Add triangle: Adds faces along a boundary of an open mesh object.
- Remove components...: Removes faces from mesh objects.
- Remove components by hand...: Removes components from mesh objects.
- Create mesh segments...: Creates separate mesh segments for specified surface types of a mesh object.
- Create mesh segments from best-fit surfaces...: Creates separate mesh segments for specified surface types of a mesh object, and can identify their parameters.
- Smooth...: Smooths mesh objects.
- Decimation...: Reduces the number of faces in mesh objects.
- Scale...: Scales mesh objects.
- Regular solid...: Creates a regular parametric solid mesh object.
Булевы операции
- Объединение: объединить сетки
- Пересечение: выделить пересечение полигональных сеток
- Разность: выполнить вычитание (вырезание) из полигональных сеток
- Cutting
- Cut mesh: Cuts whole faces from mesh objects.
- Trim mesh: Trims faces and parts of faces from mesh objects.
- Trim mesh with a plane: Trims faces and parts of faces on one side of a plane from a mesh object.
- Create section from mesh and plane: Creates a cross section across a mesh object.
- Cross-sections...: Creates multiple cross sections across mesh objects. introduced in version 0.19
- Merge: Creates a mesh object by combining the meshes of two or more mesh objects.
- Split by components: Splits a mesh object into its components.
- Unwrap mesh: Creates a flat representation of a mesh object.
- Unwrap face: Creates a flat representation of a face of a shape object.
Preferences
There are some export preferences related to Mesh Formats but these are not used by commands belonging to this workbench. They are used by the Std Export command.
Mesh Workbench preferences can be found in the following categories of the Preferences Editor:
- Display: On the Mesh view tab several preferences can be set.
- OpenSCAD: The Mesh Union, Mesh Intersection and Mesh Difference commands require OpenSCAD and use the OpenSCAD executable preference to find its executable.
Ссылки
- Miscellaneous: Import mesh, Export mesh, Create mesh from shape, Regular solid, Unwrap Mesh, Unwrap Face
- Modifying: Harmonize normals, Flip normals, Fill holes, Close hole, Add triangle, Remove components, Remove components by hand, Smooth, Refinement, Decimation, Scale
- Boolean: Union, Intersection, Difference
- Cutting: Cut mesh, Trim mesh, Trim mesh with a plane, Create section from mesh and plane, Cross-sections
- Components and segments: Merge, Split by components, Create mesh segments, Create mesh segments from best-fit surfaces
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструмент Деталь (Part)
Введение
Возможности твердотельного моделирования FreeCAD основаны на ядре Технологии OpenCASCADE (OCCT), CAD-системе профессионального уровня, в которой реализованы расширенные возможности создания и обработки трехмерной геометрии. Верстак Part - это слой, расположенный поверх библиотек OCCT, который даёт пользователю доступ к геометрическим примитивам и функциям OCCT. Практически все функции 2D- и 3D-проектирования в каждом верстаке (Draft, Sketcher, PartDesign и т.д.), основаны на этих функциях, предоставляемых Верстаком Part. Поэтому Верстак Part считается центральным компонентом возможностей моделирования FreeCAD.
Более подробное обсуждение сравнения Верстака Part с Верстаком Part Design можно найти здесь: Part и PartDesign
Объекты, создаваемые верстаком Part относительно просты, они предназначены для использования в булевых операциях (объединения и вырезания) для построения более сложных фигур. Эта парадигма моделирования известна как процесс конструктивной блочной геометрии (CSG, КБГ), и это традиционная методология, используемая в ранних системах САПР. С другой стороны, верстак PartDesign предлагает более современный процесс создания фигур: он использует параметрически заданные эскизы, которые выдавливаются для формирования базовых твёрдых тел, которые потом модифицируются параметрическими трансформациями (функциями редактирования) до получения конечного объекта.
Объекты Part сложнее, чем сеточные объекты, создаваемые в верстаке Mesh, поскольку они дают более сложные операции вроде когерентных (взаимосвязанных) булевых операций, историю модификации и параметрическое поведение.
Верстак Part Workbench это базовый слой, предоставляющий чертёжные функции OCCT всем верстакам FreeCAD.
Инструменты
Инструменты модуля расположены в меню Деталь или в меню Measure.
Примитивы
Эти инструменты создают примитивные объекты.
- Куб: Создаёт твердотельный куб.
- Цилиндр: Создаёт твердотельный цилиндр.
- Сфера: Создаёт твердотельную сферу.
- Конус: Создаёт твердотельный конус.
- Тор: Создаёт твердотельный тор (кольцо).
- Полый цилиндр: Создаёт полый цилиндр. представлено в версии 0.19
- Примитивы: Инструмент для создания одного из следующих примитивов:
- Плоскость: Создаёт плоскость.
- Куб: Создаёт куб (параллепипед). Этот объект также может быть создан с помощью инструмента Куб.
- Цилиндр: Создаёт цилиндр. Этот объект также может быть создан с помощью инструмента Цилиндр.
- Конус: Создаёт конус. Этот объект также может быть создан с помощью инструмента Конус.
- Сфера: Создаёт сферу. Этот объект также может быть создан с помощью инструмента Сфера.
- Эллипсоид: Создаёт эллипсоид.
- Тор: Создаёт тор. Этот объект также может быть создан с помощью инструмента Тор.
- Призма: Создаёт призму.
- Клин: Создаёт клин.
- Спираль винтовая: Создаёт винтовую спираль.
- Спираль плоская: Создаёт плоскую спираль.
- Окружность: Создаёт круглое ребро.
- Эллипс: Создаёт эллиптическое ребро.
- Точка: Создаёт точку (вершину).
- Отрезок: Создаёт отрезок (ребро).
- Правильный Многоугольник: Создаёт правильный многоугольник.
- Построитель: Создаёт формы из разнообразных примитивов.
Создание и изменение
Эти инструменты служат для создания новых и изменения существующих объектов.
- Выдавить: Выдавливает (вытягивает) плоские грани.
- Вращать:Создаёт твёрдое тело, вращая объект (не твёрдое тело) вокруг оси.
- Отразить зеркально: Отражает выбранный объект относительно зеркальной плоскости.
- Scale: Scales one or more shapes. introduced in version 0.22
- Скругление: Закругляет края объекта.
- Фаска: Делает фаску на рёбрах объекта.
- Создать грань из ломанных: Создаёт грань из набора ломанных (рёбер или контуров). Доступно из меню Деталь представлено в версии 0.19.
- Линейчатая поверхность: Создаёт линейчатую поверхность.
- Лофт: Построение профиля методом перехода от одного эскиза к другому.
- Развёртка: Переносит (проецирует) один или несколько профилей вдоль траектории.
- Разделить: Обрезает объект по поверхности пересечения секущего объекта.
- Поперечные сечения...: Создаёт одно или несколько поперечных сечений через весь объект.
- Инструменты смещения:
- 3D смещение: Строит поверхность, равноудалённую на заданном расстоянии, от поверхности оригинального объекта.
- 2D смещение: Строит контур, равноудалённый на заданное расстояние, от оригинала или увеличивает/сжимает плоскую грань.
- Толщина: Делает твёрдое тело пустотелым.
- Проекция на поверхность: Проецирует логотип, текст или любую поверхность, контур или ребро на поверхность. представлено в версии 0.19
- Прикрепить (Attachment): Прикрепляет/фиксирует расположение одного объекта относительно другого.
Булевы операции
Следующие инструменты выполняют логические (Булевы) операции.
- Соединить:
- Сделать соединение: Создаёт объект, соединяющий в себе выбранные объекты.
- Разъединить соединение: Разъединяет ранее соединённые объекты.
- Фильтр соединений: Извлекает отдельные части из соединений.
- Булевы: Производит булевы (логические) операции над объектами.
- Обрезать: Вырезает (вычитает) один объект из другого.
- Объединить: Объединяет (сплавляет) два объекта.
- Пересечь: Извлекает общую (пересекающуюся) часть двух объектов.
- Соединить полые объекты: Содержит инструменты для сопряжения полых объектов (например, труб).
- Connect (Соединить): Соединяет полые объекты с усечением лишних внутренних поверхностей.
- Embed (Внедрить): Внедряет один полый объект в другой полый объект.
- Cutout (Вырезать): Создаёт вырез в стенке полого объекта для другого полого объекта.
- Инструменты разделения:
- Логические(Булевы) фрагменты: Создаёт все фрагменты, которые могут быть получены булевыми операциями между объектами.
- Разрезать на части: Разрезает и разбивает объект, путём его пересечения с другими объектами.
- Обрезать: Обрезает объект, пересекая его с другими объектами образуя объединение.
- Булева XOR: Удаляет пространство, общее для пересекаемых объектов.
Измерение
- Измерить Длину Создаёт линейное изменение.
- Измерить Угол: Создаёт угловое измерение.
- Обновить Измерение: Обновляет все измерения.
- Очистить Всё: Удаляет все измерения.
- Переключить Всё: Показать или скрыть все измерения.
- Переключить 3D: Показать или скрыть трёхмерные измерения.
- Переключить Дельту: Показывает или скрывает результаты разностных измерений.
Прочие инструменты
- Импорт CAD...: Импорт в текущий документ файлов типа *.IGES, *.STEP или *.BREP.
- Экспорт в CAD...: Экспортирует деталь в формат *.IGES, *.STEP или *.BREP.
- Выделение прямоугольной область: Позволяет выбирать грани прямоугольной областью.
- Создание фигуры из полигональной сетки: Создаёт форму из сетки.
- Points from mesh: Создаёт фигуру из точек сетки плигонального объекта.представлено в версии 0.19
- Преобразовать в твёрдое: Преобразует форму в твёрдое тело.
- Reverse shapes (Обратная фигура): Переворачивает нормали всех поверхностей выбранного объекта.
- Создать копию:
- Создать простую копию: Создаёт простую копию выбранного объекта.
- Создать преобразованную копию: Создаёт преобразованную копию выбранных объектов. представлено в версии 0.19
- Создать копию элемента формы: Создаёт копию только элементов, выбранного объекта (вершины, рёбра, грани) . представлено в версии 0.19
- Уточнить форму: Очищает поверхности детали и удаляет ненужные линии (так называемые "артефакты").
- Проверка геометрии: Проверяет геометрию выбранных объектов на ошибки.
- Удаление элемента: Удаляет применённые функции (features) построения из объекта.
Элементы контекстного меню
- Внешний вид...: Определяет внешний вид всего объекта (цвет, прозрачность и т.д.).
- Установить цвета: Позволяет назначить цвета для граней детали.
Настройки
- Preferences: Настройки, доступные для Инструментов Part (верстака Part) также используются в настройках PartDesign.
- Import Export Preferences: Настройки, доступные для импорта и экспорта в различные форматы файлов.
- Fine-tuning: Некоторые дополнительные параметры для тонкой настройки поведения модуля Part.
Программирование
Смотри Создание сценариев (скриптов) модуля Part
Учебники
- Импорт из STL или OBJ : Как импортировать файлы STL/OBJ в FreeCAD
- Экспорт в STL или OBJ : Как экспортировать в FreeCAD файлы STL/OBJ
- Whiffle Ball (Шарик вдохновения) руководство : Как использовать модуль Part
- Примитивы: Куб(Параллелограмм), Конус, Цилиндр, Сфера, Тор, Полый цилиндр,Примитивы, Связующие формы
- Создание и правка: Выдавливание, Построение фигуры вращения, Отражение, Скругление, Фаска, Создать плоскость из граней, Ruled Surface, Профиль, Sweep, Section, Cross sections, 3D Offset, 2D Offset, Создать полый объект, Projection on surface, Прикрепление
- Булевы операции: Соединить, Разорвать связь, Compound Filter, Булевы операции, Cut, Fuse, Common, Connect, Embed, Cutout, Boolean fragments, Slice apart, Slice, XOR
- Измерительные: Measure Linear, Measure Angular, Measure Refresh, Clear All, Toggle All, Toggle 3D, Toggle Delta
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструментарий Черчениея
The TechDraw Workbench is its more advanced replacement.
Введение
Модуль Черчения позволяет поместить ваши 3D наработки на бумагу. То есть, поместить проекции ваших моделей в 2D окно и вставить это окно в рисунок, например на лист с рамкой, вашим заголовком и логотипом и наконец распечатать всё это.
Инструменты
Это инструменты для создания, настройки и экспортирования 2D чертежных листов
- Открыть SVG: Открывает чертеж, ранее сохранённый в формате SVG
- Новый чертеж A3: Создает чертёж формата A3 c шаблоном FreeCAD по умолчанию
- Вставить вид в чертёж: Помещает вид выделенного объекта на активный лист чертежа.
- Аннотация: Добавляет аннотацию на текущий чертёжный лист
- Клип: Добавляет группу клипов на текущий чертёжный лист
- Открыть в браузере: Открывает предварительный просмотр текущего чертёжного листа в браузере
- Вставить ортографические виды: Автоматически создаёт ортографические виды объекта на текущем чертёжном листе
- Символ: Добавляет содержимое файла SVG как символ на текущий чертёжный лист
- Draft View: Вставляет специальный вид выбранного объекта на текущий чертёжный лист
- Spreadsheet View: Вставляет вид выбранного листа электронной таблицы на текущий чертёжный лист
- Экспортировать страницу: Сохраняет указанный лист в SVG формате
- Проекция фигуры: Создаёт проекцию выбранного объекта (источинка) в трёхмерном виде.
- Примечание: Инструмент Draft Drawing главным образом используется с объектами Draft. Он имеет некоторые дополнительных возможностей кроме стандартных инструментов верстака Drawing, и поддерживает специфические объекты вроде размеров Draft.
Workflow
Документ содержит трёхмерный объект-форму (Schenkel), по которому мы хотим сделать чертёж. Поэтому создается "Лист". Лист автоматически получает шаблон, в данном случае шаблон "A3_Landscape". Этот шаблон представляет собой документ SVG и может содержать обычную чертежную рамку, ваш логотип или другие элементы.
На этот лист вы можете поместить один и более видов. Каждый вид обладает своей позицией на странице, и коэффициентом масштабирования и другие дополнительные свойства. Каждый раз когда лист или вид или объект на который они ссылаются, изменяются, лист перерисовывается, и отображение листа обновляется.
Написание сценариев
На данный момент рабочий процес через графический интерфейс пользователя (GUI) очень ограничен, поэтому интересней писать сценарии для API.
See the Drawing API example page for a description of the functions used to create drawing pages and views.
Шаблоны
FreeCAD поставляется вместе с набором стандартных шаблонов, но вы также можете найти больше на странице Чертежных шаблонов .
Расширение модуля Drawing
Некоторые примечания по программной стороне модуля были добавлены на страницу Drawing Documentation. Это для быстрого понимания, как работает модуль Drawing, позволяя программистам быстро начать программирование для него.
Учебники
Macros
- Macro Automatic drawing: Allows the user to get the view of his object in a drawing with 4 different position (front,top,iso,right). Needs some modification to be perfectly effective.
- Macro CartoucheFC: This GUI macro to fill simply all fields of the cartridge of the plan implementation worksheet FreeCAD, the format of the date and the symbol of the projection mode adapt to the EU region or US selected.
- Macro CartoucheFC 2: This GUI macro to fill simply all fields of the cartridge model 2 of the plan implementation worksheet FreeCAD.
- Macro CartoucheFC Full: This GUI macro to fill simply all fields of the cartridge Misc templates Full of the plan implementation worksheet FreeCAD, the format of the date and the symbol of the projection mode adapt to the EU region or US selected.
- Macro Corner shapes wizard/update: Pops up a dialog asking for the dimensions of your corner piece, then creates the object in the document and creates a page view with top, front and lateral views of the piece.
External links
Внешние ссылки
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструментарий Трассировка лучей
The external Render Workbench should be used instead.
Введение
Верстак Raytracing предназначен для создания фотореалистичной изображения ваших моделей с помощью внешних программ рендеринга.
Модуль работает с помощью шаблонов, это файлы проектов, определяющих сцену для вашей объёмной модели. Вы можете поместить свет и геометрию, вроде плоскости земли, и там содержится место для позиции камеры и для указания материалов объектов этой сцены. Проект может быть экспортирован в готовый для рендеринга файл, или отрисован напрямую в FreeCAD.
В настоящее время поддерживаются два визуализатора: POV-Ray и LuxRender. Чтобы иметь возможность визуализации из FreeCAD, нужна хотя бы одна из этих программ, установленная и сконфигурированная в Вашей системе. Но даже если ни одного визуализатора не установлено, Вы можете экспортировать файл проекта для визуализации впоследствии.
Верстак Raytracing по сути устарел. Ведётся новая разработка верстака Render, который предназначен для его замены. Этот верстак полностью запрограммирован на Python, поэтому его гораздо проще расширить, чем текущий верстак, который запрограммирован на C ++. Тем не менее, информация на этой странице в целом полезна для нового верстака, так как оба модуля работают в основном одинаково.
Типивой рабочий процесс
- Создайте или откройте прокет FreeCAD, добавьте некоторые твердотельные объекты модулей (Part или PartDesign); сетки пока не поддерживаются.
- Создайте проект трассировки лучей (для povray или luxrender).
- Выделите объекты, которые Вы хотите добавить в проект трассировки лучей и добавьте их.
- Экспортируйте файл проекта или визуализируйте его напрямую.
Работа верстака Raytracing; верстак готовит файл проекта из данного шаблона, затем вызывает внешнюю программу для визуализации сцены. Внешний визуализатор может использоваться независимо от FreeCAD.
Инструменты
Инструменты проекта
Это главные инструменты для экспорта Вашей трёхмерной работы во внешние визуализаторы.
- Новый проект Pov-Ray: Вставляет в документ новый проект PovRay
- Новый проект LuxRender: Вставляет в документ новый проект LuxRender
- Вставить деталь: Вставляет вид объекта Part в проект визуализации
- Сброс камеры: Сопоставляет позицию камеры проекта трассировки лучей с текущим видом
- Экспортировать проект: Экспортирует проект визуализации в файл сцены для отрисовки во внешнем визуализаторе
- Визуализировать: Визуализирует проект трассировки лучей во внешнем визуализаторе
Утилиты
Это вспомогательные инструменты для ручного выполнения особых задач.
- Экспорт вида в POV-Ray: Записывает активный трёхмерный вид с камерой и содержимым в файл povray
- Экспорт вида в POV-Ray: Экспортирует позицию камеры активного трёхмерного вида в формате POV-Ray в файл
- Экспортировать деталь в POV-Ray: Записывает выделенный объект Part как файл povray
Настройки
- Preferences: Доступные настройки для инструментов Raytracing.
Учебники
Ручное создание файла povray
Описанные выше вспомогательные инструменты позволяют экспортировать текущий трёхмерный вид и его содержимое в файл Povray. Сначала вы должны загрузить или создать данные САПР и расположить ориентацию трёхмерного вида по своему желанию. Затем выберите из меню трассировки "Вспомогательные → Экспорт вида...".
У Вас уточнят положение для сохранения итогового файла *.pov. После этого Вы можете открыть его в Povray и визуализировать:
Как обычно, в визуализаторе Вы сможете сделать большие и красивые картинки:
Программирование
Смотрите Примеры программного интерфейса Raytracing для информации о создании сцен через программирование.
Ссылки
POV-Ray
- POV-Ray страница в данной wiki
- http://www.spiritone.com/~english/cyclopedia/
- http://www.povray.org/
- http://en.wikipedia.org/wiki/POV-Ray
LuxRender
Рендеры, которые могут быть реализованы в будущем
- http://www.yafaray.org/
- http://www.mitsuba-renderer.org/
- http://www.kerkythea.net/
- http://www.artofillusion.org/
Exporting to Kerkythea
Although direct export to the Kerkythea XML-File-Format is not supported yet, you can export your Objects as Mesh-Files (.obj) and then import them in Kerkythea.
- if using Kerkythea for Linux, remember to install the WINE-Package (needed by Kerkythea for Linux to run)
- you can convert your models with the help of the mesh workbench to meshes and then export these meshes as .obj-files
- If your mesh-export resulted in errors (flip of normals, holes ...) you may try your luck with netfabb studio basic
- Free for personal use, available for Windows, Linux and Mac OSX.
- It has standard repair tools which will repair you model in most cases.
- another good program for mesh analysing/repairing is Meshlab
- Open Source, available for Windows, Linux and Mac OSX.
- It has standard repair tools which will repair you model in most cases (fill holes, re-orient normals, etc.)
- you can use "make compound" and then "make single copy" or you can fuse solids to group them before converting to meshes
- remember to set in Kerkythea an import-factor of 0.001 for obj-modeler, since Kerkythea expects the obj-file to be in m (but standard units-scheme in FreeCAD is mm)
- Within WIndows 7 64-bit Kerkythea does not seem to be able to save these settings.
- So remember to do that each time you start Kerkythea
- if importing multiple objects in Kerkythea you can use the "File → Merge" command in Kerkythea
Разработка
Эти страницы ссылаются на новую рабочую среду, запрограммированную на Python, предназначенную для замены текущей Raytracing Workbench.
- Верстак Render
- Верстак Render (только анонс, без дискуссии)
- FreeCAD Renderer Workbench improvements
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструментарий Изображение
Its functionality has been integrated in Std Base. See Std Import and Std ViewLoadImage.
Введение
Верстак Image обрабатывает различные типы растровых изображений, и позволяет открыть их в FreeCAD.
Инструменты
- Open: открыть изображение в новой точке зрения.
- Import to plane: импортировать изображение на плоскость в окне трёхмерного вида.
- Scaling: масштабировать изображение, импортированное на плоскость.
Особенности
- Подобно Sketch, импортированное изображение может быть присоединено к одной из главных плоскостей XY, XZ или YZ, и иметь положительное или отрицательное смещение.
- Изображение импортируется в соотношении 1 мм на пиксель.
- Рекомендуется импортировать изображение в разумном разрешении.
Workflow
Работа
Основное применение этого верстака в трассировке поверх изображения с помощью инструментов Draft или Sketcher, для генерации твёрдого тела на основе контуров изображения.
Трассировка эскизированием поверх изображения работает лучше при небольшом отрицательном смещении изображения относительно эскиза, например, -0,1 мм относительно рабочей плоскости. То есть изображение будет немного под плоскостью где Вы рисуете свою двумерную геометрию, так что Вы не рисуете на самом изображении.
Смещение может быть установлено при импорте, или позднее, редактированием положения изображения.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Инструмент 2D черчение
Сценарии и макросы
Макросы
Введение
Макросы это удобный способ повторения сложных действий в FreeCAD. Вы просто записываете свои действия, в то время как вы их делаете, а затем сохраняете их под названием, и воспроизводите их когда нужно. Поскольку макросы в действительности список команд Python, вы можете также редактировать их, и создавать очень сложные сценарии.
Хотя сценарии Python обычно имеют расширение .py
, макросы FreeCAD должны иметь расширение .FCMacro
. Коллекция макросов, написанных опытными пользователями, находится на странице рецепты макросов.
Смотрите Центр опытных пользователей, чтобы узнать больше о языке программирования Python и о написании макросов. В частности, вам следует начать с этих страниц:
Как это работает
Включите вывод в консоль через меню Правка → Настройки → Основные → Макрос → Показывать команды скриптов в консоли Python. Вы увидите, что в FreeCAD, каждое действие что вы совершаете, например, при нажатии кнопки, выводится как команда Python. Эти команды могут быть записаны в макрос. Основным инструментом для создания макросов является панель инструментов макросы: . На ней есть 4 кнопки: запись(record), остановка записи(stop), редактирования и воспроизведения текущего макроса(edit and play the current macro).
Его очень просто использовать: нажмите кнопку записи, вам будет предложено дать имя вашему макросу, а затем выполнить некоторые действия. Когда вы закончите, нажмите кнопку остановки записи, и ваши действия будут сохранены. Теперь вы можете получить доступ к диалогу макроса с помощью кнопки редактирования.
Диалог Macro, перечисляющий макросы, доступные в системе
Здесь Вы можете управлять своими макросами, удалять, редактировать, дублировать, устанавливать новые с нуля. Если Вы редактируете макрос, он будет открыт в окне редактора, где Вы можете сделать изменения в его код. Новые макросы могут быть установлены используя кнопку Addons..., которая связана с Менеджером дополнений.
Пример
Нажмите кнопку записи(record), дайте имя, скажем, "cylinder 10x10", а затем, в верстаке Part, создайте цилиндр с радиусом = 10 и высотой = 10. Затем нажмите "Остановить запись(stop)" кнопку. В диалоге редактирования макросов, вы можете увидеть Python код, который был записан, и, если вы хотите, произведите изменения в нем. Чтобы выполнить макрос, просто нажмите кнопку execute на панели инструментов, пока ваш макрос в редакторе. Ваш макрос всегда сохраняется на диске, поэтому любые изменения которые вы делаете, или каких-либо новые созданные макросы, всегда будут доступны при следующем запуске FreeCAD.
Настройка
Конечно, это не практично загружать макрос в редактор, чтобы использовать его затем. FreeCAD предоставляет гораздо лучшие способы использования макросов, такие как на них назначение клавиш, или добавлении записи в меню. Как только ваш макрос будет создан, все это можно сделать через Инструменты → Настройка
Таким образом вы можете сделать ваш макрос реальным инструментом, как и любой стандартный инструмент FreeCAD. Это, приумножает власть Python сценариев в FreeCAD, позволяет с легкостью добавлять ваши собственные инструменты для интерфейса. Читайте дальше, Написание сценариев , если вы хотите знать больше о сценарияхPython.
Смотрите Настройка панелей инструментов для более подробного описания.
Создание макросов без записи
Вы также можете непосредственно копировать/вставлять Python код в макрос, без записи GUI действий. Просто создайте новый макрос, редактируйте его и вставьте код. Затем можно сохранить макрос так же, как вы сохраняете документ FreeCAD. При следующем запуске FreeCAD, макрос появится в пункте меню "Installed Macros".
Смотрите Как установить макросы для более подробного описания.
Хранилище макросов
Посетите страницу Рецепты макросов, где вы можете выбрать некоторые полезные макросы, чтобы добавить их к своей установке FreeCAD.
Дополнительная информация
Учебники
Вы можете установить расширения вручную, однако гораздо проще просто использовать Менеджер расширений.
- 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
Введение в Python
Написание сценариев Python в FreeCAD
FreeCAD с начала построен так, чтобы быть полностью контролируемым сценариями Python. Почти все части FreeCAD, такие как интерфейс, содержимое сцены, и даже представление этого содержания в окне 3D просмотра доступны из встроенного Python интерпретатора или из своих собственных сценариев. Как результат, FreeCAD вероятно, является одной из наиболее глубоко настраиваемый инженерных приложений, доступных сегодня.
Если вы не знакомы с Python, мы рекомендуем Вам искать учебники по интернету, и бегло взглянуть на его структуру. Python это очень простой язык для обучения, особенно потому, он может быть сразу запущен внутри интерпритатора, где и простая команда и готовая программа может быть выполнена "на лету", без необходимости компилировать что-либо. FreeCAD имеет встроенный в Python интерпритатор. Если вы не видите окно с надписью Консоль Python, как показано ниже, вы можете активировать его через Вид → Панели → Консоль Python.
Интерпретатор
В интерпретаторе вы можете получить доступ к установленным в вашей системе модулям Python, а также встроенным модулям FreeCAD, и всем дополнительным модулям FreeCAD что вы установите позже. Скриншот ниже показывает интерпретатор Python:
В интепритаторе, вы можете выполнять код Python и просматривать доступные классы и функции. FreeCAD предоставляет очень удобный браузер классов для освоения мира FreeCAD: Когда вы вводите имя известного класса после точки сразу же появляется (то есть вы хотите добавить что-то из этого класса), окно браузера, где вы можете перемещаться между имеющимися подклассами и методами. При выборе если существует, связанный текст справка, то он отображается:
Таким образом, сначало наберите App.
или Gui.
посмотрите, что происходит. Другой, более общий Python метод изучения содержимого модулей и классов является использование команды print(dir())
. Например, ввод print(dir())
выведет список всех модулей, загруженных в FreeCAD. print(dir(App))
покажет вам все, что содержит App модуль и т.д.
Еще одна полезная особенность интерпритатора возможность вернуться назад по истории команд и извлечь строки кода, которые вы уже набрали ранее. Для перемещения по истории команд, просто используйте Up arrow или Down arrow.
Щелкнув правой кнопкой мыши в окне интерпритатора, у вас также есть несколько других опций, таких как копирование всей истории (полезно для эксперимента что-то сделать, а затем получить полный сценарий этого), или вставить имя файла с полным путем.
Python Help
В меню Справка, вы найдете раздел Автоматически сгенерированная документация python, при открытии которого откроется окно браузера, содержащего полную, создаваемую в реальном времени, документацию всех модулей Python, доступных в интерпретаторе FreeCAD, встроенных модулях Python и FreeCAD, установленных в систему модулей и дополнительные модулей FreeCAD. Доступна ли документация зависит от того, сколько усилий разработчик каждого модуля приложил к документированию своего кода, но, как правило Python модули имеют репутацию хорошо задокументированных. Ваше окно FreeCAD должно оставаться открытым для того чтобы система документации работала. В разделе Документация по созданию скриптов на Python находится ссылка на этот вики-раздел Power users hub.
Встроеные модули
Поскольку FreeCAD спроектирован с возможностью запуска без графического интерфейса пользователя (Graphical User Interface, GUI), почти все функциональные возможности разделены на две группы: Базовая функциональности, названные App
, и функциональность интерфейса, названный Gui
. Эти два модуля можно также подключить из сценариев, вне интерпретатора, под названиями FreeCAD
и FreeCADGui
соответственно.
- В модуле
App
вы найдете все, связанное с самим приложением, такие методы как открытия или закрытия файлов, а также документов, как настройка активного документа или объявление его содержания.
- В модуле
Gui
вы найдете инструменты для доступа и управления элементами графического интерфейса, такими как инструментарии и и их панели инструментов, и, что более интересно, графическое представление всего содержимого FreeCAD.
Перелистывание содержимого этих модулей не слишком полезно, поскольку они растут довольно быстро с развитием FreeCAD. Но два инструмента просмотра (браузер классов и справка Python) должны обеспечить вас полной и актуальной документацией в любой момент.
Объекты модулей App и Gui
Как мы уже говорили, в FreeCAD, всё разделенные между основным и представлением. Это подразумевает и 3D-объекты. Вы можете получить доступ определяющим свойствам объектов (одна из особенностей FreeCAD) с помощью модуля App
, и изменить то, как они представлены на экране с помощью модуля Gui
. Например, куб имеет свойства, которые определяют его, такие как ширина, длина, высота, они хранятся в объекте App
, а свойства представления, такие как цвета граней, режим отрисовки, хранятся в соответствующем объекте Gui
.
Этот способ обладает очень широким спектром применения, как с алгоритмами работы только с определеной частью функций, не нужно заботиться о какой-либо визуальной части, или даже перенаправления содержания документов не-графических приложений, таких как списки, таблицы или элементный анализ.
Для каждого объекта App
в вашем документе существует соответствующий объект Gui
. Фактически и сам документ содержит объекты App
и Gui
. Это, конечно, действует только при запуске FreeCAD с полным интерфейсом. В режиме командной строки графического интерфейса нет, так что доступны только объекты App
. Обратите внимание, что часть объектов Gui
создается снова каждый раз когда объект App
отмечен как "подлежащий пересчёту" (например, когда один из его параметров изменился), поэтому изменения, которые вы могли сделать непосредственно на объекте Gui
могут быть потеряны.
чтобы получить доступ к части App
чего-либо, введите:
myObject = App.ActiveDocument.getObject("ObjectName")
где "ObjectName"
это имя вашего объекта. Вы также можете ввести:
myObject = App.ActiveDocument.ObjectName
чтобы получить доступ к части Gui
того же объекта, введите:
myViewObject = Gui.ActiveDocument.getObject("ObjectName")
где "ObjectName"
- имя вашего объекта. Вы также можете ввести:
myViewObject = App.ActiveDocument.ObjectName.ViewObject
Если мы находимся в режиме командной строки и графического интерфейса нет, последняя строка вернет None
.
Объекты документа
В FreeCAD всё, над чем вы работаете, находится внутри документов. Документ содержит вашу геометрию и может быть сохранен в файл. Одновременно может быть открыто несколько документов. Документ, также как и геометрия, содержащиеся внутри него, имеет объекты App
и Gui
. Объект App
содержит фактически определенную Вами геометрию, в то время как объект Gui
содержит различные отображения из вашего документа. Вы можете открывать несколько окон, каждое из которых отображение вашей работы с различным масштабом или точкой зрения. Эти виды входят в объект Gui
вашего документа.
Чтобы получить доступ к части App
текущего открытого (активного) документа, введите:
myDocument = App.ActiveDocument
Чтобы создать новый документ, введите:
myDocument = App.newDocument("Document Name")
Чтобы получить доступ к части Gui
текущего открытого (активного) документа, введите:
myGuiDocument = Gui.ActiveDocument
чтобы получить доступ к текущему виду, введите:
myView = Gui.ActiveDocument.ActiveView
Использование дополнительных модулей
Модули FreeCAD
и FreeCADGui
отвечают за создание и управление объектами в документе FreeCAD. Они не занимаются созданием или изменением геометрии. Это потому, что эта геометрия может быть нескольких типов, и поэтому она управляется дополнительными модулями, каждый из которых отвечает за управление определенным типом геометрии. Например, Модуль Part использует ядро OpenCascade и поэтому может создавать и манипулировать геометрией типа B-rep. В то же время Модуль Mesh может создавать и модифицировать объекты типа сетка. Таким образом, FreeCAD может обрабатывать самые разные типы объектов, которые могут сосуществовать в одном документе, и новые типы могут быть легко добавлены в будущем.
Создание объектов
Каждый модуль имеет свой собственный способ обработки своей геометрии, но обычно они все могут создавать объекты в документе. Но документ FreeCAD также знает о доступных типах объектов, предоставляемых модулями:
FreeCAD.ActiveDocument.supportedTypes()
перечислит все возможные объекты, которые вы можете создать. Например, давайте создадим сетку (поддерживаемую модулем Mesh
) и деталь (поддерживаемую модулем Part
):
myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "myMeshName")
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature", "myPartName")
Первый аргумент - это тип объекта, второй - имя объекта. Наши два объекта выглядят почти одинаково: они еще не содержат никакой геометрии, и большинство их свойств одинаковы, когда вы проверяете их с помощью dir(myMesh)
и dir(myPart)
. За исключением одного, myMesh
имеет свойство Mesh
, а myPart
- свойство Shape
. Здесь хранятся данные Mesh и Part. Например, давайте создадим куб Part
и сохраним его в нашем объекте myPart
:
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
Вы можете попытаться сохранить куб в свойстве Mesh
объекта myMesh
, он вернет сообщение об ошибке неправильного типа. Это происходит из-за того, что каждое свойство предназначены для хранения только определенного типа. В свойстве Mesh
вы можете сохранять только то, что создано с помощью модуля Mesh
. Обратите внимание, что большинство модулей также имеют ярлык для добавления своей геометрии в документ:
import Part
cube = Part.makeBox(2, 2, 2)
Part.show(cube)
Изменение объектов
Модификация объекта выполняется так же:
import Part
cube = Part.makeBox(2, 2, 2)
myPart.Shape = cube
Теперь давайте изменим форму на большую:
biggercube = Part.makeBox(5, 5, 5)
myPart.Shape = biggercube
Запрос объектов
Вы всегда можете посмотреть на тип объекта следующим образом:
myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
print(myObj.TypeId)
или проверить, является ли объект производным от одного из базовых объектов (элемент детали, элемент сетки и т.д.):
print(myObj.isDerivedFrom("Part::Feature"))
Теперь вы действительно можете начать играть с FreeCAD! Насчёт полного списка всех доступных модулей и доступных инструментов смотрите в разделе Category:API.
- 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
Введение
Чтобы получить доступ к модулю Mesh
, вы должны сначала импортировать его:
import Mesh
Создание
Чтобы создать пустой объект сетки, просто используйте стандартный конструктор:
mesh = Mesh.Mesh()
Вы также можете создать объект из файла:
mesh = Mesh.Mesh("D:/temp/Something.stl")
Или создайте его из множества треугольников, задав их вершины:
triangles = [
# triangle 1
[-0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], [-0.5000, 0.5000, 0.0000],
#triangle 2
[-0.5000, -0.5000, 0.0000], [0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000],
]
meshObject = Mesh.Mesh(triangles)
Mesh.show(meshObject)
Ядро Mesh заботится о создании топологического правильной структуры данных, сортируя совпадающие точки и края.
Моделирование
Для создания правильной геометрии вы можете использовать один из методов create*()
. Например, тор можно создать следующим образом:
m = Mesh.createTorus(8.0, 2.0, 50)
Mesh.show(m)
Первые два параметра определяют радиусы тороида, а третий параметр - фактор подвыборки, как много треугольников будет создано. Чем выше это значение, тем сглаженней тело.
Модуль Mesh
также предоставляет три булевых метода: union()
, intersection()
и difference()
:
m1, m2 # are the input mesh objects
m3 = Mesh.Mesh(m1) # create a copy of m1
m3.unite(m2) # union of m1 and m2, the result is stored in m3
m4 = Mesh.Mesh(m1)
m4.intersect(m2) # intersection of m1 and m2
m5 = Mesh.Mesh(m1)
m5.difference(m2) # the difference of m1 and m2
m6 = Mesh.Mesh(m2)
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5
Вот пример, который создает трубку, используя метод difference()
:
import FreeCAD, Mesh
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
pipe = cylA
pipe = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()
Примечания
Широко применяемый, хотя и трудный в использовании, источник скриптов обработки полигональных сеток - это тестовые скрипты в модуле Mesh
.
В этих тестах модуля буквально все методы вызываются и все свойства/атрибуты перебираются.
Так что если вы достаточно смелы, взгляните на Unit Test module.
Смотрите так же: Mesh API.
- 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
- Miscellaneous: Import mesh, Export mesh, Create mesh from shape, Regular solid, Unwrap Mesh, Unwrap Face
- Modifying: Harmonize normals, Flip normals, Fill holes, Close hole, Add triangle, Remove components, Remove components by hand, Smooth, Refinement, Decimation, Scale
- Boolean: Union, Intersection, Difference
- Cutting: Cut mesh, Trim mesh, Trim mesh with a plane, Create section from mesh and plane, Cross-sections
- Components and segments: Merge, Split by components, Create mesh segments, Create mesh segments from best-fit surfaces
Введение
Здесь мы объясним вам, как управлять верстаком Part непосредственно из интерпретатора Python FreeCAD или из любого внешнего сценария. Основы создания сценариев топологических данных описаны в объяснение концепции модуля Part. Обязательно просмотрите раздел Scripting и страницы Основы скриптинга FreeCAD, если вам нужна дополнительная информация о том, как работает python-скриптинг во FreeCAD .
Смотрите также
Диаграмма классов
Это обзор наиболее важных классов модуля Part через Unified Modeling Language (UML):
Геометрия
Геометрические объекты являются строительными блоками для всех топологических объектов:
- Geom Базовый класс геометрических объектов.
- Line Прямая линия в 3D, задается начальной и конечной точкой.
- Circle Окружность или дуга задается центром, начальной и конечной точкой.
- и так далее...
Топология
Доступны нижеследующие топологические типы данных:
- COMPOUND Группа из топологических объектов любого типа.
- COMPSOLID Составное твердое тело, как набор твердых тел соединенными гранями. Он расширяет понятие Ломаной кривой(WIRE) и оболочки(SHELL) для твердых тел.
- SOLID Часть пространства ограниченная оболочкой. Она трехмерная.
- SHELL Набор граней соединенных между собой через ребра. Оболочки могут быть открытыми или закрытыми.
- FACE В 2D это часть плоскости; в 3D это часть поверхности. Это геометрия ограничена (обрезана) по контурам. Она двухмерная.
- WIRE Набор ребер соединенных через вершины. Он может быть как открытым, так и закрытым в зависимости от того связаны ли крайние ребра или нет.
- EDGE Топологический элемент соответствующий ограниченной кривой. Ребро как правило ограничивается вершинами. Оно одномерное.
- VERTEX Топологический элемент соответствующий точке. Обладает нулевой размерность.
- SHAPE общий термин охватывающий все выше сказанное.
Примеры: Создание простейшей топологии
Теперь мы создадим топологию из геометрических примитивов. Для изучения мы используем деталь(part), как показано на картинке состоящую из четырех вершин, двух окружностей и двух линий.
Создание геометрии
В начале мы должны создать отдельную деталь из данной ломаной. И мы должны убедиться что вершины геометрических частей расположены на тех же позициях. В противном случае позже мы не смогли бы соединить геометрические части в топологию!
Итак, сначала мы создаем точки:
import FreeCAD as App
import Part
V1 = App.Vector(0, 10, 0)
V2 = App.Vector(30, 10, 0)
V3 = App.Vector(30, -10, 0)
V4 = App.Vector(0, -10, 0)
Дуга
Для каждой дуги нам нужно создать вспомогательную точку и провести дугу через три точки:
VC1 = App.Vector(-10, 0, 0)
C1 = Part.Arc(V1, VC1, V4)
VC2 = App.Vector(40, 0, 0)
C2 = Part.Arc(V2, VC2, V3)
Линия
Сегменты линии могут быть созданы из двух точек:
L1 = Part.LineSegment(V1, V2)
L2 = Part.LineSegment(V3, V4)
Соединяем все вместе
Последний шаг - собираем все основные геометрические элементы вместе и получаем форму:
S1 = Part.Shape([C1, L1, C2, L2])
Создание призмы
Теперь вытягиваем ломанную по направлению и фактически получаем 3D форму:
W = Part.Wire(S1.Edges)
P = W.extrude(App.Vector(0, 0, 10))
Показать всё
Part.show(P)
Создание простых фигур
Вы легко можете создавать простые топологические объекты с помощью методов make...()
содержащихся в модуле Part:
b = Part.makeBox(100, 100, 100)
Part.show(b)
Доступные make...() методы:
- makeBox(l,w,h,[p,d]) : создает прямоугольник, с началом в точке p и вытянутый в направлении d с размерами (l,w,h) По умолчанию p установлен как Vector(0,0,0) и d установлен как Vector(0,0,1)
- makeCircle(radius,[p,d,angle1,angle2]) -- Создает окружность с заданным радиусом. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0 и angle2=360
- makeCone(radius1,radius2,height,[p,d,angle]) -- Создает конус с заданным радиусами и высотой. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1) и angle=360
- makeCylinder(radius,height,[p,d,angle]) -- Создает цилиндр с заданным радиусом и высотой. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1) и angle=360
- makeLine((x1,y1,z1),(x2,y2,z2)) -- Создает линию проходящую через две точки
- makePlane(length,width,[p,d]) -- Создает плоскость с заданной длинной и шириной. По умолчанию p=Vector(0,0,0) и d=Vector(0,0,1)
- makePolygon(list) -- Создает многоугольник из списка точек
- makeSphere(radius,[p,d,angle1,angle2,angle3]) -- Создает сферу с заданным радиусом. По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0, angle2=90 и angle3=360
- makeTorus(radius1,radius2,[p,d,angle1,angle2,angle3]) -- Создает тор по заданными радиусам.По умолчанию p=Vector(0,0,0), d=Vector(0,0,1), angle1=0, angle2=360 и angle3=360
На странице Part API приведен полный список доступных методов модуля Part.
Импорт необходимых модулей
В начале нам нужно импортировать модуль Part, чтобы мы могли использовать его содержимое в Python. Также импортируем модуль Base из модуля FreeCAD:
import FreeCAD as App
import Part
Создание вектора
Векторы являются одними из самых важных частей информации при построении фигур. Они обычно содержат три числа (но не всегда): декартовы координаты x, y и z. Для создания вектора введите:
myVector = App.Vector(3, 2, 0)
Мы только что создали вектор с координатами x = 3, y = 2, z = 0. В модуле Part векторы используются повсеместно. Формы детали также используют другой тип представления точек, называемый Vertex, который является просто контейнером для вектора. Вы можете получить доступ к вектору вершины следующим образом:
myVertex = myShape.Vertexes[0]
print(myVertex.Point)
> Vector (3, 2, 0)
Создание ребра
Ребра это не что иное, как линия с двумя вершинами:
edge = Part.makeLine((0, 0, 0), (10, 0, 0))
edge.Vertexes
> [<Vertex object at 01877430>, <Vertex object at 014888E0>]
Примечание: Вы можете создать ребро передав два вектора.
vec1 = App.Vector(0, 0, 0)
vec2 = App.Vector(10, 0, 0)
line = Part.LineSegment(vec1, vec2)
edge = line.toShape()
Вы можете узнать длину и центр ребра, вот так:
edge.Length
> 10.0
edge.CenterOfMass
> Vector (5, 0, 0)
Вывод фигуры на экран
До сих пор мы создали объект ребро, но не увидели его на экране. Это связано с тем, что 3D-сцена FreeCAD отображает только то, что указано для отображения. Для этого мы используем этот простой метод:
Part.show(edge)
Функция show создает объект "shape" в нашем FreeCAD документе. Используйте это всякий раз, когда пришло время показать свое творение на экране.
Создание ломанной кривой
Ломаная представляет собой многогранную линию и может быть создан из списка ребер или даже из списка ломаных:
edge1 = Part.makeLine((0, 0, 0), (10, 0, 0))
edge2 = Part.makeLine((10, 0, 0), (10, 10, 0))
wire1 = Part.Wire([edge1, edge2])
edge3 = Part.makeLine((10, 10, 0), (0, 10, 0))
edge4 = Part.makeLine((0, 10, 0), (0, 0, 0))
wire2 = Part.Wire([edge3, edge4])
wire3 = Part.Wire([wire1, wire2])
wire3.Edges
> [<Edge object at 016695F8>, <Edge object at 0197AED8>, <Edge object at 01828B20>, <Edge object at 0190A788>]
Part.show(wire3)
Part.show(wire3) пакажет 4 ребра, из которых состоит наша ломаная линяи. Другая полезная информация может быть легко найдена:
wire3.Length
> 40.0
wire3.CenterOfMass
> Vector (5, 5, 0)
wire3.isClosed()
> True
wire2.isClosed()
> False
Создание грани
Только грани, созданные из замкнутых ломаных, будут действительными. В этом примере wire3 является замкнутой ломаной, но wire2 не является замкнутым (см. выше)
face = Part.Face(wire3)
face.Area
> 99.99999999999999
face.CenterOfMass
> Vector (5, 5, 0)
face.Length
> 40.0
face.isValid()
> True
sface = Part.Face(wire2)
sface.isValid()
> False
Только грани имеют поверхность, а ломанные и ребра нет.
Создание окружности
Окружность может быть создана, например так:
circle = Part.makeCircle(10)
circle.Curve
> Circle (Radius : 10, Position : (0, 0, 0), Direction : (0, 0, 1))
Если вы хотите создать её с определенным положением и в определенном направлении
ccircle = Part.makeCircle(10, App.Vector(10, 0, 0), App.Vector(1, 0, 0))
ccircle.Curve
> Circle (Radius : 10, Position : (10, 0, 0), Direction : (1, 0, 0))
ccircle будет создана на расстоянии 10 от начала координат x и будет направлена вдоль оси x. Примечание: makeCircle принимает только тип Base.Vector() в качестве позиции и нормали. Вы также можете создать часть окружности, задав начальный и конечный угол:
from math import pi
arc1 = Part.makeCircle(10, App.Vector(0, 0, 0), App.Vector(0, 0, 1), 0, 180)
arc2 = Part.makeCircle(10, App.Vector(0, 0, 0), App.Vector(0, 0, 1), 180, 360)
Обе arc1 и arc2 вместе составляют окружность. Углы задаются в градусах, если вы хотите задать радианами, просто преобразуйте используя формулу: degrees = radians * 180/PI или используя math модуль python-а (прежде, конечно, выполнив import math): degrees = math.degrees(radians)
import math
degrees = math.degrees(radians)
Создать дугу по точкам
К сожалению нет функции makeArc, но у нас есть функция Part.Arc для создания дуги через три точки. Она создает объект дуги, соединяющий начальную точку с конечной точкой через среднюю точку. Функция .toShape() объекта дуги должна вызываться для получения объекта ребра, так же, как при использовании Part.LineSegment вместо Part.makeLine.
arc = Part.Arc(App.Vector(0, 0, 0), App.Vector(0, 5, 0), App.Vector(5, 5, 0))
arc
> <Arc object>
arc_edge = arc.toShape()
Part.show(arc_edge)
Arc принимает только Base.Vector() для точек. arc_edge - это то, что нам нужно, и мы можем отобразить его с помощью Part.show(arc_edge). Вы также можете получить дугу, используя часть круга:
from math import pi
circle = Part.Circle(App.Vector(0, 0, 0), App.Vector(0, 0, 1), 10)
arc = Part.Arc(circle,0,pi)
Дуги являются действительными ребрами, такими как линии, поэтому их можно использовать и в ломаных линиях.
Создать многоугольник (полигон)
Линия по нескольким точкам, не что иное как создание ломаной с множеством ребер. функция makePolygon берет список точек и создает ломанную по этим точкам:
lshape_wire = Part.makePolygon([App.Vector(0, 5, 0), App.Vector(0, 0, 0), App.Vector(5, 0, 0)])
Создание кривой Безье
Кривые Безье используются для моделирования гладких кривых с использованием ряда полюсов (точек) и необязательных весов. Функция ниже делает Part.BezierCurve из ряда точек FreeCAD.Vector. (Примечание: при «получении» и «установке» одного полюса или веса индексы начинаются с 1, а не с 0.)
def makeBCurveEdge(Points):
geomCurve = Part.BezierCurve()
geomCurve.setPoles(Points)
edge = Part.Edge(geomCurve)
return(edge)
Создание плоскости
Плоскость это ровная поверхность, в смысле 2D грань. Метод создания её это makePlane(length,width,[start_pnt,dir_normal]). По умолчанию start_pnt=Vector(0,0,0) и dir_normal=Vector(0,0,1). Используя dir_normal = Vector(0,0,1) создаёт плоскость, обращённую к положительному направлению оси z, в то время как dir_normal=Vector(1,0,0) создаёт плоскость обращённую к положительному направлению оси х:
plane = Part.makePlane(2, 2)
plane
> <Face object at 028AF990>
plane = Part.makePlane(2, 2, App.Vector(3, 0, 0), App.Vector(0, 1, 0))
plane.BoundBox
> BoundBox (3, 0, 0, 5, 0, 2)
BoundBox является параллелепипед вмещающих плоскость с диагональю, начиная с (3,0,0) и концом в (5,0,2). Здесь толщина BoundBoxпо оси y равна нулю, поскольку его форма полностью плоская.
Примечание: makePlane доступны только Base.Vector() для задания start_pnt и dir_normal а не кортежи
Создание эллипса
Эллипс можно создать несколькими способами:
Part.Ellipse()
Создает эллипс с большой полуосью 2 и малой полуосью 1 с центром в (0,0,0)
Part.Ellipse(Ellipse)
Создает копию данного эллипса.
Part.Ellipse(S1, S2, Center)
Создаст эллипс с центров точке Center, где плоскость эллипса определяет Center, S1 и S2, это большая ось ззаданная Center и S1, это больший радиус расстояние между Center и S1, и меньший радиус это расстояние между S2 и юольшей осью.
Part.Ellipse(Center, MajorRadius, MinorRadius)
Создает эллипс с большим и меньшим радиусом MajorRadius и MinorRadius, расположенными в плоскости заданной точкой Center и нормалью (0,0,1)
eli = Part.Ellipse(App.Vector(10, 0, 0), App.Vector(0, 5, 0), App.Vector(0, 0, 0))
Part.show(eli.toShape())
В приведенном выше коде мы ввели S1, S2 и center. Аналогично Дуге, Эллипс также создает объект, а не ребро, так что мы должны превратить его в ребро используя toShape() для отображения
Примечание: Дуга допускает только Base.Vector() для задания точек, а не кортеж.
eli = Part.Ellipse(App.Vector(0, 0, 0), 10, 5)
Part.show(eli.toShape())
для вышеуказанного конструктора Ellipse мы передали center, MajorRadius и MinorRadius.
Создание тора
Используя makeTorus(radius1,radius2,[pnt,dir,angle1,angle2,angle]). По умолчанию pnt=Vector(0,0,0), dir=Vector(0,0,1), angle1=0,angle2=360 и angle=360
Рассмотрим тор как маленький круг, вытянутый вдоль большого круга. Radius1 это радиус большого круга, radius2 это радиус малого круга, pnt это центр тора и dir это направление нормали. angle1 и angle2 углы в радианах для малого круга, последний параметр angle для создания секцию (части) тора:
torus = Part.makeTorus(10, 2)
В коде выше, был создан тор с диаметром 20 (радиус 10) и толщиной 4 (малая окружность радиусом 2)
tor=Part.makeTorus(10, 5, App.Vector(0, 0, 0), App.Vector(0, 0, 1), 0, 180)
В приведенном выше коде, создан кусочек тора.
tor=Part.makeTorus(10, 5, App.Vector(0, 0, 0), App.Vector(0, 0, 1), 0, 360, 180)
В приведенном выше коде, создан полу-тор, изменен только последний параметр. Т.е. angle а остальные углы установлены по умолчанию. Подстановка угла 180 создаст тор от 0 до 180, т.е. половину тора.
Создание параллелепипеда или кубоида
Используя makeBox(length,width,height,[pnt,dir]), создаем блок расположенный в pnt с размерами (length,width,height). По умолчанию pnt=Vector(0,0,0) и dir=Vector(0,0,1).
box = Part.makeBox(10, 10, 10)
len(box.Vertexes)
> 8
Создание сферы
Используя makeSphere(radius,[pnt, dir, angle1,angle2,angle3]). По умолчанию pnt=Vector(0,0,0), dir=Vector(0,0,1), angle1=-90, angle2=90 и angle3=360. angle1 и angle2 это вертикальный минимум и максимум сферы (срезает часть сферы снизу или сверху), angle3 is the sphere diameter (определяет замкнутое ли это тело вращения или его секция).
sphere = Part.makeSphere(10)
hemisphere = Part.makeSphere(10, App.Vector(0, 0, 0), App.Vector(0, 0, 1), -90, 90, 180)
Создание цилиндра
Используя makeCylinder(radius,height,[pnt,dir,angle]), создается цилиндр с указанным радиусом и высотой. По умолчанию pnt=Vector(0,0,0),dir=Vector(0,0,1) и angle=360.
cylinder = Part.makeCylinder(5, 20)
partCylinder = Part.makeCylinder(5, 20, App.Vector(20, 0, 0), App.Vector(0, 0, 1), 180)
Cоздание конуса
Используя makeCone(radius1,radius2,height,[pnt,dir,angle]), создаем конус с указанными радиусами и высотой. По умолчанию pnt=Vector(0,0,0), dir=Vector(0,0,1) и angle=360.
cone = Part.makeCone(10, 0, 20)
semicone = Part.makeCone(10, 0, 20, App.Vector(20, 0, 0), App.Vector(0, 0, 1), 180)
Modify shapes
There are several ways to modify shapes. Some are simple transformation operations such as moving or rotating shapes, others are more complex, such as unioning and subtracting one shape from another.
Transform operations
Translate a shape
Translating is the act of moving a shape from one place to another. Any shape (edge, face, cube, etc...) can be translated the same way:
myShape = Part.makeBox(2, 2, 2)
myShape.translate(App.Vector(2, 0, 0))
This will move our shape "myShape" 2 units in the X direction.
Rotate a shape
To rotate a shape, you need to specify the rotation center, the axis, and the rotation angle:
myShape.rotate(App.Vector(0, 0, 0),App.Vector(0, 0, 1), 180)
The above code will rotate the shape 180 degrees around the Z Axis.
Matrix transformations
A matrix is a very convenient way to store transformations in the 3D world. In a single matrix, you can set translation, rotation and scaling values to be applied to an object. For example:
myMat = App.Matrix()
myMat.move(App.Vector(2, 0, 0))
myMat.rotateZ(math.pi/2)
Note: FreeCAD matrixes work in radians. Also, almost all matrix operations that take a vector can also take three numbers, so these two lines do the same thing:
myMat.move(2, 0, 0)
myMat.move(App.Vector(2, 0, 0))
Once our matrix is set, we can apply it to our shape. FreeCAD provides two methods for doing that: transformShape()
and transformGeometry()
. The difference is that with the first one, you are sure that no deformations will occur (see Scaling a shape below). We can apply our transformation like this:
myShape.transformShape(myMat)
или
myShape.transformGeometry(myMat)
Scale a shape
Scaling a shape is a more dangerous operation because, unlike translation or rotation, scaling non-uniformly (with different values for X, Y and Z) can modify the structure of the shape. For example, scaling a circle with a higher value horizontally than vertically will transform it into an ellipse, which behaves mathematically very differently. For scaling, we cannot use the transformShape()
, we must use transformGeometry()
:
myMat = App.Matrix()
myMat.scale(2, 1, 1)
myShape=myShape.transformGeometry(myMat)
Булевы Операции
Как вырезать одну форму из других?
cut(...) - Вычисление различий задано в топологическом классе shape.
Subtracting a shape from another one is called "cut" in FreeCAD and is done like this:
cylinder = Part.makeCylinder(3, 10, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
sphere = Part.makeSphere(5, App.Vector(5, 0, 0))
diff = cylinder.cut(sphere)
Как получить пересечение двух форм?
Тем же способом, пересечение между двумя фигурами называется "common(...)" (пересечение задано в топологическом классе shape) и делается так:
The same way, the intersection between two shapes is called "common" and is done this way:
cylinder1 = Part.makeCylinder(3, 10, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
cylinder2 = Part.makeCylinder(3, 10, App.Vector(5, 0, -5), App.Vector(0, 0, 1))
common = cylinder1.common(cylinder2)
Как объединить две формы?
fuse(...) - Объединение задано в топологическом классе shape
Union is called "fuse" and works the same way:
cylinder1 = Part.makeCylinder(3, 10, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
cylinder2 = Part.makeCylinder(3, 10, App.Vector(5, 0, -5), App.Vector(0, 0, 1))
fuse = cylinder1.fuse(cylinder2)
Как получить сечение тела и заданной формы?
Section это пересечение твердого тела и плоской фигуры (сечение задано в топологическом классе shape). Вернет секущую кривую, составную кривую, состоящую из ребер.
A "section" is the intersection between a solid shape and a plane shape. It will return an intersection curve, a compound curve composed of edges.
cylinder1 = Part.makeCylinder(3, 10, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
cylinder2 = Part.makeCylinder(3, 10, App.Vector(5, 0, -5), App.Vector(0, 0, 1))
section = cylinder1.section(cylinder2)
section.Wires
> []
section.Edges
> [<Edge object at 0D87CFE8>, <Edge object at 019564F8>, <Edge object at 0D998458>,
<Edge object at 0D86DE18>, <Edge object at 0D9B8E80>, <Edge object at 012A3640>,
<Edge object at 0D8F4BB0>]
Выдавливание
Выдавливание - это процесс «выпячивания» плоской фигуры в определенном направлении, становящейся твердым телом. Представьте, как «выпячивание» круга сделало его трубой:
Extrusion is the act of "pushing" a flat shape in a certain direction, resulting in a solid body. Think of a circle becoming a tube by "pushing it out":
circle = Part.makeCircle(10)
tube = circle.extrude(App.Vector(0, 0, 2))
Если ваш круг полый, вы получите полую трубу. Если ваш круг это диск с заполненной поверхностью, вы получите сплошной цилиндр:
wire = Part.Wire(circle)
disc = Part.Face(wire)
cylinder = disc.extrude(App.Vector(0, 0, 2))
Исследование Форм
Вы легко можете исследовать структуру топологических данных:
You can easily explore the topological data structure:
import Part
b = Part.makeBox(100, 100, 100)
b.Wires
w = b.Wires[0]
w
w.Wires
w.Vertexes
Part.show(w)
w.Edges
e = w.Edges[0]
e.Vertexes
v = e.Vertexes[0]
v.Point
Если ввести строчку выше в интерпретатор python , вы получите хорошее представление об устройстве объектов Part. Здесь наша команда makeBox() создает твердое тело. Это тело, как и все тела Part, содержит грани. Грани всегда содержат ломанные, которые являются набором ребер ограничивающих грань. Каждая грань обладает минимум одной замкнутой ломаной (может больше, если есть отверстие). В ломанной мы можем посмотреть на каждое ребро отдельно, и по краям каждого ребра мы можем увидеть вершины. Прямые ребра обладают только двумя вершинами, разумеется. Вершины модуля Part являются формами OCC(OpenCascade), но они обладают атрибутом Point, который возвращает вектор FreeCAD.
Исследование Рёбер
В случае ребра, которое является произвольной кривой, вы наверняка захотите произвести дискретизицию. В FreeCAD ребра задаются с помощью параметра длинны. Это означает что вы можете перемещатся вдоль ребра/кривой задавая длинну:
In case of an edge, which is an arbitrary curve, it's most likely you want to do a discretization. In FreeCAD the edges are parametrized by their lengths. That means you can walk an edge/curve by its length:
import Part
box = Part.makeBox(100, 100, 100)
anEdge = box.Edges[0]
print(anEdge.Length)
Теперь вы получить доступ ко всем свойствам ребра, с помощью длинны или позиции. Это означает, что у ребра в 100mm длинной, начальная позиция это 0 а конечная это 100.
anEdge.tangentAt(0.0) # tangent direction at the beginning
anEdge.valueAt(0.0) # Point at the beginning
anEdge.valueAt(100.0) # Point at the end of the edge
anEdge.derivative1At(50.0) # first derivative of the curve in the middle
anEdge.derivative2At(50.0) # second derivative of the curve in the middle
anEdge.derivative3At(50.0) # third derivative of the curve in the middle
anEdge.centerOfCurvatureAt(50) # center of the curvature for that position
anEdge.curvatureAt(50.0) # the curvature
anEdge.normalAt(50) # normal vector at that position (if defined)
Использование выделения(выбора)
Здесь мы увидим как можно использовать "выделение", которое пользователь сделал в программе просмотра. прежде всего мы создадим блок и отобразим его в окне просмотра.
Here we see now how we can use a selection the user did in the viewer. First of all we create a box and show it in the viewer.
import Part
Part.show(Part.makeBox(100, 100, 100))
Gui.SendMsgToActiveView("ViewFit")
Теперь выберем грани или ребра. С помощью этого сценария вы можете повторить по всем выделенным объектам и их субэлементам:
for o in Gui.Selection.getSelectionEx():
print(o.ObjectName)
for s in o.SubElementNames:
print("name: ", s)
for s in o.SubObjects:
print("object: ", s)
Выделим несколько ребер и этот сценарий подсчитает их сумарную длину:
length = 0.0
for o in Gui.Selection.getSelectionEx():
for s in o.SubObjects:
length += s.Length
print("Length of the selected edges: ", length)
Полный пример: бутыль OCC
Типовой пример, взятый на OpenCasCade Technology Tutorial - это как построить бутыль. Это отличный пример и для FreeCAD. В самом деле, если последуете нашему примеру изложенному ниже и странице OCC одновременно, вы лучше поймете как структуры OCC реализованы в FreeCAD. Готовый сценарий описанный ниже, также включен в установленный FreeCAD (в папке Mod/Part) и может быть вызван интерпретатором python, вводом:
A typical example found on the OpenCasCade Technology website is how to build a bottle. This is a good exercise for FreeCAD too. In fact, if you follow our example below and the OCC page simultaneously, you will see how well OCC structures are implemented in FreeCAD. The script is included in the FreeCAD installation (inside the Mod/Part folder) and can be called from the Python interpreter by typing:
import Part
import MakeBottle
bottle = MakeBottle.makeBottle()
Part.show(bottle)
Готовый сценарий
Здесь представлен готовый сценарий MakeBottle:
For the purpose of this tutorial we will consider a reduced version of the script. In this version the bottle will not be hollowed out, and the neck of the bottle will not be threaded.
import FreeCAD as App
import Part, math
def makeBottleTut(myWidth = 50.0, myHeight = 70.0, myThickness = 30.0):
aPnt1=App.Vector(-myWidth / 2., 0, 0)
aPnt2=App.Vector(-myWidth / 2., -myThickness / 4., 0)
aPnt3=App.Vector(0, -myThickness / 2., 0)
aPnt4=App.Vector(myWidth / 2., -myThickness / 4., 0)
aPnt5=App.Vector(myWidth / 2., 0, 0)
aArcOfCircle = Part.Arc(aPnt2, aPnt3, aPnt4)
aSegment1=Part.LineSegment(aPnt1, aPnt2)
aSegment2=Part.LineSegment(aPnt4, aPnt5)
aEdge1=aSegment1.toShape()
aEdge2=aArcOfCircle.toShape()
aEdge3=aSegment2.toShape()
aWire=Part.Wire([aEdge1, aEdge2, aEdge3])
aTrsf=App.Matrix()
aTrsf.rotateZ(math.pi) # rotate around the z-axis
aMirroredWire=aWire.copy()
aMirroredWire.transformShape(aTrsf)
myWireProfile=Part.Wire([aWire, aMirroredWire])
myFaceProfile=Part.Face(myWireProfile)
aPrismVec=App.Vector(0, 0, myHeight)
myBody=myFaceProfile.extrude(aPrismVec)
myBody=myBody.makeFillet(myThickness / 12.0, myBody.Edges)
neckLocation=App.Vector(0, 0, myHeight)
neckNormal=App.Vector(0, 0, 1)
myNeckRadius = myThickness / 4.
myNeckHeight = myHeight / 10.
myNeck = Part.makeCylinder(myNeckRadius, myNeckHeight, neckLocation, neckNormal)
myBody = myBody.fuse(myNeck)
return myBody
el = makeBottleTut()
Part.show(el)
Подробные объяснения
import FreeCAD as App
import Part, math
Нам, конечно, необходимы модуль Part
, а также модуль FreeCAD.Base
, который содержит основные структуры FreeCAD, такие как векторы и матрицы.
def makeBottleTut(myWidth = 50.0, myHeight = 70.0, myThickness = 30.0):
aPnt1=App.Vector(-myWidth / 2., 0, 0)
aPnt2=App.Vector(-myWidth / 2., -myThickness / 4., 0)
aPnt3=App.Vector(0, -myThickness / 2., 0)
aPnt4=App.Vector(myWidth / 2., -myThickness / 4., 0)
aPnt5=App.Vector(myWidth / 2., 0, 0)
Здесь мы задаем нашу функцию makeBottleTut
. Эта функция может быть вызвана без аргументов, как мы делали выше, в этом случае будут использоваться значения по умолчанию для ширины, высоты и толщины. Затем мы определили несколько точек которые будут использоваться для построения базового сечения.
...
aArcOfCircle = Part.Arc(aPnt2, aPnt3, aPnt4)
aSegment1=Part.LineSegment(aPnt1, aPnt2)
aSegment2=Part.LineSegment(aPnt4, aPnt5)
Здесь мы задаём геометрию: дугу, созданую по 3 точкам, и два линейных сегмента, созданные по 2 точкам.
...
aEdge1=aSegment1.toShape()
aEdge2=aArcOfCircle.toShape()
aEdge3=aSegment2.toShape()
aWire=Part.Wire([aEdge1, aEdge2, aEdge3])
Запомнили различие между геометрией и формой? Здесь мы создаем форму из нашей строительной геометрии. Три рёбра (ребра могут быть прямыми или кривыми), затем из этих трёх рёбер создается ломанная.
...
aTrsf=App.Matrix()
aTrsf.rotateZ(math.pi) # rotate around the z-axis
aMirroredWire=aWire.copy()
aMirroredWire.transformShape(aTrsf)
myWireProfile=Part.Wire([aWire, aMirroredWire])
Пока мы построили только половину сечения. Вместо построения таким же образом целого профиля, мы можем просто отразить то, что мы сделали, и склеить две половинки. Сначала создадим матрицу. Матрица является распространенным способом произвести изменения над объектом в трёхмерном пространстве, поскольку она может содержать в одной структуре все базовые преобразования, которым могут подвергаться трёхмерные объекты (перемещение, вращение и масштабирование). После создания матрицы, мы отражаем её, затем создаем копию нашей ломанной и применяем к ней трансформационную матрицу. Теперь мы получили две ломанные и мы можем создать из них третью ломаную, так как ломанные это всего лишь список ребер.
...
myFaceProfile=Part.Face(myWireProfile)
aPrismVec=App.Vector(0, 0, myHeight)
myBody=myFaceProfile.extrude(aPrismVec)
myBody=myBody.makeFillet(myThickness / 12.0, myBody.Edges)
Теперь мы получили замкнутую ломаную, которую можно обратить в грань. Когда мы имеем грань, мы можем вытянуть её. Сделав это, мы получим твердое тело. Теперь мы добавим небольшое скругление к нашему объекту, потому что мы заботимся о качественном дизайне, не так ли?
...
neckLocation=App.Vector(0, 0, myHeight)
neckNormal=App.Vector(0, 0, 1)
myNeckRadius = myThickness / 4.
myNeckHeight = myHeight / 10.
myNeck = Part.makeCylinder(myNeckRadius, myNeckHeight, neckLocation, neckNormal)
Теперь тело нашей бутыли создано, но нам нужно создать горлышко. Так что мы создаем новое твердое тело, с цилиндром.
...
myBody = myBody.fuse(myNeck)
Операция слияния очень мощная. Она заботится о склеивании, о том, что должно быть приклеено и удаляет части, которые следует удалить.
...
return myBody
Теперь мы получаем нашу твёрдое тело модуля Part как результат нашей функции.
el = makeBottleTut()
Part.show(el)
В итоге мы вызываем функцию для фактического создания детали, а потом делаем её видимой.
Example: Pierced box
Here is a complete example of building a pierced box.
Конструкция делается по одной стороне за раз. Когда куб закончен, он выдалбливается вырезанием цилиндра через него.
import FreeCAD as App
import Part, math
size = 10
poly = Part.makePolygon([(0, 0, 0), (size, 0, 0), (size, 0, size), (0, 0, size), (0, 0, 0)])
face1 = Part.Face(poly)
face2 = Part.Face(poly)
face3 = Part.Face(poly)
face4 = Part.Face(poly)
face5 = Part.Face(poly)
face6 = Part.Face(poly)
myMat = App.Matrix()
myMat.rotateZ(math.pi / 2)
face2.transformShape(myMat)
face2.translate(App.Vector(size, 0, 0))
myMat.rotateZ(math.pi / 2)
face3.transformShape(myMat)
face3.translate(App.Vector(size, size, 0))
myMat.rotateZ(math.pi / 2)
face4.transformShape(myMat)
face4.translate(App.Vector(0, size, 0))
myMat = App.Matrix()
myMat.rotateX(-math.pi / 2)
face5.transformShape(myMat)
face6.transformShape(myMat)
face6.translate(App.Vector(0, 0, size))
myShell = Part.makeShell([face1, face2, face3, face4, face5, face6])
mySolid = Part.makeSolid(myShell)
myCyl = Part.makeCylinder(2, 20)
myCyl.translate(App.Vector(size / 2, size / 2, 0))
cut_part = mySolid.cut(myCyl)
Part.show(cut_part)
Загрузка и Сохранение
Существует несколько способов сохранить вашу работу. Вы конечно можете сохранить ваш FreeCAD документ, а также вы можете сохранить Part(Деталь) объект напрямую в обычные CAD форматы, такие как BREP, IGS, STEP и STL.
Сохранить форму в файл легко. Есть доступные для всех форм методы exportBrep()
, exportIges()
, exportStep()
и exportStl()
. Таким образом:
import Part
s = Part.makeBox(10, 10, 10)
s.exportStep("test.stp")
это сохранит наш блок в файл формата STEP. Для загрузки BREP, IGES или STEP файлов:
import Part
s = Part.Shape()
s.read("test.stp")
Для преобразования файла STEP в файл IGS:
import Part
s = Part.Shape()
s.read("file.stp") # incoming file igs, stp, stl, brep
s.exportIges("file.igs") # outbound file igs
- 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
Преобразование объектов Part в полигональную сетку
Конвертация высокоуровневых объектов, таких как формы Part(Деталей), в простые объекты, такие как полигональные сетки, это довольно прямолинейная операция, когда все грани Part разбиваются на треугольники. Результат этой триангуляции затем используется для построения сетки:
import Mesh
obj = FreeCADGui.Selection.getSelection()[0] # a Part object must be preselected
shp = obj.Shape
faces = []
triangles = shp.tessellate(1) # the number represents the precision of the tessellation
for tri in triangles[1]:
face = []
for i in tri:
face.append(triangles[0][i])
faces.append(face)
m = Mesh.Mesh(faces)
Mesh.show(m)
Альтернативный пример:
import Mesh
import MeshPart
obj = FreeCADGui.Selection.getSelection()[0] # a Part object must be preselected
shp = obj.Shape
mesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature", "Mesh")
mesh.Mesh = MeshPart.meshFromShape(
Shape=shp,
LinearDeflection=0.01,
AngularDeflection=0.025,
Relative=False)
Преобразование полигональных сеток в объекты Part
Преобразование полигональных сеток в Part - самая обычная операция. Очень часто вы получаете трёхмерные данные в полигональном виде. Сетки довольно практичны для представления геометрии свободной формы и больших визуальных сцен, поскольку они очень легковесны. Но в FreeCAD мы в основном предпочитаем высокоуровневые объекты, твердотельные, которые несут гораздо больше информации, и позволяют кривые поверхности.
Преобразование сетки в высокоуровневый объект (обрабатываемый в FreeCAD верстаком Деталь) это не простая задача. Сетки могут содержать тысячи треугольников (например, когда они сгенерированы 3D сканером), и телом, состоящим из того же числа граней, будет чрезвычайно сложно управлять. Поэтому обычно хочется оптимизировать объект при преобразовании.
В настоящее время FreeCAD предлагает два метода для преобразования полигональных сеток в объект Part. Первый метод прост, это прямое преобразование, без какой либо оптимизации:
import Mesh
import Part
mesh = Mesh.createTorus()
shape = Part.Shape()
shape.makeShapeFromMesh(mesh.Topology, 0.05) # the second arg is the tolerance for sewing
solid = Part.makeSolid(shape)
Part.show(solid)
Второй метод позволяет учитывать какие грани сетки компланарны, когда угол между ними принимает определенное значение, уменьшая количество граней в конечном результате:
import Mesh
import Part
import MeshPart
obj = FreeCADGui.Selection.getSelection()[0] # a Mesh object must be preselected
mesh = obj.Mesh
segments = mesh.getPlanarSegments(0.00001) # use rather strict tolerance here
faces = []
for i in segments:
if len(i) > 0:
# a segment can have inner holes
wires = MeshPart.wireFromSegment(mesh, i)
# we assume that the exterior boundary is that one with the biggest bounding box
if len(wires) > 0:
ext = None
max_length=0
for i in wires:
if i.BoundBox.DiagonalLength > max_length:
max_length = i.BoundBox.DiagonalLength
ext = i
wires.remove(ext)
# all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
for i in wires:
i.reverse()
# make sure that the exterior wires comes as first in the list
wires.insert(0, ext)
faces.append(Part.Face(wires))
solid = Part.Solid(Part.Shell(faces))
Part.show(solid)
- 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
- Miscellaneous: Import mesh, Export mesh, Create mesh from shape, Regular solid, Unwrap Mesh, Unwrap Face
- Modifying: Harmonize normals, Flip normals, Fill holes, Close hole, Add triangle, Remove components, Remove components by hand, Smooth, Refinement, Decimation, Scale
- Boolean: Union, Intersection, Difference
- Cutting: Cut mesh, Trim mesh, Trim mesh with a plane, Create section from mesh and plane, Cross-sections
- Components and segments: Merge, Split by components, Create mesh segments, Create mesh segments from best-fit surfaces
Введение
Геометрия которая появляется в трёхмерных видах FreeCAD, получается с помощью библиотек Coin3d. Coin3D это реализация стандарта OpenInventor. OpenCASCADE тоже поддерживает схожую функциональность, но при создании FreeCAD было решено не использовать встроенный в OpenCASCADE просмотрщик, а скорее перейти на более производительный Coin3D. Для изучения этой библиотеки рекомендуется книга Open Inventor Mentor.
Описание
OpenInventor это язык описания трёхмерной сцены. Сцена, описанная в OpenInventor, затем отрисовывается OpenGL на вашем экране. Об этом заботится Coin3D, поэтому программисту не надо иметь дело со сложными вызовами OpenGL, он может просто предоставить корректный (работающий) код OpenInventor. Большим преимуществом является то, что OpenInventor это широко известный и хорошо задокументированный стандарт.
Одну из главных работ, которую FreeCAD делает за вас, это перевод информации о геометрии OpenCASCADE в формат языка OpenInventor.
OpenInventor записывает трехмерную сцену в форме древа сцен, как показано ниже:
Рисунок, взятый с сайта Inventor mentor
Дерево сцен в openInventor описывает все части трёхмерной сцены, такие как геометрия, цвета, материалы, освещение, и т.д. и организует все эти данные в удобной и четкой структуре. Все что угодно может быть сгруппировано в субструктуры, позволяя вам организовывать содержание вашей сцены тем способом, который вам нравится. Вот пример файла в формате openInventor:
#Inventor V2.0 ascii
Separator {
RotationXYZ {
axis Z
angle 0
}
Transform {
translation 0 0 0.5
}
Separator {
Material {
diffuseColor 0.05 0.05 0.05
}
Transform {
rotation 1 0 0 1.5708
scaleFactor 0.2 0.5 0.2
}
Cylinder {
}
}
}
Как вы можете видеть, его структура проста. Вы используете разделители (separator), организуя ваши данные в блоки, это немного похоже на то, как вы организуете ваши файлы в папках. Каждый оператор влияет на то, что будет дальше, например, первые два пункта в вашем корневом разделителе это поворот и перенос(трансляция), как они повлияют на следующий элемент, который тоже является разделителем. В этом сепараторе определяется материал и другое преобразование. Поэтому наш цилиндр будет подвержен обеим трансформациям, то что было применено непосредственно к нему, так и то что было применено к родительскому разделителю.
Мы также обладаем множество элементов других типов для организации нашей сцены, таких как группы, переключатели и аннотации. Мы можем задать очень сложные материалы для ваших объектов, с цветами, текстурой, теневыми режимами и прозрачностью. Мы также можем задать освещение, камеры, и даже движение. Можно даже встроить кусочки сценариев в openInventor файлы, для задания более сложного поведения.
Если вы заинтересованы в получении дополнительной информации о openInventor, отправляйтесь напрямую к самому известному руководству: Inventor mentor.
В FreeCAD, как правило. не нужно напрямую взаимодействовать с древом сцен openInventor. Каждый объект в документе FreeCAD, будь то полигональная модель (mesh), форма детали, или что-нибудь ещё, автоматически преобразуется в код OpenInventor и вставляется в основное дерево сцен, которое вы видите в окне трёхмерного просмотра. Это древо сцен непрерывно обновляется, когда вы модифицируете, добавляете или удаляете объекты. В самом деле каждый объект (в пространстве App) обладает поставщиком визуального отображения (соответствующий объект в пространстве Gui), ответственного за выдачу кода OpenInventor.
Но есть множество преимуществ, которые будут возможны при прямом доступе. Например, мы временно можем изменить внешний вид объекта, или мы можем добавить в сцену объекты, которые не обладают реальным представлением в документе FreeCAD, такие как геометрия построений, помощники, графические подсказки или инструменты, такие как манипуляторы или отображающаяся на экране информация.
FreeCAD обладает несколькими инструментами для просмотра и изменения openInventor кода. На пример, нижеследующий код на python отобразит openInventor представление выбранного объекта:
obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print viewprovider.toString()
А также мы обладаем модулем python открывает полный доступ к управлению чем угодно в Coin3D, такому как ваше дерево сцен в FreeCAD. Также читайте об этом на странице Pivy.
Coding examples
See Coin3d snippets courtesy of MariwanJ's research for the Design456 Workbench. The code repository can be found at https://github.com/MariwanJ/COIN3D_Snippet.
- 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
Введение
Pivy - это библиотека привязок Python для Coin3D, библиотеки 3D-рендеринга, используемой в FreeCAD для отображения вещей в трёхмерный вид. При импорте в работающий интерпретатор Python Pivy позволяет напрямую взаимодействовать с любым работающим графом сцен Coin, таким, как трёхмерный вид FreeCAD, или даже создавать новые. Pivy не требуется для компиляции FreeCAD, но требуется во время выполнения при запуске основанных на Python верстаков, которые создают фигуры на экране, такие как Draft и Arch. Из-за этого Pivy обычно устанавливается при установке дистрибутива FreeCAD.
When imported in a running Python interpreter, Pivy allows us to communicate directly with any running Coin scenegraph, such as the 3D view, or even to create new ones. Pivy is not required to compile FreeCAD, but it is required at runtime when running Python-based workbenches that create shapes on screen, like Draft and Arch. Because of this, Pivy is normally installed when installing a distribution of FreeCAD.
Библиотека Coin разделена на несколько частей, собственно Coin, для управления графами сцен и привязки к различным GUI системам, таким как Windows или Qt. Если эти модули присутствуют в системе, они также доступны для Pivy. Модуль Coin всегда присутствует, и это то что мы будем использовать в любом случае, поэтому мы не должны заботится о привязках нашего трёхмерного отображения к различным интерфейсам, что уже сделано в FreeCAD. Все что вам нужно, так это сделать это:
from pivy import coin
Древо сцены
Мы видели на странице Scenegraph, как организована типичная сцена Coin. Все что появляется в трехмерный вид - это граф сцен Coin, организованный так же. У нас есть один корневой узел, и все объекты на экране его потомки.
FreeCAD обладает простым способом получит доступ к корневому узлу(вершине) древа сцена 3D вида:
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
print(sg)
Это вернет корневой узел:
<pivy.coin.SoSelection; proxy of <Swig Object of type 'SoSelection *' at 0x360cb60> >
Мы сразу же можем просмотреть потомков, нашей сцены:
for node in sg.getChildren():
print(node)
Некоторые из этих узлов, такие как ноды SoSeparator
или SoGroup
, также могут обладать потомками. Полный список доступных объектов Сoin можно найти в официальной документации Сoin.
Давайте, сейчас, попробуем добавить что-нибудь в наше древо сцены. Мы добавим милейший красный куб:
col = coin.SoBaseColor()
col.rgb = (1, 0, 0)
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)
Теперь попробуем следующее:
col.rgb = (1, 1, 0)
Как видите, все по прежнему доступно и изменяемо на лету. Не нужно что-нибудь пересчитывать или перересовывать, Coin позаботится обо всем. Вы можете что-то в ваше древо сцен, изменить свойства, скрыть этот объект, показать временный объект, что угодно. Конечно это касается только отображения трехмерного вида. Это отображение получается при считывании FreeCAD-ом файла при открытии, и когда объект нужно перечитать. Так что, если вы изменили какой-нибудь аспект в существующем FreeCAD объекте,эти изменения будут потеряны, если объект перечитают, или же повторно откроют.
Как уже упоминалось, в графе сцен openInventor важен порядок. Каждый узел влияет на то, что будет дальше. Например, если мы хотим иметь возможность переместить наш куб, нам нужно добавить узел SoTranslation
перед кубом:
col = coin.SoBaseColor()
col.rgb = (1, 0, 0)
trans = coin.SoTranslation()
trans.translation.setValue([0, 0, 0])
cub = coin.SoCube()
myCustomNode = coin.SoSeparator()
myCustomNode.addChild(col)
myCustomNode.addChild(trans)
myCustomNode.addChild(cub)
sg.addChild(myCustomNode)
Чтобы переместить наш куб, мы можем теперь сделать:
trans.translation.setValue([2, 0, 0])
Наконец удалим что-нибудь, введя:
sg.removeChild(myCustomNode)
Обратные вызовы
Функция обратного вызова это система, позволяет библиотекам вроде нашей библиотеки Coin , возвращать вызов, то есть возможность вызова определенных функций с вашего запущенного объекта Python. Таким образом Coin может сообщить вам, что на сцене произошло конкретное событие. Coin может наблюдать за множеством различных вещей, таких как положение курсора, нажатия клавиши мыши, нажатые клавиши клавиатуры, и многое другое.
FreeCAD способен легко использовать такие функции обратного вызова:
from pivy import coin
class ButtonTest:
def __init__(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.callback = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), self.getMouseClick)
def getMouseClick(self, event_cb):
event = event_cb.getEvent()
if event.getState() == coin.SoMouseButtonEvent.DOWN:
print("Alert!!! A mouse button has been improperly clicked!!!")
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), self.callback)
ButtonTest()
Функция обратного вызова, должна быть инициализирована объектом, потому что объект должен по прежнему работать, когда случатся обратные вызовы. Смотри также полный список возможных событий и их параметров, или официальную документацию Coin.
Документация
К сожалению, Pivy не обладает собственной документацией. Однако, так как это оболочка библиотекиCoin, вы можете читать справку по C++. В этом случает Вам нужно лишь переводить стиль наименования классов C++ в стиль Python.
В C++:
SoFile::getClassTypeId()
В Pivy:
SoFile.getClassId()
- Coin3D homepage.
- Pivy homepage.
- Coin3D wiki, at GitHub.
- Coin3D wiki documentation, at GitHub.
- Coin3D Documentation, latest automatically generated Doxygen documentation.
- (Open)Inventor Mentor - recommended.
Older
These links provide reference documentation for Coin v3.x. The differences with v4.x are minimal, so they may still be useful.
- Coin3D Documentation, at BitBucket.
- Coin3D Documentation, at University of Colorado.
- Open Inventor Reference Documentation, by MeVisLab.
- 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
Введение
Кроме стандартных типов объектов, таких как аннотации, полигональные сетки и детали, FreeCAD также предлагает удивительную возможность создавать параметрические объекты, 100% написанные на Python, такие объекты называются (Python Features). Они ведут себя точно так же, как любой другой объект FreeCAD, автоматически сохраняются и восстанавливаются при сохранении или загрузке файла.
Должна быть понята одна особенность, эти объекты сохраняются в файлах FreeCAD FcStd вместе с модулем pythonа json. Этот модуль превращает объект pythonа в строку, позволяя его добавление в сохраняемый файл. При загрузке, модуль json использует эту строку для пересоздания оригинального объекта, обеспечивает его доступ к исходному коду, создавшему объект. Это значит, что если Вы сохранили этот пользовательский объект и открыли его на машине, где код python, который сгенерировал объект, отсутствует, объект не может быть восстановлен. Если Вы распространяете эти объекты среди других друзей, Вам нужно передавать вместе с ними скрипт pythonа, который его создал.
Примечание: Имеется возможность упаковки python кода внутрь FreeCAD файла, используя json сериализацию с помощью App::PropertyPythonObject, но этот код в конечном счете нельзя будет запустить напрямую, поэтому это мало подходит для наших целей.
Python Features следуют тому же правилу что и все остальные FreeCAD features: они разделены на App и GUI части. App часть, Объект Документ (Document Object), определяет геометрию нашего объекта, тогда как его GUI часть, Объект Визуального Представления (View Provider Object) определяет, как объект будет отображаться на экране. Объект View Provider, как и любая другая FreeCAD feature, доступен только при запуске FreeCAD в его собственном графическом интерфейсе. Существует несколько свойств и методов, доступных для создания вашего объекта. Свойства должны принадлежать к любому из предопределенных типов свойств, предлагаемых FreeCAD, и отображаться в окне просмотра свойств, чтобы пользователь мог их редактировать. Таким образом, объекты Feature Python полностью параметричны. Вы можете задать свойства как Данных, так и свойства Вида.
Простой пример
Следующий пример можно найти в файле src/Mod/TemplatePyMod/FeaturePython.py вместе с несколькими другими примерами:
'''Examples for a feature class and its view provider.'''
import FreeCAD, FreeCADGui
from pivy import coin
class Box:
def __init__(self, obj):
'''Add some custom properties to our box feature'''
obj.addProperty("App::PropertyLength", "Length", "Box", "Length of the box").Length = 1.0
obj.addProperty("App::PropertyLength", "Width", "Box", "Width of the box").Width = 1.0
obj.addProperty("App::PropertyLength", "Height", "Box", "Height of the box").Height = 1.0
obj.Proxy = self
def onChanged(self, fp, prop):
'''Do something when a property has changed'''
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
def execute(self, fp):
'''Do something when doing a recomputation, this method is mandatory'''
FreeCAD.Console.PrintMessage("Recompute Python Box feature\n")
class ViewProviderBox:
def __init__(self, obj):
'''Set this object to the proxy object of the actual view provider'''
obj.addProperty("App::PropertyColor","Color", "Box", "Color of the box").Color = (1.0, 0.0, 0.0)
obj.Proxy = self
def attach(self, obj):
'''Setup the scene sub-graph of the view provider, this method is mandatory'''
self.shaded = coin.SoGroup()
self.wireframe = coin.SoGroup()
self.scale = coin.SoScale()
self.color = coin.SoBaseColor()
data=coin.SoCube()
self.shaded.addChild(self.scale)
self.shaded.addChild(self.color)
self.shaded.addChild(data)
obj.addDisplayMode(self.shaded, "Shaded");
style=coin.SoDrawStyle()
style.style = coin.SoDrawStyle.LINES
self.wireframe.addChild(style)
self.wireframe.addChild(self.scale)
self.wireframe.addChild(self.color)
self.wireframe.addChild(data)
obj.addDisplayMode(self.wireframe, "Wireframe");
self.onChanged(obj,"Color")
def updateData(self, fp, prop):
'''If a property of the handled feature has changed we have the chance to handle this here'''
# fp is the handled feature, prop is the name of the property that has changed
l = fp.getPropertyByName("Length")
w = fp.getPropertyByName("Width")
h = fp.getPropertyByName("Height")
self.scale.scaleFactor.setValue(float(l), float(w), float(h))
pass
def getDisplayModes(self,obj):
'''Return a list of display modes.'''
modes=[]
modes.append("Shaded")
modes.append("Wireframe")
return modes
def getDefaultDisplayMode(self):
'''Return the name of the default display mode. It must be defined in getDisplayModes.'''
return "Shaded"
def setDisplayMode(self,mode):
'''Map the display mode defined in attach with those defined in getDisplayModes.\
Since they have the same names nothing needs to be done. This method is optional'''
return mode
def onChanged(self, vp, prop):
'''Here we can do something when a single property got changed'''
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
if prop == "Color":
c = vp.getPropertyByName("Color")
self.color.rgb.setValue(c[0], c[1], c[2])
def getIcon(self):
'''Return the icon in XPM format which will appear in the tree view. This method is\
optional and if not defined a default icon is shown.'''
return """
/* XPM */
static const char * ViewProviderBox_xpm[] = {
"16 16 6 1",
" c None",
". c #141010",
"+ c #615BD2",
"@ c #C39D55",
"# c #000000",
"$ c #57C355",
" ........",
" ......++..+..",
" .@@@@.++..++.",
" .@@@@.++..++.",
" .@@ .++++++.",
" ..@@ .++..++.",
"###@@@@ .++..++.",
"##$.@@$#.++++++.",
"#$#$.$$$........",
"#$$####### ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
" #$#$$$$$# ",
" ##$$$$$# ",
" ####### "};
"""
def dumps(self):
'''When saving the document this object gets stored using Python's json module.\
Since we have some un-serializable parts here -- the Coin stuff -- we must define this method\
to return a tuple of all serializable objects or None.'''
return None
def loads(self,state):
'''When restoring the serialized object from document we have the chance to set some internals here.\
Since no data were serialized nothing needs to be done here.'''
return None
def makeBox():
FreeCAD.newDocument()
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Box")
Box(a)
ViewProviderBox(a.ViewObject)
makeBox()
Что необходимо отметить
Если Ваш объект полагается на то, что будет пересчитан во время создания, Вы должны сделать это вручную в функции __init__
, поскольку пересчёт не вызывается автоматически. Этот пример не требует этого поскольку метод onChanged
класса Box
имеет тот же эффект, что и функция execute
, но пример ниже полагается на то, что будет пересчитан перед тем как будет показан в окне трёхмерного просмотра. В этих примерах это делается вручную с помощью ActiveDocument.recompute()
, но в более сложных сценариях Вы должны решить, где пересчитать либо весь документ, или объект FeaturePython.
Этот пример создаёт несколько исключений трасс стека в окне отчётов. Это поскольку метод onChanged
класса Box
вызывается каждый раз как свойство добавляется в __init__
. Когда первое было добавлено, параметры Width и Height и потому попытки доступа к ним безуспешны.
Описание __getstate__
и __setstate__
находится в теме форума obj.Proxy.Type is a dict, not a string.
obj.addProperty(...)
returns obj
, so that the value of the property can be set on the same line:
obj.addProperty("App::PropertyLength", "Length", "Box", "Length of the box").Length = 1.0
Which is equivalent to:
obj.addProperty("App::PropertyLength", "Length", "Box", "Length of the box")
obj.Length = 1.0
Другой более сложный пример
Данный пример использует верстак Part для создания октаэдра, затем создает собственное Coin представление с помощью Pivy.
Сначала сам Документированный Объект:
import FreeCAD, FreeCADGui, Part
import pivy
from pivy import coin
class Octahedron:
def __init__(self, obj):
"Add some custom properties to our box feature"
obj.addProperty("App::PropertyLength","Length","Octahedron","Length of the octahedron").Length=1.0
obj.addProperty("App::PropertyLength","Width","Octahedron","Width of the octahedron").Width=1.0
obj.addProperty("App::PropertyLength","Height","Octahedron", "Height of the octahedron").Height=1.0
obj.addProperty("Part::PropertyPartShape","Shape","Octahedron", "Shape of the octahedron")
obj.Proxy = self
def execute(self, fp):
# Define six vetices for the shape
v1 = FreeCAD.Vector(0,0,0)
v2 = FreeCAD.Vector(fp.Length,0,0)
v3 = FreeCAD.Vector(0,fp.Width,0)
v4 = FreeCAD.Vector(fp.Length,fp.Width,0)
v5 = FreeCAD.Vector(fp.Length/2,fp.Width/2,fp.Height/2)
v6 = FreeCAD.Vector(fp.Length/2,fp.Width/2,-fp.Height/2)
# Make the wires/faces
f1 = self.make_face(v1,v2,v5)
f2 = self.make_face(v2,v4,v5)
f3 = self.make_face(v4,v3,v5)
f4 = self.make_face(v3,v1,v5)
f5 = self.make_face(v2,v1,v6)
f6 = self.make_face(v4,v2,v6)
f7 = self.make_face(v3,v4,v6)
f8 = self.make_face(v1,v3,v6)
shell=Part.makeShell([f1,f2,f3,f4,f5,f6,f7,f8])
solid=Part.makeSolid(shell)
fp.Shape = solid
# helper mehod to create the faces
def make_face(self,v1,v2,v3):
wire = Part.makePolygon([v1,v2,v3,v1])
face = Part.Face(wire)
return face
Теперь , мы обладаем визуальным представлением объекта, ответственного за отображение объекта в 3D сцене:
class ViewProviderOctahedron:
def __init__(self, obj):
"Set this object to the proxy object of the actual view provider"
obj.addProperty("App::PropertyColor","Color","Octahedron","Color of the octahedron").Color=(1.0,0.0,0.0)
obj.Proxy = self
def attach(self, obj):
"Setup the scene sub-graph of the view provider, this method is mandatory"
self.shaded = coin.SoGroup()
self.wireframe = coin.SoGroup()
self.scale = coin.SoScale()
self.color = coin.SoBaseColor()
self.data=coin.SoCoordinate3()
self.face=coin.SoIndexedFaceSet()
self.shaded.addChild(self.scale)
self.shaded.addChild(self.color)
self.shaded.addChild(self.data)
self.shaded.addChild(self.face)
obj.addDisplayMode(self.shaded,"Shaded");
style=coin.SoDrawStyle()
style.style = coin.SoDrawStyle.LINES
self.wireframe.addChild(style)
self.wireframe.addChild(self.scale)
self.wireframe.addChild(self.color)
self.wireframe.addChild(self.data)
self.wireframe.addChild(self.face)
obj.addDisplayMode(self.wireframe,"Wireframe");
self.onChanged(obj,"Color")
def updateData(self, fp, prop):
"If a property of the handled feature has changed we have the chance to handle this here"
# fp is the handled feature, prop is the name of the property that has changed
if prop == "Shape":
s = fp.getPropertyByName("Shape")
self.data.point.setNum(6)
cnt=0
for i in s.Vertexes:
self.data.point.set1Value(cnt,i.X,i.Y,i.Z)
cnt=cnt+1
self.face.coordIndex.set1Value(0,0)
self.face.coordIndex.set1Value(1,1)
self.face.coordIndex.set1Value(2,2)
self.face.coordIndex.set1Value(3,-1)
self.face.coordIndex.set1Value(4,1)
self.face.coordIndex.set1Value(5,3)
self.face.coordIndex.set1Value(6,2)
self.face.coordIndex.set1Value(7,-1)
self.face.coordIndex.set1Value(8,3)
self.face.coordIndex.set1Value(9,4)
self.face.coordIndex.set1Value(10,2)
self.face.coordIndex.set1Value(11,-1)
self.face.coordIndex.set1Value(12,4)
self.face.coordIndex.set1Value(13,0)
self.face.coordIndex.set1Value(14,2)
self.face.coordIndex.set1Value(15,-1)
self.face.coordIndex.set1Value(16,1)
self.face.coordIndex.set1Value(17,0)
self.face.coordIndex.set1Value(18,5)
self.face.coordIndex.set1Value(19,-1)
self.face.coordIndex.set1Value(20,3)
self.face.coordIndex.set1Value(21,1)
self.face.coordIndex.set1Value(22,5)
self.face.coordIndex.set1Value(23,-1)
self.face.coordIndex.set1Value(24,4)
self.face.coordIndex.set1Value(25,3)
self.face.coordIndex.set1Value(26,5)
self.face.coordIndex.set1Value(27,-1)
self.face.coordIndex.set1Value(28,0)
self.face.coordIndex.set1Value(29,4)
self.face.coordIndex.set1Value(30,5)
self.face.coordIndex.set1Value(31,-1)
def getDisplayModes(self,obj):
"Return a list of display modes."
modes=[]
modes.append("Shaded")
modes.append("Wireframe")
return modes
def getDefaultDisplayMode(self):
"Return the name of the default display mode. It must be defined in getDisplayModes."
return "Shaded"
def setDisplayMode(self,mode):
return mode
def onChanged(self, vp, prop):
"Here we can do something when a single property got changed"
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
if prop == "Color":
c = vp.getPropertyByName("Color")
self.color.rgb.setValue(c[0],c[1],c[2])
def getIcon(self):
return """
/* XPM */
static const char * ViewProviderBox_xpm[] = {
"16 16 6 1",
" c None",
". c #141010",
"+ c #615BD2",
"@ c #C39D55",
"# c #000000",
"$ c #57C355",
" ........",
" ......++..+..",
" .@@@@.++..++.",
" .@@@@.++..++.",
" .@@ .++++++.",
" ..@@ .++..++.",
"###@@@@ .++..++.",
"##$.@@$#.++++++.",
"#$#$.$$$........",
"#$$####### ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
" #$#$$$$$# ",
" ##$$$$$# ",
" ####### "};
"""
def dumps(self):
return None
def loads(self,state):
return None
Наконец, когда определен наш объект и его визуальный объект, нам просто нужно вызвать их:
FreeCAD.newDocument()
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Octahedron")
Octahedron(a)
ViewProviderOctahedron(a.ViewObject)
Создание выделяемых объектов
Если вы хотите чтобы ваш объект можно было выбрать, или по крайней мере его часть, щелкнув по нему в окне, вы должны включить его Coin геометрию внутрь узла SoFCSelection. Если ваш объект обладает сложным представлением, с виджетами, аннотациями, и т.д, вам может потребоваться только часть его в SoFCSelection. Всё, что находится в SoFCSelection постоянно сканируется FreeCAD для обнаружения выделения/предварительного отбора, так что имеет смысл попробовать не перегружать его ненужным сканированием.
Как только части графа сцены, которые должны быть выбраны, оказываются внутри узлов SoFCSelection, вам необходимо предоставить два метода для обработки пути выбора. Путь выбора может принимать форму строки, содержащей имена каждого элемента в пути, или массива объектов графа сцены. Вы предоставляете два метода: getDetailPath
, который преобразует путь строки в массив объектов scenegraph (графа сцены), и getElementPicked
, который принимает элемент, по которому щелкнули в графе сцены, и возвращает его строковое имя (примечание, а не его строковый путь).
Вот вышеприведённый пример с молекулой, адаптированный для выбора элементов молекулы:
class Molecule:
def __init__(self, obj):
''' Add two point properties '''
obj.addProperty("App::PropertyVector","p1","Line","Start point")
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(5,0,0)
obj.Proxy = self
def onChanged(self, fp, prop):
if prop == "p1" or prop == "p2":
''' Print the name of the property that has changed '''
fp.Shape = Part.makeLine(fp.p1,fp.p2)
def execute(self, fp):
''' Print a short message when doing a recomputation, this method is mandatory '''
fp.Shape = Part.makeLine(fp.p1,fp.p2)
class ViewProviderMolecule:
def __init__(self, obj):
''' Set this object to the proxy object of the actual view provider '''
obj.Proxy = self
self.ViewObject = obj
sep1=coin.SoSeparator()
sel1 = coin.SoType.fromName('SoFCSelection').createInstance()
# sel1.policy.setValue(coin.SoSelection.SHIFT)
sel1.ref()
sep1.addChild(sel1)
self.trl1=coin.SoTranslation()
sel1.addChild(self.trl1)
sel1.addChild(coin.SoSphere())
sep2=coin.SoSeparator()
sel2 = coin.SoType.fromName('SoFCSelection').createInstance()
sel2.ref()
sep2.addChild(sel2)
self.trl2=coin.SoTranslation()
sel2.addChild(self.trl2)
sel2.addChild(coin.SoSphere())
obj.RootNode.addChild(sep1)
obj.RootNode.addChild(sep2)
self.updateData(obj.Object, 'p2')
self.sel1 = sel1
self.sel2 = sel2
def getDetailPath(self, subname, path, append):
vobj = self.ViewObject
if append:
path.append(vobj.RootNode)
path.append(vobj.SwitchNode)
mode = vobj.SwitchNode.whichChild.getValue()
if mode >= 0:
mode = vobj.SwitchNode.getChild(mode)
path.append(mode)
sub = Part.splitSubname(subname)[-1]
if sub == 'Atom1':
path.append(self.sel1)
elif sub == 'Atom2':
path.append(self.sel2)
else:
path.append(mode.getChild(0))
return True
def getElementPicked(self, pp):
path = pp.getPath()
if path.findNode(self.sel1) >= 0:
return 'Atom1'
if path.findNode(self.sel2) >= 0:
return 'Atom2'
raise NotImplementedError
def updateData(self, fp, prop):
"If a property of the handled feature has changed we have the chance to handle this here"
# fp is the handled feature, prop is the name of the property that has changed
if prop == "p1":
p = fp.getPropertyByName("p1")
self.trl1.translation=(p.x,p.y,p.z)
elif prop == "p2":
p = fp.getPropertyByName("p2")
self.trl2.translation=(p.x,p.y,p.z)
def dumps(self):
return None
def loads(self,state):
return None
def makeMolecule():
FreeCAD.newDocument()
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Molecule")
Molecule(a)
ViewProviderMolecule(a.ViewObject)
FreeCAD.ActiveDocument.recompute()
Работа с простыми формами
Если ваш параметрический объект - это просто геометрическая форма, то вам не нужно использовать view provider объект. Форма будет отображаться стандартными способами представления форм FreeCAD:
import FreeCAD as App
import FreeCADGui
import FreeCAD
import Part
class Line:
def __init__(self, obj):
'''"App two point properties" '''
obj.addProperty("App::PropertyVector","p1","Line","Start point")
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(1,0,0)
obj.Proxy = self
def execute(self, fp):
'''"Print a short message when doing a recomputation, this method is mandatory" '''
fp.Shape = Part.makeLine(fp.p1,fp.p2)
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Line")
Line(a)
a.ViewObject.Proxy=0 # just set it to something different from None (this assignment is needed to run an internal notification)
FreeCAD.ActiveDocument.recompute()
Тот же код с применением ViewProviderLine
import FreeCAD as App
import FreeCADGui
import FreeCAD
import Part
class Line:
def __init__(self, obj):
'''"App two point properties" '''
obj.addProperty("App::PropertyVector","p1","Line","Start point")
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(100,0,0)
obj.Proxy = self
def execute(self, fp):
'''"Print a short message when doing a recomputation, this method is mandatory" '''
fp.Shape = Part.makeLine(fp.p1,fp.p2)
class ViewProviderLine:
def __init__(self, obj):
''' Set this object to the proxy object of the actual view provider '''
obj.Proxy = self
def getDefaultDisplayMode(self):
''' Return the name of the default display mode. It must be defined in getDisplayModes. '''
return "Flat Lines"
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Line")
Line(a)
ViewProviderLine(a.ViewObject)
App.ActiveDocument.recompute()
Структура графа сцены
You may have noticed that the examples above construct their scenegraphs in slightly different ways. Some use obj.addDisplayMode(node, "modename")
while others use obj.SwitchNode.getChild(x).addChild(y)
.
Each feature in a FreeCAD document is based the following scenegraph structure:
RootNode
\- SwitchNode
\- Shaded
- Wireframe
- etc
The SwitchNode
displays only one of its children, depending on which display mode is selection in FreeCAD.
The examples which use addDisplayMode
are constructing their scenegraphs solely out of coin3d scenegraph elements. Under the covers, addDisplayMode
adds a new child to the SwitchNode
; the name of that node will match the display mode it was passed.
The examples which use SwitchNode.getChild(x).addChild
also construct part of their geometry using functions from the Part workbench, such as fp.Shape = Part.makeLine(fp.p1,fp.p2)
. This constructs the different display mode scenegraphs under the SwitchNode
; when we later come to add coin3d elements to the scenegraph, we need to add them to the existing display mode scenegraphs using addChild
rather than creating a new child of the SwitchNode
.
When using addDisplayMode()
to add geometry to the scenegraph, each display mode should have its own node which is passed to addDisplayMode()
; don't reuse the same node for this. Doing so will confuse the selection mechanism. It's okay if each display mode's node has the same geometry nodes added below it, just the root of each display mode needs to be distinct.
Here is the above molecule example, adapted to be drawn only with Coin3D scenegraph objects instead of using objects from the Part workbench:
import Part
from pivy import coin
class Molecule:
def __init__(self, obj):
''' Add two point properties '''
obj.addProperty("App::PropertyVector","p1","Line","Start point")
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(5,0,0)
obj.Proxy = self
def onChanged(self, fp, prop):
pass
def execute(self, fp):
''' Print a short message when doing a recomputation, this method is mandatory '''
pass
class ViewProviderMolecule:
def __init__(self, obj):
''' Set this object to the proxy object of the actual view provider '''
self.constructed = False
obj.Proxy = self
self.ViewObject = obj
def attach(self, obj):
material = coin.SoMaterial()
material.diffuseColor = (1.0, 0.0, 0.0)
material.emissiveColor = (1.0, 0.0, 0.0)
drawStyle = coin.SoDrawStyle()
drawStyle.pointSize.setValue(10)
drawStyle.style = coin.SoDrawStyle.LINES
wireframe = coin.SoGroup()
shaded = coin.SoGroup()
self.wireframe = wireframe
self.shaded = shaded
self.coords = coin.SoCoordinate3()
self.coords.point.setValues(0, 2, [FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(1, 0, 0)])
wireframe += self.coords
wireframe += drawStyle
wireframe += material
shaded += self.coords
shaded += drawStyle
shaded += material
g = coin.SoGroup()
sel1 = coin.SoType.fromName('SoFCSelection').createInstance()
sel1.style = 'EMISSIVE_DIFFUSE'
p1 = coin.SoType.fromName('SoIndexedPointSet').createInstance()
p1.coordIndex.set1Value(0, 0)
sel1 += p1
g += sel1
wireframe += g
shaded += g
g = coin.SoGroup()
sel2 = coin.SoType.fromName('SoFCSelection').createInstance()
sel2.style = 'EMISSIVE_DIFFUSE'
p2 = coin.SoType.fromName('SoIndexedPointSet').createInstance()
p2.coordIndex.set1Value(0, 1)
sel2 += p2
g += sel2
wireframe += g
shaded += g
g = coin.SoGroup()
sel3 = coin.SoType.fromName('SoFCSelection').createInstance()
sel3.style = 'EMISSIVE_DIFFUSE'
p3 = coin.SoType.fromName('SoIndexedLineSet').createInstance()
p3.coordIndex.setValues(0, 2, [0, 1])
sel3 += p3
g += sel3
wireframe += g
shaded += g
obj.addDisplayMode(wireframe, 'Wireframe')
obj.addDisplayMode(shaded, 'Shaded')
self.sel1 = sel1
self.sel2 = sel2
self.sel3 = sel3
self.constructed = True
self.updateData(obj.Object, 'p2')
def getDetailPath(self, subname, path, append):
vobj = self.ViewObject
if append:
path.append(vobj.RootNode)
path.append(vobj.SwitchNode)
mode = vobj.SwitchNode.whichChild.getValue()
FreeCAD.Console.PrintWarning("getDetailPath: mode {} is active\n".format(mode))
if mode >= 0:
mode = vobj.SwitchNode.getChild(mode)
path.append(mode)
sub = Part.splitSubname(subname)[-1]
print(sub)
if sub == 'Atom1':
path.append(self.sel1)
elif sub == 'Atom2':
path.append(self.sel2)
elif sub == 'Line':
path.append(self.sel3)
else:
path.append(mode.getChild(0))
return True
def getElementPicked(self, pp):
path = pp.getPath()
if path.findNode(self.sel1) >= 0:
return 'Atom1'
if path.findNode(self.sel2) >= 0:
return 'Atom2'
if path.findNode(self.sel3) >= 0:
return 'Line'
raise NotImplementedError
def updateData(self, fp, prop):
"If a property of the handled feature has changed we have the chance to handle this here"
# fp is the handled feature, prop is the name of the property that has changed
if not self.constructed:
return
if prop == "p1":
p = fp.getPropertyByName("p1")
self.coords.point.set1Value(0, p)
elif prop == "p2":
p = fp.getPropertyByName("p2")
self.coords.point.set1Value(1, p)
def getDisplayModes(self, obj):
return ['Wireframe', 'Shaded']
def getDefaultDisplayMode(self):
return 'Shaded'
def setDisplayMode(self, mode):
return mode
def dumps(self):
return None
def loads(self,state):
return None
def makeMolecule():
FreeCAD.newDocument()
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Molecule")
Molecule(a)
b=ViewProviderMolecule(a.ViewObject)
a.touch()
FreeCAD.ActiveDocument.recompute()
return a,b
a,b = makeMolecule()
Программируемый объект Part Design
When making scripted objects in Part Design the process is similar to the scripted objects discussed above, but with a few additional considerations. We must handle 2 shape properties, one for the shape we see in the 3D view and another for the shape used by the pattern tools, such as polar pattern features. The object shapes also needs to be fused to any existing material already in the Body (or cut from it in the case of Subtractive features). And we must account for the placement and attachment of our objects a little bit differently.
Part Design scripted solid object features should be based on either PartDesign::FeaturePython, PartDesign::FeatureAdditivePython, or PartDesign::FeatureSubtractivePython rather than Part::FeaturePython. Only the Additive and Subtractive variants can be used in pattern features, and if based on Part::FeaturePython when the user drops the object into a Part Design Body it becomes a BaseFeature rather than being treated by the Body as a native Part Design object. Note: all of these are expected to be solids, so if you are making a non-solid feature it should be based on Part::FeaturePython or else the next feature in the tree will attempt to fuse to as a solid and it will fail.
Here is a simple example of making a Tube primitive, similar to the Tube primitive in Part Workbench except this one will be a Part Design solid feature object. For this we will 2 separate files: pdtube.FCMacro and pdtube.py. The .FCMacro file will be executed by the user to create the object. The .py file will hold the class definitions, imported by the .FCMacro. The reason for doing it this way is to maintain the parametric nature of the object after restarting FreeCAD and opening a document containing one of our Tubes.
First, the class definition file:
# -*- coding: utf-8 -*-
#classes should go in pdtube.py
import FreeCAD, FreeCADGui, Part
class PDTube:
def __init__(self,obj):
obj.addProperty("App::PropertyLength","Radius1","Tube","Radius1").Radius1 = 5
obj.addProperty("App::PropertyLength","Radius2","Tube","Radius2").Radius2 = 10
obj.addProperty("App::PropertyLength","Height","Tube","Height of tube").Height = 10
self.makeAttachable(obj)
obj.Proxy = self
def makeAttachable(self, obj):
if int(FreeCAD.Version()[1]) >= 19:
obj.addExtension('Part::AttachExtensionPython')
else:
obj.addExtension('Part::AttachExtensionPython', obj)
obj.setEditorMode('Placement', 0) #non-readonly non-hidden
def execute(self,fp):
outer_cylinder = Part.makeCylinder(fp.Radius2, fp.Height)
inner_cylinder = Part.makeCylinder(fp.Radius1, fp.Height)
if fp.Radius1 == fp.Radius2: #just make cylinder
tube_shape = outer_cylinder
elif fp.Radius1 < fp.Radius2:
tube_shape = outer_cylinder.cut(inner_cylinder)
else: #invert rather than error out
tube_shape = inner_cylinder.cut(outer_cylinder)
if not hasattr(fp, "positionBySupport"):
self.makeAttachable(fp)
fp.positionBySupport()
tube_shape.Placement = fp.Placement
#BaseFeature (shape property of type Part::PropertyPartShape) is provided for us
#with the PartDesign::FeaturePython and related classes, but it might be empty
#if our object is the first object in the tree. it's a good idea to check
#for its existence in case we want to make type Part::FeaturePython, which won't have it
if hasattr(fp, "BaseFeature") and fp.BaseFeature != None:
if "Subtractive" in fp.TypeId:
full_shape = fp.BaseFeature.Shape.cut(tube_shape)
else:
full_shape = fp.BaseFeature.Shape.fuse(tube_shape)
full_shape.transformShape(fp.Placement.inverse().toMatrix(), True) #borrowed from gears workbench
fp.Shape = full_shape
else:
fp.Shape = tube_shape
if hasattr(fp,"AddSubShape"): #PartDesign::FeatureAdditivePython and
#PartDesign::FeatureSubtractivePython have this
#property but PartDesign::FeaturePython does not
#It is the shape used for copying in pattern features
#for example in making a polar pattern
tube_shape.transformShape(fp.Placement.inverse().toMatrix(), True)
fp.AddSubShape = tube_shape
class PDTubeVP:
def __init__(self, obj):
'''Set this object to the proxy object of the actual view provider'''
obj.Proxy = self
def attach(self,vobj):
self.vobj = vobj
def updateData(self, fp, prop):
'''If a property of the handled feature has changed we have the chance to handle this here'''
pass
def getDisplayModes(self,obj):
'''Return a list of display modes.'''
modes=[]
modes.append("Flat Lines")
modes.append("Shaded")
modes.append("Wireframe")
return modes
def getDefaultDisplayMode(self):
'''Return the name of the default display mode. It must be defined in getDisplayModes.'''
return "Flat Lines"
def setDisplayMode(self,mode):
'''Map the display mode defined in attach with those defined in getDisplayModes.\
Since they have the same names nothing needs to be done. This method is optional'''
return mode
def onChanged(self, vp, prop):
'''Here we can do something when a single property got changed'''
#FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
pass
def getIcon(self):
'''Return the icon in XPM format which will appear in the tree view. This method is\
optional and if not defined a default icon is shown.'''
return """
/* XPM */
static const char * ViewProviderBox_xpm[] = {
"16 16 6 1",
" c None",
". c #141010",
"+ c #615BD2",
"@ c #C39D55",
"# c #000000",
"$ c #57C355",
" ........",
" ......++..+..",
" .@@@@.++..++.",
" .@@@@.++..++.",
" .@@ .++++++.",
" ..@@ .++..++.",
"###@@@@ .++..++.",
"##$.@@$#.++++++.",
"#$#$.$$$........",
"#$$####### ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
"#$$#$$$$$# ",
" #$#$$$$$# ",
" ##$$$$$# ",
" ####### "};
"""
def dumps(self):
'''When saving the document this object gets stored using Python's json module.\
Since we have some un-serializable parts here -- the Coin stuff -- we must define this method\
to return a tuple of all serializable objects or None.'''
return None
def loads(self,state):
'''When restoring the serialized object from document we have the chance to set some internals here.\
Since no data were serialized nothing needs to be done here.'''
return None
And now the macro file to create the object:
# -*- coding: utf-8 -*-
#pdtube.FCMacro
import pdtube
#above line needed if the class definitions above are place in another file: PDTube.py
#this is needed if the tube object is to remain parametric after restarting FreeCAD and loading
#a document containing the object
body = FreeCADGui.ActiveDocument.ActiveView.getActiveObject("pdbody")
if not body:
FreeCAD.Console.PrintError("No active body.\n")
else:
from PySide import QtGui
window = FreeCADGui.getMainWindow()
items = ["Additive","Subtractive","Neither additive nor subtractive"]
item,ok =QtGui.QInputDialog.getItem(window,"Select tube type","Select whether you want additive, subtractive, or neither:",items,0,False)
if ok:
if item == items[0]:
className = "PartDesign::FeatureAdditivePython"
elif item == items[1]:
className = "PartDesign::FeatureSubtractivePython"
else:
className = "PartDesign::FeaturePython" #not usable in pattern features, such as polar pattern
tube = FreeCAD.ActiveDocument.addObject(className,"Tube")
pdtube.PDTube(tube)
pdtube.PDTubeVP(tube.ViewObject)
body.addObject(tube) #optionally we can also use body.insertObject() for placing at particular place in tree
Available object types
The list of all object types you can create with FreeCAD.ActiveDocument.addObject()
can be obtained with FreeCAD.ActiveDocument.supportedTypes()
. Only object types with a name ending in Python
can be used for scripted objects. These are listed here (for FreeCAD v0.21):
App::DocumentObjectGroupPython
App::FeaturePython
App::GeometryPython
App::LinkElementPython
App::LinkGroupPython
App::LinkPython
App::MaterialObjectPython
App::PlacementPython
Part::CustomFeaturePython
Part::FeaturePython
Part::Part2DObjectPython
Path::FeatureAreaPython
Path::FeatureAreaViewPython
Path::FeatureCompoundPython
Path::FeaturePython
Path::FeatureShapePython
Sketcher::SketchObjectPython
TechDraw::DrawComplexSectionPython
TechDraw::DrawLeaderLinePython
TechDraw::DrawPagePython
TechDraw::DrawRichAnnoPython
TechDraw::DrawTemplatePython
TechDraw::DrawTilePython
TechDraw::DrawTileWeldPython
TechDraw::DrawViewPartPython
TechDraw::DrawViewPython
TechDraw::DrawViewSectionPython
TechDraw::DrawViewSymbolPython
TechDraw::DrawWeldSymbolPython
Доступные методы
Полное описание доступно на странице методы FeaturePython.
Доступные свойства
Свойства - это "строительные блоки" объекта FeaturePython. Через них пользователь может взаимодействовать с объектом и вносить изменения в него. После создания нового FeaturePython объекта в вашем документе ( a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Box") ),вы можете получить список доступных свойств, с помощью:
obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Box")
obj.supportedProperties()
Вы получите список доступных свойств, которые более подробно описаны на странице пользовательских свойств объекта FeaturePython:
При добавлении новых свойств к пользовательским объектам, позаботьтесь об этом:
- Не используйте символы "<" или ">" в описании свойств (это вызовет поломку xml части .fcstd файла)
- Свойства хранятся в .fcstd файле в алфавитном порядке. Если у вас есть форма(shape) в ваших свойствах, любое свойство имя которого идет, в алфавитном порядке, после "Shape" , будет загружено ПОСЛЕ формы, что может привести к странному поведению.
The properties are defined in the PropertyStandard C++ header file.
Типы свойств
По умолчанию свойства могут быть обновлены. Имеется возможность сделать свойство только для чтения (read-only), например, в случае если требуется отображать только результат выполнения метода. Также возможно создать скрытое (hidden) свойство. Сам же тип свойства можно задать с помощью:
obj.setEditorMode("MyPropertyName", mode)
где переменная mode (short int типа) - может иметь следующие значения:
0 -- значение по умолчанию, допускает как чтение, так и запись 1 -- свойство только для чтения (read-only) 2 -- скрытое свойство (hidden)
The mode can also be set using a list of strings, e.g. obj.setEditorMode("Placement", ["ReadOnly", "Hidden"])
.
The EditorModes are not set at FreeCAD file reload. This could to be done by the loads
function. See http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=10#p108072. By using the setEditorMode
the properties are only read-only in the Property editor. They can still be changed from Python. To really make them read-only the setting has to be passed directly inside the addProperty
function. See http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=20#p109709 for an example.
Using the direct setting in the addProperty
function, you also have more possibilities. In particular, an interesting one is mark a property as an output property. This way FreeCAD won't mark the feature as touched when changing it (so no need to recompute).
Example of output property (see also https://forum.freecadweb.org/viewtopic.php?t=24928):
obj.addProperty("App::PropertyString", "MyCustomProperty", "", "", 8)
The property types that can be set at last parameter of the addProperty function are:
0 -- Prop_None, No special property type 1 -- Prop_ReadOnly, Property is read-only in the editor 2 -- Prop_Transient, Property won't be saved to file 4 -- Prop_Hidden, Property won't appear in the editor 8 -- Prop_Output, Modified property doesn't touch its parent container 16 -- Prop_NoRecompute, Modified property doesn't touch its container for recompute 32 -- Prop_NoPersist, Property won't be saved to file at all
Вы можете найти эти различные типы свойств, определённые в заголовочном файле PropertyContainer исходного кода C++.
Available extensions
The list of available extensions can be obtained with grep -RI EXTENSION_PROPERTY_SOURCE_TEMPLATE
in the repository of the source code and is given here (for FreeCAD v0.21).
For objects:
App::GeoFeatureGroupExtensionPython
App::GroupExtensionPython
App::LinkBaseExtensionPython
App::LinkExtensionPython
App::OriginGroupExtensionPython
Part::AttachExtensionPython
TechDraw::CosmeticExtensionPython
For view objects:
Gui::ViewProviderExtensionPython
Gui::ViewProviderGeoFeatureGroupExtensionPython
Gui::ViewProviderGroupExtensionPython
Gui::ViewProviderOriginGroupExtensionPython
PartGui::ViewProviderAttachExtensionPython
PartGui::ViewProviderSplineExtensionPython
There exist other extensions but they do not work as-is:
App::ExtensionPython
TechDrawGui::ViewProviderCosmeticExtensionPython
TechDrawGui::ViewProviderDrawingViewExtensionPython
TechDrawGui::ViewProviderPageExtensionPython
TechDrawGui::ViewProviderTemplateExtensionPython
Дополнительная информация
Дополнительные страницы Вики FreeCADа:
- Scripted objects saving attributes
- Scripted objects migration
- Scripted objects with attachment
- Viewproviders
Интересные темы форума про создание объектов с помощью скриптов:
- Python object attributes lost at load
- New FeaturePython is grey
- Explanation on dumps and loads, official documentation
- Eigenmode frequency always 0?
- how to implement python feature's setEdit properly?
В дополнение к представленным примерам, посмотрите FreeCAD src/Mod/TemplatePyMod/FeaturePython.py, находящийся в папке с исходными кодами FreeCAD.
- 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
Introduction
FreeCAD может импортироваться как модуль Python в другие программы или в автономную консоль python, вместе со всеми модулями и компонентами. Можно даже импортировать пользовательский интерфейс FreeCAD как модуль python, но с некоторыми ограничениями.
Использование FreeCAD без GUI
Одно из первых, простых, прямой и полезных приложений , вы можете создать чтобы импортировать FreeCAD документы в ващу программу. В следующем примере, мы импортируем Part геометрию FreeCAD документа в blender. Это готовый сценарий. Я надеюсь вы будете поражены его простотой:
FREECADPATH = '/usr/lib/freecad-python3/lib/' # path to your FreeCAD.so or FreeCAD.pyd file,
# for Windows you must either use \\ or / in the path, using a single \ is problematic
# FREECADPATH = 'C:\\FreeCAD\\bin'
import Blender, sys
sys.path.append(FREECADPATH)
def import_fcstd(filename):
try:
import FreeCAD
except ValueError:
Blender.Draw.PupMenu('Error%t|FreeCAD library not found. Please check the FREECADPATH variable in the import script is correct')
else:
scene = Blender.Scene.GetCurrent()
import Part
doc = FreeCAD.open(filename)
objects = doc.Objects
for ob in objects:
if ob.Type[:4] == 'Part':
shape = ob.Shape
if shape.Faces:
mesh = Blender.Mesh.New()
rawdata = shape.tessellate(1)
for v in rawdata[0]:
mesh.verts.append((v.x,v.y,v.z))
for f in rawdata[1]:
mesh.faces.append.append(f)
scene.objects.new(mesh,ob.Name)
Blender.Redraw()
def main():
Blender.Window.FileSelector(import_fcstd, 'IMPORT FCSTD',
Blender.sys.makename(ext='.fcstd'))
# This lets you import the script without running it
if __name__=='__main__':
main()
Сперва, вожно убедится что python найдет ваши FreeCAD библиотеки. как только он их найдет, все модули FreeCAD такие как Part, которые мы также будем использовать, будут доступны автоматически. Так что мы просто берес значение переменной sys.path, где описано где python ищет модули, и мы добавляем буть к библиотекам FreeCAD. Это изменение носит временный характер, и будет потеряно когдв мы закроем наш python интепритатор. Другой способ которым вы можете создать ссылку на вашу FreeCAD библиотеку в одном посковых путей python. Я держал путь в константе (FREECADPATH) так что бы было легче другому пользователю сценария настроить его под свою систему.
FREECADPATH = 'C:\\FreeCAD\\bin' # path to your FreeCAD.so or FreeCAD.pyd file
import sys
sys.path.append(FREECADPATH)
После того как мы проверили что библиотеки загружены (повторите/исключите последовательность), теперь мы можем работать с FreeCAD, так же как если бы мы были внутри FreeCADовского python интерпритатора. Мы открываем FreeCAD документ который передается нам с помощью функции main() , и мы создаем список список своих объектов. Затем, так как мы решаем заботиться только о геометрии детали «Part», мы проверяем, содержит ли свойство Type каждого объекта «Part», и затем тесселяем ее.
import Part
doc = FreeCAD.open(filename)
objects = doc.Objects
for ob in objects:
if ob.Type[:4] == 'Part':
Трансляция(tesselation- преобразование в сетку) произвела список вершин и список граней, заданных индексами вершин.Это идеальный вариант, так как он точно аналогично блендеру задает сетки. Таким образом, наша задача до смешного проста, мы просто добавим оба списка содержащих вершины и грани в блендере сетку. Когда все будет сделано, мы просто перерисуем экран, и вот оно!
if ob.Type[:4] == 'Part':
shape = ob.Shape
if shape.Faces:
mesh = Blender.Mesh.New()
rawdata = shape.tessellate(1)
for v in rawdata[0]:
mesh.verts.append((v.x,v.y,v.z))
for f in rawdata[1]:
mesh.faces.append.append(f)
scene.objects.new(mesh,ob.Name)
Blender.Redraw()
Конечно этот сценарий очень прост (в действительности я создал более продвинутый здесь), вы можете продолжить его, например импортирвав также полигиональные объекты, или импортировав Part геометрию которая не обладает гранями, или импортировав другие файловые форматы которые может читать FreeCAD. Вы также можете экспортировать геометрию в FreeCAD документ, что можно сделать схожим образом. Вы также можете создать диолог, где пользователь может выбрать что импортировать и.т.д... Красота всего этого заключается в том, что вы позволяете FreeCAD делать фоновую работу вто время как его результаты представляются в программе по вашему выбору.
Note: checkout Headless FreeCAD for running FreeCAD without the GUI.
Использование FreeCAD с GUI
Начиная с версии 4.2, Qt обладает интегрирующей способностью встраивать Qt-GUI-зависящие плагины в не-Qt главные приложения и распространять как привязки к главному приложению.
В особенности, для FreeCAD это означает что он может быть импортирован из другого приложения со всем его интерфейсом где головное приложение имеет полный контроль над FreeCAD, тогда.
Весь python код , для достижения этого, укладывается всего в две строчки
import FreeCADGui
FreeCADGui.showMainWindow()
Если головное приложение основывается на Qt, то это решение должно работать на всех платформах поддерживаемых Qt. Однако, головное приложение должно ссылаться на туже версию Qt что и FreeCAD потому что иначе мы може столкнуться с неожиданными ошибками во время выполнения.
Однако,Для не-Qt преложений, имеется несколько ограничений , вы должны знать об этом. Это решение , вероятно не сработает вместе с остальными инструментальными средствами. Для Windows это работает до тех пор пока головное приложение напрямую основано на Win32 или любом другом инструментальном средстве который внутренне использует Win32 API такие как wxWidgets, MFC или WinForms. Для того чтобы заставить его работать под X11, головное предложение необходимо связать с библиотекой "glib".
Обратите внимание, для любого консольного приложения это решение, конечно, не работает, потому что не существует запущенного цикла обработки событий.
Caveats
Although it is possible to import FreeCAD to an external Python interpreter, this is not a common usage scenario and requires some care. Generally, it is better to use the Python included with FreeCAD, run FreeCAD via command line, or as a subprocess. See Start up and Configuration for more on the last two options.
Since the FreeCAD Python module is compiled from C++ (rather than being a pure Python module), it can only be imported from a compatible Python interpreter. Generally this means that the Python interpreter must be compiled with the same C compiler as was used to build FreeCAD. Information about the compiler used to build a Python interpreter (including the one built with FreeCAD) can be found as follows:
>>> import sys
>>> sys.version
'2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'
Related
- 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
Введение
Эта страница содержит примеры, обрывки, куски FreeCAD python кода, собранный для получения пользователями оптыта и обсуждения на форумах. Читайте и используете их как начало для ваших собственных сценариев...
Snippets
Обычный файл InitGui.py
Каждый модуль должен содержать, помимо основного файла модуля, файл InitGui.py, ответственный за вставку модуля в главное Gui. Это простой пример.
class ScriptWorkbench (Workbench):
MenuText = "Scripts"
def Initialize(self):
import Scripts # assuming Scripts.py is your module
list = ["Script_Cmd"] # That list must contain command names, that can be defined in Scripts.py
self.appendToolbar("My Scripts",list)
Gui.addWorkbench(ScriptWorkbench())
Обычный файл модуля
Это пример главного файла модуля, содержащего всё что ваш модуль делает. Это Scripts.py файл, вызываемый в предыдущем примере. Вы можете установить здесь все ваши пользовательские команды.
import FreeCAD, FreeCADGui
class ScriptCmd:
def Activated(self):
# Here your write what your ScriptCmd does...
FreeCAD.Console.PrintMessage('Hello, World!')
def GetResources(self):
return {'Pixmap' : 'path_to_an_icon/myicon.png', 'MenuText': 'Short text', 'ToolTip': 'More detailed text'}
FreeCADGui.addCommand('Script_Cmd', ScriptCmd())
Импорт нового типа файлов
Создание ипортировщика в нового типа файлов в FreeCAD просто. FreeCAD не считает, что вы импортируете данные в открытый документ, а скорее что вы просто можете непосредственно открыть новый тип файла. Так что все что вам нужно сделать, это добавить новое расширение файла в список известных расширений FreeCAD, и написать код, который будет читать файл и создавать объекты FreeCAD:
Это строка должна быть добавлена в InitGui.py файл для добавления нового расширения файлов в список:
# Assumes Import_Ext.py is the file that has the code for opening and reading .ext files
FreeCAD.addImportType("Your new File Type (*.ext)","Import_Ext")
Тогда в файле Import_Ext.py:
def open(filename):
doc=App.newDocument()
# here you do all what is needed with filename, read, classify data, create corresponding FreeCAD objects
doc.recompute()
Экспорт вашего документа в новые типы файлов работает схожим образом, исключая того что вы используете:
FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")
Добавление линии
Простейшая линия через две точки.
import Part,PartGui
doc=App.activeDocument()
# add a line element to the document and set its points
l=Part.LineSegment()
l.StartPoint=(0.0,0.0,0.0)
l.EndPoint=(1.0,1.0,1.0)
doc.addObject("Part::Feature","Line").Shape=l.toShape()
doc.recompute()
Добавление многоугольника
Многоугольник это просто набор соединенных отрезков (polyline в AutoCAD). Он необязательно должен быть замкнутым.
import Part, PartGui
doc = App.activeDocument()
n = list()
# create a 3D vector, set its coordinates and add it to the list
v = App.Vector(0,0,0)
n.append(v)
v = App.Vector(10,0,0)
n.append(v)
#... repeat for all nodes
# Create a polygon object and set its nodes
p = doc.addObject("Part::Polygon","Polygon")
p.Nodes = n
doc.recompute()
Добавление и удаление объекта из группы
doc=App.activeDocument()
grp=doc.addObject("App::DocumentObjectGroup", "Group")
lin=doc.addObject("Part::Feature", "Line")
grp.addObject(lin) # adds the lin object to the group grp
grp.removeObject(lin) # removes the lin object from the group grp
Примечание: Вы также можете добавлять другие группы в группу...
Добавление полигональной сетки
import Mesh
doc=App.activeDocument()
# create a new empty mesh
m = Mesh.Mesh()
# build up box out of 12 facets
m.addFacet(0.0,0.0,0.0, 0.0,0.0,1.0, 0.0,1.0,1.0)
m.addFacet(0.0,0.0,0.0, 0.0,1.0,1.0, 0.0,1.0,0.0)
m.addFacet(0.0,0.0,0.0, 1.0,0.0,0.0, 1.0,0.0,1.0)
m.addFacet(0.0,0.0,0.0, 1.0,0.0,1.0, 0.0,0.0,1.0)
m.addFacet(0.0,0.0,0.0, 0.0,1.0,0.0, 1.0,1.0,0.0)
m.addFacet(0.0,0.0,0.0, 1.0,1.0,0.0, 1.0,0.0,0.0)
m.addFacet(0.0,1.0,0.0, 0.0,1.0,1.0, 1.0,1.0,1.0)
m.addFacet(0.0,1.0,0.0, 1.0,1.0,1.0, 1.0,1.0,0.0)
m.addFacet(0.0,1.0,1.0, 0.0,0.0,1.0, 1.0,0.0,1.0)
m.addFacet(0.0,1.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0)
m.addFacet(1.0,1.0,0.0, 1.0,1.0,1.0, 1.0,0.0,1.0)
m.addFacet(1.0,1.0,0.0, 1.0,0.0,1.0, 1.0,0.0,0.0)
# scale to a edge langth of 100
m.scale(100.0)
# add the mesh to the active document
me=doc.addObject("Mesh::Feature","Cube")
me.Mesh=m
Добавление дуги или окружности
import Part
doc = App.activeDocument()
c = Part.Circle()
c.Radius=10.0
f = doc.addObject("Part::Feature", "Circle") # create a document with a circle feature
f.Shape = c.toShape() # Assign the circle shape to the shape property
doc.recompute()
Получение доступа и изменение представления объекта
Каждый объект в FreeCAD документе ассоциируется с визуальным представлением объекта, которое хранит все параметры , определяющие как объект представлен, такие как цвет, длина линий, и.т.д... Смотри так же отрывок Перечисление компонентов объекта ниже
gad = Gui.activeDocument() # access the active document containing all
# view representations of the features in the
# corresponding App document
v = gad.getObject("Cube") # access the view representation to the Mesh feature 'Cube'
v.ShapeColor # prints the color to the console
v.ShapeColor=(1.0,1.0,1.0) # sets the shape color to white
Replace the form of mouse with one image
import PySide2
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import QApplication
from PySide2.QtGui import QColor, QPixmap, QImage, QPainter, QCursor
from PySide2.QtCore import Qt
myImage = QtGui.QPixmap("Complete_Path_to_image.bmp")
cursor = QtGui.QCursor(myImage)
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(cursor))
Replace the form of mouse with one image (cross) include
The image is created by Gimp exported in a .XPM file. Copy and use the code between the bracket "{" code to copy "}"
import PySide2
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import QApplication
from PySide2.QtGui import QColor, QPixmap, QImage, QPainter, QCursor
from PySide2.QtCore import Qt
cross32x32Icon = [
"32 32 2 1",
" c None",
". c #FF0000",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" ",
"............... . ..............",
" ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . ",
" . "
]
myImage = QtGui.QPixmap(cross32x32Icon)
cursor = QtGui.QCursor(myImage)
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(cursor))
Observe camera change in the 3D viewer via Python
This can be done adding a Node sensor to the camera:
from pivy import coin
def callback(*args):
cam, sensor = args
print()
print("Cam position : {}".format(cam.position.getValue().getValue()))
print("Cam rotation : {}".format(cam.orientation.getValue().getValue()))
camera_node = Gui.ActiveDocument.ActiveView.getCameraNode()
node_sensor = coin.SoNodeSensor(callback, camera_node)
node_sensor.attach(camera_node)
Наблюдение за поведением мыши в трёхмерном окне через Python
Оболочка Inventor позволяет добавить один и более узлов обратного вызова (callback) в дерево сцен просмотрщика. По умолчанию, в FreeCAD на каждый просмотрщик установлен один узел обратного вызова, который позволяет добавить глобальные или статические функции C++. В соответствующих привязках Python предоставляются некоторые методы, позволяющие использовать эту технику из кода Python.
App.newDocument()
v=Gui.activeDocument().activeView()
#This class logs any mouse button events. As the registered callback function fires twice for 'down' and
#'up' events we need a boolean flag to handle this.
class ViewObserver:
def logPosition(self, info):
down = (info["State"] == "DOWN")
pos = info["Position"]
if (down):
FreeCAD.Console.PrintMessage("Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n")
o = ViewObserver()
c = v.addEventCallback("SoMouseButtonEvent",o.logPosition)
Теперь, выберите какую нибудь область в окне 3D-просмотра и наблюдайте сообщения в окне вывода. Для завершения наблюдения просто вызовите
v.removeEventCallback("SoMouseButtonEvent",c)
Поддерживаются следующие типы событий
- SoEvent -- Все события
- SoButtonEvent -- Все события клавиш клавиатуры и мыши
- SoLocation2Event -- события 2D перемещений (обычно движение мыши)
- SoMotion3Event -- события 3D перемещений (обычно spaceball)
- SoKeyboradEvent -- события нажатие и отпускание клавиш клавиатуры
- SoMouseButtonEvent -- события нажатия и отпускания клавиш мыши
- SoSpaceballButtonEvent -- события нажатия и отпускания клавиш spaceball
Python функции которые могут быть зарегистрированы в addEventCallback() предлагающем словарь(dictionary). В зависимости от наблюдателя события словарь может содержать различные ключи.
Для всех событий существуют ключи:
- Type -- Имя типа события т.е. SoMouseEvent, SoLocation2Event, ...
- Time -- текущие время в виде строки
- Position -- набор из двух целых чисел как позиция курсорa мыши
- ShiftDown -- логическая(boolean) переменная, true если Shift нажат, в противном случае false
- CtrlDown -- логическая(boolean) переменная, true если Ctrl нажат, в противном случае false
- AltDown -- логическая(boolean) переменная, true если Alt нажат, в противном случае false
Для всех клавишных событий, т.e. для событий клавиатуры, мыши или spaceball
- State -- Строка 'UP' если кнопка была вверху, 'DOWN' если кнопка была внизу или 'UNKNOWN' во всех остальных случаях
Для событий связанных с клавиатурой:
- Key -- значение нажатоой клаывиши
Для событий связанных с мышью
- Button -- Нажаты клавиши, могут быть BUTTON1, ..., BUTTON5 или ANY
Для событий spaceball:
- Button -- Нажатые клавиши, могут быть BUTTON1, ..., BUTTON7 или ANY
и наконец события движения:
- Translation -- набор из трех переменных floats
- Rotation -- кватернион поворота, т.е. набор из четырех переменных floats
Показать нажатые клавиши и команды Событий
Этот макрос отображает в отчете нажатия клавиш и команды всех событий
App.newDocument()
v=Gui.activeDocument().activeView()
class ViewObserver:
def logPosition(self, info):
try:
down = (info["Key"])
FreeCAD.Console.PrintMessage(str(down)+"\n") # here the character pressed
FreeCAD.Console.PrintMessage(str(info)+"\n") # list all events command
FreeCAD.Console.PrintMessage("_______________________________________"+"\n")
except Exception:
None
o = ViewObserver()
c = v.addEventCallback("SoEvent",o.logPosition)
#v.removeEventCallback("SoEvent",c) # remove ViewObserver
Манипулирование графом сцен в Python
Возможно так же получить и изменить в Python граф сцен с помощью модуля 'pivy' - привязки Python для Coin.
from pivy.coin import * # load the pivy module
view = Gui.ActiveDocument.ActiveView # get the active viewer
root = view.getSceneGraph() # the root is an SoSeparator node
root.addChild(SoCube())
view.fitAll()
API Python для pivy создано используя инструмент SWIG. Так как мы используем в FreeCAD некоторые самонаписанные узлы, вы не можете создавать их напрямую через Python. Но можно создать узел по его внутреннему имени. Экземпляр типа 'SoFCSelection' можно создать с помощью
type = SoType.fromName("SoFCSelection")
node = type.createInstance()
Добавление и удаление объектов в/из графа сцены
Добавление новых узлов в граф сцены (scenegraph) может сделать таким образом. Позаботьтесь всегда добавлять SoSeparator, чтобы иметь информацию о геометрии, координатах и материалах объекта. Следующий пример добавляет красную линию из (0,0,0) в (10,0,0):
from pivy import coin
sg = Gui.ActiveDocument.ActiveView.getSceneGraph()
co = coin.SoCoordinate3()
pts = [[0,0,0],[10,0,0]]
co.point.setValues(0,len(pts),pts)
ma = coin.SoBaseColor()
ma.rgb = (1,0,0)
li = coin.SoLineSet()
li.numVertices.setValue(2)
no = coin.SoSeparator()
no.addChild(co)
no.addChild(ma)
no.addChild(li)
sg.addChild(no)
Чтобы удалить её, просто введите:
sg.removeChild(no)
Сохранить sceneGraph в 3 сериях из 36 файлов
Просмотрите фрагмент кода, развернув этот раздел.
import math
import time
from FreeCAD import Base
from pivy import coin
size=(1000,1000)
dirname = "C:/Temp/animation/"
steps=36
angle=2*math.pi/steps
matX=Base.Matrix()
matX.rotateX(angle)
stepsX=Base.Placement(matX).Rotation
matY=Base.Matrix()
matY.rotateY(angle)
stepsY=Base.Placement(matY).Rotation
matZ=Base.Matrix()
matZ.rotateZ(angle)
stepsZ=Base.Placement(matZ).Rotation
view=Gui.ActiveDocument.ActiveView
cam=view.getCameraNode()
rotCamera=Base.Rotation(*cam.orientation.getValue().getValue())
# this sets the lookat point to the center of circumsphere of the global bounding box
view.fitAll()
# the camera's position, i.e. the user's eye point
position=Base.Vector(*cam.position.getValue().getValue())
distance=cam.focalDistance.getValue()
# view direction
vec=rotCamera.multVec(Base.Vector(0,0,-1))
# this is the point on the screen the camera looks at
# when rotating the camera we should make this point fix
lookat=position+vec*distance
# around x axis
for i in range(steps):
rotCamera=stepsX.multiply(rotCamera)
cam.orientation.setValue(*rotCamera.Q)
vec=rotCamera.multVec(Base.Vector(0,0,-1))
pos=lookat-vec*distance
cam.position.setValue(pos.x,pos.y,pos.z)
Gui.updateGui()
time.sleep(0.3)
view.saveImage(dirname+"x-%d.png" % i,*size)
# around y axis
for i in range(steps):
rotCamera=stepsY.multiply(rotCamera)
cam.orientation.setValue(*rotCamera.Q)
vec=rotCamera.multVec(Base.Vector(0,0,-1))
pos=lookat-vec*distance
cam.position.setValue(pos.x,pos.y,pos.z)
Gui.updateGui()
time.sleep(0.3)
view.saveImage(dirname+"y-%d.png" % i,*size)
# around z axis
for i in range(steps):
rotCamera=stepsZ.multiply(rotCamera)
cam.orientation.setValue(*rotCamera.Q)
vec=rotCamera.multVec(Base.Vector(0,0,-1))
pos=lookat-vec*distance
cam.position.setValue(pos.x,pos.y,pos.z)
Gui.updateGui()
time.sleep(0.3)
view.saveImage(dirname+"z-%d.png" % i,*size)
Добавление к интерфейсу пользовательских виджетов
Вы можете создать собственные виджеты с помощью Qt designerа, превратив их в сценарии на Python, и загрузив их в интерфейс FreeCAD с помощью PySide.
Python код созданный с помощью Ui python compiler (это инструмент для конвертирования файлов ui. созданных qt-designer в python код) в основном выглядит так (это простой пример, вы также может писать этот код напряму с помощью python):
class myWidget_Ui(object):
def setupUi(self, myWidget):
myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size()).expandedTo(myWidget.minimumSizeHint())) # sets size of the widget
self.label = QtGui.QLabel(myWidget) # creates a label
self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
self.label.setObjectName("label") # sets its name, so it can be found by name
def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))
Тогда все что вам нужно сделать, это создать ссылку на FreeCAD Qt окно, вставить виджет в него, и "преобразовать" этот виджет в ваш с Ui кодом который мы только что сделали:
app = QtGui.qApp
FCmw = app.activeWindow() # the active qt window, = the freecad window since we are inside it
# FCmw = FreeCADGui.getMainWindow() # use this line if the 'addDockWidget' error is declared
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
Добавить вкладку в Combo View
Следующий код позволяет добавить вкладку к Combo view отдельно от уже существующих вкладок «Модель» и «Задачи». Он также использует модуль uic
для загрузки файла пользовательского интерфейса прямо на этой вкладке.
# create new Tab in ComboView
from PySide import QtGui,QtCore
#from PySide import uic
def getMainWindow():
"returns the main window"
# using QtGui.qApp.activeWindow() isn't very reliable because if another
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
# returned
toplevel = QtGui.qApp.topLevelWidgets()
for i in toplevel:
if i.metaObject().className() == "Gui::MainWindow":
return i
raise Exception("No main window found")
def getComboView(mw):
dw=mw.findChildren(QtGui.QDockWidget)
for i in dw:
if str(i.objectName()) == "Combo View":
return i.findChild(QtGui.QTabWidget)
elif str(i.objectName()) == "Python Console":
return i.findChild(QtGui.QTabWidget)
raise Exception ("No tab widget found")
mw = getMainWindow()
tab = getComboView(getMainWindow())
tab2=QtGui.QDialog()
tab.addTab(tab2,"A Special Tab")
#uic.loadUi("/myTaskPanelforTabs.ui",tab2)
tab2.show()
#tab.removeTab(2)
Enable or disable a window
This script give the ability to manipulate the UI from the Python console to show/hide different components in the FreeCAD interface such as:
- Report view
- Tree view
- Property view
- Selection view
- Combo view
- Python console
- draftToolbar
from PySide import QtGui
mw = FreeCADGui.getMainWindow()
dws = mw.findChildren(QtGui.QDockWidget)
# objectName may be :
# "Report view"
# "Tree view"
# "Property view"
# "Selection view"
# "Combo View"
# "Python console"
# "draftToolbar"
for i in dws:
if i.objectName() == "Report view":
dw = i
break
va = dw.toggleViewAction()
va.setChecked(True) # True or False
dw.setVisible(True) # True or False
Open a custom webpage
import WebGui
WebGui.openBrowser("http://www.example.com")
Get the HTML contents of an opened webpage
from PySide import QtGui,QtWebKit
a = QtGui.qApp
mw = a.activeWindow()
v = mw.findChild(QtWebKit.QWebFrame)
html = unicode(v.toHtml())
print( html)
Retrieve the coordinates of 3 selected points or objects
# -*- coding: utf-8 -*-
# the line above to put the accentuated in the remarks
# If this line is missing, an error will be returned
# extract and use the coordinates of 3 objects selected
import Part, FreeCAD, math, PartGui, FreeCADGui
from FreeCAD import Base, Console
sel = FreeCADGui.Selection.getSelection() # " sel " contains the items selected
if len(sel)!=3 :
# If there are no 3 objects selected, an error is displayed in the report view
# The \r and \n at the end of line mean return and the newline CR + LF.
Console.PrintError("Select 3 points exactly\r\n")
else :
points=[]
for obj in sel:
points.append(obj.Shape.BoundBox.Center)
for pt in points:
# display of the coordinates in the report view
Console.PrintMessage(str(pt.x)+"\r\n")
Console.PrintMessage(str(pt.y)+"\r\n")
Console.PrintMessage(str(pt.z)+"\r\n")
Console.PrintMessage(str(pt[1]) + "\r\n")
List all objects
# -*- coding: utf-8 -*-
import FreeCAD,Draft
# List all objects of the document
doc = FreeCAD.ActiveDocument
objs = FreeCAD.ActiveDocument.Objects
#App.Console.PrintMessage(str(objs) + "\n")
#App.Console.PrintMessage(str(len(FreeCAD.ActiveDocument.Objects)) + " Objects" + "\n")
for obj in objs:
a = obj.Name # list the Name of the object (not modifiable)
b = obj.Label # list the Label of the object (modifiable)
try:
c = obj.LabelText # list the LabeText of the text (modifiable)
App.Console.PrintMessage(str(a) +" "+ str(b) +" "+ str(c) + "\n") # Displays the Name the Label and the text
except:
App.Console.PrintMessage(str(a) +" "+ str(b) + "\n") # Displays the Name and the Label of the object
#doc.removeObject("Box") # Clears the designated object
List the dimensions of an object, given its name
for edge in FreeCAD.ActiveDocument.MyObjectName.Shape.Edges: # replace "MyObjectName" for list
print( edge.Length)
Function resident with the mouse click action
Here with SelObserver on a object select
# -*- coding: utf-8 -*-
# causes an action to the mouse click on an object
# This function remains resident (in memory) with the function "addObserver(s)"
# "removeObserver(s) # Uninstalls the resident function
class SelObserver:
def setPreselection(self,doc,obj,sub): # Preselection object
App.Console.PrintMessage(str(sub)+ "\n") # The part of the object name
def addSelection(self,doc,obj,sub,pnt): # Selection object
App.Console.PrintMessage("addSelection"+ "\n")
App.Console.PrintMessage(str(doc)+ "\n") # Name of the document
App.Console.PrintMessage(str(obj)+ "\n") # Name of the object
App.Console.PrintMessage(str(sub)+ "\n") # The part of the object name
App.Console.PrintMessage(str(pnt)+ "\n") # Coordinates of the object
App.Console.PrintMessage("______"+ "\n")
def removeSelection(self,doc,obj,sub): # Remove the selection
App.Console.PrintMessage("removeSelection"+ "\n")
def setSelection(self,doc): # Set selection
App.Console.PrintMessage("setSelection"+ "\n")
def clearSelection(self,doc): # If click on the screen, clear the selection
App.Console.PrintMessage("clearSelection"+ "\n") # If click on another object, clear the previous object
s =SelObserver()
FreeCADGui.Selection.addObserver(s) # install the function mode resident
#FreeCADGui.Selection.removeObserver(s) # Uninstall the resident function
Other example with ViewObserver on a object select or view
App.newDocument()
v=Gui.activeDocument().activeView()
#This class logs any mouse button events. As the registered callback function fires twice for 'down' and
#'up' events we need a boolean flag to handle this.
class ViewObserver:
def __init__(self, view):
self.view = view
def logPosition(self, info):
down = (info["State"] == "DOWN")
pos = info["Position"]
if (down):
FreeCAD.Console.PrintMessage("Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n")
pnt = self.view.getPoint(pos)
FreeCAD.Console.PrintMessage("World coordinates: " + str(pnt) + "\n")
info = self.view.getObjectInfo(pos)
FreeCAD.Console.PrintMessage("Object info: " + str(info) + "\n")
o = ViewObserver(v)
c = v.addEventCallback("SoMouseButtonEvent",o.logPosition)
Display the active document
class DocObserver: # document Observer
def slotActivateDocument(self,doc):
print(doc.Name)
obs=DocObserver()
App.addDocumentObserver(obs)
#App.removeDocumentObserver(obs) # desinstalle la fonction residente
To remove the observer call:
App.removeDocumentObserver(obs) # desinstalle la fonction residente
Find/select all elements below the cursor
from pivy import coin
import FreeCADGui
def mouse_over_cb( event_callback):
event = event_callback.getEvent()
pos = event.getPosition().getValue()
listObjects = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo((int(pos[0]),int(pos[1])))
obj = []
if listObjects:
FreeCAD.Console.PrintMessage("\n *** Objects under mouse pointer ***")
for o in listObjects:
label = str(o["Object"])
if not label in obj:
obj.append(label)
FreeCAD.Console.PrintMessage("\n"+str(obj))
view = FreeCADGui.ActiveDocument.ActiveView
mouse_over = view.addEventCallbackPivy( coin.SoLocation2Event.getClassTypeId(), mouse_over_cb )
# to remove Callback :
#view.removeEventCallbackPivy( coin.SoLocation2Event.getClassTypeId(), mouse_over)
####
#The easy way is probably to use FreeCAD's selection.
#FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo(mouse_coords)
####
#you get that kind of result :
#'Document': 'Unnamed', 'Object': 'Box', 'Component': 'Face2', 'y': 8.604081153869629, 'x': 21.0, 'z': 8.553047180175781
####
#You can use this data to add your element to FreeCAD's selection :
#FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,'Face2',21.0,8.604081153869629,8.553047180175781)
Перечисление компонентов объекта
This function list the components of an object and extracts:
- this object its XYZ coordinates,
- its edges and their lengths center of mass and coordinates
- its faces and their center of mass
- its faces and their surfaces and coordinates
# -*- coding: utf-8 -*-
# This function list the components of an object
# and extract this object its XYZ coordinates,
# its edges and their lengths center of mass and coordinates
# its faces and their center of mass
# its faces and their surfaces and coordinates
# 8/05/2014
import Draft,Part
def detail():
sel = FreeCADGui.Selection.getSelection() # Select an object
if len(sel) != 0: # If there is a selection then
Vertx=[]
Edges=[]
Faces=[]
compt_V=0
compt_E=0
compt_F=0
pas =0
perimetre = 0.0
EdgesLong = []
# Displays the "Name" and the "Label" of the selection
App.Console.PrintMessage("Selection > " + str(sel[0].Name) + " " + str(sel[0].Label) +"\n"+"\n")
for j in enumerate(sel[0].Shape.Edges): # Search the "Edges" and their lengths
compt_E+=1
Edges.append("Edge%d" % (j[0]+1))
EdgesLong.append(str(sel[0].Shape.Edges[compt_E-1].Length))
perimetre += (sel[0].Shape.Edges[compt_E-1].Length) # calculates the perimeter
# Displays the "Edge" and its length
App.Console.PrintMessage("Edge"+str(compt_E)+" Length > "+str(sel[0].Shape.Edges[compt_E-1].Length)+"\n")
# Displays the "Edge" and its center mass
App.Console.PrintMessage("Edge"+str(compt_E)+" Center > "+str(sel[0].Shape.Edges[compt_E-1].CenterOfMass)+"\n")
num = sel[0].Shape.Edges[compt_E-1].Vertexes[0]
Vertx.append("X1: "+str(num.Point.x))
Vertx.append("Y1: "+str(num.Point.y))
Vertx.append("Z1: "+str(num.Point.z))
# Displays the coordinates 1
App.Console.PrintMessage("X1: "+str(num.Point[0])+" Y1: "+str(num.Point[1])+" Z1: "+str(num.Point[2])+"\n")
try:
num = sel[0].Shape.Edges[compt_E-1].Vertexes[1]
Vertx.append("X2: "+str(num.Point.x))
Vertx.append("Y2: "+str(num.Point.y))
Vertx.append("Z2: "+str(num.Point.z))
except:
Vertx.append("-")
Vertx.append("-")
Vertx.append("-")
# Displays the coordinates 2
App.Console.PrintMessage("X2: "+str(num.Point[0])+" Y2: "+str(num.Point[1])+" Z2: "+str(num.Point[2])+"\n")
App.Console.PrintMessage("\n")
App.Console.PrintMessage("Perimeter of the form : "+str(perimetre)+"\n")
App.Console.PrintMessage("\n")
FacesSurf = []
for j in enumerate(sel[0].Shape.Faces): # Search the "Faces" and their surface
compt_F+=1
Faces.append("Face%d" % (j[0]+1))
FacesSurf.append(str(sel[0].Shape.Faces[compt_F-1].Area))
# Displays 'Face' and its surface
App.Console.PrintMessage("Face"+str(compt_F)+" > Surface "+str(sel[0].Shape.Faces[compt_F-1].Area)+"\n")
# Displays 'Face' and its CenterOfMass
App.Console.PrintMessage("Face"+str(compt_F)+" > Center "+str(sel[0].Shape.Faces[compt_F-1].CenterOfMass)+"\n")
# Displays 'Face' and its Coordinates
FacesCoor = []
fco = 0
for f0 in sel[0].Shape.Faces[compt_F-1].Vertexes: # Search the Vertexes of the face
fco += 1
FacesCoor.append("X"+str(fco)+": "+str(f0.Point.x))
FacesCoor.append("Y"+str(fco)+": "+str(f0.Point.y))
FacesCoor.append("Z"+str(fco)+": "+str(f0.Point.z))
# Displays 'Face' and its Coordinates
App.Console.PrintMessage("Face"+str(compt_F)+" > Coordinate"+str(FacesCoor)+"\n")
# Displays 'Face' and its Volume
App.Console.PrintMessage("Face"+str(compt_F)+" > Volume "+str(sel[0].Shape.Faces[compt_F-1].Volume)+"\n")
App.Console.PrintMessage("\n")
# Displays the total surface of the form
App.Console.PrintMessage("Surface of the form : "+str(sel[0].Shape.Area)+"\n")
# Displays the total Volume of the form
App.Console.PrintMessage("Volume of the form : "+str(sel[0].Shape.Volume)+"\n")
detail()
List the PropertiesList
import FreeCADGui
from FreeCAD import Console
o = App.ActiveDocument.ActiveObject
op = o.PropertiesList
for p in op:
Console.PrintMessage("Property: "+ str(p)+ " Value: " + str(o.getPropertyByName(p))+"\r\n")
Add a single Property Comment
import Draft
obj = FreeCADGui.Selection.getSelection()[0]
obj.addProperty("App::PropertyString","GComment","Draft","Font name").GComment = "Comment here"
App.activeDocument().recompute()
Search and data extraction
Examples of research and decoding information on an object.
Each section is independently and is separated by "############" can be copied directly into the Python console, or in a macro or use this macro. The description of the macro in the commentary.
Displaying it in the "Report View" window (View > Views > Report view)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Exemples de recherche et de decodage d'informations sur un objet
# Chaque section peut etre copiee directement dans la console Python ou dans une macro ou utilisez la macro tel quel
# Certaines commandes se repetent seul l'approche est differente
# L'affichage se fait dans la Vue rapport : Menu Affichage > Vues > Vue rapport
#
# Examples of research and decoding information on an object
# Each section can be copied directly into the Python console, or in a macro or uses this macro
# Certain commands as repeat alone approach is different
# Displayed in Report view: View > Views > report view
#
# rev:30/08/2014:29/09/2014:17/09/2015 22/11/2019 30/12/2022
from FreeCAD import Base
import DraftVecUtils, Draft, Part
##################################################################################
# info in the object
box = App.ActiveDocument.getObject('Box') # object
####
print(dir(box)) # all options disponible in the object
####
print(box.Name) # object name
####
print(box.Content) # content of the object in XML format
##################################################################################
#
# example of using the information listed
#
# search the name of the active document
mydoc = FreeCAD.activeDocument().Name # Name of active Document
App.Console.PrintMessage("Active docu : "+(mydoc)+"\n")
##################################################################################
# search the document name and the name of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
object_FullName = sel[0].FullName # file Name and Name of the object selected
App.Console.PrintMessage("object_FullName: "+(object_FullName)+"\n")
##################################################################################
# search the label of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
object_Label = sel[0].Label # Label of the object (modifiable)
App.Console.PrintMessage("object_Label : "+(object_Label)+"\n")
##################################################################################
#TypeID object FreeCAD selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
App.Console.PrintMessage("sel : "+str(sel[0])+"\n\n") # sel[0] first object selected
##################################################################################
# search the Name of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
object_Name = sel[0].Name # Name of the object (not modifiable)
App.Console.PrintMessage("object_Name : "+str(object_Name)+"\n\n")
##################################################################################
# search the Sub Element Name of the sub object selected
try:
SubElement = FreeCADGui.Selection.getSelectionEx() # sub element name with getSelectionEx()
element_ = SubElement[0].SubElementNames[0] # name of 1 element selected
App.Console.PrintMessage("elementSelec : "+str(element_)+"\n\n")
except:
App.Console.PrintMessage("Oups"+"\n\n")
##################################################################################
# give the length of the subObject selected
SubElementLength = Gui.Selection.getSelectionEx()[0].SubObjects[0].Length # sub element or element name with getSelectionEx()
App.Console.PrintMessage("SubElement length: "+str(SubElementLength)+"\n")# length
##################################################################################
# list the edges and the coordinates of the object[0] selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
i = 0
for j in enumerate(sel[0].Shape.Edges): # list all Edges
i += 1
App.Console.PrintMessage("Edges n : "+str(i)+"\n")
a = sel[0].Shape.Edges[j[0]].Vertexes[0]
App.Console.PrintMessage("X1 : "+str(a.Point.x)+"\n") # coordinate XYZ first point
App.Console.PrintMessage("Y1 : "+str(a.Point.y)+"\n") #
App.Console.PrintMessage("Z1 : "+str(a.Point.z)+"\n") #
try:
a = sel[0].Shape.Edges[j[0]].Vertexes[1]
App.Console.PrintMessage("X2 : "+str(a.Point.x)+"\n") # coordinate XYZ second point
App.Console.PrintMessage("Y2 : "+str(a.Point.y)+"\n") #
App.Console.PrintMessage("Z2 : "+str(a.Point.z)+"\n") #
except:
App.Console.PrintMessage("Oups"+"\n")
App.Console.PrintMessage("\n")
##################################################################################
# give the sub element name, length, coordinates, BoundBox, BoundBox.Center, Area of the SubObjects selected
try:
SubElement = FreeCADGui.Selection.getSelectionEx() # sub element name with getSelectionEx()
subElementName = Gui.Selection.getSelectionEx()[0].SubElementNames[0] # sub element name with getSelectionEx()
App.Console.PrintMessage("subElementName : "+str(subElementName)+"\n")
subObjectLength = Gui.Selection.getSelectionEx()[0].SubObjects[0].Length # sub element Length
App.Console.PrintMessage("subObjectLength: "+str(subObjectLength)+"\n\n")
subObjectX1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.x # sub element coordinate X1
App.Console.PrintMessage("subObject_X1 : "+str(subObjectX1)+"\n")
subObjectY1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.y # sub element coordinate Y1
App.Console.PrintMessage("subObject_Y1 : "+str(subObjectY1)+"\n")
subObjectZ1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.z # sub element coordinate Z1
App.Console.PrintMessage("subObject_Z1 : "+str(subObjectZ1)+"\n\n")
try:
subObjectX2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.x # sub element coordinate X2
App.Console.PrintMessage("subObject_X2 : "+str(subObjectX2)+"\n")
subObjectY2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.y # sub element coordinate Y2
App.Console.PrintMessage("subObject_Y2 : "+str(subObjectY2)+"\n")
subObjectZ2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.z # sub element coordinate Z2
App.Console.PrintMessage("subObject_Z2 : "+str(subObjectZ2)+"\n\n")
except:
App.Console.PrintMessage("Oups"+"\n\n")
subObjectBoundBox = Gui.Selection.getSelectionEx()[0].SubObjects[0].BoundBox # sub element BoundBox coordinates
App.Console.PrintMessage("subObjectBBox : "+str(subObjectBoundBox)+"\n")
subObjectBoundBoxCenter = Gui.Selection.getSelectionEx()[0].SubObjects[0].BoundBox.Center # sub element BoundBoxCenter
App.Console.PrintMessage("subObjectBBoxCe: "+str(subObjectBoundBoxCenter)+"\n")
surfaceFace = Gui.Selection.getSelectionEx()[0].SubObjects[0].Area # Area of the face selected
App.Console.PrintMessage("surfaceFace : "+str(surfaceFace)+"\n\n")
except:
App.Console.PrintMessage("Oups"+"\n\n")
##################################################################################
# give the area of the object
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
surface = sel[0].Shape.Area # Area object complete
App.Console.PrintMessage("surfaceObjet : "+str(surface)+"\n\n")
##################################################################################
# give the Center Of Mass and coordinates of the object
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
CenterOfMass = sel[0].Shape.CenterOfMass # Center of Mass of the object
App.Console.PrintMessage("CenterOfMass : "+str(CenterOfMass)+"\n")
App.Console.PrintMessage("CenterOfMassX : "+str(CenterOfMass[0])+"\n") # coordinates [0]=X [1]=Y [2]=Z
App.Console.PrintMessage("CenterOfMassY : "+str(CenterOfMass[1])+"\n") # or CenterOfMass.x, CenterOfMass.y, CenterOfMass.z
App.Console.PrintMessage("CenterOfMassZ : "+str(CenterOfMass[2])+"\n\n")
##################################################################################
# list the all faces of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
for j in enumerate(sel[0].Shape.Faces): # List alles faces of the object
App.Console.PrintMessage("Face : "+str("Face%d" % (j[0]+1))+"\n")
App.Console.PrintMessage("\n\n")
##################################################################################
# give the volume of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
volume_ = sel[0].Shape.Volume # Volume of the object
App.Console.PrintMessage("volume_ : "+str(volume_)+"\n\n")
##################################################################################
# give the BoundBox of the oject selected all type
objs = FreeCADGui.Selection.getSelection() # select object with getSelection()
if len(objs) >= 1: # serch the object type
if hasattr(objs[0], "Shape"):
s = objs[0].Shape
elif hasattr(objs[0], "Mesh"): # upgrade with wmayer thanks #http://forum.freecadweb.org/viewtopic.php?f=13&t=22331
s = objs[0].Mesh
elif hasattr(objs[0], "Points"):
s = objs[0].Points
boundBox_= s.BoundBox # BoundBox of the object
App.Console.PrintMessage("boundBox_ : "+str(boundBox_)+"\n") #
boundBoxLX = boundBox_.XLength # Length x boundBox rectangle
boundBoxLY = boundBox_.YLength # Length y boundBox rectangle
boundBoxLZ = boundBox_.ZLength # Length z boundBox rectangle
boundBoxXMin = boundBox_.XMin # coordonate XMin
boundBoxYMin = boundBox_.YMin # coordonate YMin
boundBoxZMin = boundBox_.ZMin # coordonate ZMin
boundBoxXMax = boundBox_.XMax # coordonate XMax
boundBoxYMax = boundBox_.YMax # coordonate YMax
boundBoxZMax = boundBox_.ZMax # coordonate ZMax
boundBoxDiag= boundBox_.DiagonalLength # Diagonal Length boundBox rectangle
boundBoxCenter = boundBox_.Center # BoundBox Center
boundBoxCenterOfGravity = boundBox_.CenterOfGravity # BoundBox CenterOfGravity
App.Console.PrintMessage("boundBoxLX : "+str(boundBoxLX)+"\n")
App.Console.PrintMessage("boundBoxLY : "+str(boundBoxLY)+"\n")
App.Console.PrintMessage("boundBoxLZ : "+str(boundBoxLZ)+"\n\n")
App.Console.PrintMessage("boundBoxXMin : "+str(boundBoxXMin)+"\n")
App.Console.PrintMessage("boundBoxYMin : "+str(boundBoxYMin)+"\n")
App.Console.PrintMessage("boundBoxZMin : "+str(boundBoxZMin)+"\n")
App.Console.PrintMessage("boundBoxXMax : "+str(boundBoxXMax)+"\n")
App.Console.PrintMessage("boundBoxYMax : "+str(boundBoxYMax)+"\n")
App.Console.PrintMessage("boundBoxZMax : "+str(boundBoxZMax)+"\n\n")
App.Console.PrintMessage("boundBoxDiag : "+str(boundBoxDiag)+"\n")
App.Console.PrintMessage("boundBoxCenter : "+str(boundBoxCenter)+"\n")
App.Console.PrintMessage("boundBox Center of Gravity : "+str(boundBoxCenterOfGravity )+"\n\n")
##################################################################################
# give the complete placement of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
pl = sel[0].Shape.Placement # Placement Vector XYZ and Yaw-Pitch-Roll
App.Console.PrintMessage("Placement : "+str(pl)+"\n")
##################################################################################
# give the placement Base (xyz) of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
pl = sel[0].Shape.Placement.Base # Placement Vector XYZ
App.Console.PrintMessage("PlacementBase : "+str(pl)+"\n\n")
##################################################################################
# give the placement Base (xyz) of the object selected
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
oripl_X = sel[0].Placement.Base[0] # decode Placement X
oripl_Y = sel[0].Placement.Base[1] # decode Placement Y
oripl_Z = sel[0].Placement.Base[2] # decode Placement Z
# same
#oripl_X = sel[0].Placement.Base.x # decode Placement X
#oripl_Y = sel[0].Placement.Base.y # decode Placement Y
#oripl_Z = sel[0].Placement.Base.z # decode Placement Z
App.Console.PrintMessage("oripl_X : "+str(oripl_X)+"\n")
App.Console.PrintMessage("oripl_Y : "+str(oripl_Y)+"\n")
App.Console.PrintMessage("oripl_Z : "+str(oripl_Z)+"\n\n")
##################################################################################
# give the placement rotation of the object selected (x, y, z, angle rotation)
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
rotation = sel[0].Placement.Rotation # decode Placement Rotation
App.Console.PrintMessage("rotation : "+str(rotation)+"\n\n")
##################################################################################
# give the placement rotation of the object selected (x, y, z, angle rotation)
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
pl = sel[0].Shape.Placement.Rotation # decode Placement Rotation other method
App.Console.PrintMessage("Placement Rot : "+str(pl)+"\n\n")
##################################################################################
# give the rotation of the object selected (angle rotation)
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
pl = sel[0].Shape.Placement.Rotation.Angle # decode Placement Rotation Angle
App.Console.PrintMessage("Placement Rot Angle : "+str(pl)+"\n\n")
##################################################################################
# give the rotation.Q of the object selected (angle rotation in Radian) for convert: math.degrees(angleInRadian)
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
Rot = sel[0].Placement.Rotation.Q # Placement Rotation Q
App.Console.PrintMessage("Rot : "+str(Rot)+ "\n")
Rot_0 = sel[0].Placement.Rotation.Q[0] # decode Placement Rotation Q
App.Console.PrintMessage("Rot_0 : "+str(Rot_0)+ " rad , "+str(180 * Rot_0 / 3.1416)+" deg "+"\n") # or math.degrees(angle)
Rot_1 = sel[0].Placement.Rotation.Q[1] # decode Placement Rotation 1
App.Console.PrintMessage("Rot_1 : "+str(Rot_1)+ " rad , "+str(180 * Rot_1 / 3.1416)+" deg "+"\n") # or math.degrees(angle)
Rot_2 = sel[0].Placement.Rotation.Q[2] # decode Placement Rotation 2
App.Console.PrintMessage("Rot_2 : "+str(Rot_2)+ " rad , "+str(180 * Rot_2 / 3.1416)+" deg "+"\n") # or math.degrees(angle)
Rot_3 = sel[0].Placement.Rotation.Q[3] # decode Placement Rotation 3
App.Console.PrintMessage("Rot_3 : "+str(Rot_3)+"\n\n")
Rot_Axis = sel[0].Placement.Rotation.Axis # Placement Rotation .Axis
App.Console.PrintMessage("Rot_Axis : "+str(Rot_Axis)+ "\n")
Rot_Angle = sel[0].Placement.Rotation.Angle # Placement Rotation .Angle
App.Console.PrintMessage("Rot_Angle : "+str(Rot_Angle)+ "\n\n")
##################################################################################
# give the rotation of the object selected toEuler (angle rotation in degrees)
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
angle = sel[0].Shape.Placement.Rotation.toEuler() # angle Euler
App.Console.PrintMessage("Angle : "+str(angle)+"\n")
Yaw = sel[0].Shape.Placement.Rotation.toEuler()[0] # decode angle Euler Yaw (Z) lacet (alpha)
App.Console.PrintMessage("Yaw : "+str(Yaw)+"\n")
Pitch = sel[0].Shape.Placement.Rotation.toEuler()[1] # decode angle Euler Pitch (Y) tangage (beta)
App.Console.PrintMessage("Pitch : "+str(Pitch)+"\n")
Roll = sel[0].Shape.Placement.Rotation.toEuler()[2] # decode angle Euler Roll (X) roulis (gamma)
App.Console.PrintMessage("Roll : "+str(Roll)+"\n\n")
rot = App.Rotation()
rot.setYawPitchRoll(45,45,0)
print("Angle: ", rot.Angle)
print("Axis: ", rot.Axis)
print("RawAxis: ", rot.RawAxis)
print("YawPitchRoll: ", rot.getYawPitchRoll())
print("Rotation: ", rot)
print("Quaternion: ", rot.Q)
##################################################################################
# find Midpoint of the selected line
import Draft, DraftGeomUtils
sel = FreeCADGui.Selection.getSelection()
vecteur = DraftGeomUtils.findMidpoint(sel[0].Shape.Edges[0]) # find Midpoint
App.Console.PrintMessage(vecteur)
Draft.makePoint(vecteur)
##################################################################################
Manual search of an element with label
# Extract the coordinate X,Y,Z and Angle giving the label (here "Cylindre")
App.Console.PrintMessage("Base.x : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.x)+"\n")
App.Console.PrintMessage("Base.y : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.y)+"\n")
App.Console.PrintMessage("Base.z : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.z)+"\n")
App.Console.PrintMessage("Base.Angle : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Rotation.Angle)+"\n\n")
##################################################################################
Note: Usually the angles are given in Radian. To convert them:
- angle in Degrees to Radians :
- Angle in radian = pi * (angle in degree) / 180
- Angle in radian = math.radians(angle in degree)
- angle in Radians to Degrees :
- Angle in degree = 180 * (angle in radian) / pi
- Angle in degree = math.degrees(angle in radian)
Cartesian coordinates
This code displays the Cartesian coordinates of the selected item.
Change the value of "numberOfPoints" if you want a different number of points (precision)
numberOfPoints = 100 # Decomposition number (or precision you can change)
selectedEdge = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0].copy() # select one element
points = selectedEdge.discretize(numberOfPoints) # discretize the element
i=0
for p in points: # list and display the coordinates
i+=1
print( i, " X", p.x, " Y", p.y, " Z", p.z)
Other method display on "Int" and "Float"
import Part
from FreeCAD import Base
c=Part.makeCylinder(2,10) # create the circle
Part.show(c) # display the shape
# slice accepts two arguments:
#+ the normal of the cross section plane
#+ the distance from the origin to the cross section plane. Here you have to find a value so that the plane intersects your object
s=c.slice(Base.Vector(0,1,0),0) #
# here the result is a single wire
# depending on the source object this can be several wires
s=s[0]
# if you only need the vertexes of the shape you can use
v=[]
for i in s.Vertexes:
v.append(i.Point)
# but you can also sub-sample the section to have a certain number of points (int) ...
p1=s.discretize(20)
ii=0
for i in p1:
ii+=1
print( i ) # Vector()
print( ii, ": X:", i.x, " Y:", i.y, " Z:", i.z ) # Vector decode
Draft.makeWire(p1,closed=False,face=False,support=None) # to see the difference accuracy (20)
## uncomment to use
#import Draft
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # first transform the DWire in Wire "downgrade"
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # second split the Wire in single objects "downgrade"
#
##Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) # to attach lines contiguous SELECTED use "upgrade"
# ... or define a sampling distance (float)
p2=s.discretize(0.5)
ii=0
for i in p2:
ii+=1
print( i ) # Vector()
print( ii, ": X:", i.x, " Y:", i.y, " Z:", i.z ) # Vector decode
Draft.makeWire(p2,closed=False,face=False,support=None) # to see the difference accuracy (0.5)
## uncomment to use
#import Draft
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # first transform the DWire in Wire "downgrade"
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # second split the Wire in single objects "downgrade"
#
##Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) # to attach lines contiguous SELECTED use "upgrade"
Select all objects in the document
import FreeCAD
for obj in FreeCAD.ActiveDocument.Objects:
print( obj.Name ) # display the object Name
objName = obj.Name
obj = App.ActiveDocument.getObject(objName)
Gui.Selection.addSelection(obj) # select the object
Select a face of an object by Name object and Face number
# select one face of the object
import FreeCAD, Draft
App=FreeCAD
nameObject = "Box" # objet
faceSelect = "Face3" # face to selection
loch=App.ActiveDocument.getObject(nameObject) # objet
Gui.Selection.clearSelection() # clear all selection
Gui.Selection.addSelection(loch,faceSelect) # select the face specified
s = Gui.Selection.getSelectionEx()
#Draft.makeFacebinder(s) #
Get the normal vector of a face of an object by Name object and number Face (r.Q)
## normal of a face by giving the number of the face and the name of the object (rotation Q with yL, uV) = (App.Vector (x, y, z), angle))
## normal d'une face en donnant le numero de la face et le nom de l'objet (rotation Q avec yL, uV) = (App.Vector(x, y, z),angle))
from FreeCAD import Vector
numero_Face = 2 # number of the face searched (begin 0, 1, 2, 3 .....)
nomObjet = "Box" # object name
yL = Gui.ActiveDocument.getObject(nomObjet).Object.Shape.Faces[numero_Face].CenterOfMass
uv = Gui.ActiveDocument.getObject(nomObjet).Object.Shape.Faces[numero_Face].Surface.parameter(yL)
nv = Gui.ActiveDocument.getObject(nomObjet).Object.Shape.Faces[numero_Face].normalAt(uv[0], uv[1])
direction = yL.sub(nv + yL)
print("Direction : ",direction)
r = App.Rotation(App.Vector(0,0,1),direction)
print("Rotation : ", r)
print("Rotation Q : ", r.Q)
Get the normal vector of a face of an object by Name object and number of Face
numero_Face = 2 # number of the face searched (begin 0, 1, 2, 3 .....)
nomObjet = "Box" # object name
normal = Gui.ActiveDocument.getObject(nomObjet).Object.Shape.Faces[numero_Face].normalAt(0,0)
print("Face"+str(numero_Face), " : ", normal)
Get the normal vector of an object selected and number of Face
## normal of a face by giving the number of the face of the selected object
selectionObjects = FreeCADGui.Selection.getSelection()
numero_Face = 3 # numero de la face recherchee
normal = selectionObjects[0].Shape.Faces[numero_Face].normalAt(0,0)
print(normal)
# selectionne la face numerotee
Gui.Selection.clearSelection()
Gui.Selection.addSelection(selectionObjects[0],"Face"+str(numero_Face))
Get the normal vector on the surface
This example show how to find normal vector on the surface by find the u,v parameters of one point on the surface and use u,v parameters to find normal vector
def normal(self):
ss=FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0].copy()#SubObjects[0] is the edge list
points = ss.discretize(3.0)#points on the surface edge,
#this example just use points on the edge for example.
#However point is not necessary on the edge, it can be anywhere on the surface.
face=FreeCADGui.Selection.getSelectionEx()[0].SubObjects[1]
for pp in points:
pt=FreeCAD.Base.Vector(pp.x,pp.y,pp.z)#a point on the surface edge
uv=face.Surface.parameter(pt)# find the surface u,v parameter of a point on the surface edge
u=uv[0]
v=uv[1]
normal=face.normalAt(u,v)#use u,v to find normal vector
print( normal)
line=Part.makeLine((pp.x,pp.y,pp.z), (normal.x,normal.y,normal.z))
Part.show(line)
Get the normal vector of the face and create a line at the point mouse clicked
import PySide2
import Draft, Part, FreeCAD, FreeCADGui
import FreeCADGui as Gui
from FreeCAD import Base
FreeCAD.ActiveDocument.openTransaction("Tyty") # memorise les actions (avec annuler restore)
selectedFace = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0]
pointClick = FreeCADGui.Selection.getSelectionEx()[0].PickedPoints[0]
########## section direction
plr = FreeCAD.Placement()
yL = pointClick
uv = selectedFace.Surface.parameter(yL)
nv = direction = selectedFace.normalAt(uv[0], uv[1])
r = App.Rotation(App.Vector(0,0,1),nv)
plr.Rotation.Q = r.Q
plr.Base = pointClick
########## section direction
line = Draft.make_wire([App.Vector(0.0,0.0,0.0), App.Vector(0.0,0.0,20.0)] ) # create line
line.Placement=plr
FreeCAD.ActiveDocument.recompute()
print( "Direction (radian) : ",direction ) # direction in radian
Get the normal vector of a surface from a STL file
def getNormal(cb):
if cb.getEvent().getState() == coin.SoButtonEvent.UP:
pp = cb.getPickedPoint()
if pp:
vec = pp.getNormal().getValue()
index = coin.cast(pp.getDetail(), "SoFaceDetail").getFaceIndex()
print("Normal: {}, Face index: {}".format(str(vec), index))
from pivy import coin
meth=Gui.ActiveDocument.ActiveView.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), getNormal)
you are done then run for quit:
Gui.ActiveDocument.ActiveView.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), meth)
Create one object to the position of the Camera
# create one object of the position to camera with "getCameraOrientation()"
# the object is still facing the screen
import Draft
plan = FreeCADGui.ActiveDocument.ActiveView.getCameraOrientation()
plan = str(plan)
###### extract data
a = ""
for i in plan:
if i in ("0123456789e.- "):
a+=i
a = a.strip(" ")
a = a.split(" ")
####### extract data
#print( a)
#print( a[0])
#print( a[1])
#print( a[2])
#print( a[3])
xP = float(a[0])
yP = float(a[1])
zP = float(a[2])
qP = float(a[3])
pl = FreeCAD.Placement()
pl.Rotation.Q = (xP,yP,zP,qP) # rotation of object
pl.Base = FreeCAD.Vector(0.0,0.0,0.0) # here coordinates XYZ of Object
rec = Draft.makeRectangle(length=10.0,height=10.0,placement=pl,face=False,support=None) # create rectangle
#rec = Draft.makeCircle(radius=5,placement=pl,face=False,support=None) # create circle
print( rec.Name)
here same code simplified
import Draft
pl = FreeCAD.Placement()
pl.Rotation = FreeCADGui.ActiveDocument.ActiveView.getCameraOrientation()
pl.Base = FreeCAD.Vector(0.0,0.0,0.0)
rec = Draft.makeRectangle(length=10.0,height=10.0,placement=pl,face=False,support=None)
Read And write one Expression
import Draft
doc = FreeCAD.ActiveDocument
pl=FreeCAD.Placement()
pl.Rotation.Q=(0.0,-0.0,-0.0,1.0)
pl.Base=FreeCAD.Vector(0.0,0.0,0.0)
obj = Draft.makeCircle(radius=1.0,placement=pl,face=False,support=None) # create circle
print( obj.PropertiesList ) # properties disponible in the obj
doc.getObject(obj.Name).setExpression('Radius', u'2mm') # modify the radius
doc.getObject(obj.Name).setExpression('Placement.Base.x', u'10mm') # modify the placement
doc.getObject(obj.Name).setExpression('FirstAngle', u'90') # modify the first angle
doc.recompute()
expressions = obj.ExpressionEngine # read the expression list
print( expressions)
for i in expressions: # list and separate the data expression
print( i[0]," = ",i[1])
Create a Sketch on a Surface in PartDesign
This snippet can be useful, if you want to create a sketch on a surface in PartDesign from inside a macro. Note, that body might be None, if no active body is selected and that the Selection might be empty.
body = Gui.ActiveDocument.ActiveView.getActiveObject('pdbody')
first_selection = Gui.Selection.getSelectionEx()[0]
feature = first_selection.Object
face_name = first_selection.SubElementNames[0]
sketch = App.ActiveDocument.addObject('Sketcher::SketchObject','MySketch')
body.addObject(sketch)
sketch.MapMode = 'FlatFace'
sketch.Support = (feature, face_name)
App.ActiveDocument.recompute()
How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.
from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets
mw = Gui.getMainWindow()
gl = mw.findChild(QtWidgets.QOpenGLWidget)
me = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease, QtCore.QPoint(800,300), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
app = QtWidgets.QApplication.instance()
app.sendEvent(gl, me)
If you have a 3d point and want to get the 2d point on the opengl widget then use this:
from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets
from FreeCAD import Base
x, y, z, = 10,10,10
v = Gui.ActiveDocument.ActiveView
point3d = Base.Vector(x, y, z)
point2d = v.getPointOnScreen(point3d)
size = v.getSize()
coordX = point2d[0]
coordY = size[1] - point2d[1]
me = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease, QtCore.QPoint(coordX,coordY), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
How to create a face with holes using Python API
This snippet demonstrates how to create a face with internal holes through the Python API. See forum thread.
import FreeCAD, Part
# Create poles that will define the Face
pts = [(-2, 2, 0),
(0, 2, 1),
(2, 2, 0),
(2, -2, 0),
(0, -2, 1),
(-2, -2, 0)]
bs = Part.BSplineCurve()
bs.buildFromPoles(pts, True) # True makes this periodic/closed
# Make the Face from the curve
myFace = Part.makeFilledFace([bs.toShape()])
# Create geometry for holes that will be cut in the surface
hole0 = Part.Geom2d.Circle2d(FreeCAD.Base.Vector2d(0,0), 1.0)
hole1 = Part.Geom2d.Circle2d(FreeCAD.Base.Vector2d(0,1.5), 0.1)
edge0 = hole0.toShape(myFace)
edge1 = hole1.toShape(myFace)
wireb = Part.Wire(bs.toShape())
wire0 = Part.Wire(edge0)
wire1 = Part.Wire(edge1)
# Cut holes in the face
myFace.cutHoles([wire0])
myFace.validate() # This is required
myFace.cutHoles([wire1])
myFace.validate()
Part.show(myFace)
Close and restart FreeCAD
import PySide2
from PySide2 import QtWidgets, QtCore, QtGui
def restart_freecad():
"""Shuts down and restarts FreeCAD"""
args = QtWidgets.QApplication.arguments()[1:]
if FreeCADGui.getMainWindow().close():
QtCore.QProcess.startDetached(
QtWidgets.QApplication.applicationFilePath(), args
)
Coin3D
See Coin3d snippets
Сопутствующая информация
- 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
Введение
На этой странице показано лего можно создать продвинутую фукнкциональность в Python. В данном примере , мы создадим новый инструмент, для рисования линии. Этот инструмент может быть свзае с командой FreeCAD, и эта команда может быть вызвана из любого элемента интерфейса, таком как как опция меню или кнопка на панели инструментов.
Основной скрипт
В начале мы напишем сценарий содержащий всю нашу функциональность. Затем, мы сохраним его в файле и импортируем в FreeCAD, чтобы все классы и функции были доступны. Запустите текстовый редактор, в котором вам наиболее удобно работать и введите следующие строки:
import FreeCADGui, Part
from pivy.coin import *
class line:
"""This class will create a line after the user clicked 2 points on the screen"""
def __init__(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.stack = []
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.getpoint)
def getpoint(self, event_cb):
event = event_cb.getEvent()
if event.getState() == SoMouseButtonEvent.DOWN:
pos = event.getPosition()
point = self.view.getPoint(pos[0], pos[1])
self.stack.append(point)
if len(self.stack) == 2:
l = Part.LineSegment(self.stack[0], self.stack[1])
shape = l.toShape()
Part.show(shape)
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.callback)
Подробное описание
import Part, FreeCADGui
from pivy.coin import *
В Python, когда вам требуется использовать функции из другого модуля, вам нужно импортировать его. В нашем случае, нам нужны функции из Модуля Деталей, для создания линии, и из Gui модуля (FreeCADGui), для доступа к 3D виду. Нам также нужно полное содержание библиотеки coin, так мы сможем напрямую использовать все coin объекта такие как SoMouseButtonEvent, и.т.д...
class line:
Здесь мы задаем наш основной класс. Почему мы используем класс а не функцию? Причина в том чтобы нащ инструмент оставался "живым" когда мы ждем что пользователь нажмет на экран. Функция завершится когда её задача будет выполнена, но объект (класс заданый как объект) остается живым пока не будет уничтожен.
"""This class will create a line after the user clicked 2 points on the screen"""
В Python, каждый класс или функция могут обладать строкой описания. Это особенно полезно в FreeCAD, потому что когда вы будете вызывать этот класс через интепритатор, строка описания будет отображатся в виде всплывающей подсказки.
def __init__(self):
Python класс всегда может содержать __init__ функцию, которая выполняется когда класс вызывается для создания объекта. Таким образом, мы положим сюда всё что мы хотим чтобы случилось, когда запустится наш инструмент "линия".
self.view = FreeCADGui.ActiveDocument.ActiveView
В классе, вам обычно нужно добавить self. перед именем переменной, для того чтобы получить легкий доступ к функциям в и вне класса. Здесь мы используем self.view для доступа к управлению активным 3D видом.
self.stack = []
Здесь мы создаем простой список содержащий 3D точки, переданные функцией getpoint.
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.getpoint)
Это важная часть: Посколько это фактически coin3D сцена(в смысле окно отображения), FreeCAD использует механизм обратного вызова coin, что позваляет вызывать функцию каждый раз когда на сцене что-то происходит. В нашем случае, мы создаем обратный вызов для события SoMouseButtonEvent , и мы привязываем его getpoint функции. Теперь, каждый раз когда клавиша мыши будет нажата или отпущена, будет выполнятся функция getpoint.
Замети также что существует альтернативна addEventCallbackPivy(), зовется addEventCallback() которая обходится без использование pivy. Но так как pivy это очень эффективный и естественный способ получить доступ к любой части coin сцены, он гораздо лучше для использования так как вы можете!
def getpoint(self, event_cb):
Теперь вы задали getpoint функцию, которая выполняется когда клавиша мыши щелкает по окну 3D вида. Эта функция будет получать аргумент, который мы назовем event_cb. В время обратного вызова мы можем получить доступ к объекту события, который содержит некоторую информацию (информационный режим описан здесь).
if event.getState() == SoMouseButtonEvent.DOWN:
Getpoint функция будет вызыватся когда клавиши мыши будет нажата или отжата. Но мы хотим фиксировать 3D точку только когда нажимаем (в противном случае мы мы можем получить две 3D точки очень близко друг от друга). Так что мы проверяем это.
pos = event.getPosition()
Здесь мы получаем координаты курсора мыши
point = self.view.getPoint(pos[0], pos[1])
Эта функция дает нам FreeCAD вектор (x,y,z) содержащий точку лежащую в фокальной плоскости, т.е. под вашим курсором. Если вы находитесь в режиме камеры, изображается луч идущий из камеры проходящий через курсор мыши, и достигающий фокальной плоскости. Это наша 3D точка. Если мы находимся в режиме ортогонального отображения, луч паралелен направлению вида.
self.stack.append(point)
Мы добавляем новую точку в stack
if len(self.stack) == 2:
Если у вас, уже достаточное количество точек? если да, тогда давайте рисовать линию!
l = Part.LineSegment(self.stack[0], self.stack[1])
Здесь мы используем Line() функцию из Модуля Деталей которая создает линию по двум FreeCAD векторам. Все что мы создаем и модифицируем внутри модуля Деталей, остается в модуле(Part module). Так что, до сих пор, когда мы создавали Line Part. Она не была привязана к какому либо объекту в нашем документе, поэтому ничего и не отображалось на экране.
shape = l.toShape()
FreeCAD документ может принимать только формы(shapes) из модуля Деталей. Формы являются наиболее универсальным типом из модуля Деталей. Таким образом, мы должны преобразовать нашу линию в форму и добавить её в документ.
Part.show(shape)
Модуль деталей обладает очень удобной функцией show() ,которая создает новый объект в документе и привязывает форму к нему. Мы таже могли создать новый объект и привязать к нему форму вручную.
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.callback)
Теперь, когда мы закончили нашу линию, давайте уберем механизм обратного вызова, который потребляет драгоценные циклы ЦПУ.
Тестирвание сценария
Теперь, давайте сохраним наш сценарий где нибудь где FreeCAD python интепритатор сможет его найти. Когда импортируются модули, интепритатор просматривает следующие места: директорию куда установлен python,FreeCAD bin директорию, и все папки FreeCAD модулей. Так что, лучшим решением будет создать новую папку в одной из FreeCAD Mod папках, и сохранит наш сценарий в ней. Например, давайте создадим папку "MyScripts" , и сохраним наш сценарий как "exercise.py".
Теперь, когда все готово, давайте запустим FreeCAD, создадим новый документ, и введем в python интерпритатор:
import exercise
Если сообщений об ошибке не появится, это означает, что наш учебный сценарий был загружен. Теперь мы можем проверить его содержимое:
dir(exercise)
Команда dir() встроенная python которая выдает список содержащегося в модуле. Мы можем видеть здесь нас ждет, наш класс line(). Теперь давайте протестируем его:
'line' in dir(exercise)
Приступим к тестированию:
exercise.line()
Затем, щелкнем два раза на 3D виде, и бинго, вот наша линия! Чтобы сделать это снова , просто опять введите exercise.line(), и ещё раз, и ещё раз... Чувствуете себе прекрасно, не так ли?
Регистрация сценария
Теперь, для нашего нового инструмента "линия" будет здорово, если он будет обладать кнопкой в интерфейсе, так чтобы нам не нужно было его каждый раз вводить. Простейший путь это преобразовать наш новый каталог MyScripts в полноценнный FreeCAD инструментарий(workbench). Это просто, все что нужно это поместить в файл зовущийся InitGui.py внутрь вашей MyScripts папки. InitGui.py будет содержать инструкции создания нового инструментария, м добавлять наш новый инструмент в него. Кроме того мы должны трансформировать код нашего примера, так чтобы инструмент line() был признан как официальная FreeCAD команда. Начнем с создания InitGui.py файла, и запишем в него следующий код:
class MyWorkbench (Workbench):
MenuText = "MyScripts"
def Initialize(self):
import exercise
commandslist = ["line"]
self.appendToolbar("My Scripts", commandslist)
Gui.addWorkbench(MyWorkbench())
К этому моменту , я думаю, вы должны понимать сценарий выше: Мы создали новый класс назвали его MyWorkbench, мы задаем заглавие(MenuText), и задаем Initialize() функцию, которая будет выполняться когда инструментарий будт загружен в FreeCAD. В этой функции, мы загружаем вск что содержится в нашем exercise файле, и добавляем в FreeCAD команды найденные внутри списка команд(commandlist). Затем, мы создаем панель инструментов названую "My Scripts" и сопоставляем наш список команд с ней. Конечно, сейчас у нас есть только один инструмент, так как наш список команд содержит один элемент. Затем, когда наш инструментарий готов, мы добавляем его в основной(главный) интерфейс.
Но это пока не будет работать, потому что FreeCAD команда для работы должна быть отформатирована определенным образом. Так что нам нужно преобразовать(доработать) наш line() инструмент. Наш новый exercise.py сценарий будет выглядеть следующим образом:
import FreeCADGui, Part
from pivy.coin import *
class line:
"""This class will create a line after the user clicked 2 points on the screen"""
def Activated(self):
self.view = FreeCADGui.ActiveDocument.ActiveView
self.stack = []
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.getpoint)
def getpoint(self, event_cb):
event = event_cb.getEvent()
if event.getState() == SoMouseButtonEvent.DOWN:
pos = event.getPosition()
point = self.view.getPoint(pos[0], pos[1])
self.stack.append(point)
if len(self.stack) == 2:
l = Part.LineSegment(self.stack[0], self.stack[1])
shape = l.toShape()
Part.show(shape)
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(), self.callback)
def GetResources(self):
return {'Pixmap': 'path_to_an_icon/line_icon.png', 'MenuText': 'Line', 'ToolTip': 'Creates a line by clicking 2 points on the screen'}
FreeCADGui.addCommand('line', line())
То, что мы сделали здесь является преобразованием нашей __init__() функции в Activated() функцию, потому что, когда FreeCAD команды выполняются, они автоматически выполняют Activated() функцию. Мы также добавили функцию GetResources(), которая сообщает FreeCAD, где он может найти значок инструмента, и каким будет название и подсказка нашего инструмента. Любой JPG, PNG или SVG изображения будут работать, как иконка, они могут быть любого размера, но лучше использовать размер, близкий к последним аспектам, как 16x16, 24x24 или 32x32. Затем, мы добавили line() класс в качестве официального команды FreeCAD с AddCommand() методом.
Это всё, теперь вам нужно перезапустить FreeCAD и вы получите новый хороший инструментарий с нашим новым инструментом линии!
Вы хотите большего?
Если вам понравился этот пример, почему не попытаться улучшить этот маленький инструмент? Существует множесво вещей которые нужно сделать, как например:
- Добавить обратную связь с пользователем: до сих пор мы делали очень голый инструмент, пользователь может потерятся при его использовании. Таким образом мы могли бы добавить обратную связь, сообщающую ему что делать дальше. Например, мы можем выводит сообщения в FreeCAD консоль. Загляните в FreeCAD.Console модуль
- Добавить возможность вводить координаты 3D точек вручную. Посмотрите, на пример, python input() функцию
- Добавить способность добавлять более двух точек
- Добавить события для других вещей: сейчас мы только проверяем события кнопок мыши, что если мы хотели бы также сделать что-то когда мышь перемещается, например отображать текущие координаты?
- Давать имя созданному объекту
Не стесняйтесь писать ваши вопросы или идеи на forum!
Don't hesitate to ask questions or share ideas on the forum!
- 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
Введение
На этой странице мы покажем как создать простой графический интерфейс с помощью Qt Designer, официальный инструмент Qt для создания интерфейсов, диалог будет сковертирован в код Python, затем использован внутри FreeCAD. Мы будем полагать что пользователь знает в общих чертах как редактировать и запускать Python.
In this example, the entire interface is defined in Python. Although this is possible for small interfaces, for larger interfaces the recommendation is to load the created .ui files directly into the program.
Two general methods to create interfaces, by including the interface in the Python file, or by using .ui
files.
Проектирование диалога
В приложениях САПР очень важно проектирование хорошего Пользовательского Интерфейса. Практически всё, что пользователь будет делать, делается через части интерфейса: чтение диалоговых окон, нажатие кнопок, выбор между иконками, и.т.д. Так что очень важно тщательно подумать, что вы хотите сделать, как вы хотите чтобы пользователь повел себя и каков будет рабочий процесс с вашими действиями.
Известно несколько понятий, от том как проектировать интерфейс:
- Modal/non-modal dialogs: Модальное окно появляется поверх всех окон, останавливая действия происходящие в главном окне приложения, заставляя пользователя отвечать в диалоговом окне, тогда как не модальный диалог не останавливает вас от работы в главном окне. В некоторых случаях лучше первое, в других нет.
- Определение того, что требуется и что считается дополнительны: Убедитесь что пользователь знает что он должен делать. Ставте на все метки с описанием, используйте подсказки, и.т.д.
- Отделяйте команды от параметров: Это обычно делается с помощью кнопок и полей текстовых ввода. Пользователь знает что нажатие кнопки будет производить действие тогда как изменение значения внутри текстового поля где-то будет изменять параметр. В настоящие время, однако, пользователи обычно отлично знают что есть кнопка, а что есть поле ввода, и.т.д. В качестве графического инструментария используется, Qt, это современный инструментарий, и мы не должны больш беспокоится о создании ясности, так как он уже сам по себе очень ясный/понятный интерфейс.
Таким образом, теперь когда мы четко определили что должны делать, откройте qt designer. Давайте спроектируем очень простой диалог, как здесь:
Мы будем использовать этот диалог в FreeCAD для создания хороших прямоугольных плоскосте. Вам может показаться что это не очень удобно для создания прямоугольных плоскосте, но его легко можно изменить позже, чтобы делать более сложные вещи. Когда вы откроете Qt Designer, он выглядит следующим образом:
Создание диалога
Qt Designer очень прост в использовании. На левой панели есть элименты которые можно перетащить на ваш виджет. На правой стороне находится панель свойств отображающая все виды редактируемых свойств, выбранного элемента. Так что начните с создания нового виджета.
- Выберете "Диалог без кнопок", так как мы не хотим кнопки по умолчанию OK/Cancel.
- Нам нужны 'Labels. Labels (этикетки) - это просто тексты которые появляются на вашем виджете, чтобы проинформировать пользователя. Если вы выбираете этикетку, на правой стороне появляются свойства которые вы можете поменять, если вы хотите, такие как стиль шрифта, высота и.т.д. Так что перетащите на ваш виджет 3 этикетки:
- Одна для заголовка,
- Одно для надписи "Height"
- Одна для записи "Width".
- Теперь нам нужны LineEdits. Перетащите два из них на виджет. LineEdits это текстовые поля, которые конечный пользователь может заполнить. Нам нужен один LineEdit для Height и один для Width. Здесь мы тоже можем редактировать свойства. Например, почему бы не установить значения по умолчанию, например: 1.00 для каждого. Таким образом, пользователь увидит диалог, где оба значения уже заполнены. Если он удовлетворён, он может прямо нажать кнопку, сохраняя время.
- Далее добавим PushButton. Это кнопка, которую конечному пользователю следует нажать после заполнения обоих полей.
Заметьте: мы выбрали очень просто управление. В Qt гораздо больше функций, например, например вы можете использовать Spinboxes вместо LineEdits, и.т.д... Обратите внимание на то что доступно, у вас несомнено появятся другие идеи.
Вот и все, что мы должны сделать в Qt Designer. Последнее, давайте переименуем все наши элементы дав им более простые имена, так что будет легче определять их в нашем сценарии:
Конвертация нашего диалога в python
Теперь сохраните ваш виджет где-нибудь. Он будет сохранен как .ui файл, который мы легко преобразуем в python сценарий с помощью pyuic. В windows, программа pyuic связанна с pyqt (должно быть проверено), на linux вам вероятно нужно будет установить его отдельно в вашем пакетном менеджере (для debian-based систем, это часть пакета pyqt4-dev-tools). Для преобразования, вам необходимо открыть окно терминала (или окно командной строки в windows), переместитесь туда где вы сохранили ваш .ui файл и введите:
pyuic mywidget.ui > mywidget.py
In Windows pyuic.py is located in "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" For conversion create a batch file called "compQt4.bat:
@"C:\Python27\python" "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" -x %1.ui > %1.py
In the DOS console type without extension
compQt4 myUiFile
In macOS, you can retrieve the appropriate version (the same that is used internally in FreeCAD 0.19) of QT and Pyside with these commands (pip required)
python3 -m pip install pyqt5
python3 -m pip install pySide2
This will install uic in the folder "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/PySide2/uic", and Designer in "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/PySide2/Designer.app". For convenience you can create a link of uic in /usr/local/bin to be able to call it simply with uic -g python ... instead of typing the whole path of the program, and a link to Designer to retrieve it in the mac's Applications folder with
sudo ln -s /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/PySide2/uic /usr/local/bin
ln -s /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/PySide2/Designer.app /Applications
Into Linux : to do
Since FreeCAD progressively moved away from PyQt after version 0.13, in favour of PySide (Choose your PySide install building PySide), to make the file based on PySide now you have to use:
pyside-uic mywidget.ui -o mywidget.py
In Windows uic.py are located in "C:\Python27\Lib\site-packages\PySide\scripts\uic.py" For create batch file "compSide.bat":
@"C:\Python27\python" "C:\Python27\Lib\site-packages\PySide\scripts\uic.py" %1.ui > %1.py
In the DOS console type without extension
compSide myUiFile
Into Linux : to do
На некоторых системах программа называется pyuic4 вместо pyuic. Это просто сконвертирует файл .ui файл в сценарий python. Если мы откроем файл mywidget.py, его содержание очень легко понять:
from PySide import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(187, 178)
self.title = QtGui.QLabel(Dialog)
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
self.title.setObjectName("title")
self.label_width = QtGui.QLabel(Dialog)
...
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.title.setText(QtGui.QApplication.translate("Dialog", "Plane-O-Matic", None, QtGui.QApplication.UnicodeUTF8))
...
Как вы видете, он обладает очень простым устройством: созданный класс называемый Ui_Dialog, он содержит все элементы интерфейса нашего виджета. Этот класс обладает двумя методами, один для создания виджета, и одни для перевода его содержания, которая является частью механизма Qt для перевода элементов интерфейса. Метод установки(setup method) просто создает один за другим, виджетв так как мы задали их в Qt Designer, и задает их настройки так как мы определили ранее. Затем, весь инструмент будет переведен, и наконец, подключаются слоты (мы поговорим об этом позже).
Теперь мы можем создать новый виджет и использовать этот класс для созданияего интерфейса. Мы уже можем увидеть наш виджет в действии, поместив наш файл mywidget.py в место где FreeCAD сможет найти его (в FreeCAD в паку bin, или в любую Mod поддиректорию), и ввести в интерпретаторе FreeCAD python:
from PySide import QtGui
import mywidget
d = QtGui.QWidget()
d.ui = mywidget.Ui_Dialog()
d.ui.setupUi(d)
d.show()
И наш диалог появится! Заметим, что наш интерпретатор по прежнему работает, т.е у нас не модальный диалог. Так что, закроем его, мы можем (конечно, помимо того как щелкнуть на иконке закрытия) ввести:
d.hide()
Делаем так чтобы наш диалог делал что-нибудь
Теперь когда мы можем показать или скрыть наш диалог, на осталось добавить последнюю часть:Чтобы оно что-то делало! Если вы немного поиграетесь с Qt designer, вы быстро обнаружите целый раздел под название "сигналы и слоты". В основном, это работает следующим образом: элемент на вашем виджете (в Qt терминалогии, эти элементы сами по себе являются виджетами) может отправить сигнал. Этот сигнал отличаются в зависимости от типа виджета. Например, кнопка может подать сигнал при нажатии, и когда она будет отпущена. Этот сигнал может быть соединен со слотами, которые могут быть специальными функциями других виджетов(например диалог обладающий слотом "закрыть" который можно подключить к сигналу от кнопки закрытия), или это могут быть пользовательские функции. PyQt Reference Documentation список всех qt виджетов, что они делают, какие сигналы могут отправлять и.т.д...
Что мы будем делать здесь, создадим новую функцию , которая создает плоскость основываясь на её длине и ширине, и подключим эту функцию к сигналу нажатия испускаемому нашей кнопкой "Create!" . Так что , давайте начнем с импорта наших модулейr FreeCAD, палагая следующую строку введенной в начале нашего сценария, где мы уже импортировали QtCore и QtGui:
import FreeCAD, Part
Затем , давайте добавим новую функцию в наш класс Ui_Dialog:
def createPlane(self):
try:
# first we check if valid numbers have been entered
w = float(self.width.text())
h = float(self.height.text())
except ValueError:
print("Error! Width and Height values must be valid numbers!")
else:
# create a face from 4 points
p1 = FreeCAD.Vector(0,0,0)
p2 = FreeCAD.Vector(w,0,0)
p3 = FreeCAD.Vector(w,h,0)
p4 = FreeCAD.Vector(0,h,0)
pointslist = [p1,p2,p3,p4,p1]
mywire = Part.makePolygon(pointslist)
myface = Part.Face(mywire)
Part.show(myface)
self.hide()
Потом, нам нужно сообщить Qt о подключении функции к кнопке, разместив следующую строчку перед QtCore.QMetaObject.connectSlotsByName(Dialog):
QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.createPlane)
как вы видете, подключение сигнала pressed() от нашего созданного объекта (кнопка "Create!"), к слоту названому createPlane, который мы только что определили. И это всё!!Теперь,финальный штрих, мы можем добавить маленькую функцию в создание диалога, его легче будет вызвать. Вне класса Ui_Dialog, давайте добавим этот код:
class plane():
def __init__(self):
self.d = QtGui.QWidget()
self.ui = Ui_Dialog()
self.ui.setupUi(self.d)
self.d.show()
(Python reminder: the __init__ method of a class is automatically executed whenever a new object is created!)
Затем , в FreeCAD, нам необходимо сделать только:
import mywidget
myDialog = mywidget.plane()
"Это все ребята"... Теперь вы можете попробовать разные вещи, например как вставить ваш виджет в FreeCAD интерфейс (смотри страницу Отрывки кода ), или создать более продвинутый пользовательский инструмент, используя другие элементы в вашем виджете.
Готовый сценарий
Это полный сценарий, для справки:
# Form implementation generated from reading ui file 'mywidget.ui'
#
# Created: Mon Jun 1 19:09:10 2009
# by: PyQt4 UI code generator 4.4.4
# Modified for PySide 16:02:2015
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
import FreeCAD, Part
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(187, 178)
self.title = QtGui.QLabel(Dialog)
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
self.title.setObjectName("title")
self.label_width = QtGui.QLabel(Dialog)
self.label_width.setGeometry(QtCore.QRect(10, 50, 57, 16))
self.label_width.setObjectName("label_width")
self.label_height = QtGui.QLabel(Dialog)
self.label_height.setGeometry(QtCore.QRect(10, 90, 57, 16))
self.label_height.setObjectName("label_height")
self.width = QtGui.QLineEdit(Dialog)
self.width.setGeometry(QtCore.QRect(60, 40, 111, 26))
self.width.setObjectName("width")
self.height = QtGui.QLineEdit(Dialog)
self.height.setGeometry(QtCore.QRect(60, 80, 111, 26))
self.height.setObjectName("height")
self.create = QtGui.QPushButton(Dialog)
self.create.setGeometry(QtCore.QRect(50, 140, 83, 26))
self.create.setObjectName("create")
self.retranslateUi(Dialog)
QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.createPlane)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle("Dialog")
self.title.setText("Plane-O-Matic")
self.label_width.setText("Width")
self.label_height.setText("Height")
self.create.setText("Create!")
print("tyty")
def createPlane(self):
try:
# first we check if valid numbers have been entered
w = float(self.width.text())
h = float(self.height.text())
except ValueError:
print("Error! Width and Height values must be valid numbers!")
else:
# create a face from 4 points
p1 = FreeCAD.Vector(0,0,0)
p2 = FreeCAD.Vector(w,0,0)
p3 = FreeCAD.Vector(w,h,0)
p4 = FreeCAD.Vector(0,h,0)
pointslist = [p1,p2,p3,p4,p1]
mywire = Part.makePolygon(pointslist)
myface = Part.Face(mywire)
Part.show(myface)
class plane():
def __init__(self):
self.d = QtGui.QWidget()
self.ui = Ui_Dialog()
self.ui.setupUi(self.d)
self.d.show()
More examples
- Dialog creation with various widgets with
QPushButton
,QLineEdit
,QCheckBox
,QRadioButton
, and others. - Dialog creation reading and writing files with
QFileDialog
. - Dialog creation setting colors with
QColorDialog
. - Dialog creation image and animated GIF with
QLabel
andQMovie
. - PySide usage snippets.
- Qt Example
Relevant links
- 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
Разработка приложений для FreeCAD
Используемые Лицензии FreeCAD
FreeCAD использует две разные лицензии, одна для самого приложения, и другая для документации:
Lesser General Public Licence, version 2 or superior (LGPL2+) Для всех исходных кодов FreeCAD, находящихся в официальном репозитории Git
Creative Commons Attribution 3.0 License (CC-BY-3.0) Для документации на http://www.freecadweb.org
Смотри FreeCAD-овский файл авторских прав debian для более подробной информации о лицензиях, используемых в различных компонентах с открытыми исходными кодами FreeCAD
Влияние лицензий
Ниже дано дружественное объяснение, что для Вас значит лицензия LGPL:
All users
Все пользователи
Все могут загружать, использовать и распространять FreeCAD бесплатно, без каких-либо ограничений. Ваша копия FreeCAD полностью Ваша, так же как все файлы, которые Вы создали с помощью FreeCAD. Вас никто не обяжет ни обновить FreeCAD через определённое время, ни изменить Ваше использование FreeCADа. Использование FreeCADа не свяжет Вас никакими контрактами или обязательствами. Исходный код FreeCADа публичен и может быть проверен, так что можно убедиться, что он не делает вещи без Вашего разрешения, вроде посылки куда-либо Ваших частных данных.
Professional users
Профессиональные Пользователи
FreeCAD можно использовать свободно для любых целей, частной, коммерческой или промышленной деятельности. Любая версия FreeCAD может развёртываться и устанавливаться везде и любое число раз. Вы можете так же модифицировать и адаптировать FreeCAD для своих целей без каких-либо ограничений. Вы только не можете представлять разработчиков FreeCAD ответственными за возможные повреждения или деловые потери, которые могут случиться из-за использования FreeCAD.
Open-source software developers
Разработчики программ с открытыми исходными кодами
Вы можете использовать FreeCAD в качестве основы для разработки своего собственного приложения или просто расширить его, создав для него новые модули. Если FreeCAD встроен в ваше собственное приложение, вы можете выбрать либо лицензию GPL или LGPL, либо любую другую лицензию, совместимую с LGPL, чтобы разрешить использование вашей работы в проприетарном программном обеспечении или нет. Если вы разрабатываете модуль для использования в качестве расширения и не включаете в него какой-либо код FreeCAD, тогда вы можете выбрать любую лицензию, какую захотите. Однако, если вы хотите, чтобы ваш модуль использовался как можно дольше, рекомендуется использовать ту же лицензию LGPL, что и сам FreeCAD, поэтому части вашего кода можно будет легко использовать в других будущих модулях или даже в самом FreeCAD.
Closed-source software developers
Разработчик программ с закрытыми исходными кодами
Вы можете использовать FreeCAD в качестве основы для своего собственного приложения и не обязаны делать в вашем приложении исходные коды открытыми. Однако лицензия LGPL требует двух основных вещей: 1) чтобы вы четко информировали своих пользователей о том, что ваше приложение использует FreeCAD и что FreeCAD лицензирован под LGPL, и 2) что вы четко отделяете свое собственное приложение от компонентов FreeCAD. Обычно это делается либо путем динамического связывания с компонентами FreeCAD, чтобы пользователи могли изменять его, либо делая исходный код FreeCAD вместе с внесенными Вами в него изменениями доступными для Ваших пользователей. Вы получите поддержку от разработчиков FreeCAD, если это не будет улицей с односторонним движением.
1) You must clearly inform your users that your application is using FreeCAD and that FreeCAD is LGPL.
2) The LGPL license also stipulate your users must be able to swap your modified FreeCAD component with the original FreeCAD equivalent. That is would be done by dynamically linking to the FreeCAD components, so users are allowed to change it. However, this is often hard to achieve by today's requirements. At FreeCAD, we understand that the important point here is to not restrict the freedom given to FreeCAD users by the LGPL license. So an equivalent to dynamic linking is to offer the choice to your users, by making your users aware of the possibility to use FreeCAD for free. This can be done in a number of ways.
If any of the two conditions above are unacceptable to you or cannot be implemented, then you must make your FreeCAD component LGPL too and release the source code with all the modifications you made to it.
There is a special case called derivatives, which is when you publish basically a "rebranded" version of FreeCAD. Derivatives which are not open-source are prohibited by the LGPL license. The FreeCAD community is active and efficient in finding rebranded versions, reporting them to the platforms where they were found and exposing them until they are taken down.
Files
Файлы
На модели и другие файлы, созданные с помощью FreeCAD, не распространяются никакие лицензии, указанные выше, и они не связаны какими-либо ограничениями или правами собственности. Ваши файлы действительно ваши. Вы можете установить владельца файла и указать свои собственные условия лицензии для файлов, которые вы создаете во FreeCAD, через меню Файл → Информация о проекте.
Logo
The FreeCAD logo is a trademark owned by the FPA (FreeCAD project association). This means the FPA is the sole body authorized to say who has the right to use the FreeCAD logo or not. The logo files, which are part of the FreeCAD source code or available elsewhere, for example on this wiki, are still all under the same licenses as the rest of FreeCAD (LGPL for the source code and Creative Commons for this wiki). You are still free to use the FreeCAD logo anywhere, on the same terms as the rest of FreeCAD, which means, basically, that you must use it to reference FreeCAD, and not use it, for example, for your own product, or any other way that is not referencing FreeCAD.
Statement of the main developer
Заявление главного разработчика
Я знаю что обсуждение о "правильной" лицензии для программ с открытым исходным кодом занимает значительную часть интернете-трафика, поэтому здесь указаны причины, по которым я считаю, что у FreeCADа должна быть эта лицензия.
Я выбрал LGPL и GPL лицезии для проекта, и я знаю все за и против о LGPL и это дало мне повод, для этого решения.
FreeCAD это смесь из библиотек и приложений, так что чистая GPL будет слишком жестким решением. Это помешало бы писать коммерческие модули для FreeCAD потому как , мешало бы ссылаться на основные библиотеки FreeCAD. Вы может спросите зачем вообще коммерческие модули? Linux является отличны примером, почему. Стал ли бы Linux успешным если бы GNU C библиотека была бы под GPL и следовательно предотвращала связываться с ней другим не-GPL приложениям? И хотя я люблю свободу в Linux, я также хочу иметь возможность использовать отличный графический драйвер NVIDIA. Я понимаю и принимаю причину по которой NVIDIA не хочет открывать код драйвера. Мы все работаем на компании и нуждаемся в зарплате, ну или хотя бы в еде. Так для меня, сосуществование открытого и закрытого кода, не является чем-то плохим, пока подчиняется правилам LGPL. я бы хотел чтоб кто написал процессор импорта/экспорта Catia для FreeCAD и распространял его свободно или за деньги. Я не люблю заставлять его делать больше чем он может дать. Это не будет хорошо ни для него , ни для FeeCAD.
Тем не менее это принимается только для ядра(основной) системы FreeCAD. Каждый писатель приложений модулей может сделать свой собственный выбор.
Jürgen Riegel
—15 October 2006
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
FreeCAD BugTracker - это место, где можно сообщать об ошибках, отправлять запросы функций, исправления или запросы на объединение вашей ветки, если вы разработали что-то с помощью Git. Трекер разделен на «Рабочие места», поэтому, пожалуйста, будьте конкретны и отправьте запрос в соответствующий подраздел. В случае сомнений оставьте это в разделе «FreeCAD».
Рекомендуемая последовательность действий
Как показано на приведенной выше блок-схеме, перед созданием заявок всегда сначала ищите на форумах и в багтрекере, чтобы выяснить, является ли ваша проблема известной. Это экономит много времени / работы для разработчиков и волонтеров, которые могут потратить указанное время, делая FreeCAD еще более потрясающим.
Как сообщить об ошибке
Если вы считаете, что, возможно, нашли ошибку, вы можете сообщить о ней, если вы следовали нашим пошаговым инструкциямː
- Убедитесь, что вы используете самую последнюю версию FreeCAD. ПРИМЕЧАНИЕː ваша ошибка может быть исправлена в разрабатываемой (нестабильной) версии. Средний пользователь использует стабильную версию FreeCAD.
- Убедитесь что ваша ошибка, это действительно ошибка, то есть то, то что должно работать, но не работает. Убедитесь, что о той же ошибке не сообщалось ранее, выполнив сначала поиск в багтрекере и на форуме.
- Помните: если вы не уверены, не постесняйтесь сообщить о вашей проблеме на форуме и спросить что делать.
- Примечание: перед сообщением прочитайте правила форума.
- Опишите как можно более четко проблему, и как она может быть воспроизведена. Если мы не можем воспроизвести ошибку, мы не могли бы это исправить.
- Это означает отчет в ясной, хорошо форматированной, пошаговой форме, чтобы даже пользователь-любитель мог воспроизвести.
- Рекомендация: также очень полезно включать скриншоты ошибки. Пользователи Windows: пожалуйста, не прикрепляйте снимки экрана в формате Word или PDF. Используйте инструмент Windows Snipping, чтобы сохранить снимок в формате PNG.
- Рекомендация: Еще лучше - Анимированный GIF-файл или скринкаст, это также повысит вероятность воспроизведения проблемы.
- Добавьте пример файла FreeCAD (файл .FCStd), чтобы разработчики/тестировщики могли быстро воспроизвести ошибку.
- Не архивируйте файл * .FCStd, он уже заархивирован.
- Размер прикрепленных файлов ограничен. Если ваш файл * .FCStd слишком велик для прикрепления, вы можете использовать онлайн-хранилище (многие из них бесплатны, например, Google Диск, Microsoft OneDrive, Dropbox).
- Включите всю информацию из кнопки «Копировать в буфер обмена» в диалоге 'Help (меню) -> About FreeCAD' . Убедитесь, что ваши данные включают версию OCC или OCE.
- Пожалуйста, отправляйте отдельный отчет по каждой ошибке.
- Если ваша ошибка вызывает сбой в FreeCAD, и вы используете систему, которая ее поддерживает, вы можете попробовать запустить 'обратную трассировку отладки' и прикрепить указанную трассировку к заявке. Это может сэкономить разработчикам много времени на выявление источника сбоя. Смотрите Отладку для получения более подробной информации.
Запрос о новой возможности
Если вы хотите чтобы в FreeCAD что-то, что пока не реализовано: то это не баг, а запрос новой функциональности (feature request).
- IMPORTANTː Before requesting a potential Feature Request please be certain that you are the first one doing so by searching the forums and the bugtracker. If you have concluded that there are no pre-existing tickets/discussions the next step is toː
- Start a forum thread to discuss your feature request with the community via the Open Discussion forum.
- Once the community agrees that this is a valid Feature, you then can open a ticket on the tracker (file it under feature request instead of bug).
- NOTE #1 To keep things organized please remember to link the forum thread URL into the ticket and the ticket number (as a link) in to the forum thread.
- NOTE #2 Keep in mind there are no guarantees that your wish will be fulfilled.
Отправка патчей
В случае если вы програмно исправили ошибку, расширение или что нибудь другое, что может быть общего использования в FreeCAD, создайте патч используя Subversion diff инструмент и сообщив, его нам на трэкер (файл как патч).
Запрос на слияние (merge)
(Same guidelines as Submiting patches)
If you have created a git branch containing changes that you would like to see merged into the FreeCAD code, you can ask there to have your branch reviewed and merged if the FreeCAD developers are OK with it. You must first publish your branch to a public git repository (github, gitlab, bitbucket, sourceforge etc...) and then give the URL of your branch in your merge request.
MantisBT Tips and Tricks
MantisBT Markup
MantisBT (Mantis Bug Tracker) has it's own unique markup.
- @mention - works just like on GitHub where if you prepend '@' to someone's username they will receive an email that they have been 'mentioned' in a ticket thread
- #1234 - By adding a hash tag in front of a number a shortcut to link to another ticket within MantisBT will present.
- Note: if you hover over a ticket it will show you the summary + if the ticket is closed, it will be struck-through like
#1234.
- Note: if you hover over a ticket it will show you the summary + if the ticket is closed, it will be struck-through like
- ~5678 - a shortcut that links to a bug note within a ticket. This can be used to reference someone's response within the thread. Each person that posts will show a unique ~#### number next to their username. If you look at the image in the example, you see that the shortcut is referencing the ticket number:comment number of said ticket
- <del></del> - Using these tags will
strikeout text.
- <code></code> - To present a line or block of code, use this tag and it will colorize and differentiate it elegantly.
MantisBT BBCode
In addition to the above MantisBT Markup one also has the possibility to use BBCode format. For a comprehensive list see the BBCode plus plugin page. Here is a list of supported BBCode tagsː
[img][/img] - Images
[url][/url] - Links
[email][/email] - Email addresses
[color=red][/color] - Colored text
[highlight=yellow][/highlight] - Highlighted text
[size][/size] - Font size
[list][/list] - Lists
[list=1][/list] - Numbered lists (number is starting number)
[*] - List items
[b][/b] - Bold
[u][/u] - underline
[i][/i] - Italic
[s][/s] - Strikethrough
[left][/left] - Left align
[center][/center] - Center
[right][/right] - Right align
[justify][/justify] - Justify
[hr] - Horizontal rule
[sub][/sub] - Subscript
[sup][/sup] - Superscript
[table][/table] - Table
[table=1][/table] - Table with border of specified width
[tr][/tr] - Table row
[td][/td] - Table column
[code][/code] - Code block
[code=sql][/code] - Code block with language definition
[code start=3][/code] - Code block with line numbers starting at number
[quote][/quote] - Quote by *someone* (no name)
[quote=name][/quote] - Quote by *name*
MantisBT <=> GitHub Markup
Below are special MantisBT Source-Integration plugin keywords which will link to the FreeCAD GitHub repo. See GitHub and MantisBT.
- c:FreeCAD:git commit hash: - c stands for 'commit'. FreeCAD stands for the FreeCAD GitHub repo. 'git commit hash' is the specific git commit hash to reference. Note: the trailing colon is necessary. Exampleː
cːFreeCADː709d2f325db0490016807b8fa6f49d1c867b6bd8ː
- d:FreeCAD:git commit hash: - similar to the above, d stands for 'diff' which will provide a Diff view of the commit. Exampleː
dːFreeCADː709d2f325db0490016807b8fa6f49d1c867b6bd8ː
- p:FreeCAD:pullrequest: - similar to the above, p stands for Pull Request. Exampleː
pːFreeCADː498ː
GitHub and MantisBT
The FreeCAD bugtracker has a plug-in called Source Integration which essentially ties both the FreeCAD GitHub repo to our MantisBT tracker. It makes it easier to track and associate git commits with their respective MantisBT tickets. The Source Integration plugin scans the git commit messages for specific keywords in order to execute the following actions:
Note The below keywords need to be added in the git commit message and not the PR subject
Remotely referencing a ticket
Using this pattern will automagically associate a git commit to a ticket (Note: this will not close the ticket.) The format MantisBT will recognize:
- bug #1234
- bugs #1234, #5678
- issue #1234
- issues #1234, #5678
- report #1234
- reports #1234, #5678
For the inquisitive here is the regex MantisBT uses for this operation:
/(?:bugs?|issues?|reports?)+\s*:?\s+(?:#(?:\d+)[,\.\s]*)+/i
Remotely resolving a ticket
The format MantisBT will recognize:
- fix #1234
- fixed #1234
- fixes #1234
- fixed #1234, #5678
- fixes #1234, #5678
- resolve #1234
- resolved #1234
- resolves #1234
- resolved #1234, #5678
- resolves #1234, #5678
For the inquisitive here is the regex MantisBT uses for this operation:
/(?:fixe?d?s?|resolved?s?)+\s*:?\s+(?:#(?:\d+)[,\.\s]*)+/i
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
На этой странице шаг за шагом объясняется "как скомпилировать FreeCAD 0.19 или новее в Windows"". Для других платформ см.Compiling.
Требования
Для компиляции FreeCAD в Windows требуется несколько инструментов и библиотек.
Требования
- Компилятор. FreeCAD тестируется с помощью Visual Studio (MSVC)—другие компиляторы могут работать, но инструкции по использованию здесь не включены. Более подробная информация в #Compiler, находится ниже.
- Git (Для Git также доступны графические интерфейсы, см. Следующий раздел.)
- CMake версия 3.11.x или более новая.
"Подсказка:" Выбор опции Add CMake to the system PATH for all users при установке CMake сделает CMake доступным из командной строки Windows, что может быть полезно.
- LibPack (так называемый FreeCADLibs). Это единый пакет, содержащий все библиотеки, необходимые для компиляции FreeCAD в Windows. Загрузите версию LibPack, соответствующую версии FreeCAD, которую вы хотите скомпилировать. Чтобы скомпилировать FreeCAD 0.19 или последнюю версию разработки 0.20, загрузите LibPack для 0.19/0.20 (только 64-разрядная версия). Извлеките пакет LibPack в удобное место. (Если ваш компьютер не распознает расширение .7z, вам следует установить программу 7-zip.)
"Примечание": Настоятельно рекомендуется компилировать FreeCAD с версией компилятора, для которой предназначен LibPack. Например, вы можете столкнуться с проблемами при компиляции FreeCAD 0.19 с использованием MSVC 15, поскольку LibPack для 0.19 предназначен для сборки с MSVC 17.
Опционные программы
- Графический интерфейс для Git. Существует несколько доступных интерфейсов, см. this list. Основное преимущество интерфейса заключается в том, что вам не нужно изучать команды Git, чтобы получить исходный код FreeCAD или отправлять исправления в репозиторий FreeCAD на GitHub.
Ниже мы опишем обработку исходного кода с использованием интерфейса TortoiseGit. Этот интерфейс интегрируется непосредственно в проводник файлов Windows и имеет большое сообщество пользователей, которые могут получить помощь в случае возникновения проблем.
- NSIS используется для создания установщика Windows FreeCAD.
Исходный код
Теперь вы можете получить исходный код FreeCAD:
Использование интерфейса
При использовании TortoiseGit Интерфейс Git:
- Создайте новую папку, в которую будет загружен исходный код.
- Щелкните правой кнопкой мыши на этой папке в проводнике файлов Windows и выберите "'Git Clone" в контекстном меню.
- Появится диалоговое окно. В нем введите URL-адрес репозитория FreeCAD Git
https://github.com/FreeCAD/FreeCAD.git
и нажмите "ОК".
Последний исходный код будет загружен из репозитория FreeCAD Git, и Git будет отслеживать папку.
Использование командной строки
Чтобы создать локальную ветвь отслеживания и загрузить исходный код, откройте терминал (command prompt) и перейдите в каталог, в котором вы хотите получить исходный код, затем введите:
git clone https://github.com/FreeCAD/FreeCAD.git
Компилятор
По умолчанию (recommended) используется компилятор MS Visual Studio (MSVC). Хотя, возможно, можно использовать другие компиляторы, например gcc через Cygwin или MinGW, это не тестируется и не рассматривается здесь.
Вы можете получить бесплатную версию MSVC (для индивидуального использования), загрузив Community edition of MS Visual Studio.
Для тех, кто хочет избежать установки огромного MSVC только для того, чтобы иметь компилятор, см. CompileOnWindows - Reducing Disk Footprint.
"Примечание:" Несмотря на то, что "Community" выпуск MSVC является бесплатным, для использования среды IDE в течение более чем 30-дневного пробного периода необходимо создать учетную запись Майкрософт. Если вы будете компилировать только с помощью командной строки, вам не понадобится среда разработки и, следовательно, учетная запись Microsoft.
В качестве бесплатной и альтернативной среды разработки с открытым исходным кодом вы можете использовать KDevelop. Вы можете использовать KDevelop для изменения и написания кода на C++, но для компиляции необходимо использовать командную строку.
Дополнительная конфигурация системного пути
При необходимости вы можете включить пути к некоторым папкам в переменную системного ПУТИ. Это полезно, если вы хотите получить доступ к программам в этих папках из командной строки/powershell или если вы хотите, чтобы компилятор или CMake находили специальные программы. Кроме того, добавление папок в ПУТЬ может потребоваться, если вы не использовали соответствующие параметры при установке программы.
- Вы можете включить папку вашего LibPack в переменную системного ПУТИ. Это полезно, если вы планируете создавать несколько конфигураций/версий FreeCAD.
- Если вы не использовали опцию добавления CMake в ПУТЬ при его установке, добавьте папку его установки
"C:\Program Files\CMake\bin" по ПУТИ.
- Если вы не использовали опцию добавления TortoiseGit в ПУТЬ при его установке, добавьте папку его установки
C:\Program Files\TortoiseGit\bin по ПУТИ.
Чтобы добавить пути к папкам в переменную PATH:
- В меню "Start" Windows щелкните правой кнопкой мыши на "Computer" и выберите "Properties".
- В появившемся диалоговом окне нажмите "Advanced system settings".
- Откроется другое диалоговое окно. Нажмите там на вкладке "Advanced" в разделе "Environment Variables".
- Снова откроется другое диалоговое окно. Затем выберите переменную "Path" и нажмите "Edit".
- И снова откроется другое диалоговое окно. Нажмите там на "New" и добавьте в путь к папке Git или LibPack.
- Наконец, нажмите "ОК" и закройте все диалоговые окна, также нажав "ОК".
Конфигурация
Как только у вас будут все необходимые инструменты, библиотеки и исходный код FreeCAD, вы будете готовы приступить к процессу настройки и компиляции. Этот процесс будет проходить в пять этапов:
- Запустите CMake один раз, чтобы проверить вашу систему и начать процесс настройки (это сообщит о том, что она не удалась).
- Настройте необходимые параметры CMake, чтобы установить расположение пакета LibPack и включить Qt5.
- Повторно запустите CMake, чтобы завершить настройку (на этот раз она должна завершиться успешно).
- Используйте CMake для создания системы сборки Visual Studio.
- Используйте Visual Studio для создания FreeCAD.
CMake
Во-первых, настройте среду сборки с помощью CMake:
- Откройте графический интерфейс CMake
- Укажите исходную папку FreeCAD.
- Укажите папку сборки (не используйте исходную папку-CMake создаст эту папку, если она не существует).
- Нажмите кнопку "Configure".
- В появившемся диалоговом окне укажите генератор, который вы хотите использовать: в большинстве случаев вы будете использовать значения по умолчанию в этом диалоговом окне. Для стандартной MS Visual Studio используйте "Visual Studio xx 2yyy", где xx-версия компилятора, а 2yyy-год его выпуска. Рекомендуется использовать опцию по умолчанию "Use default native compilers".
Примечание: Важно указать правильный вариант разрядности. Если у вас есть 64-разрядный вариант LibPack, вы также должны использовать компилятор x64.
Это приведет к началу настройки и "завершится ошибкой" из-за отсутствия настроек. Это нормально, вы еще не указали местоположение пакета LibPack. Однако могут возникнуть и другие сбои, которые потребуют некоторых дальнейших действий с вашей стороны.
Если произойдет сбой с сообщением о том, что Visual Studio не найдена, поддержка CMake в MSVC еще не установлена. Для этого:
- Откройте среду разработки MSVC
- Используйте меню Tools → Get Tools и Features
- На вкладке "Workloads" включите "Desktop development with C++".
- На правой стороне теперь вы должны видеть, что будет установлен компонент "Visual C++ tools for CMake".
- Установите его.
Если он завершится ошибкой с сообщением о неверной версии Python или отсутствующем Python, то:
- Используйте поле "Search:" в CMake для поиска строки "Python".
- Если вы видите там путь, подобный "C:/Program Files/Python38/python.exe", CMake распознал Python, который уже установлен на вашем компьютере, но эта версия несовместима с LibPack. Поскольку LibPack включает совместимую версию Python, измените следующие параметры Python в CMake в соответствии с его путями (при условии, что LibPack находится в папке "D:\FreeCAD-build\FreeCADLibs_12.5.2_x64_VC17"):
Если нет ошибки в Visual Studio или Python, все в порядке, но CMake еще не знает всех необходимых настроек. Поэтому сейчас:
- Найдите в CMake переменную "FREECAD_LIBPACK_DIR" и укажите местоположение папки LibPack, которую вы загрузили ранее.
- Только если сборка FreeCAD 0.19, найдите переменную "'BUILD_QT5" и включите эту опцию.
- Нажмите "Configure" еще раз.
Теперь ошибок быть не должно. Если вы по-прежнему сталкиваетесь с ошибками, которые не можете диагностировать, посетите Install/Compile forum на веб-сайте форума FreeCAD. Если CMake прошел правильно, нажмите на кнопку "Generate". После этого вы можете закрыть CMake и начать компиляцию FreeCAD с помощью Visual Studio. Однако для первой компиляции держите его открытым на случай, если вам захочется или потребуется изменить некоторые параметры процесса сборки.
Параметры процесса сборки
Система сборки CMake дает вам контроль над некоторыми аспектами процесса сборки. В частности, вы можете включать и выключать некоторые функции или модули с помощью переменных CMake.
Вот описание некоторых из этих переменных:
Variable name | Description | Default |
---|---|---|
BUILD_XXX | Создайте FreeCAD с компонентом XXX. Если вы не хотите/не нуждаетесь в компиляции, например, рабочего стола "OpenSCAD", отключите переменную "BUILD_OPENSCAD". Тогда у FreeCAD не будет этого верстака.
""Примечание: "" Некоторые компоненты требуются для других компонентов. Если вы, например, снимите флажок "BUILD_ROBOT", CMake сообщит вам, что компонент "Путь" не может быть правильно скомпилирован. Поэтому проверьте вывод CMake после изменения параметра BUILD_XXX! |
depends |
BUILD_ENABLE_CXX_STD | Версия стандарта языка C++. "C++14" является максимально возможным для FreeCAD 0.19, в то время как для FreeCAC 0.20 требуется как минимум "C++17". См. Также примечание в разделе Building with Visual Studio 15 (2017) and 16 (2019) | depends |
CMAKE_INSTALL_PREFIX | Выходная папка при создании целевой "INSTALL" см. также раздел Running and installing FreeCAD | Windows' default program installation folder |
FREECAD_COPY_DEPEND_DIRS_TO_BUILD | Копии библиотек, необходимых для выполнения FreeCAD.exe в папку сборки. См. также раздел Running and installing FreeCAD. "Примечание:" параметры FREECAD_COPY_XXX отображаются только в том случае, если библиотеки еще не были скопированы. Поэтому при переходе на другую версию LibPack важно удалить все папки в папке сборки, кроме папки LibPack. В CMake удалите кэш и начните так, как будто вы компилируете в первый раз, и вы получите параметры FREECAD_COPY_XXX options. |
OFF |
FREECAD_COPY_PLUGINS_BIN_TO_BUILD | Copies Qt's plugin files needed to execute the FreeCAD.exe to the build folder. См. также раздел Running and installing FreeCAD. | OFF |
FREECAD_LIBPACK_USE | Switch the usage of the FreeCAD LibPack on or off | ON |
FREECAD_LIBPACK_DIR | Directory where the LibPack is | FreeCAD's source code folder |
FREECAD_RELEASE_PDB | Create debug libraries also for release builds | ON |
Сборка FreeCAD
В зависимости от вашего компилятора процесс создания FreeCAD будет немного отличаться. В следующих разделах описаны известные вам рабочие процессы. Если вы создаете с помощью Qt Creator, перейдите к Building with Qt Creator, в противном случае продолжайте напрямую:
Сборка в Visual Studio 15 (2017) и 16 (2019)
Сборка релиза
- Запустите среду разработки Visual Studio. Это можно сделать либо нажатием кнопки "Open Project" в графическом интерфейсе CMake, либо двойным щелчком по файлу "FreeCAD.sln", который вы найдете в папке сборки.
- На панели инструментов среды разработки MSVC убедитесь, что вы используете для первой компиляции "Release".
- Есть окно под названием "Solution Explorer". В нем перечислены все возможные цели компиляции. Чтобы начать полную компиляцию, щелкните правой кнопкой мыши на целевом объекте "ALL_BUILD", а затем выберите "Build".
Теперь это займет довольно много времени.
Чтобы скомпилировать готовый к использованию FreeCAD, скомпилируйте целевую "INSTALL", см. раздел Running and installing FreeCAD.
Если вы не получили никаких ошибок, значит все готов. "Поздравляю!" Теперь вы можете выйти из MSVC или оставить его открытым.
"Примечание:" Для FreeCAD 0.20 требуется, по крайней мере, стандартная версия языка C++ 17, но сторонний компонент "flann" из LibPack еще не готов для этого. Поэтому вы получите ошибки компиляции для целевого "обратного проектирования". Чтобы исправить это, щелкните правой кнопкой мыши на этом целевом объекте в обозревателе решений MSVC и выберите в контекстном меню последнюю запись "Properties". В появившемся диалоговом окне измените "C++ Language Standard" на "ISO C++14". Наконец, снова создайте цель "ALL_BUILD".
Отладочная сборка
Для отладочной сборки необходимо использовать Python, который входит в пакет LibPack. Чтобы гарантировать это:
- Поиск в графическом интерфейсе CMake "Python"
- Если вы видите там путь, подобный "C:/Program Files/Python38/python.exe", CMake распознал Python, установленный на вашем компьютере, а не тот, который входит в LibPack. В этом случае адаптируйте эти различные настройки Python в CMake к этому (при условии, что LibPack находится в папке "D:\FreeCAD-build\FreeCADLibs_12.5.2_x64_VC17"):
As prerequisite for the debug build, you need to do this:
- Copy the content of the LibPack folder bind to the bin folder of the FreeCAD build folder (overwrite the existing files).
- Copy the content of the LibPack folder libd to the lib folder of the FreeCAD build folder.
Теперь
- Запустите среду разработки Visual Studio. Это можно сделать либо нажатием кнопки "Open Project" в графическом интерфейсе CMake, либо двойным щелчком по файлу "FreeCAD.sln", который вы найдете в папке сборки.
- На панели инструментов среды разработки MSVC убедитесь, что вы используете для первой компиляции "Debug".
- Есть окно под названием "Solution Explorer". В нем перечислены все возможные цели компиляции. Чтобы начать полную компиляцию, щелкните правой кнопкой мыши на целевом объекте "ALL_BUILD", а затем выберите "Build" в контекстном меню.
Теперь это займет довольно много времени. Если ошибок компиляции не было, вы можете запустить отладочную сборку:
- Щелкните правой кнопкой мыши на целевой "FreeCADMain", а затем выберите "Set as Startup Project" в контекстном меню.
- Наконец, нажмите на панели инструментов на кнопку с зеленым треугольником под названием "Local Windows Debugger".
If there were no compilation errors, and if the FREECAD_COPY_* options mentioned in the CMake Configuration step above were enabled, you can start the debug build:
- Right-click on the target FreeCADMain and then choose Set as Startup Project in the context menu.
- Finally click in the toolbar on the button with the green triangle named Local Windows Debugger.
Это запустит отладочную сборку FreeCAD, и вы сможете использовать среду разработки MSVC для ее отладки.
Видеоресурс
Учебник по английскому языку, который начинается с настройки в графическом интерфейсе CMake и продолжается командой "Build" в Visual Studio 16 2019, доступен без списка на YouTube по адресу Tutorial: Build FreeCAD from source on Windows 10.
Сборка с помощью Qt Creator (устарело)
Инсталяция и настройка Qt Creator
- Загрузите и установите Qt Creator
- Tools → Options → Text Editor → Behavior tab:
- File Encodings → Default Encodings:
- Установите значение: "'ISO-8859-1 /...csISOLatin1"' (Некоторые символы создают ошибки/предупреждения с помощью Qt Creator, если оставить значение UTF-8. Это, кажется, все исправляет.)
- Tools → Options → Build & Run:
- CMake tab
- Заполните поле Исполняемый файл путем к cmake.exe
- Kits tab
- Name: MSVC 2008
- Compiler: Microsoft Visual C++ Compiler 9.0 (x86)
- Debugger: Auto detected...
- Версия Qt: Отсутствует
- General tab
- Снимите флажок: Всегда создавайте проект перед его развертыванием
- Снимите флажок: Всегда развертывайте проект перед его запуском
- CMake tab
Импорт проекта и здания
- File → Open File or Project
- Открыть "'CMakeLists.txt"' который находится на верхнем уровне источника
- Это запустит CMake
- Выберите каталог сборки и нажмите кнопку Далее
- Установите для генератора значение "NMake Generator (MSVC 2008)"'
- Нажмите кнопку Запустить CMake. Следуйте инструкциям, приведенным выше, чтобы настроить CMake по своему вкусу.
Теперь FreeCAD можно построить
- Build → Build All
- Это займет много времени...
После завершения его можно запустить: В левом нижнем углу есть 2 зеленых треугольника. Один из них-отладка. Другой "run". Выбери, что тебе больше нравится.
Сборка из командной строки
Шаги по компиляции из командной строки зависят от компилятора. Для MSVC 2017 следующие шаги:
- В меню "Пуск" Windows перейдите в Visual Studio 2017 → Visual Studio Tools и выберите ""Командная строка разработчика для VS 2017""
- Перейдите в папку сборки.
- Выполните команду
msbuild ALL_BUILD.vcxproj /p:Configuration=Release
или
msbuild INSTALL.vcxproj /p:Configuration=Release
Эти шаги также могут быть автоматизированы. Вот, например, решение для MSVC 2017:
- Скачать скрипт compile-FC.txt.
- Переименуйте его в "compile-FC.bat".
- В проводнике файлов Windows Shift+Right-click на папке сборки и используйте из контекстного меню "Command prompt here".
- Выполните команду
compile-FC install
Вместо вызова compile-FC с опцией install вы также можете использовать debug или release.:
debug - компиляция FreeCAD в конфигурации отладки
release - компиляция FreeCAD в конфигурации выпуска
install - скомпилируйте FreeCAD в конфигурации выпуска и создайте установку установки
Запуск и установка FreeCAD
Существует 2 метода для запуска скомпилированного FreeCAD:
"Метод 1": Вы выполняете FreeCAD.exe которые вы найдете в своей папке сборки во вложенной папке "bin"
"Метод 2": Вы создаете целевую "УСТАНОВКУ"
Метод 2 является более простым, поскольку он автоматически гарантирует, что все библиотеки, необходимые для запуска FreeCAD.exe находятся в нужной папке. В FreeCAD.exe и библиотеки будут выведены в папку, указанную вами в переменной CMake "CMAKE_INSTALL_PREFIX".
Для метода 1 вам нужно поместить библиотеки в папку "bin" вашей папки сборки (где FreeCAD.exe есть). Это можно легко сделать:
- Откройте графический интерфейс CMake.
- Найдите там параметр переменной "FREECAD_COPY_DEPEND_DIRS_TO_BUILD" и проверьте его. Если такой опции нет, библиотеки уже были скопированы, см. description of the options.
- Найдите там параметр переменной "FREECAD_COPY_LIBPACK_BIN_TO_BUILD" и проверьте его.
- Найдите там параметр переменной "FREECAD_COPY_PLUGINS_BIN_TO_BUILD" и проверьте его.
- Нажмите на кнопку "Configure". В конце настройки CMake автоматически скопирует необходимые библиотеки из папки LibPack.
Troubleshooting
When running FreeCAD you may encounter missing DLLs when using certain workbenches or features of workbenches. The error message in FreeCAD's console will not tell you what DLL is missing. To find this out you must use an external tool:
- Download the latest release of the program Dependencies: https://github.com/lucasg/Dependencies/releases (choose the file Dependencies_x64_Release.zip)
- In the FreeCAD Python console execute these commands:
import os os.system(r"~\DependenciesGui.exe")
Note: Instead of the ~ you must specify the full path to the DependenciesGui.exe on your system.
- Now drag in the *.pyd file of the workbench with which you get missing DLLs reported.
Обновление сборки
FreeCAD очень активно развивается. Поэтому его исходный код меняется почти ежедневно. Добавляются новые функции и исправляются ошибки. Чтобы извлечь выгоду из этих изменений исходного кода, вы должны перестроить свой FreeCAD. Это делается в два этапа:
- Обновление исходного кода
- Перекомпиляция
Обновление исходного кода
Использование интерфейса
При использовании Git frontend TortoiseGit:
- Щелкните правой кнопкой мыши папку с исходным кодом FreeCAD в проводнике файлов Windows и выберите в контекстном меню ""Pull"".
- Появится диалоговое окно. Выберите там, какую ветвь разработки вы хотите получить. "master" - это основная ветвь. Поэтому используйте это, если вы не хотите скомпилировать специальную новую функцию из ветви, которая еще не была объединена в "master". (Для получения дополнительной информации о ветвях Git см. Git development process.)
Наконец, нажмите "ОК".
Использование командной строки
Откройте терминал (командная строка) и переключитесь там в свой исходный каталог. Затем введите:
git pull https://github.com/FreeCAD/FreeCAD.git master
где "master" - название основной ветви разработки. Если вы хотите получить код из другой ветви, используйте ее имя вместо "master".
Сборник
- Откройте среду разработки MSVC, дважды щелкнув файл "FreeCAD.sln" или файл "ALL_BUILD.vcxproj" в папке сборки.
- Перейдите к шагу 2 из раздела Building with Visual Studio 15 2017.
Updating the LibPack
If a new major version of a third-party dependency like Open Cascade is released, or if a third-party dependency has important bug fixes, a new LibPack is released. You can find the latest version here.
To update your LibPack the following recipe is best practice:
- Delete the bin folder in your build folder.
- Switch to your local LibPack folder and delete everything there.
- Extract the content of the new LibPack ZIP file into the existing, but now empty, local LibPack folder.
- Open CMake and there press the button Configure and then the button Generate. This recreates the bin folder you just deleted and also copies the new LibPack files into it.
- In CMake click the button Open Project and the MSVC IDE will open.
- In the MSVC IDE build the target INSTALL.
Инструменты
Для того, чтобы включиться к разработке FreeCAD, вы должны скомпилировать и установить следующие инструменты:
Плагин Qt designer
FreeCAD использует Qt в качестве инструментария для его пользовательского интерфейса. Все диалоговые окна настраиваются в UI-файлах, которые можно редактировать с помощью программы Qt Designer, который является частью любой установки Qt, а также включен в пакет LibPack. FreeCAD имеет свой собственный набор виджетов Qt для предоставления специальных функций, таких как добавление единицы измерения в поля ввода и настройка свойств настроек.
Сборник
DLL не может быть загружена как плагин, если она была скомпилирована с использованием другой версии Qt, чем тот, на котором основан ваш Qt Designer/Qt Creator. В этом случае вы должны скомпилировать DLL самостоятельно. Это делается следующим образом:
- In the CMake options (see this section above) enable the option BUILD_DESIGNER_PLUGIN and reconfigure.
- open MSVC and build the target FreeCAD_widgets
As result you will get the plugin file 'FreeCAD_widgets.dll in the folder
~\src\Tools\plugins\widget\Release
Установка
- Скачать this ZIP файл. (Скомпилирован с использованием Qt 5.12, см. below.)
- Извлеките DLL-файл в ZIP-файле и скопируйте его
- Если вы используете LibPack: в папку
"~\FreeCADLibs_12.5.2_x64_VC17\bin\designer"
, так как там будет только папка "bin", и вы должны сначала создать подпапку "конструктор". - Если у вас полная установка Qt: вы можете выбрать между folder
"C:\Qt\5.15.2\msvc2019_64\plugins\designer"
or
"C:\Qt\5.15.2\msvc2019_64\bin\designer" (сначала вы должны создать подпапку "конструктор".)
(адаптируйте пути к вашей установке!).
(Повторно)Запустите Qt Designer и проверьте его меню Help → Plugins. Если плагин "' FreeCAD_widgets.dll"' указана как загружаемая, теперь вы можете создавать и изменять файлы .ui FreeCAD. Если нет, вы должны compile создать библиотеку DLL самостоятельно.
Если вы предпочитаете использовать Qt Creator вместо Qt Designer библиотека DLL должна быть помещена в эту папку:
"C:\Qt\Qt5.15.2\Tools\QtCreator\bin\plugins\designer"
(Повторно)Запустите Qt Creator, переключитесь в режим "Design", а затем проверьте меню Tools → Form Editor → About Qt Designer Plugins. Если плагин "' FreeCAD_widgets.dll"' указана как загружаемая, теперь вы можете создавать и изменять файлы .ui FreeCAD. Если нет, вы должны compile создать библиотеку DLL самостоятельно.
Поставщик миниатюр
FreeCAD имеет функцию предварительного просмотра миниатюр для файлов *.FCStd. Это означает, что в проводнике файлов Windows *.FCStd файлы отображаются со снимком экрана модели, которую он содержит. Чтобы предоставить эту функцию, FreeCAD должен иметь файл "'FCStdThumbnail.dll"" где установлено в Windows.
Установка
Библиотека DLL устанавливается таким образом:
- Скачать this ZIP file и извлеките его.
- Откройте командную строку Windows с правами администратора (эти права являются обязательным требованием).
- Перейдите в папку, в которой находится библиотека DLL.
- Выполните эту команду
regsvr32 FCStdThumbnail.dll
Поэтому проверьте, работает ли это, убедитесь, что в FreeCAD включена опция настроек "Save thumbnail into project file when saving document"" и сохраните модель. Затем просмотрите в проводнике Windows папку сохраненной модели, используя представление символов. Теперь вы должны увидеть снимок экрана модели в представлении папок.
Сборник
Для компиляции FCStdThumbnail.dll
- Перейдите в исходную папку FreeCAD
"~\src\Tools\thumbs\ThumbnailProvider" - Откройте графический интерфейс CMake
- Укажите там в качестве исходной папки ту, в которой вы находитесь в данный момент.
- Используйте ту же папку, что и папка сборки.
- Нажмите "Configure".
- В появившемся диалоговом окне укажите генератор в соответствии с тем, который вы хотите использовать. Для стандартной MS Visual Studio используйте "Visual Studio xx 2yyy", где xx-версия компилятора, а 2yyy-год его выпуска. Рекомендуется использовать опцию по умолчанию "Использовать собственные компиляторы по умолчанию".
"Примечание:" Важно указать правильный вариант бита. Если у вас 64-битный вариант LibPack, вы также должны использовать компилятор x64. - Нажмите на кнопку "Generate".
- Теперь у вас должен быть файл "ALL_BUILD.vcxproj" в папке "~\src\Tools\thumbs\ThumbnailProvider". Дважды щелкните по нему, и откроется среда разработки MSVC.
- На панели инструментов среды разработки MSVC убедитесь, что вы используете целевой объект компиляции "Release".
- Есть окно под названием "Solution Explorer". Щелкните правой кнопкой мыши на "ALL_BUILD", а затем выберите "Build".
- В результате у вас теперь должно быть "'FCStdThumbnail.dll"' в папке "~\src\Tools\thumbs\ThumbnailProvider\release", который вы можете установить, как описано выше.
Компиляция OpenCascade
Стандартный пакет Libpack поставляется с версией OpenCascade, подходящей для общего использования. Однако при некоторых обстоятельствах вы можете захотеть скомпилировать с альтернативной версией OpenCascade, такой как один из их официальных релизов или исправленная ветвь. Обратите внимание, что нет никакой гарантии, что FreeCAD будет работать со всеми версиями OpenCascade, и использование версии, отличной от Libpack, предназначено только для продвинутых пользователей. Обратите также внимание, что если вы используете библиотеку Netgen, она использует OpenCascade для некоторых своих функций и должна быть скомпилирована с той же версией OpenCascade, которую вы используете при компиляции FreeCAD.
When compiling Open Cascade for FreeCAD note that there is no guarantee that FreeCAD will work with all versions of Open Cascade. Note also that when you are using the Netgen library, you must use the a NetGen version that it approved to compile with the Open Cascade version you like to compile.
Сначала получите исходный код OpenCascade либо непосредственно со страницы выпуска по адресу OpenCASCADE.org, через git, или путем клонирования чужой вилки, например вилка "blobfish" поддерживается участником форума FreeCAD tanderson69.
Затем используйте CMake для настройки системы сборки аналогично созданию FreeCAD. Примечательными вариантами CMake для OpenCascade являются:
- 3RDPARTY_DIR - Место расположения ваших сторонних библиотек, обычно заданное в каталоге FreeCAD Libpack
- INSTALL_DIR - Где устанавливают готовые библиотеки. Рекомендуется использовать изолированный каталог в вашей системе, а не устанавливать его глобально или перезаписывать версию Libpack.
- Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the Release mode.
- Repeat building the two targets in the Debug mode.
To build FreeCAD using the self-compiled Open Cascade, you must do the following:
- Copy all folders from the INSTALL_DIR to your LibPack folder (overwrite the existing files)
- Switch to the LibPack folder and go there to the subfolder cmake
- Open there the file OpenCASCADEDrawTargets.cmake with a text editor
- Search there for absolute paths to your LibPack folder and remove them. So e.g. the absolute path
D:/FreeCADLibs_12.5.4_x64_VC17/lib/freetype.lib
becomes just
freetype.lib - Do the same for the file OpenCASCADEVisualizationTargets.cmake
Compiling Netgen
The LibPack comes with a version of Netgen that will was tested to be build with the Open Cascade version of the LibPack. The problem is that every new release of Netgen changes the API. Also every new release of Open Cascade does the same. Therefore one cannot just easily change the Netgen version.
However, you might build Netgen nevertheless. This is an easy task:
- First obtain the Netgen source code, either directly from Netgen 's git repository.
- Then open the CMake GUI to configure the build system in a similar manner to building FreeCAD. These CMake options have to be set:
Variable name | Description | Default |
---|---|---|
CMAKE_INSTALL_PREFIX | The output folder when building the target INSTALL. If the build was successful, take the files from this folder to update your LibPack. | C:/netgen |
OpenCasCade_DIR | The path to the CMake files of Open Cascade. If you built Open Cascade as described in the section Compiling Open Cascade you can use the subfolder cmake of there folder you used as INSTALL_DIR. If not, use the subfolder cmake of your LibPack. Note hereby that the LibPack must then already contain a proper Open Cascade build. Independent what folder you use, you must now also create there a subfolder lib and copy in the files freetype.lib and freetyped.lib from your LibPack. | empty |
USE_GUI | set it to OFF | ON |
USE_NATIVE_ARCH | set it to OFF; this is only necessary important to support older CPU that don't have the AVX2 instruction set | ON |
USE_OCC | set it to ON | OFF |
USE_PYTHON | set it to OFF | ON |
USE_SUPERBUILD | set it to OFF | ON |
ZLIB_INCLUDE_DIR | The path to the necessary 3rdparty component zlib. It is recommended to use the folder as input where your used LibPack is. | empty |
ZLIB_LIBRARY_DEBUG | The path to the ZLib file zlibd.lib. It is located in the subfolder lib of your LibPack folder. | empty |
ZLIB_LIBRARY_RELEASE | The path to the ZLib file zlib.lib. It is located in the subfolder lib of your LibPack folder. | empty |
- Additionally you need to add a new CMake entry:
name: CMAKE_DEBUG_POSTFIX, type: string, content: _d
This assures that he file names of the debug libraries get another name than the release libraries and can later not be accidentally exchanged.
- Press the Configure button in CMake to generate the *.cmake files.
- Only necessary if older CPU should be supported that don't have the AVX2 instruction set:
- Search your Netgen build folder for the file netgen-targets.cmake and open it with a text editor. Remove the setting ;/arch:AVX2 in the Option INTERFACE_COMPILE_OPTIONS.
- Press the Configure button in CMake again.
- Press the Generate button in CMake.
- Open the project in Visual Studio and first build the ALL_BUILD and then INSTALL targets in the Release mode.
- Repeat building the two targets in the Debug mode.
To build FreeCAD using the self-compiled Netgen, you must do the following:
- Copy all folders from the CMAKE_INSTALL_PREFIX to your LibPack folder (overwrite the existing files)
Ссылки на литературу
Смотрите также
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Обзор
В последних дистрибутивах Linux, FreeCAD, как правило, собирается легко, поскольку все зависимости обычно предоставляются менеджером пакетов. В основном сборка включает 3 этапа:
- Получение исходного кода FreeCAD.
- Получение зависимостей, или пакетов, от которых зависит FreeCAD
- Настройка с помощью
cmake
и компиляция с помощьюmake
.
Ниже вы найдете подробное описание процесса сборки, некоторых скриптов компиляции и особенностей, с которыми Вы можете столкнуться. Если вы найдете ошибки, устаревшие сведения (дистрибутивы Linux меняются быстро), или если вы используете дистрибутив, которого нет в списке, обсудите вопрос на форуме, и помогите нам исправить это.
Общий рабочий процесс для компиляции FreeCAD из исходников. В систем должны быть как сторонние зависимости, так и исходные коды самого FreeCAD. CMake конфигурирует систему так чтобы весь проект скомпилировался одной инструкцией make.
Получение исходных кодов
Git
Лучший способ получить код это клонировать Git репозиторий Git только-для-чтения. Для этого вам потребуется программа git
, которую легко установить в большинство дистрибутивов Linux. Скачать её можно на официальном веб-сайте.
Git может быть установлен, следующей командой:
sudo apt install git
Следующая команда, копирует последнюю версию исходного кода FreeCAD в папку freecad-source
.
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source
Дополнительная информация о применении Git и внесении кода в проект изложена на странице управление исходным кодом.
Архив с исходным кодом
Кроме того, вы можете загрузить исходники непосредственно с GitHub, в качестве .zip
или .tar.gz
архива, и распаковать его в заданный каталог.
Установка зависимостей (Dependencies)
Для компиляции FreeCAD необходимо установить требуемые зависимости (dependencies), упомянутые в сторонних библиотеках; пакеты, содержащие эти зависимости для различных дистрибутивов Linux, перечислены ниже. Обратите внимание, что имена и доступность библиотек будут зависеть от вашего конкретного дистрибутива; если ваш дистрибутив устарел, некоторые пакеты могут быть недоступны или иметь другое имя. В этом случае посмотрите раздел ↓ старые и нестандартные дистрибутивы расположенный ниже.
Как только у вас будут установлены все зависимости, приступайте к сборке FreeCAD.
Обратите внимание, что размер исходного кода FreeCAD составляет около 500 МБ; он может быть в три раза больше, если вы клонируете репозиторий Git со всей историей его изменений. Для получения всех зависимостей может потребоваться загрузка 500 МБ или более новых файлов; при распаковке этих файлов может потребоваться 1500 МБ или более места. Также имейте в виду, что в процессе компиляции может быть создано до 1500 МБ дополнительных файлов, поскольку система копирует и изменяет весь исходный код. Поэтому при попытке компиляции убедитесь, что на вашем жестком диске достаточно свободного места, по крайней мере, не менее 4 ГБ.
Debian и Ubuntu
В системах основанных на Debian (Debian, Ubuntu, Mint, и т.п.) довольно легко установить все необходимые зависимости. Большинство библиотек доступны через apt
или менеджер пакетов Synaptic.
Если вы уже установили FreeCAD из официальных репозиториев, вы можете установить зависимости (dependencies) для его сборки с помощью этой единственной строки кода в терминале:
sudo apt build-dep freecad
Однако, если версия FreeCAD в репозиториях старая, зависимости (dependencies) могут быть уже устаревшими для компиляции последней версии FreeCAD. Поэтому, пожалуйста, убедитесь, что вы установили следующие пакеты.
Эти пакеты необходимы для успешной компиляции в целом:
build-essential
, устанавливает компиляторы C и C++ , библиотеки разработки C иmake
утилиту.cmake
, необходимый инструмент для настройки исходников FreeCAD. Вы также можете установитьcmake-gui
иcmake-curses-gui
чтобы иметь графический интерфейс для данной утилиты.libtool
, необходимые инструменты для создания shared библиотек.lsb-release
, стандартная утилита базовой отчетности обычно уже установлена в системе Debian и позволяет программно различать чистую установку Debian или ее вариант, такой как Ubuntu или Linux Mint. Не удаляйте этот пакет, так как от него могут зависеть многие другие системные пакеты.
При компиляции FreeCAD используется язык Python, и он также используется в runtime в качестве языка сценариев. Если вы используете дистрибутив на основе Debian, интерпретатор Python как правило уже установлен в нем.
python3
swig
, это инструмент, который создает интерфейсы между кодом C++ и Python.
Пожалуйста, убедитесь, что у вас установлен Python 3. Python 2 устарел в 2019 году, свежая разработка FreeCAD не тестируется с этой версией языка.
Boost библиотеки должны быть обязательно установлены:
libboost-dev
libboost-date-time-dev
libboost-filesystem-dev
libboost-graph-dev
libboost-iostreams-dev
libboost-program-options-dev
libboost-python-dev
libboost-regex-dev
libboost-serialization-dev
libboost-thread-dev
Должны быть установлены Coin библиотеки:
libcoin80-dev
, для Debian Jessie, Stretch, Ubuntu с 16.04 до 18.10, илиlibcoin-dev
, для Debian Buster, Ubuntu 19.04 и выше, а так же Ubuntu 18.04/18.10 вместе с freecad-stable/freecad-daily PPAs должны быть добавлены в иходники.
Несколько библиотек, которые занимаются вычислениями, триангулированными поверхностями, сортировкой, мешами (meshes), компьютерным зрением, картографическими проекциями, 3D-визуализацией, оконной системой X11, парсингом XML и чтением Zip-файлов:
libeigen3-dev
libgts-bin
libgts-dev
libkdtree++-dev
libmedc-dev
libopencv-dev
orlibcv-dev
libproj-dev
libvtk7-dev
orlibvtk6-dev
libx11-dev
libxerces-c-dev
libyaml-cpp-dev
libzipios++-dev
Python 2 и Qt4
Python 2 и Qt4 уже устарели и не рекомендуются к применению. Начиная с версии 0.20, в FreeCAD они больше не поддерживаются.
При компиляции FreeCAD в Debian Jessie, Stretch, Ubuntu 16.04, используйте Python 2 и Qt4, установив следующие зависимости:
qt4-dev-tools
libqt4-dev
libqt4-opengl-dev
libqtwebkit-dev
libshiboken-dev
libpyside-dev
pyside-tools
python-dev
python-matplotlib
python-pivy
python-ply
python-pyside
Python 3 и Qt5
При компиляции FreeCAD в Debian Buster, Ubuntu 19.04 и выше, а также Ubuntu 18.04/18.10 с freecad-stable/freecad-daily PPAs добавленным в ваш исходный код, установите следующие зависимости.
qtbase5-dev
qttools5-dev
qt5-default
(if compiling 0.20 on a machine that still has Qt4)libqt5opengl5-dev
libqt5svg5-dev
qtwebengine5-dev
libqt5xmlpatterns5-dev
libqt5x11extras5-dev
libpyside2-dev
libshiboken2-dev
pyside2-tools
pyqt5-dev-tools
python3-dev
python3-matplotlib
python3-packaging
python3-pivy
python3-ply
python3-pyside2.qtcore
python3-pyside2.qtgui
python3-pyside2.qtsvg
python3-pyside2.qtwidgets
python3-pyside2.qtnetwork
python3-pyside2.qtwebengine
python3-pyside2.qtwebenginecore
python3-pyside2.qtwebenginewidgets
python3-pyside2.qtwebchannel
python3-pyside2uic
Ядро OpenCascade
Ядро OpenCascade - это основная графическая библиотека для создания 3D-фигур. Она существует в виде официальной версии OCCT и виде версии для сообщества OCE. Версия для сообщества к применению больше не рекомендуется, так как она устарела.
Для Debian Buster и Ubuntu 18.10 и выше, а так же для Ubuntu 18.04 с freecad-stable/freecad-daily PPAs добавлеными в ваши исходники, установите официальные пакеты.
libocct*-dev
libocct-data-exchange-dev
libocct-draw-dev
libocct-foundation-dev
libocct-modeling-algorithms-dev
libocct-modeling-data-dev
libocct-ocaf-dev
libocct-visualization-dev
occt-draw
Для Debian Jessie, Stretch, Ubuntu 16.04 и выше, установите community edition пакеты.
liboce*-dev
liboce-foundation-dev
liboce-modeling-dev
liboce-ocaf-dev
liboce-ocaf-lite-dev
liboce-visualization-dev
oce-draw
Вы можете установить библиотеки по отдельности или сразу несколько с похожим именами используя символ звездочку '*'. Замените occ
на oce
если вы хотите установить community редакцию библиотек.
sudo apt install libocct*-dev
Необязательные к установке пакеты
При желании вы также можете установить эти дополнительные пакеты:
libsimage-dev
, чтобы Coin поддерживал дополнительные форматы файлов изображений.doxygen
иlibcoin-doc
(илиlibcoin80-doc
для старых систем), если вы хотите автоматический генерировать документацию к исходному коду.libspnav-dev
, для поддержки устройств 3D ввода, таких как 3Dconnexion "Space Navigator" или "Space Pilot".checkinstall
, если вы хотите зарегистрировать установленные файлы в диспетчере пакетов вашей системы, чтобы вы могли удалить их позже.
Устаовка Python 3 и Qt5 одной командой
Требуется, чтобы Pyside2 был доступен в Debian buster и freecad-stable/freecad-daily PPAs.
sudo apt install cmake cmake-gui libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside2-dev libqt5opengl5-dev libqt5svg5-dev qtwebengine5-dev libqt5x11extras5-dev libqt5xmlpatterns5-dev libshiboken2-dev libspnav-dev libvtk7-dev libx11-dev libxerces-c-dev libzipios++-dev occt-draw pyside2-tools python3-dev python3-matplotlib python3-packaging python3-pivy python3-ply python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtsvg python3-pyside2.qtwidgets python3-pyside2.qtnetwork python3-pyside2.qtwebengine python3-pyside2.qtwebenginecore python3-pyside2.qtwebenginewidgets python3-pyside2.qtwebchannel python3-markdown python3-git python3-pyside2uic qtbase5-dev qttools5-dev swig libyaml-cpp-dev
ПРИМЕЧАНИЕ: В некоторых версиях Ubuntu и некоторых версиях Qt вы получите сообщение об ошибке, что python3-pyside2uic не может быть найден-в этих системах вы можете безопасно опустить его. В Ubuntu 20.04 вам нужно будет добавить pyqt5-dev-tools
. Более подробную информацию можно найти в это обсуждение на форуме.
Установка Python 2 и Qt4 одной коммандой
Это не рекомендуется для более новых установок, поскольку и Python 2 и Qt4 являются устаревшими.
sudo apt install cmake debhelper dh-exec dh-python libboost-date-time-dev libboost-dev libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-serialization-dev libboost-thread-dev libcoin80-dev libeigen3-dev libgts-bin libgts-dev libkdtree++-dev libmedc-dev libocct-data-exchange-dev libocct-ocaf-dev libocct-visualization-dev libopencv-dev libproj-dev libpyside-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libshiboken-dev libspnav-dev libvtk6-dev libx11-dev libxerces-c-dev libzipios++-dev lsb-release occt-draw pyside-tools python-dev python-matplotlib python-pivy python-ply swig
Пользователи Ubuntu 16.04, пожалуйста, ознакомьтесь также с обсуждением компиляции на форуме: Компиляция в Linux (Kubuntu): CMake не может найти VTK.
Raspberry Pi
Выполните те же действия, что и в Debian и Ubuntu.
Сообщалось о проблемах при попытке компиляции в Raspbian с Python 3 и Qt5, но комбинация Python 3 и Qt4, похоже, работает для более старых версий FreeCAD.
Для более новых версий FreeCAD компиляция с Py3/Qt5 проходит успешно, если установлена операционная система Ubuntu 20.04.
Из-за различных проблем с Qt в этой версии обычные PySide tools не будут найдены.
E: Unable to locate package python3-pyside2uic
В этом случае мы можем установить пакеты из PyQt и создать символические ссылки на необходимые инструменты.
sudo apt-get install pyqt5-dev
sudo apt-get install pyqt5-dev-tools
cd /usr/bin/
ln -s pyrcc5 pyside2-rcc
ln -s pyuic5 pyside2-uic
Теперь компиляция может быть продолжена.
cd freecad-build/
cmake ../freecad-source -DBUILD_QT5=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 -DUSE_PYBIND11=ON
make -j2
Параметр -j
для make
не должен превышать 3, поскольку Raspberry Pi имеет ограниченную память. На компиляцию уйдет несколько часов, поэтому лучше сделать это за ночь.
Дополнительная информация, FreeCAD и Raspberry Pi 4.
Fedora
There is a bug in cmake distributed by Fedora 34/35 which results in cmake failing to find the opencascade libraries. This can easily be fixed by making one minor change to the top level cmake file of opencascade installed on Fedora. Details here: https://bugzilla.redhat.com/show_bug.cgi?id=2083568.
Near the top of the file OpenCASCADEConfig.cmake, change the following line to use REAL_PATH()
. This fixes a bug introduced by the use of a symlink from /lib
to /usr/lib
of Fedora, which causes cmake to fail.
This file is usually installed in /usr/lib64/cmake/opencascade/OpenCASCADEConfig.cmake.
get_filename_component (OpenCASCADE_INSTALL_PREFIX "${OpenCASCADE_INSTALL_PREFIX}" PATH)
change this to:
file (REAL_PATH ${OpenCASCADE_INSTALL_PREFIX} OpenCASCADE_INSTALL_PREFIX)
This trivial change needs to be made inside the build directory once cmake has been run and failed. Re-running cmake will then correctly detect the OCCT libraries in the normal way.
Fedora38/39
Now install Python 3.11. This includes a notable change in how Python initializes when running a program. As a result FreeCAD fails to find OpenCamLib, meaning 3D Surface and Waterline are not available in the CAM Workbench. This was fixed in the master branch on 20th Mar 2024 (Pull request #13059).
Вам нужны следующие пакеты :
gcc-c++
(or possibly another C++ compiler?)cmake
doxygen
swig
gettext
dos2unix
desktop-file-utils
libXmu-devel
freeimage-devel
mesa-libGLU-devel
opencascade-devel
openmpi-devel
python3
python3-devel
python3-pyside2
python3-pyside2-devel
pyside2-tools
boost-devel
tbb-devel
eigen3-devel
qt-devel
qt5-qtwebengine-devel
qt5-qtxmlpatterns
qt5-qtxmlpatterns-devel
qt5-qtsvg-devel
qt5-qttools-static
ode-devel
xerces-c
xerces-c-devel
opencv-devel
smesh-devel
Coin3
Coin3-devel
yaml-cpp
(Не перепутайте "Coin" с "coin" - тот что с маленькой буквы это финансовый пакет. Апрельские Coin4 и Coin4-devel 2021 уже доступны) (если coin2 является последней доступной версией для вашей версии Fedora, используйте пакеты из http://www.zultron.com/rpm-repo/)
SoQt-devel
freetype
freetype-devel
vtk
vtk-devel
med
med-devel
Можете добавить, если требуется:
- libspnav-devel (для поддержки устройств 3Dconnexion, вроде Space Navigator или Space Pilot)
- pivy ( https://bugzilla.redhat.com/show_bug.cgi?id=458975 Pivy не обязателен, но нужен для верстака Draft)
To install all dependencies at once (tested on fedora 36 and 37):
sudo dnf install gcc-c++ cmake doxygen swig gettext dos2unix desktop-file-utils libXmu-devel freeimage-devel mesa-libGLU-devel opencascade-devel openmpi-devel python3 python3-devel python3-pyside2 python3-pyside2-devel pyside2-tools boost-devel tbb-devel eigen3-devel qt-devel qt5-qtwebengine-devel qt5-qtxmlpatterns qt5-qtxmlpatterns-devel qt5-qtsvg-devel qt5-qttools-static ode-devel xerces-c xerces-c-devel opencv-devel smesh-devel Coin3 Coin3-devel SoQt-devel freetype freetype-devel vtk vtk-devel med med-devel libspnav-devel python3-pivy python3-markdown python3-GitPython yaml-cpp
Gentoo
Простейший путь проверить, какие пакеты нужны для компиляции FreeCAD это проверить через portage:
emerge -pv freecad
Вы получите список дополнительных пакетов, которые следует установить на Вашей системе.
Если FreeCAD недоступен в portage, он доступен в оверлее waebbl. Система отслеживания ошибок на оверлее waebbl Github может помочь решить некоторые проблемы, с которыми вы можете столкнуться. Оверлей предоставляет freecad-9999, который вы можете выбрать для компиляции или просто использовать для получения зависимостей.
layman -a waebbl
openSUSE
Tumbleweed
Следующие команды установят пакеты, необходимые для создания FreeCAD с Qt5 и Python 3.
zypper in --no-recommends -t pattern devel_C_C++ devel_qt5
zypper in libqt5-qtbase-devel libqt5-qtsvg-devel libqt5-qttools-devel boost-devel swig libboost_program_options-devel libboost_mpi_python3-devel libboost_system-devel libboost_program_options-devel libboost_regex-devel libboost_python3-devel libboost_thread-devel libboost_system-devel libboost_headers-devel libboost_graph-devel python3 python3-devel python3-matplotlib python3-matplotlib-qt5 python3-pyside2 python3-pyside2-devel python3-pivy gcc gcc-fortran cmake occt-devel libXi-devel opencv-devel libxerces-c-devel Coin-devel SoQt-devel freetype2-devel eigen3-devel libode6 vtk-devel libmed-devel hdf5-openmpi-devel openmpi2-devel netgen-devel freeglut-devel libspnav-devel f2c doxygen dos2unix glew-devel yaml-cpp
Следующая команда установит Qt Creator и отладчик проекта GNU.
zypper in libqt5-creator gdb
Если какие-либо пакеты отсутствуют, вы можете проверить Tumbleweed [3] "FreeCAD.spec" файл на [4] Откройте Службу сборки.
Также, проверьте, есть ли какие-либо исправления, которые вам необходимо использовать (например 0001-find-openmpi2-include-files.patch).
Leap
Если есть разница между доступными пакетами на Tumbleweed и Leap, то вы можете прочитать Leap [5] файл "FreeCAD.spec" на [6] Откройте службу сборки, чтобы определить необходимые пакеты.
Смотрите piano_jonas unofficial "Compile On openSUSE" guide.
Arch Linux
Вам понадобятся следующие библиотеки из официальных архивов:
boost
cmake
coin
curl
desktop-file-utils
eigen
gcc-fortran
git
glew
hicolor-icon-theme
jsoncpp
libspnav
med
nlohmann-json
opencascade
pyside2-tools
pyside2
python-matplotlib
python-netcdf4
python-packaging
python-pivy
qt5-svg
qt5-tools
qt5-webengine
shared-mime-info
shiboken2
swig
utf8cpp
verdict
xerces-c
yaml-cpp
sudo pacman -S --needed boost cmake coin curl desktop-file-utils eigen gcc-fortran git glew hicolor-icon-theme jsoncpp libspnav med nlohmann-json opencascade pyside2-tools pyside2 python-matplotlib python-netcdf4 python-packaging python-pivy qt5-svg qt5-tools qt5-webengine shared-mime-info shiboken2 swig utf8cpp xerces-c yaml-cpp
Note: Since version 5.0.1 of the openmpi
package the binary libmpi_cxx.so
stopped being shipped, this breaks the compilation with the current CMake process. To fix this you need to downgrade the package, see this forum post.
Более старые и нетрадиционные дистрибутивы
В других дистрибутивах у нас очень мало отзывов от пользователей, поэтому может быть сложнее найти необходимые пакеты.
Сначала попробуйте найти необходимые библиотеки, упомянутые в сторонние библиотеки в диспетчере пакетов. Остерегайтесь, что у некоторых из них может быть немного другое имя пакета; ищите name
, но также libname
, name-dev
, name-devel
и аналогичные. Если это невозможно, попробуйте скомпилировать эти библиотеки самостоятельно.
Для FreeCAD требуется версия компилятора GNU g++, равная или выше 3.0.0, так как FreeCAD в основном написан на C++. Во время компиляции выполняются некоторые сценарии Python, поэтому интерпретатор Python должен работать должным образом. Чтобы избежать каких-либо проблем с компоновщиком, также рекомендуется иметь пути к библиотеке в переменной LD_LIBRARY_PATH
или в файле ld.so.conf
. Это уже сделано в современных дистрибутивах Linux, но, возможно, потребуется установить в более старых.
Pivy
Pivy (обертки Python для Coin3d) не требуется для сборки FreeCAD или его запуска, но необходимы в качестве зависимости от среды выполнения для Draft Workbench. Если вы не собираетесь использовать эти инструментальные средства, вам не понадобится Pivy. Однако обратите внимание, что верстак Draft используется внутри других рабочих столов, таких как Arch и BIM, поэтому для использования этих инструментальных средств также необходимо установить Pivy.
К ноябрю 2015 года устаревшая версия Pivy, включенная в исходный код FreeCAD, больше не будет компилироваться во многих системах. Это не большая проблема, так как обычно вы должны получить Pivy от менеджера пакетов вашего дистрибутива; если вы не можете найти Pivy, вам, возможно, придется скомпилировать его самостоятельно, см. Инструкции по компиляции Pivy.
Отладочные символы
Для устранения неполадок в FreeCAD полезно иметь отладочные символы важных библиотек зависимостей, таких как Qt. Для этого попробуйте установить пакеты зависимостей, которые заканчиваются на -dbg
, -dbgsym
, -debuginfo
или аналогичные, в зависимости от вашего дистрибутива Linux.
Для Ubuntu вам, возможно, потребуется включить специальные репозитории, чтобы иметь возможность просматривать и устанавливать эти отладочные пакеты с помощью диспетчера пакетов. См.Debug Symbol Packages для получения дополнительной информации.
Сборка FreeCAD
FreeCAD использует CMake в качестве основной системы сборки, она доступна во всех основных операционных системах. Компиляция с помощью CMake обычно очень проста и происходит в два этапа.
- CMake проверяет наличие в вашей системе всех необходимых программ и библиотек и создает
Makefile
, настроенный для второго шага. FreeCAD имеет несколько вариантов конфигурации на выбор, но он поставляется с разумными настройками по умолчанию. Некоторые альтернативы подробно описаны ниже. - Сама компиляция, которая выполняется с помощью программы
make
, которая генерирует исполняемые файлы FreeCAD.
Поскольку FreeCAD - это крупное приложение, компиляция всего исходного кода может занять от 10 минут до одного часа, в зависимости от вашего процессора и количества ядер процессора, используемых для компиляции.
Сборка вне папки исходников
Для сборки из исходного кода просто создайте каталог сборки freecad-build
, отличный от вашей исходной папки FreeCAD, freecad-source
; затем из этой точки каталога сборки cmake
в нужную исходную папку. Вы также можете использовать cmake-gui
или ccmake
вместо cmake
в приведенных ниже инструкциях. Как только cmake
завершит конфигурацию среды, используйте make
для запуска актуальной компиляции.
# from your freecad source folder:
mkdir build
cd build
cmake ../
make -j$(nproc --ignore=2)
Опция -j
make
определяет, сколько задач (файлов) компилируется параллельно. Программа nproc
выводит количество ядер процессора в вашей системе; используя ее вместе с опцией -j
, вы можете обработать столько файлов, сколько у вас ядер, чтобы ускорить общую компиляцию программы. В приведенном выше примере он будет использовать все ядра вашей системы, кроме двух; это позволит вашему компьютеру реагировать на другие виды использования, пока компиляция выполняется в фоновом режиме. Исполняемый файл FreeCAD в конечном итоге появится в каталоге freecad-build/bin
. См. также Compiling (speeding up) для повышения скорости компиляции.
Resolving cmake issues
If you have done a build before and get stuck on a dependency that is not recognized or can't seem to be resolved, try the following:
- Delete the contents of the build directory before running cmake again. FreeCAD is a rapidly moving target, you may be tripping over cached cmake information that points at an older version than the new repository head can use. Clearing the cache may allow cmake to recover and recognize the version you actually need.
- If cmake complains about missing a specific file, use a tool such as "apt-file search", or its equivalent in other package systems, to discover what package that file belongs to and install it. Bear in mind that you are likely to need the -dev version of the package that carries header or config files files required for FreeCAD to use the package.
Compiling against GNU libc 2.34 and later
GNU libc 2.34 introduces a change to the library that can cause builds on some Linux systems to fail with an error like:
No rule to make target '/usr/lib/x86_64-linux-gnu/libdl.so
To resolve this, a symbolic link must be manually created from the (now empty) system-installed libdl.so.* to the location your compiler says it is looking for the file. For example (if the actual installed copy of libdl.so on your system is /usr/lib/x86_64-linux-gnu/libdl.so.2):
sudo ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so
Adapt the command for the structure of your system by searching for libdl.so* and linking it to the appropriate location.
Как восстановить папку с исходными кодами
Если вы случайно выполнили компиляцию в каталоге исходного кода или добавили странные файлы и хотели бы восстановить содержимое только в исходном исходном коде, вы можете выполнить следующие действия.
> .gitignore
git clean -df
git reset --hard HEAD
Первая строка очищает файл .gitignore
. Это гарантирует, что следующие команды clean и reset будут влиять на все в каталоге и не будут игнорировать элементы, соответствующие выражениям в .gitignore
. Вторая строка удаляет все файлы и каталоги, которые не отслеживаются репозиторием git, затем последняя команда сбрасывает все изменения в отслеживаемых файлах, включая первую команду, которая очистила файл .gitignore
.
Если вы не очистите исходный каталог, следующие запуски cmake
могут не включить новые параметры в систему, если код изменится.
Конфигурирование
Передавая различные параметры в cmake
, вы можете изменить способ компиляции FreeCAD. Синтаксис выглядит следующим образом.
cmake -D <var>:<type>=<value> $SOURCE_DIR
Где $SOURCE_DIR
- каталог, содержащий исходный код. <type>
в большинстве случаев может быть опущен. Пробел после параметра -D
также может быть опущен.
Например, чтобы избежать создания FEM Workbench:
cmake -D BUILD_FEM:BOOL=OFF ../freecad-source
cmake -DBUILD_FEM=OFF ../freecad-source
Все возможные переменные перечислены в файле InitializeFreeCADBuildOptions.cmake
, расположенном в каталоге CMake/FreeCAD_Helpers
. В этом файле найдёте слово option
, чтобы перейти к переменным, которые можно задать, и просмотреть их значения по умолчанию.
# ============================================================================== # ================= All the options for the build process ================= # ============================================================================== option(BUILD_FORCE_DIRECTORY "The build directory must be different to the source directory." OFF) option(BUILD_GUI "Build FreeCAD Gui. Otherwise you have only the command line and the Python import module." ON) option(FREECAD_USE_EXTERNAL_ZIPIOS "Use system installed zipios++ instead of the bundled." OFF) option(FREECAD_USE_EXTERNAL_SMESH "Use system installed smesh instead of the bundled." OFF) ...
В качестве альтернативы используйте команду cmake-LH
для отображения текущей конфигурации и, следовательно, всех переменных, которые можно изменить. Вы также можете установить и использовать cmake-gui
для запуска графического интерфейса, отображающего все переменные, которые можно изменить. В следующих разделах мы перечислим некоторые из наиболее важных опций, которые вы, возможно, захотите использовать.
Для Debug сборки
Создайте сборку Debug
для устранения неполадок в FreeCAD. Имейте в виду, что при такой сборке Sketcher становится очень медленным при работе со сложными эскизами.
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Debug ../freecad-source
Для Release сборки
Создайте сборку Release
для тестирования кода, который не завершается сбоем. Сборка Release
будет выполняться намного быстрее, чем сборка Debug
.
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release ../freecad-source
Сборка на основе Python 3 и Qt5
По умолчанию FreeCAD 0.19 и более ранние версии созданы для Python 2 и Qt4. Поскольку эти два пакета устарели, лучше создавать для Python 3 и Qt5. Поддержка Python 2 и Qt4 была удалена в FreeCAD 0.20, и нет необходимости явно включать Qt5 и Python 3 при компиляции последних версий разработки.
Для 0.20_dev:
cmake ../freecad-source
Обратите внимание, что при переключении между сборками 0.19 и 0.20 может потребоваться удалить CMakeCache.txt до запуска cmake.
Сборка с применением особых версий Python
Если по умолчанию исполняемый файл python
в вашей системе является символической ссылкой на Python 2, cmake
попытается настроить FreeCAD для этой версии. Вы можете выбрать другую версию Python, указав путь к определенному исполняемому файлу:
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 ../freecad-source
Если это не сработает, вам, возможно, придется определить дополнительные переменные, указывающие на требуемые библиотеки Python, и включить каталоги:
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
-DPYTHON_INCLUDE_DIR=/usr/include/python3.6m \
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
-DPYTHON_PACKAGES_PATH=/usr/lib/python3.6/site-packages/ \
../freecad-source
В одной системе, возможно, имеет несколько независимых версий Python, поэтому расположение и номера версий ваших файлов Python будут зависеть от вашего конкретного дистрибутива Linux. Используйте python3-V
для отображения версии Python, которую вы используете в настоящее время; необходимы только первые два числа; например, если результатом является Python 3.6.8
, вам необходимо указать каталоги, относящиеся к версии 3.6. Если вы не знаете нужных каталогов, попробуйте выполнить их поиск с помощью команды locate
.
locate python3.6
Вы можете использовать python3 -m site
в терминале для определения каталога site-packages
или dist-packages
для систем Debian.
Some components of FreeCAD, such as PySide, try to autodetect the most recent Python version installed on your system, which might fail if it is different from what you entered above. Adding the following cMake option might solve the issue:
-DPython3_FIND_STRATEGY=LOCATION
Сборка в Qt Creator на основе Python 3 и Qt5
1. Запустите Qt Creator.
2. Кликните на Open Project.
3. Перейдите в каталог, в котором находится исходный код, freecad-source/
, и выберите самый верхний файл CMakeLists.txt
.
4. Выбрав файл, он автоматически запустит cmake
на нем, но может выйти из строя, если соответствующие параметры установлены неправильно.
5. Перейдите в Projects → Build & Run → Imported Kit → Build → Build Settings → CMake. Установите соответствующий каталог сборки, freecad-build/
.
6. Установите соответствующие переменные в диалоговом окне Key-Value типов String
и Bool
.
PYTHON_EXECUTABLE=/usr/bin/python3
7. Если переменные загружают проект неправильно, возможно, вам придется перейти к Projects → Manage Kits → Kits → Default (or Imported Kit or similar) → CMake Configuration. Затем нажмите Change, и добавьте соответствующую конфигурацию, как описано выше. Возможно, вам придется добавить дополнительные переменные о путях Python, если системный Python не найден.
PYTHON_EXECUTABLE:STRING=/usr/bin/python3.7
PYTHON_INCLUDE_DIR:STRING=/usr/include/python3.7m
PYTHON_LIBRARY:STRING=/usr/lib/x86_64-linux-gnu/libpython3.7m.so
PYTHON_PACKAGES_PATH:STRING=/usr/lib/python3.7/site-packages
7.1. Нажмите Apply, затем OK.
7.2. Убедитесь, что остальные параметры заданы правильно, например, Qt version должна быть текущей версией, установленной в системе, как Qt 5.9.5 in PATH (qt5)
.
Нажмите Apply, затем OK, чтобы закрыть конфигурацию.
Программа cmake
должна снова запуститься автоматически, и она должна заполнить весь диалог Key-Value всеми переменными, которые можно настроить.
8. Перейдите в Projects → Build & Run → Imported Kit → Run → Run Settings → Run → Run Configuration и выберите FreeCADMain
для компиляции графической версии FreeCAD или FreeCADMainCMD
для компиляции только версии командной строки.
9. Наконец, перейдите в меню Сборка → Проект сборки "FreeCAD". Если это новая компиляция, она должна занять несколько минут, включительно часов, в зависимости от количества доступных процессоров.
Плагин Qt designer
Если Вы хотите разрабатывать Qt-код для FreeCAD, Вам понадобится плагин к Qt Designer, который обеспечивает все пользовательские виджеты FreeCAD.
Перейдите в дополнительный каталог исходного кода, запустите qmake
с указанным файлом проекта для создания Makefile
; затем запустите make
для компиляции плагина.
cd freecad-source/src/Tools/plugins/widget
qmake plugin.pro
make
Если вы компилируете для Qt5, убедитесь, что двоичный файл qmake
предназначен для этой версии, чтобы результирующий Makefile
содержал необходимую информацию для Qt5.
cd freecad-source/src/Tools/plugins/widget
$QT_DIR/bin/qmake plugin.pro
make
где $QT_DIR
- это каталог, в котором хранятся двоичные библиотеки Qt, например, /usr/lib/x86_64-linux-gnu/qt5
.
Созданная библиотека libFreeCAD_widgets.so
, которую необходимо скопировать в $QT_DIR/плагины/конструктор
.
sudo cp libFreeCAD_widgets.so $QT_DIR/plugins/designer
Внешний или встроенный Pivy
В прошлом, версия Pivy была включена в исходный код FreeCAD (internal). Если вы хотели использовать системную копию Pivy (external), вам нужно было использовать -DFREECAD_USE_EXTERNAL_PIVY=1
.
Использование внешнего Pivy стало по умолчанию во время разработки FreeCAD 0.16, поэтому эту опцию больше не нужно устанавливать вручную.
Документирование посредством Doxygen
Если у вас установлен Doxygen, вы можете создать документацию по исходному коду. См. инструкции в source documentation.
Дополнительная документация
Исходный код FreeCAD очень обширен, и с помощью CMake можно настроить множество параметров. Обучение полному использованию CMake может быть полезно для выбора правильных вариантов для ваших особых потребностей.
от Kitware.
(блог), предварительно изучив программирование.
(блог) , предварительно изучив программирование.
Создание пакета debian
Если Вы планируете собрать пакет Debian вне исходников, вам следует сначала установить следующие пакеты:
sudo apt install dh-make devscripts lintian
Перейдите в папку FreeCAD и выполните
debuild
Когда пакет построен, Вы можете использовать lintian
для проверки, содержит ли пакет ошибки
lintian freecad-package.deb
*.deb package with checkinstall
The Debian script checkinstall
allows to create a *.deb package that can be installed and removed with the standard dpkg
commands. It may need to be installed first (on Ubuntu use sudo apt install checkinstall
). It's interactive and asks for the required information providing helpful defaults. During the process the package is installed and a *.deb file and a backup archive are created.
It's a good idea to define a name and a short description for the package. The name must be entered to uninstall it again and the desription will be listed by dpkg -l
. The default name "build" is not very informative.
Example:
cd freecad-source/build
cmake ..
make
sudo checkinstall # e.g. name=freecad-test1
The result is a *.deb file in the build folder. checkinstall
will install the build by default. This is how you can install or uninstall it:
cd freecad-source/build
ls | grep freecad
freecad-test1_20220814-1_amd64.deb
sudo dpkg -i freecad-test1_20220814-1_amd64.deb # install
dkpg -l | grep freecad # find by name
sudo dpkg -r freecad-test1 # uninstall by name
Обновление исходного кода
Система CMake позволяет разумно обновлять исходный код и перекомпилировать только то, что изменилось, что ускоряет следующие компиляции.
Перейдите в то место, где исходный код FreeCAD был впервые загружен, и извлеките новый код:
cd freecad-source
git pull
Затем перейдите в каталог сборки, в котором код был скомпилирован изначально, и запустите cmake
, указав текущий каталог (denoted by a dot); затем запустите повторную компиляцию с помощью make
.
cd ../freecad-build
cmake .
make -j$(nproc --ignore=2)
Uninstalling the source code
In case the compiled source code was installed with sudo make install
(for Debian) the files were copied to the /usr/local folder into several subfolders. For uninstallation the file install_manifest.txt can be used. It has been created into the build folder during compilation and contains all installed files. As long as this file exists, the installation can be uninstalled.
cd freecad-source/freecad-build
xargs sudo rm < install_manifest.txt
Разрешение проблем
Примечание для 64-битных систем
При компиляции FreeCAD на 64-бит известна проблема с 64-битным пакетом OpenCASCADE. Чтобы FreeCAD правильно заработал, Вам нужно запустить скрипт configure
и установить дополнительно CXXFLAGS
:
./configure CXXFLAGS="-D_OCC64"
Для систем на базе Debian эта опция не требуется при использовании готовых пакетов OpenCASCADE, поскольку эти пакеты устанавливают правильно CXXFLAGS
внутри.
Скрипты автоматической компиляции
Это всё, что Вам нужно для полной компиляции FreeCAD. Это односкриптовое решение, работающее на свежеустановленном дистрибутиве. Команда запросит пароль root для установки пакетов новых онлайновых репозиториев. Эти скрипты должны запускаться на 32- и 64-битных версиях. Они написаны для разных версий, но, скорее всего, будут работать для позднейший версий с небольшими изменениями или без них.
Если у вас есть такой скрипт для вашего выбранного дистрибутива, пожалуйста, обсудите его на Форум FreeCAD, чтобы мы могли его включить.
Ubuntu
Эти скрипты обеспечивают надёжный путь для установки верного набора зависимостей, требуемых для сборки и запуска FreeCAD в Ubuntu. Они используют репозитории PPA Ubuntu FreeCAD, и должны работать на любой версии Ubuntu, для которой есть целевой PPA. PPA на freecad-daily нацелен на последнюю версию Ubuntu, а 'стабильный' PPA нацелен на официально поддерживаемые версии Ubuntu.
Этот скрипт устанавливает дневной скомпилированный снимок FreeCAD и его зависимостей. Он добавляет дневной репозиторий, получает зависимости для создания этой версии и устанавливает необходимые пакеты. Затем он продолжает извлекать исходный код в определенный каталог, создает каталог сборки и вносит в него изменения, настраивает среду компиляции с помощью cmake
и, наконец, создает всю программу с помощью make
. Сохраните сценарий в файл, сделайте его исполняемым и запустите его, но не используйте sudo
; привилегии суперпользователя будут запрашиваться только для выбранных команд.
#!/bin/sh
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-daily && sudo apt-get update
sudo apt-get build-dep freecad-daily
sudo apt-get install freecad-daily
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad-source
mkdir freecad-build
cd freecad-build
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 -DFREECAD_USE_PYBIND11=ON ../freecad-source
make -j$(nproc --ignore=2)
При желании вы можете удалить предварительно скомпилированную версию FreeCAD (freecad-daily
), оставив зависимости на месте, однако, если этот пакет будет установлен, менеджер пакетов также сможет обновлять свои зависимости; это наиболее полезно, если вы намерены следить за развитием FreeCAD, а также постоянно обновлять и компилировать исходные тексты из репозитория Git.
Предыдущий скрипт предполагает, что вы хотите скомпилировать последнюю версию FreeCAD, поэтому вы используете репозиторий "daily" для получения зависимостей. Однако вместо этого вы можете получить зависимости сборки "стабильной" версии для вашего текущего выпуска Ubuntu. Если это так, замените верхнюю часть предыдущего сценария следующими инструкциями. Для Ubuntu 12.04 опустите --enable-source
в команде.
#!/bin/sh
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-stable && sudo apt-get update
sudo apt-get build-dep freecad
sudo apt-get install libqt5xmlpatterns5-dev # Needed for 0.20; should go away on next packaging update
sudo apt-get install freecad
Как только вы установите пакет freecad
из репозитория freecad-stable
, он заменит исполняемый файл FreeCAD, доступный из репозитория Ubuntu Universe. Исполняемый файл будет называться просто freecad
, а не freecad-stable
.
openSUSE
Никаких внешних репозиториев не требуется для компиляции FreeCAD. Однако существует несовместимость с python3-devel, которую необходимо удалить. FreeCAD может быть скомпилирован из GIT
# install needed packages for development
sudo zypper install gcc cmake OpenCASCADE-devel libXerces-c-devel \
python-devel libqt4-devel python-qt4 Coin-devel SoQt-devel boost-devel \
libode-devel libQtWebKit-devel libeigen3-devel gcc-fortran git swig
# create new dir, and go into it
mkdir FreeCAD-Compiled
cd FreeCAD-Compiled
# get the source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git free-cad
# Now you will have a subfolder in this location called free-cad. It contains the source
# make another dir for compilation, and go into it
mkdir FreeCAD-Build1
cd FreeCAD-Build1
# build configuration
cmake ../free-cad
# build FreeCAD
make
# test FreeCAD
cd bin
./FreeCAD -t 0
Поскольку вы используете git, в следующий раз, когда захотите скомпилировать, вам не нужно клонировать все подряд просто извлеките из git и скомпилируйте еще раз
# go into free-cad dir created earlier
cd free-cad
# pull
git pull
# get back to previous dir
cd ..
# Now repeat last few steps from before.
# make another dir for compilation, and go into it
mkdir FreeCAD-Build2
cd FreeCAD-Build2
# build configuration
cmake ../free-cad
# build FreeCAD
# Note: to speed up build use all CPU cores: make -j$(nproc)
make
# test FreeCAD
cd bin
./FreeCAD -t 0
Debian Squeeze
# get the needed tools and libs
sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev \
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.5-dev \
libsimage-dev libopencascade-dev \
libsoqt4-dev libode-dev subversion cmake libeigen2-dev python-pivy \
libtool autotools-dev automake gfortran
# checkout the latest source
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git freecad
# go to source dir
cd freecad
# build configuration
cmake .
# build FreeCAD
# Note: to speed up build use all CPU cores: make -j$(nproc)
make
# test FreeCAD
cd bin
./FreeCAD -t 0
Fedora 27/28/29
Опубликовано пользователем [PrzemoF] на форуме.
#!/bin/bash
ARCH=$(arch)
MAIN_DIR=FreeCAD
BUILD_DIR=build
#FEDORA_VERSION=27
#FEDORA_VERSION=28
FEDORA_VERSION=29
PACKAGES="gcc cmake gcc-c++ boost-devel zlib-devel swig eigen3 qt-devel \
shiboken shiboken-devel pyside-tools python-pyside python-pyside-devel xerces-c \
xerces-c-devel OCE-devel smesh graphviz python-pivy python-matplotlib tbb-devel \
freeimage-devel Coin3 Coin3-devel med-devel vtk-devel"
FEDORA_29_PACKAGES="boost-python2 boost-python3 boost-python2-devel boost-python3-devel"
if [ "$FEDORA_VERSION" = "29" ]; then
PACKAGES="$PACKAGES $FEDORA_29_PACKAGES"
fi
echo "Installing packages required to build FreeCAD"
sudo dnf -y install $PACKAGES
cd ~
mkdir $MAIN_DIR || { echo "~/$MAIN_DIR already exist. Quitting.."; exit; }
cd $MAIN_DIR
git clone --recurse-submodules https://github.com/FreeCAD/FreeCAD.git
mkdir $BUILD_DIR || { echo "~/$BUILD_DIR already exist. Quitting.."; exit; }
cd $BUILD_DIR
cmake ../FreeCAD
make -j$(nproc)
Arch с использованием AUR
Arch User Repository (AUR) - это коллекция пользовательских рецептов для создания пакетов, которые официально не поддерживаются сопровождающими распространения / сообществом. Обычно они в безопасности. Вы можете увидеть, кто поддерживал посылку и как долго он это делал. Рекомендуется проверить общестроительные файлы. Также в этой области доступно программное обеспечение с открытым исходным кодом, даже если оно поддерживается официальной компанией-владельцем.
Обязательное требование : git
Шаги :
- Откройте терминал. При необходимости создайте каталог, например.
mkdir git
. При необходимости измените каталог, например.cd git
. - Клонировать репозиторий AUR :
git clone http://aur.archlinux.org/packages/freecad-git
- Войдите в папку репозитория AUR :
cd freecad-git
- Компиляция с использованием Arch makepkg :
makepkg -s
. Флаг -s или --syncdeps также установит необходимые зависимости. - Установите созданный пакет :
makepkg --install
или дважды щелкните имя файла pkgname-pkgver.pkg.tar.xz в вашем браузере файлов.
Чтобы обновить FreeCAD до последней версии, просто повторите шаг 3. Обновите репозиторий, когда в рецепте произойдет какое-либо изменение или появятся новые функции, используя git checkout-f
внутри каталога.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Обзор
This page describes how to compile the FreeCAD source code on macOS. For other platforms, see Compiling.
These instructions have been tested on macOS Catalina with standard XCode 11.6. It is known to work on macOS BigSur Beta with XCode 12.0 beta. If you plan to use XCode Beta, please be sure to download Command Line Tools add on through a dmg package to workaround some libz dependency issues.
This page serves as a quick start, and is not intended to be comprehensive with regard to describing all the available build options.
If you just want to evaluate the latest pre-release build of FreeCAD, you can download pre-built binaries from here.
Install Prerequisites
The following software must be installed to support the build process.
Homebrew Package Manager
Homebrew is a command line based package manager for macOS. The Homebrew main page provides an installation command line that you simply paste into a terminal window.
CMake
CMake is a build tool that generates a build configuration based on variables you specify. You then issue the 'make' command to actually build that configuration. The command-line version of CMake is automatically installed as part of the Homebrew installation, above. If you prefer to use a GUI version of CMake, you can download it from here.
Install Dependencies
FreeCAD maintains a Homebrew 'cask' which installs the required formulas and dependencies. Issue the following brew commands in your terminal.
brew tap freecad/freecad
brew install eigen
brew install --only-dependencies freecad
brew install
may take quite a while, so you may want go grab a beverage. :-).
Alternately, you can install the individual dependencies manually by installing the following packages using brew install ...
:
cmake
swig
boost
boost-python3
eigen
gts
vtk
xerces-c
qt@5
- Only Qt5 is currently supported, support for Qt6 is a work-in-progressopencascade
doxygen
pkgconfig
coin3d
- Note that as of this writing (Nov. 2022) this will install an unusable version of pyside@2 as a dependency.
There are several packages that are only available when you have tapped the freecad cask: you must do that (brew tap freecad/freecad
). Due to some historical bug workarounds, at the time of this writing (Nov. 2022) the versions of PySide2 and Shiboken2 installed by Homebrew are not usable because they force the use of Py_Limited_API, which FreeCAD does not support. It is expected that this workaround will be removed in the coming months, but in the meantime you must use the FreeCAD cask versions of PySide and Shiboken. Use brew install ...
, install the following packages:
freecad/freecad/pyside2@5.15.5
freecad/freecad/shiboken2@5.15.5
freecad/freecad/med-file
freecad/freecad/netgen
You will also need to "link" PySide and Shiboken:
brew link freecad/freecad/pyside2@5.15.5 freecad/freecad/shiboken2@5.15.5
In some cases the packages installed by Homebrew do not use the same Python version: for example, at the time of this writing PySide2 uses Python 3.10, but boost-python3 uses Python 3.11. While it is possible to "roll back" the more advanced version (so that in this case boost-python3 uses Python 3.10) this is an advanced operation, and in many cases it is best to wait for an update to the other package. If you want to pursue that path anyway, look at the "brew extract" command, which you can use to extract a formula into a new cask (typically freecad/freecad). You can then edit that formula as needed.
You will need to set the path to Qt: Qt5 is currently supported, while support for Qt6 is a work-in-progress. Set FREECAD_QT_VERSION to "Auto" or "5" to select Qt5 (the default). On the command line, use something like:
cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DPYTHON_EXECUTABLE="/usr/local/bin/python3" \
-DQt5_DIR="/usr/local/Cellar/qt@5/5.15.7/lib/cmake/Qt5" \
-DPySide2_DIR="/usr/local/Cellar/pyside2@5.15.5/5.15.5/lib/cmake/PySide2-5.15.5" \
-DShiboken2_DIR="/usr/local/Cellar/shiboken2@5.15.5/5.15.5_1/lib/cmake/Shiboken2-5.15.5" \
../freecad-source
Get the source
In the following instructions, the source and build folders are created side-by-side under
/Users/username/FreeCAD
but you can use whatever folders you want.
mkdir ~/FreeCAD
cd ~/FreeCAD
The following command will clone the FreeCAD git repository into a directory called FreeCAD-git.
git clone https://github.com/FreeCAD/FreeCAD FreeCAD-git
Create the build folder.
mkdir ~/FreeCAD/build
Запуск CMake
Next, we will run CMake to generate the build configuration. Several options must be passed to CMake. The following table describes the options and gives some background.
CMake Options
Name | Value | Notes |
---|---|---|
CMAKE_BUILD_TYPE | Release (STRING) | Release or Debug. Debug is generally used for developer-level testing but may also be required for user-level testing and troubleshooting. |
CMAKE_PREFIX_PATH | "/usr/local/opt/qt5152;" ... (PATH) | Required to build with Qt5. See note below. You also need to add path to VTK libraries and NGLIB libraries cmake configuration file. |
FREECAD_CREATE_MAC_APP | 1 (BOOL) | Create a FreeCAD.app bundle at the location specified in CMAKE_INSTALL_PREFIX, when the 'make install' command issued. |
CMAKE_INSTALL_PREFIX | "./.." (PATH) | Path where you want to generate the FreeCAD.app bundle. |
FREECAD_USE_EXTERNAL_KDL | 1 (BOOL) | Required. |
BUILD_FEM_NETGEN | 1 (BOOL) | Required if choosing to build the FEM tools. |
Note: Command line to generate CMAKE_PREFIX_PATH:
ls -d $(brew list -1 | grep qt | tail -1 | xargs brew --cellar)/*/lib/cmake
CMake GUI
Open the CMake app, and fill in the source and build folder fields. In this example, it would be /Users/username/FreeCAD/FreeCAD-git for the source, and /Users/username/FreeCAD/build for the build folder.
Next, click the Configure button to populate the list of configuration options. This will display a dialog asking you to specify what generator to use. Leave it at the default Unix Makefiles. Configuring will fail the first time because there are some options that need to be changed. Note: You will need to check the Advanced checkbox to get all of the options.
Set options from the table above, then click Configure again and then Generate.
Коммандная строка CMake
Enter the following in the terminal.
export PREFIX_PATH="/usr/local/opt/qt5152;\
/usr/local/Cellar/nglib/v6.2.2007/Contents/Resources;\
/usr/local/Cellar/vtk@8.2/8.2.0_1/lib/cmake;"
$cd ~/FreeCAD/build
$cmake \
-DCMAKE_BUILD_TYPE="Release" \
-DBUILD_QT5=1 \
-DWITH_PYTHON3=1 \
-DCMAKE_PREFIX_PATH="$PREFIX_PATH" \
-DPYTHON_EXECUTABLE="/usr/local/bin/python3" \
-DFREECAD_USE_EXTERNAL_KDL=1 \
-DCMAKE_CXX_FLAGS='-std=c++14' \
-DBUILD_FEM_NETGEN=1 \
-DFREECAD_CREATE_MAC_APP=1 \
-DCMAKE_INSTALL_PREFIX="./.." \
../FreeCAD-git/
Run make
Finally, from a terminal run make to compile and link FreeCAD, and generate the app bundle.
cd ~/FreeCAD/build
make -j5 install
The -j option specifies how many make processes to run at once. One plus the number of CPU cores is usually a good number to use. However, if compiling fails for some reason, it is useful to rerun make without the -j option, so that you can see exactly where the error occurred.
See also Compiling - Speeding up.
If make finishes without any errors, you can now launch FreeCAD by double clicking the executable in the Finder.
Updating from Github
FreeCAD development happens fast; every day or so there are bug fixes or new features. To get the latest changes, use git to update the source directory (see Source code management), then re-run the CMake and make steps above. It is not usually necessary to start with a clean build directory in this case, and subsequent compiles will generally go much faster than the first one.
Building with Qt4 and Python 2.7
FreeCAD has transitioned from Qt 4 to Qt 5 as well as homebrew. Qt 4 is no longer available as an option for new build on macOS following Qt 5 transition. Python 2.7 has been deprecated within homebrew and upcoming macOS and we do not support it anymore for macOS build either.
Устранение неполадок
Segfault on Qt5 launch
If Qt4 was previously installed via brew, and you then build with Qt5, you may get a EXC_BAD_ACCESS (SEGSEGV) exception when launching the new Qt5 build. The fix for this is to manually uninstall Qt4.
brew uninstall --ignore-dependencies --force cartr/qt4/shiboken@1.2 cartr/qt4/pyside@1.2 cartr/qt4/pyside-tools@1.2 cartr/qt4/qt-legacy-formula
Fortran
"No CMAKE_Fortran_COMPILER could be found." during configuration - Older versions of FreeCAD will need a fortran compiler installed. With Homebrew, do "brew install gcc" and try configuring again, giving cmake the path to Fortran ie -DCMAKE_Fortran_COMPILER=/opt/local/bin/gfortran-mp-4.9 . Or, preferably use a more current version of FreeCAD source!
FreeType
When using CMake versions older than 3.1.0, it's necessary to set CMake variable FREETYPE_INCLUDE_DIR_freetype2 manually, eg /usr/local/include/freetype2
Additional Build Instructions
FreeCAD can be built against the latest git master hosted on github, and launched from a CLI using libraries provided by the homebrew-freecad tap. For a complete list of build instructions see here.
Docnav/ru |Компиляция в Linux |Компиляция в Docker }}
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac,
Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Overview
Обзор
Это библиотеки, которые FreeCAD использует в качестве сторонних зависимостей во время компиляции. Обычно они dynamically linked libraries и имеют расширение .so
в Linux/macOS и .dll
в Windows и сопровождаются их заголовочными файлами .h
или .hpp
или аналогичными. Если необходима измененная библиотека или необходим класс-оболочка, код измененной библиотеки или оболочки должен стать частью исходного кода FreeCAD и быть скомпилирован вместе с ним.
Перед компиляцией в системе должны быть установлены зависимости; см. компиляция в Linux, компиляция в Windows и компиляция в macOS для получения большей информации.
Если вы компилируете с помощью Windows, рассмотрите возможность использования LibPack вместо того, чтобы пытаться устанавливать библиотеки самостоятельно.
Ссылки
Подробности
Python
Python
Версия: 3.3 или выше
Лицензия: Python 3.3 license
Python - это общедоступный универсальный язык сценариев, который широко используется в Linux и программном обеспечении с открытым исходным кодом. В FreeCAD Python используется во время компиляции, а также во время выполнения разными способами. Он используется:
- для написания тестовых сценариев, для тестирования на различные условия, такие как утечка памяти, для обеспечения функциональности программного обеспечения после изменений, для проверок после сборки и тестов покрытия,
- для написания макросов, а так же для записи макросов,
- для реализации логики приложений стандартных пакетов,
- для реализации вспомогательных инструментов, таких как менеджер дополнений,
- для реализации целых рабочих столов, таких как Draft и Arch,
- для динамической загрузки пакетов,
- для реализации правил проектирования (knowledge engineering),
- для создания необычных интернет-взаимодействий, таких как рабочие группы и PDM
В Linux Python обычно уже установлен в вашем дистрибутиве. Для Windows вы можете получить предварительно скомпилированный двоичный файл из Python.org или использовать ActiveState Python, однако получить отладочные библиотеки из последнего сложнее.
Python был выбран в качестве языка сценариев для FreeCAD по разным причинам:
- Он более объектно-ориентирован, чем Perl и Tcl.
- Код более понятен, чем Perl и Visual Basic.
- Его проще внедрить в другое приложение, в отличие, скажем, от Java.
Таким образом, Python хорошо документирован, и его легко встраивать и расширять в приложение на C++. Он также хорошо протестирован и пользуется сильной поддержкой сообщества с открытым исходным кодом. Узнайте больше о Python и просмотрите официальную документацию по адресу Python.org.
Boost
Версия: 1.33 или выше
Лицензия: Boost Software License - Версия 1.0
Библиотеки Boost C++-это коллекции рецензируемых библиотек с открытым исходным кодом, которые расширяют функциональность C++. Они предназначены для широкого использования в широком спектре приложений и хорошо работают со стандартной библиотекой C++. Лицензия Boost предназначена для поддержки их использования как в проектах с открытым исходным кодом, так и в проектах с закрытым исходным кодом.
Из-за их популярности и стабильности многие библиотеки Boost были приняты для включения в стандарт C++11, и еще больше планируется включить в последующие стандарты C++.
Для обеспечения эффективности и гибкости Boost широко использует шаблоны. Boost был источником широкой работы и исследований в области общего программирования и метапрограммирования на C++. Узнайте больше о Boost, посетив Boost homepage.
Технология OpenCascade
Версия: 6.7 и выше
Лицензия: версия 6.7.0 и более поздние версии регулируются GNU Lesser General Public License (LGPL) version 2.1 with additional exception. В более ранних версиях используется Open CASCADE Technology Public License.
Технология OpenCascade (OCCT) - это полнофункциональное ядро CAD профессионального уровня. Он был разработан в 1993 году и первоначально назывался CAS.CADE компанией Matra Datavision во Франции для квантовых приложений Strim (Styler) и Евклида. В 1999 году он был выпущен как программное обеспечение с открытым исходным кодом, и с тех пор он называется OpenCascade.
OCCT - это большой и сложный набор библиотек C++, которые обеспечивают функциональность, необходимую для приложения CAD:
- Полное ядро геометрии, совместимое с STEP.
- Топологическая модель данных и необходимые функции для работы с фигурами (вырезание, плавление, выдавливание и многие другие).
- Стандартные процессоры импорта и экспорта для таких файлов, как STEP, IGES, VRML.
- Просмотрщик 2D и 3D с поддержкой выбора.
- Структура данных документа и проекта с поддержкой сохранения и восстановления, внешнего связывания документов, пересчета истории проектирования (параметрическое моделирование) и возможностью динамической загрузки новых типов данных в виде пакета расширений.
В разных дистрибутивах Linux существуют две основные версии OpenCascade. Один из них распространяется оригинальными разработчиками; он известен как OCCT и упакован под именами occ
или occt
. Другая версия - "издание сообщества", сокращенное OCE, и обычно встречается с именем oce
. FreeCAD может компилироваться с любой версией, однако с 2016 года FreeCAD рекомендует компилироваться с официальными библиотеками OCCT, а не с официальными библиотеками OCE. Причина в том, что в издании сообщества отсутствуют важные исправления ошибок и функции, которые улучшают использование FreeCAD.
Чтобы узнать больше, посетите OpenCASCADE website.
Qt
Версия: 4.1 или выше
Лицензия: GPL v2.0/v3.0 или коммерческая; с версии 4.5, также LPGL v2.1.
Qt-один из самых популярных наборов инструментов графического пользовательского интерфейса (GUI), доступных в мире с открытым исходным кодом. FreeCAD использует этот инструментарий для рисования интерфейса программы. Для этого приложение Qt Designer очень полезно, так как оно позволяет разработчикам быстро рисовать диалоговые окна, экспортировать их в виде файловых ресурсов XML, а затем загружать эти интерфейсы во время выполнения.
Дополнительная информация о библиотеках Qt и их программной документации доступна по адресу Qt Documentation.
Shiboken2 and Pyside2
Shiboken2 и Pyside2
Shiboken-это генератор привязки Python, который Qt для Python использует для создания модуля PySide, другими словами, это система, используемая для предоставления API Qt C++ языку Python.
Оригинальные пакеты Shiboken и PySide предназначены для использования с Python 2 и Qt4; поскольку эти две версии считаются устаревшими в 2019 году, пожалуйста, используйте Shiboken2 и PySide2, которые работают с Python 3 и Qt5. Новая разработка FreeCAD выполняется с Python 3 и Qt5, поэтому совместимость с Python 2 и Qt4 не гарантируется после FreeCAD 0.18.
Подробнее о Shiboken и Pyside читайте на Qt для Python.
Coin3D
Версия: 3.0 и выше
Лицензия: 3-пунктовая BSD лицензия
Coin3D-это высокоуровневая библиотека 3D-графики с интерфейсом прикладного программирования на C++. Он использует структуры данных scenegraph для визуализации графики в реальном времени, подходящей для всех видов научных и инженерных приложений визуализации.
Coin3D построен на базе стандартной отраслевой библиотеки рендеринга в немедленном режиме OpenGL и добавляет абстракции для примитивов более высокого уровня, обеспечивает интерактивность 3D и содержит множество сложных функций оптимизации для быстрого рендеринга, которые понятны для прикладного программиста.
Coin3D совместим с API SGI Open Inventor 2.1. Этот API стал фактически стандартным графическим интерфейсом для 3D-визуализации в научном и инженерном сообществе. Он доказал свою ценность с 2000 года в качестве основного строительного блока в тысячах инженерных приложений по всему миру.
Coin3D (Open Inventor) используется в качестве 3D-средства просмотра в FreeCAD, поскольку средство просмотра OpenCascade (AIS и Graphics3D) имеет ограничения и узкие места в производительности, особенно при крупномасштабной инженерной визуализации; другие вещи, такие как текстуры или объемный рендеринг, не полностью поддерживаются средством просмотра OpenCascade.
Coin3D переносим на широкий спектр платформ: операционные системы UNIX, Linux, BSD, macOS X и Microsoft Windows. Чтобы узнать больше об этой библиотеке, посетите домашнюю страницу Coin3D.
SoQt (устарело)
Версия: 1.2.0 или выше
Лицензия: 3-пунктовая BSD лицензия
SoQt-это привязка Coin3D (Open Inventor) к инструментарию Qt GUI.
SoQt больше не используется в FreeCAD, он был заменен на Quarter, который является более поздней привязкой Qt.
Quarter
Quarter
Версия: 1.0 или выше
Лицензия: 3-пунктовая BSD лицензия
Quarter-это более новая привязка Coin3D к инструментарию Qt. Его версия включена в исходный код FreeCAD, поэтому она компилируется вместе с ним.
Pivy
Версия: 0.6.3 или выше
Лицензия: 3-пунктовая BSD лицензия
Pivy - это библиотека, является оберткой для библиотеки Coin3d при использовании её в Python. Она не нужна при сборке FreeCAD или для его запуска, но она необходима в качестве runtime зависимости верстака Draft и других верстаков, которые используют его внутри, например Arch и BIM.
Если вы не собираетесь использовать эти верстаки, вам не понадобится Pivy.
Ply
Версия: 3.11 или выше
Лицензия: 3-пунктовая BSD лицензия
Ply-это синтаксический анализатор Python-Lex-Yacc. Он используется в качестве runtime зависимости верстака OpenSCAD. Если вы не используете данный верстак, вам может не понадобиться этот пакет.
Для подробной информации см. Ply homepage
Xerces-C++
Версия: 3.0 или выше
Лицензия: Apache Software License Версия 2.0
Xerces-C++ - это проверяющий синтаксический анализатор XML, написанный на переносимом подмножестве C++. Xerces-C++ позволяет легко предоставить вашему приложению возможность чтения и записи XML-данных. Общая библиотека предназначена для анализа, создания, обработки и проверки XML - документов. Xerces-C++ соответствует рекомендациям XML 1.0 и соответствующим стандартам.
Анализатор используется для сохранения и восстановления параметров в FreeCAD. Для получения дополнительной информации см. Xerces-C++ homepage.
Eigen3
Версия: 3.0 или выше
Лицензия: Начиная с версии 3.1.1, она лицензируется в соответствии с Mozilla Public License 2.0. Более ранние версии были лицензированы в соответствии с GNU Lesser General Public License 3.
Eigen-это библиотека моделей C++ для линейной алгебры: матрицы, векторы, численные решатели и связанные с ними алгоритмы.
Если вы просто хотите использовать Eigen, вы можете сразу же использовать файлы заголовков. Нет двоичной библиотеки, на которую можно было бы ссылаться, и нет настроенного файла заголовка. Eigen-это чистая библиотека шаблонов, определенная в заголовках.
Eigen используется в FreeCAD для многих векторных операций в 3D-пространстве. Чтобы узнать больше, посетите Eigen homepage.
Zipios++
Версия: 0.1.5 или выше
Лицензия: GNU Lesser General Public License 2.1
Zipios++ - это библиотека C++ для чтения и записи файлов .zip
. Доступ к отдельным записям обеспечивается с помощью стандартных потоков ввода-вывода C++. Простая виртуальная файловая система, доступная только для чтения, которая монтирует обычные каталоги и .zip
файлы также предоставляются. Структура и общедоступный интерфейс Zipios++ в значительной степени основаны на пакете Java java.util.zip
.
Собственный формат файла FreeCAD .FCstd
на самом деле является .zip
файл, в котором хранятся и сжимаются другие типы данных внутри него, такие как файлы BREP и XML. Поэтому Zipios++ используется для сохранения и открытия сжатых архивов, включая файлы FreeCAD.
Копия Zipios++ включена в исходный код FreeCAD, поэтому она компилируется вместе с ним. Если вы хотите использовать внешнюю библиотеку Zipios++, предоставляемую вашей операционной системой, вы можете установить -DFREECAD_USE_EXTERNAL_ZIPIOS=ON
с помощью cmake
.
Zipios++ использует библиотеку Zlib для выполнения фактической распаковки файлов.
Zlib
Версия: 1.0 или выше
Лицензия: zlib лицензия
Zlib разработан как бесплатная универсальная библиотека сжатия данных без потерь для использования на любом компьютерном оборудовании и операционной системе. Он реализует алгоритм сжатия DEFLATE
, обычно используемый в .zip
и .gzip
файлы.
Копия этой библиотеки включена в исходный код FreeCAD, поэтому она компилируется вместе с ней.
libarea
Версия: 0.0.20140514-1 или выше
Лицензия: 3-пунктовая BSD лицензия
Libarea-это библиотека программного обеспечения для вычисления профилей и карманных операций, которые используются в программном обеспечении для автоматизированного производства (CAM). Он был создан Дэном Хиксом для его проекта HeeksCNC.
Копия библиотеки включена в исходный код верстака Path, поэтому она компилируется вместе с ним.
LibPack
LibPack
LibPack - это удобный пакет с собранными вместе зависимостями сборки FreeCAD. Это необходимо только в том случае, если вы компилируете FreeCAD в Windows с Visual Studio 2015 и выше. Вы можете найти последнюю версию LibPack на releases page.
Если вы работаете под Linux, вам не нужен пакет LibPack, так как вы можете получить зависимости из репозиториев вашего дистрибутива, как это указано на странице компиляции в Linux.
FreeCAD 12.1.2
Смотрите на форуме: Новые libpacks для Windows с Qt5.12, OCC7.3 и Python 3.6 от apeltauer
Он включает, среди прочего: Boost 1.67, Coin3D 4.0.0 a, Eigen3, Open CASCADE Technology 7.3.0, Python 3.6.8, PySide2, Qt 5.12.1, Salome SMESH, Shiboken2, vtk7, Xerces-C, Zipios++, zlib 1.2.11
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Tool Page
Страница Инструментов
В процессе разработки серьезного програмного обеспечения, вам нужны инструменты. Вот список инструментов, которые мы использовали для разработки FreeCAD:
Platform independent tools
Qt-Toolkit
Платформо независимые инструменты
Qt-Toolkit
Инструментарий Qt настоящее произведение искуссва, платформа независомый инструмент для проектирования пользовательского интерфейса. Он содержится в LibPack FreeCAD, а также его можно скачать с Qt project.
Inkscape
InkScape
Отличная программа для работы с векторной графикой. Соответствует стандарту SVG и используется для создания Иконок и Изображений. Установить можно с сайта www.inkscape.org.
Doxygen
Doxygen
Отличный и стабильный инструмент для создания документации к исходному коду из .h и .cpp файлов.
Gimp
Gimp
Не могу много сказать о GNU программе управления изображениями (Gnu Image Manipulation Program). Кроме того что он может работать с .xpm файлами, являющихся очень удобным способом для обработки иконок в QT программах. XPM основывается на C-коде, который может быть скомпилирован в программе.
Получить GIMP можно здесь: www.gimp.org
Gitkraken
This is a proprietary git GUI that is very helpful to learn how git works if you're interested in wanting to contribute to FreeCAD. Relevant pages to research:
OBS Studio
Free and open source software for video recording and live streaming. More details on official website: obsproject.com
OpenCamLib
OpenCamLib (OCL) is an open source library aiming to provide computer aided manufacturing (CAM) algorithms. FreeCAD uses OCL in the experimental 3D surface path operations and other experimental features.
StarUML
StarUML
полнофункциональная Open Source UML программа. Она обладает множеством особенностей , главная из них, включенный механизм обратной разработки C++ исходного кода....
скачать можно здесь: staruml.sourceforge.net
Инструменты для Windows
Visual Studio Community
Visual Studio 8 Express
Хотя VC8 C++ для разработки не тог чтобы шаг вперед, поскольку VisualStudio 6 (ИМХО большой шаг назад), это бесплатная система разработки на Windows. Для родных Win32 приложений вам надо скачать PlatformSDK от M$.
Так как Express версию, найти трудно. Но вы можете попытаться поискать по этой ссылке
CamStudio
CamStudio
Это инструмент с открытым исходным кодом для щаписи Screencasts (веб-трансляций). Это очень хороший инструмент для создания учебников, записаных им. Это не так скучно, как записывать документацию.
Смотри camstudio.org для подробностей.
Инструменты для Linux
В разработке
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
See Release notes 0.20 for more information. This page has not yet been updated accordingly.
Overview
Обзор
На этой странице показаны различные способы запуска FreeCAD и наиболее важные особенности конфигурации.
Запуск FreeCAD из командной строки
FreeCAD может быть запущен, как правило, двойным щелчком по иконке на рабочем столе или выбором в стартовом меню, его также можно запустить напрямую из командной строки. Это позволяет вам изменять при запуске некоторые параметры по умолчанию.
Using command line options without a command line shell
Использование опций командной строки без оболочки командной строки
- В Ubuntu Вы можете создать иконку на десктопе (это будет файл формата XDG с расширением .desktop) и редактировать её параметры. Добавьте опции командной строки, разделённые пробелами, после имени программы в поле "Command".
- В Windows создайте ссылку и редактируйте её параметры. Добавьте разделённые пробелами опции командной строки в поле "Target".
Параметры командной строки
Параметры командной строки часто меняются. Следовательно, будет отличной идей проверить текущие опции, введя:
FreeCAD --help
Из появившегося ответа вы можете прочесть назначение параметров:
Usage: FreeCAD [options] File1 File2 ... Allowed options: Generic options: -v [ --version ] Prints version string -h [ --help ] Prints help message -c [ --console ] Starts in console mode --response-file arg Can be specified with '@name', too --dump-config Dumps configuration --get-config arg Prints the value of the requested configuration key Configuration: -l [ --write-log ] Writes a log file to: /home/username/.FreeCAD/FreeCAD.log --log-file arg Unlike --write-log this allows logging to an arbitrary file -u [ --user-cfg ] arg User config file to load/save user settings -s [ --system-cfg ] arg System config file to load/save system settings -t [ --run-test ] arg Test case - or 0 for all -M [ --module-path ] arg Additional module paths -P [ --python-path ] arg Additional python paths --single-instance Allow to run a single instance of the application
In the following table, selected options are described in more detail:
Long option | Corresponding config var name | Synopsis |
---|---|---|
--user-cfg <filename> |
UserParameter | Filename or relative path that ends with a filename. Defaults to user.cfg .
|
--module-path <dir> |
Prepends to AdditionalModulePaths | Directory that contains modules. This option can be given repeatedly to specify multiple directories. |
--get-config <config-var-name> |
most | Outputs the requested value in a popup dialog. Exits upon confirmation with OK. Cannot be used repeatedly. If an unknown/illegal variable name is used, the response is empty. The --console flag is not honored.
|
Options can written in two forms: --long-option arg
and --long-option=arg
.
Файлы конфигурации и ответов(response)
FreeCAD может считать некоторые параметры из конфигурационного файла. Этот файл должен находится в пути bin и должен называться FreeCAD.cfg. Помните, у параметров командной строки приоритет над конфигурационным файлом!
Некоторые операционные системы имеют очень лимитированную по символам командную строку. Чтобы обойти это ограничение используют обычно файлы ответов. Файл ответов - это просто конфигурационный файл, который использует синтаксис командной строки. Если в командной строке указан файл ответов, он загружается и обрабатывается как дополнение к командной строке:
FreeCAD @ResponseFile.txt
или:
FreeCAD --response-file=ResponseFile.txt
или:
FreeCAD --response-file ResponseFile.txt
Скрытые опции
Существует несколько параметров не видных пользователю. Эти параметры такие как X-Window параметры, анализируются оконной системой:
- -display display, устанавливает значение X дисплея (по умолчанию это $DISPLAY).
- -geometry geometry, устанавливает клиент геометрии первое окно что отображается.
- -fn или -font font, определяет шрифт приложения. Шрифт должен быть указан используя X логическо описание шрифта.
- -bg или -background color, устанавливает цвет фона по умолчанию и палитру приложения (рассчитываются темные и светлые оттенки).
- -fg или -foreground color, устанавливает цвет по умолчанию переднего плана.
- -btn или -button color, устанавливает цвет по умолчанию для кнопок.
- -name name, устанавливает имя приложения.
- -title title, устанавливает заголовок приложения.
- -visual TrueColor, заставляет приложение использовать TrueColor визуальное отображение на 8-битном дисплее.
- -ncols count, граничивает число цветов выделенных в цветовой куб на 8-битном дисплее, если приложение использует QApplication::ManyColor цветовую спецификацию. Если количество 216 то используется цветовой куб 6x6x6 (т.е. 6 уровней красного, 6 зеленого, и 6 синего); для остальных значений, используется куб пропорциональный 2x3x1.
- -cmap, вызывает приложение для установки вашей карты цветов на 8-битном дисплее.
Запуск FreeCAD без Графического Интерфейса
FreeCAD обычно компилируется в два исполняемых файла: с графическим интерфейсом, FreeCAD, и только с командной строкой, FreeCADCmd. FreeCAD может запускаться в консольном режиме с помощью ключа "-c", для FreeCADCmd это поведение по умолчанию:
FreeCAD --console
в командной строке. В консольном режиме, не будет отображаться пользовательский интерфейс, а вам будет предоставлена строка интерпретатора python. С помощью командной строки python, вы обладаете той же функциональностью, что и интерпретатором python, запущенном внутри FreeCAD GUI, и обладаете доступом ко всем модулям и плагинам FreeCAD, исключая модуль FreeCADGui. Имейте в виду, что модули, зависящие от FreeCADGui, также могут быть недоступны.
To read more about console or headless mode, refer to Headless FreeCAD.
Пример выполнения файла
Выполнить файл | Система | Конфигурация командной строки |
---|---|---|
Module, cfg | Windows | "C:\Program Files\FreeCAD\bin\FreeCAD.exe" -M "C:\FreeCAD\Mod\Draft" -u "C:\FreeCAD\Config\user.cfg" -s "C:\FreeCAD\Config\system.cfg" |
Linux | todo | |
.FCMacro or .py | Windows | "C:\Program Files\FreeCAD\bin\FreeCAD.exe" "C:\Users\userName\AppData\Roaming\FreeCAD\Mod\WorkFeature\start_WF.FCMacro" |
Linux | todo | |
Как установить макрос для автоматического запуска при старте FreeCAD | Windows / Linux / Mac | Смотри как установить макрос для автоматического запуская во время старта FreeCAD, на странице Макрос при старте. |
See Macro at Startup on how to set up a macro to automatically run at FreeCAD startup.
Переменные Среды Окружения
FreeCAD supports the following environment variables, which can be used to configure directories: introduced in version 0.19
Environment variable | Corresponding config var name | Synopsis |
---|---|---|
FREECAD_USER_HOME |
UserHomePath | FreeCAD's "base" directory for keeping local user data. |
FREECAD_USER_DATA |
UserAppData | If not set, defaults to FREECAD_USER_HOME/.FreeCAD , but only if FREECAD_USER_HOME is set.
|
FREECAD_USER_TEMP |
AppTempPath | If not set, defaults to FREECAD_USER_HOME/temp , but only if FREECAD_USER_HOME is set.
|
If the specified path does not exist, the setting is ignored!
The above environment variables are meant to be used to realize a portable FreeCAD environment. For an example how environment variables can be used from the command line on Linux refer to the notes for Linux users on the downloads page.
HOME
FreeCAD uses Qt, which does honor the HOME
environmental variable. Thus, setting HOME
can be used to specify the base directory of Qt-related configuration files (.config/FreeCAD/FreeCAD.conf
).
FreeCad itself does not honor the HOME
environmental variable (because it determines the user's home directory from a lower-level system API). Use FREECAD_USER_HOME
for this pupose.
TMPDIR
The default temporary directory is /tmp/. The TMPDIR
environmental variable can be used to override the default. (Editor: precedence?).
Libraries
Некоторые библиотеки нуждаются в вызове системных переменных. Иногда когда возникают проблемы с установкой FreeCAD , потому что некоторые переменные отсутствуют или установлены неправильно. Таким образом, некоторые важные переменные дублируются в Config и сохраняются в журнале(log file).
Python
- PYTHONPATH
- PYTHONHOME
- TCL_LIBRARY
- TCLLIBPATH
OpenCascade
- CSF_MDTVFontDirectory
- CSF_MDTVTexturesDirectory
- CSF_UnitsDefinition
- CSF_UnitsLexicon
- CSF_StandardDefaults
- CSF_PluginDefaults
- CSF_LANGUAGE
- CSF_SHMessage
- CSF_XCAFDefaults
- CSF_GraphicShr
- CSF_IGESDefaults
- CSF_STEPDefaults
Конфигурационные параметры
При каждом запуске FreeCAD проверяет своё окружение и параметры командной строки. Он выстраивает конфигурационный набор который хранит суть о процессе выполнения программы (runtime information). Эта информация позже используется для определения места где сохранены пользовательские данные или файлы логов. Это также важно для анализа после крушения программы. Поэтому она сохраняется в лог файле (журнале).
Пользовательская информация
Имя конф. переменной | Краткий обзор | Пример для M$ | Пример для Posix (Linux) |
---|---|---|---|
UserAppData | Путь где FreeCAD хранит пользовательские данные программы. | C:\Documents and Settings\username\AppData\FreeCAD Short path : %APPDATA%\FreeCAD |
/home/username/.FreeCAD Short path : ~/.FreeCAD |
UserParameter | Файл где FreeCAD хранит пользовательские данные программы. | C:\Documents and Settings\username\AppData\FreeCAD\user.cfg Short path : %APPDATA%\FreeCAD\user.cfg |
/home/username/.FreeCAD/user.cfg Short path : ~/.FreeCAD/user.cfg |
SystemParameter | Файл где FreeCAD хранит данные программы. | C:\Documents and Settings\username\AppData\FreeCAD\system.cfg Short path : %APPDATA%\FreeCAD\system.cfg |
/home/username/.FreeCAD/system.cfg Short path : ~/.FreeCAD/system.cfg |
UserHomePath | Домашняя папка текущего пользователя. | C:\Documents and Settings\username Short path : %USERPROFILE% |
/home/username Short path : ~ |
Note: For Linux distributions, an additional configuration file that relates to Qt may exist at path /home/username/.config/FreeCAD/FreeCAD.conf.
Аргументы командной строки
Имя конф. переменной | Краткий обзор | Пример |
---|---|---|
LoggingFile | 1 если ведение журнала включено | 1 |
LoggingFileName | Имя файла куда помещен журнал | C:\Documents and Settings\username\AppData\FreeCAD\FreeCAD.log |
RunMode | Это показывает, как будет работать основной цикл. "Script" означает что данный сценарий вызывается, а затем выходит. "Cmd" запускает командную строку интепритатора. "Internal" запускает внутренний сценарий. "Gui" входит в цикл Gui событий. "Module" загружается как python модуль. | "Cmd" |
FileName | Значение зависит от RunMode | |
ScriptFileName | Значение зависит от RunMode | |
Verbose | Уровень детализации сообщений в FreeCAD | "" or "strict" |
OpenFileCount | Содержит количество файлов, открытых через аргументы командной строки | "12" |
AdditionalModulePaths | Содержит дополнительные Пути к модулям заданных в командной строке | "extraModules/" |
Связанные с системой
Имя конф. переменной | Краткий обзор | Пример для M$ | Пример для Posix (Linux) |
---|---|---|---|
AppHomePath | Путь куда установлен FreeCAD | c:/Progam Files/FreeCAD_0.7 | /user/local/FreeCAD_0.7 |
PythonSearchPath | Содержит список путей для поиска модулей python. Начальная конфигурация может изменятся во время выполнения программы |
Информация связанная со Сборкой
Приведенная ниже таблица показывает доступную информацию о версии сборки. Большая часть её взята из хранилища Subversion. Этот материал нужен, чтобы точно восстановить версию!
Имя конф. переменной | Краткий обзор | Пример |
---|---|---|
BuildVersionMajor | Основной номер версии Сборки. Задан в src/Build/Version.h.in | 0 |
BuildVersionMinor | Малый номер версии Сборки. Задан в src/Build/Version.h.in | 7 |
BuildRevision | Номер ревизии исходных кодов в хранилище SVN в Build. Генерируется SVN | 356 |
BuildRevisionRange | Диапазон различных изменений | 123-356 |
BuildRepositoryURL | URL Хранилища | https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk/src |
BuildRevisionDate | Дата упомянутой ревизии | 2007/02/03 22:21:18 |
BuildScrClean | Показывает, были ли исходные коды изменены после синхронизации | Src modified |
BuildScrMixed | Src not mixed |
Связанная с Брендированием
Это конфигурационные записи связанные с механизмом брендинга FreeCAD. Смотри Брендинг для более подробной информации.
Имя конф. переменной | Краткий обзор | Пример |
---|---|---|
ExeName | Название собранного исполняемого файла. Может запускаться из FreeCAD если используются различные main.cpp. | FreeCAD.exe |
ExeVersion | Переопределённая версия, показываемая во время запуска | V0.7 |
AppIcon | Иконка исполняемого файла, показывается в главном окне приложения. | "FCIcon" |
ConsoleBanner | Баннер, выводимый в консольном режиме | |
SplashPicture | Название изображения используемого в качестве заставки | "FreeCADSplasher" |
SplashAlignment | Alignment of the Text in the Splash dialog | "Bottom" or "Left" |
SplashTextColor | Выравнивание текста в окне заставки | "#000000" |
StartWorkbench | Название верстака, автоматически открывающегося при запуске приложения | "Part design" |
HiddenDockWindow | Список панелей (разделенный запятой), которые будут отключены | "Property editor" |
Querying the configuration
From FreeCAD's Python console
Entries of the configuration set can be queried with the config var name (see tables above) from the Python console. For example:
>>> FreeCAD.ConfigGet("ExeVersion") '0.19'
If the name is not found, an empty string is returned.
Из командной строки
Use the --get-config <config-var-name>
option to query a single name. Not all names are supported. For example:
FreeCAD --get-config ExeVersion
Use the --dump-config
option to get a list of names and their values. Not all names are supported.
Из консоли FreeCAD
Start FreeCAD in console mode with --console
and query with Python code. For example:
$ FreeCAD --console [FreeCAD Console mode <Use Ctrl-D (i.e. EOF) to exit.>] >>> FreeCAD.ConfigGet("ExeVersion") '0.19' >>> exit()
For Linux (bash shell) you can modify the following command line to suit your needs:
$ FreeCAD --console <<EOF print( "FREECAD_USER_HOME: " + ( "not set" if ( os.environ.get('FREECAD_USER_HOME') is None ) else os.environ.get('FREECAD_USER_HOME') ) ) print( "UserHomePath: " + FreeCAD.ConfigGet("UserHomePath") ) exit() EOF
Starting FreeCAD from the desktop
Linux: Creating an additional start option
The following assumes that your desktop is configured such that you can launch FreeCAD from it. Depending on your Linux distribution and desktop environment, you may have to adapt the following steps:
- Copy the freedesktop entry file for FreeCAD from /usr/share/applications/freecad.desktop to ~/.local/share/applications.
- Change the name from freecad.desktop to something else (e.g. MyFreeCADConfig.desktop).
- Open the file with a text editor and change how FreeCAD is invoked by modifying the line starting with
Exec
. - As a result, an additional entry in your start menu/application launcher is available. This way, you can have multiple FreeCAD entries with various launch options.
Starting FreeCAD from a portable USB medium
Windows
Put the FreeCAD executable, FreeCAD.exe, on the USB medium. Create a batch file, FreeCAD.bat, and put it into the same directory as FreeCAD.exe. Inside the batch file write:
set CURRENTDIR=%cd%
set FREECAD_USER_HOME=%CURRENTDIR%
start FreeCAD.exe -u FreeCAD/user.cfg -s FreeCAD/system.cfg --write-log
Or with FREECAD_USER_DATA
(see):
set CURRENTDIR="%cd%"
set FREECAD_USER_DATA=%CURRENTDIR%/..
start FreeCAD.exe -u %FREECAD_USER_DATA%/user.cfg -s %FREECAD_USER_DATA%/system.cfg
With the batch in the root of the USB medium:
set CURRENTDIR=%cd%
set FREECAD_USER_DATA=%CURRENTDIR%FreeCAD\
start %cd%FreeCAD\bin\FreeCAD.exe -u %FREECAD_USER_DATA%user.cfg -s %FREECAD_USER_DATA%system.cfg
Now double-click the batch file to start FreeCAD. (see)
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Введение
Инструмент сборки FreeCAD или fcbt это python сценарий расположеный в
trunc/src/Tools/fcbt.py
Он может быть использован для упрощения некоторых часто встречающихся задач при сборке, распространении и расширении FreeCAD.
Использование
В корректно установленом Python интепретаторе , может быть вызвана команда fcbt
python fbct.py
Она отобразит меню, в котором вы можете выбрать задачу которую необходимо использовать для:
FreeCAD Build Tool
Usage:
fcbt <command name> [command parameter]
possible commands are:
- DistSrc (DS) Build a source Distr. of the current source tree
- DistBin (DB) Build a binary Distr. of the current source tree
- DistSetup (DI) Build a Setup Distr. of the current source tree
- DistSetup (DUI) Build a User Setup Distr. of the current source tree
- DistAll (DA) Run all three above modules
- NextBuildNumber (NBN) Increase the Build Number of this Version
- CreateModule (CM) Insert a new FreeCAD Module (Workbench) in the module directory
For help on the modules type:
fcbt <command name> ?
В ответ на запрос, введите абревеатуру той команды которую вы хотите вызвать. Например введите "CM" для создания модуля.
DistSrc
Команда "DS" создать пакет исходников текущего дерева исходных текстов.
DistBin
Команда "DB" создать бинарный пакет текущего дерева исходных текстов.
DistSetup
Команда "DI" создать самораспаковывающийся пакет текущего дерева исходных текстов.
DistSetup
Команда "DUI" создает пакет с пользовательскими настроками текущего дерева исходных текстов.
DistAll
Команда "DA" выполняет последовательно "DS", "DB" и "DI" .
NextBuildNumber
"NBN" команда увеличивает номер сборки создает новую версию FreeCAD.
Создать Модуль
"CM" команда создает модуль приложение.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Вступление
В данном материале изложена информация о том, как создать новый верстак для FreeCAD и добавить его в интерфейс. Верстаки являются контейнерами для команд FreeCAD. Они могут быть написаны на Python или на C++ или в сочетании того и другого, что имеет преимущество в сочетании скорости C++ и гибкости Python. Однако во всех случаях ваш верстак будет запущен через два специальных Python файла. Это касается, как "внутренних" верстаков, входящих в дистрибутив FreeCAD, так и "внешних", распространяемых через менеджер дополнений или устанавливаемыми вручную путем загрузки из какого-либо онлайн-репозитория. Внутренние верстаки могут быть написаны либо на C++, либо на Python, либо на их комбинации, в то время как внешние верстаки могут быть написаны, только на Python.
Структура Верстака
You need a folder, with any name you like, placed in the user Mod directory, with an Init.py
file, and, optionally an InitGui.py
file. The Init file is executed when FreeCAD starts, and the InitGui.py
file is executed immediately after, but only when FreeCAD starts in GUI mode. That's all it needs for FreeCAD to find your workbench at startup and add it to its interface.
The user Mod directory is a sub-directory of the user application data directory (you can find the latter by typing App.getUserAppDataDir()
in the Python console):
- On Linux it is usually /home/<username>/.local/share/FreeCAD/Mod/ (version 0.20 and above) or /home/<username>/.FreeCAD/Mod/ (version 0.19 and below).
- On Windows it is %APPDATA%\FreeCAD\Mod\, which is usually C:\Users\<username>\Appdata\Roaming\FreeCAD\Mod\.
- On macOS it is usually /Users/<username>/Library/Application Support/FreeCAD/Mod/.
Mod папка должна выглядеть так:
/Mod/
+-- MyWorkbench/
+-- Init.py
+-- InitGui.py
Внутри этих файлов вы можете делать все, что захотите. Обычно они используются таким образом:
- В файл Init.py вы прописываете некоторые вещи, который используются даже тогда, когда FreeCAD работает в консольном режиме, например такие как: импортеры и экспортеры файлов.
- В файле InitGui.py вы инициализируете Верстак, который содержит имя, значок и ряд команд FreeCAD (см. Ниже). Этот python файл также должен иметь определенные функции: первая выполняется при загрузке FreeCAD (стараетесь сделать ее как можно меньше, чтобы не замедлять запуск FreeCAD), еще одну, которая выполняется при активации верстака (именно там выполняется большая часть работы), и третью, когда верстак деактивирован (чтобы при необходимости можно было освободить ненужные ресурсы).
The structure and file content for a workbench described here is the classic way of creating a new workbench. One can use a slight variation in the structure of files when making a new Python workbench, that alternative way is best described as a "namespaced workbench", opening up the possibility to use pip to install the workbench. Both structures work, so it is more a question of preference when creating a new workbench. The style and structure for workbenches presented here are available in the global namespace of FreeCAD, whereas for the alternative style and structure the workbench resides in a dedicated namespace. For further readings on the topic see Related.
Структура верстака на языке C++
Если вы собираетесь создать Верстак на python, вам не нужно проявлять особую осторожность, и вы можете просто разместить другие файлы python в папке с Init.py и InitGui.py. Однако при работе с C++ вам следует проявлять большую осторожность и начинать соблюдать одно фундаментальное правило FreeCAD: Разделение вашего рабочего стола между частью приложения (которая может работать в режиме консоли, без какого-либо элемента графического интерфейса) и частью графического интерфейса, которая будет загружена только при запуске FreeCAD с полной графической средой. Поэтому при создании верстака на C++ вы, скорее всего, будете использовать два модуля: модуль самого приложения и модуль графического интерфейса. Эти два модуля, конечно, должны быть вызываемы из python. Любой модуль FreeCAD (приложение или графический интерфейс) состоит, по крайней мере, из файла инициализации модуля. Это типичный AppMyModuleGui.cpp файл:
extern "C" {
void MyModuleGuiExport initMyModuleGui()
{
if (!Gui::Application::Instance) {
PyErr_SetString(PyExc_ImportError, "Cannot load Gui module in console application.");
return;
}
try {
// import other modules this one depends on
Base::Interpreter().runString("import PartGui");
// run some python code in the console
Base::Interpreter().runString("print('welcome to my module!')");
}
catch(const Base::Exception& e) {
PyErr_SetString(PyExc_ImportError, e.what());
return;
}
(void) Py_InitModule("MyModuleGui", MyModuleGui_Import_methods); /* mod name, table ptr */
Base::Console().Log("Loading GUI of MyModule... done\n");
// initializes the FreeCAD commands (in another cpp file)
CreateMyModuleCommands();
// initializes workbench and object definitions
MyModuleGui::Workbench::init();
MyModuleGui::ViewProviderSomeCustomObject::init();
// add resources and reloads the translators
loadMyModuleResource();
}
}
Файл Init.py
"""FreeCAD init script of XXX module"""
# ***************************************************************************
# * Copyright (c) 2015 John Doe john@doe.com *
# * *
# * This file is part of the FreeCAD CAx development system. *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU Lesser General Public License (LGPL) *
# * as published by the Free Software Foundation; either version 2 of *
# * the License, or (at your option) any later version. *
# * for detail see the LICENSE text file. *
# * *
# * FreeCAD is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU Lesser General Public License for more details. *
# * *
# * You should have received a copy of the GNU Library General Public *
# * License along with FreeCAD; if not, write to the Free Software *
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
# * USA *
# * *
# ***************************************************************************/
FreeCAD.addImportType("My own format (*.own)", "importOwn")
FreeCAD.addExportType("My own format (*.own)", "exportOwn")
print("I am executing some stuff here when FreeCAD starts!")
Вы можете выбрать любую понравившуюся лицензию для вашего верстака, но имейте в виду, что если вы хотите, чтобы ваш верстак в какой-то момент был интегрирован в исходный код FreeCAD и распространялся вместе с ним, он должен быть LGPL2 +, как в примере выше. Смотрите лицензирование.
The FreeCAD.addImportType()
and addEXportType()
functions allow you to give the name and extension of a file type, and a Python module responsible for its import. In the example above, an importOwn.py
module will handle .own
files. See Code snippets for more examples.
Python верстаки
InitGui.py файл:
class MyWorkbench (Workbench):
MenuText = "My Workbench"
ToolTip = "A description of my workbench"
Icon = """paste here the contents of a 16x16 xpm icon"""
def Initialize(self):
"""This function is executed when the workbench is first activated.
It is executed once in a FreeCAD session followed by the Activated function.
"""
import MyModuleA, MyModuleB # import here all the needed files that create your FreeCAD commands
self.list = ["MyCommand1", "MyCommand2"] # a list of command names created in the line above
self.appendToolbar("My Commands", self.list) # creates a new toolbar with your commands
self.appendMenu("My New Menu", self.list) # creates a new menu
self.appendMenu(["An existing Menu", "My submenu"], self.list) # appends a submenu to an existing menu
def Activated(self):
"""This function is executed whenever the workbench is activated"""
return
def Deactivated(self):
"""This function is executed whenever the workbench is deactivated"""
return
def ContextMenu(self, recipient):
"""This function is executed whenever the user right-clicks on screen"""
# "recipient" will be either "view" or "tree"
self.appendContextMenu("My commands", self.list) # add commands to the context menu
def GetClassName(self):
# This function is mandatory if this is a full Python workbench
# This is not a template, the returned string should be exactly "Gui::PythonWorkbench"
return "Gui::PythonWorkbench"
Gui.addWorkbench(MyWorkbench())
Кроме этого, вы можете делать все, что захотите: если хотите, вы могли бы поместить весь код своего верстака внутрь InitGui.py, но обычно удобнее размещать различные функции вашего верстака в отдельных файлах. Таким образом, эти файлы меньше по размеру и их легче читать. После чего вы можете импортировать эти файлы в InitGui.py файл. Также, вы можете упорядочить файлы, как пожелаете, хорошим примером является создавать по одному отдельному файлу для каждой добавляемой вами команды FreeCAD.
Раздел настроек верстака
Вы можете добавить страницу настроек для вашего Python верстака. Страницы настроек ищут значок с определенным именем в системе ресурсов Qt. Если вашего значка нет в системе ресурсов или у него неправильное имя, ваш значок не будет отображаться в окне настроек.
Добавление значка для вашего верстака:
- значок настроек должен иметь название "preferences-" + "modulename" + ".svg" (все в нижнем регистре)
- создайте файл qrc, содержащий все названия значков
- в главном каталоге *.py запустите pyside-rcc -o myResources.py myqrc.qrc
- в InitGui.py, добавьте импорт MyResource(.py)
- обновите свой репозиторий (git) с помощью myResources.py и myqrc.qrc
При добавлении или изменении значков, следует повторить вышеперечисленные шаги.
@kbwbe has created a nice script to compile resources for the A2Plus workbench. See below.
Adding your preference page(s):
- You need to compile the Qt designer plugin that allows you to add preference settings with Qt Designer
- Create a blank widget in Qt Designer (no buttons or anything)
- Design your preference page, any setting that must be saved (preferences) must be one of the Gui::Pref* widgets that were added by the plugin)
- In any of those, make sure you fill the PrefName (the name of your preference value) and PrefPath (ex: Mod/MyWorkbenchName), which will save your value under BaseApp/Preferences/Mod/MyWorkbenchName
- Save the ui file in your workbench, make sure it's handled by cmake
- In your workbench, for ex. inside the InitGui file, inside the Initialize method (but any other place works too), add: FreeCADGui.addPreferencePage("/path/to/myUiFile.ui","MyGroup"), "MyGroup" being one of the preferences groups on the left. FreeCAD will automatically look for a "preferences-mygroup.svg" file in its known locations (which you can extend with FreeCADGui.addIconPath())
- Make sure the addPreferencePage() method is called only once, otherwise your pref page will be added several times
Публикация и распространение
To distribute your Python workbench, you may either simply host the files in some location and instruct your users to download them and place them in their Mod directory manually, or you may host them in an online git repository (GitHub, GitLab, Framagit, and Debian Salsa are currently supported locations) and configure them for the Addon Manager to install. Instructions for inclusion on FreeCAD's official Addons list can be found on the FreeCAD Addons GitHub repository. To use the Addon Manager, a package.xml metadata file should be included, which instructs the Addon Manager how to find your workbench's icon, and allows display of a description, version number, etc. It can also be used to specify other workbenches or Python packages that your Workbench either depends on, is blocked by, or is intended to replace.
For a quick guide on how to create a basic package.xml file and add a workbench to the Addon Manager see: Add Workbench to Addon Manager.
Optionally, you can include a separate metadata file describing your Python dependencies. This may be either a file called metadata.txt describing your workbench's external dependencies (on either other Addons, Workbenches, or Python modules), or a requirements.txt describing your Python dependencies. Note that if using a requirements.txt file, only the names of the specified packages are used for dependency resolution: pip command options, include options and version information are not supported by the Addon Manager. Users may manually run the requirements file using pip if those features are required.
Формат metadata.txt файла представляет собой обычный текст с тремя опциональными строками:
workbenches=
pylibs=
optionalpylibs=
Each line should consist of a comma-separated list of items your Workbench depends on. Workbenches may be either an internal FreeCAD Workbench, e.g. "FEM", or an external Addon, for example "Curves". The required and optional Python libraries should be specified with their canonical Python names, such as you would use with pip install
. For example:
workbenches=FEM,Curves
pylibs=ezdxf
optionalpylibs=metadata,git
You may also include a script that is run when your package is uninstalled. This is a file called "uninstall.py" located at the top level of your Addon. It is executed when a user uninstalls your Addon using the Addon Manager. Use it to clean up anything your Addon may have done to the users system that should not persist when the Addon is gone (e.g. removing cache files, etc.).
To ensure that your addon is being read correctly by the Addon Manager, you can enable a "developer mode" in which the Addon Manager examines all available addons and ensures their metadata contains the required elements. To enable this mode select: Edit → Preferences... → Addon Manager → Addon manager options → Addon developer mode, see Preferences Editor.
C++ верстаки
If you are going to code your workbench in C++, you will probably want to code the workbench definition itself in C++ too (although it is not necessary: you could also code only the tools in C++, and leave the workbench definition in Python). In that case, the InitGui.py file becomes very simple: It might contain just one line:
import MyModuleGui
where MyModule is your complete C++ workbench, including the commands and workbench definition.
Coding C++ workbenches works in a pretty similar way. This is a typical Workbench.cpp file to include in the Gui part of your module:
namespace MyModuleGui {
class MyModuleGuiExport Workbench : public Gui::StdWorkbench
{
TYPESYSTEM_HEADER();
public:
Workbench();
virtual ~Workbench();
virtual void activated();
virtual void deactivated();
protected:
Gui::ToolBarItem* setupToolBars() const;
Gui::MenuItem* setupMenuBar() const;
};
}
Раздел настроек верстака
Вы также можете добавить страницу настроек для верстаков C++. Шаги аналогичны тем, что выполняются в Python.
Публикация и распространение
There are two options to distribute a C++ workbench, you can either host precompiled versions for the different operating systems yourself, or you can request for your code to be merged into the FreeCAD source code. As mentioned above this requires a LGPL2+ license, and you must first present your workbench to the community in the FreeCAD forum for review.
команды FreeCAD
FreeCAD commands are the basic building block of the FreeCAD interface. They can appear as a button on toolbars, and as a menu entry in menus. But it is the same command. A command is a simple Python class, that must contain a couple of predefined attributes and functions, that define the name of the command, its icon, and what to do when the command is activated.
Определение команд в Python
class My_Command_Class():
"""My new command"""
def GetResources(self):
return {"Pixmap" : "My_Command_Icon", # the name of a svg file available in the resources
"Accel" : "Shift+S", # a default shortcut (optional)
"MenuText": "My New Command",
"ToolTip" : "What my new command does"}
def Activated(self):
"""Do something here"""
return
def IsActive(self):
"""Here you can define if the command must be active or not (greyed) if certain conditions
are met or not. This function is optional."""
return True
FreeCADGui.addCommand("My_Command", My_Command_Class())
Определение команд в С++
Similarly, you can code your commands in C++, typically in a Commands.cpp file in your Gui module. This is a typical Commands.cpp file:
DEF_STD_CMD_A(CmdMyCommand);
CmdMyCommand::CmdMyCommand()
:Command("My_Command")
{
sAppModule = "MyModule";
sGroup = QT_TR_NOOP("MyModule");
sMenuText = QT_TR_NOOP("Runs my command...");
sToolTipText = QT_TR_NOOP("Describes what my command does");
sWhatsThis = QT_TR_NOOP("Describes what my command does");
sStatusTip = QT_TR_NOOP("Describes what my command does");
sPixmap = "some_svg_icon_from_my_resource";
}
void CmdMyCommand::activated(int iMsg)
{
openCommand("My Command");
doCommand(Doc,"print('Hello, world!')");
commitCommand();
updateActive();
}
bool CmdMyCommand::isActive(void)
{
if( getActiveGuiDocument() )
return true;
else
return false;
}
void CreateMyModuleCommands(void)
{
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
rcCmdMgr.addCommand(new CmdMyCommand());
}
"Компиляция" файлов ресурсов
compileA2pResources.py из верстака A2Plus:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#***************************************************************************
#* *
#* Copyright (c) 2019 kbwbe *
#* *
#* Portions of code based on hamish's assembly 2 *
#* *
#* This program is free software; you can redistribute it and/or modify *
#* it under the terms of the GNU Lesser General Public License (LGPL) *
#* as published by the Free Software Foundation; either version 2 of *
#* the License, or (at your option) any later version. *
#* for detail see the LICENSE text file. *
#* *
#* This program is distributed in the hope that it will be useful, *
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
#* GNU Library General Public License for more details. *
#* *
#* You should have received a copy of the GNU Library General Public *
#* License along with this program; if not, write to the Free Software *
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
#* USA *
#* *
#***************************************************************************
# This script compiles the A2plus icons for py2 and py3
# For Linux only
# Start this file in A2plus main directory
# Make sure pyside-rcc is installed
import os, glob
qrc_filename = 'temp.qrc'
if os.path.exists(qrc_filename):
os.remove(qrc_filename)
qrc = '''<RCC>
\t<qresource prefix="/">'''
for fn in glob.glob('./icons/*.svg'):
qrc = qrc + '\n\t\t<file>%s</file>' % fn
qrc = qrc + '''\n\t</qresource>
</RCC>'''
print(qrc)
f = open(qrc_filename,'w')
f.write(qrc)
f.close()
os.system(
'pyside-rcc -o a2p_Resources2.py {}'.format(qrc_filename))
os.system(
'pyside-rcc -py3 -o a2p_Resources3.py {}'.format(qrc_filename))
os.remove(qrc_filename)
Сопутствующая информация
- Translating an external workbench
- Forum discussion: Namespaced Workbenches
- freecad.workbench_starterkit
- 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
Певые испытания
Перед тем как пройти через боль от процесса отладки , используйте фреймворк для тестирования , чтобы проверить будут ли работать стандартные тесты должным образом. Если они не будут пройдены полностью, то возможно дело, в сбоях при установке программы.
Командная Строка
Отладка FreeCAD поддерживает несколько внутренних механизмов. Версия FreeCAD без графического режима предоставляет варианты поддержки отладки:
- -v
- С "v" опцией FreeCAD дает более подробный вывод
- -l
- С "l" опцией FreeCAD записывает дополнительную информацию в лог-файл.
These are the currently recognized options in FreeCAD 0.19:
Generic options:
-v [ --version ] Prints version string -h [ --help ] Prints help message -c [ --console ] Starts in console mode --response-file arg Can be specified with '@name', too --dump-config Dumps configuration --get-config arg Prints the value of the requested configuration key
Configuration:
-l [ --write-log ] Writes a log file to: $HOME/.local/share/FreeCAD/FreeCAD.log (Linux) $HOME/Library/Application\ Support/FreeCAD/FreeCAD.log (macOS) %APPDATA%\FreeCAD\FreeCAD.log (Windows) --log-file arg Unlike to --write-log this allows to log to an arbitrary file -u [ --user-cfg ] arg User config file to load/save user settings -s [ --system-cfg ] arg System config file to load/save system settings -t [ --run-test ] arg Test case - or 0 for all -M [ --module-path ] arg Additional module paths -P [ --python-path ] arg Additional Python paths --single-instance Allow to run a single instance of the application
Generating a Backtrace
If you are running a version of FreeCAD from the bleeding edge of the development curve, it may "crash". You can help solve such problems by providing the developers with a "backtrace". To do this, you need to be running a "debug build" of the software. "Debug build" is a parameter that is set at compile time, so you'll either need to compile FreeCAD yourself, or obtain a pre-compiled "debug" version.
Для Linux
Linux Отладка →
Необходимые условия:
- установлен программный пакет gdb
- отладочная сборка FreeCAD (в настоящее время доступна только сборка из исходного кода)
- модель FreeCAD, которая вызывает сбой
Steps: Enter the following in your terminal window:
Find FreeCAD binary on your system:
$ whereis freecad
freecad: /usr/local/freecad <--- for example
$ cd /usr/local/freecad/bin
$ gdb FreeCAD
GNUdebugger will output some initializing information. The (gdb) shows GNUDebugger is running in the terminal, now input:
(gdb) handle SIG33 noprint nostop
(gdb) run
FreeCAD will now start up. Perform the steps that cause FreeCAD to crash or freeze, then enter in the terminal window:
(gdb) bt
This will generate a lengthy listing of exactly what the program was doing when it crashed or froze. Include this with your problem report.
(gdb) bt full
Print the values of the local variables also. This can be combined with a number to limit the number of frames shown.
Для MacOS
macOS Debugging →
Prerequisites:
- software package lldb installed
- a debug build of FreeCAD
- a FreeCAD model that causes a crash
Steps: Enter the following in your terminal window:
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB will output some initializing information. The (lldb) shows the debugger is running in the terminal, now input:
(lldb) run
FreeCAD will now start up. Perform the steps that cause FreeCAD to crash or freeze, then enter in the terminal window:
(lldb) bt
This will generate a lengthy listing of exactly what the program was doing when it crashed or froze. Include this with your problem report.
List Libraries Loaded by FreeCAD
(Applicable to Linux and macOS)
Sometimes it's helpful to understand what libraries FreeCAD is loading, specifically if there are multiple libraries being loaded of the same name but different versions (version collision). In order to see which libraries are loaded by FreeCAD when it crashes you should open a terminal and run it in the debugger. In a second terminal window, find out the process id of FreeCAD:
ps -A | grep FreeCAD
Use the returned id and pass it to lsof
:
lsof -p process_id
This prints a long list of loaded resources. So for example, if trying to ascertain if more than one Coin3d library versions is loaded, scroll through the list or search directly for Coin in the output:
lsof -p process_id | grep Coin
Python Debugging
For a more modern approach to debugging Python, see these posts:
- Debugging macros with VS 2017
- Python workbenches debugging
- python3.dll, Qt5Windgets.dll, Qt5Gui.dll and Qt5Core.dll not found
winpdb
winpdb Debugging →
Here is an example of using Winpdb inside FreeCAD:
We need the Python debugger: Winpdb. If you do not have it installed, on Ubuntu/Debian install it with:
sudo apt-get install winpdb
Now lets setup the debugger.
- Start Winpdb.
- Set the debugger password to "test": Go to menu File → Password" and set the password.
Now we will run a test Python script in FreeCAD step by step.
- Run winpdb and set the password (e.g. test)
- Create a Python file with this content
import rpdb2
rpdb2.start_embedded_debugger("test")
import FreeCAD
import Part
import Draft
print "hello"
print "hello"
import Draft
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
Draft.makeWire(points,closed=False,face=False,support=None)
- Start FreeCAD and load the above file into FreeCAD
- Press F6 to execute it
- Now FreeCAD will become unresponsive because the Python debugger is waiting
- Switch to the Windpdb GUI and click on "Attach". After a few seconds an item "<Input>" appears where you have to double-click
- Now the currently executed script appears in Winpdb.
- Set a break at the last line and press F5
- Now press F7 to step into the Python code of Draft.makeWire
Visual Studio Code (VS Code)
VS Code Debugging →
Prerequisites:
- The ptvsd package needs to be installed in a Python 3 outside of FreeCAD, then the module must be copied to FreeCAD's Python library folder.
# In a cmd window that has a path to you local Python 3:
pip install ptvsd
# Then if your Python is installed in C:\Users\<userid>\AppData\Local\Programs\Python\Python37
# and your FreeCAD is installed in C:\freecad\bin
xcopy "C:\Users\<userid>\AppData\Local\Programs\Python\Python37\Lib\site-packages\ptvsd" "C:\freecad\bin\Lib\site-packages\ptvsd"
Visual Studio Code documentation for remote debugging
Steps:
- Add following code at the beginning of your script
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
ptvsd.wait_for_attach()
- Add a debug configuration in Visual Studio Code Debug → Add Configurations….
- The config should look like this:
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
- In VS Code add a breakpoint anywhere you want.
- Launch the script in FreeCAD. FreeCAD freeze waiting for attachment.
- In VS Code start debugging using created configuration. You should see variables in debugger area.
- When setting breakpoints, VS Code will complain about not finding the .py file opened in the VS Code editor.
- Change "remoteRoot": "." to "remoteRoot": "<directory of file>"
- For example, if the Python file resides in /home/FC_myscripts/myscript.py
- Change to: "remoteRoot": "/home/FC_myscripts"
- If you're just debugging FreeCAD macros from the FreeCAD macro folder, and that folder is "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro", then use:
- "localRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro",
- "remoteRoot": "C:/Users/<userid>/AppData/Roaming/FreeCAD/Macro"
- Change "remoteRoot": "." to "remoteRoot": "<directory of file>"
- If your macro can't find ptvsd despite having installed it somewhere precede 'import ptvsd' with
from sys import path
sys.path.append('/path/to/site-packages')
Where the path is to the directory where ptvsd was installed.
- On the left bottom edge of VSCode you can choose the Python executable - it's best to make this the version packaged with FreeCAD.
In the Mac package it is /Applications/FreeCAD.App/Contents/Resources/bin/python.
You can locate it on your system by typing
import sys
print(sys.executable)
into FreeCAD's Python console.
With LiClipse and AppImage
LiClipse Debugging →
- Extract AppImage.
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
- The sqashfs-root location is where the debugger later on is hooked up to.
- Make sure you can start a FreeCAD session from within the squashfs-root location.
squashfs-root> ./usr/bin/freecadcmd
- Should start up a FreeCAD commandline session.
- Install LiClipse.
- Comes ready with pydev and has installers for all platforms.
- For linux it is just to extract (to any location) and run.
- Configure liclipse for debugging.
- Right-click pydev icon (upper right corner) and choose customize.
- Activate "PyDev Debug" (through checkbox, or it might be needed to go to tab "Action Set Availability" and activate there first).
- In the pydev menu you can now choose "start debug server".
- Use menu window/open perspective/other > debug.
- Right-click debug icon (upper right corner) and choose customize.
- Checking "Debug" brings the debugging navigation tools to the toolbar.
- Open preferences through menu window/preferences.
- In PyDev/Interpreters add "new Interpreter by browsing".
- The added interpreter should be:
your loc/squashfs-root/usr/bin/python
. - If you are only using this for fc, you can add AddOn workbench folders as well, or do that in a pydev-project later on.
- Right-click pydev icon (upper right corner) and choose customize.
- Find path to
pydevd.py
in your liclipse installation.- Something along the lines of:
your location/liclipse/plugins/org.python.pydev.xx/pysrc
.
- Something along the lines of:
- Create a regular pydev-project in liclipse.
- Import external sources, for example a macro that you want to debug, or an external workbench.
- In that macro (or workbench .py file) add the code lines:
import sys; sys.path.append("path ending with /pysrc") import pydevd; pydevd.settrace()
- This is where the execution will halt when the macro is run.
- Start the liclipse debug server (menu pydev).
- Start FreeCAD.
squashfs-root> ./usr/bin/freecad
- Run the macro (or any other file with a
pydevd.settrace()
trigger) from within freecad, as you would normally do.
- Happy debugging.
- The use of LiClipse for remote debugging, and the steps described here related to liclipse, should work on any platform. The parts related to AppImage is for linux only.
Pyzo
See the main article about Pyzo.
Отладка OpenCasCade
For developers needing to dig deeper in to the OpenCasCade kernel, user @abdullah has created a thread orientation discussing how to do so.
- 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
Введение
Верстак Test Framework на самом деле не является верстаком для моделирования, но он содержит набор скриптов Python для выполнения различных тестов на основных компонентах FreeCAD с целью отладки проблем. Смотри также Отладку.
Вы можете запустить тесты из командной строки, используя параметры -t
или --run-test
.
Запустите все тесты:
freecad --run-test 0
Запустите только один из указанных тестов модулей, например:
freecad -t TestDraft
If a test does not need the GUI, it can also be executed in console mode by setting the -c
or --console
option in addition. This usually results in much faster startup time as the GUI is not loaded. For example:
freecad -c -t TestPartDesignApp
Меню тестирования
Each top level directory in FreeCAD should have a file with the tests that can be run for that particular workbench or module. The file usually starts with the word Test
.
To run a test from within FreeCAD, switch to the Test Workbench, then Test commands → TestToolsGui → Self test → Select test name, then enter the name of the Python file with the tests; for example, for the Draft Workbench, this would be TestDraft, then press Start.
Функции тестирования
Это список тестовых приложений по состоянию: версия 0.15 git 4207:
TestAPP.All
Add test function
BaseTests
Add test function
UnitTests
Add test function
Document
Add test function
UnicodeTests
Add test function
MeshTestsApp
Add test function
TestDraft
Add test function
TestSketcherApp
Add test function
TestPartApp
Add test function
TestPartDesignApp
Add test function
TestPathApp
Path workbench test cases:
- depthTestCases:
- PathTestUtils:
- TestDressupDogbone: Test functionality of Dogbone dressup.
- TestHoldingTags: Test functionality of Holding Tags dressup.
- TestPathAdaptive: Test selection capability of Adaptive operation.
- TestPathCore: Test core functionality of Path workbench.
- TestPathDeburr: Test general functionality of Deburr operation.
- TestPathGeom: Test various functions available in the PathGeom module.
- TestPathHelix: Test general functionality of Helix operation.
- TestPathLog: Test various functions available in the PathLog debugging and feedback module.
- TestPathOpTools:
- TestPathPreferences: Test various functions available in the PathPreferences module.
- TestPathPropertyBag:
- TestPathSetupSheet:
- TestPathStock:
- TestPathThreadMilling:
- TestPathTool:
- TestPathToolBit:
- TestPathToolController:
- TestPathTooltable:
- TestPathUtil: Test various functions available in the PathUtil module.
- TestPathVcarve: Test general functionality of Vcarve operation.
- TestPathVoronoi:
Workbench
Add test function
Menu
Add test function
Menu.MenuDeleteCases
Add test function
Menu.MenuCreateCases
Add test function
Scripting
See also: FreeCAD Scripting Basics.
Get a list of all top-level test modules
FreeCAD.__unit_test__
Note that the test modules returned here depend on whether a GUI available or not. I.e. when executed in console mode, various tests ending in "Gui" are missing.
Run specific tests
There are various ways of running tests using Python's unittest library. FreeCAD's test framework removes some of the boiler plate for the most common cases.
Run all tests defined in a Python module:
import Test, TestFemApp
Test.runTestsFromModule(TestFemApp)
Run all tests defined in a Python class:
import Test, femtest.app.test_solver_calculix
Test.runTestsFromClass(femtest.app.test_solver_calculix.TestSolverCalculix)
Example 1
Within the Python Console of FreeCAD, the following code format may be used to run built-in tests. Replace the red "TestFem" text in the code below with the desired module test name.
- For example, use "TestPathApp" to run all unit tests for the Path workbench unit test framework.
- Submodules are available using dot notation, like "TestPathApp.TestPathAdaptive" to only run the Adaptive unit tests within the greater Path workbench test framework.
- Multiple test modules or submodules may be combined by adding another `suite.addTest(...)` method call just like the one in the code below, but with a different module or submodule reference.
- Output for the code below will be in the Report View panel within the FreeCAD GUI.
- Code source is copied from post by FreeCAD forum user, sgrogan, in the unit tests per python topic, with credit there given to forum user, wmayer.
import unittest
suite = unittest.TestSuite()
suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestFem"))
r = unittest.TextTestRunner()
r.run(suite)
Additional Resources
Forum Topics
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Overview
Обзор
Эта статья описывает Брендинг FreeCAD. Брендинг средств для начала вашего собственного приложения основанного на FreeCAD. Это может быть как ваш собственный исполняемый файл или загрузочная картинка так и полностью переработанная программа. На базе гибкой архитектуры FreeCAD, её легко использовать как основу для собственной целевой программы.
Warning
Although FreeCAD is offered to you free of charge, and the FreeCAD community is happy to see other applications emerging, that are based on FreeCAD, we have on the other hand seen a lot of unfair use of the information contained on this page by people who simply rebranded FreeCAD into a closed-source application to make profit from it.
Although the LGPL license allows to use the FreeCAD source code in closed-source applications, it also gives strict rules to do so, and does not allow simply taking FreeCAD, renaming it and stripping it of its license.
Would you be interested in using FreeCAD in a closed-source application, be sure to check thoroughly the implications of the LGPL license, and, even better, contact any FreeCAD developer, administrator or moderator before doing so.
General
Главное
Большая часть брендинга делается в MainCmd.cpp или MainGui.cpp. Эти Проекты генерируют исполняемые файлы FreeCAD. Чтобы сделать ваш собственный Бренд просто скопируйте Main или MainGui проекты и дайте исполняемым файлам собственное имя, например FooApp.exe. Наиболее важные настройки для нового облика можно сделать в одном месте в функции main(). Вот участок кода, который управляет брендингом:
int main( int argc, char ** argv )
{
// Name and Version of the Application
App::Application::Config()["ExeName"] = "FooApp";
App::Application::Config()["ExeVersion"] = "0.7";
// set the banner (for loging and console)
App::Application::Config()["CopyrightInfo"] = sBanner;
App::Application::Config()["AppIcon"] = "FooAppIcon";
App::Application::Config()["SplashScreen"] = "FooAppSplasher";
App::Application::Config()["StartWorkbench"] = "Part design";
App::Application::Config()["HiddenDockWindow"] = "Property editor";
App::Application::Config()["SplashAlignment" ] = "Bottom|Left";
App::Application::Config()["SplashTextColor" ] = "#000000"; // black
// Inits the Application
App::Application::Config()["RunMode"] = "Gui";
App::Application::init(argc,argv);
Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** ) splash_screen);
Gui::Application::initApplication();
Gui::Application::runApplication();
App::Application::destruct();
return 0;
}
Первая запись Config определяет название программы. Это не имя исполняемого файла, который может быть изменен путем переименования или настройки компилятора, а имя, которое отображается в панели задач в Windows или в списке программ в Unix системах.
Следующие строки определяют Config записи вашего FooApp Приложения. Описание Config и его элементов вы можете найти в запуске и конфигурации.
Images
Image resources are compiled into FreeCAD using Qt's resource system. Therefore you have to write a .qrc file, an XML-based file format that lists image files on the disk but also any other kind of resource files. To load the compiled resources inside the application you have to add a line
Q_INIT_RESOURCE(FooApp);
into the main() function. Alternatively, if you have an image in XPM format you can directly include it into your main.cpp and add the following line to register it:
Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** ) splash_screen);
Branding XML
In FreeCAD there is also a method supported without writing a customized main() function. For this method you must write a file name called branding.xml and put it into the installation directory of FreeCAD. Here is an example with all supported tags:
<?xml version="1.0" encoding="utf-8"?>
<Branding>
<Application>FooApp</Application>
<WindowTitle>Foo App in title bar</WindowTitle>
<BuildVersionMajor>1</BuildVersionMajor>
<BuildVersionMinor>0</BuildVersionMinor>
<BuildRevision>1234</BuildRevision>
<BuildRevisionDate>2014/1/1</BuildRevisionDate>
<CopyrightInfo>(c) My copyright</CopyrightInfo>
<MaintainerUrl>Foo App URL</MaintainerUrl>
<ProgramLogo>Path to logo (appears in bottom right corner)</ProgramLogo>
<WindowIcon>Path to icon file</WindowIcon>
<ProgramIcons>Path to program icons</ProgramIcons>
<SplashScreen>splashscreen.png</SplashScreen>
<SplashAlignment>Bottom|Left</SplashAlignment>
<SplashTextColor>#ffffff</SplashTextColor>
<SplashInfoColor>#c8c8c8</SplashInfoColor>
<StartWorkbench>PartDesignWorkbench</StartWorkbench>
</Branding>
All listed tags are optional.
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Обзор
Локализация в целом, это процесс создания многоязыкового пользовательского интерфейса для программного обеспечения. В FreeCAD вы можете установить язык пользовательского интерфейса в Правка → Настройки → Основные. FreeCAD использует Qt чтобы поддерживать несколько языков. По умолчанию в Unix/Linux системах, FreeCAD использует текущие языковые настройки вашей системы для выбора языка интерфейса FreeCAD.
Помощь с переводом FreeCAD
Одно из очень важных дел которое пользователи могут сделать для FreeCAD (если например они не имеют навыков программирования ), это помочь с переводом различных частей проекта (программа, сайт, вики, документация и т. д.) на другой язык. Вот как это можно сделать
Перевод программного обеспечения FreeCAD
FreeCAD использует стороннюю систему коллективных онлайн-переводов, называемую Crowdin.
Она проприетарная, но бесплатна для проектов с открытым исходным кодом. Ниже представлены инструкции по использованию этой системы.
- Отправляйтесь на страницу проекта перевода FreeCAD на Crowdin;
- Войдите, создав новый профиль, или воспользовавшись сторонними аккаунтами (GitHub, GitLab, GMail итд...);
- Щелкните иконку языка на котоый хотите перевести;
- Начните переводить , щелкнув на Translate рядом с одним из файлов. Например, FreeCAD.ts содержит текстовые строки для главного окна FreeCAD.
- Вы можете голосовать за существующие переводы, или вы можете создавать свой собственный.
Note: Details on how to use crowdin can be found on the Crowdin Administration page.
Перевод внешних верстаков
Подробности на странице перевод внешних верстаков.
FreeCAD Preferences for Translators
Starting with FreeCAD 0.20, the following variables can be manually added to the BaseApp/Preferences/General section of the user.cfg file to assist with the development of new translations:
AdditionalLanguageDomainEntries - to add entirely new languages to FreeCAD that are not currently supported by the source code, you can use this user preference to add to the list of available languages. The format of the languages is "Language Name"="code"; for example:
<FCText Name="AdditionalLanguageDomainEntries">"Esperanto"="eo";"French"="fr";</FCText>
AdditionalTranslationsDirectory - add an additional directory for FreeCAD to search for *.qm files. This location will take precedence over $userAppDataDir/translations and $resourceDir/translations. For example:
<FCText Name="AdditionalTranslationsDirectory">C:/Users/FreeCADUser/TestTranslations</FCText>
Перевод FreeCAD wiki
В этой вики содержится много контента, большинство из которого собрано в руководства. Вы можете просмотреть документацию, начиная со стартовой страницы или можно взглянуть на руководство пользователя
Примечание: чтобы иметь возможность перевести вики, вам нужно иметь права редактирования, насчёт их получения смотрите Как я могу полчить права для редактирования wiki?.
У Вас должны быть достаточные знания о языке форматировании вики, и следовать общими стилевым правилам, описанным на странице WikiPages
Расширение перевода Mediawiki
После того, как вики была убрана с SourceForge, Yorik установил расширение перевода MediaWiki, которое облегчает переводы между страницами. Преимущество расширения для перевода в том, что он отслеживает переводы, уведомляет, если исходная страница была обновлена, и поддерживает синхронизацию переводов с оригинальной страницей на английском языке.
Инструмент описан в Help:Extension:Translate и является частью MediaWiki Language Extension Bundle.
Чтобы быстро начать работу по подготовке страницы для перевода, пожалуйста, прочитайте страницу с примером перевода. По сути, требуется пара тэгов
<translate> ... </translate>
окружающих всю страницу, для активации системы перевода, и страница должна будет промаркирована для перевода.
Чтобы увидеть пример того, как работает инструмент перевода, один раз плагин перевод активируется на странице, вы можете посетить Стартовую страницу. Вы увидите новую языковую строку меню внизу. Она была сгенерирована автоматически. Нажмите, например, на немецкую ссылку, это преместит Вас на стартовую страницу на немецком языке. Прямо под названием, вы можете прочитать "Эта страница представляет собой 'переведенную версию' страницы Стартовая страница и перевод завершен на хх%." (Хх - это текущий фактический процент перевода). Нажмите на ссылку "translated version", чтобы начать перевод, либо обновить или исправить существующий перевод.
Если вы перейдете на Заглавную страницу, то обнаружите, что вы не можете больше редактировать эту страницу напрямую нажатием на вкладку [Редактировать], и ссылка сверху Править будет заменена на Перевести которая будет открывать утилиту (плагин) для перевода.
При добавлении нового контента, вначале должна быть создана страница на английском языке, а затем она переводится на другой язык. Если кто-то хочет изменить или добавить контент на странице, английскую версию надо исправить в первую очередь.
Если вы не уверены, что делать с переводом, не стесняйтесь обратится за помощью на Development → Wiki subforum или на особый языковой субфорум на форуме FreeCAD.
Важные замечания
Каждый пользователь вики, имеющий права "Редактора", может запустить утилиту для перевода, записывать, сохранять и просматривать переводы.
Однако только пользователи с правами "Администратора" могут отмечать страницы для перевода. Страница, которая не помечена для перевода, не будет использовать расширение перевода и не будет правильно синхронизирована с информацией на английском языке.
Боковая панель расположенная слева также подлежит переведу, но только Администраторы могут изменить этот эллемент сайта. Пожалуйста, следуйте инструкциям на странице Боковая панель Локализации.
Примечание: первый раз при переключении страниц на новую систему перевода, она теряет все свои старые "Ручные" переводы. Чтобы восстановить перевод, вам необходимо открыть более раннюю версию из архива, и копировать / вставлять абзацы вручную в новой системе перевода.
Translate the FreeCAD documentation
As per general consensus, the reference page in the wiki is the English page, which should be created first. If you want to change or add content to a page, you should do it to the English page first, and only once the update is completed, port the modification to the translated page.
Старые инструкции по переводу
These instructions are for historical background only. Translations should use the new system with the #Mediawiki Translation Extension described above. |
So the first step is to check if the manual translation has already been started for your language (look in the left sidebar, under "manual").
Page Naming Convention
#REDIRECT [[About_FreeCAD/fr]]
{{docnav/fr|[[Online_Help_Startpage/fr|Bienvenue dans l'aide en ligne de FreeCAD]]|[[Feature_list/fr|Fonctionnalités]]}} The page "Bienvenue dans l'aide en ligne de FreeCAD" redirects to Online_Help_Startpage/fr, and the page "Fonctionnalités" redirects to Feature_list/fr. |
Перевод веб сайта FreeCAD
Translation of the FreeCAD website is now done through Crowdin. The file is named homepage.po.
Разработка - Как добавить локализацию
Этот раздел для разработчиков, которые хотят добавить окализацию в свой код.
Подготовка ваших FreeCAD/master модулей для перевода
These are the parts to the FreeCAD translation process:
- extract text strings from source code into *.ts files
- load *.ts files into FreeCAD Crowdin.
- translation of strings within Crowdin
- extract modified/new *.ts files from Crowdin
- convert *.ts files into *.qm files and update each module's *.qrc file
- update FreeCAD master
All of the above steps are performed by the "translation scripts" which are run by an administrator periodically.
Preparing your module for translation is quite easy. First, you need to ensure that you have a "translations" directory in myModule/Gui/Resources. Then open a terminal window (or Windows/OSX equivalent) in your "translations" directory and enter the following command:
lupdate -ts myModule.ts
This creates an empty translation file. Once this is done, you need to ensure that the translation scripts are updated as in this pull request.
Everything after this is automatic as far as a developer is concerned. The administrator will extract the text strings, the translators will translate them, then the administrator will extract the translations and update FreeCAD/master.
Подготовка вашего стороннего модуля или макроса для перевода
3rd party modules or macros are translated in much the same fashion, except that you must do some of the work yourself. This forum discussion describes the details.
Update: see Translating an external workbench
Older module translation techniques
Localization Older Methods describes the use of translation tools such as Qt Linguist, lupdate, lrelease, pylupdate4, etc in detail. Most of this is no longer required for FreeCAD/master modules, but may be helpful preparing and updating 3rd party modules.
Автоматическое обновление переводов Crowdin
В настоящее время лица ведущие разработку FreeCAD используют Crowdin скрипты для извлечения и отправки переводов в Crowdin и обратно в репозиторий Github. Crowdin API предоставляет разработчикам FreeCAD возможность автоматизировать аспекты рабочего процесса перевода проекта, для получения дополнительной информации см. Документация по Crowdin API.
Связанные страницы
Программирование
См. так же: Основы составления скриптов FreeCAD.
Чтобы получить список всех поддерживаемых языков интерфейса FreeCAD используйте supportedLocales
метод FreeCADGui
.
locales = FreeCADGui.supportedLocales()
После выполнения locales
будет содержать в себе словарь с следующими значениями:
{'English': 'en', 'Afrikaans': 'af', 'Arabic': 'ar', 'Basque': 'eu', 'Catalan': 'ca', 'Chinese Simplified': 'zh-CN', 'Chinese Traditional': 'zh-TW', 'Croatian': 'hr', 'Czech': 'cs', 'Dutch': 'nl', 'Filipino': 'fil', 'Finnish': 'fi', 'French': 'fr', 'Galician': 'gl', 'German': 'de', 'Hungarian': 'hu', 'Indonesian': 'id', 'Italian': 'it', 'Japanese': 'ja', 'Kabyle': 'kab', 'Korean': 'ko', 'Lithuanian': 'lt', 'Norwegian': 'no', 'Polish': 'pl', 'Portuguese': 'pt-PT', 'Portuguese, Brazilian': 'pt-BR', 'Romanian': 'ro', 'Russian': 'ru', 'Slovak': 'sk', 'Slovenian': 'sl', 'Spanish': 'es-ES', 'Swedish': 'sv-SE', 'Turkish': 'tr', 'Ukrainian': 'uk', 'Valencian': 'val-ES', 'Vietnamese': 'vi'}
Чтобы определить текущий язык интерфейса FreeCAD, используйте getLocale
метод FreeCADGui
.
locale = FreeCADGui.getLocale()
Если текущий язык английский, тогда locale
будет содержать:
'English'
Чтобы преобразовать данное значение в языковой код, используйте простой прием:
locale = FreeCADGui.supportedLocales()[Gui.getLocale()]
Если текущий язык английский результат будет равен:
'en'
Чтобы установить язык интерфейса FreeCAD, используйте setLocale
метод FreeCADGui
. Вы так же можете указать язык в виде языкового кода:
FreeCADGui.setLocale('Russian')
FreeCADGui.setLocale('ru')
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Overview
This page lists several additional Python modules or other pieces of software that can be downloaded freely from the internet, and add functionality to your FreeCAD installation.
PySide (previously PyQt)
- homepage (PySide): http://qt-project.org/wiki/PySide
- license: LGPL
- optional, but needed by several modules: Draft, Arch, Ship, Plot, OpenSCAD, Spreadsheet
PySide (previously PyQt) is required by several modules of FreeCAD to access FreeCAD's Qt interface. It is already bundled in the windows verison of FreeCAD, and is usually installed automatically by FreeCAD on Linux, when installing from official repositories. If those modules (Draft, Arch, etc) are enabled after FreeCAD is installed, it means PySide (previously PyQt) is already there, and you don't need to do anything more.
Note: FreeCAD progressively moved away from PyQt after version 0.13, in favour of PySide, which does exactly the same job but has a license (LGPL) more compatible with FreeCAD.
Installation
Linux
The simplest way to install PySide is through your distribution's package manager. On Debian/Ubuntu systems, the package name is generally python-PySide, while on RPM-based systems it is named pyside. The necessary dependencies (Qt and SIP) will be taken care of automatically.
Windows
The program can be downloaded from http://qt-project.org/wiki/Category:LanguageBindings::PySide::Downloads . You'll need to install the Qt and SIP libraries before installing PySide (to be documented).
MacOS
PySide on Mac can be installed via homebrew or port. See Install dependencies for more information.
Usage
Once it is installed, you can check that everything is working by typing in FreeCAD Python console:
import PySide
To access the FreeCAD interface, type:
from PySide import QtCore,QtGui
FreeCADWindow = FreeCADGui.getMainWindow()
Now you can start to explore the interface with the dir() command. You can add new elements, like a custom widget, with commands like:
FreeCADWindow.addDockWidget(QtCore.Qt.RghtDockWidgetArea,my_custom_widget)
Working with Unicode:
text = text.encode('utf-8')
Working with QFileDialog and OpenFileName:
path = FreeCAD.ConfigGet("AppHomePath")
#path = FreeCAD.ConfigGet("UserAppData")
OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "Read a txt file", path, "*.txt")
Working with QFileDialog and SaveFileName:
path = FreeCAD.ConfigGet("AppHomePath")
#path = FreeCAD.ConfigGet("UserAppData")
SaveName, Filter = PySide.QtGui.QFileDialog.getSaveFileName(None, "Save a file txt", path, "*.txt")
Example of transition from PyQt4 and PySide
PS: these examples of errors were found in the transition from PyQt4 to PySide and these corrections were made, other solutions are certainly available with the examples above
try:
import PyQt4 # PyQt4
from PyQt4 import QtGui ,QtCore # PyQt4
from PyQt4.QtGui import QComboBox # PyQt4
from PyQt4.QtGui import QMessageBox # PyQt4
from PyQt4.QtGui import QTableWidget, QApplication # PyQt4
from PyQt4.QtGui import * # PyQt4
from PyQt4.QtCore import * # PyQt4
except Exception:
import PySide # PySide
from PySide import QtGui ,QtCore # PySide
from PySide.QtGui import QComboBox # PySide
from PySide.QtGui import QMessageBox # PySide
from PySide.QtGui import QTableWidget, QApplication # PySide
from PySide.QtGui import * # PySide
from PySide.QtCore import * # PySide
To access the FreeCAD interface, type: You can add new elements, like a custom widget, with commands like:
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dockwidget
myNewFreeCADWidget.ui = Ui_MainWindow() # myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
try:
app = QtGui.qApp # PyQt4 # the active qt window, = the freecad window since we are inside it
FCmw = app.activeWindow() # PyQt4 # the active qt window, = the freecad window since we are inside it
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
except Exception:
FCmw = FreeCADGui.getMainWindow() # PySide # the active qt window, = the freecad window since we are inside it
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
Working with Unicode:
try:
text = unicode(text, 'ISO-8859-1').encode('UTF-8') # PyQt4
except Exception:
text = text.encode('utf-8') # PySide
Working with QFileDialog and OpenFileName:
OpenName = ""
try:
OpenName = QFileDialog.getOpenFileName(None,QString.fromLocal8Bit("Lire un fichier FCInfo ou txt"),path,"*.FCInfo *.txt") # PyQt4
except Exception:
OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "Lire un fichier FCInfo ou txt", path, "*.FCInfo *.txt")#PySide
Working with QFileDialog and SaveFileName:
SaveName = ""
try:
SaveName = QFileDialog.getSaveFileName(None,QString.fromLocal8Bit("Sauver un fichier FCInfo"),path,"*.FCInfo") # PyQt4
except Exception:
SaveName, Filter = PySide.QtGui.QFileDialog.getSaveFileName(None, "Sauver un fichier FCInfo", path, "*.FCInfo")# PySide
The MessageBox:
def errorDialog(msg):
diag = QtGui.QMessageBox(QtGui.QMessageBox.Critical,u"Error Message",msg )
try:
diag.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) # PyQt4 # this function sets the window before
except Exception:
diag.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint)# PySide # this function sets the window before
# diag.setWindowModality(QtCore.Qt.ApplicationModal) # function has been disabled to promote "WindowStaysOnTopHint"
diag.exec_()
Working with setProperty (PyQt4) and setValue (PySide)
self.doubleSpinBox.setProperty("value", 10.0) # PyQt4
replace with:
self.doubleSpinBox.setValue(10.0) # PySide
Working with setToolTip
self.doubleSpinBox.setToolTip(_translate("MainWindow", "Coordinate placement Axis Y", None)) # PyQt4
replace with:
self.doubleSpinBox.setToolTip(_fromUtf8("Coordinate placement Axis Y")) # PySide
or:
self.doubleSpinBox.setToolTip(u"Coordinate placement Axis Y.")# PySide
Additional documentation
Pivy
- homepage: https://bitbucket.org/Coin3D/coin/wiki/Home
- license: BSD
- optional, but needed by several modules of FreeCAD: Draft, Arch
Pivy is a needed by several modules to access the 3D view of FreeCAD. On windows, Pivy is already bundled inside the FreeCAD installer, and on Linux it is usually automatically installed when you install FreeCAD from an official repository. On macOS, unfortunately, you will need to compile pivy yourself.
Установка
Prerequisites
I believe before compiling Pivy you will want to have Coin and SoQt installed.
I found for building on Mac it was sufficient to install the Coin3 binary package. Attempting to install coin from MacPorts was problematic: tried to add a lot of X Windows packages and ultimately crashed with a script error.
For Fedora I found an RPM with Coin3.
SoQt compiled from source fine on Mac and Linux.
Debian & Ubuntu
Debian & Ubuntu
Начиная с Debian Squeeze и Ubuntu Lucid, pivy стал доступен напрямую через официальные репозитории, экономя ваше время. В то же время вы можете скачать один из пакетов что мы сделали (для debian и ubuntu karmic) доступных на странице Загрузок , или скомпилировать их самостоятельно.
Лучший способ скомпилировать pivy просто вытянуть debian пакет с исходными кодами для pivy и сделать пакет с помощью debuild. Это тот же исходный код что и на оффициальном сайте pivy , но люди debian исправили несколько ошибок. Он также хорошо компилируется в ubuntu karmic из: http://packages.debian.org/squeeze/python-pivy (скачайте .orig.gz и .diff.gz файл, распокуйте оба, добавте .diff к исходному коду: перейдите к каталогу с распакованными кодами pivy , и примените .diff патч:
patch -p1 < ../pivy_0.5.0~svn765-2.diff
затем
debuild
теперь у вас есть правильно собраный pivy в оффициально устанавливаемых пакетах. Теперь, просто установите пакет с помощью gdebi.
Other linux distributions
Другие linux дистрибутивы
Сперва получите код из официального репозитория проекта:
hg clone http://hg.sim.no/Pivy/default Pivy
As of March 2012, the latest version is Pivy-0.5.
Затем вам понадобится инструмент называемыйd SWIG для создания C++ кода для Python привязок. Рекомендуется использовать версию SWIG 1.3.25 , не последнюю версию, потому как на данный момент pivy корректно работает только с 1.3.25. Скачайте 1.3.25 tarball с исходными кодамииз http://www.swig.org. Распакуйте и в командной строке (под root-ом):
./configure
make
make install (or checkinstall if you use it)
Сборка занимает всего несколько секунд.
Alternatively, you can try building with a more recent SWIG. As of March 2012, a typical repository version is 2.0.4. Pivy has a minor compile problem with SWIG 2.0.4 on macOS (see below) but seems to build fine on Fedora Core 15.
After that go to the pivy sources and call
python setup.py build
which creates the source files. Note that build can produce thousands of warnings, but hopefully there will be no errors.
This is probably obsolete, but you may run into a compiler error where a 'const char*' cannot be converted in a 'char*'. To fix that you just need to write a 'const' before in the appropriate lines. There are six lines to fix.
After that, install by issuing (as root):
python setup.py install (or checkinstall python setup.py install)
That's it, pivy is installed.
MacOS
These instructions may not be complete. Something close to this worked for OS 10.7 as of March 2012. I use MacPorts for repositories, but other options should also work.
As for linux, get the latest source:
hg clone http://hg.sim.no/Pivy/default Pivy
If you don't have hg, you can get it from MacPorts:
port install mercurial
Then, as above you need SWIG. It should be a matter of:
port install swig
I found I needed also:
port install swig-python
As of March 2012, MacPorts SWIG is version 2.0.4. As noted above for linux, you might be better off downloading an older version. SWIG 2.0.4 seems to have a bug that stops Pivy building. See first message in this digest
This can be corrected by editing the 2 source locations to add dereferences: *arg4, *arg5 in place of arg4, arg5. Now Pivy should build:
python setup.py build
sudo python setup.py install
Windows
Windows
Предполагается использование Visual Studio 2005 или позднии версии вы предется открыть командную строку 'Visual Studio 2005 Command prompt' из меню Tools. Если Python интерпритатор ещё не прописан в системном пути, сделайте это
set PATH=path_to_python_2.5;%PATH%
Чтобы получить работающий pivy вы должны получить последнюю версию исходников из репозитория проекта:
svn co https://svn.coin3d.org/repos/Pivy/trunk Pivy
Затем вам понадобится инструмент называемыйd SWIG для создания C++ кода для Python привязок. Рекомендуется использовать версию SWIG 1.3.25 , не последнюю версию, потому как на данный момент pivy корректно работает только с 1.3.25. Скачайте 1.3.25 tarball с исходными кодамииз http://www.swig.org. Затем распакуйте его и в командной строке добавте к системному пути
set PATH=path_to_swig_1.3.25;%PATH%
и установите COINDIR на соответсвующий путь
set COINDIR=path_to_coin
В Windows pivy конфигурационный файл нахотится в SoWin вместо SoQt по умолчанию. Мне не удалось найти очевидный способ собрать с SoQt, поэтому я изменил файл непосредственно setup.py. В 200 строке удалите часть 'sowin' : ('gui._sowin', 'sowin-config', 'pivy.gui.') (не удалйте закрывающиеся скобки).
После чего отправляйтесь к исходным кодам pivy и введите команду
python setup.py build
которая создаст исходные файлы. Вы можете столкнуться с ошибками компилятора -несколько заголовочных файлов не может быть найдено. В этом случае отрегулируйте INCLUDE переменную
set INCLUDE=%INCLUDE%;path_to_coin_include_dir
если нет заголовочных файлов SoQt на месте , также с заголовками Coin
set INCLUDE=%INCLUDE%;path_to_soqt_include_dir
и в конце Qt заголовочные файлы
set INCLUDE=%INCLUDE%;path_to_qt4\include\Qt
Если вы используете Express Edition версию Visual Studio вы можете получить исключение python keyerror. В этом случае Вам необходимо изменить кое-что в msvccompiler.py расположенный в месте кужа вы установили Python.
шагом марш на 122 строку и замените строку
vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version
на
vsbase = r"Software\Microsoft\VCExpress\%0.1f" % version
Повторите сборку снова. Если вы получили вторую ошибку, вроде
error: Python was built with Visual Studio 2003;...
вы должны поменять 128 строку
self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
на
self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
Повторите сборку снова. Если вы опять получили ошибку
error: Python was built with Visual Studio version 8.0, and extensions need to be built with the same version of the compiler, but it isn't installed.
проверте пересеменные окружения DISTUTILS_USE_SDK и MSSDK с помощью
echo %DISTUTILS_USE_SDK%
echo %MSSDK%
Если они еще не установлены, то просто установите например, до 1
set DISTUTILS_USE_SDK=1
set MSSDK=1
Вы можете столкнуться при компиляции с ошибкой 'const char*' cannot be converted in a 'char*'. Чтобы исправить это вам необходимо написать 'const' перед следующей строкой(char*). Исправте ещё шесть строк. После чего, скопируйте созданный pivy каталог, в место где python интрепритатор FreeCAD сможет найти его.
Usage
To check if Pivy is correctly installed:
import pivy
Чтобы Pivy получил доступ FreeCAD древу сцен сделайте следующие:
from pivy import coin
App.newDocument() # Open a document and a view
view = Gui.ActiveDocument.ActiveView
FCSceneGraph = view.getSceneGraph() # returns a pivy Python object that holds a SoSeparator, the main "container" of the Coin scenegraph
FCSceneGraph.addChild(coin.SoCube()) # add a box to scene
Теперь вы можете изучать FCSceneGraph с помощью команды dir().
Additonal Documentation
Unfortunately documentation about pivy is still almost nonexistant on the net. But you might find Coin documentation useful, since pivy simply translate Coin functions, nodes and methods in Python, everything keeps the same name and properties, keeping in mind the difference of syntax between C and Python:
- https://bitbucket.org/Coin3D/coin/wiki/Documentation - Coin3D API Reference
- http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html - The Inventor Mentor - The "bible" of Inventor scene description language.
Вы также можете просмотреть в Draft.py файл в папке FreeCAD Mod/Draft , так как там часто используется pivy.
pyCollada
- homepage: http://pycollada.github.com
- license: BSD
- optional, needed to enable import and export of Collada (.DAE) files
pyCollada is a Python library that allow programs to read and write Collada (*.DAE) files. When pyCollada is installed on your system, FreeCAD will be able to handle importing and exporting in the Collada file format.
Installation
Linux
sudo apt-get install python3-collada
You can check if pycollada was correctly installed by issuing in a Python console:
import collada
If it returns nothing (no error message), then all is OK
Windows
On Windows since 0.15 pycollada is included in both the FreeCAD release and developer builds so no additional steps are necessary.
MacOS
If you are using the Homebrew build of FreeCAD you can install pycollada into your system Python using pip.
If you need to install pip:
$ sudo easy_install pip
Install pycollada:
$ sudo pip install pycollada
If you are using a binary version of FreeCAD, you can tell pip to install pycollada into the site-packages inside FreeCAD.app:
$ pip install --target="/Applications/FreeCAD.app/Contents/lib/python2.7/site-packages" pycollada
or after downloading the pycollada code
$ export PYTHONPATH=/Applications/FreeCAD\ 0.16.6706.app/Contents/lib/python2.7/site-packages:$PYTHONPATH
$ python setup.py install --prefix=/Applications/FreeCAD\ 0.16.6706.app/Contents
IfcOpenShell
- homepage: http://www.ifcopenshell.org
- license: LGPL
- optional, needed to extend import abilities of IFC files
IFCOpenShell is a library currently in development, that allows to import (and soon export) Industry foundation Classes (*.IFC) files. IFC is an extension to the STEP format, and is becoming the standard in BIM workflows. When ifcopenshell is correctly installed on your system, the FreeCAD Arch Workbench will detect it and use it to import IFC files, instead of its built-in rudimentary importer. Since ifcopenshell is based on OpenCasCade, like FreeCAD, the quality of the import is very high, producing high-quality solid geometry.
Installation
Since ifcopenshell is pretty new, you'll likely need to compile it yourself.
Linux
You will need a couple of development packages installed on your system in order to compile ifcopenshell:
liboce-*-dev
python-dev
swig
but since FreeCAD requires all of them too, if you can compile FreeCAD, you won't need any extra dependency to compile IfcOpenShell.
Grab the latest source code from here:
git clone https://github.com/IfcOpenShell/IfcOpenShell.git
The build process is very easy:
mkdir ifcopenshell-build
cd ifcopenshell-build
cmake ../IfcOpenShell/cmake
or, if you are using oce instead of opencascade:
cmake -DOCC_INCLUDE_DIR=/usr/include/oce ../ifcopenshell/cmake
Since ifcopenshell is made primarily for Blender, it uses Python3 by default. To use it inside FreeCAD, you need to compile it against the same version of Python that is used by FreeCAD. So you might need to force the Python version with additional cmake parameters (adjust the Python version to yours):
cmake -DOCC_INCLUDE_DIR=/usr/include/oce -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/python2.7.so ../ifcopenshell/cmake
Then:
make
sudo make install
You can check that ifcopenshell was correctly installed by issuing in a Python console:
import ifcopenshell
If it returns nothing (no error message), then all is OK
Windows
Note: Official FreeCAD installers obtained from the FreeCAD website/github page now contain ifcopenshell already.
Copied from the IfcOpenShell README file
Users are advised to use the Visual Studio .sln file in the win/ folder. For Windows users a prebuilt Open CASCADE version is available from the opencascade website. Download and install this version and provide the paths to the Open CASCADE header and library files to MS Visual Studio C++.
For building the IfcPython wrapper, SWIG needs to be installed. Please download the latest swigwin version from swig website. After extracting the .zip file, please add the extracted folder to the PATH environment variable. Python needs to be installed, please provide the include and library paths to Visual Studio.
Links
Tutorial Import/Export IFC - compiling IfcOpenShell
LazyLoader
LazyLoader is a Python module that allows deferred loading, while still importing at the top of the script. This is useful if you are importing another module that is slow, and it is used several times throughout the script. Using LazyLoader can improve workbench startup times, but the module will still need to be loaded on first use.
Installation
LazyLoader is included with FreeCAD v0.19
Usage
You will need to import LazyLoader, then change the import of whatever module you want to be deferred.
from lazy_loader.lazy_loader import LazyLoader
Part = LazyLoader('Part', globals(), 'Part')
The variable Part is how the module is named in your script. You can replicate "import Part as P" by changing the variable.
P = LazyLoader('Part', globals(), 'Part')
You can also import a module from a package.
utils = LazyLoader('PathScripts', globals(), 'PathScripts.PathUtils')
You can't import individual functions, just entire modules.
Links
- Original source: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/util/lazy_loader.py
- Further explanation: https://wil.yegelwel.com/lazily-importing-python-modules/
- Code within the FreeCAD source code: https://github.com/FreeCAD/FreeCAD/tree/master/src/3rdParty/lazy_loader
- Forum discussion: https://forum.freecadweb.org/viewtopic.php?f=10&t=45298
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
Авторы
FreeCAD would not be what it is without the generous contributions of many people. Here's an overview of the people and companies who contributed to FreeCAD over time. For credits for the third party libraries see the Third Party Libraries page.
Разработка
Project managers
Lead developers of the FreeCAD project:
Main developers
People who work regularly on the FreeCAD code (retrieved from https://github.com/FreeCAD/FreeCAD/graphs/contributors):
- Abdullah Tahiriyo
- Alexander Golubev (Fat-Zer)
- Bernd Hahnbach
- Brad Collette (sliptonic)
- Daniel Falck
- Eivind Kvedalen
- f3nix
- Ian Rees
- Jan Rheinlaender
- Jonathan Wiedemann (rockn)
- Jose Luis Cercos Pita (sanguinariojoe)
- Logari81
- Luke A. Parry
- mdinger
- mghansen
- Przemo Firszt(PrzemoF)
- sgrogan
- shoogen
- Stefan Tröger (ickby)
- tanderson69 (blobfish)
- vejmarie
- Victor Titov (DeepSOIC)
- wandererfan
Other coders
Other people who contributed code to the FreeCAD project:
- Barleyman
- Berthold Grupp
- dbtayl
- Dmitry Chigrin
- ezzieyguywuf
- fandaL
- Georg Wiora
- Graeme van der Vlugt
- itain
- j-dowsett
- Jacques-Antoine Gaudin
- jcc242
- jmaustpc
- Joachim Zettler
- jobermayr
- Johan3DV
- jonnor
- keithsloan52
- Ken Cline
- Mandeep Singh
- marktaff
- Martin Burbaum
- maurerpe
- ovginkel
- peterl94
- plaes
- poutine70
- TheMarkster
- qingfengxia
- Remigiusz Fiedler (DXF-parser)
- SebKuzminsky
- tomate44
- triplus
- usakhelo
Companies
Companies which donated code, assets or developer time:
- AlephObjects
- Imetric 3D
- KiCad Services Corporation
- OpeningDesign
Forum moderators
People in charge of the FreeCAD forum (retrieved from http://forum.freecadweb.org/memberlist.php?mode=team):
- agryson
- Daniel Falck
- DeepSOIC
- ediloren
- jmaustpc
- jriegel
- Logari81
- mrlukeparry
- onesz
- PrzemoF
- r-frank
- Renato Rebelo
- rockn
- shoogen
- wmayer
- yorik
Community
People from the community who put a lot of efforts in helping the FreeCAD project either by being active on the forum, keeping a blog about FreeCAD, making video tutorials, packaging FreeCAD for Windows/Linux/macOS, writing a FreeCAD book... (listed by alphabetical order) (retrieved from http://forum.freecadweb.org/memberlist.php?mode=&sk=d&sd=d#memberlist).
- bejant
- Brad Collette
- cblt2l
- cox
- Daniel Falck
- Eduardo Magdalena
- hobbes1069
- jdurston (5needinput)
- John Morris (butchwax)
- Kunda1
- Kwahooo
- lhagan
- marcxs
- Mario52
- Normandc
- peterl94
- pperisin
- Quick61
- Renato Rivoira (renatorivo)
- Rockn
- triplus
- ulrich1a
Documentation writers
People who wrote the documentation on this wiki:
- bejant
- Ediloren
- Eduardo Magdalena
- Hervé Blorec
- Honza32
- Isaac Ayala
- piffpoof
- Renato Rivoira (renatorivo)
- Roland Frank (r-frank)
- Vocx
- Wurstwasser
Translators
People who helped to translate the FreeCAD application (retrieved from https://crowdin.com/project/freecad):
- Alexandre Prokoudine
- Angelescu Constantin
- asakura
- Bartlomiej Niemiec
- BavariaSHAPE
- Bitacovir
- BLOREC Hervé
- bluecd
- Bruno Gonçalves Pirajá
- David69
- Ettore Atalan
- fandaL
- Gerhard Scheepers
- Gnrc
- Granet Jean-Pierre
- hanhsuan
- Harald Geier
- hicarl
- Holdi
- Honza32
- htsubota
- Igor
- javierMG
- Jiyong Choi
- Jodbe
- Jozef Kundlák
- kaktus
- kunguz
- Lars
- Le Loup
- Luc
- Maker
- Marosh
- Masaya Ootsuki
- Meme2704
- Miguel Morais
- Nicu Tofan
- nikoss
- Pasi Kukkola
- Peta T
- Peter Hageman
- Peter Klofutar
- pinkpony
- rako
- Raulshc
- sema
- Skywalker21
- Starofrainnight
- Timo Seppola
- totyg
- trzyha
- Victor Radulescu
- Vilfredo
- wbrwbr2011
- Wurstwasser
- yang12
- Zdeněk Havlík
- Дмитрий Сидоров
- Марко Пејовић
- Николай Матвеев
- Федір
- JYSEO2016
Addons developers
Developers of FreeCAD addons (retrieved from https://github.com/FreeCAD/FreeCAD-addons):
- amrit3701
- a179308
- cblt2l
- furti
- hamish2014
- javierMG
- jmwright
- jreinhardt
- looooo
- Maaphoo
- marmni
- microelly2
- Rentlau
- shaise
- triplus
- Начинающим
- Установка: Загрузка, Windows, Linux, Mac, Дополнительных компонентов, Docker, AppImage, Ubuntu Snap
- Базовая: О FreeCAD, Интерфейс, Навигация мыши, Методы выделения, Имя объекта, Настройки, Верстаки, Структура документа, Свойства, Помоги FreeCAD, Пожертвования
- Помощь: Учебники, Видео учебники
- Верстаки: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test Framework, Web
- User Documentation/ru
- Common Questions/ru
- Developer Documentation/ru
- Preferences/ru
- Std Base/ru
- Interface/ru
- Poweruser Documentation/ru
- Python Code/ru
- Workbenches/ru
- Mesh/ru
- Part/ru
- Drawing/ru
- Obsolete Workbenches/ru
- Raytracing/ru
- Image/ru
- Macros/ru
- Administration/ru
- Developer/ru
- Test Framework/ru
- Testing/ru
- Wiki/ru
- Pages with too many expensive parser function calls