Skip to content

Commit 846ffa0

Browse files
committed
add example simple_page_setup.py
1 parent 9ca9bd8 commit 846ffa0

File tree

5 files changed

+69
-14
lines changed

5 files changed

+69
-14
lines changed

docs/source/tutorials/psp_viewports.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ applications may not print that content.
7373
paper size does shift the layout content, because all paper sizes are defined
7474
without margins. Maybe it's preferable to set all margins to zero.
7575

76+
I added the helper method :meth:`~ezdxf.document.Drawing.page_setup` to the
77+
:class:`~ezdxf.document.Drawing` class and an example `simple_page_setup.py`_
78+
how to use it.
79+
7680
Adding Viewports
7781
----------------
7882

@@ -213,4 +217,5 @@ Supported property overrides:
213217
.. _About Plotting: https://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-2DB9EB8C-767C-4C91-B0A3-FFFEC4C5863A
214218
.. _About Setting the Plot Scale: https://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-89604826-0B55-4994-8214-1CA93FA66985
215219
.. _General Procedure for Printing: https://help.bricsys.com/document/_guides--BCAD_printing_and_plotting--GD_generalprocedureforprinting/V23/EN_US?id=165079156041
216-
.. _viewports_override_layer_attributes.py: https://github.com/mozman/ezdxf/blob/master/examples/viewports_override_layer_attributes.py
220+
.. _viewports_override_layer_attributes.py: https://github.com/mozman/ezdxf/blob/master/examples/viewports_override_layer_attributes.py
221+
.. _simple_page_setup.py: https://github.com/mozman/ezdxf/blob/master/examples/simple_page_setup.py

examples/simple_page_setup.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright (c) 2022, Manfred Moitzi
2+
# License: MIT License
3+
4+
import pathlib
5+
import ezdxf
6+
from ezdxf.layouts import Paperspace
7+
8+
CWD = pathlib.Path("~/Desktop/Outbox").expanduser()
9+
if not CWD.exists():
10+
CWD = pathlib.Path(".")
11+
12+
# ------------------------------------------------------------------------------
13+
# This example shows how to use the simple page setup method of the Drawing object.
14+
#
15+
# This setup creates simple layouts without margins and offset, this way changing
16+
# the output device is easy at least is BricsCAD.
17+
# ------------------------------------------------------------------------------
18+
19+
20+
def draw_crossings_lines(psp: Paperspace):
21+
# These layouts have no margins and offset defined, so the drawing space is
22+
# the whole sheet, but printers and plotters will not print to the
23+
# border of the sheet! In real world files keep always a safety space between
24+
# the sheet borders and the content. The size of that safety space cannot be
25+
# known because it's different for each printer and plotter.
26+
width = psp.dxf.paper_width
27+
height = psp.dxf.paper_height
28+
psp.add_line((0, 0), (width, height))
29+
psp.add_line((0, height), (width, 0))
30+
31+
32+
def main():
33+
doc = ezdxf.new()
34+
layout1 = doc.page_setup("Layout1", "ISO A0", landscape=True)
35+
layout2 = doc.page_setup("Layout2", "ISO A0", landscape=False)
36+
draw_crossings_lines(layout1)
37+
draw_crossings_lines(layout2)
38+
doc.saveas(CWD / "simple_page_setup.dxf")
39+
40+
41+
if __name__ == "__main__":
42+
main()

integration_tests/test_document_page_setup.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,19 @@
55
import ezdxf
66

77

8+
def test_simple_page_setup_is_not_supported_for_DXF_R12():
9+
doc = ezdxf.new("R12")
10+
with pytest.raises(ezdxf.DXFVersionError):
11+
doc.page_setup("Layout1")
12+
13+
814
def test_reset_layout1_landscape():
915
doc = ezdxf.new()
1016
assert len(doc.layouts) == 2
1117
psp = doc.page_setup("Layout1", fmt="ISO A0")
1218
assert len(doc.layouts) == 2
13-
assert psp.dxf_layout.dxf.paper_width == 1189
14-
assert psp.dxf_layout.dxf.paper_height == 841
19+
assert psp.dxf.paper_width == 1189
20+
assert psp.dxf.paper_height == 841
1521

1622

1723
def test_invalid_paper_format_returns_A3():
@@ -25,8 +31,8 @@ def test_reset_layout1_portrait():
2531
assert len(doc.layouts) == 2
2632
psp = doc.page_setup("Layout1", fmt="ISO A0", landscape=False)
2733
assert len(doc.layouts) == 2
28-
assert psp.dxf_layout.dxf.paper_width == 841
29-
assert psp.dxf_layout.dxf.paper_height == 1189
34+
assert psp.dxf.paper_width == 841
35+
assert psp.dxf.paper_height == 1189
3036

3137

3238
def test_resetting_layout1_creates_a_new_main_viewport():
@@ -51,9 +57,9 @@ def test_new_layout2():
5157
assert len(doc.layouts) == 2
5258
psp = doc.page_setup("Layout2", fmt="ISO A0")
5359
assert len(doc.layouts) == 3
54-
assert psp.dxf_layout.dxf.paper_width == 1189
55-
assert psp.dxf_layout.dxf.paper_height == 841
60+
assert psp.dxf.paper_width == 1189
61+
assert psp.dxf.paper_height == 841
5662

5763

58-
if __name__ == '__main__':
64+
if __name__ == "__main__":
5965
pytest.main([__file__])

src/ezdxf/document.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -947,8 +947,8 @@ def page_setup(
947947
landscape=True,
948948
) -> Paperspace:
949949
"""
950-
Creates a new paperspace layout if `name` does not
951-
exist or reset the existing layout.
950+
Creates a new paperspace layout if `name` does not exist or reset the
951+
existing layout. This method requires DXF R2000 or newer.
952952
The paper format name `fmt` defines one of the following paper sizes,
953953
measures in landscape orientation:
954954
@@ -986,6 +986,8 @@ def page_setup(
986986
"""
987987
from ezdxf.tools.standards import PAGE_SIZES
988988

989+
if self.acad_release == "R12":
990+
raise const.DXFVersionError("method call no supported for DXF R12")
989991
width: float
990992
height: float
991993
try:

src/ezdxf/layouts/layout.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ def add_new_main_viewport(self) -> Viewport:
574574
def page_setup(
575575
self,
576576
size: Tuple[float, float] = (297, 210),
577-
margins: Tuple[float, float, float, float] = (10, 15, 10, 15),
577+
margins: Tuple[float, float, float, float] = (0, 0, 0, 0),
578578
units: str = "mm",
579579
offset: Tuple[float, float] = (0, 0),
580580
rotation: int = 0,
@@ -713,10 +713,10 @@ def get_paper_limits(self) -> Tuple[Vec2, Vec2]:
713713

714714
def page_setup_r12(
715715
self,
716-
size: Tuple[int, int] = (297, 210),
717-
margins: Tuple[int, int, int, int] = (0, 0, 0, 0),
716+
size: Tuple[float, float] = (297, 210),
717+
margins: Tuple[float, float, float, float] = (0, 0, 0, 0),
718718
units: str = "mm",
719-
offset: Tuple[int, int] = (0, 0),
719+
offset: Tuple[float, float] = (0, 0),
720720
rotation: float = 0,
721721
scale: Union[int, Tuple[float, float]] = 16,
722722
) -> None:

0 commit comments

Comments
 (0)