def delete_geometry(self,context,bm,position,single_vert=False):
obj = context.active_object
snapped_vert_coord , point_type , bm_ob = self.snap_to_edge_or_vert(position,get_bm_obj = True)
if point_type == "VERT":
vert = bm_ob
if not vert.is_boundary and not vert.is_wire:
bmesh.ops.dissolve_verts(bm,verts=[vert])#,use_face_split=True,use_boundary_tear=True)
else:
if not vert.hide:
if obj.matrix_world * vert.co == snapped_vert_coord:
shortest_edge = None
edge_length = 10000000000000
for edge in vert.link_edges:
if edge.calc_length() < edge_length:
shortest_edge = edge
edge_length = edge.calc_length()
merge_co = shortest_edge.other_vert(vert).co if shortest_edge != None else vert.co
verts = []
verts.append(vert)
if shortest_edge != None:
verts.append(shortest_edge.other_vert(vert))
if len(verts) > 1:
bmesh.ops.pointmerge(bm,verts = verts,merge_co = merge_co)
else:
bm.verts.remove(vert)
elif point_type == "EDGE":
edge = bm_ob
if not edge.is_boundary and not edge.is_wire:
bmesh.ops.dissolve_edges(bm,edges=[edge],use_verts=False)
else:
if len(edge.verts[0].link_edges) > 1 and len(edge.verts[1].link_edges) > 1:
bm.edges.remove(edge)
elif len(edge.verts[0].link_edges) > 1 and len(edge.verts[1].link_edges) <= 1:
bm.verts.remove(edge.verts[1])
elif len(edge.verts[0].link_edges) <= 1 and len(edge.verts[1].link_edges) > 1:
bm.verts.remove(edge.verts[0])
else:
bmesh.ops.delete(bm,geom=[edge.verts[0],edge.verts[1]],context=1)
bmesh.update_edit_mesh(obj.data)
评论列表
文章目录