Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bpy
- def do_copy_pure_geometry():
- context = bpy.context
- src_ob = context.object
- if src_ob.type != 'MESH':
- return
- if context.mode == 'EDIT':
- bpy.ops.object.mode_set(mode='OBJECT')
- src_mesh = src_ob.data
- dst_mesh = bpy.data.meshes.new(name=src_mesh.name)
- def copy_over(attr_name, sub_name, components=1):
- src_attr = getattr(src_mesh, attr_name)
- dst_attr = getattr(dst_mesh, attr_name)
- if len(dst_attr) != len(src_attr):
- dst_attr.add(len(src_attr))
- arr = [None] * (len(dst_attr) * components)
- src_attr.foreach_get(sub_name, arr)
- dst_attr.foreach_set(sub_name, arr)
- copy_over("vertices", "co", components=3)
- copy_over("edges", "vertices", components=2)
- copy_over("loops", "vertex_index")
- copy_over("polygons", "loop_start")
- copy_over("polygons", "loop_total")
- dst_mesh.validate()
- dst_mesh.update(calc_edges_loose=True)
- dst_ob = bpy.data.objects.new(dst_mesh.name, dst_mesh)
- dst_ob.location = context.scene.cursor.location
- context.scene.collection.objects.link(dst_ob)
- if bpy.ops.object.select_all.poll():
- bpy.ops.object.select_all(action='DESELECT')
- dst_ob.select_set(True)
- context.view_layer.objects.active = dst_ob
- do_copy_pure_geometry()
Advertisement
Add Comment
Please, Sign In to add comment