FeaturePython methods/ru: Difference between revisions

From FreeCAD Documentation
(Created page with "===Смотрите также===")
No edit summary
 
(13 intermediate revisions by the same user not shown)
Line 5: Line 5:
==Введение==
==Введение==


This page serves as a reference for the available overridable methods on [[Create_a_FeaturePython_object_part_I|Create a FeaturePython object part I]] or [[Scripted_objects|Scripted objects]].
Данная страница содержит справочные данные по доступным переопределяемым методам примененных в описаниях: [[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%" | Do not call {{incode|recompute()}} from this method (or any method called from {{incode|execute()}}) as this causes a nested recompute.
|style="width:50%" | Не вызывайте {{incode|recompute()}} из этого метода (или любого метода, вызываемого из {{incode|execute()}}), поскольку это вызовет повторный пересчет, что может привести к зацикливанию.
|-
|-
| {{incode|onBeforeChange(self, obj, prop)}}
| {{incode|onBeforeChange(self, obj, prop)}}
| Вызывается перед тем, как значение свойства будет изменено
| Called before a property value is changed
| {{incode|prop}} - название изменяемого свойства, но не сам объект свойства. Изменение свойства не может быть отменено. Будущее/текущее значение свойства не доступны для сравнения одновременно.
| {{incode|prop}} is the name of the property to be changed, not the property object itself. Property changes cannot be cancelled. Previous / next property values are not simultaneously available for comparison.
|-
|-
| {{incode|onChanged(self, obj, prop)}}
| {{incode|onChanged(self, obj, prop)}}
| Вызывается после того, как значение свойства было изменено
| Called after a property is changed
| {{incode|prop}} - название свойства, которое подлежит изменению, но не сам объект свойства.
| {{incode|prop}} is the name of the property to be changed, not the property object itself.
|-
|-
| {{Incode|onDocumentRestored(self, obj)}}
| {{Incode|onDocumentRestored(self, obj)}}
| Вызывается после восстановления документа или копирования объекта FeaturePython.
| Called after a document is restored or a FeaturePython object is copied.
| Occasionally, references to the FeaturePython object from the class, or the class from the FeaturePython object may be broken, as the class {{incode|__init__()}} method is not called when the object is reconstructed. Adding {{incode|self.Object <nowiki>=</nowiki> obj}} or {{incode|obj.Proxy <nowiki>=</nowiki> self}} often solves these issues.
| Иногда ссылки на объект FeaturePython из класса или класс из объекта FeaturePython могут быть нарушены, так как класс {{incode|__init__()}} метод не вызывается при реконструкции объекта. Добавление {{incode|self.Object <nowiki>=</nowiki> obj}} или {{incode|obj.Proxy <nowiki>=</nowiki> self}} как правило решает эти проблемы.
|}
|}


Нередко можно столкнуться с ситуацией, когда обратные вызовы (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.


==Дополнительные методы==
==Additional methods==
Приведенные ниже методы предназначены для '''продвинутого''' применения proxy классов Python, как правило в большинстве случаев они вам не понадобятся.
The below methods are for '''advanced''' usage of Python proxy classes and you won't have a need for them most of the time.


* mustExecute
* mustExecute
Line 46: Line 46:
* onBeforeChangeLabel
* onBeforeChangeLabel


==Определение всех доступных Python методов==
==Determining available Python methods==
Within the [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L161-L351 FeaturePython Template Class] exists various <code>imp-><method name>()</code> calls.
В случаях, когда документация к описываемому классу не актуализирована, вы можете самостоятельно определить какие методы доступны в нем , обратившись к исходному 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.


For example, <code>imp->execute()</code> [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L193 on line 193] means the <code>execute</code> method is available.
К примеру, <code>imp->execute()</code> [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L193 в строке 193] означает, что <code>execute</code> метод доступен в Python коде.


Note, <code>getPyObject()</code> and <code>init()</code> are special-cases and don't follow the above heuristic.
Обратите внимание, что <code>getPyObject()</code> и <code>init()</code> являются особыми случаями и не подлежат подобному способу определения.


===Смотрите также===
==Смотрите также==


* [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L44-L86 FreeCAD GitHub: FeaturePython.h - public API]
* [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L44-L86 FreeCAD GitHub: FeaturePython.h - public API]

Latest revision as of 18:27, 5 December 2022

Other languages:

Введение

Данная страница содержит справочные данные по доступным переопределяемым методам примененных в описаниях: 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() являются особыми случаями и не подлежат подобному способу определения.

Смотрите также