File: test_220_lwpolyline_explode.py

package info (click to toggle)
ezdxf 1.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 104,528 kB
  • sloc: python: 182,341; makefile: 116; lisp: 20; ansic: 4
file content (120 lines) | stat: -rw-r--r-- 3,495 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Copyright (c) 2020 Manfred Moitzi
# License: MIT License
import pytest
import math
import ezdxf
from ezdxf.entities.lwpolyline import LWPolyline

POINTS = [(0, 0), (1, 0, 1), (2, 0), (3, 0)]


@pytest.fixture
def lwpolyline():
    entity = LWPolyline.new(dxfattribs={"layer": "LAY", "color": 1})
    entity.set_points(POINTS, format="xyb")
    return entity


@pytest.fixture(scope="module")
def msp():
    doc = ezdxf.new()
    return doc.modelspace()


def test_virtual_entities(lwpolyline):
    result = list(lwpolyline.virtual_entities())
    assert len(result) == 3

    e = result[0]
    assert e.dxftype() == "LINE"
    assert e.dxf.layer == "LAY"
    assert e.dxf.color == 1
    assert e.dxf.start == (0, 0)
    assert e.dxf.end == (1, 0)

    e = result[1]
    assert e.dxftype() == "ARC"
    assert e.dxf.layer == "LAY"
    assert e.dxf.color == 1
    assert e.dxf.center == (1.5, 0)
    assert e.dxf.radius == 0.5
    assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12)
    assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12)

    assert e.start_point.isclose((1, 0))
    assert e.end_point.isclose((2, 0))

    e = result[2]
    assert e.dxftype() == "LINE"
    assert e.dxf.layer == "LAY"
    assert e.dxf.color == 1
    assert e.dxf.start == (2, 0)
    assert e.dxf.end == (3, 0)


def test_virtual_sub_entities_source_tracking(lwpolyline):
    result = set(e.source_of_copy for e in lwpolyline.virtual_entities())
    assert len(result) == 1, "only one source of copy expected"
    assert lwpolyline in result, "lwpolyline should be the source of copy"


def test_virtual_entities_elevation(lwpolyline):
    lwpolyline = lwpolyline.translate(1, 1, 1)
    assert lwpolyline.dxf.elevation == 1
    result = list(lwpolyline.virtual_entities())
    assert len(result) == 3
    e = result[0]
    assert e.dxftype() == "LINE"
    assert e.dxf.start == (1, 1, 1)
    assert e.dxf.end == (2, 1, 1)

    e = result[1]
    assert e.dxftype() == "ARC"
    assert e.dxf.center == (2.5, 1, 1)
    assert e.dxf.radius == 0.5
    assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12)
    assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12)

    assert e.start_point.isclose((2, 1, 1))
    assert e.end_point.isclose((3, 1, 1))

    e = result[2]
    assert e.dxftype() == "LINE"
    assert e.dxf.start == (3, 1, 1)
    assert e.dxf.end == (4, 1, 1)


def test_closed_polyline():
    lwpolyline = LWPolyline.new()
    # Create a circle by LWPOLYLINE:
    lwpolyline.set_points([(0, 0, 1), (1, 0, 1)], format="xyb")
    lwpolyline.close(True)

    result = list(lwpolyline.virtual_entities())
    assert len(result) == 2

    e = result[0]
    assert e.dxftype() == "ARC"
    assert e.dxf.center.isclose((0.5, 0))
    assert e.dxf.radius == 0.5
    assert math.isclose(e.dxf.start_angle, 180, abs_tol=1e-12)
    assert math.isclose(e.dxf.end_angle, 0, abs_tol=1e-12)

    e = result[1]
    assert e.dxftype() == "ARC"
    assert e.dxf.center.isclose((0.5, 0))
    assert e.dxf.radius == 0.5
    assert math.isclose(e.dxf.start_angle, 0, abs_tol=1e-12)
    assert math.isclose(abs(e.dxf.end_angle), 180, abs_tol=1e-12)


def test_explode_entities(msp):
    lwpolyline = msp.add_lwpolyline(POINTS, format="xyb")
    assert len(msp) == 1
    result = lwpolyline.explode()
    assert lwpolyline.is_alive is False
    assert len(msp) == 3  # LINE, ARC, LINE
    assert len(result) == 3
    assert msp[-1] is result[2]
    assert msp[-2] is result[1]
    assert msp[-3] is result[0]