Code snippets/ru

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

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

top

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

top

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

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

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

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

top

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

top

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

top

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

top

Добавление полигональной сетки
top

Добавление дуги или окружности
top

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

top

Replace the form of mouse with one image
top

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  "}"

top

Наблюдение за поведением мыши в трёхмерном окне через Python
Оболочка Inventor позволяет добавить один и более узлов обратного вызова (callback) в дерево сцен просмотрщика. По умолчанию, в FreeCAD на каждый просмотрщик установлен один узел обратного вызова, который позволяет добавить глобальные или статические функции C++. В соответствующих привязках Python предоставляются некоторые методы, позволяющие использовать эту технику из кода 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

top

Показать нажатые клавиши и команды Событий
Этот макрос отображает в отчете нажатия клавиш и команды всех событий

top

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

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

top

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

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

top

Сохранить sceneGraph в 3 сериях из 36 файлов
Просмотрите фрагмент кода, развернув этот раздел.

top

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

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

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

top

Добавить вкладку в Combo View
Следующий код позволяет добавить вкладку к Combo view отдельно от уже существующих вкладок «Модель» и «Задачи». Он также использует модуль для загрузки файла пользовательского интерфейса прямо на этой вкладке.

top

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

top

Open a custom webpage
top

Get the HTML contents of an opened webpage
top

Retrieve the coordinates of 3 selected points or objects
top

List all objects
top

List the dimensions of an object, given its name
top

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

Other example with ViewObserver on a object select or view

top

Find/select all elements below the cursor
top

Перечисление компонентов объекта
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

top

List the PropertiesList
top

Add a single Property Comment
top

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)

top

Manual search of an element with label
Note: Usually the angles are given in Radian. To convert them:


 * 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)

top

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"

top

Select all objects in the document
top

Select a face of an object by Name object and Face number
top

Get the normal vector of a face of an object by Name object and number Face (r.Q)
top

Get the normal vector of a face of an object by Name object and number of Face
top

Get the normal vector of an object selected and number of Face
top

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

top

Get the normal vector of a surface from a STL file
top

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

top

Read And write one Expression
you are done then run for quit:

top

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.

top

How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.

If you have a 3d point and want to get the 2d point on the opengl widget then use this:

top

Related

 * Scripted objects
 * Macros

top