1# Copyright (c) 2019 Manfred Moitzi
2# License: MIT License
3
4import ezdxf
5import pytest
6
7from ezdxf.render.dimension import LinearDimension, DimStyleOverride
8
9
10@pytest.fixture(scope='module')
11def dwg():
12    return ezdxf.new('R2007', setup=True)
13
14
15def test_linear_dimension_with_one_tolerance(dwg):
16    msp = dwg.modelspace()
17    dimline = msp.add_linear_dim(base=(0, 10), p1=(0, 0), p2=(100, 0))
18    override = {
19        'dimlfac': 1,
20        'dimtol': 1,
21        'dimtfac': .5,
22        'dimtolj': 0,
23        'dimtp': 0.01,
24        'dimtm': 0.01,
25    }
26    style = DimStyleOverride(dimline.dimension, override)
27    renderer = LinearDimension(dimline.dimension, override=style)
28    assert renderer.text == '100'
29    assert renderer.text_decimal_separator == '.'
30    assert renderer.tol_decimal_places == 4  # default value
31    assert renderer.tol_text == '±0.0100'
32    assert renderer.tol_valign == 0
33    assert renderer.compile_mtext() == r"\A0;100{\H0.50x;±0.0100}"
34
35
36def test_linear_dimension_with_two_tolerances(dwg):
37    msp = dwg.modelspace()
38    dimline = msp.add_linear_dim(base=(0, 10), p1=(0, 0), p2=(101, 0))
39    override = {
40        'dimlfac': 1,
41        'dimtol': 1,
42        'dimtfac': .5,
43        'dimtolj': 1,
44        'dimtp': 0.02,
45        'dimtm': 0.03,
46    }
47    style = DimStyleOverride(dimline.dimension, override)
48    renderer = LinearDimension(dimline.dimension, override=style)
49    assert renderer.text == '101'
50    assert renderer.text_decimal_separator == '.'
51    assert renderer.tol_decimal_places == 4  # default value
52    assert renderer.tol_text_upper == '+0.0200'
53    assert renderer.tol_text_lower == '-0.0300'
54    assert renderer.tol_valign == 1
55    assert renderer.compile_mtext() == r"\A1;101{\H0.50x;\S+0.0200^ -0.0300;}"
56
57
58def test_linear_dimension_with_limits(dwg):
59    msp = dwg.modelspace()
60    dimline = msp.add_linear_dim(base=(0, 10), p1=(0, 0), p2=(101, 0))
61    override = {
62        'dimlfac': 1,
63        'dimlim': 1,
64        'dimtfac': .5,
65        'dimtp': 0.02,
66        'dimtm': 0.03,
67    }
68    style = DimStyleOverride(dimline.dimension, override)
69    renderer = LinearDimension(dimline.dimension, override=style)
70    assert renderer.text == '101'
71    assert renderer.text_decimal_separator == '.'
72    assert renderer.tol_decimal_places == 4  # default value
73    assert renderer.tol_text_upper == '101.0200'
74    assert renderer.tol_text_lower == '100.9700'
75    assert renderer.compile_mtext() == r"{\H0.50x;\S101.0200^ 100.9700;}"
76
77
78