def isManifold(mesh, do_check=True): if not do_check: return True """ edges = {} for poly in mesh.polygons: for k in poly.edge_keys: if k in edges: if edges[k] > 1: return False edges[k] += 1 else: edges[k] = 1 s = sorted(edges.values()) if s[0] != 2 or s[-1] != 2: print(2) return False """ s = sorted(edge_face_count(mesh)) if s[0] != 2 or s[-1] != 2: return False # XXX: check for verts/edges out of faces? """ for edge in mesh.edges: if edge not in edges: return False """ return True
def drawCallback(): obj = bpy.context.object if obj and obj.type == 'MESH' and obj.data: if do_draw[0]: mesh = obj.data matrix_world = obj.matrix_world settings = bpy.context.user_preferences.themes[0].view_3d transform = settings.transform edge_select = settings.edge_select wire_edit = settings.wire_edit wire = settings.wire object_active = settings.object_active glLineWidth(point_size[0]) glBegin(GL_LINES) if bpy.context.mode == 'EDIT_MESH': if bm_old[0] is None or not bm_old[0].is_valid: bm = bm_old[0] = bmesh.from_edit_mesh(mesh) else: bm = bm_old[0] active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [matrix_world*vert.co for vert in edge.verts] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) elif bpy.context.mode == 'OBJECT' and (obj.show_wire or bpy.context.space_data.viewport_shade == 'WIREFRAME'): counts = edge_face_count(mesh) if obj.select: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [matrix_world*Vector(mesh.vertices[i].co) for i in edge.key] drawColorSize(coords, object_active) else: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [matrix_world*Vector(mesh.vertices[i].co) for i in edge.key] drawColorSize(coords, wire) glEnd() glLineWidth(1.0)
def drawCallback(): obj = bpy.context.object if obj and obj.type == 'MESH' and obj.data: if do_draw[0]: mesh = obj.data matrix_world = obj.matrix_world settings = bpy.context.user_preferences.themes[0].view_3d transform = settings.transform edge_select = settings.edge_select wire_edit = settings.wire_edit wire = settings.wire object_active = settings.object_active glLineWidth(point_size[0]) if bpy.context.mode == 'EDIT_MESH': draw_with_test = True if bm_old[0] is None or not bm_old[0].is_valid: bm = bm_old[0] = bmesh.from_edit_mesh(mesh) else: bm = bm_old[0] no_depth = not bpy.context.space_data.use_occlude_geometry if no_depth: glDisable(GL_DEPTH_TEST) draw_with_test = False if finer_lines[0]: glLineWidth(point_size[0]/4.0) draw_with_test = True glBegin(GL_LINES) if use_custom_color[0]: glColor3f(*custom_color[0]) for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [matrix_world*vert.co for vert in edge.verts] for coord in coords: glVertex3f(*coord) else: active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [matrix_world*vert.co for vert in edge.verts] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) glEnd() glLineWidth(point_size[0]) glEnable(GL_DEPTH_TEST) if draw_with_test: glBegin(GL_LINES) if use_custom_color[0]: glColor3f(*custom_color[0]) for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [matrix_world*vert.co for vert in edge.verts] for coord in coords: glVertex3f(*coord) else: active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [matrix_world*vert.co for vert in edge.verts] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) glEnd() elif bpy.context.mode == 'OBJECT' and (obj.show_wire or bpy.context.space_data.viewport_shade == 'WIREFRAME'): counts = edge_face_count(mesh) glBegin(GL_LINES) if use_custom_color[0]: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [matrix_world*Vector(mesh.vertices[i].co) for i in edge.key] glColor3f(*custom_color[0]) for coord in coords: glVertex3f(*coord) else: if obj.select: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [matrix_world*Vector(mesh.vertices[i].co) for i in edge.key] drawColorSize(coords, object_active) else: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [matrix_world*Vector(mesh.vertices[i].co) for i in edge.key] drawColorSize(coords, wire) glEnd() glLineWidth(1.0)
def drawCallback(): if bpy.context.mode == 'EDIT_MESH': obj = bpy.context.object bl = obj.border_lines if obj and obj.type == 'MESH' and obj.data: if bl.borderlines_use: mesh = obj.data matrix_world = obj.matrix_world settings = bpy.context.user_preferences.themes[0].view_3d transform = settings.transform edge_select = settings.edge_select wire_edit = settings.wire_edit wire = settings.wire object_active = settings.object_active glLineWidth(bl.borderlines_width) draw_with_test = True if bm_old[0] is None or not bm_old[0].is_valid: bm = bm_old[0] = bmesh.from_edit_mesh(mesh) else: bm = bm_old[0] no_depth = not bpy.context.space_data.use_occlude_geometry if no_depth: glDisable(GL_DEPTH_TEST) draw_with_test = False if bl.finer_lines_behind_use: glLineWidth(bl.borderlines_width / 4.0) draw_with_test = True glBegin(GL_LINES) if bl.custom_color_use: glColor3f(*bl.custom_color) for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [ matrix_world * vert.co for vert in edge.verts ] for coord in coords: glVertex3f(*coord) else: active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary and not edge.hide: coords = [ matrix_world * vert.co for vert in edge.verts ] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) glEnd() glLineWidth(bl.borderlines_width) glEnable(GL_DEPTH_TEST) if draw_with_test: glBegin(GL_LINES) if bl.custom_color_use: glColor3f(*bl.custom_color) for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [ matrix_world * vert.co for vert in edge.verts ] for coord in coords: glVertex3f(*coord) else: active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [ matrix_world * vert.co for vert in edge.verts ] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) glEnd() elif bpy.context.mode == 'OBJECT': for obj in bpy.context.visible_objects: if obj and obj.type == 'MESH' and obj.data: if (obj.show_wire or bpy.context.space_data.viewport_shade == 'WIREFRAME'): bl = obj.border_lines if bl.borderlines_use: mesh = obj.data matrix_world = obj.matrix_world settings = bpy.context.user_preferences.themes[ 0].view_3d wire = settings.wire object_selected = settings.object_selected counts = edge_face_count(mesh) glLineWidth(bl.borderlines_width) glBegin(GL_LINES) if bl.custom_color_use: glColor3f(*bl.custom_color) elif obj == bpy.context.active_object and obj.select: glColor3f(*settings.object_active) elif obj.select: glColor3f(*settings.object_selected) else: glColor3f(*settings.wire) for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [ matrix_world * Vector(mesh.vertices[i].co) for i in edge.key ] for coord in coords: glVertex3f(*coord) glEnd() glLineWidth(1.0)
def drawCallback(): obj = bpy.context.object if obj and obj.type == 'MESH' and obj.data: if do_draw[0]: mesh = obj.data matrix_world = obj.matrix_world settings = bpy.context.user_preferences.themes[0].view_3d transform = settings.transform edge_select = settings.edge_select wire_edit = settings.wire_edit wire = settings.wire object_active = settings.object_active glLineWidth(point_size[0]) glBegin(GL_LINES) if bpy.context.mode == 'EDIT_MESH': if bm_old[0] is None or not bm_old[0].is_valid: bm = bm_old[0] = bmesh.from_edit_mesh(mesh) else: bm = bm_old[0] active = bm.select_history.active for edge in bm.edges: if edge.is_valid and edge.is_boundary: coords = [ matrix_world * vert.co for vert in edge.verts ] if active == edge: drawColorSize(coords, transform) elif edge.select: drawColorSize(coords, edge_select) else: drawColorSize(coords, wire_edit) elif bpy.context.mode == 'OBJECT' and ( obj.show_wire or bpy.context.space_data.viewport_shade == 'WIREFRAME'): counts = edge_face_count(mesh) if obj.select: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [ matrix_world * Vector(mesh.vertices[i].co) for i in edge.key ] drawColorSize(coords, object_active) else: for edge, count in zip(mesh.edges, counts): # border edges if count == 1: coords = [ matrix_world * Vector(mesh.vertices[i].co) for i in edge.key ] drawColorSize(coords, wire) glEnd() glLineWidth(1.0)