def draw_line(event):
    if canvas.lines_db.finished_lines == 2:
        return

    line_idx = canvas.lines_db.finished_lines

    if str(event.type) == 'ButtonPress':
        canvas.start_coordinates = event.x, event.y
        canvas.lines_widgets[line_idx]['startx'].insert(0, event.x)
        canvas.lines_widgets[line_idx]['starty'].insert(0, event.y)

    x_start, y_start = canvas.start_coordinates
    x_end, y_end = event.x, event.y
    canvas.lines_widgets[line_idx]['endx'].delete(0, tk.END)
    canvas.lines_widgets[line_idx]['endx'].insert(0, x_end)
    canvas.lines_widgets[line_idx]['endy'].delete(0, tk.END)
    canvas.lines_widgets[line_idx]['endy'].insert(0, y_end)
    if canvas.prev_line_id:
        canvas.after(1, canvas.delete, canvas.prev_line_id)
        canvas.lines_db.remove(canvas.prev_line_id)
    line_id = canvas.create_line(x_start, y_start, x_end, y_end, fill='black')
    canvas.lines_db.add(line_id, x_start, y_start, x_end, y_end)
    canvas.prev_line_id = line_id

    if len(canvas.lines_db) == 2:
        try:
            if canvas.intersection_point:
                canvas.after(1, canvas.delete, canvas.intersection_point)

            intersection = lines_segment_intersection_point(
                canvas.lines_db.line_by_idx(0),
                canvas.lines_db.line_by_idx(1),
            )
            if intersection:
                intersection_data['text'] = '%.1f; %.1f' % intersection
                canvas.intersection_point = plot_point(*intersection, radius=5)
            else:
                intersection_data['text'] = 'None'
                canvas.intersection_point = None
        except ValueError:
            pass

    if str(event.type) == 'ButtonRelease':
        reset_line()
        canvas.lines_db.finished_lines += 1
def test_lines_segment_intersection_point_case_5():
    """Case when one point from line segment L2 lies on line segment L2"""
    l1 = line_segment_from_coordinates(10, 10, 20, 10)
    l2 = line_segment_from_coordinates(15, 10, 40, 40)
    assert (15, 10) == lines_segment_intersection_point(l1, l2)
    assert (15, 10) == lines_segment_intersection_point(l2, l1)
def test_lines_segment_intersection_point_case_4():
    l1 = line_segment_from_coordinates(5, 0, 10, 3)
    l2 = line_segment_from_coordinates(20, 9, 15, 6)
    assert None == lines_segment_intersection_point(l1, l2)
    assert None == lines_segment_intersection_point(l2, l1)
def test_lines_segment_intersection_point_case_2():
    l1 = line_segment_from_coordinates(0, 0, 8, 4)
    l2 = line_segment_from_coordinates(0, 6, 12, 0)
    assert (6, 3) == lines_segment_intersection_point(l1, l2)
    assert (6, 3) == lines_segment_intersection_point(l2, l1)
def test_lines_segment_intersection_point_case_1():
    l1 = line_segment_from_coordinates(0, 0, 10, 10)
    l2 = line_segment_from_coordinates(0, 10, 10, 0)
    assert (5, 5) == lines_segment_intersection_point(l1, l2)
    assert (5, 5) == lines_segment_intersection_point(l2, l1)