LinkSubList

From FreeCAD Documentation
Jump to navigation Jump to search
This page is a translated version of the page LinkSubList and the translation is 100% complete.
Other languages:
English • ‎français • ‎italiano

Description

Une LinkSubList est une structure de données qui est utilisée comme une entrée pour diverses fonctions et objets. Son but est de transmettre un sous-objet ou un sous-élément (sommet, arête ou face) d'un objet à un autre objet qui utilisera ou transformera cette géométrie.

Un LinkSubList est composé d'une liste de tuples.

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

Chaque tuple contient au moins deux éléments. Le premier élément est une référence à un objet document et le deuxième élément est une chaîne de texte indiquant le nom interne du sous-élément. Ce nom a un numéro commençant par un et jusqu'au nombre total de ces sous-éléments.

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

Le deuxième élément du tuple peut lui-même être une liste de chaînes, indiquant divers sous-éléments du même objet document.

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

Il est possible de voir qu'une LinkSubList est une liste de LinkSub structures. Chaque tuple est en fait un LinkSub.

Script

Voir aussi: FreeCAD Script de base, LinkSub.

Un nouvel Objet créé par script peut accepter une LinkSubList en ajoutant la propriété correspondante.

Il est important de recalculer les objets avant que leurs sous-éléments ne soient utilisés comme entrée pour d'autres objets, sinon une erreur peut se produire car la géométrie peut ne pas contenir une Forme valide.

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

Le sous-élément peut ensuite être extrait de la propriété affectée et peut être manipulé pour faire quelque chose.

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