Struktura danych LinkSubList

From FreeCAD Documentation
This page is a translated version of the page LinkSubList and the translation is 100% complete.
Other languages:

Opis

LinkSubList to struktura danych, która jest używana jako wejście dla różnych funkcji i obiektów. Jej celem jest przekazanie obiektu podrzędnego lub elementu podrzędnego (wierzchołka, krawędzi lub ściany) z obiektu do innego obiektu, który będzie używał lub przekształcał tę geometrię.

Lista LinkSubList składa się z listy krotek.

sublist = [tuple1, tuple2, tuple3, ...]

Każda krotka zawiera co najmniej dwa elementy: pierwszy element to odwołanie do obiektu dokumentu, a drugi element to ciąg tekstowy wskazujący wewnętrzną nazwę elementu podrzędnego. Ta nazwa ma numer od jednego do całkowitej liczby tych elementów podrzędnych.

tuple1 = (obj1, "Vertex1")
tuple2 = (obj2, "Face1")
tuple3 = (obj3, "Edge1")

Drugi element krotki może być listą ciągów znaków, wskazujących różne elementy podrzędne tego samego obiektu dokumentu.

tuple1 = (obj1, ["Vertex1", "Vertex2"])
tuple2 = (obj2, ["Face1", "Face3", "Face5"])
tuple3 = (obj3, ["Vertex1", "Face5", "Edge1", "Edge2"])

Można zauważyć, że LinkSubList to lista struktur LinkSub. Każda krotka jest faktycznie obiektem LinkSub.

Tworzenie skryptów

Zapoznaj się z treścią: Podstawy tworzenia skryptów FreeCAD, LinkSub.

Nowy obiekt utworzony skryptem może przyjąć LinkSubList, dodając odpowiednią właściwość.

Przed użyciem elementów podrzędnych obiektów jako danych wejściowych dla innych obiektów ważne jest, aby ponownie obliczyć obiekty, w przeciwnym razie może wystąpić błąd, ponieważ geometria może nie zawierać prawidłowgo kształtu.

doc = App.newDocument()

cube = doc.addObject("Part::Box", "Cube")
cyl = doc.addObject("Part::Cylinder", "Cylinder")
doc.recompute()

new_obj = doc.addObject("App::FeaturePython", "New")

new_obj.addProperty("App::PropertyLinkSubList", "Geometry")
new_obj.Geometry = [(cube, ["Vertex1", "Vertex2"]),
                    (cyl, "Edge1")]
doc.recompute()

Element podrzędny można następnie wyodrębnić z przypisanej właściwości i można nim manipulować, aby coś zrobić.

>>> new_obj.Geometry
[(<Part::PartFeature>, ('Vertex1', 'Vertex2')), (<Part::PartFeature>, ('Edge1',))]

>>> new_obj.Geometry[0]
(<Part::PartFeature>, ('Vertex1', 'Vertex2'))

>>> new_obj.Geometry[0][1]
('Vertex1', 'Vertex2')

>>> new_obj.Geometry[0][1][1]
'Vertex2'

>>> new_obj.Geometry[0][1][1].strip("Vertex")
'2'

>>> int(new_obj.Geometry[0][1][1].strip("Vertex"))
2