import bpy, bmesh, bpy_extras from bpy import context as C from mathutils import Vector # --------------------------------------------------------------------- # split mesh into sections # --------------------------------------------------------------------- # matrix world inverse mwi = C.object.matrix_world.inverted() bpy.ops.object.mode_set(mode='EDIT') bm = bmesh.from_edit_mesh(C.object.data) geom = bm.verts[:] + bm.edges[:] + bm.faces[:] for i in range(-1000, 1000, 20): j = mwi * Vector((0, 0, i)) ret = bmesh.ops.bisect_plane(bm, geom=geom, plane_co=j, plane_no=(0,0,1)) bmesh.ops.split_edges(bm, edges=[e for e in ret['geom_cut'] if isinstance(e, bmesh.types.BMEdge)]) bmesh.update_edit_mesh(C.object.data) bpy.ops.mesh.separate(type='LOOSE') bpy.ops.object.mode_set(mode='OBJECT') # --------------------------------------------------------------------- # Select n random points on mesh surface # --------------------------------------------------------------------- # returns: a list of vectors obj = bpy.context.object #Gets the object me = obj.data me.calc_tessface() # recalculate tessfaces tessfaces_select = [f for f in me.tessfaces if f.select] vectors = bpy_extras.mesh_utils.face_random_points(400, tessfaces_select) # --------------------------------------------------------------------- # Create vertices from a list of vectors # --------------------------------------------------------------------- name = 'verts' me = bpy.data.meshes.new(name+'Mesh') ob = bpy.data.objects.new(name, me) ob.show_name = True ob.location = bpy.context.scene.cursor_location bpy.context.scene.objects.link(ob) me.from_pydata(vectors, [], []) me.update()