Skip to main content
added 209 characters in body
Source Link
David Jeske
  • 406
  • 2
  • 11

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() # if we're in edit mode, there is already a BMesh available, else make one if bpy.context.mode == 'EDIT_MESH': bm.from_edit_mesh(ob.data) else: bm.from_mesh(ob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # save our edits if bpy.context.mode == 'EDIT_MESH': bm.updated_edit_mesh(ob.data) else: bm.to_mesh(ob.data) bm.free() 

At some point, you'll probably want to iterate selected faces, like this:

for f in bm.faces: if f.select: print(f.index) 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

See also:

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() # if we're in edit mode, there is already a BMesh available, else make one if bpy.context.mode == 'EDIT_MESH': bm.from_edit_mesh(ob.data) else: bm.from_mesh(ob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # save our edits if bpy.context.mode == 'EDIT_MESH': bm.updated_edit_mesh(ob.data) else: bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

See also:

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() # if we're in edit mode, there is already a BMesh available, else make one if bpy.context.mode == 'EDIT_MESH': bm.from_edit_mesh(ob.data) else: bm.from_mesh(ob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # save our edits if bpy.context.mode == 'EDIT_MESH': bm.updated_edit_mesh(ob.data) else: bm.to_mesh(ob.data) bm.free() 

At some point, you'll probably want to iterate selected faces, like this:

for f in bm.faces: if f.select: print(f.index) 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

See also:

added 209 characters in body
Source Link
David Jeske
  • 406
  • 2
  • 11

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() bm.from_mesh(ob.data)  # if the mesh is alreadywe're in edit mode, you shouldthere eitheris forcealready toggle #a outBMesh ofavailable, editelse modemake withone if bpy.ops.objectcontext.mode_set(mode='OBJECT'),mode or== 'EDIT_MESH': # access the existing bmesh data using bmeshbm.from_edit_mesh(meshob.data) and #else: then save your edits with bmesh bm.updated_edit_meshfrom_mesh(meshob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # endsave editingour edits if bpy.context.mode == 'EDIT_MESH': bm.updated_edit_mesh(ob.data) else: bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

See also:

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() bm.from_mesh(ob.data)  # if the mesh is already in edit mode, you should either force toggle # out of edit mode with bpy.ops.object.mode_set(mode='OBJECT'), or # access the existing bmesh data using bmesh.from_edit_mesh(mesh) and # then save your edits with bmesh.updated_edit_mesh(mesh) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # end editing.. bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() # if we're in edit mode, there is already a BMesh available, else make one if bpy.context.mode == 'EDIT_MESH': bm.from_edit_mesh(ob.data) else:  bm.from_mesh(ob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # save our edits if bpy.context.mode == 'EDIT_MESH': bm.updated_edit_mesh(ob.data) else: bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

See also:

added 329 characters in body
Source Link
David Jeske
  • 406
  • 2
  • 11

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() bm.from_mesh(ob.data) # if the mesh is already in edit mode, you should either force toggle # out of edit mode with bpy.ops.object.mode_set(mode='OBJECT'), or # access the existing bmesh data using bmesh.from_edit_mesh(mesh) and # then save your edits with bmesh.updated_edit_mesh(mesh) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # end editing.. bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object bm = bmesh.new() bm.from_mesh(ob.data) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # end editing.. bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

The Blender BMesh Python API supports custom-data-layers per vert/edge/face/loop. Per face, it only supports the types (float, int, string, tex), so you'll have to make your own vectors and colors out of floats.

The code would be something like:

import bpy import bmesh ob = bpy.context.object # create a bmesh editing context... bm = bmesh.new() bm.from_mesh(ob.data) # if the mesh is already in edit mode, you should either force toggle # out of edit mode with bpy.ops.object.mode_set(mode='OBJECT'), or # access the existing bmesh data using bmesh.from_edit_mesh(mesh) and # then save your edits with bmesh.updated_edit_mesh(mesh) # Make the layers.. tag_number = bm.faces.layers.integer.new('number_tag') tag_vector_x = bm.faces.layers.float.new('vector_tag_x') tag_vector_y = bm.faces.layers.float.new('vector_tag_y') tag_vector_z = bm.faces.layers.float.new('vector_tag_z') tag_color_r = bm.faces.layers.float.new('color_tag_r') tag_color_g = bm.faces.layers.float.new('color_tag_g') tag_color_b = bm.faces.layers.float.new('color_tag_b') # fetch the layers tag_number = bm.faces.layers.integer.get('number_tag') tag_vector_x = bm.faces.layers.float.get('vector_tag_x') tag_vector_y = bm.faces.layers.float.get('vector_tag_y') tag_vector_z = bm.faces.layers.float.get('vector_tag_z') tag_color_r = bm.faces.layers.float.get('color_tag_r') tag_color_g = bm.faces.layers.float.get('color_tag_g') tag_color_b = bm.faces.layers.float.get('color_tag_b') # set the tag value for a particular face bm.edges[face_no][tag_number] = new_number_tag_value # retrieve the value for a particular face my_number_tag_value = bm.faces[face_no][tag_number] # end editing.. bm.to_mesh(ob.data) bm.free() 

I don't know if the collada exporter does anything with this custom BMesh data. If not, you'll either need to extend it, or write your own exporter.

Post Undeleted by David Jeske
added 1447 characters in body
Source Link
David Jeske
  • 406
  • 2
  • 11
Loading
Post Deleted by David Jeske
Source Link
David Jeske
  • 406
  • 2
  • 11
Loading