File: test_811c_viewport_processing.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 (84 lines) | stat: -rw-r--r-- 2,814 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
#  Copyright (c) 2023, Manfred Moitzi
#  License: MIT License

import pytest
from ezdxf.addons.drawing.frontend import _draw_viewports
from ezdxf.entities import Viewport


# The "id" attribute is not evaluated in the current implementation of VIEWPORT
# processing.
def new_viewport(status=0, id=0):
    return Viewport.new(dxfattribs={"status": status, "id": id})


class Frontend:
    def __init__(self):
        self.viewports = []

    def draw_viewport(self, vp):
        self.viewports.append(vp)


@pytest.fixture
def frontend():
    return Frontend()


def test_ignore_active_viewport(frontend):
    # The "active" viewport determines how the paperspace layout is presented as a
    # whole (location & zoom state).
    vp0 = new_viewport(1, 1)  # "active" viewport - ignored
    vp1 = new_viewport(2, 2)  # paperspace viewport - drawn
    _draw_viewports(frontend, [vp0, vp1])
    assert frontend.viewports[0] is vp1


def test_ignore_only_the_first_active_viewport(frontend):
    vp0 = new_viewport(1, 1)  # "active" viewport - ignored
    vp1 = new_viewport(1, 1)  # accidentally second "active" viewport - drawn
    vp2 = new_viewport(2, 2)  # paperspace viewport - drawn
    _draw_viewports(frontend, [vp0, vp1, vp2])
    assert frontend.viewports[0] is vp1
    assert frontend.viewports[1] is vp2


def test_ignore_missing_active_viewport(frontend):
    # No "active" viewport (status=1) defined - this is maybe not a valid paperspace
    # setup!
    vp0 = new_viewport(2, 2)  # paperspace viewport - drawn
    vp1 = new_viewport(3, 3)  # paperspace viewport - drawn
    _draw_viewports(frontend, [vp0, vp1])
    assert frontend.viewports[0] is vp0
    assert frontend.viewports[1] is vp1


def test_ignore_BricsCAD_off_viewports(frontend):
    vp0 = new_viewport(1, 1)  # "active" viewport - ignored
    # BricsCAD set the id to -1 if the viewport is off and 'status' (group code 68)
    # is not present.
    vp1 = Viewport.new(dxfattribs={"id": -1})
    vp2 = new_viewport(3, 3)  # paperspace viewport - drawn
    _draw_viewports(frontend, [vp0, vp1, vp2])
    assert frontend.viewports[0] is vp2


def test_ignore_off_screen_viewports(frontend):
    vp0 = new_viewport(1, 1)  # "active" viewport - ignored
    vp1 = new_viewport(-1, 2)  # off-screen viewport - ignored
    vp2 = new_viewport(2, 3)  # paperspace viewport - drawn
    _draw_viewports(frontend, [vp0, vp1, vp2])
    assert frontend.viewports[0] is vp2


def test_draw_viewports_in_order_of_status(frontend):
    vp0 = new_viewport(1, 1)  # "active" viewport - ignored
    vp1 = new_viewport(status=3, id=2)
    vp2 = new_viewport(status=2, id=3)
    _draw_viewports(frontend, [vp0, vp1, vp2])
    assert frontend.viewports[0] is vp2
    assert frontend.viewports[1] is vp1


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