forked from mozman/ezdxf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_r12export.py
182 lines (145 loc) · 6.6 KB
/
test_r12export.py
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# Copyright (c) 2023, Manfred Moitzi
# License: MIT License
import pytest
import math
import ezdxf
from ezdxf.addons import r12export
from ezdxf import entities as ents
from ezdxf.render import forms
from ezdxf.tools.text import MTextEditor
from ezdxf.math import Vec2
DXFATTRIBS = {
"layer": "EZDXF",
"color": 144,
}
def test_export_empty_doc():
doc = ezdxf.new("R2018")
doc_r12 = r12export.convert(doc)
assert doc_r12.dxfversion == ezdxf.DXF12
def test_export_dxf_primitives():
doc = ezdxf.new("R2018")
msp = doc.modelspace()
msp.add_point((0, 0))
msp.add_text("MyText")
msp.add_line((0, 0), (1, 0))
msp.add_circle((0, 0), radius=1)
msp.add_arc((0, 0), radius=1, start_angle=30, end_angle=150)
doc_r12 = r12export.convert(doc)
assert len(doc_r12.modelspace()) == len(msp)
def test_export_lwpolyline_as_polyline():
points = [(0, 0), (1, 0, 0.7), (2, 0), (2, 2)]
doc = ezdxf.new("R2018")
msp = doc.modelspace()
msp.add_lwpolyline(points, format="xyb", dxfattribs=DXFATTRIBS)
doc_r12 = r12export.convert(doc)
polyline: ents.Polyline = doc_r12.modelspace()[0]
assert isinstance(polyline, ents.Polyline)
assert polyline.is_2d_polyline is True
assert len(polyline.vertices) == 4
assert polyline.vertices[1].dxf.bulge == 0.7
assert polyline.dxf.layer == "EZDXF"
assert polyline.dxf.color == 144
def test_export_mesh_as_polyface_mesh():
doc = ezdxf.new("R2018")
msp = doc.modelspace()
cube = forms.cube()
cube.render_mesh(msp, dxfattribs=DXFATTRIBS)
doc_r12 = r12export.convert(doc)
polyface: ents.Polyface = doc_r12.modelspace()[0]
assert isinstance(polyface, ents.Polyface)
assert polyface.is_poly_face_mesh is True
assert polyface.dxf.layer == "EZDXF"
assert polyface.dxf.color == 144
def test_export_ellipse_as_3d_polyline():
doc = ezdxf.new("R2018")
msp = doc.modelspace()
msp.add_ellipse(
(0, 0), (3, 0), 0.5, start_param=0, end_param=math.pi, dxfattribs=DXFATTRIBS
)
doc_r12 = r12export.convert(doc)
polyline: ents.Polyline = doc_r12.modelspace()[0]
assert isinstance(polyline, ents.Polyline)
assert polyline.is_3d_polyline is True
assert len(polyline.vertices) > 10
assert polyline.dxf.layer == "EZDXF"
assert polyline.dxf.color == 144
def test_export_spline_as_3d_polyline():
doc = ezdxf.new("R2018")
msp = doc.modelspace()
msp.add_spline(fit_points=[(0, 0, 0), (2, 1, 1), (3, 5, -1)], dxfattribs=DXFATTRIBS)
doc_r12 = r12export.convert(doc)
polyline: ents.Polyline = doc_r12.modelspace()[0]
assert isinstance(polyline, ents.Polyline)
assert polyline.is_3d_polyline is True
assert len(polyline.vertices) > 10
assert polyline.dxf.layer == "EZDXF"
assert polyline.dxf.color == 144
def test_export_proxy_graphic():
from ezdxf.lldxf.tags import Tags
from ezdxf.proxygraphic import load_proxy_graphic
doc = ezdxf.new("R2018")
msp = doc.modelspace()
proxy_entity = ents.ACADProxyEntity.new()
proxy_entity.proxy_graphic = load_proxy_graphic(Tags.from_text(DATA))
msp.add_entity(proxy_entity)
doc_r12 = r12export.convert(doc)
assert len(doc_r12.modelspace()) == 9
def test_export_mtext():
doc = ezdxf.new("R2018")
msp = doc.modelspace()
editor = MTextEditor()
editor.append("LINE0\n")
editor.font("Open Sans")
editor.append("LINE1")
msp.add_mtext(editor.text, dxfattribs=DXFATTRIBS)
doc_r12 = r12export.convert(doc)
text0, text1 = doc_r12.modelspace()
assert text0.dxf.text == "LINE0"
assert text1.dxf.text == "LINE1"
assert doc_r12.styles.has_entry("MTXPL_OPEN_SANS")
assert doc_r12.styles.has_entry("MTXPL_DEJAVU_SANS_CONDENSED") # default font for TXT
def test_export_virtual_entities():
doc = ezdxf.new(setup=True)
mleaderstyle = doc.mleader_styles.duplicate_entry("Standard", "EZDXF")
mleaderstyle.set_mtext_style("OpenSans")
msp = doc.modelspace()
ml_builder = msp.add_multileader_mtext("EZDXF")
ml_builder.quick_leader(
"Line1\nLine2",
target=Vec2(40, 15),
segment1=Vec2.from_deg_angle(45, 14),
)
doc_r12 = r12export.convert(doc)
assert len(doc_r12.modelspace()) == 5
def test_export_hatch_pattern_fill():
doc = ezdxf.new()
msp = doc.modelspace()
hatch = msp.add_hatch()
hatch.paths.add_polyline_path([(0, 0), (10, 0), (10, 10), (0, 10)])
hatch.set_pattern_fill("ANSI31", scale=0.5)
doc_r12 = r12export.convert(doc)
insert = doc_r12.modelspace()[0]
block = doc_r12.blocks.get(insert.dxf.name)
lines = block.query("LINE")
assert len(lines) > 8
DATA = """160
968
310
C80300000D000000540000002000000002000000033E695D8B227240B00D3CF1FB7B5540000000000000000082C85BAC2FDE7240FB1040429FB05740000000000000000000000000000000000000000000000000000000000000F03F5400000020000000020000004AF9442AE7FA60405A2D686189715A4000000000000000
310
00C0DC003571AE5F40043422DDA4515D40000000000000000000000000000000000000000000000000000000000000F03F64000000040000001EA72DF9806A69402CE3B4E7B59D34400000000000000000770FBC9D50855E4000000000000000000000000000000000000000000000F03FB634003D352CE93FB1DDE561C5C1
310
E33F00000000000000000418DC3967E1F83F000000000C0000001200000000000000D0000000260000001F8BC5F8B8B46A40197732241FF06140000000000000000000000000000000000000000000000000000000000000F03F0943D77B25BDEF3F417457E0C451C0BF00000000000000003100370032002C003400320000
310
00000006000000010000000000000000000440000000000000F03F0000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000041007200690061006C00000061007200690061006C002E007400740066000000000000000C00000012000000FF7F0000
310
6400000004000000813C33FBB3606A400278BF21B8F4614000000000000000009AEFA7C64B37034000000000000000000000000000000000000000000000F03F0943D77B25BDEF3F437457E0C451C0BF0000000000000000182D4454FB210940000000000C00000010000000010000000C0000001700000000000000540000
310
0020000000020000001EA72DF9806A69402CE3B4E7B59D344000000000000000001EA72DF9806A69402CE3B4E7B59D3440000000000000000000000000000000000000000000000000000000000000F03F540000002000000002000000B296839B8D1A724001000000F06355400000000000000000B296839B8D1A72400100
310
0000F0635540000000000000000000000000000000000000000000000000000000000000F03F540000002000000002000000632D073753076140FFFFFFFF2F525A400000000000000000632D073753076140FFFFFFFF2F525A40000000000000000000000000000000000000000000000000000000000000F03F5400000020
310
000000020000000960E446A3456F405AF2DBF448AB604000000000000000000960E446A3456F405AF2DBF448AB6040000000000000000000000000000000000000000000000000000000000000F03F
"""
if __name__ == "__main__":
pytest.main([__file__])