PropertyLink: InList and OutList/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "==Przykład==")
(Created page with "Zauważ, że {{incode|InList}} i {{incode|OutList}} nie mają nic wspólnego z widokiem drzewa modelu dokumentu, który jest prezentowany w GUI. W dowolnym momencie rodzic w tym widoku drzewa może zawierać dzieci, które są częścią {{incode|InList}}, {{incode|OutList}} lub żadnego z nich.")
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>


See [[Property|Properties]] before this section.
Zobacz artykuł [[Property/pl|Właściwości]] przed sekcją.


= PropertyLink =
<span id="PropertyLink"></span>
=PropertyLink=


In addition to the scalar [[Property|Properties]] of an feature, the features themselves contain pointers to one another.
Oprócz skalarnych [[Property/pl|Properties]] cech, same cechy zawierają wskaźniki do siebie nawzajem.
These pointers define a [https://en.wikipedia.org/wiki/Directed_acyclic_graph directed acyclic graph] that determines the set and ordering of objects that are recomputed in response to a change in one object. Only those features that depend on a changed feature are recomputed.
Wskaźniki te definiują [https://en.wikipedia.org/wiki/Directed_acyclic_graph skierowany graf acykliczny], który określa zbiór i kolejność obiektów, które ponownie obliczane w odpowiedzi na zmianę w jednym obiekcie. Ponownie obliczane tylko te funkcje, które zależą od zmienionej funkcji.


Zależności są wyrażane za pomocą specjalnej klasy typów właściwości, a mianowicie PropertyLink:
The dependencies are expressed via a special class of Property types, namely the PropertyLink:
* PropertyLink: this allows a feature to link to another single feature within the same document.
* PropertyLink: umożliwia powiązanie elementu z innym pojedynczym elementem w tym samym dokumencie.
* PropertyLinkList: this allows a feature to link several features
* PropertyLinkList: pozwala elementowi na powiązanie kilku elementów
* PropertyLinkSub: pozwala elementowi łączyć pojedynczy element i dodatkowo odwoływać się do elementów podrzędnych. Przykład: Jeśli chcesz zamodelować kieszeń na potrzeby szkicu, ważne jest, aby wiedzieć, do którego elementu podrzędnego (np. Face6) powiązanego elementu należy ją zmapować.
* PropertyLinkSub: this allows a feature to link a single feature and additionally reference sub-elements. Example: If you want to model a pocket for the needed sketch, then it's important to know on which sub-element (e.g. Face6) of the linked feature it must be mapped to.
* PropertyLinkSubList: this allows a feature to link to several sub-elements of several features.
* PropertyLinkSubList: umożliwia powiązanie elementu z kilkoma elementami podrzędnymi kilku elementów.


Poniżej znajdują się podobne właściwości do łączenia cech różnych dokumentów. Jest to podstawowa część dla złożeń.
The following are similar properties for linking features of different documents. This is the core part for assemblies.
* PropertyXLink
* PropertyXLink
* PropertyXLinkSub
* PropertyXLinkSub
Line 24: Line 25:
==Przykład==
==Przykład==


Consider a class {{incode|BoxDimension}} that provides basic dimensions for another class {{incode|Box}}. We would like a {{incode|Box}} object to be recomputed whenever its associated {{incode|BoxDimension}} is changed:
Rozważmy klasę {{incode|BoxDimension}}, która zapewnia podstawowe wymiary dla innej klasy {{incode|Box}}. Chcielibyśmy, aby obiekt {{incode|Box}} był ponownie obliczany za każdym razem, gdy zmieni się powiązany z nim {{incode|BoxDimension}}:


{{Code|code=
{{Code|code=
Line 50: Line 51:
}}
}}


Note that it is a {{incode|Box}} object that contains the PropertyLink to the {{incode|BoxDimension}} object.
Należy pamiętać, że jest to obiekt {{incode|Box}}, który zawiera PropertyLink do obiektu {{incode|BoxDimension}}.
Użycie jest następujące:
Usage is as follows:


{{Code|code=
{{Code|code=
Line 68: Line 69:
}}
}}


Because our {{incode|box}} depends on the {{incode|dim}} object, it will be recomputed.
Ponieważ nasz {{incode|box}} zależy od obiektu {{incode|dim}}, zostanie on ponownie obliczony.


<span id="InList_and_OutList"></span>
= InList and OutList =
=Lista wejściowa i lista wyjściowa=


{{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:
Dostęp do obiektów {{incode|PropertyLink}} można uzyskać za pomocą właściwości Python przy użyciu nazwy, pod którą zarejestrowane za pomocą {{incode|.addObject()}}. Istnieje jednak inny sposób. Każda funkcja ma parę leniwie generowanych list o nazwach {{incode|InList}} i {{incode|OutList}}, które opisują odpowiednio wychodzące i przychodzące krawędzie DAG:


* 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.
* {{incode|InList}} jest listą wszystkich funkcji, które "zależą" od bieżącego obiektu. Tak więc {{incode|dim.InList}} będzie listą zawierającą nasz obiekt {{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.
* Podobnie, {{incode|OutList}} jest listą wszystkich funkcji, które "zależą" od bieżącego obiektu. Oznacza to, że {{incode|box.OutList}} będzie listą zawierającą nasz obiekt {{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.
Zauważ, że {{incode|InList}} i {{incode|OutList}} nie mają nic wspólnego z widokiem drzewa modelu dokumentu, który jest prezentowany w GUI. W dowolnym momencie rodzic w tym widoku drzewa może zawierać dzieci, które częścią {{incode|InList}}, {{incode|OutList}} lub żadnego z nich.

Latest revision as of 14:30, 30 October 2023

Other languages:

Zobacz artykuł Właściwości przed tą sekcją.

PropertyLink

Oprócz skalarnych Properties cech, same cechy zawierają wskaźniki do siebie nawzajem. Wskaźniki te definiują skierowany graf acykliczny, który określa zbiór i kolejność obiektów, które są ponownie obliczane w odpowiedzi na zmianę w jednym obiekcie. Ponownie obliczane są tylko te funkcje, które zależą od zmienionej funkcji.

Zależności są wyrażane za pomocą specjalnej klasy typów właściwości, a mianowicie PropertyLink:

  • PropertyLink: umożliwia powiązanie elementu z innym pojedynczym elementem w tym samym dokumencie.
  • PropertyLinkList: pozwala elementowi na powiązanie kilku elementów
  • PropertyLinkSub: pozwala elementowi łączyć pojedynczy element i dodatkowo odwoływać się do elementów podrzędnych. Przykład: Jeśli chcesz zamodelować kieszeń na potrzeby szkicu, ważne jest, aby wiedzieć, do którego elementu podrzędnego (np. Face6) powiązanego elementu należy ją zmapować.
  • PropertyLinkSubList: umożliwia powiązanie elementu z kilkoma elementami podrzędnymi kilku elementów.

Poniżej znajdują się podobne właściwości do łączenia cech różnych dokumentów. Jest to podstawowa część dla złożeń.

  • PropertyXLink
  • PropertyXLinkSub
  • PropertyXLinkSubList
  • PropertyXLinkList
  • PropertyXLinkContainer

Przykład

Rozważmy klasę BoxDimension, która zapewnia podstawowe wymiary dla innej klasy Box. Chcielibyśmy, aby obiekt Box był ponownie obliczany za każdym razem, gdy zmieni się powiązany z nim BoxDimension:

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)

Należy pamiętać, że jest to obiekt Box, który zawiera PropertyLink do obiektu BoxDimension. Użycie jest następujące:

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

Ponieważ nasz box zależy od obiektu dim, zostanie on ponownie obliczony.

Lista wejściowa i lista wyjściowa

Dostęp do obiektów PropertyLink można uzyskać za pomocą właściwości Python przy użyciu nazwy, pod którą są zarejestrowane za pomocą .addObject(). Istnieje jednak inny sposób. Każda funkcja ma parę leniwie generowanych list o nazwach InList i OutList, które opisują odpowiednio wychodzące i przychodzące krawędzie DAG:

  • InList jest listą wszystkich funkcji, które "zależą" od bieżącego obiektu. Tak więc dim.InList będzie listą zawierającą nasz obiekt box.
  • Podobnie, OutList jest listą wszystkich funkcji, które "zależą" od bieżącego obiektu. Oznacza to, że box.OutList będzie listą zawierającą nasz obiekt dim.

Zauważ, że InList i OutList nie mają nic wspólnego z widokiem drzewa modelu dokumentu, który jest prezentowany w GUI. W dowolnym momencie rodzic w tym widoku drzewa może zawierać dzieci, które są częścią InList, OutList lub żadnego z nich.