LinkSub

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

Description

Une LinkSub 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 LinkSub est composé d'une liste de deux arguments.

sub = [argument1, argument2]

Le premier argument est une référence à un objet document et le second argument 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.

sub = [obj1, "Vertex1"]
sub = [obj2, "Face1"]
sub = [obj3, "Edge1"]

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

sub1 = [obj1, ["Vertex1", "Vertex2"]]
sub2 = [obj2, ["Face1", "Face3", "Face5"]]
sub3 = [obj3, ["Vertex1", "Face5", "Edge1", "Edge2"]]

Il est possible de voir qu'une LinkSubList est une liste de structures LinkSub.

Script

Voir aussi: FreeCAD Script de base, LinkSubList.

Un nouvel Objet créé par script peut accepter une LinkSub 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::PropertyLinkSub", "Geometry")
new_obj.Geometry = [cube, ["Vertex1", "Vertex2"]]

new_obj2 = doc.addObject("App::FeaturePython", "New")
new_obj2.addProperty("App::PropertyLinkSub", "Geometry")
new_obj2.Geometry = [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'])

>>> new_obj.Geometry[1]
['Vertex1', 'Vertex2']

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

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

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