PropertyLink: InList and OutList/pl: Difference between revisions
(Created page with "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}}:") |
(Created page with "Należy pamiętać, że jest to obiekt {{incode|Box}}, który zawiera PropertyLink do obiektu {{incode|BoxDimension}}. Użycie jest następujące:") |
||
Line 51: | Line 51: | ||
}} |
}} |
||
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: | ||
}} |
}} |
||
Ponieważ nasz {{incode|Box}} zależy od obiektu {{incode|dim}}, zostanie on ponownie obliczony. |
|||
= InList and OutList = |
= InList and OutList = |
Revision as of 14:27, 30 October 2023
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.
InList and OutList
PropertyLink
objects can be accessed using a Python property using the name that they are registered with using .addObject()
. However there is another way. Every feature has a pair of lazily-generated lists called InList
and OutList
that describe the outgoing and incoming edges of the DAG, respectively:
- An
InList
is a list of all features that depend upon the current object. So,dim.InList
will be a list containing ourbox
object. - Similarly, an
OutList
is a list of all features that are depended upon the current object. That is,box.OutList
will be a list containing ourdim
object.
Note that InList
and 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 InList
, the OutList
, or neither.