Guest User

Untitled

a guest
Nov 6th, 2021
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.33 KB | None | 0 0
  1. import bpy
  2.  
  3. def do_copy_pure_geometry():
  4.     context = bpy.context
  5.     src_ob = context.object
  6.  
  7.     if src_ob.type != 'MESH':
  8.         return
  9.  
  10.     if context.mode == 'EDIT':
  11.         bpy.ops.object.mode_set(mode='OBJECT')
  12.  
  13.     src_mesh = src_ob.data
  14.     dst_mesh = bpy.data.meshes.new(name=src_mesh.name)
  15.  
  16.     def copy_over(attr_name, sub_name, components=1):
  17.         src_attr = getattr(src_mesh, attr_name)
  18.         dst_attr = getattr(dst_mesh, attr_name)
  19.  
  20.         if len(dst_attr) != len(src_attr):
  21.             dst_attr.add(len(src_attr))
  22.  
  23.         arr = [None] * (len(dst_attr) * components)
  24.         src_attr.foreach_get(sub_name, arr)
  25.         dst_attr.foreach_set(sub_name, arr)
  26.  
  27.     copy_over("vertices", "co", components=3)
  28.     copy_over("edges", "vertices", components=2)
  29.     copy_over("loops", "vertex_index")
  30.     copy_over("polygons", "loop_start")
  31.     copy_over("polygons", "loop_total")
  32.  
  33.     dst_mesh.validate()
  34.     dst_mesh.update(calc_edges_loose=True)
  35.  
  36.     dst_ob = bpy.data.objects.new(dst_mesh.name, dst_mesh)
  37.     dst_ob.location = context.scene.cursor.location
  38.     context.scene.collection.objects.link(dst_ob)
  39.  
  40.     if bpy.ops.object.select_all.poll():
  41.         bpy.ops.object.select_all(action='DESELECT')
  42.     dst_ob.select_set(True)
  43.     context.view_layer.objects.active = dst_ob
  44.  
  45. do_copy_pure_geometry()
  46.  
Advertisement
Add Comment
Please, Sign In to add comment