We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 9ca9bd8 commit 846ffa0Copy full SHA for 846ffa0
docs/source/tutorials/psp_viewports.rst
@@ -73,6 +73,10 @@ applications may not print that content.
73
paper size does shift the layout content, because all paper sizes are defined
74
without margins. Maybe it's preferable to set all margins to zero.
75
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
+
80
Adding Viewports
81
----------------
82
@@ -213,4 +217,5 @@ Supported property overrides:
213
217
.. _About Plotting: https://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-2DB9EB8C-767C-4C91-B0A3-FFFEC4C5863A
214
218
.. _About Setting the Plot Scale: https://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-89604826-0B55-4994-8214-1CA93FA66985
215
219
.. _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
@@ -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
@@ -5,13 +5,19 @@
import ezdxf
+def test_simple_page_setup_is_not_supported_for_DXF_R12():
+ doc = ezdxf.new("R12")
+ with pytest.raises(ezdxf.DXFVersionError):
+ doc.page_setup("Layout1")
def test_reset_layout1_landscape():
doc = ezdxf.new()
assert len(doc.layouts) == 2
psp = doc.page_setup("Layout1", fmt="ISO A0")
- assert psp.dxf_layout.dxf.paper_width == 1189
- assert psp.dxf_layout.dxf.paper_height == 841
+ assert psp.dxf.paper_width == 1189
+ assert psp.dxf.paper_height == 841
def test_invalid_paper_format_returns_A3():
@@ -25,8 +31,8 @@ def test_reset_layout1_portrait():
psp = doc.page_setup("Layout1", fmt="ISO A0", landscape=False)
- assert psp.dxf_layout.dxf.paper_width == 841
- assert psp.dxf_layout.dxf.paper_height == 1189
+ assert psp.dxf.paper_width == 841
+ assert psp.dxf.paper_height == 1189
def test_resetting_layout1_creates_a_new_main_viewport():
@@ -51,9 +57,9 @@ def test_new_layout2():
51
57
52
58
psp = doc.page_setup("Layout2", fmt="ISO A0")
53
59
assert len(doc.layouts) == 3
54
55
60
61
56
62
63
-if __name__ == '__main__':
64
65
pytest.main([__file__])
src/ezdxf/document.py
@@ -947,8 +947,8 @@ def page_setup(
947
landscape=True,
948
) -> Paperspace:
949
"""
950
- Creates a new paperspace layout if `name` does not
951
- exist or reset the existing layout.
+ Creates a new paperspace layout if `name` does not exist or reset the
+ existing layout. This method requires DXF R2000 or newer.
952
The paper format name `fmt` defines one of the following paper sizes,
953
measures in landscape orientation:
954
@@ -986,6 +986,8 @@ def page_setup(
986
987
from ezdxf.tools.standards import PAGE_SIZES
988
989
+ if self.acad_release == "R12":
990
+ raise const.DXFVersionError("method call no supported for DXF R12")
991
width: float
992
height: float
993
try:
src/ezdxf/layouts/layout.py
@@ -574,7 +574,7 @@ def add_new_main_viewport(self) -> Viewport:
574
def page_setup(
575
self,
576
size: Tuple[float, float] = (297, 210),
577
- margins: Tuple[float, float, float, float] = (10, 15, 10, 15),
+ margins: Tuple[float, float, float, float] = (0, 0, 0, 0),
578
units: str = "mm",
579
offset: Tuple[float, float] = (0, 0),
580
rotation: int = 0,
@@ -713,10 +713,10 @@ def get_paper_limits(self) -> Tuple[Vec2, Vec2]:
713
714
def page_setup_r12(
715
716
- size: Tuple[int, int] = (297, 210),
717
- margins: Tuple[int, int, int, int] = (0, 0, 0, 0),
+ size: Tuple[float, float] = (297, 210),
718
719
- offset: Tuple[int, int] = (0, 0),
+ offset: Tuple[float, float] = (0, 0),
720
rotation: float = 0,
721
scale: Union[int, Tuple[float, float]] = 16,
722
) -> None:
0 commit comments