Code snippets/ru

Эта страница содержит примеры, обрывки, куски FreeCAD python кода, собранный для получения пользователями оптыта и обсуждения на форумах. Читайте и используете их как начало для ваших собственных сценариев...

Обычный файл InitGui.py
Каждый модуль должен содержать, помимо основного файла модуля, файл InitGui.py, ответственного за вставку модуля в главное Gui. Это простой пример

Обычный файл модуля
Это пример головного файла модуля, содержащего всё что ваш модуль делает. Это Scripts.py файл вызванный в предыдущем примере. Вы можете установить здесь все ваши пользовательские команды.

Импорт нового типа файлов
Создание ипортировщика в нового типа файлов в FreeCAD, просто. FreeCAD не считает что вы импортируете данные в открытый документ, а скорее что вы просто можете непосредственно открыть новый тип файла. Так что все что вам нужно сделать, это добавить новое расширение файла в список известных расширений FreeCAD, и написать код, который будет читать файл и создавать FreeCAD объекты:

Это строка должна быть добавлена в InitGui.py файл для добавления нового расширения файлов в список:

Тогда в файле Import_Ext.py:

Экспорт вашего документа в новые типы файлов работает схожим образом, исключая того что вы используете: FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")

Добавление линии
Простейшая линия через две точки.

Добавление многоугольника
Многоугольник это просто набор соединенных отрезков (polyline в AutoCAD). Он необязательно должен быть замкнутым.

Добавление и удаление объекта из группы
Примечание: Вы также можете добавлять другие группы в группу...

Получение доступа и изменение представления объекта
Каждый объект в FreeCAD документе оссоциируется с визуальным представлением объекта, которое хранит все параметры, определяющие как объект представлен, такие как цвет, длина линий, и.т.д...

Наблюдение за поведение мыши в 3D окне через Python
Inventor позваляет добавить оди и более узлов обратного вызова(callback) в дерево сцен просмотрщика. По умолчанию в FreeCAD один узел обратного вызова установлен в кадое окно просмотра(просмотрщик), который позволяет добавить глобальные или статические C++ функции. Соответствуюе Python привязки, некоторые методы которых позволяют использовать эту технику (callback) в Python коде.

Теперь, выберите какую нибудь область в окне 3D-просмотра и наблюдайте сообщения в окне вывода. Для завершения наблюдения просто вызовите

Поддерживаются следующие типы событий
 * SoEvent -- Все события
 * SoButtonEvent -- Все события клавиш клавиатуры и мыши
 * SoLocation2Event -- события 2D перемещений (обычно движение мыши)
 * SoMotion3Event -- события 3D перемещений (обычно spaceball)
 * SoKeyboradEvent -- события нажатие и отпускание клавиш клавиатуры
 * SoMouseButtonEvent -- события нажатия и отпускания клавиш мыши
 * SoSpaceballButtonEvent -- события нажатия и отпускания клавиш spaceball

Python функции которые могут быть зарегистрированы в addEventCallback предлагающем словарь(dictionary). В зависимости от наблюдателя события словарь может содержать различные ключи. Для всех событий существуют ключи: Для всех клавишных событий, т.e. для событий клавиатуры, мыши или spaceball Для событий связанных с клавиатурой: Для событий связанных с мышью Для событий spaceball: и наконец события движения:
 * Type -- Имя типа события т.е. SoMouseEvent, SoLocation2Event, ...
 * Time -- текущие время в виде строки
 * Position -- набор из двух целых чисел как позиция курсорa мыши
 * ShiftDown -- логическая(boolean) переменная, true если Shift нажат, в противном случае false
 * CtrlDown -- логическая(boolean) переменная, true если Ctrl нажат, в противном случае false
 * AltDown -- логическая(boolean) переменная, true если Alt нажат, в противном случае false
 * State -- Строка 'UP' если кнопка была вверху, 'DOWN' если кнопка была внизу или 'UNKNOWN' во всех остальных случаях
 * Key -- значение нажатоой клаывиши
 * Button -- Нажаты клавиши, могут быть BUTTON1, ..., BUTTON5 или ANY
 * Button -- Нажатые клавиши, могут быть BUTTON1, ..., BUTTON7 или ANY
 * Translation -- набор из трех переменных floats
 * Rotation -- кватернион поворота, т.е. набор из четырех переменных floats

Display keys pressed and Events command
This macro displays in the report view the keys pressed and all events command

Манипулирование scenegraph в Python
Кроме того можно получить и изменить граф сцены в Python, с помощью модуля 'pivy' -- Python привязки к Coin.

Python API для pivy создано используя инструмент SWIG. Так как мы используем в FreeCAD некоторые самостоятельно записанные узлы вы не можете создавать их напрямую через Python. Однако, возможно создать узел в его внутренним именем. Экземпляр типа 'SoFCSelection' может быть создан

Добавление и удаление объектов в/из графа сцены
Добавление новых узлов в граф сцены(scenegraph) может сделать таким образом. Всегда заботтесь о добавлении SoSeparator содержащего информацию о геометрии, координатах и материалах объекта. В следующем примере добавляется красная линия из точки (0,0,0) в (10,0,0):

Чтобы удалить её, просто введите:

Добавление пользовательских виджетов к интерфейсу
Вы можете содать собственные виджеты с помощью Qt designer, превратив их в сценарии на python, с помощью PyQt4, и загрузив их в FreeCAD.

Python код созданный с помощью Ui python compiler (это инструмент для конвертирования файлов ui. созданных qt-designer в python код) в основном выглядит так (это простой пример, вы также может писать этот код напряму с помощью python):

Тогда все что вам нужно сделать, это создать ссылку на FreeCAD Qt окно, вставить виджет в него, и "преобразовать" этот виджет в ваш с Ui кодом который мы только что сделали:

Adding a Tab to the Combo View
The following code allows you to add a tab to the FreeCAD ComboView, besides the "Project" and "Tasks" tabs. It also uses the uic module to load an ui file directly in that tab.

Function resident with the mouse click action
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

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 "View Report" window (View > Views > View report)

Manual search of an element with label
PS: Usually the angles are given in Radian to convert :


 * 1) angle in Degrees to Radians :
 * 2) *Angle in radian = pi * (angle in degree) / 180
 * 3) *Angle in radian = math.radians(angle in degree)
 * 4) angle in Radians to Degrees :
 * 5) *Angle in degree = 180 * (angle in radian) / pi
 * 6) *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)

Other method display on "Int" and "Float"

Create one object to the position of the Camera
here same code simplified

Find 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