# Created: 22.03.2011 # Copyright (c) 2011-2018, Manfred Moitzi # License: MIT-License from .dxfobjects import DXFObject, none_subclass, ExtendedTags, DXFAttr, DXFAttributes, DefSubclass, XType plot_settings_subclass = DefSubclass('AcDbPlotSettings', { 'page_setup_name': DXFAttr(1), 'plot_configuration_file': DXFAttr(2), 'paper_size': DXFAttr(4), 'plot_view_name': DXFAttr(6), 'left_margin': DXFAttr(40), # in mm 'bottom_margin': DXFAttr(41), # in mm 'right_margin': DXFAttr(42), # in mm 'top_margin': DXFAttr(43), # in mm 'paper_width': DXFAttr(44), # in mm 'paper_height': DXFAttr(45), # in mm 'plot_origin_x_offset': DXFAttr(46, default=0.), # in mm 'plot_origin_y_offset': DXFAttr(47, default=0.), # in mm 'plot_window_x1': DXFAttr(48, default=0.), 'plot_window_y1': DXFAttr(49, default=0.), 'plot_window_x2': DXFAttr(140, default=0.), 'plot_window_y2': DXFAttr(141, default=0.), 'scale_numerator': DXFAttr(142, default=1.), # Numerator of custom print scale: real world (paper) units 'scale_denominator': DXFAttr(143, default=1.), # Denominator of custom print scale: drawing units 'plot_layout_flags': DXFAttr(70), # 1 = Plot Viewport Borders # 2 = Show Plot Styles # 4 = Plot Centered # 8 = Plot Hidden # 16 = Use Standard Scale # 32 = Plot Plot Styles # 64 = Scale Lineweights # 128 = Print Lineweights # 512 = Draw Viewports First # 1024 = Model Type # 2048 = Update Paper # 4096 = Zoom To Paper On Update # 8192 = Initializing # 16384 = Prev PlotInit 'plot_paper_units': DXFAttr(72), # 0 = Plot in inches; 1 = Plot in millimeters; 2 = Plot in pixels 'plot_rotation': DXFAttr(73), # 0 = No rotation # 1 = 90 degrees counterclockwise # 2 = Upside-down # 3 = 90 degrees clockwise 'plot_type': DXFAttr(74), # 0 = Last screen display # 1 = Drawing extents # 2 = Drawing limits # 3 = View specified by code 6 # 4 = Window specified by codes 48, 49, 140, and 141 # 5 = Layout information 'current_style_sheet': DXFAttr(7), 'standard_scale_type': DXFAttr(75), # 0 = Scaled to Fit # 1 = 1/128"=1' # 2 = 1/64"=1' # 3 = 1/32"=1' # 4 = 1/16"=1' # 5 = 3/32"=1' # 6 = 1/8"=1' # 7 = 3/16"=1' # 8 = 1/4"=1' # 9 = 3/8"=1' # 10 = 1/2"=1' # 11 = 3/4"=1' # 12 = 1"=1' # 13 = 3"=1' # 14 = 6"=1' # 15 = 1'=1' # 16 = 1:1 # 17 = 1:2 # 18 = 1:4 # 19 = 1:8 # 20 = 1:10 # 21 = 1:16 # 22 = 1:20 # 23 = 1:30 # 24 = 1:40 # 25 = 1:50 # 26 = 1:100 # 27 = 2:1 # 28 = 4:1 # 29 = 8:1 # 30 = 10:1 # 31 = 100:1 # 32 = 1000:1 'shade_plot_mode': DXFAttr(76), # 0 = As Displayed; 1 = Wireframe; 2 = Hidden; 3 = Rendered 'shade_plot_resolution_level': DXFAttr(77), # 0 = Draft # 1 = Preview # 2 = Normal # 3 = Presentation # 4 = Maximum # 5 = Custom 'shade_plot_custom_dpi': DXFAttr(78), # Valid range: 100 to 32767, Only applied when the shade_plot_resolution level is set to 5 (Custom) 'unit_factor': DXFAttr(147), # 147: factor for unit conversion (mm -> inches) # 147: DXF Reference error 'A floating point scale factor that represents the standard scale value specified in code 75' 'paper_image_origin_x': DXFAttr(148), 'paper_image_origin_y': DXFAttr(149), 'shade_plot_handle': DXFAttr(333), }) class DXFPlotSettings(DXFObject): __slots__ = () DXFATTRIBS = DXFAttributes(none_subclass, plot_settings_subclass) # removed reactors 5 .. 102 330 102 .. 330 _LAYOUT_TPL = """0 LAYOUT 5 0 330 1A 100 AcDbPlotSettings 1 2 Adobe PDF 4 A4 6 40 3.175 41 3.175 42 3.175 43 3.175 44 209.91 45 297.03 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 1 74 5 7 75 16 147 1.0 76 0 77 2 78 300 148 0.0 149 0.0 100 AcDbLayout 1 Layoutname 70 1 71 1 10 -3.175 20 -3.175 11 293.857 21 206.735 12 0.0 22 0.0 32 0.0 14 29.068 24 20.356 34 0.0 15 261.614 25 183.204 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 1 330 0 """ class DXFLayout(DXFObject): __slots__ = () TEMPLATE = ExtendedTags.from_text(_LAYOUT_TPL) DXFATTRIBS = DXFAttributes( none_subclass, plot_settings_subclass, DefSubclass('AcDbLayout', { 'name': DXFAttr(1), # layout name 'layout_flags': DXFAttr(70), 'taborder': DXFAttr(71), 'limmin': DXFAttr(10, xtype=XType.point2d), # minimum limits 'limmax': DXFAttr(11, xtype=XType.point2d), # maximum limits 'insert_base': DXFAttr(12, xtype=XType.point3d), # Insertion base point for this layout 'extmin': DXFAttr(14, xtype=XType.point3d), # Minimum extents for this layout 'extmax': DXFAttr(15, xtype=XType.point3d), # Maximum extents for this layout 'elevation': DXFAttr(146, default=0.), 'ucs_origin': DXFAttr(13, xtype=XType.point3d), 'ucs_xaxis': DXFAttr(16, xtype=XType.point3d), 'ucs_yaxis': DXFAttr(17, xtype=XType.point3d), 'ucs_type': DXFAttr(76), # Orthographic type of UCS 0 = UCS is not orthographic; # 1 = Top; 2 = Bottom; 3 = Front; 4 = Back; 5 = Left; 6 = Right 'block_record': DXFAttr(330), 'viewport': DXFAttr(331), # ID/handle to the viewport that was last active in this # layout when the layout was current 'ucs': DXFAttr(345), # ID/handle of AcDbUCSTableRecord if UCS is a named # UCS. If not present, then UCS is unnamed 'base_ucs': DXFAttr(346), # ID/handle of AcDbUCSTableRecord of base UCS if UCS is # orthographic (76 code is non-zero). If not present and # 76 code is non-zero, then base UCS is taken to be WORLD }))