edit_mesh.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:coa_tools 作者: ndee85 项目源码 文件源码
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)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号