Last active
August 29, 2015 14:10
-
-
Save jirihnidek/bf0a8cb6bb2f306a39a7 to your computer and use it in GitHub Desktop.
Blender Python API: Example of BMesh layers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import bpy | |
import bmesh | |
def element_id_layer(bm, elems, id_name): | |
""" | |
This function will create/print verts/edges/faces layer | |
""" | |
# Try to get layer of elem IDs | |
elems_iter = getattr(bm, elems) | |
lay = elems_iter.layers.int.get(id_name) | |
if lay is not None: | |
print('Layer ', id_name, ' exist') | |
# Print values in layer | |
for elem in elems_iter: | |
print(elem[lay], elem.tag) | |
else: | |
print('Creating layer ', id_name) | |
# Set values in layer | |
lay = elems_iter.layers.int.new(id_name) | |
# NEW: values will not be copied | |
lay.use_force_default = True | |
# NEW: it is possible to set default value | |
lay.default_value = -1 | |
for elem in elems_iter: | |
elem[lay] = elem.index | |
elem.tag = True | |
print(elem[lay], elem.tag) | |
def update_layers(): | |
""" | |
This function update (add) layers to active mesh object | |
""" | |
obj = bpy.context.active_object | |
mesh = obj.data | |
edit_obj = bpy.context.edit_object | |
if edit_obj is None: | |
bm = bmesh.new() | |
bm.from_mesh(mesh) | |
elif obj == edit_obj and edit_obj.type == 'MESH': | |
bm = bmesh.from_edit_mesh(mesh) | |
else: | |
pass | |
element_id_layer(bm, 'verts', 'VertIDs') | |
element_id_layer(bm, 'edges', 'EdgeIDs') | |
element_id_layer(bm, 'faces', 'FaceIDs') | |
if edit_obj is None: | |
bm.to_mesh(mesh) | |
bm.free() | |
if __name__ == '__main__': | |
update_layers() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This example requires this patch: https://developer.blender.org/T42865