1# Copyright (c) 2020 Manfred Moitzi 2# License: MIT License 3import pytest 4import math 5import ezdxf 6from ezdxf.entities.lwpolyline import LWPolyline 7 8POINTS = [(0, 0), (1, 0, 1), (2, 0), (3, 0)] 9 10 11@pytest.fixture 12def lwpolyline(): 13 entity = LWPolyline.new(dxfattribs={'layer': 'LAY', 'color': 1}) 14 entity.set_points(POINTS, format='xyb') 15 return entity 16 17 18@pytest.fixture(scope='module') 19def msp(): 20 doc = ezdxf.new() 21 return doc.modelspace() 22 23 24def test_virtual_entities(lwpolyline): 25 result = list(lwpolyline.virtual_entities()) 26 assert len(result) == 3 27 28 e = result[0] 29 assert e.dxftype() == 'LINE' 30 assert e.dxf.layer == 'LAY' 31 assert e.dxf.color == 1 32 assert e.dxf.start == (0, 0) 33 assert e.dxf.end == (1, 0) 34 35 e = result[1] 36 assert e.dxftype() == 'ARC' 37 assert e.dxf.layer == 'LAY' 38 assert e.dxf.color == 1 39 assert e.dxf.center == (1.5, 0) 40 assert e.dxf.radius == 0.5 41 assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12) 42 assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12) 43 44 assert e.start_point.isclose((1, 0)) 45 assert e.end_point.isclose((2, 0)) 46 47 e = result[2] 48 assert e.dxftype() == 'LINE' 49 assert e.dxf.layer == 'LAY' 50 assert e.dxf.color == 1 51 assert e.dxf.start == (2, 0) 52 assert e.dxf.end == (3, 0) 53 54 55def test_virtual_entities_elevation(lwpolyline): 56 lwpolyline = lwpolyline.translate(1, 1, 1) 57 assert lwpolyline.dxf.elevation == 1 58 result = list(lwpolyline.virtual_entities()) 59 assert len(result) == 3 60 e = result[0] 61 assert e.dxftype() == 'LINE' 62 assert e.dxf.start == (1, 1, 1) 63 assert e.dxf.end == (2, 1, 1) 64 65 e = result[1] 66 assert e.dxftype() == 'ARC' 67 assert e.dxf.center == (2.5, 1, 1) 68 assert e.dxf.radius == 0.5 69 assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12) 70 assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12) 71 72 assert e.start_point.isclose((2, 1, 1)) 73 assert e.end_point.isclose((3, 1, 1)) 74 75 e = result[2] 76 assert e.dxftype() == 'LINE' 77 assert e.dxf.start == (3, 1, 1) 78 assert e.dxf.end == (4, 1, 1) 79 80 81def test_closed_polyline(): 82 lwpolyline = LWPolyline.new() 83 # Create a circle by LWPOLYLINE: 84 lwpolyline.set_points([(0, 0, 1), (1, 0, 1)], format='xyb') 85 lwpolyline.close(True) 86 87 result = list(lwpolyline.virtual_entities()) 88 assert len(result) == 2 89 90 e = result[0] 91 assert e.dxftype() == 'ARC' 92 assert e.dxf.center.isclose((0.5, 0)) 93 assert e.dxf.radius == 0.5 94 assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12) 95 assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12) 96 97 e = result[1] 98 assert e.dxftype() == 'ARC' 99 assert e.dxf.center.isclose((0.5, 0)) 100 assert e.dxf.radius == 0.5 101 assert math.isclose(e.dxf.start_angle, 0, abs_tol=1e-12) 102 assert math.isclose(abs(e.dxf.end_angle), 180, abs_tol=1e-12) 103 104 105def test_explode_entities(msp): 106 lwpolyline = msp.add_lwpolyline(POINTS, format='xyb') 107 assert len(msp) == 1 108 result = lwpolyline.explode() 109 assert lwpolyline.is_alive is False 110 assert len(msp) == 3 # LINE, ARC, LINE 111 assert len(result) == 3 112 assert msp[-1] is result[2] 113 assert msp[-2] is result[1] 114 assert msp[-3] is result[0] 115