LinkSubList/fr: Difference between revisions

From FreeCAD Documentation
No edit summary
(Created page with "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éo...")
 
(3 intermediate revisions by the same user not shown)
Line 17: Line 17:
}}
}}


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.
<div class="mw-translate-fuzzy">
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.
</div>
{{Code|code=
{{Code|code=
tuple1 = (obj1, ["Vertex1", "Vertex2"])
tuple1 = (obj1, ["Vertex1", "Vertex2"])
Line 26: Line 24:
}}
}}


It is possible to see that a [[LinkSubList|LinkSubList]] is a list of [[LinkSub|LinkSub]] structures. Each tuple is in fact a [[LinkSub|LinkSub]].
Il est possible de voir qu'une [[LinkSubList/fr|LinkSubList]] est une liste de [[LinkSub/fr|LinkSub]] structures. Chaque tuple est en fait un [[LinkSub/fr|LinkSub]].


== Script ==
== Script ==


{{Emphasis|Voir aussi:}} [[FreeCAD_Scripting_Basics/fr|FreeCAD Script de base]], [[LinkSub/fr|LinkSub]].
<div class="mw-translate-fuzzy">
{{Emphasis|Voir aussi:}} [[FreeCAD_Scripting_Basics/fr|FreeCAD Script de base]].
</div>


Un nouvel [[scripted_objects/fr|Objet créé par script]] peut accepter une LinkSubList en ajoutant la [[property/fr|propriété]] correspondante.
Un nouvel [[scripted_objects/fr|Objet créé par script]] peut accepter une LinkSubList en ajoutant la [[property/fr|propriété]] correspondante.


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 [[Part_TopoShape|Shape]].
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 [[Part_TopoShape/fr|Forme]] valide.


{{Code|code=
{{Code|code=

Latest revision as of 16:44, 2 October 2020

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