LinkSubList

From FreeCAD Documentation
Revision as of 20:01, 1 October 2020 by David69 (talk | contribs) (Created page with "Un nouvel Objet créé par script peut accepter une LinkSubList en ajoutant la propriété correspondante.")
Other languages:

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 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 plusieurs sous-éléments en même temps.

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

Script

Voir aussi: FreeCAD Script de base.

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

doc = App.newDocument()

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

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

new_obj.addProperty("App::PropertyLinkSubList", "Geometry")
new_obj.Geometry = [(cube, ["Face1", "Face2"]),
                    (cyl, "Edge1")]

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