File: test_r12strict.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 (201 lines) | stat: -rw-r--r-- 6,055 bytes parent folder | download
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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#  Copyright (c) 2023, Manfred Moitzi
#  License: MIT License

import pytest
import ezdxf
from ezdxf.entities import DXFEntity
from ezdxf.document import Drawing
from ezdxf import r12strict


def set_xdata(entity: DXFEntity):
    entity.set_xdata("my appid", [(1003, "my layer")])


def setup_drawing(doc: Drawing):
    doc.appids.add("my appid")
    doc.linetypes.add("my ltype", [0])
    doc.layers.add("my layer", linetype="my ltype")
    doc.styles.add("my style", font="arial.ttf")
    doc.dimstyles.add(
        "my dimstyle",
        dxfattribs={
            "dimblk": "my block 0",
            "dimblk1": "my block 1",
            "dimblk2": "my block 2",
        },
    )
    doc.ucs.add("my ucs")
    doc.views.add("my view")
    doc.viewports.add("my vport")

    doc.header["$CELTYPE"] = "my ltype"
    doc.header["$CLAYER"] = "my layer"
    doc.header["$DIMBLK"] = "my block 0"
    doc.header["$DIMBLK1"] = "my block 1"
    doc.header["$DIMBLK2"] = "my block 2"
    doc.header["$DIMSTYLE"] = "my dimstyle"
    doc.header["$TEXTSTYLE"] = "my style"
    doc.header["$UCSNAME"] = "my ucs"

    common_attribs = {"layer": "my layer", "linetype": "my ltype"}
    for name in ["my block 0", "my block 1", "my block 2"]:
        blk = doc.blocks.new(name)
        blk.add_point((0, 0), dxfattribs=common_attribs)

    msp = doc.modelspace()
    set_xdata(msp.block_record.block)

    msp.add_line((0, 0), (1, 0), dxfattribs=common_attribs)

    text = msp.add_text("any text", dxfattribs=common_attribs)
    text.dxf.style = "my style"
    set_xdata(text)

    insert = msp.add_blockref("my block 0", (0, 0), dxfattribs=common_attribs)
    insert.add_attrib("my attrib", "any value")

    msp.add_linear_dim(
        (0, 0), (0, 0), (1, 0), dimstyle="my dimstyle", dxfattribs=common_attribs
    )


@pytest.fixture(scope="module")
def doc():
    doc = ezdxf.new("R12")
    setup_drawing(doc)
    r12strict.translate_names(doc)
    return doc


def test_translated_header_vars(doc: Drawing):
    assert doc.header["$CLAYER"] == "MY_LAYER"
    assert doc.header["$CELTYPE"] == "MY_LTYPE"
    assert doc.header["$DIMBLK"] == "MY_BLOCK_0"
    assert doc.header["$DIMBLK1"] == "MY_BLOCK_1"
    assert doc.header["$DIMBLK2"] == "MY_BLOCK_2"
    assert doc.header["$DIMSTYLE"] == "MY_DIMSTYLE"
    assert doc.header["$TEXTSTYLE"] == "MY_STYLE"
    assert doc.header["$UCSNAME"] == "MY_UCS"


def test_translated_appid(doc: Drawing):
    my_appid = doc.appids.get("MY_APPID")
    assert my_appid.dxf.name == "MY_APPID"


def test_translated_ltype(doc: Drawing):
    my_ltype = doc.linetypes.get("MY_LTYPE")
    assert my_ltype.dxf.name == "MY_LTYPE"


def test_translated_layer(doc: Drawing):
    my_layer = doc.layers.get("MY_LAYER")
    assert my_layer.dxf.name == "MY_LAYER"
    assert my_layer.dxf.linetype == "MY_LTYPE"


def test_translated_text_style(doc: Drawing):
    my_style = doc.styles.get("MY_STYLE")
    assert my_style.dxf.name == "MY_STYLE"


def test_translated_dimstyle(doc: Drawing):
    my_dimstyle = doc.dimstyles.get("MY_DIMSTYLE")
    assert my_dimstyle.dxf.name == "MY_DIMSTYLE"
    assert my_dimstyle.dxf.dimblk == "MY_BLOCK_0"
    assert my_dimstyle.dxf.dimblk1 == "MY_BLOCK_1"
    assert my_dimstyle.dxf.dimblk2 == "MY_BLOCK_2"


def test_translated_ucs(doc: Drawing):
    my_ucs = doc.ucs.get("MY_UCS")
    assert my_ucs.dxf.name == "MY_UCS"


def test_translated_view(doc: Drawing):
    my_view = doc.views.get("MY_VIEW")
    assert my_view.dxf.name == "MY_VIEW"


def test_translated_vport(doc: Drawing):
    my_vport = doc.viewports.get("MY_VPORT")
    assert my_vport[0].dxf.name == "MY_VPORT"


def test_translated_common_attributes(doc: Drawing):
    for entity in doc.modelspace():
        assert entity.dxf.layer == "MY_LAYER"
        assert entity.dxf.linetype == "MY_LTYPE"


def test_translated_text_attributes(doc: Drawing):
    text = doc.modelspace().query("TEXT").first
    assert text.dxf.style == "MY_STYLE"


def test_translated_text_xdata(doc: Drawing):
    text = doc.modelspace().query("TEXT").first
    xdata = text.get_xdata("MY_APPID")
    assert xdata[0] == (1003, "MY_LAYER")


def test_translated_dimension_attributes(doc: Drawing):
    dimension = doc.modelspace().query("DIMENSION").first
    assert dimension.dxf.dimstyle == "MY_DIMSTYLE"


def test_translated_block_reference_attributes(doc: Drawing):
    insert = doc.modelspace().query("INSERT").first
    attribute = insert.attribs[0]
    assert attribute.dxf.tag == "MY_ATTRIB"


def test_translated_modelspace_xdata(doc: Drawing):
    msp = doc.modelspace()
    xdata = msp.block_record.block.get_xdata("MY_APPID")
    assert xdata[0] == (1003, "MY_LAYER")


@pytest.mark.parametrize("name", ["MY_BLOCK_0", "MY_BLOCK_1", "MY_BLOCK_0"])
def test_translated_block_layout_names(doc: Drawing, name: str):
    assert name in doc.blocks
    block_layout = doc.blocks.get(name)
    assert block_layout.name == name
    assert block_layout.block_record.dxf.name == name
    assert block_layout.block_record.block.dxf.name == name


def test_translated_block_content_attributes(doc: Drawing):
    assert "MY_BLOCK_0" in doc.blocks
    block_layout = doc.blocks.get("MY_BLOCK_0")
    for entity in block_layout:
        assert entity.dxf.layer == "MY_LAYER"
        assert entity.dxf.linetype == "MY_LTYPE"


def test_clean_xdata_from_table_entries():
    doc = ezdxf.new("R12")
    doc.appids.new("MY_ID")
    layer = doc.layers.new("MY_LAYER")
    layer.set_xdata("MY_ID", [(1000, "Test")])

    r12strict.clean(doc)
    assert layer.xdata is None, "expected XDATA to be deleted"


def test_remove_legacy_blocks():
    doc = ezdxf.new("R12")
    doc.blocks.new("$Model_Space")
    doc.blocks.new("$Paper_Space")

    r12strict.clean(doc)
    # block names are case-insensitive
    assert "$MODEL_SPACE" not in doc.blocks
    assert "$PAPER_SPACE" not in doc.blocks
    assert doc.block_records.has_entry("$Model_Space") is False
    assert doc.block_records.has_entry("$Paper_Space") is False


if __name__ == "__main__":
    pytest.main([__file__])