LinkSubList: Difference between revisions
(The second element of the tuple can itself be a list of strings, indicating various subelements of the same document object.) |
(It is possible to see that a LinkSubList is a list of LinkSub structures. Each tuple is in fact a LinkSub.) |
||
Line 34: | Line 34: | ||
}} |
}} |
||
<translate> |
<translate> |
||
It is possible to see that a [[LinkSubList|LinkSubList]] is a list of [[LinkSub|LinkSub]] structures. Each tuple is in fact a [[LinkSub|LinkSub]]. |
|||
== Scripting == <!--T:6--> |
== Scripting == <!--T:6--> |
Revision as of 23:36, 1 October 2020
Description
A LinkSubList is a data structure that is used as input to various functions and objects; its purpose is to pass a subobject or subelement (vertex, edge, or face) from an object to another object that will use or transform that geometry.
A LinkSubList is composed of a list of tuples.
sublist = [tuple1, tuple2, tuple3, ...]
Each tuple contains at least two elements; the first element is a reference to a document object, and the second element is a text string indicating the internal name of the subelement. This name has a number starting with one, and up to the total number of those subelements.
tuple1 = (obj1, "Vertex1")
tuple2 = (obj2, "Face1")
tuple3 = (obj3, "Edge1")
The second element of the tuple can itself be a list of strings, indicating various subelements of the same document object.
tuple1 = (obj1, ["Vertex1", "Vertex2"])
tuple2 = (obj2, ["Face1", "Face3", "Face5"])
tuple3 = (obj3, ["Vertex1", "Face5", "Edge1", "Edge2"])
It is possible to see that a LinkSubList is a list of LinkSub structures. Each tuple is in fact a LinkSub.
Scripting
See also: FreeCAD Scripting Basics.
A new scripted object can accept a LinkSubList by adding the corresponding property.
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
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub