예제 #1
0
def checkVTX(self, context):
    '''
    - decides VTX automatically.
    - remembers edges attached to current selection, for later.
    '''

    # [x] if either of these edges share a vertex, return early.
    indices = cm.vertex_indices_from_edges_tuple(self.bm, self.selected_edges)
    if cm.duplicates(indices):
        msg = "edges share a vertex, degenerate case, returning early"
        self.report({"WARNING"}, msg)
        return False

    # [x] find which edges intersect
    getVTX(self)

    # [x] check coplanar, or parallel.
    if [] == self.edges:
        coplanar = cm.test_coplanar(self.edge1, self.edge2)
        if not coplanar:
            msg = "parallel or not coplanar! returning early"
            self.report({"WARNING"}, msg)
            return False

    return True
예제 #2
0
def checkVTX(self, context):
    '''
    - decides VTX automatically.
    - remembers edges attached to current selection, for later.
    '''

    # [x] if either of these edges share a vertex, return early.
    indices = cm.vertex_indices_from_edges_tuple(self.bm, self.selected_edges)
    if cm.duplicates(indices):
        msg = "edges share a vertex, degenerate case, returning early"
        self.report({"WARNING"}, msg)
        return False

    # [x] find which edges intersect
    getVTX(self)

    # [x] check coplanar, or parallel.
    if [] == self.edges:
        coplanar = cm.test_coplanar(self.edge1, self.edge2)
        if not coplanar:
            msg = "parallel or not coplanar! returning early"
            self.report({"WARNING"}, msg)
            return False

    return True
예제 #3
0
def add_line_to_bisection(self):

    obj = bpy.context.object
    me = obj.data
    bm = bmesh.from_edit_mesh(me)

    if hasattr(bm.verts, "ensure_lookup_table"):
        bm.verts.ensure_lookup_table()
        bm.edges.ensure_lookup_table()

    edges = [e for e in bm.edges if (e.select and not e.hide)]

    if not len(edges) == 2:
        msg = "select two coplanar non parallel edges"
        self.report({"WARNING"}, msg)
        return

    [[v1, v2], [v3, v4]] = [[v.co for v in e.verts] for e in edges]
    print('vectors found:\n', v1, '\n', v2, '\n', v3, '\n', v4)

    dist1 = (v1-v2).length
    dist2 = (v3-v4).length
    bdist = min([dist1, dist2])
    edge1 = (v1, v2)
    edge2 = (v3, v4)

    if not cm.test_coplanar(edge1, edge2):
        msg = "edges must be coplanar non parallel edges"
        self.report({"WARNING"}, msg)
        return

    # get pt and pick fartest vertex from (projected) intersections
    pt = cm.get_intersection(edge1, edge2)
    far1 = v2 if (v1-pt).length < (v2-pt).length else v1
    far2 = v4 if (v3-pt).length < (v4-pt).length else v3
    # print('intersection: ', pt)

    dex1 = far1 - pt
    dex2 = far2 - pt
    dex1 = dex1 * (bdist / dex1.length)
    dex2 = dex2 * (bdist / dex2.length)
    pt2 = pt + (dex1).lerp(dex2, 0.5)
    # print('bisector point:', pt2)

    pt3 = pt2.lerp(pt, 2.0)

    vec1 = bm.verts.new(pt2)
    vec2 = bm.verts.new(pt)
    vec3 = bm.verts.new(pt3)
    bm.edges.new((vec1, vec2))
    bm.edges.new((vec2, vec3))
    bmesh.update_edit_mesh(me)
예제 #4
0
def add_line_to_bisection(self):

    obj = bpy.context.object
    me = obj.data
    bm = bmesh.from_edit_mesh(me)

    if hasattr(bm.verts, "ensure_lookup_table"):
        bm.verts.ensure_lookup_table()
        bm.edges.ensure_lookup_table()

    edges = [e for e in bm.edges if (e.select and not e.hide)]

    if not len(edges) == 2:
        msg = "select two coplanar non parallel edges"
        self.report({"WARNING"}, msg)
        return

    [[v1, v2], [v3, v4]] = [[v.co for v in e.verts] for e in edges]
    print('vectors found:\n', v1, '\n', v2, '\n', v3, '\n', v4)

    dist1 = (v1 - v2).length
    dist2 = (v3 - v4).length
    bdist = min([dist1, dist2])
    edge1 = (v1, v2)
    edge2 = (v3, v4)

    if not cm.test_coplanar(edge1, edge2):
        msg = "edges must be coplanar non parallel edges"
        self.report({"WARNING"}, msg)
        return

    # get pt and pick fartest vertex from (projected) intersections
    pt = cm.get_intersection(edge1, edge2)
    far1 = v2 if (v1 - pt).length < (v2 - pt).length else v1
    far2 = v4 if (v3 - pt).length < (v4 - pt).length else v3
    # print('intersection: ', pt)

    dex1 = far1 - pt
    dex2 = far2 - pt
    dex1 = dex1 * (bdist / dex1.length)
    dex2 = dex2 * (bdist / dex2.length)
    pt2 = pt + (dex1).lerp(dex2, 0.5)
    # print('bisector point:', pt2)

    pt3 = pt2.lerp(pt, 2.0)

    vec1 = bm.verts.new(pt2)
    vec2 = bm.verts.new(pt)
    vec3 = bm.verts.new(pt3)
    bm.edges.new((vec1, vec2))
    bm.edges.new((vec2, vec3))
    bmesh.update_edit_mesh(me)