
    Og                    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Zd?d8Zd@d9ZdAdBd:ZdCd;Zy)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      S/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/document.py_validate_handle_seedr\   a   sM    /|bMq5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@ddd?ZAddd@ZBddAZCddBZDddCZEdD ZFdE ZGeddF       ZHeddG       ZIddHZJdddIZKdddJZLddKZMddLZNddMZOdddNZP	 	 	 d	 	 	 	 	 ddOZQddPZRdddQZSdddRZTdqdSZU	 d	 	 	 	 	 ddTZVeWeXz  f	 	 	 	 	 ddUZYddVZZdddWZ[dddXddY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''*CDOOCTTV(WXX 26  %'+ %) &*'+%)%)'+'+ *.46 $'+-16:26 !%69e) $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3DMM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 	++- 5T:++-((*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%    DNN*NN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#    $KKOOF# %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.    NN	8 	$D9$d#	$r   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^^+NN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[[(KKOOJ' )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JJsOf$JJ{{J; 01FJJ{#'',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#-hlln#=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5g>")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4wG$--Gr   c                :    | j                   j                  dd      S )zGet 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 (1DKK$3I;?@@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%:::''*CG9B(OPPe%')$*;*;)< =+ ,  t'''KK%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    }}<<$$||DMM*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.
xx
##r   c                R    ddl m}  ||      } |        }|j                  |       |S )zLoad 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   &.ll8R&@',,_Q-?@DK (++u=DK;;??:u= #'"2"2 #4;;??>;#OP KKOOKT]]5J5J1KL##$9$$?@ 	((48 &(,,y$/
 $D(,,x*FG 	++- $D(,,x*FG%(,,z40
 &(,,y$/

 ((,,z40

 #..* 	AJD$5111$$++M$,?@	A
 	! ??U"KK9:#DO??e#KK,,.??uen,KK;<%DO((* <<((|+))1#h-B  ! 	33DMMB ||D)  r   c                    | j                   }|j                         D ]1  }|j                  |       }|| j                  j	                  |       3 y)zLoad 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  sM     ]]iik 	5F ''-C((//4	5r   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.     	/ // 	9JZ8	9r   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>>% D3|B ^^E"dmmT*B7uB?@@	JJrsJ#HHJBHHJs   ?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    xx!5!5lx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LL--j9>>% !%%I
 ^^E"'%%--	I %%'7uB?@@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kk&//"34!!+"5"5eW"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)LL##I.y)y)  +LL##I.==!!MM$$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"LL--doo>  "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    oo<DL%+DKK	"%+DKK	"**,"/"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|    oo!$I!$I**,"/"3"3":":J"/"3"3":":Jr   c                   ddl m} | j                  j                  | j                  j                  dd             }||j                         dk7  rd}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//1Z?FDNN*++I6::AAT^^+++H599@@(.DKK%'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    ##%==::#HT1aA$>?J'1DKK$(2DKK%'1DKK$(2DKK%*4DKK'.8DKK*+,,.C'1#DKK$##%#&t}}'<'<#=K &0&?N#r   c                T    | j                   t        k  rt        |       S t        |       S )zReturns 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%     %)OOu$<{4 U-PTBU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{{"KKOOD7E"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!     !!%%dooy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 )zReturns 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    DLL&&())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    DLL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NN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    DKK  r   c                    || j                   vrt        j                  d| d      | j                   j                  |       y)zDelete 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LL%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? E5& "E6E	(//$'C 	UFO\O
  	=5cU;<<	=  	(//$'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)zFor 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$%%dV;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 DMM1LL--Aq-L<D||))(M4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    , 	))we)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23K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`

        extN)rv   add_underlay_def)r   ro   r"  r   s       r[   r  zDrawing.add_underlay_defF  s/    & %<23-C||,,XsDAAr   c                D    | j                   j                  |||d       y)zAdd 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  sl     **,&&(&&(**?@<< 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/**+
Wdnn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	5s    //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""llhll+  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==ZZ\
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    zz+c;788r   c                p    t        |t              | j                  t        |      <   | j                          y r   )r9   r:   r7  _commitr  s      r[   r  zR12MetaData.__setitem__  s%    '25+'F

;s#$r   c                Z    | j                   t        |t              = | j                          y r   )r7  r9   r:   r>  r  s     r[   r   zR12MetaData.__delitem__  s    JJ{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  sg    ****, 	,JCKKs3x()KKs5z*+	, 	!!'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-OO--g6EEJNE%-U|))"519-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,    JJ{345uuyy"%%r   c                t    | j                   j                  t        |t              t        |t                     y r   )r7  r  r9   r:   r  s      r[   r  zR2000MetaData.__setitem__  s'    

&&[);uk+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>                        d7d89       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(  sh     "9 	&AAIIK A% 	&7<<>* 	6DHTF"WT]O155	6s   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    tfAi[
3u:,?@w#%" 8E 99>>Drzx~eiinn=MQ%OPxv%678 CHHF8EIINN#34HHJJLKK  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@  sK     q 	7AVAaC5>Dv~at~66	7s   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    vhtfBvzz$'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   $  sG   %#6"7R ZZF..! ^^DKK+cll^1-.KK(3% !S^^+=>P=QR$$(();R@Ry?"CCKK)C,,-./KK-/01#FJJ$N#OP	
 	KK*VZZDEFGKK*S00123KK
KK3+G+G+IJ43tfAJK$jj;(KmK=12(399)=(>?@.)+&,-.)I8,-I8,-!-- 	@KD%KK+D6eWA>?	@ '')N>)(););<L)M(NOP	=>>)(););<L)M(NOP	=>$%W-0W-
3W-%(F+0**N;>>E!T#++.9M.s3>>3C/D.EFGKKcnn./03C4D3EFGKKckk*+05 KK8=M9N8OPQE"234Ke 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    sM    HHD,,%%'  f}oyIJKK  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"&	NN	"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SK#{#??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!-sww -`;,( ,^9H 94m`#$/r   