[Bf-python] BMesh API
Treyer Lukas
treyer at arch.ethz.ch
Wed Apr 24 11:57:58 CEST 2013
Dear mailing list readers
For some reason the only doc I found yesterday on google about custom layers was "blah blah" in the the BMesh API<http://www.blender.org/documentation/blender_python_api_2_63_5/bmesh.types.html#bmesh.types.BMVertSeq.layers>.
Now with the the help of CoDEmanX, I discovered custom layers in Bmesh.
Just for clarification for "dumb" readers like me (an extension to the BMesh API Doc<http://www.blender.org/documentation/blender_python_api_2_63_2/bmesh.html#customdata-access>):
bm.verts, bm.edges, bm.faces are not just a lists but they are of type
bmesh.types.BMVertSeq, bmesh.types.BMEdgeSeq, bmesh.types.BMFaceSeq
The access to custom data of a vert for instance is implemented in bmesh.types.BMVert
and bmesh.types.VertSeq together.
Let's say you want to store the coordinates of a bounding box of a BMFace.
What I wanted to do in the first place was:
bm.faces[0].b_rect = [vmax,vmin,hmax,hmin]
Now with layers it looks a bit different:
bm.faces[0][b_rect] = "we will come to the bounding box later"
Note that the following will not work:
bm.faces[0]['b_rect'] = "something"
The layer needs to be accessed with the key generated by the face sequence as follows:
key = bm.faces.layers.int.new("b_rect")
bm.faces[0][key] #read/write access
You can retrieve the key by typing:
key = bm.faces.layers.int['b_rect']
Now what Campbell suggested to my problem was storing my complex data in a list and adding the index of the data in that list to my face as an int layer:
MyData = []
MyData.append([vmax,vmin,hmax,hmin])
index = len(MyData)-1
bm.faces[0][b_rect] = index
I still hope that at some point I could extend the wrapper classes directly to store my data.
Best, Lukas
More information about the Bf-python
mailing list