Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. import bpy, bmesh
  2. from bpy import context
  3. from mathutils import Vector
  4. # bounding box helper methods
  5. def bbox(ob):
  6. return (Vector(b) for b in ob.bound_box)
  7.  
  8. def bbox_center(ob):
  9. return sum(bbox(ob), Vector()) / 8
  10.  
  11. def bbox_axes(ob):
  12. bb = list(bbox(ob))
  13. return tuple(bb[i] for i in (0, 4, 3, 1))
  14.  
  15. def slice(bm, start, end, segments):
  16. if segments == 1:
  17. return
  18. def geom(bm):
  19. return bm.verts[:] + bm.edges[:] + bm.faces[:]
  20. planes = [start.lerp(end, f / segments) for f in range(1, segments)]
  21. #p0 = start
  22. plane_no = (end - start).normalized()
  23. while(planes):
  24. p0 = planes.pop(0)
  25. ret = bmesh.ops.bisect_plane(bm,
  26. geom=geom(bm),
  27. plane_co=p0,
  28. plane_no=plane_no)
  29. bmesh.ops.split_edges(bm,
  30. edges=[e for e in ret['geom_cut']
  31. if isinstance(e, bmesh.types.BMEdge)])
  32.  
  33.  
  34. bm = bmesh.new()
  35. ob = context.object
  36. me = ob.data
  37. bm.from_mesh(me)
  38.  
  39. o, x, y, z = bbox_axes(ob)
  40.  
  41. x_segments = 2
  42. y_segments = 2
  43. z_segments = 1
  44.  
  45. slice(bm, o, x, x_segments)
  46. slice(bm, o, y, y_segments)
  47. slice(bm, o, z, z_segments)
  48. bm.to_mesh(me)
  49.  
  50. bpy.ops.object.mode_set(mode='EDIT')
  51. bpy.ops.mesh.separate(type='LOOSE')
  52. bpy.ops.object.mode_set()
  53.  
  54. >>> C.object.location
  55. Vector((644784.5, 4979532.0, 0.0))
  56.  
  57. >>> v = C.object.location.copy()
  58. >>> for o in C.selected_objects:
  59. ... o.location -= v
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement