Exemplo n.º 1
0
def test_outliner_mode():
    # We can set up a pattern in one mode,
    p = Pen()
    p.set_mode(StrokeOutlineMode(sqrt3, 0.2 * sqrt3, 'blue', 'black'))

    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5, end_slant=60)

    # Then continue it in another mode without caring what the first mode was.
    old_mode = p.mode
    p.set_mode(p.mode.outliner_mode())

    p.turn_to(60)
    p.move_forward(1.0)

    p.turn_left(60)
    p.line_forward(2.0)
    p.turn_right(120)
    p.line_forward(2.0)
    p.turn_right(120)
    p.line_forward(2.0)

    p.turn_to(60)
    p.move_forward(3.0)
    p.turn_to(120)

    p.set_mode(old_mode)

    p.line_forward(5, start_slant=60)

    assert_svg_file(
        p, 3,
        'test_outliner_mode.svg'
    )
Exemplo n.º 2
0
def test_straight_joint_headings():
    # The math in calculating joint geometry can get numerically unstable
    # very close to straight joints at various headings.
    for heading_angle in range(0, 45):
        p = Pen()
        p.stroke_mode(1.0)
        p.move_to((0, 0))
        p.turn_to(heading_angle)
        p.line_forward(10)
        p.line_forward(10)

        path = p.paper.paths[0]
        path.render_path(2)  # Doesn't crash.

        # Check that the joint angle is 90 degrees from the heading.
        assert_equal(len(p.paper.paths), 1)
        segments = p.paper.paths[0].segments
        assert_equal(len(segments), 2)
        s0, s1 = segments

        target_angle = (heading_angle + 90) % 180

        joint_angle = math.degrees(vec.heading(vec.vfrom(s0.b_right, s0.b_left)))
        assert_almost_equal(joint_angle % 180, target_angle)

        joint_angle = math.degrees(vec.heading(vec.vfrom(s1.a_right, s1.a_left)))
        assert_almost_equal(joint_angle % 180, target_angle)
Exemplo n.º 3
0
def test_offwidth_arc_joins():
    # Join arcs and lines of different widths.
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)

    p.stroke_mode(0.8)
    p.line_forward(5)
    p.turn_left(45)
    p.stroke_mode(3.0)
    p.arc_left(90, 5)

    p.turn_to(-180)
    p.line_forward(5)
    p.turn_left(45)
    p.stroke_mode(0.8)
    p.arc_left(45, 5)

    p.turn_right(90)
    p.stroke_mode(3.0)
    p.arc_right(90, 4)

    assert_svg_file(
        p, 3,
        'test_offwidth_arc_joins.svg'
    )
Exemplo n.º 4
0
def test_outliner_mode():
    # We can set up a pattern in one mode,
    p = Pen()
    p.set_mode(StrokeOutlineMode(sqrt3, 0.2 * sqrt3, 'blue', 'black'))

    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5, end_slant=60)

    # Then continue it in another mode without caring what the first mode was.
    old_mode = p.mode
    p.set_mode(p.mode.outliner_mode())

    p.turn_to(60)
    p.move_forward(1.0)

    p.turn_left(60)
    p.line_forward(2.0)
    p.turn_right(120)
    p.line_forward(2.0)
    p.turn_right(120)
    p.line_forward(2.0)

    p.turn_to(60)
    p.move_forward(3.0)
    p.turn_to(120)

    p.set_mode(old_mode)

    p.line_forward(5, start_slant=60)

    assert_svg_file(
        p, 3,
        'test_outliner_mode.svg'
    )
Exemplo n.º 5
0
 def draw(offset):
     p = Pen()
     p.stroke_mode(1.0)
     p.move_to((0, 0))
     p.turn_to(0)
     p.line_forward(0.5 + offset, end_slant=45)
     return p
Exemplo n.º 6
0
def test_circle_line_overlap():
    # Draw a circle that is above one line but below the other line.
    p = Pen()

    p.stroke_mode(1.0, color=(1.0, 0.0, 0.0))
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(4)

    p.fill_mode(color=(0.0, 1.0, 0.0))
    p.move_to((2, 2))
    p.circle(2)

    p.stroke_mode(1.0, color=(0.0, 0.0, 1.0))
    p.move_to((0, 4))
    p.turn_to(0)
    p.line_forward(4)

    assert_equal(
        p.paper.svg_elements(1),
        [
            (
                '<path d="M0.0,-0.5 L0.0,0.5 L4.0,0.5 L4.0,-0.5 L0.0,-0.5 z" '
                'fill="#ff0000" />'
            ),
            (
                '<path d="M4.0,-2.0 A 2.0,2.0 0 0 0 0.0,-2.0 '
                'A 2.0,2.0 0 0 0 4.0,-2.0 z" fill="#00ff00" />'
            ),
            (
                '<path d="M0.0,-4.5 L0.0,-3.5 L4.0,-3.5 L4.0,-4.5 L0.0,-4.5 z" '
                'fill="#0000ff" />'
            ),
        ]
    )
Exemplo n.º 7
0
def test_color_formats():
    for color, output in [
        (
            (1.0, 0.0, 0.0),
            '#ff0000',
        ),
        (
            Color.from_html('red'),
            '#ff0000',
        ),
        (
            'green',
            '#008000',
        ),
        (
            '#123456',
            '#123456',
        ),
    ]:
        p = Pen()
        p.stroke_mode(2.0, color)
        p.move_to((0, 0))
        p.turn_to(0)
        p.line_forward(5)

        assert_equal(
            p.paper.svg_elements(0)[0],
            '<path d="M0,-1 L0,1 L5,1 L5,-1 L0,-1 z" fill="{}" />'.format(output)
        )
Exemplo n.º 8
0
def test_straight_joint_headings():
    # The math in calculating joint geometry can get numerically unstable
    # very close to straight joints at various headings.
    for heading_angle in range(0, 45):
        p = Pen()
        p.stroke_mode(1.0)
        p.move_to((0, 0))
        p.turn_to(heading_angle)
        p.line_forward(10)
        p.line_forward(10)

        path = p.paper.paths[0]
        path.render_path(2)  # Doesn't crash.

        # Check that the joint angle is 90 degrees from the heading.
        assert_equal(len(p.paper.paths), 1)
        segments = p.paper.paths[0].segments
        assert_equal(len(segments), 2)
        s0, s1 = segments

        target_angle = (heading_angle + 90) % 180

        joint_angle = math.degrees(vec.heading(vec.vfrom(s0.b_right, s0.b_left)))
        assert_almost_equal(joint_angle % 180, target_angle)

        joint_angle = math.degrees(vec.heading(vec.vfrom(s1.a_right, s1.a_left)))
        assert_almost_equal(joint_angle % 180, target_angle)
Exemplo n.º 9
0
def test_color_formats():
    for color, output in [
        (
            (1.0, 0.0, 0.0),
            '#ff0000',
        ),
        (
            Color.NewFromHtml('red'),
            '#ff0000',
        ),
        (
            'green',
            '#008000',
        ),
        (
            '#123456',
            '#123456',
        ),
    ]:
        p = Pen()
        p.stroke_mode(2.0, color)
        p.move_to((0, 0))
        p.turn_to(0)
        p.line_forward(5)

        assert_equal(
            p.paper.svg_elements(0)[0],
            '<path d="M0,-1 L0,1 L5,1 L5,-1 L0,-1 z" fill="{}" />'.format(output)
        )
Exemplo n.º 10
0
def test_custom_cap():

    def circle_cap(pen, end):
        pen.arc_to(end)

    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    p.last_segment().end_cap = circle_cap
    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L5,1 A 1,1 0 0 0 5,-1 L0,-1 z'
    )

    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    p.last_segment().start_cap = circle_cap
    assert_path_data(
        p, 0,
        'M0,-1 A 1,1 0 1 0 0,1 L5,1 L5,-1 L0,-1 z'
    )
Exemplo n.º 11
0
 def draw(offset):
     p = Pen()
     p.stroke_mode(1.0)
     p.move_to((0, 0))
     p.turn_to(0)
     p.line_forward(0.5 + offset, end_slant=45)
     return p
Exemplo n.º 12
0
def test_offwidth_arc_joins():
    # Join arcs and lines of different widths.
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)

    p.stroke_mode(0.8)
    p.line_forward(5)
    p.turn_left(45)
    p.stroke_mode(3.0)
    p.arc_left(90, 5)

    p.turn_to(-180)
    p.line_forward(5)
    p.turn_left(45)
    p.stroke_mode(0.8)
    p.arc_left(45, 5)

    p.turn_right(90)
    p.stroke_mode(3.0)
    p.arc_right(90, 4)

    assert_svg_file(
        p, 3,
        'test_offwidth_arc_joins.svg'
    )
Exemplo n.º 13
0
def test_circle_line_overlap():
    # Draw a circle that is above one line but below the other line.
    p = Pen()

    p.stroke_mode(1.0, color=(1.0, 0.0, 0.0))
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(4)

    p.fill_mode(color=(0.0, 1.0, 0.0))
    p.move_to((2, 2))
    p.circle(2)

    p.stroke_mode(1.0, color=(0.0, 0.0, 1.0))
    p.move_to((0, 4))
    p.turn_to(0)
    p.line_forward(4)

    assert_equal(
        p.paper.svg_elements(1),
        [
            (
                '<path d="M0.0,-0.5 L0.0,0.5 L4.0,0.5 L4.0,-0.5 L0.0,-0.5 z" '
                'fill="#ff0000" />'
            ),
            (
                '<path d="M4.0,-2.0 A 2.0,2.0 0 0 0 0.0,-2.0 '
                'A 2.0,2.0 0 0 0 4.0,-2.0 z" fill="#00ff00" />'
            ),
            (
                '<path d="M0.0,-4.5 L0.0,-3.5 L4.0,-3.5 L4.0,-4.5 L0.0,-4.5 z" '
                'fill="#0000ff" />'
            ),
        ]
    )
Exemplo n.º 14
0
def test_start_slant_legal_joint():
    # Create a joint that is only legal because of the start slant.
    p = Pen()
    p.outline_mode(1.0, 0.1)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(0.8, start_slant=-45)
    p.turn_left(90)
    p.outline_mode(2.0, 0.1)
    p.line_forward(5)
Exemplo n.º 15
0
def test_start_slant_legal_joint():
    # Create a joint that is only legal because of the start slant.
    p = Pen()
    p.outline_mode(1.0, 0.1)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(0.8, start_slant=-45)
    p.turn_left(90)
    p.outline_mode(2.0, 0.1)
    p.line_forward(5)
Exemplo n.º 16
0
def test_line():
    p = Pen()
    p.fill_mode()
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)

    assert_path_data(
        p, 0,
        'M0,0 L5,0'
    )
Exemplo n.º 17
0
def test_line():
    p = Pen()
    p.fill_mode()
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)

    assert_path_data(
        p, 0,
        'M0,0 L5,0'
    )
Exemplo n.º 18
0
def test_straight_joint():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.line_forward(3)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L3,1 L6,1 L6,-1 L3,-1 L0,-1 z'
    )
Exemplo n.º 19
0
def test_straight_joint():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.line_forward(3)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L3,1 L6,1 L6,-1 L3,-1 L0,-1 z'
    )
Exemplo n.º 20
0
def test_zero_length_side():
    # It is possible and legal to create a segment that just barely goes to
    # zero on one side.
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(1.0, end_slant=45)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L2,-1 L0,-1 z',
    )
Exemplo n.º 21
0
def test_zero_length_side():
    # It is possible and legal to create a segment that just barely goes to
    # zero on one side.
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(1.0, end_slant=45)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L2,-1 L0,-1 z',
    )
Exemplo n.º 22
0
def test_line_line_half_illegal_joint():
    # The outside edge meets, but the inside is too short to meet.
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((0, 0))
    p.turn_to(0)

    p.line_forward(2)
    p.turn_left(165)
    p.line_forward(2)

    assert_path_data(
        p, 2,
        (
            'M0.00,-0.50 L0.00,0.50 L5.80,0.50 L0.20,-1.00 '
            'L-0.06,-0.03 L1.87,0.48 L2.00,-0.50 L0.00,-0.50 z'
        )
    )

    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((0, 0))
    p.turn_to(0)

    p.line_forward(2)
    p.turn_right(165)
    p.line_forward(2)

    assert_path_data(
        p, 2,
        (
            'M0.00,-0.50 L0.00,0.50 L2.00,0.50 L1.87,-0.48 '
            'L-0.06,0.03 L0.20,1.00 L5.80,-0.50 L0.00,-0.50 z'
        )
    )
Exemplo n.º 23
0
def test_line_line_half_illegal_joint():
    # The outside edge meets, but the inside is too short to meet.
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((0, 0))
    p.turn_to(0)

    p.line_forward(2)
    p.turn_left(165)
    p.line_forward(2)

    assert_path_data(p, 2,
                     ('M0.00,-0.50 L0.00,0.50 L5.80,0.50 L0.20,-1.00 '
                      'L-0.06,-0.03 L1.87,0.48 L2.00,-0.50 L0.00,-0.50 z'))

    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((0, 0))
    p.turn_to(0)

    p.line_forward(2)
    p.turn_right(165)
    p.line_forward(2)

    assert_path_data(p, 2,
                     ('M0.00,-0.50 L0.00,0.50 L2.00,0.50 L1.87,-0.48 '
                      'L-0.06,0.03 L0.20,1.00 L5.80,-0.50 L0.00,-0.50 z'))
Exemplo n.º 24
0
def test_outline():
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)
    p.outline_mode(1.0, 0.2)
    p.line_forward(3)

    assert_path_data(
        p, 1,
        (
            'M-0.1,-0.6 L-0.1,0.6 L3.1,0.6 L3.1,-0.6 L-0.1,-0.6 z '
            'M0.1,-0.4 L2.9,-0.4 L2.9,0.4 L0.1,0.4 L0.1,-0.4 z'
        )
    )
Exemplo n.º 25
0
def test_joint_loop_color():
    p = Pen()

    p.move_to((0, 0))
    p.turn_to(0)

    # Draw a square with one side a different color. It joins to the
    # beginning correctly.
    p.stroke_mode(2.0, color='black')
    p.line_forward(5)
    p.turn_left(90)
    p.line_forward(5)
    p.turn_left(90)
    p.line_forward(5)
    p.turn_left(90)
    p.stroke_mode(2.0, color='red')
    p.line_forward(5)

    assert_equal(len(p.paper.paths), 1)

    assert_path_data(
        p, 0,
        [
            'M1,-1 L-1,1 L6,1 L6,-6 L-1,-6 L1,-4 L4,-4 L4,-1 L1,-1 z',
            'M1,-4 L-1,-6 L-1,1 L1,-1 L1,-4 z',
        ]
    )
Exemplo n.º 26
0
def test_joint_loop_color():
    p = Pen()

    p.move_to((0, 0))
    p.turn_to(0)

    # Draw a square with one side a different color. It joins to the
    # beginning correctly.
    p.stroke_mode(2.0, color='black')
    p.line_forward(5)
    p.turn_left(90)
    p.line_forward(5)
    p.turn_left(90)
    p.line_forward(5)
    p.turn_left(90)
    p.stroke_mode(2.0, color='red')
    p.line_forward(5)

    assert_equal(len(p.paper.paths), 1)

    assert_path_data(
        p, 0,
        [
            'M1,-1 L-1,1 L6,1 L6,-6 L-1,-6 L1,-4 L4,-4 L4,-1 L1,-1 z',
            'M1,-4 L-1,-6 L-1,1 L1,-1 L1,-4 z',
        ]
    )
Exemplo n.º 27
0
def test_outline():
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)
    p.outline_mode(1.0, 0.2)
    p.line_forward(3)

    assert_path_data(
        p, 1,
        (
            'M-0.1,-0.6 L-0.1,0.6 L3.1,0.6 L3.1,-0.6 L-0.1,-0.6 z '
            'M0.1,-0.4 L2.9,-0.4 L2.9,0.4 L0.1,0.4 L0.1,-0.4 z'
        )
    )
Exemplo n.º 28
0
def test_line_segments():
    p = Pen()
    p.fill_mode()

    p.move_to((0, 0))
    p.turn_to(45)
    p.line_forward(2.0)

    assert_points_equal(p.position, (sqrt2, sqrt2))
    assert_equal(len(p.paper.paths), 1)
    segments = p.last_path().segments
    for actual, target in zip(segments, [
        ((0, 0), (sqrt2, sqrt2)),
    ]):
        assert_segments_equal(actual, target)
Exemplo n.º 29
0
def test_line_segments():
    p = Pen()
    p.fill_mode()

    p.move_to((0, 0))
    p.turn_to(45)
    p.line_forward(2.0)

    assert_points_equal(p.position, (sqrt2, sqrt2))
    assert_equal(len(p.paper.paths), 1)
    segments = p.last_path().segments
    for actual, target in zip(segments, [
        ((0, 0), (sqrt2, sqrt2)),
    ]):
        assert_segments_equal(actual, target)
Exemplo n.º 30
0
def test_long_line_thick():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    for _ in range(2):
        p.line_forward(5)
        p.turn_right(90)
        p.line_forward(5)
        p.turn_left(90)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L4,1 L4,6 L9,6 L9,10 L11,10 L11,4 L6,4 L6,-1 L0,-1 z'
    )
Exemplo n.º 31
0
def test_long_line_thick():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    for _ in range(2):
        p.line_forward(5)
        p.turn_right(90)
        p.line_forward(5)
        p.turn_left(90)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L4,1 L4,6 L9,6 L9,10 L11,10 L11,4 L6,4 L6,-1 L0,-1 z'
    )
Exemplo n.º 32
0
def test_multiple_strokes():
    p = Pen()
    p.stroke_mode(1.0)
    p.turn_to(0)
    p.move_to((0, 0))
    p.line_forward(3)
    p.move_to((0, 3))
    p.line_forward(3)

    assert_path_data(
        p, 1,
        (
            'M0.0,-0.5 L0.0,0.5 L3.0,0.5 L3.0,-0.5 L0.0,-0.5 z '
            'M0.0,-3.5 L0.0,-2.5 L3.0,-2.5 L3.0,-3.5 L0.0,-3.5 z'
        )
    )
Exemplo n.º 33
0
def test_stroke_outline_mode():
    p = Pen()
    p.set_mode(StrokeOutlineMode(1.0, 0.2, 'red', 'black'))
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    assert_equal(
        p.paper.svg_elements(1)[0],
        (
            '<path d="M0.0,-0.5 L0.0,0.5 L5.0,0.5 L5.0,-0.5 L0.0,-0.5 z" '
            'fill="#ff0000" />'
            '<path d="M-0.1,-0.6 L-0.1,0.6 L5.1,0.6 L5.1,-0.6 L-0.1,-0.6 z '
            'M0.1,-0.4 L4.9,-0.4 L4.9,0.4 L0.1,0.4 L0.1,-0.4 z" '
            'fill="#000000" />'
        )
    )
Exemplo n.º 34
0
def test_mode_error():
    p = Pen()
    # Don't set a mode.
    assert_raises(
        AttributeError,
        lambda: p.line_forward(1)
    )
Exemplo n.º 35
0
def test_multiple_strokes():
    p = Pen()
    p.stroke_mode(1.0)
    p.turn_to(0)
    p.move_to((0, 0))
    p.line_forward(3)
    p.move_to((0, 3))
    p.line_forward(3)

    assert_path_data(
        p, 1,
        (
            'M0.0,-0.5 L0.0,0.5 L3.0,0.5 L3.0,-0.5 L0.0,-0.5 z '
            'M0.0,-3.5 L0.0,-2.5 L3.0,-2.5 L3.0,-3.5 L0.0,-3.5 z'
        )
    )
Exemplo n.º 36
0
def test_joint():
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((-6, 0))
    p.turn_to(0)
    p.line_forward(6)
    p.turn_right(60)
    p.line_forward(6)

    assert_path_data(
        p, 2,
        (
            'M-6.00,-0.50 L-6.00,0.50 L-0.29,0.50 L2.57,5.45 '
            'L3.43,4.95 L0.29,-0.50 L-6.00,-0.50 z'
        ),
    )
Exemplo n.º 37
0
def test_break_stroke():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.break_stroke()
    p.line_forward(3)

    assert_path_data(
        p, 0,
        [
            'M0,-1 L0,1 L3,1 L3,-1 L0,-1 z',
            'M3,-1 L3,1 L6,1 L6,-1 L3,-1 z',
        ]
    )
Exemplo n.º 38
0
def test_mode_error():
    p = Pen()
    # Don't set a mode.
    assert_raises(
        AttributeError,
        lambda: p.line_forward(1)
    )
Exemplo n.º 39
0
def test_straight_offwidth_no_joint():
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)

    p.stroke_mode(2.0)
    p.line_forward(3)
    p.stroke_mode(1.0)
    p.line_forward(3)

    line1, line2 = p.last_path().segments
    assert line1.end_joint_illegal
    assert line2.start_joint_illegal

    assert_path_data(p, 1, ('M0.0,-1.0 L0.0,1.0 L3.0,1.0 L3.0,0.5 L6.0,0.5 '
                            'L6.0,-0.5 L3.0,-0.5 L3.0,-1.0 L0.0,-1.0 z'))
Exemplo n.º 40
0
def test_joint():
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((-6, 0))
    p.turn_to(0)
    p.line_forward(6)
    p.turn_right(60)
    p.line_forward(6)

    assert_path_data(
        p, 2,
        (
            'M-6.00,-0.50 L-6.00,0.50 L-0.29,0.50 L2.57,5.45 '
            'L3.43,4.95 L0.29,-0.50 L-6.00,-0.50 z'
        ),
    )
Exemplo n.º 41
0
def test_stroke_outline_mode():
    p = Pen()
    p.set_mode(StrokeOutlineMode(1.0, 0.2, 'red', 'black'))
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    assert_equal(
        p.paper.svg_elements(1)[0],
        (
            '<path d="M0.0,-0.5 L0.0,0.5 L5.0,0.5 L5.0,-0.5 L0.0,-0.5 z" '
            'fill="#ff0000" />'
            '<path d="M-0.1,-0.6 L-0.1,0.6 L5.1,0.6 L5.1,-0.6 L-0.1,-0.6 z '
            'M0.1,-0.4 L4.9,-0.4 L4.9,0.4 L0.1,0.4 L0.1,-0.4 z" '
            'fill="#000000" />'
        )
    )
Exemplo n.º 42
0
def test_break_stroke():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.break_stroke()
    p.line_forward(3)

    assert_path_data(
        p, 0,
        [
            'M0,-1 L0,1 L3,1 L3,-1 L0,-1 z',
            'M3,-1 L3,1 L6,1 L6,-1 L3,-1 z',
        ]
    )
Exemplo n.º 43
0
def test_turn_back_no_joint():
    # Make a line turn back on itself, and it doesn't join.
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(10)
    p.turn_right(180)
    p.line_forward(5)

    line1, line2 = p.last_path().segments
    assert line1.end_joint_illegal
    assert line2.start_joint_illegal

    assert_path_data(p, 1,
                     ('M0.0,-0.5 L0.0,0.5 L10.0,0.5 L10.0,-0.5 '
                      'L5.0,-0.5 L5.0,0.5 L10.0,0.5 L10.0,-0.5 L0.0,-0.5 z'))
Exemplo n.º 44
0
def test_offwidth_joint():
    p = Pen()
    p.stroke_mode(1.0)
    p.turn_to(0)
    p.move_forward(-3)
    p.line_forward(3)
    p.stroke_mode(0.5)
    p.turn_left(90)
    p.line_forward(3)

    assert_path_data(
        p, 2,
        (
            'M-3.00,-0.50 L-3.00,0.50 L0.25,0.50 L0.25,-3.00 '
            'L-0.25,-3.00 L-0.25,-0.50 L-3.00,-0.50 z'
        ),
    )
Exemplo n.º 45
0
def test_offwidth_joint():
    p = Pen()
    p.stroke_mode(1.0)
    p.turn_to(0)
    p.move_forward(-3)
    p.line_forward(3)
    p.stroke_mode(0.5)
    p.turn_left(90)
    p.line_forward(3)

    assert_path_data(
        p, 2,
        (
            'M-3.00,-0.50 L-3.00,0.50 L0.25,0.50 L0.25,-3.00 '
            'L-0.25,-3.00 L-0.25,-0.50 L-3.00,-0.50 z'
        ),
    )
Exemplo n.º 46
0
def test_change_mode():
    # Change mode but don't change colors. It starts a new path.
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)

    p.stroke_mode(2.0, 'black')
    p.line_forward(5)
    p.fill_mode('black')
    p.line_forward(5)

    assert_equal(
        p.paper.svg_elements(0),
        [
            '<path d="M0,-1 L0,1 L5,1 L5,-1 L0,-1 z" fill="#000000" />',
            '<path d="M5,0 L10,0" fill="#000000" />',
        ]
    )
Exemplo n.º 47
0
def test_save_mode():
    p = Pen()
    p.stroke_mode(2.0, 'red')
    old_mode = p.mode
    p.line_forward(5)
    p.fill_mode('blue')
    p.square(2)
    p.set_mode(old_mode)
    p.line_forward(5)

    assert_path_data(
        p, 0,
        [
            'M0,-1 L0,1 L5,1 L5,-1 L0,-1 z',
            'M4,1 L6,1 L6,-1 L4,-1 L4,1 z',
            'M5,-1 L5,1 L10,1 L10,-1 L5,-1 z',
        ]
    )
Exemplo n.º 48
0
def test_arc_line_joint():
    p = Pen()
    p.stroke_mode(1.0)

    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.turn_left(90)
    p.arc_left(180, 3)

    assert_path_data(
        p, 3,
        (
            'M0.000,-0.500 L0.000,0.500 L3.464,0.500 '
            'A 3.500,3.500 0 1 0 -3.500,0.000 L-2.500,0.000 '
            'A 2.500,2.500 0 0 1 2.449,-0.500 L0.000,-0.500 z'
        ),
    )
Exemplo n.º 49
0
def test_save_mode():
    p = Pen()
    p.stroke_mode(2.0, 'red')
    old_mode = p.mode
    p.line_forward(5)
    p.fill_mode('blue')
    p.square(2)
    p.set_mode(old_mode)
    p.line_forward(5)

    assert_path_data(
        p, 0,
        [
            'M0,-1 L0,1 L5,1 L5,-1 L0,-1 z',
            'M4,1 L6,1 L6,-1 L4,-1 L4,1 z',
            'M5,-1 L5,1 L10,1 L10,-1 L5,-1 z',
        ]
    )
Exemplo n.º 50
0
def test_change_mode():
    # Change mode but don't change colors. It starts a new path.
    p = Pen()
    p.move_to((0, 0))
    p.turn_to(0)

    p.stroke_mode(2.0, 'black')
    p.line_forward(5)
    p.fill_mode('black')
    p.line_forward(5)

    assert_equal(
        p.paper.svg_elements(0),
        [
            '<path d="M0,-1 L0,1 L5,1 L5,-1 L0,-1 z" fill="#000000" />',
            '<path d="M5,0 L10,0" fill="#000000" />',
        ]
    )
Exemplo n.º 51
0
def test_arc_line_joint():
    p = Pen()
    p.stroke_mode(1.0)

    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(3)
    p.turn_left(90)
    p.arc_left(180, 3)

    assert_path_data(
        p, 3,
        (
            'M0.000,-0.500 L0.000,0.500 L3.464,0.500 '
            'A 3.500,3.500 0 1 0 -3.500,0.000 L-2.500,0.000 '
            'A 2.500,2.500 0 0 1 2.449,-0.500 L0.000,-0.500 z'
        ),
    )
Exemplo n.º 52
0
def test_log():
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to(Point(-6, 0))
    p.turn_to(0)
    p.line_forward(6)
    p.turn_right(60)
    p.line_forward(6, end_slant=0)
    assert_equal(
        p.log(),
        [
            'stroke_mode(1.0)',
            'move_to((-6, 0))',  # Points are converted to tuples.
            'turn_to(0)',
            'line_forward(6)',
            'turn_right(60)',
            'line_forward(6, end_slant=0)',
        ]
    )
Exemplo n.º 53
0
def test_log():
    p = Pen()
    p.stroke_mode(1.0)
    p.move_to(Point(-6, 0))
    p.turn_to(0)
    p.line_forward(6)
    p.turn_right(60)
    p.line_forward(6, end_slant=0)
    assert_equal(
        p.log(),
        [
            'stroke_mode(1.0)',
            'move_to((-6, 0))',  # Points are converted to tuples.
            'turn_to(0)',
            'line_forward(6)',
            'turn_right(60)',
            'line_forward(6, end_slant=0)',
        ]
    )
Exemplo n.º 54
0
def test_color_joint():
    p = Pen()

    p.stroke_mode(1.0, 'red')
    p.move_to((-6, 0))
    p.turn_to(0)
    p.line_forward(6)

    p.stroke_mode(1.0, 'green')
    p.turn_right(60)
    p.line_forward(6)

    assert_path_data(
        p, 2,
        [
            'M-6.00,-0.50 L-6.00,0.50 L-0.29,0.50 L0.29,-0.50 L-6.00,-0.50 z',
            'M0.29,-0.50 L-0.29,0.50 L2.57,5.45 L3.43,4.95 L0.29,-0.50 z',
        ]
    )
Exemplo n.º 55
0
def test_color_joint():
    p = Pen()

    p.stroke_mode(1.0, 'red')
    p.move_to((-6, 0))
    p.turn_to(0)
    p.line_forward(6)

    p.stroke_mode(1.0, 'green')
    p.turn_right(60)
    p.line_forward(6)

    assert_path_data(
        p, 2,
        [
            'M-6.00,-0.50 L-6.00,0.50 L-0.29,0.50 L0.29,-0.50 L-6.00,-0.50 z',
            'M0.29,-0.50 L-0.29,0.50 L2.57,5.45 L3.43,4.95 L0.29,-0.50 z',
        ]
    )
Exemplo n.º 56
0
def test_custom_cap():
    def circle_cap(pen, end):
        pen.arc_to(end)

    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    p.last_segment().end_cap = circle_cap
    assert_path_data(p, 0, 'M0,-1 L0,1 L5,1 A 1,1 0 0 0 5,-1 L0,-1 z')

    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)
    p.last_segment().start_cap = circle_cap
    assert_path_data(p, 0, 'M0,-1 A 1,1 0 1 0 0,1 L5,1 L5,-1 L0,-1 z')
Exemplo n.º 57
0
def test_repr():
    p = Pen()
    p.fill_mode()
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(1)
    p.arc_left(90, 1)

    path = p.paper.paths[0]
    line, arc = path.segments
    assert_equal(
        repr(line),
        'LineSegment(a=Point(x=0, y=0), b=Point(x=1.0, y=0.0))'
    )
    assert_equal(
        repr(arc),
        (
            'ArcSegment(a=Point(x=1.0, y=0.0), b=Point(x=2.0, y=0.9999999999999999), '
            'center=Point(x=1.0, y=1.0), radius=1, start_heading=0, end_heading=90)'
        )
    )
Exemplo n.º 58
0
def test_line_thick():
    p = Pen()
    p.stroke_mode(2.0)
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(5)

    assert_path_data(
        p, 0,
        'M0,-1 L0,1 L5,1 L5,-1 L0,-1 z'
    )

    p = Pen()
    p.stroke_mode(1.0)
    p.turn_to(-45)
    p.line_forward(5)

    assert_path_data(
        p, 2,
        'M0.35,-0.35 L-0.35,0.35 L3.18,3.89 L3.89,3.18 L0.35,-0.35 z'
    )
Exemplo n.º 59
0
def test_arc_line_joint_bug():
    # When using arc_to, sometimes the b_left and b_right would get
    # reversed.
    p = Pen()
    p.stroke_mode(1.0)

    p.move_to((0, 0))
    p.turn_to(90)
    p.arc_to((5, 5))
    p.turn_to(-90)
    p.line_forward(5)

    assert_path_data(
        p, 3,
        (
            'M-0.500,0.000 L0.500,0.000 '
            'A 4.500,4.500 0 0 1 4.500,-4.472 '
            'L4.500,0.000 L5.500,0.000 L5.500,-5.477 '
            'A 5.500,5.500 0 0 0 -0.500,0.000 z'
        )
    )
Exemplo n.º 60
0
def test_repr():
    p = Pen()
    p.fill_mode()
    p.move_to((0, 0))
    p.turn_to(0)
    p.line_forward(1)
    p.arc_left(90, 1)

    path = p.paper.paths[0]
    line, arc = path.segments
    assert_equal(
        repr(line),
        'LineSegment(a=Point(x=0, y=0), b=Point(x=1.0, y=0.0))'
    )
    assert_equal(
        repr(arc),
        (
            'ArcSegment(a=Point(x=1.0, y=0.0), b=Point(x=2.0, y=0.9999999999999999), '
            'center=Point(x=1.0, y=1.0), radius=1, start_heading=0, end_heading=90)'
        )
    )