PropertyLink: InList and OutList/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "Comme notre {{incode|box}} dépend de l'objet {{incode|dim}}, il sera recalculé.")
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>


Voir [[Property/fr|Properties]] avant de lire cette section.
Voir [[Property/fr|Propriétés des objets]] avant de lire cette section.


= PropertyLink =
= PropertyLink =


En plus des [[Propriété|Propriétés]] scalaires d'une fonction, les fonctions elles-mêmes contiennent des pointeurs les unes vers les autres.
En plus des [[Property/fr|Propriétés des objets]] scalaires d'une fonction, les fonctions elles-mêmes contiennent des pointeurs les unes vers les autres.
Ces pointeurs définissent un [https://fr.wikipedia.org/wiki/Graphe_orient%C3%A9_acyclique Graphe orienté acyclique] qui détermine l'ensemble et l'ordre des objets qui sont recalculés en réponse à la modification d'un objet. Seules les caractéristiques qui dépendent d'une fonction modifiée sont recalculées.
Ces pointeurs définissent un [https://fr.wikipedia.org/wiki/Graphe_orient%C3%A9_acyclique Graphe orienté acyclique] qui détermine l'ensemble et l'ordre des objets qui sont recalculés en réponse à la modification d'un objet. Seules les caractéristiques qui dépendent d'une fonction modifiée sont recalculées.


Line 69: Line 69:
Comme notre {{incode|box}} dépend de l'objet {{incode|dim}}, il sera recalculé.
Comme notre {{incode|box}} dépend de l'objet {{incode|dim}}, il sera recalculé.


= InList and OutList =
= InList et OutList =


{{incode|PropertyLink}} objects can be accessed using a Python property using the name that they are registered with using {{incode|.addObject()}}. However there is another way. Every feature has a pair of lazily-generated lists called {{incode|InList}} and {{incode|OutList}} that describe the outgoing and incoming edges of the DAG, respectively:
On peut accéder aux objets {{incode|PropertyLink}} à l'aide d'une propriété Python en utilisant le nom avec lequel ils sont enregistrés à l'aide de {{incode|.addObject()}}. Cependant, il existe un autre moyen. Chaque fonction possède une double liste générée simplement appelée {{incode|InList}} et {{incode|OutList}}, qui décrit les arêtes sortantes et entrantes du DAG, respectivement :


* An {{incode|InList}} is a list of all features that ''depend upon'' the current object. So, {{incode|dim.InList}} will be a list containing our {{incode|box}} object.
* Une liste {{incode|InList}} est une liste de toutes les fonctions qui ''dépendent'' de l'objet courant. Ainsi, {{incode|dim.InList}} sera une liste contenant notre objet {{incode|box}}.
* Similarly, an {{incode|OutList}} is a list of all features that ''are depended upon'' the current object. That is, {{incode|box.OutList}} will be a list containing our {{incode|dim}} object.
* De même, une liste {{incode|OutList}} est une liste de toutes les fonctions qui ''dépendent'' de l'objet courant. C'est-à-dire que {{incode|box.OutList}} sera une liste contenant notre objet {{incode|dim}}.


Note that {{incode|InList}} and {{incode|OutList}} have '''nothing''' to do with the tree view of the document model that is presented in the GUI. At any time, a parent in that tree view may contain children that are part of the {{incode|InList}}, the {{incode|OutList}}, or neither.
Remarquez que {{incode|InList}} et {{incode|OutList}} n'ont ''rien à voir'' avec l'arborescence du modèle de document qui est présentée dans l'interface graphique. À tout moment, un parent dans cette arborescence peut contenir des enfants qui font partie de la {{incode|InList}}, de la {{incode|OutList}} ou d'aucune des deux.

Latest revision as of 20:19, 7 July 2021

Other languages:

Voir Propriétés des objets avant de lire cette section.

PropertyLink

En plus des Propriétés des objets scalaires d'une fonction, les fonctions elles-mêmes contiennent des pointeurs les unes vers les autres. Ces pointeurs définissent un Graphe orienté acyclique qui détermine l'ensemble et l'ordre des objets qui sont recalculés en réponse à la modification d'un objet. Seules les caractéristiques qui dépendent d'une fonction modifiée sont recalculées.

Les dépendances sont exprimées par une classe spéciale de types de propriétés, à savoir les PropertyLink :

  • PropertyLink : permet à une caractéristique de se lier à une autre fonction unique dans le même document.
  • PropertyLinkList : permet à un élément de lier plusieurs éléments.
  • PropertyLinkSub : permet à un élément de lier un élément unique et de référencer des sous-éléments supplémentaires. Exemple : Si vous voulez modéliser une poche pour l'esquisse voulue, il est important de savoir sur quel sous-élément (par exemple, Face6) de la fonction liée elle doit être mappée.
  • PropertyLinkSubList : cela permet à une fonction de se lier à plusieurs sous-éléments de plusieurs fonctions.

Voici des propriétés similaires permettant de relier les fonctions de différents documents. C'est la partie essentielle pour les assemblages.

  • PropertyXLink
  • PropertyXLinkSub
  • PropertyXLinkSubList
  • PropertyXLinkList
  • PropertyXLinkContainer

Exemple

Considérons une classe BoxDimension qui fournit des dimensions de base pour une autre classe Box. Nous aimerions qu'un objet Box soit recalculé chaque fois que son BoxDimension associé est modifié :

import FreeCAD
import Part

class BoxDimension:
  def __init__(self, obj):
    obj.addProperty("App::PropertyLength", "Length").Length = 1
    obj.addProperty("App::PropertyLength", "Width").Width = 1
    obj.addProperty("App::PropertyLength", "Height").Height = 1
    obj.Proxy = self

class Box:
  def __init__(self, obj):
    obj.addProperty("App::PropertyLink", "Dimensions").Dimensions = None
    obj.Proxy = self
  def execute(self, obj):
    if obj.Dimensions is None:
      return
    l = obj.Dimensions.Length
    w = obj.Dimensions.Width
    h = obj.Dimensions.Height
    obj.Shape = Part.makeBox(l, w, h)

Remarquez que c'est un objet Box qui contient le PropertyLink de l'objet BoxDimension. L'utilisation est la suivante :

doc = App.newDocument()
dim = doc.addObject("App::FeaturePython", "BoxDimension")
box = doc.addObject("Part::FeaturePython", "Box")
dim_proxy = BoxDimension(dim)
box_proxy = Box(box)
box.ViewObject.Proxy = None
box.Dimensions = dim

dim.Length = 5
dim.Width = 3
dim.Height = 7
doc.recompute()

Comme notre box dépend de l'objet dim, il sera recalculé.

InList et OutList

On peut accéder aux objets PropertyLink à l'aide d'une propriété Python en utilisant le nom avec lequel ils sont enregistrés à l'aide de .addObject(). Cependant, il existe un autre moyen. Chaque fonction possède une double liste générée simplement appelée InList et OutList, qui décrit les arêtes sortantes et entrantes du DAG, respectivement :

  • Une liste InList est une liste de toutes les fonctions qui dépendent de l'objet courant. Ainsi, dim.InList sera une liste contenant notre objet box.
  • De même, une liste OutList est une liste de toutes les fonctions qui dépendent de l'objet courant. C'est-à-dire que box.OutList sera une liste contenant notre objet dim.

Remarquez que InList et OutList n'ont rien à voir avec l'arborescence du modèle de document qui est présentée dans l'interface graphique. À tout moment, un parent dans cette arborescence peut contenir des enfants qui font partie de la InList, de la OutList ou d'aucune des deux.