Struktura danych LinkSubList
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ść.
It is important to recompute the objects before their subelements are used as input for other objects, otherwise an error may be produced as the geometry may not contain a valid Shape.
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()
The subelement can then be extracted from the assigned property, and can be manipulated to do something.
>>> 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
- Tworzenie skryptów FreeCAD: Python, Wprowadzenie do środowiska Python, Poradnik: Tworzenie skryptów Python, Podstawy tworzenia skryptów FreeCAD
- Moduły: Moduły wbudowane, Jednostki miar, Ilość
- Środowiska pracy: Tworzenie Środowiska pracy, Polecenia Gui, Polecenia, Instalacja większej liczby Środowisk pracy
- Siatki i elementy: Skrytpy w Środowisku Siatek, v, Konwerska Mesh na Part, PythonOCC
- Obiekty parametryczne: Obiekty tworzone skryptami, Obsługa obrazu (Ikonka niestandardowa w widoku drzewa)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Interfejs graficzny: Stworzenie interfejsu, Kompletne stworzenie interfejsu w środowisku Python (1, 2, 3, 4, 5), PySide, PySide examples początkujący, średniozaawansowany, zaawansowany
- Makrodefinicje: Makrodefinicje, Instalacja makrodefinicji
- Osadzanie programu: Osadzanie programu FreeCAD, Osadzanie GUI FreeCAD
- Pozostałe: Wyrażenia, Wycinki kodu, Funkcja kreślenia linii, Biblioteka matematyczna FreeCAD dla wektorów (deprecated)
- Węzły użytkowników: Centrum użytkownika, Centrum Power użytkowników, Centrum programisty