Beispiel #1
0
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
Beispiel #2
0
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)
Beispiel #6
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)