Ë
    £èhÐ×  ã                  óp  — d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d d	lm Z  d d
l!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl,m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZU d dlVmWZW d dlXmYZYmZZZ d d lm[Z[m\Z\  ejº                  d!«      Z^er:d d"l_m`Z`maZambZbmcZc d d#ldmeZe d d$l'mfZf d d%lgmhZh d d&limjZj d d'lOmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs d(Ztd)Zud*Zvd+Zwd,Zxd<d-„Zy G d.„ d/«      Zz G d0„ d1ejö                  «      Z|d2„ Z} G d3„ d4e|«      Z~ G d5„ d6e|«      Zd=d>d7„Z€d?d8„Z�d@d9„Z‚dAdBd:„ZƒdCd;„Z„y)Dé    )Úannotations)ÚTYPE_CHECKINGÚTextIOÚBinaryIOÚIterableÚIteratorÚUnionÚCallableÚcastÚOptionalÚSequenceÚAnyN)ÚdatetimeÚtimezone)Úchain)ÚAuditor)ÚGroupCollection)ÚMaterialCollection)ÚMLeaderStyleCollection)ÚMLineStyleCollection)ÚEntityDB)Úgroupby)Ú
ModelspaceÚ
Paperspace)ÚLayouts)Úconst)ÚBLK_XREFÚBLK_EXTERNALÚDXF13ÚDXF14ÚDXF2000ÚDXF2007ÚDXF12ÚDXF2013)Úloader)ÚAbstractTagWriterÚ	TagWriterÚBinaryTagWriterÚJSONTagWriter)ÚEntityQuery)ÚDimensionRenderer)ÚAcDsDataSectionÚnew_acds_data_section)ÚBlocksSection)ÚClassesSection)ÚEntitySectionÚStoredSection)ÚHeaderSection)ÚObjectsSection)ÚTablesSection)Úguid)Ú
tocodepageÚ
toencoding)Ú
juliandate)Úsafe_stringÚMAX_STR_LEN)Ú	messengerÚmsgtypesÚezdxf)Ú	DXFEntityÚLayerÚVPortÚ
Dictionary)ÚGenericLayoutType)ÚLayout)ÚTags)ÚDXFTag)	Ú
LayerTableÚLinetypeTableÚTextstyleTableÚDimStyleTableÚ
AppIDTableÚUCSTableÚ	ViewTableÚViewportTableÚBlockRecordTablez&{00000000-0000-0000-0000-000000000000}z&0.0 @ 2000-01-01T00:00:00.000000+00:00ÚCREATED_BY_EZDXFÚWRITTEN_BY_EZDXFÚ
EZDXF_METAc                óf   — ddl m} | €|} 	 t        | d«      }|dk  r|} | S # t        $ r |} Y | S w xY w)Nr   )ÚSTART_HANDLEé   é   )Úezdxf.tools.handlerS   ÚintÚ
ValueError)ÚseedrS   Úvs      ú.lib/python3.12/site-packages/ezdxf/document.pyÚ_validate_handle_seedr\   a   sM   € Ý/à€|ØˆðÜ��b‹MˆØˆqŠ5ØˆDð €Køô ò Ø‰Ø€Kðús   Œ! ¡0¯0c                  ó6  — e Zd ZefdZd„Zeefd[d„«       Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zed\d„«       Zej*                  d]d„«       Zed^d„«       Zed„ «       Zed_d„«       Zej*                  d`d„«       Zdad„Zdbd„Zedcd„«       Zeddd„«       Zeded„«       Zdfd„Zdgd„Zd„ Z d„ Z!d„ Z"	 	 dh	 	 	 	 	 	 	 did „Z#dhdjd!„Z$dkd"„Z%dldmd#„Z&dnd$„Z'dod%„Z(dZd&„Z)dZd'„Z*d(„ Z+d)„ Z,d*„ Z-d+„ Z.dpd,„Z/d-„ Z0d.„ Z1dqdrd/„Z2d0„ Z3ed\d1„«       Z4edsd2„«       Z5edtd3„«       Z6edud4„«       Z7edvd5„«       Z8edwd6„«       Z9edxd7„«       Z:edyd8„«       Z;edzd9„«       Z<ed{d:„«       Z=ed|d;„«       Z>ed}d<„«       Z?e?j*                  d~d=„«       Z?dd>„Z@d€d�d?„ZAd€d‚d@„ZBdƒdA„ZCd„dB„ZDd„dC„ZEdD„ ZFdE„ ZGed…dF„«       ZHed†dG„«       ZId‡dH„ZJdˆd‰dI„ZKdŠd‹dJ„ZLdŒdK„ZMd�dL„ZNdŽdM„ZOd�dƒdN„ZP	 	 	 d�	 	 	 	 	 d‘dO„ZQd’dP„ZRd�d“dQ„ZSd”d•dR„ZTdqdS„ZU	 d–	 	 	 	 	 d—dT„ZVeWeXz  f	 	 	 	 	 d˜dU„ZYd™dV„ZZdšd…dW„Z[d›ddXœdœdY„Z\y)�ÚDrawingc                óÆ  — t        «       | _        t        j                  | «      | _        |j	                  «       }t
        j                  j                  ||«      | _        | j                  t
        j                  vr#t        j                  d| j                  › d�«      ‚d | _        d| _        d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        g | _        d | _        d | _        d | _        d | _        d | _        d| _        t?        «       | _         tC        «       | _"        g | _#        tI        | j                  «      dk(  sJ ‚y )NúUnsupported DXF version "ú".FÚcp1252Tr   )%r   Úentitydbr;   Ú	MessengerÚupperr   Úacad_release_to_dxf_versionÚgetÚ_dxfversionÚversions_supported_by_newÚDXFVersionErrorÚ
dxfversionÚ_loaded_dxfversionÚ
is_loadingÚencodingÚfilenameÚrootdictÚheaderÚclassesÚtablesÚblocksÚentitiesÚobjectsÚacdsdataÚstored_sectionsÚlayoutsÚgroupsÚ	materialsÚmleader_stylesÚmline_stylesÚ_acad_compatibleÚsetÚ_acad_incompatibility_reasonr+   Ú_dimension_rendererÚ_post_init_commandsÚlen)Úselfrk   Útarget_dxfversions      r[   Ú__init__zDrawing.__init__p   sR  € Ü ›
ˆŒÜ"×,Ñ,¨TÓ2ˆŒØ&×,Ñ,Ó.ÐÜ %× AÑ A× EÑ EØÐ0ó!
ˆÔð ×Ñ¤5×#BÑ#BÑBÜ×'Ñ'Ð*CÀDÇOÁOÐCTÐTVÐ(WÓXÐXð 26ˆÔð  ˆŒØ%ˆŒØ'+ˆŒð %)ˆŒð &*ˆŒØ'+ˆŒØ%)ˆŒØ%)ˆŒØ'+ˆŒØ'+ˆŒð *.ˆŒà46ˆÔØ $ˆŒØ'+ˆŒØ-1ˆŒØ6:ˆÔØ26ˆÔð !%ˆÔä69³eˆÔ)ô $5Ó#6ˆÔ ð 46ˆÔ ô �4—=‘=Ó! QÒ&Ð&Ñ&ó    c                óV   —  | |«      }|j                  «        |j                  «        |S )ztCreate new drawing. Package users should use the factory function
        :func:`ezdxf.new`. (internal API)
        )Ú_setupÚ_create_ezdxf_metadata)Úclsrk   Údocs      r[   ÚnewzDrawing.new­   s'   € ñ
 �*‹oˆØ�
‰
ŒØ×"Ñ"Ô$Øˆ
r‡   c                óÊ  — t        j                  «       | _        t        | «      | _        t        | «      | _        t        | «      | _        t        | «      | _
        t        | «      | _        t        | «      | _        | j                  j                  | _        | j                  j!                  | j                  «       t#        j$                  | «      | _        | j)                  «        y ©N)r2   r�   rq   r/   rr   r4   rs   r.   rt   r0   ru   r3   rv   r-   rw   rp   Úsetup_object_management_tablesr   Úsetupry   Ú_finalize_setup©r„   s    r[   r‰   zDrawing._setup·   s�   € Ü#×'Ñ'Ó)ˆŒÜ% dÓ+ˆŒÜ# DÓ)ˆŒÜ# DÓ)ˆŒÜ% dÓ+ˆŒÜ% dÓ+ˆŒÜ-¨dÓ3ˆŒØŸ™×-Ñ-ˆŒà�‰×3Ñ3°D·M±MÔBÜ—}‘} TÓ*ˆŒØ×ÑÕr‡   c                ó  — t        | «      | _        t        | «      | _        t	        | «      | _        | j                  «        t        | «      | _        | j                  «        | j                  «        | j                  «        y)z3Common setup tasks for new and loaded DXF drawings.N)r   rz   r   r{   r   r}   Ú_create_required_table_entriesr   r|   Ú_set_required_layer_attributesÚ_setup_metadataÚ_execute_post_init_commandsr“   s    r[   r’   zDrawing._finalize_setupÅ   sh   € ä% dÓ+ˆŒÜ+¨DÓ1ˆŒä0°Ó6ˆÔð 	×+Ñ+Ô-ô 5°TÓ:ˆÔØ×+Ñ+Ô-Ø×ÑÔØ×(Ñ(Õ*r‡   c                ó8   — | j                   D ]	  } |«        Œ | ` y r�   )r‚   )r„   Úcmds     r[   r˜   z#Drawing._execute_post_init_commandsÕ   s   € Ø×+Ô+ˆCÙ�Eð ,àÑ$r‡   c                óÄ   — | j                  «        | j                  «        | j                  «        | j                  «        | j	                  «        | j                  «        y r�   )Ú_create_required_vportsÚ_create_required_linetypesÚ_create_required_layersÚ_create_required_stylesÚ_create_required_appidsÚ_create_required_dimstylesr“   s    r[   r•   z&Drawing._create_required_table_entriesÚ   sJ   € Ø×$Ñ$Ô&Ø×'Ñ'Ô)Ø×$Ñ$Ô&Ø×$Ñ$Ô&Ø×$Ñ$Ô&Ø×'Ñ'Õ)r‡   c                óF   — | j                   D ]  }|j                  «        Œ y r�   )ÚlayersÚset_required_attributes)r„   Úlayers     r[   r–   z&Drawing._set_required_layer_attributesâ   s   € Ø—[”[ˆEØ×)Ñ)Õ+ñ !r‡   c                óX   — d| j                   vr| j                   j                  d«       y y )Nú*Active)Ú	viewportsr�   r“   s    r[   rœ   zDrawing._create_required_vportsæ   s%   € Ø˜DŸN™NÑ*Ø�N‰N×Ñ˜yÕ)ð +r‡   c                óX   — d| j                   vr| j                   j                  d«       y y )NÚACAD©Úappidsr�   r“   s    r[   r    zDrawing._create_required_appidsê   s#   € Ø˜Ÿ™Ñ$Ø�K‰K�O‰O˜FÕ#ð %r‡   c                óV   — | j                   }dD ]  }||vsŒ|j                  |«       Œ y )N)ÚByBlockÚByLayerÚ
Continuous)Ú	linetypesr�   )r„   r±   Únames      r[   r�   z"Drawing._create_required_linetypesî   s)   € Ø—N‘Nˆ	Û8ˆDØ˜9Ò$Ø—‘˜dÕ#ñ 9r‡   c                óX   — d| j                   vr| j                   j                  d«       y y ©NÚStandard)Ú	dimstylesr�   r“   s    r[   r¡   z"Drawing._create_required_dimstylesô   s%   € Ø˜TŸ^™^Ñ+Ø�N‰N×Ñ˜zÕ*ð ,r‡   c                óX   — d| j                   vr| j                   j                  d«       y y r´   )Ústylesr�   r“   s    r[   rŸ   zDrawing._create_required_stylesø   s#   € Ø˜TŸ[™[Ñ(Ø�K‰K�O‰O˜JÕ'ð )r‡   c                óº   — | j                   }d|vr|j                  d«       d|vr|j                  dddi¬«       y d|j                  d«      j                  _        y )NÚ0Ú	DefpointsÚplotr   ©Ú
dxfattribs)r£   r�   rg   Údxfr¼   )r„   r£   s     r[   rž   zDrawing._create_required_layersü   sS   € Ø—‘ˆØ�fÑØ�J‰J�sŒOØ˜fÑ$Ø�J‰J�{°¸¨{ˆJÕ;ð 01ˆF�J‰J�{Ó#×'Ñ'Õ,r‡   c                óh  — | j                   | j                  d<   t        t        j                  «       «      | j                  d<   | j                  j                  dt        «      t        k(  r| j                  «        | j                  j                  dt        «      t        k(  r| j                  «        y y )Nú$ACADVERú	$TDCREATEú$FINGERPRINTGUIDú$VERSIONGUID)	rk   rq   r8   r   Únowrg   Ú
CONST_GUIDÚreset_fingerprint_guidÚreset_version_guidr“   s    r[   r—   zDrawing._setup_metadata  sz   € Ø"&§/¡/ˆ�‰�JÑÜ#-¬h¯l©l«nÓ#=ˆ�‰�KÑ Ø�;‰;�?‰?Ð-¬zÓ:¼jÒHØ×'Ñ'Ô)Ø�;‰;�?‰?˜>¬:Ó6¼*ÒDØ×#Ñ#Õ%ð Er‡   c                ó   — | j                   S )zGet current DXF version.)rh   r“   s    r[   rk   zDrawing.dxfversion  s   € ð ×ÑÐr‡   c                óN   — | j                  |«      | _        || j                  d<   y)zSet current DXF version.rÁ   N)Ú_validate_dxf_versionrh   rq   ©r„   Úversions     r[   rk   zDrawing.dxfversion  s%   € ð  ×5Ñ5°gÓ>ˆÔØ")ˆ�‰�JÒr‡   c                ó   — | j                   S r�   )rl   r“   s    r[   Úloaded_dxfversionzDrawing.loaded_dxfversion  s   € à×&Ñ&Ð&r‡   c                óD   — | j                   t        k\  rdS | j                  S )zYReturns required output encoding for writing document to a text
        streams.
        zutf-8)rk   r"   rn   r“   s    r[   Úoutput_encodingzDrawing.output_encoding  s   € ð
 Ÿ/™/¬WÒ4ˆwÐG¸$¿-¹-ÐGr‡   c                ó:   — | j                   j                  dd«      S )z˜Get and set the document/modelspace base units as enum, for more
        information read this: :ref:`dxf units`. Requires DXF R2000 or newer.

        ú	$INSUNITSr   )rq   rg   r“   s    r[   ÚunitszDrawing.units$  s   € ð �{‰{�‰˜{¨AÓ.Ð.r‡   c                óª   — d|cxk  rdk  r;n n8| j                   t        k  rt        j                  d«       || j                  d<   y t        d|› �«      ‚)Nr   é   z7Drawing units ($INSUNITS) are not exported for DXF R12.rÓ   zInvalid units enum: )rk   r!   ÚloggerÚwarningrq   rX   )r„   Ú	unit_enums     r[   rÔ   zDrawing.units,  sM   € à�	Ô˜BÕØ�‰¤Ò(Ü—‘ØMôð (1ˆD�K‰K˜Ò$äÐ3°I°;Ð?Ó@Ð@r‡   c                óÊ  — |j                  «       }t        j                  j                  ||«      }|t        j                  vrt        j
                  d|› d�«      ‚|t        k(  r8| j                  t        kD  r#t        j                  d| j                  › d�«       |S || j                  k  r7t        j                  d| j                  › dt        j                  |   › d�«       |S )Nr`   ra   zDowngrade from DXF z' to R12 may create an invalid DXF file.z to z can cause lost of features.)re   r   rf   rg   Úversions_supported_by_saverj   r#   rh   r×   rØ   Úacad_releaseÚinforÌ   s     r[   rË   zDrawing._validate_dxf_version7  sÜ   € Ø—-‘-“/ˆä×3Ñ3×7Ñ7¸ÀÓIˆØœ%×:Ñ:Ñ:Ü×'Ñ'Ð*CÀGÀ9ÈBÐ(OÓPÐPØ”eÒØ×Ñ¤%Ò'Ü—‘Ø)¨$×*;Ñ*;Ð)<ð =+ð ,ôð ˆð �t×'Ñ'Ò'Ü�K‰KØ% d×&7Ñ&7Ð%8¸Ü×%Ñ% gÑ.Ð/Ð/KðMôð ˆr‡   c                óž   — | j                   st        j                  d«      S t        j                  | j                   «      j                  «       S )z.Returns the absolute filepath of the document.Ú.)ro   ÚpathlibÚPathÚresolver“   s    r[   Úget_abs_filepathzDrawing.get_abs_filepathJ  s4   € à�}Š}Ü—<‘< Ó$Ð$Ü�|‰|˜DŸM™MÓ*×2Ñ2Ó4Ð4r‡   c                ó@   — ddl m}  ||«      }| j                  |«      S )a]  Open an existing drawing. Package users should use the factory
        function :func:`ezdxf.read`. To preserve possible binary data in
        XRECORD entities use :code:`errors='surrogateescape'` as error handler
        for the import stream.

        Args:
             stream: text stream yielding text (unicode) strings by readline()

        rU   )Úascii_tags_loader)Úlldxf.taggerrå   Úload)r‹   Ústreamrå   Ú
tag_loaders       r[   ÚreadzDrawing.readP  s    € õ 	4á& vÓ.ˆ
Ø�x‰x˜
Ó#Ð#r‡   c                óR   — ddl m}  ||«      } | «       }|j                  |«       |S )z™Load DXF document from a DXF tag loader, in general an external
        untrusted source.

        Args:
            tag_loader: DXF tag loader

        rU   )Útag_compiler)ræ   rì   Ú_load)r‹   ré   rì   rŒ   s       r[   rç   zDrawing.load`  s)   € õ 	/á! *Ó-ˆ
Ù‹eˆØ�	‰	�*ÔØˆ
r‡   c                ó8   —  | «       }|j                  |¬«       |S )z5Create new drawing from compiled tags. (internal API))Útagger)rí   )r‹   Úcompiled_tagsrŒ   s      r[   Ú	from_tagszDrawing.from_tagsp  s   € ñ ‹eˆØ�	‰	˜ˆ	Ô'Øˆ
r‡   c                ól   — d| _         t        j                  |«      }d|v r|d= | j                  |«       y )NTÚTHUMBNAILIMAGE)rm   r%   Úload_dxf_structureÚ_load_section_dict)r„   rï   Úsectionss      r[   rí   zDrawing._loadw  s8   € àˆŒÜ×,Ñ,¨VÓ4ˆØ˜xÑ'ØÐ)Ð*Ø×Ñ Õ)r‡   c                óp  — d| _         |j                  dg «      }|rt        j                  |d   «      | _        nt        j
                  t        ¬«      | _        | j                  j                  dt        «      | _        | j                  | _        t        | j                  j                  dd«      «      | _
        | j                  j                  dt        | j                  j                  «      «      }| j                  j                  j                  t        |«      «       t!        j"                  || «       t%        | |j                  d	d
«      «      | _        t)        | |j                  dd
«      «      | _        | j-                  «        t/        | |j                  dd
«      «      | _        t3        | |j                  dd
«      «      | _        t7        | |j                  dd
«      «      | _        t;        | |j                  dd
«      «      | _        |j?                  «       D ]<  \  }}|t@        jB                  vsŒ| jD                  jG                  tI        |«      «       Œ> | jK                  «        | jL                  t        k  r tN        jQ                  d«       t        | _&        | jL                  t        k(  r| j*                  jS                  «        | jL                  tT        tV        fv r0tN        jQ                  d«       tX        | _&        | j[                  «        | j8                  j\                  }|j^                  dk7  r"tA        j`                  dt        |«      › d�«      ‚|| _.        | j8                  jc                  | j\                  «       te        j                  | «      | _3        d| _         | ji                  «        y
)z8Internal API to load a DXF document from a section dict.TÚHEADERr   )rk   rÁ   ú$DWGCODEPAGEÚ	ANSI_1252ú	$HANDSEEDÚCLASSESNÚTABLESÚBLOCKSÚENTITIESÚOBJECTSÚACDSDATAzDXF version upgrade to DXF R12.z!DXF version upgrade to DXF R2000.Ú
DICTIONARYzinvalid root dictionary entity Ú F)5rm   rg   r2   rç   rq   r�   r#   rh   rl   r7   rn   Ústrrc   ÚhandlesÚresetr\   r%   Úload_and_bind_dxf_contentr/   rr   r4   rs   Ú_create_required_block_recordsr.   rt   r0   ru   r3   rv   r,   rw   Úitemsr   ÚMANAGED_SECTIONSrx   Úappendr1   Ú_2nd_loading_stagerk   r×   rÝ   Úcreate_table_handlesr   r    r!   Úcreate_all_arrow_blocksrp   ÚDXFTYPEÚDXFStructureErrorr�   r   ry   r’   )r„   rö   Úheader_entitiesrY   r²   Údatarp   s          r[   rõ   zDrawing._load_section_dict  sÞ  € àˆŒà&.§l¡l°8¸RÓ&@ˆÙä'×,Ñ,¨_¸QÑ-?Ó@ˆD�Kô (×+Ñ+´uÔ=ˆDŒKØŸ;™;Ÿ?™?¨:´uÓ=ˆÔð #'×"2Ñ"2ˆÔô # 4§;¡;§?¡?°>À;Ó#OÓPˆŒð —K‘K—O‘O K´°T·]±]×5JÑ5JÓ1KÓLˆØ�‰×Ñ×#Ñ#Ô$9¸$Ó$?Ô@ô 	×(Ñ(¨°4Ô8ô &Ø�(—,‘,˜y¨$Ó/ó
ˆŒô $ D¨(¯,©,°xÀÓ*FÓGˆŒð 	×+Ñ+Ô-ô $ D¨(¯,©,°xÀÓ*FÓGˆŒÜ%Ø�(—,‘,˜z¨4Ó0ó
ˆŒô &Ø�(—,‘,˜y¨$Ó/ó
ˆŒô
 (Ø�(—,‘,˜z¨4Ó0ó
ˆŒð
 #Ÿ.™.Ö*‰JˆD�$Øœ5×1Ñ1Ò1Ø×$Ñ$×+Ñ+¬M¸$Ó,?Õ@ð +ð
 	×ÑÔ!ð �?‰?œUÒ"Ü�K‰KÐ9Ô:Ü#ˆDŒOà�?‰?œeÒ#Ø�K‰K×,Ñ,Ô.à�?‰?œu¤e˜nÑ,Ü�K‰KÐ;Ô<Ü%ˆDŒOØ×(Ñ(Ô*ð —<‘<×(Ñ(ˆØ×Ñ˜|Ò+Ü×)Ñ)Ø1´#°h³-°ÀÐBóð ð !ˆŒð 	�‰×3Ñ3°D·M±MÔBô —|‘| DÓ)ˆŒð  ˆŒØ×ÑÕr‡   c                ó¤   — | j                   }|j                  «       D ]1  }|j                  | «      }|€Œ| j                  j	                  |«       Œ3 y)z‚Load additional resources from entity database into DXF entities.

        e.g. convert handles into DXFEntity() objects

        N)rc   ÚvaluesÚpost_load_hookr‚   r  )r„   ÚdbÚentityrš   s       r[   r  zDrawing._2nd_loading_stageÛ  sH   € ð �]‰]ˆØ—i‘i–kˆFð ×'Ñ'¨Ó-ˆCØ‰Ø×(Ñ(×/Ñ/°Õ4ñ "r‡   c                ój   — ddl m} |j                  D ]  }|j                  | j                  |«       Œ  y)a©  For upgrading DXF R12/13/14 files to R2000, it is necessary to
        create all used arrow blocks before saving the DXF file, else $HANDSEED
        is not the next available handle, which is a problem for AutoCAD.

        Create all known AutoCAD arrows to be on the safe side, because
        references to arrow blocks can be in DIMSTYLE, DIMENSION override,
        LEADER override and maybe other locations.

        r   ©ÚARROWSN)Úezdxf.render.arrowsr  Ú__acad__Úcreate_blockrt   )r„   r  Ú
arrow_names      r[   r  zDrawing.create_all_arrow_blocksé  s)   € õ 	/à Ÿ/œ/ˆJØ×Ñ §¡¨ZÕ8ñ *r‡   c                óª   — d| j                   vr| j                   j                  d«       d| j                   vr| j                   j                  d«       y y )Nz*Model_Spacez*Paper_Space)Úblock_recordsr�   r“   s    r[   r  z&Drawing._create_required_block_recordsø  sK   € Ø ×!3Ñ!3Ñ3Ø×Ñ×"Ñ" >Ô2Ø ×!3Ñ!3Ñ3Ø×Ñ×"Ñ" >Õ2ð 4r‡   Nc                óJ   — t        |«      | _        | j                  ||¬«       y)a$  Set :class:`Drawing` attribute :attr:`filename` to `filename` and
        write drawing to the file system. Override file encoding by argument
        `encoding`, handle with care, but this option allows you to create DXF
        files for applications that handles file encoding different than
        AutoCAD.

        Args:
            filename: file name as string
            encoding: override default encoding as Python encoding string like ``'utf-8'``
            fmt: ``'asc'`` for ASCII DXF (default) or ``'bin'`` for Binary DXF

        )rn   ÚfmtN)r  ro   Úsave)r„   ro   rn   r"  s       r[   ÚsaveaszDrawing.saveasþ  s   € ô$ ˜H›ˆŒØ�	‰	˜8¨ˆ	Õ-r‡   c                óp  — |€| j                   }n|}|j                  d«      r$t        j                  | j                  d|d¬«      }n7|j                  d«      rt        | j                  d«      }nt        d|› d	�«      ‚	 | j                  ||¬
«       |j                  «        y# |j                  «        w xY w)aß  Write drawing to file-system by using the :attr:`filename` attribute
        as filename. Override file encoding by argument `encoding`, handle with
        care, but this option allows you to create DXF files for applications
        that handle file encoding different from AutoCAD.

        Args:
            encoding: override default encoding as Python encoding string like ``'utf-8'``
            fmt: ``'asc'`` for ASCII DXF (default) or ``'bin'`` for Binary DXF

        NÚascÚwtÚ
dxfreplace)Úmodern   ÚerrorsÚbinÚwbúUnknown output format: 'ú'.)r"  )rÑ   Ú
startswithÚioÚopenro   rX   ÚwriteÚclose)r„   rn   r"  ÚencÚfps        r[   r#  zDrawing.save  sž   € ð  ÐØ×&Ñ&‰Cð ˆCà�>‰>˜%Ô Ü—‘Ø—‘ D°3¸|ô‰Bð �^‰^˜EÔ"Ü�d—m‘m TÓ*‰BäÐ7¸°u¸BÐ?Ó@Ð@ð	Ø�J‰J�r˜sˆJÔ#à�H‰H�JøˆB�H‰H�Jús   Á?B# Â#B5c                ó<   — |j                  | j                  d¬«      S )z:Encode string `s` with correct encoding and error handler.r(  )rn   r*  )ÚencoderÑ   )r„   Úss     r[   r7  zDrawing.encode7  s   € à�x‰x ×!5Ñ!5¸lˆxÓKÐKr‡   c                óü  — | j                  «        | j                  }|t        k(  r&t        | j                  j                  dd«      «      }nd}|t        kD  r| j                  j                  |«       | j                  «        |j                  d«      rt        |||¬«      }nJ|j                  d«      r*t        |||| j                  ¬«      }|j                  «        nt        d|› d	�«      ‚| j                  |«       y
)aK  Write drawing as ASCII DXF to a text stream or as Binary DXF to a
        binary stream. For DXF R2004 (AC1018) and prior open stream with
        drawing :attr:`encoding` and :code:`mode='wt'`. For DXF R2007 (AC1021)
        and later use :code:`encoding='utf-8'`, or better use the later added
        :class:`Drawing` property :attr:`output_encoding` which returns the
        correct encoding automatically. The correct and required error handler
        is :code:`errors='dxfreplace'`!

        If writing to a :class:`StringIO` stream, use :meth:`Drawing.encode` to
        encode the result string from :meth:`StringIO.get_value`::

            binary = doc.encode(stream.get_value())

        Args:
            stream: output text stream or binary stream
            fmt: "asc" for ASCII DXF (default) or "bin" for binary DXF

        z	$HANDLINGr   Tr&  )Úwrite_handlesrk   r+  )r:  rk   rn   r-  r.  N)Úcommit_pending_changesrk   r#   Úboolrq   rg   rr   Úadd_required_classesÚ
update_allr/  r'   r(   rÑ   Úwrite_signaturerX   Úexport_sections)r„   rè   r"  rk   r  Ú	tagwriters         r[   r2  zDrawing.write;  sÝ   € ð, 	×#Ñ#Ô%à—_‘_ˆ
ØœÒÜ˜4Ÿ;™;Ÿ?™?¨;¸Ó:Ó;‰GàˆGØœÒØ�L‰L×-Ñ-¨jÔ9à�‰ÔØ�>‰>˜%Ô Ü!ØØ%Ø%ô‰Ið
 �^‰^˜EÔ"Ü'ØØ%Ø%Ø×-Ñ-ô	ˆIð ×%Ñ%Õ'äÐ7¸°u¸BÐ?Ó@Ð@à×Ñ˜YÕ'r‡   c                óÔ   — t        j                  «       }| j                  |«       | j                  |j	                  «       «      }t        j                  |j                  dd«      «      S )z3Returns DXF document as base64 encoded binary data.ó   
s   
)r0  ÚStringIOr2  r7  ÚgetvalueÚbase64ÚencodebytesÚreplace)r„   rè   Úbinary_datas      r[   Úencode_base64zDrawing.encode_base64o  sL   € ä—‘“ˆØ�
‰
�6Ôà—k‘k &§/¡/Ó"3Ó4ˆä×!Ñ! +×"5Ñ"5°e¸WÓ"EÓFÐFr‡   c                óN  — |j                   }| j                  j                  |«       |t        kD  r| j                  j                  |«       | j
                  j                  |«       | j                  j                  |«       | j                  j                  |«       |t        kD  r| j                  j                  |«       | j                  j                  r| j                  j                  |«       | j                  D ]  }|j                  |«       Œ |j                  dd«       y)z#DXF export sections. (internal API)r   ÚEOFN)rk   rq   Ú
export_dxfr#   rr   rs   rt   ru   rv   rw   Úis_validrx   Ú
write_tag2)r„   rA  rk   Úsections       r[   r@  zDrawing.export_sectionsx  sØ   € à×)Ñ)ˆ
Ø�‰×Ñ˜yÔ)ØœÒØ�L‰L×#Ñ# IÔ.Ø�‰×Ñ˜yÔ)Ø�‰×Ñ˜yÔ)Ø�‰× Ñ  Ô+ØœÒØ�L‰L×#Ñ# IÔ.Ø�=‰=×!Ò!Ø�M‰M×$Ñ$ YÔ/Ø×+Ô+ˆGØ×Ñ˜yÕ)ð ,ð 	×Ñ˜Q Õ&r‡   c                óV   — | j                   j                  t        j                  «       y r�   )r;   Ú	broadcastr<   ÚCOMMIT_PENDING_CHANGESr“   s    r[   r;  zDrawing.commit_pending_changesŠ  s   € Ø�‰× Ñ ¤×!@Ñ!@ÕAr‡   c                ó  — | j                   t        kD  r%| j                  j                  | j                   «       | j	                  «        | j                  «        | j                  «        | j                  «        | j                  «        y r�   )	rk   r#   rr   r=  Ú_create_appidsÚ_update_header_varsÚupdate_extentsÚupdate_limitsÚ_update_metadatar“   s    r[   r>  zDrawing.update_all�  s`   € Ø�?‰?œUÒ"Ø�L‰L×-Ñ-¨d¯o©oÔ>Ø×ÑÔØ× Ñ Ô"Ø×ÑÔØ×ÑÔØ×ÑÕr‡   c                ó�  — | j                  «       }|j                  j                  }|j                  j                  }t	        |«      r)t	        |«      r|| j
                  d<   || j
                  d<   | j                  «       }|j                  j                  | j
                  d<   |j                  j                  | j
                  d<   y )Nz$EXTMINz$EXTMAXz$PEXTMINz$PEXTMAX)Ú
modelspacer¿   ÚextminÚextmaxr<  rq   Úactive_layout)r„   Úmspr\  r]  r^  s        r[   rW  zDrawing.update_extents–  s“   € Ø�o‰oÓˆà—‘—‘ˆØ—‘—‘ˆÜ�Œ<œD œLØ%+ˆD�K‰K˜	Ñ"Ø%+ˆD�K‰K˜	Ñ"Ø×*Ñ*Ó,ˆØ"/×"3Ñ"3×":Ñ":ˆ�‰�JÑØ"/×"3Ñ"3×":Ñ":ˆ�‰�JÒr‡   c                ó\  — | j                  «       }|j                  j                  | j                  d<   |j                  j                  | j                  d<   | j                  «       }|j                  j                  | j                  d<   |j                  j                  | j                  d<   y )Nz$LIMMINz$LIMMAXz$PLIMMINz$PLIMMAX)r[  r¿   Úlimminrq   Úlimmaxr^  )r„   r_  r^  s      r[   rX  zDrawing.update_limits¢  s|   € Ø�o‰oÓˆØ!$§¡§¡ˆ�‰�IÑØ!$§¡§¡ˆ�‰�IÑØ×*Ñ*Ó,ˆØ"/×"3Ñ"3×":Ñ":ˆ�‰�JÑØ"/×"3Ñ"3×":Ñ":ˆ�‰�JÒr‡   c                ó  — ddl m} | j                  j                  | j                  j                  dd «      «      }|�|j                  «       dk7  rŒd}d| j                  v r0| j                  j                  d«      j                  j                  }n=d| j                  v r/| j                  j                  d«      j                  j                  }|| j                  d<   |j                  | j                  d«      | j                  d<   y )	Nr   )Úacad_maint_verz
$CMATERIALÚMATERIALrº   r¯   ÚGlobalú$ACADMAINTVER)
Úezdxf.lldxf.constrd  rc   rg   rq   Údxftyper{   r¿   Úhandlerk   )r„   rd  Úmaterialrj  s       r[   rV  zDrawing._update_header_varsª  sÊ   € Ý4ð —=‘=×$Ñ$ T§[¡[§_¡_°\À4Ó%HÓIˆØÐ˜x×/Ñ/Ó1°ZÒ?ØˆFØ˜DŸN™NÑ*ØŸ™×+Ñ+¨IÓ6×:Ñ:×AÑA‘Ø˜TŸ^™^Ñ+ØŸ™×+Ñ+¨HÓ5×9Ñ9×@Ñ@�Ø(.ˆD�K‰K˜Ñ%à'5×'9Ñ'9¸$¿/¹/È1Ó'Mˆ�‰�OÒ$r‡   c           	     ób  — | j                  «        t        j                  j                  r{t	        t        ddddd«      «      }|| j                  d<   || j                  d<   || j                  d<   || j                  d<   t        | j                  d<   t        | j                  d	<   n<t        j                  «       }t	        |«      | j                  d<   | j                  «        t        | j                  j                  «      | j                  d
<   t        | j                  «      | j                  d<   y )NiÐ  rU   r   rÂ   z
$TDUCREATEz	$TDUPDATEz
$TDUUPDATErÄ   rÃ   rû   rù   )Ú_update_ezdxf_metadatar=   ÚoptionsÚ!write_fixed_meta_data_for_testingr8   r   rq   rÆ   rÅ   rÈ   r  rc   r  r6   rn   )r„   Ú
fixed_daterÅ   s      r[   rY  zDrawing._update_metadata¹  sä   € Ø×#Ñ#Ô%Ü�=‰=×:Ò:Ü#¤H¨T°1°a¸¸AÓ$>Ó?ˆJØ'1ˆD�K‰K˜Ñ$Ø(2ˆD�K‰K˜Ñ%Ø'1ˆD�K‰K˜Ñ$Ø(2ˆD�K‰K˜Ñ%Ü*4ˆD�K‰K˜Ñ'Ü.8ˆD�K‰KÐ*Ò+ä—,‘,“.ˆCÜ'1°#£ˆD�K‰K˜Ñ$Ø×#Ñ#Ô%Ü#& t§}¡}×'<Ñ'<Ó#=ˆ�‰�KÑ Ü&0°·±Ó&?ˆ�‰�NÒ#r‡   c                óT   — | j                   t        k  rt        | «      S t        | «      S )zÁReturns the *ezdxf* :class:`ezdxf.document.MetaData` object, which
        manages  *ezdxf* and custom metadata in DXF files.
        For more information see:  :ref:`ezdxf_metadata`.

        )rk   r#   ÚR12MetaDataÚR2000MetaDatar“   s    r[   Úezdxf_metadatazDrawing.ezdxf_metadataÊ  s%   € ð %)§O¡O´uÒ$<Œ{˜4Ó ÐUÄ-ÐPTÓBUÐUr‡   c                óF   — | j                  «       }t        «       |t        <   y r�   )rt  Úezdxf_marker_stringrO   ©r„   Ú
ezdxf_metas     r[   rŠ   zDrawing._create_ezdxf_metadataÒ  ó   € Ø×(Ñ(Ó*ˆ
Ü':Ó'<ˆ
Ô#Ò$r‡   c                óF   — | j                  «       }t        «       |t        <   y r�   )rt  rv  rP   rw  s     r[   rm  zDrawing._update_ezdxf_metadataÖ  ry  r‡   c                ó^   — || j                   vr| j                   j                  |d|i«       y y )NÚflagsr«   )r„   r²   r|  s      r[   Ú_create_appid_if_not_existz"Drawing._create_appid_if_not_existÚ  s*   € Ø�t—{‘{Ñ"Ø�K‰K�O‰O˜D 7¨EÐ"2Õ3ð #r‡   c                óL   — | j                  dd«       | j                  dd«       y )NÚHATCHBACKGROUNDCOLORr   ÚEZDXF)r}  r“   s    r[   rU  zDrawing._create_appidsÞ  s#   € Ø×'Ñ'Ð(>ÀÔBØ×'Ñ'¨°Õ3r‡   c                óV   — t         j                  j                  | j                  d«      S )z?Returns the AutoCAD release abbreviation like "R12" or "R2000".Úunknown)r   rÜ   rg   rk   r“   s    r[   rÜ   zDrawing.acad_releaseâ  s!   € ô ×!Ñ!×%Ñ% d§o¡o°yÓAÐAr‡   c                ó.   — | j                   j                  S r�   )rs   r£   r“   s    r[   r£   zDrawing.layersç  ó   € à�{‰{×!Ñ!Ð!r‡   c                ó.   — | j                   j                  S r�   )rs   r±   r“   s    r[   r±   zDrawing.linetypesë  ó   € à�{‰{×$Ñ$Ð$r‡   c                ó.   — | j                   j                  S r�   )rs   r¸   r“   s    r[   r¸   zDrawing.stylesï  r„  r‡   c                ó.   — | j                   j                  S r�   )rs   r¶   r“   s    r[   r¶   zDrawing.dimstylesó  r†  r‡   c                ó.   — | j                   j                  S r�   )rs   Úucsr“   s    r[   rŠ  zDrawing.ucs÷  s   € à�{‰{�‰Ðr‡   c                ó.   — | j                   j                  S r�   )rs   r¬   r“   s    r[   r¬   zDrawing.appidsû  r„  r‡   c                ó.   — | j                   j                  S r�   )rs   Úviewsr“   s    r[   r�  zDrawing.viewsÿ  s   € à�{‰{× Ñ Ð r‡   c                ó.   — | j                   j                  S r�   )rs   r   r“   s    r[   r   zDrawing.block_records  s   € à�{‰{×(Ñ(Ð(r‡   c                ó.   — | j                   j                  S r�   )rs   r¨   r“   s    r[   r¨   zDrawing.viewports  r†  r‡   c                ó    — | j                   d   S )NÚACAD_PLOTSTYLENAME)rp   r“   s    r[   Ú
plotstyleszDrawing.plotstyles  s   € à�}‰}Ð1Ñ2Ð2r‡   c                ó   — | j                   S r�   ©r�   r“   s    r[   Údimension_rendererzDrawing.dimension_renderer  s   € à×'Ñ'Ð'r‡   c                ó   — || _         y)zl
        Set your own dimension line renderer if needed.

        see also: ezdxf.render.dimension

        Nr”  )r„   Úrenderers     r[   r•  zDrawing.dimension_renderer  s   € ð $,ˆÕ r‡   c                ó6   — | j                   j                  «       S )zŒReturns the modelspace layout, displayed as "Model" tab in CAD
        applications, defined by block record named "\*Model_Space".
        )ry   r[  r“   s    r[   r[  zDrawing.modelspace  s   € ð �|‰|×&Ñ&Ó(Ð(r‡   c                ó8   — | j                   j                  |«      S )a#  Returns paperspace layout `name` or the first layout in tab-order
        if no name is given.

        Args:
            name: paperspace name or empty string for the first paperspace in
                tab-order

        Raises:
            KeyError: layout `name` does not exist

        )ry   rg   ©r„   r²   s     r[   ÚlayoutzDrawing.layout#  s   € ð �|‰|×Ñ Ó%Ð%r‡   c                ó–   — |r8| j                   j                  |«      }t        |t        «      r|S t	        d«      ‚| j                  «       S )a!  Returns paperspace layout `name` or the active paperspace if no
        name is given.

        Args:
            name: paperspace name or empty string for the active paperspace

        Raises:
            KeyError: if the modelspace was acquired or layout `name` does not exist

        z2use method modelspace() to acquire the modelspace.)ry   rg   Ú
isinstancer   ÚKeyErrorr^  )r„   r²   Úpsps      r[   Ú
paperspacezDrawing.paperspace1  sE   € ñ Ø—,‘,×"Ñ" 4Ó(ˆCÜ˜#œzÔ*Ø�
ÜÐOÓPÐPà×%Ñ%Ó'Ð'r‡   c                ó6   — | j                   j                  «       S )zdReturns the active paperspace layout, defined by block record name
        "\*Paper_Space".
        )ry   r^  r“   s    r[   r^  zDrawing.active_layoutD  s   € ð �|‰|×)Ñ)Ó+Ð+r‡   c                óH   — t        | j                  j                  «       «      S )z,Returns all layout names in arbitrary order.)Úlistry   Únamesr“   s    r[   Úlayout_nameszDrawing.layout_namesJ  s   € ä�D—L‘L×&Ñ&Ó(Ó)Ð)r‡   c                óH   — t        | j                  j                  «       «      S )zHReturns all layout names in tab-order, "Model" is always the first name.)r£  ry   Únames_in_taborderr“   s    r[   Úlayout_names_in_taborderz Drawing.layout_names_in_taborderN  s   € ä�D—L‘L×2Ñ2Ó4Ó5Ð5r‡   c                ó2   — t        «       | j                  d<   y)zReset fingerprint GUID.rÃ   N©r5   rq   r“   s    r[   rÇ   zDrawing.reset_fingerprint_guidR  s   € ä*.«&ˆ�‰Ð&Ò'r‡   c                ó2   — t        «       | j                  d<   y)zReset version GUID.rÄ   Nrª  r“   s    r[   rÈ   zDrawing.reset_version_guidV  s   € ä&*£fˆ�‰�NÒ#r‡   c                ó   — | j                   S )z`Returns ``True`` if the current state of the document is compatible to
        AutoCAD.
        )r~   r“   s    r[   Úis_acad_compatiblezDrawing.is_acad_compatibleZ  s   € ð
 ×$Ñ$Ð$r‡   c                ó,   — t        | j                  «      S )zIReturns a list of reasons why this document is not compatible to AutoCAD.)r£  r€   r“   s    r[   Úacad_incompatibility_reasonsz$Drawing.acad_incompatibility_reasonsa  s   € ô �D×5Ñ5Ó6Ð6r‡   c                ó˜   — d| _         || j                  vr5| j                  j                  |«       t        j	                  d|› d�«       yy)z\Add a reason why this document is not compatible to AutoCAD.
        (internal API)
        Fz+DXF document is not compatible to AutoCAD! rß   N)r~   r€   Úaddr×   rØ   )r„   Úmsgs     r[   Ú add_acad_incompatibility_messagez(Drawing.add_acad_incompatibility_messagef  sI   € ð !&ˆÔØ�d×7Ñ7Ñ7Ø×-Ñ-×1Ñ1°#Ô6Ü�N‰NÐHÈÈÈQÐOÕPð 8r‡   c                ó6   — t        | j                  «       |«      S )a  Entity query over all layouts and blocks, excluding the OBJECTS section and
        the resource tables of the TABLES section.

        Args:
            query: query string

        .. seealso::

            :ref:`entity query string` and :ref:`entity queries`

        )r*   Úchain_layouts_and_blocks)r„   Úquerys     r[   r¶  zDrawing.queryo  s   € ô ˜4×8Ñ8Ó:¸EÓBÐBr‡   c                ó8   — t        | j                  «       ||«      S )aÔ  Groups DXF entities of all layouts and blocks (excluding the
        OBJECTS section) by a DXF attribute or a key function.

        Args:
            dxfattrib: grouping DXF attribute like "layer"
            key: key function, which accepts a :class:`DXFEntity` as argument
                and returns a hashable grouping key or ``None`` to ignore
                this entity.

        .. seealso::

            :func:`~ezdxf.groupby.groupby` documentation

        )r   rµ  )r„   Ú	dxfattribÚkeys      r[   r   zDrawing.groupby}  s   € ô �t×4Ñ4Ó6¸	À3ÓGÐGr‡   c                ó^   — t        | j                  «       «      }t        j                  |«      S )z~Chain entity spaces of all layouts and blocks. Yields an iterator
        for all entities in all layouts and blocks.
        )r£  Úlayouts_and_blocksr   Úfrom_iterable)r„   ry   s     r[   rµ  z Drawing.chain_layouts_and_blocksŽ  s(   € ô �t×.Ñ.Ó0Ó1ˆÜ×"Ñ" 7Ó+Ð+r‡   c                ó,   — t        | j                  «      S )zOIterate over all layouts (modelspace and paperspace) and all block definitions.)Úiterrt   r“   s    r[   r»  zDrawing.layouts_and_blocks•  s   € ä�D—K‘KÓ Ð r‡   c                óˆ   — || j                   vrt        j                  d|› d�«      ‚| j                   j                  |«       y)zÆDelete paper space layout `name` and all entities owned by this layout.
        Available only for DXF R2000 or later, DXF R12 supports only one
        paperspace, and it can't be deleted.
        úLayout 'z' does not exist.N)ry   r   ÚDXFValueErrorÚdeleterš  s     r[   Údelete_layoutzDrawing.delete_layout™  s=   € ð
 �t—|‘|Ñ#Ü×%Ñ%¨°°Ð6GÐ&HÓIÐIà�L‰L×Ñ Õ%r‡   c                óˆ   — || j                   v rt        j                  d|› d�«      ‚| j                   j                  ||«      S )aö  Create a new paperspace layout `name`. Returns a :class:`~ezdxf.layouts.Paperspace`
        object. DXF R12 (AC1009) supports only one paperspace layout, only the active
        paperspace layout is saved, other layouts are dismissed.

        Args:
            name: unique layout name
            dxfattribs: additional DXF attributes for the
                :class:`~ezdxf.entities.layout.DXFLayout` entity

        Raises:
            DXFValueError: paperspace layout `name` already exist

        rÀ  z' already exists.)ry   r   rÁ  r�   )r„   r²   r¾   s      r[   Ú
new_layoutzDrawing.new_layout£  sB   € ð �4—<‘<ÑÜ×%Ñ%¨°°Ð6GÐ&HÓIÐIà—<‘<×#Ñ# D¨*Ó5Ð5r‡   c                ó@  — ddl m} | j                  dk(  rt        j                  d«      ‚	 ||   \  }}}|s||}}	 | j                  |«      }|j                  ||fd|¬«       |S # t
        $ r t        d|› �«      ‚w xY w# t
        $ r | j                  |«      }Y ŒOw xY w)a«  Creates a new paperspace layout if `name` does not exist or reset the
        existing layout.  This method requires DXF R2000 or newer.
        The paper format name `fmt` defines one of the following paper sizes,
        measures in landscape orientation:

        =========== ======= ======= =======
        Name        Units   Width   Height
        =========== ======= ======= =======
        ISO A0      mm      1189    841
        ISO A1      mm      841     594
        ISO A2      mm      594     420
        ISO A3      mm      420     297
        ISO A4      mm      297     210
        ANSI A      inch    11      8.5
        ANSI B      inch    17      11
        ANSI C      inch    22      17
        ANSI D      inch    34      22
        ANSI E      inch    44      34
        ARCH C      inch    24      18
        ARCH D      inch    36      24
        ARCH E      inch    48      36
        ARCH E1     inch    42      30
        Letter      inch    11      8.5
        Legal       inch    14      8.5
        =========== ======= ======= =======

        The layout uses the associated units of the paper format as drawing
        units, has no margins or offset defined and the scale of the paperspace
        layout is 1:1.

        Args:
            name: paperspace layout name
            fmt: paper format
            landscape: ``True`` for landscape orientation, ``False`` for portrait
                orientation

        r   )Ú
PAGE_SIZESÚR12z$method call no supported for DXF R12zunknown paper format: )r   r   r   r   )ÚsizeÚmarginsrÔ   )
Úezdxf.tools.standardsrÇ  rÜ   r   rj   rž  rX   r   rÅ  Ú
page_setup)	r„   r²   r"  Ú	landscaperÇ  rÔ   ÚwidthÚheightrŸ  s	            r[   rÌ  zDrawing.page_setup¶  s½   € õV 	5à×Ñ Ò%Ü×'Ñ'Ð(NÓOÐOð	=Ø#-¨c¡?Ñ ˆE�5˜&ñ Ø" E�6ˆEð	(Ø—/‘/ $Ó'ˆCð 	�‰˜U F˜O°\ÈˆÔOØˆ
øô ò 	=ÜÐ5°c°UÐ;Ó<Ð<ð	=ûô ò 	(Ø—/‘/ $Ó'ŠCð	(ús   ¬	A% ¼B  Á%A=Â BÂBc                óÜ   — ddl m} |j                  |«      s|j                  |«      r|j	                  | j
                  |«       y|| j
                  vrt        j                  d|› d�«      ‚y)z“For standard AutoCAD and ezdxf arrows create block definitions if
        required, otherwise check if block `name` exist. (internal API)

        r   r  zArrow block "z" does not exist.N)r  r  Úis_acad_arrowÚis_ezdxf_arrowr  rt   r   rÁ  )r„   r²   r  s      r[   Úacquire_arrowzDrawing.acquire_arrowõ  sb   € õ
 	/à×Ñ Ô%¨×)>Ñ)>¸tÔ)DØ×Ñ §¡¨TÕ2Ø˜Ÿ™Ñ$Ü×%Ñ%¨°d°VÐ;LÐ&MÓNÐNð %r‡   c                óœ   — d| j                   vr| j                  j                  ddd¬«       |€|}| j                  j                  |||«      S )aÃ  Add an image definition to the objects section.

        Add an :class:`~ezdxf.entities.image.ImageDef` entity to the drawing
        (objects section). `filename` is the image file name as relative or
        absolute path and `size_in_pixel` is the image size in pixel as (x, y)
        tuple. To avoid dependencies to external packages, `ezdxf` can not
        determine the image size by itself. Returns a
        :class:`~ezdxf.entities.image.ImageDef` entity which is needed to
        create an image reference. `name` is the internal image name, if set to
        ``None``, name is auto-generated.

        Absolute image paths works best for AutoCAD but not perfect, you
        have to update external references manually in AutoCAD, which is not
        possible in TrueView. If the drawing units differ from 1 meter, you
        also have to use: :meth:`set_raster_variables`.

        Args:
            filename: image file name (absolute path works best for AutoCAD)
            size_in_pixel: image size in pixel as (x, y) tuple
            name: image name for internal use, None for using filename as name
                (best for AutoCAD)

        .. seealso::

            :ref:`tut_image`

        ÚACAD_IMAGE_VARSr   rU   Úm©ÚframeÚqualityrÔ   )rp   rv   Úset_raster_variablesÚadd_image_def)r„   ro   Úsize_in_pixelr²   s       r[   rÛ  zDrawing.add_image_def  sL   € ð8  D§M¡MÑ1Ø�L‰L×-Ñ-°A¸qÈÐ-ÔLØˆ<ØˆDØ�|‰|×)Ñ)¨(°MÀ4ÓHÐHr‡   c                ó@   — | j                   j                  |||¬«       y)aÏ  Set raster variables.

        Args:
            frame: 0 = do not show image frame; 1 = show image frame
            quality: 0 = draft; 1 = high
            units: units for inserting images. This defines the real world unit
                for one drawing unit for the purpose of inserting and scaling
                images with an associated resolution.

                ===== ===========================
                mm    Millimeter
                cm    Centimeter
                m     Meter (ezdxf default)
                km    Kilometer
                in    Inch
                ft    Foot
                yd    Yard
                mi    Mile
                ===== ===========================

        r×  N)rv   rÚ  )r„   rØ  rÙ  rÔ   s       r[   rÚ  zDrawing.set_raster_variables#  s   € ð, 	�‰×)Ñ)°¸wÈeÐ)ÕTr‡   c                ó¨   — | j                   j                  |¬«       | j                  j                  d«      }|j	                  dt        |«      «       y)ztSet wipeout variables.

        Args:
            frame: 0 = do not show image frame; 1 = show image frame

        )rØ  ÚAcDbVariableDictionaryÚWIPEOUTFRAMEN)rv   Úset_wipeout_variablesrp   Úget_required_dictÚset_or_add_dict_varr  )r„   rØ  Úvar_dicts      r[   rá  zDrawing.set_wipeout_variables;  sB   € ð 	�‰×*Ñ*°Ð*Ô7Ø—=‘=×2Ñ2Ð3KÓLˆØ×$Ñ$ ^´S¸³ZÕ@r‡   c                óP   — |dk(  r|dd }| j                   j                  |||«      S )ay  Add an :class:`~ezdxf.entities.underlay.UnderlayDef` entity to the drawing
        (OBJECTS section). The `filename` is the underlay file name as relative or
        absolute path and `fmt` as string (pdf, dwf, dgn).
        The underlay definition is required to create an underlay reference.

        Args:
            filename: underlay file name
            fmt: file format as string "pdf"|"dwf"|"dgn" or "ext"
                for getting file format from filename extension
            name: pdf format = page number to display; dgn format = "default"; dwf: ????

        .. seealso::

            :ref:`tut_underlay`

        ÚextéýÿÿÿN)rv   Úadd_underlay_def)r„   ro   r"  r²   s       r[   rè  zDrawing.add_underlay_defF  s/   € ð& �%Š<Ø˜2˜3�-ˆCØ�|‰|×,Ñ,¨X°s¸DÓAÐAr‡   c                óD   — | j                   j                  |||dœ¬«       y)zÕAdd an external reference (xref) definition to the blocks section.

        Args:
            filename: external reference filename
            name: name of the xref block
            flags: block flags

        )r|  Ú	xref_path)r²   r¾   N)rt   r�   )r„   ro   r²   r|  s       r[   Úadd_xref_defzDrawing.add_xref_def]  s   € ð 	�‰�‰˜T¸ÈHÑ.UˆÕVr‡   c                ó<   — t        | «      }|j                  «        |S )aF  Checks document integrity and fixes all fixable problems, not
        fixable problems are stored in :attr:`Auditor.errors`.

        If you are messing around with internal structures, call this method
        before saving to be sure to export valid DXF documents, but be aware
        this is a long-running task.

        )r   Úrun)r„   Úauditors     r[   ÚauditzDrawing.auditj  s   € ô ˜$“-ˆØ�‰ŒØˆr‡   c                óü   — | j                  «       }|rS|j                  «        |j                  «        | j                  s't	        d«       | j
                  D ]  }t	        |«       Œ t        |j                  «      dk(  S )aF  Simple way to run an audit process. Fixes all fixable problems,
        return ``False`` if not fixable errors occurs. Prints a report of resolved and
        unrecoverable errors, if requested.

        Args:
            print_report: print report to stdout

        Returns: ``False`` if unrecoverable errors exist

        z'DXF document is not AutoCAD compatible:r   )rï  Úprint_fixed_errorsÚprint_error_reportr­  Úprintr¯  rƒ   r*  )r„   Úprint_reportrî  r²  s       r[   ÚvalidatezDrawing.validatew  sg   € ð —*‘*“,ˆÙØ×&Ñ&Ô(Ø×&Ñ&Ô(Ø×*Ò*ÜÐ?Ô@Ø×<Ô<�CÜ˜#•Jð =ä�7—>‘>Ó" aÑ'Ð'r‡   r½   c               ó@  — | j                   j                  d«       t        |xs i «      }t        d| j                   j	                  d|¬«      «      }||j
                  _        ||j
                  _        |j                  «        | j                  j                  «        |S )aÖ  Set initial view/zoom location for the modelspace, this replaces
        the current "\*Active" viewport configuration
        (:class:`~ezdxf.entities.VPort`) and reset the coordinate system to the
        :ref:`WCS`.

        Args:
             height: modelspace area to view
             center: modelspace location to view in the center of the CAD
                application window.
             dxfattribs: additional DXF attributes for the VPORT entity

        r§   r@   r½   )
r¨   Údelete_configÚdictr   r�   r¿   ÚcenterrÏ  Ú	reset_wcsrq   )r„   rÏ  rù  r¾   Úvports        r[   Úset_modelspace_vportzDrawing.set_modelspace_vportŒ  s|   € ð 	�‰×$Ñ$ YÔ/Ü˜*Ò*¨Ó+ˆ
Ü�W˜dŸn™n×0Ñ0°ÀzÐ0ÓRÓSˆØ!ˆ�	‰	ÔØ!ˆ�	‰	ÔØ�‰ÔØ�‰×ÑÔØˆr‡   ©ÚreturnÚNone)rk   r  rþ  r^   )rþ  r  )rÍ   r  rþ  rÿ  )rþ  úOptional[str])rþ  rW   )rÙ   rW   rþ  rÿ  )rÍ   r  rþ  r  )rþ  zpathlib.Path)rè   r   rþ  r^   )ré   úIterable[DXFTag]rþ  r^   )rð   r  rþ  r^   )rï   r  rþ  rÿ  )rö   zloader.SectionDictrþ  rÿ  )Nr&  )ro   zUnion[os.PathLike, str]rn   r   r"  r  rþ  rÿ  )rn   r   r"  r  rþ  rÿ  )r8  r  rþ  Úbytes)r&  )rè   zUnion[TextIO, BinaryIO]r"  r  rþ  rÿ  )rþ  r  )rA  r&   rþ  rÿ  )rþ  ÚMetaData)r   )r²   r  r|  rW   rþ  rÿ  )rþ  rF   )rþ  rG   )rþ  rH   )rþ  rI   )rþ  rK   )rþ  rJ   )rþ  rL   )rþ  rN   )rþ  rM   )rþ  rA   )rþ  r+   )r—  r+   rþ  rÿ  )rþ  r   ©Ú )r²   r  rþ  rC   )r²   r  rþ  r   )rþ  r   )rþ  zIterable[str])rþ  r<  )rþ  ú	list[str])r²  r  )Ú*)r¶  r  rþ  r*   )r  N©rþ  rø  )rþ  zIterator[DXFEntity])rþ  zIterator[GenericLayoutType])r²   r  rþ  rÿ  r�   )ÚLayout1zISO A3T)r²   r  r"  r  rþ  r   ©r²   r  )ro   r  rÜ  ztuple[int, int])r   rU   rÖ  )rØ  rW   rÙ  rW   rÔ   r  )ræ  N)ro   r  r"  r  r²   r   )ro   r  r²   r  r|  rW   )rþ  r   ©T))r   r   )rþ  r@   )]Ú__name__Ú
__module__Ú__qualname__r$   r†   Úclassmethodr�   r‰   r’   r˜   r•   r–   rœ   r    r�   r¡   rŸ   rž   r—   Úpropertyrk   ÚsetterrÏ   rÑ   rÔ   rË   rã   rê   rç   rñ   rí   rõ   r  r  r  r$  r#  r7  r2  rJ  r@  r;  r>  rW  rX  rV  rY  rt  rŠ   rm  r}  rU  rÜ   r£   r±   r¸   r¶   rŠ  r¬   r�  r   r¨   r’  r•  r[  r›  r   r^  r¥  r¨  rÇ   rÈ   r­  r¯  r³  r¶  r   rµ  r»  rÃ  rÅ  rÌ  rÓ  rÛ  rÚ  rá  rè  r   r   rë  rï  rõ  rü  © r‡   r[   r^   r^   o   s  „ Ø")ô ;'ðz Ø#*ó ó ðòò+ò %ò
*ò,ò*ò$ò$ò+ò(ò1ò&ð ò ó ð ð ×Ñò*ó ð*ð
 ò'ó ð'ð ñHó ðHð ò/ó ð/ð ‡\�\òAó ðAóó&5ð ò$ó ð$ð òó ðð òó ðó*óZòx5ò9ò3ð #'Øð	.à)ð.ð  ð.ð ð	.ð
 
ó.ô*"óHLô2(óhGó'ó$Bó ò
;ò;òNò@ó"Vò=ò=ô4ò4ð òBó ðBð ò"ó ð"ð ò%ó ð%ð ò"ó ð"ð ò%ó ð%ð òó ðð ò"ó ð"ð ò!ó ð!ð ò)ó ð)ð ò%ó ð%ð ò3ó ð3ð ò(ó ð(ð ×Ñò,ó ð,ó)ô&ô(ó&,ó*ó6ò1ò-ð ò%ó ð%ð ò7ó ð7óQôCôHó",ó!ó&ô6ð* ØØð	=àð=ð ð=ð
 
ó=ó~
Oô IôDUó0	Að FJðBØðBØ"%ðBØ5BóBð0 6>ÀÑ5LðWØðWØ#&ðWØ/2óWóô(ð*Èö r‡   r^   c                  óº   — e Zd ZdZej
                  d	d„«       Zd
dd„Zej
                  dd„«       Zej
                  dd„«       Z	ej
                  dd„«       Z
dd„Zy)r  z~Manage ezdxf meta-data by dict-like interface. Values are limited to
    strings with a maximum length of 254 characters.
    c                 ó   — y)zhReturns the value for self[`key`].

        Raises:
             KeyError: `key` does not exist
        Nr  ©r„   r¹  s     r[   Ú__getitem__zMetaData.__getitem__¨  ó   € ð 	r‡   c                ód   — 	 | j                  |«      S # t        $ r t        |t        «      cY S w xY w)zBReturns the value for `key`. Returns `default` if `key` not exist.)r  rž  r9   r:   )r„   r¹  Údefaults      r[   rg   zMetaData.get±  s4   € ð	5Ø×#Ñ# CÓ(Ð(øÜò 	5Ü˜w¬Ó4Ò4ð	5ús   ‚ “/®/c                 ó   — y)zSet self[`key`] to `value`.Nr  ©r„   r¹  Úvalues      r[   Ú__setitem__zMetaData.__setitem__¸  ó   € ð 	r‡   c                 ó   — y)zYDelete self[`key`].

        Raises:
             KeyError: `key` does not exist
        Nr  r  s     r[   Ú__delitem__zMetaData.__delitem__½  r  r‡   c                 ó   — y)zReturns `key` ``in`` self.Nr  r  s     r[   Ú__contains__zMetaData.__contains__Æ  r  r‡   c                óF   — 	 | j                  |«       y# t        $ r Y yw xY w)zARemove `key`, does **not** raise an exception if `key` not exist.N)r   rž  r  s     r[   ÚdiscardzMetaData.discardË  s'   € ð	Ø×Ñ˜SÕ!øÜò 	Ùð	ús   ‚ ”	 Ÿ N©r¹  r  rþ  r  r  )r¹  r  r  r  rþ  r  ©r¹  r  r  r  rþ  rÿ  ©r¹  r  rþ  rÿ  ©r¹  r  rþ  r<  )r  r  r  Ú__doc__ÚabcÚabstractmethodr  rg   r  r   r"  r$  r  r‡   r[   r  r  £  sy   „ ñð 	×Ñòó ðô5ð 	×Ñòó ðð 	×Ñòó ðð 	×Ñòó ðôr‡   r  c                 óÒ   — t         j                  j                  rt        S t	        j
                  t        j                  ¬«      } t         j                  dz   | j                  «       z   S )N)Útzz @ )
r=   rn  ro  ÚCONST_MARKER_STRINGr   rÅ   r   ÚutcÚ__version__Ú	isoformat)rÅ   s    r[   rv  rv  Ó  sC   € Ü‡}�}×6Ò6Ü"Ð"ä�l‰lœhŸl™lÔ+ˆÜ× Ñ  5Ñ(¨3¯=©=«?Ñ:Ð:r‡   c                  óH   — e Zd ZdZd
d„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
y	)rr  z{Manage ezdxf meta data for DXF version R12 as XDATA of layer "0".

    Layer "0" is mandatory and can not be deleted.

    c                ó€   — |j                  «       j                  j                  | _        | j	                  «       | _        y r�   )r[  Úblock_recordÚblockÚ
_msp_blockrí   Ú_data©r„   rŒ   s     r[   r†   zR12MetaData.__init__â  s)   € àŸ.™.Ó*×7Ñ7×=Ñ=ˆŒØ—Z‘Z“\ˆ�
r‡   c                ó:   — t        |t        «      | j                  v S r�   ©r9   r:   r7  r  s     r[   r"  zR12MetaData.__contains__ç  ó   € Ü˜3¤Ó,°·
±
Ð:Ð:r‡   c                ó<   — | j                   t        |t        «         S r�   )r7  r9   r:   r  s     r[   r  zR12MetaData.__getitem__ê  s   € Ø�z‰zœ+ c¬;Ó7Ñ8Ð8r‡   c                óp   — t        |t        «      | j                  t        |«      <   | j                  «        y r�   )r9   r:   r7  Ú_commitr  s      r[   r  zR12MetaData.__setitem__í  s%   € Ü'2°5¼+Ó'Fˆ�
‰
”;˜sÓ#Ñ$Ø�‰�r‡   c                óZ   — | j                   t        |t        «      = | j                  «        y r�   )r7  r9   r:   r>  r  s     r[   r   zR12MetaData.__delitem__ñ  s   € Ø�J‰J”{ 3¬Ó4Ð5Ø�‰�r‡   c                óô   — g }| j                   j                  «       D ]=  \  }}|j                  dt        |«      f«       |j                  dt        |«      f«       Œ? | j                  j                  d|«       y )Niè  r€  )r7  r	  r  r  r6  Ú	set_xdata)r„   Útagsr¹  r  s       r[   r>  zR12MetaData._commitõ  sb   € àˆØŸ*™*×*Ñ*Ö,‰JˆC�Ø�K‰K˜œs 3›xÐ(Ô)Ø�K‰K˜œs 5›zÐ*Õ+ð -ð 	�‰×!Ñ! '¨4Õ0r‡   c                ó  — t        «       }| j                  j                  d«      r_| j                  j                  d«      }d}t	        |«      dz
  }||k  r/||   j
                  }||dz      j
                  ||<   |dz  }||k  rŒ/|S )Nr€  r   rU   é   )rø  r6  Ú	has_xdataÚ	get_xdatarƒ   r  )r„   r  ÚxdataÚindexÚcountr²   s         r[   rí   zR12MetaData._loadý  sˆ   € Ü‹vˆØ�?‰?×$Ñ$ WÔ-Ø—O‘O×-Ñ-¨gÓ6ˆEØˆEÜ˜“J ‘NˆEØ˜%’-Ø˜U‘|×)Ñ)�Ø" 5¨1¡9Ñ-×3Ñ3��T‘
Ø˜‘
�ð ˜%“-ð ˆr‡   N©rŒ   r^   r(  r%  r&  r'  rý  r  )r  r  r  r)  r†   r"  r  r  r   r>  rí   r  r‡   r[   rr  rr  Û  s*   „ ñó"ó
;ó9óóó1ô
r‡   rr  c                  ó8   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zdd„Zy)rs  z[Manage ezdxf metadata for DXF version R2000+ as DICTIONARY object in
    the rootdict.
    c                óP   — |j                   j                  t        d¬«      | _        y )NT)Ú
hard_owned)rp   râ  rQ   r7  r8  s     r[   r†   zR2000MetaData.__init__  s#   € Ø!$§¡×!?Ñ!?Ü 4ð "@ó "
ˆ�
r‡   c                ó:   — t        |t        «      | j                  v S r�   r:  r  s     r[   r"  zR2000MetaData.__contains__  r;  r‡   c                ót   — | j                   t        |t        «         }|j                  j	                  dd«      S )Nr  r  )r7  r9   r:   r¿   rg   )r„   r¹  rZ   s      r[   r  zR2000MetaData.__getitem__  s,   € Ø�J‰J”{ 3¬Ó4Ñ5ˆØ�u‰u�y‰y˜ "Ó%Ð%r‡   c                ót   — | j                   j                  t        |t        «      t        |t        «      «       y r�   )r7  rã  r9   r:   r  s      r[   r  zR2000MetaData.__setitem__  s'   € Ø�
‰
×&Ñ&Ü˜œ[Ó)¬;°u¼kÓ+Jõ	
r‡   c                óV   — | j                   j                  t        |t        «      «       y r�   )r7  Úremover9   r:   r  s     r[   r   zR2000MetaData.__delitem__   s   € Ø�
‰
×Ñœ+ c¬;Ó7Õ8r‡   NrJ  r(  r%  r&  r'  )	r  r  r  r)  r†   r"  r  r  r   r  r‡   r[   rs  rs  
  s    „ ñó
ó
;ó&ó
ô
9r‡   rs  c                ó
  ‡‡‡‡— ddl m} ddlmŠ d=d>ˆfd„}d?d@ˆˆfd„}dAdBˆfd„}dAd@ˆˆfd„}| j                  Š| j
                  }	|	€| j                  }	g Š‰j                  d	| j                  › d
�«       ‰j                  d|› �«       |	| j                  k7  rAd|	› �}
t        j                  j                  |	d«      }|r	|
d|› d�z  }
‰j                  |
«       ‰j                  d| j                  › �«       ‰j                  d| j                  › �«       ‰r$‰j                  d‰j                  dd«      › �«       ‰j                  d‰j                  dd«      › �«       ‰j                  d| j                  › �«       ‰j                  d«       ‰j                  | j                  «       D �cg c]  }d|› d�‘Œ
 c}«       ‰j                  dd«      rdnd}‰r´‰j                  d|› �«       ‰j                  d || j                  «      › �«        |d «        |d!«        |d"«        |d#«       ‰j                   |d$¬%«      «       ‰j                   |d&¬%«      «       ‰j                   D ]  \  }}‰j                  d'|› d(|› d
�«       Œ | j#                  «       }t$        |v r(‰j                  d)|j                  t$        «      › �«       n‰r‰j                  d*«       t&        |v r(‰j                  d+|j                  t&        «      › �«       n‰r‰j                  d,«       |�rÕ‰j                  d-«        || j(                  d.«        || j*                  d/«        || j,                  d0«        || j.                  d1«        || j0                  d2«        || j2                  d3«        || j4                  d4«        || j6                  d5«        || j8                  d6«       | j                  t:        kD  r |t=        | j>                  «      d7d8¬9«       ‰j                  d:tA        | jC                  «       «      › �«       ‰r%‰j                   || jC                  «       «      «       ‰j                  d;tA        | jD                  «      › �«       ‰r!‰j                   || jD                  «      «       tG        | «      }tA        |«      r6‰j                  d<tA        |«      › �«       ‰r‰j                   ||«      «       ‰S c c}w )CNr   )Ú	unit_name)ÚCounterc              3  óº   •K  —  ‰«       }| D ]  }||j                  «       xx   dz  cc<   Œ t        |j                  «       «      D ]  }|› |› d||   › d�–— Œ y ­w)NrU   ú (Ú))ri  ÚsortedÚkeys)ru   ÚindentÚcounterÚer²   rU  s        €r[   rI  zinfo.<locals>.count(  s^   øè ø€ Ù"›9ˆÛˆAØ�A—I‘I“KÓ  AÑ%Ô ð ä˜7Ÿ<™<›>Ö*ˆDØ�H˜T˜F " W¨T¡] O°1Ð5Ó5ñ +ùs   ƒAAc           	     óÄ  •— d}‰j                  |› d|› dt        | «      › �«       ‰r´|dk(  rfg }| D ]^  }|j                  j                  }|dk(  r,|j                  |› d|j                  j                  › d�«       ŒJ|j                  |› |› �«       Œ` n'| D �cg c]  }|› |j                  j                  › �‘Œ }}|j                  «        ‰j                  |«       y y c c}w )Nú  r  z
 entries: ÚSTYLEr  z*shape-file: "Ú")r  rƒ   r¿   r²   ÚfontÚsortÚextend)Útabler²   Ú	containerr[  r¤  Úentryr  Úverboses         €€r[   Úappend_containerzinfo.<locals>.append_container/  s×   ø€ ØˆØ�‰�t�f˜A˜i˜[¨
´3°u³:°,Ð?Ô@ÙØ�wŠØ#%�Û"�EØ Ÿ9™9Ÿ>™>�DØ˜r’zØŸ™¨ x¨~¸e¿i¹i¿n¹nÐ=MÈQÐ%OÕPàŸ™¨ x°¨vÐ%6Õ7ñ #ñ CHÓHÁ%¸˜F˜8 E§I¡I§N¡NÐ#3Ò4À%�ÐHØ�J‰JŒLØ�K‰K˜Õð ùò Is   Â!Cr  c              3  óf   •K  — t        d«      D ]  }| › |dz   › �}|‰v sŒ|› |› d‰|   › �–— Œ  y ­w)Né   rU   Ú=)Úrange)Úkindr[  Úir²   rq   s       €r[   Ú	user_varszinfo.<locals>.user_vars@  sF   øè ø€ Ü�q–ˆAØ�V˜A˜a™C˜5�>ˆDØ�vŠ~Ø˜   a¨¨t© ~Ð6Ó6ñ ùs   ƒ1 1c           	     ór   •— ‰j                  |› | › d‰j                  | d«      j                  «       › �«       y )Nz: ú<undefined>)r  rg   Ústrip)r²   r[  r  rq   s     €€r[   Úappend_header_varzinfo.<locals>.append_header_varF  s3   ø€ Ø�‰�v�h˜t˜f B v§z¡z°$¸Ó'F×'LÑ'LÓ'NÐ&OÐPÕQr‡   zFilename: "ra  zFormat: z-Loaded content was upgraded from DXF Version rW  rX  z	Release: zDXF Version: zMaintenance Version: rg  rr  z
Codepage: rù   rú   z
Encoding: zLayouts:z  'Ú'z$MEASUREMENTÚMetricÚImperialzUnit system: zModelspace units: z$LASTSAVEDBYrû   rÃ   rÄ   z$USERI)rn  z$USERRzCustom property "z": "zCreated by ezdxf: z'File was not created by ezdxf >= 0.16.4zWritten by ezdxf: z'File was not written by ezdxf >= 0.16.4zContent stats:ÚLAYERÚLTYPEr`  ÚDIMSTYLEÚAPPIDÚUCSÚVIEWÚVPORTÚBLOCK_RECORDÚCLASSrP  )rf  zEntities in modelspace: zEntities in OBJECTS section: zUnknown/unsupported entities: )r_  )rþ  úIterator[str])re  r
  r  )rn  r  rþ  r�  )$Úezdxf.unitsrT  ÚcollectionsrU  rq   rÏ   rk   r  ro   r   rÜ   rg   rÑ   rd  r¨  rÔ   Úcustom_varsrt  rO   rP   r£   r±   r¸   r¶   r¬   rŠ  r�  r¨   r   r#   r£  rr   rƒ   r[  rv   Ú_get_unknown_entities)rŒ   rh  Úcontentr"  rT  rI  ri  rp  rt  Úloaded_dxf_versionr²  Úreleaser²   Úmeasurementr  rt  Úunknown_entitiesrU  r  rq   s    `               @@@r[   rÝ   rÝ   $  sF  û€ Ý%Ý#ö6÷ö"7÷Rð �Z‰Z€FØ×.Ñ.ÐØÐ!Ø Ÿ^™^ÐØ€DØ‡K�K�+˜cŸl™l˜^¨1Ð-Ô.Ø‡K�K�(˜3˜%Ð Ô!Ø˜SŸ^™^Ò+Ø=Ð>PÐ=QÐRˆÜ×$Ñ$×(Ñ(Ð);¸RÓ@ˆÙØ�R˜�y �?Ñ"ˆCØ�‰�CÔØ‡K�K�)˜C×,Ñ,Ð-Ð.Ô/Ø‡K�K�- §¡Ð/Ð0Ô1ÙØ�‰Ø# F§J¡J¨ÀÓ$NÐ#OÐPô	
ð 	‡K�K�*˜VŸZ™Z¨¸ÓDÐEÐFÔGØ‡K�K�*˜S×0Ñ0Ð1Ð2Ô3Ø‡K�K�
ÔØ‡K�K¨3×+GÑ+GÔ+IÓJÑ+I 4�3�t�f˜A’Ð+IÑJÔKà$Ÿj™j¨¸Ô;‘(À€KÙØ�‰�m K =Ð1Ô2Ø�‰Ð(©°3·9±9Ó)=Ð(>Ð?Ô@Ù˜.Ô)Ù˜+Ô&ÙÐ,Ô-Ù˜.Ô)Ø�‰‘I 8Ô,Ô-Ø�‰‘I 8Ô,Ô-Ø!×-Ô-‰KˆD�%Ø�K‰KÐ+¨D¨6°°e°W¸AÐ>Õ?ð .ð ×'Ñ'Ó)€NÜ˜>Ñ)Ø�‰Ð(¨×);Ñ);Ô<LÓ)MÐ(NÐOÕPÙ	Ø�‰Ð=Ô>Ü˜>Ñ)Ø�‰Ð(¨×);Ñ);Ô<LÓ)MÐ(NÐOÕPÙ	Ø�‰Ð=Ô>ÚØ�‰Ð$Ô%Ù˜Ÿ™ WÔ-Ù˜Ÿ™¨Ô0Ù˜Ÿ™ WÔ-Ù˜Ÿ™¨
Ô3Ù˜Ÿ™ WÔ-Ù˜Ÿ™ %Ô(Ù˜Ÿ™ FÔ+Ù˜Ÿ™¨Ô0Ù˜×*Ñ*¨NÔ;Ø�>‰>œEÒ!ÙœT #§+¡+Ó.°À9ÕMØ�‰Ð.¬s°3·>±>Ó3CÓ/DÐ.EÐFÔGÙØ�K‰K™˜cŸn™nÓ.Ó/Ô0à�‰Ð3´C¸¿¹Ó4DÐ3EÐFÔGÙØ�K‰K™˜cŸk™kÓ*Ô+ä0°Ó5ÐÜÐÔ Ø�K‰KÐ8¼Ð=MÓ9NÐ8OÐPÔQÙØ—‘™EÐ"2Ó3Ô4Ø€Kùòe Ks   Æ,S<c                óž   — ddl m}m}m} g }| j                  j                  «       D ]#  }t        ||||f«      sŒ|j                  |«       Œ% |S )Nr   )ÚDXFTagStorageÚACADProxyEntityÚ	OLE2Frame)Úezdxf.entitiesrŒ  r�  rŽ  rc   r  r�  r  )rŒ   rŒ  r�  rŽ  r  r  s         r[   r…  r…  ”  sH   € ßHÑHà€DØ—,‘,×%Ñ%Ö'ˆÜ�f˜}¨o¸yÐIÕJØ�K‰K˜Õð (ð €Kr‡   c                ó~   — | j                   }|t        k7  rd|_        | j                  «        | j	                  |«       y)z.Export a DXF document via a custom tag writer.TN)rk   r#   r:  r>  r@  )rŒ   rA  rk   s      r[   Úcustom_exportr‘  ž  s3   € à—‘€JØ”UÒØ"&ˆ	ÔØ‡N�NÔØ×Ñ˜	Õ"r‡   c                ó’   — t        j                  «       }t        || j                  |¬«      }t	        | |«       |j                  «       S )aõ  Export a DXF document as JSON formatted tags.

    The `compact` format is a list of ``[group-code, value]`` pairs where each pair is
    a DXF tag. The group-code has to be an integer and the value has to be a string,
    integer, float or list of floats for vertices.

    The `verbose` format (`compact` is ``False``) is a list of ``[group-code, value]``
    pairs where each pair is a 1:1 representation of a DXF tag. The group-code has to be
    an integer and the value has to be a string.

    )rk   Úcompact)r0  rD  r)   rk   r‘  rE  )rŒ   r“  rè   Újson_writers       r[   Úexport_json_tagsr•  §  s8   € ô �[‰[‹]€FÜ °3·>±>È7ÔS€KÜ�#�{Ô#Ø�?‰?ÓÐr‡   c                óD   — ddl m} t        j                   || «      «      S )a%  Load DXF document from JSON formatted tags.

    The expected JSON format is a list of [group-code, value] pairs where each pair is
    a DXF tag. The `compact` and the `verbose` format is supported.

    Args:
        data: JSON data structure as a sequence of [group-code, value] pairs

    r   )Újson_tag_loader)Úezdxf.lldxf.taggerr—  r^   rç   )r  r—  s     r[   Úload_json_tagsr™  ¹  s   € õ 3ä�<‰<™¨Ó-Ó.Ð.r‡   )rY   r  rþ  r  )FFÚASCII)rŒ   r^   rþ  r  )rŒ   r^   rþ  zlist[DXFEntity])rŒ   r^   rA  r&   r  )rŒ   r^   rþ  r  )r  zSequence[Any]rþ  r^   )…Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r*  rF  r0  ÚloggingÚosrà   r   r   Ú	itertoolsr   r=   Úezdxf.auditr   Úezdxf.entities.dxfgroupsr   Úezdxf.entities.materialr   Úezdxf.entities.mleaderr   Úezdxf.entities.mliner   Úezdxf.entitydbr   Úezdxf.groupbyr   Úezdxf.layoutsr   r   Úezdxf.layouts.layoutsr   Úezdxf.lldxfr   rh  r   r   r   r    r!   r"   r#   r$   r%   Úezdxf.lldxf.tagwriterr&   r'   r(   r)   Úezdxf.queryr*   Úezdxf.render.dimensionr+   Úezdxf.sections.acdsdatar,   r-   Úezdxf.sections.blocksr.   Úezdxf.sections.classesr/   Úezdxf.sections.entitiesr0   r1   Úezdxf.sections.headerr2   Úezdxf.sections.objectsr3   Úezdxf.sections.tablesr4   Úezdxf.toolsr5   Úezdxf.tools.codepager6   r7   Úezdxf.tools.juliandater8   Úezdxf.tools.textr9   r:   r;   r<   Ú	getLoggerr×   r�  r>   r?   r@   rA   Úezdxf.eztypesrB   rC   Úezdxf.lldxf.tagsrD   Úezdxf.lldxf.typesrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rÆ   r.  rO   rP   rQ   r\   r^   ÚABCr  rv  rr  rs  rÝ   r…  r‘  r•  r™  r  r‡   r[   Ú<module>r½     sU  ðõ #÷÷ ÷ ñ ó Û Û 	Û Û 	Û ß 'Ý ã Ý Ý 4Ý 6Ý 9Ý 5Ý #Ý !ß 0Ý )Ý ÷	÷ 	ó 	õ ÷ó õ $Ý 4ß JÝ /Ý 1ß @Ý /Ý 1Ý /Ý ß 7Ý -ß 5ß %ð 
ˆ×	Ñ	˜7Ó	#€áßBÓBÝ/Ý$Ý%Ý(÷
÷ 
õ 
ð 6€
Ø>Ð Ø%Ð Ø%Ð Ø€
ó÷qñ qôh!-ˆs�w‰wô -ò`;ô,�(ô ,ô^9�Hô 9ô4mó`ó#ôô$/r‡   