PropertyLink: InList and OutList/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "Oprócz skalarnych Properties cech, same cechy zawierają wskaźniki do siebie nawzajem. 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 są ponownie obliczane w odpowiedzi na zmianę w jednym obiekcie. Ponownie obliczane są tylko te funkcje, które zależą od zmienionej funkcji.")
(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.")
 
(9 intermediate revisions by the same user not shown)
Line 4: Line 4:


<span id="PropertyLink"></span>
<span id="PropertyLink"></span>
=PropertyLink=
=LinkWłaściwości=


Oprócz skalarnych [[Property/pl|Properties]] cech, same cechy zawierają wskaźniki do siebie nawzajem.
Oprócz skalarnych [[Property/pl|Properties]] cech, same cechy zawierają wskaźniki do siebie nawzajem.
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 są ponownie obliczane w odpowiedzi na zmianę w jednym obiekcie. Ponownie obliczane są tylko te funkcje, które zależą od zmienionej funkcji.
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 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:
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 25: 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 51: 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 69: 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.