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()