1# Created: 16.03.2011, 2018 rewritten for pytest 2# Copyright (C) 2011-2019, Manfred Moitzi 3# License: MIT License 4import pytest 5 6from ezdxf.entities.dimstyle import DimStyle 7from ezdxf.document import Drawing 8from ezdxf.lldxf.const import DXF12 9 10 11@pytest.fixture 12def dimstyle(): 13 doc = Drawing.new() 14 doc.blocks.new('left_arrow') 15 doc.blocks.new('right_arrow') 16 doc.blocks.new('arrow') 17 doc.blocks.new('_DOT') 18 doc.blocks.new('_OPEN') 19 return DimStyle.new('FFFF', doc=doc, dxfattribs={ 20 'name': 'DIMSTYLE1', 21 }) 22 23 24def test_name(dimstyle): 25 assert 'DIMSTYLE1' == dimstyle.dxf.name 26 27 28def test_set_blk1_and_blk2_arrows(dimstyle): 29 dimstyle.set_arrows('', 'left_arrow', 'right_arrow') 30 assert dimstyle.dxf.dimblk == '' 31 assert dimstyle.dxf.dimblk1 == 'left_arrow' 32 assert dimstyle.dxf.dimblk2 == 'right_arrow' 33 34 35def test_set_both_arrows(dimstyle): 36 dimstyle.set_arrows('arrow') 37 assert dimstyle.dxf.dimblk == 'arrow' 38 assert dimstyle.dxf.dimblk1 == '' 39 assert dimstyle.dxf.dimblk2 == '' 40 41 dimstyle.set_arrows(blk1='OPEN', blk2='DOT') 42 assert dimstyle.dxf.dimblk == '' 43 assert dimstyle.dxf.dimblk1 == 'OPEN' 44 assert dimstyle.dxf.dimblk2 == 'DOT' 45 46 47def test_set_tick(dimstyle): 48 dimstyle.set_tick(.25) 49 assert dimstyle.dxf.dimtsz == .25 50 51 52def test_set_text_align(dimstyle): 53 dimstyle.set_text_align(valign='above') 54 assert dimstyle.dxf.dimtad == 1 55 56 57def test_set_text_format(dimstyle): 58 dimstyle.set_text_format(prefix='+', postfix=' cm', rnd=.5, leading_zeros=False, trailing_zeros=False) 59 assert dimstyle.dxf.dimpost == '+<> cm' 60 assert dimstyle.dxf.dimrnd == .5 61 assert dimstyle.dxf.dimzin == 12 62 63 64@pytest.fixture(scope='module') 65def dimstyle2(): 66 import ezdxf 67 doc = ezdxf.new('R2007', setup=('linetypes',)) 68 doc.blocks.new('left_arrow') 69 doc.blocks.new('right_arrow') 70 doc.blocks.new('TestArrow') 71 doc.blocks.new('arrow') 72 doc.styles.new('TestStyle') 73 return doc.dimstyles.new('testing') 74 75 76def test_handle_export(dimstyle2): 77 dimstyle2.set_arrows('', 'left_arrow', 'right_arrow', 'arrow') 78 # test handles 79 blocks = dimstyle2.doc.blocks 80 left_arrow = blocks.get('left_arrow') 81 right_arrow = blocks.get('right_arrow') 82 leader_arrow = blocks.get('arrow') 83 84 # prepare for export 85 dimstyle2.set_handles() 86 assert dimstyle2.dxf.hasattr('dimblk_handle') is False 87 assert dimstyle2.dxf.dimblk1_handle == left_arrow.block_record_handle 88 assert dimstyle2.dxf.dimblk2_handle == right_arrow.block_record_handle 89 assert dimstyle2.dxf.dimldrblk_handle == leader_arrow.block_record_handle 90 91 92def test_dont_write_handles_for_R12(dimstyle): 93 from ezdxf.lldxf.tagwriter import TagWriter 94 from io import StringIO 95 s = StringIO() 96 t = TagWriter(s) 97 t.dxfversion = DXF12 98 t.write_handles = False 99 dimstyle.export_dxf(t) 100 result = s.getvalue() 101 assert '105\nFFFF\n' not in result 102 103 104def test_dimstyle_name(dimstyle2): 105 assert 'testing' == dimstyle2.dxf.name 106 107 108def test_dimstyle_blk1_and_blk2_ticks(dimstyle2): 109 dimstyle2.set_arrows('', 'left_arrow', 'right_arrow') 110 assert dimstyle2.get_dxf_attrib('dimblk') == '' 111 assert dimstyle2.get_dxf_attrib('dimblk1') == 'left_arrow' 112 assert dimstyle2.get_dxf_attrib('dimblk2') == 'right_arrow' 113 114 115def test_dimstyle_both_ticks(dimstyle2): 116 dimstyle2.set_arrows('arrow') 117 assert dimstyle2.get_dxf_attrib('dimblk') == 'arrow' 118 assert dimstyle2.get_dxf_attrib('dimblk1') == '' # closed filled 119 assert dimstyle2.get_dxf_attrib('dimblk2') == '' # closed filled 120 121 assert dimstyle2.get_dxf_attrib('dimblk1') == '' 122 assert dimstyle2.get_dxf_attrib('dimblk2') == '' 123 124 125def test_dimstyle_virtual_dimtxsty_attribute(dimstyle2): 126 dimstyle2.dxf.dimtxsty = 'TestStyle' 127 assert dimstyle2.dxf.dimtxsty == 'TestStyle' 128 129 # prepare for export 130 dimstyle2.set_handles() 131 assert dimstyle2.dxf.dimtxsty_handle == dimstyle2.doc.styles.get('TestStyle').dxf.handle 132 133 134def test_dimstyle_virtual_dimldrblk_attribute(dimstyle2): 135 dimstyle2.dxf.dimldrblk = 'CLOSED' 136 137 dimstyle2.dxf.dimldrblk = 'TestArrow' 138 assert dimstyle2.dxf.dimldrblk == 'TestArrow' 139 140 141def test_dimstyle_virtual_linetypes_attributes(dimstyle2): 142 dimstyle2.dxf.dimltype = 'DOT2' 143 assert dimstyle2.dxf.dimltype == 'DOT2' 144 145 dimstyle2.dxf.dimltex1 = 'DOT' 146 assert dimstyle2.dxf.dimltex1 == 'DOT' 147 148 dimstyle2.dxf.dimltex2 = 'DOTX2' 149 assert dimstyle2.dxf.dimltex2 == 'DOTX2' 150 151 # prepare for export 152 dimstyle2.set_handles() 153 assert dimstyle2.dxf.dimltype_handle == dimstyle2.doc.linetypes.get('DOT2').dxf.handle 154 assert dimstyle2.dxf.dimltex1_handle == dimstyle2.doc.linetypes.get('DOT').dxf.handle 155 assert dimstyle2.dxf.dimltex2_handle == dimstyle2.doc.linetypes.get('DOTX2').dxf.handle 156 157 158def test_dimstyle_group_codes(dimstyle): 159 codes = DimStyle.CODE_TO_DXF_ATTRIB 160 assert 105 not in codes 161 assert 2 not in codes 162 163 164def test_dimstyle_set_align(dimstyle2): 165 dimstyle2.set_text_align(valign='above') 166 assert dimstyle2.dxf.dimtad == 1 167 dimstyle2.set_text_align(halign='above1') 168 assert dimstyle2.dxf.dimjust == 3 169 170 171def test_set_text_format_2(dimstyle2): 172 dimstyle2.set_text_format( 173 prefix='+', 174 postfix=' cm', 175 rnd=.5, 176 dec=2, 177 sep='.', 178 leading_zeros=False, 179 trailing_zeros=False, 180 ) 181 assert dimstyle2.dxf.dimpost == '+<> cm' 182 assert dimstyle2.dxf.dimrnd == .5 183 assert dimstyle2.dxf.dimdec == 2 184 assert dimstyle2.dxf.dimdsep == ord('.') 185 assert dimstyle2.dxf.dimzin == 12 186 187 188def test_set_dimline_format(dimstyle2): 189 dimstyle2.set_dimline_format( 190 color=2, 191 linetype='DOT', 192 lineweight=18, 193 extension=.33, 194 disable1=True, 195 disable2=True, 196 ) 197 assert dimstyle2.dxf.dimclrd == 2 198 assert dimstyle2.dxf.dimltype == 'DOT' 199 assert dimstyle2.dxf.dimlwd == 18 200 assert dimstyle2.dxf.dimdle == .33 201 assert dimstyle2.dxf.dimsd1 == 1 202 assert dimstyle2.dxf.dimsd2 == 1 203 204 205def test_set_extline_format(dimstyle2): 206 dimstyle2.set_extline_format( 207 color=2, 208 lineweight=18, 209 extension=.33, 210 offset=.77, 211 fixed_length=.5, 212 ) 213 assert dimstyle2.dxf.dimclre == 2 214 assert dimstyle2.dxf.dimlwe == 18 215 assert dimstyle2.dxf.dimexe == .33 216 assert dimstyle2.dxf.dimexo == .77 217 assert dimstyle2.dxf.dimfxlon == 1 218 assert dimstyle2.dxf.dimfxl == .5 219 220 221def test_set_extline1(dimstyle2): 222 dimstyle2.set_extline1( 223 linetype='DOT', 224 disable=True, 225 ) 226 assert dimstyle2.dxf.dimltex1 == 'DOT' 227 assert dimstyle2.dxf.dimse1 == 1 228 229 230def test_set_extline2(dimstyle2): 231 dimstyle2.set_extline2( 232 linetype='DOT', 233 disable=True, 234 ) 235 assert dimstyle2.dxf.dimltex2 == 'DOT' 236 assert dimstyle2.dxf.dimse2 == 1 237