FeaturePython methods/ru: Difference between revisions
No edit summary |
No edit summary |
||
(10 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
==Введение== |
==Введение== |
||
Данная страница содержит справочные данные по доступным переопределяемым методам примененных в описаниях: [[Create_a_FeaturePython_object_part_I/ru|Create a FeaturePython object part I]] и [[Scripted_objects/ru|Программируемые объекты]]. |
|||
==Основная ссылка== |
|||
==Primary reference== |
|||
Указанные ниже методы в ~ 99% случаев применяются опытными пользователями proxy классов Python. |
|||
The below methods account for ~99% of the use-cases power-users may have for Python proxy classes. |
|||
{| class="wikitable" cellpadding="5px" width="100%" |
{| class="wikitable" cellpadding="5px" width="100%" |
||
|style="width:25%" | {{incode|execute(self, obj)}} |
|style="width:25%" | {{incode|execute(self, obj)}} |
||
|style="width:25%" | Вызывается во время перерасчета FeaturePython (или пересчета всего документа) |
|||
|style="width:25%" | Called during document recomputes |
|||
|style="width:50%" | |
|style="width:50%" | Не вызывайте {{incode|recompute()}} из этого метода (или любого метода, вызываемого из {{incode|execute()}}), поскольку это вызовет повторный пересчет, что может привести к зацикливанию. |
||
|- |
|- |
||
| {{incode|onBeforeChange(self, obj, prop)}} |
| {{incode|onBeforeChange(self, obj, prop)}} |
||
| Вызывается перед тем, как значение свойства будет изменено |
| Вызывается перед тем, как значение свойства будет изменено |
||
| {{incode|prop}} - |
| {{incode|prop}} - название изменяемого свойства, но не сам объект свойства. Изменение свойства не может быть отменено. Будущее/текущее значение свойства не доступны для сравнения одновременно. |
||
|- |
|- |
||
| {{incode|onChanged(self, obj, prop)}} |
| {{incode|onChanged(self, obj, prop)}} |
||
| Вызывается после |
| Вызывается после того, как значение свойства было изменено |
||
| {{incode|prop}} - |
| {{incode|prop}} - название свойства, которое подлежит изменению, но не сам объект свойства. |
||
|- |
|- |
||
| {{Incode|onDocumentRestored(self, obj)}} |
| {{Incode|onDocumentRestored(self, obj)}} |
||
Line 28: | Line 28: | ||
|} |
|} |
||
Нередко можно столкнуться с ситуацией, когда обратные вызовы (callbacks) Python запускаются не так, как следовало бы. Начинающие в этой области могут быть уверены, что система обратного вызова FeaturePython не является хрупкой или сломанной. Неизменно, когда обратные вызовы не выполняются, это происходит из-за того, что ссылка потеряна или не определена в базовом коде. Однако, если кажется, что обратные вызовы прерываются без объяснения причин, предоставление ссылок на объекты/proxy ссылки в обратном вызове {{incode|onDocumentRestored()}} (как указано в первой таблице выше) может облегчить эти проблемы. Пока вы не освоитесь с системой обратного вызова, может быть полезно добавлять инструкции вывода в консоль print() в каждый обратный вызов для вывода сообщений в консоль в процессе разработки. |
|||
It is not uncommon to encounter a situation where the Python callbacks are not being triggered as they should. Beginners in this area can rest assured that the FeaturePython callback system is not fragile or broken. Invariably when callbacks fail to run it is because a reference is lost or undefined in the underlying code. If, however, callbacks appear to be breaking with no explanation, providing object/proxy references in the {{incode|onDocumentRestored()}} callback (as noted in the first table above) may alleviate these problems. Until you are comfortable with the callback system, it may be useful to add print statements in each callback to print messages to the console during development. |
|||
==Дополнительные методы== |
==Дополнительные методы== |
||
Line 46: | Line 46: | ||
* onBeforeChangeLabel |
* onBeforeChangeLabel |
||
==Определение всех доступных Python методов== |
|||
==Determining available Python methods== |
|||
В случаях, когда документация к описываемому классу не актуализирована, вы можете самостоятельно определить какие методы доступны в нем , обратившись к исходному C++ коду. Например в [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L161-L351 классе шаблоне FeaturePython] перечислены различные вызовы, в виде: <code>imp-><название метода>()</code>. |
|||
Каждому из них соответствует аналогичный метод доступный в Python. |
|||
Each of these correspond to an available bound Python method. |
|||
К примеру, <code>imp->execute()</code> [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L193 в строке 193] означает, что <code>execute</code> метод доступен в Python коде. |
|||
Обратите внимание, что <code>getPyObject()</code> и <code>init()</code> являются особыми случаями и не подлежат подобному способу определения. |
|||
==Смотрите также== |
==Смотрите также== |
Latest revision as of 18:27, 5 December 2022
Введение
Данная страница содержит справочные данные по доступным переопределяемым методам примененных в описаниях: Create a FeaturePython object part I и Программируемые объекты.
Основная ссылка
Указанные ниже методы в ~ 99% случаев применяются опытными пользователями proxy классов Python.
execute(self, obj)
|
Вызывается во время перерасчета FeaturePython (или пересчета всего документа) | Не вызывайте recompute() из этого метода (или любого метода, вызываемого из execute() ), поскольку это вызовет повторный пересчет, что может привести к зацикливанию.
|
onBeforeChange(self, obj, prop)
|
Вызывается перед тем, как значение свойства будет изменено | prop - название изменяемого свойства, но не сам объект свойства. Изменение свойства не может быть отменено. Будущее/текущее значение свойства не доступны для сравнения одновременно.
|
onChanged(self, obj, prop)
|
Вызывается после того, как значение свойства было изменено | prop - название свойства, которое подлежит изменению, но не сам объект свойства.
|
onDocumentRestored(self, obj)
|
Вызывается после восстановления документа или копирования объекта FeaturePython. | Иногда ссылки на объект FeaturePython из класса или класс из объекта FeaturePython могут быть нарушены, так как класс __init__() метод не вызывается при реконструкции объекта. Добавление self.Object = obj или obj.Proxy = self как правило решает эти проблемы.
|
Нередко можно столкнуться с ситуацией, когда обратные вызовы (callbacks) Python запускаются не так, как следовало бы. Начинающие в этой области могут быть уверены, что система обратного вызова FeaturePython не является хрупкой или сломанной. Неизменно, когда обратные вызовы не выполняются, это происходит из-за того, что ссылка потеряна или не определена в базовом коде. Однако, если кажется, что обратные вызовы прерываются без объяснения причин, предоставление ссылок на объекты/proxy ссылки в обратном вызове onDocumentRestored()
(как указано в первой таблице выше) может облегчить эти проблемы. Пока вы не освоитесь с системой обратного вызова, может быть полезно добавлять инструкции вывода в консоль print() в каждый обратный вызов для вывода сообщений в консоль в процессе разработки.
Дополнительные методы
Приведенные ниже методы предназначены для продвинутого применения proxy классов Python, как правило в большинстве случаев они вам не понадобятся.
- mustExecute
- getViewProviderName
- getSubObject
- getSubObjects
- getLinkedObject
- hasChildElement
- isElementVisible
- canLinkProperties
- allowDuplicateLabel
- redirectSubName
- canLoadPartial
- onBeforeChangeLabel
Определение всех доступных Python методов
В случаях, когда документация к описываемому классу не актуализирована, вы можете самостоятельно определить какие методы доступны в нем , обратившись к исходному C++ коду. Например в классе шаблоне FeaturePython перечислены различные вызовы, в виде: imp-><название метода>()
.
Каждому из них соответствует аналогичный метод доступный в Python.
К примеру, imp->execute()
в строке 193 означает, что execute
метод доступен в Python коде.
Обратите внимание, что getPyObject()
и init()
являются особыми случаями и не подлежат подобному способу определения.
Смотрите также
- FreeCAD GitHub: FeaturePython.h - public API
- FreeCAD GitHub: FeaturePythonT template class
- FreeCAD Forum Discussion: Scripted Objects Complete Method Reference
- 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