
    hf                       S SK Jr  S SKrS SKrS SKJrJrJrJrJ	r	J
r
Jr  S SKJr  S SKrS SKJr  S SKJrJrJrJrJrJr  S SKJrJrJr  S SKJrJrJrJ r J!r!  S	S
K"J#r#J$r$  S	SK%J&r&J'r'  S	SK(J)r)  S	SK*J+r+  S	SK,J-r-  \(       a(  S SK.J/r/  S SK0J1r1J2r2J3r3  S SK4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;  / SQr<\Rz                  " S5      r> " S S\&5      r?\" S\" S\S S9\" S\R                  S9\" S\R                  S9\" S\R                  S9\" S \R                  S9\" S!5      \" S"S#S$9\" S%S \R                  \S&9\" S'S(\R                  " S S)5      \R                  " S S)5      S&9\" S*S(\R                  " S S)5      \R                  " S S)5      S&9\" S+S \R                  " S S)5      \R                  " S S)5      S&9\" S,5      \" S-S	\R                  " S	S.15      \S&9\" S/5      \" S0\S \R                  \S19S2.5      rF\" \F5      rG\+ " S3 S4\?5      5       rH\" S5\I" \FR                  5      5      rK\" \K5      rL\+ " S6 S7\?5      5       rM\" S8\" SS S$9\" S	5      \" S\R                  S9\" S\R                  \" S9S95      S:9\" S%S	S$9\" S'S \R                  " 1 S;k5      \S&9S<.5      rN\" \N5      rO\+ " S= S>\)5      5       rP\" S?\" SS.S$9\" S@5      SA.5      rQ\" \Q5      rR\+ " SB SC\)5      5       rS\" SD\" SS S$9\" S"S \R                  \S&9\" S-S	\R                  \S&9\" SES#\R                  " S SF5      \S&9SG.5      rT\" \T5      rU\+ " SH SI\)5      5       rV\" SJSK\" S"S \R                  \S&905      rW\" \W5      rX\+ " SL SM\)5      5       rYg)N    )annotationsN)TYPE_CHECKINGIterablecastOptionalCallableUnionType)Self)	validator)DXFAttrDXFAttributesDefSubclassXTypeRETURN_DEFAULTgroup_code_mapping)SUBCLASS_MARKERDXF2000DXF2010)Vec3Vec2BoundingBox2dUVecMatrix44   )
base_classSubclassProcessor)
DXFGraphicacdb_entity)	DXFObject)register_entity)default_copy)Auditor)DXFNamespace	DXFEntity
Dictionary)AbstractTagWriter)DXFTag)Drawing)xref)ImageImageDefImageDefReactorRasterVariablesWipeoutezdxfc                  J  ^  \ rS rSr% SrSr\" 5       rS\S'   Sr	\
rSrSrS	rS
rSU 4S jjr\4SS jjrSU 4S jjr S   SU 4S jjjrS S jrS!U 4S jjrS"S jr\S 5       r\R4                  S#S j5       rS#S jrSS jrS$S jrS%S jrS&S jrS'S jr SU 4S jjr!Sr"U =r#$ )(	ImageBase0   DXF IMAGE entity	IMAGEBASEz dict[int, Union[str, list[str]]]_CLS_GROUP_CODESdummyr            c                0   > [         TU ]  5         / U l        g N)super__init___boundary_pathself	__class__s    F/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/image.pyr>   ImageBase.__init__=   s     +-    c                f    [        U[        5      (       d   e[        U R                  5      Ul        g r<   )
isinstancer2   listr?   )rA   entitycopy_strategys      rC   	copy_dataImageBase.copy_dataF   s(    &),,,, $T%8%8 9rE   c                B   > [         TU ]  5         U R                  5         g r<   )r=   post_new_hookreset_boundary_pathr@   s    rC   rN   ImageBase.post_new_hookJ   s      "rE   c                "  > [         TU ]  U5      nU(       aw  UR                  S   R                  SS9nU R	                  U5        UR                  X R                  SSS9  [        U R                  5      S:  a  X l	        U R                  5         U$ )Nr8   )   )codesT)recover)r=   load_dxf_attribs
subclassespop_tagsload_boundary_pathfast_load_dxfattribsr6   lenboundary_pathdxfrO   )rA   	processorr\   	path_tagsrB   s       rC   rU   ImageBase.load_dxf_attribsN   s     g&y1!,,Q/88u8EI##I.**30E0EqRV*W4%%&*((*
rE   c                j    U VVs/ s H  u  p#US:X  d  M  [        U5      PM     snnU l        g s  snnf NrR   )r   r?   )rA   tagscodevalues       rC   rX   ImageBase.load_boundary_path[   s*    >BQd{tdbj{tE{dQQs   //c                l  > [         TU ]  U5        UR                  [        U R                  5        [        U R                  5      U R                  l        U R                  R                  U/ SQ5        U R                  U5        UR                  [        :  a  U R                  R                  US5        gg)(Export entity specific data as DXF tags.)class_versioninsertu_pixelv_pixel
image_sizeimage_def_handleflagsclipping
brightnesscontrastfadeimage_def_reactor_handleclipping_boundary_typecount_boundary_points	clip_modeN)r=   export_entity
write_tag2r   _SUBCLASS_NAMErZ   r[   r\   ru   export_dxf_attribsexport_boundary_path
dxfversionr   rA   	tagwriterrB   s     rC   rw   ImageBase.export_entity^   s    i(_d.A.AB),T-?-?)@&##	
& 	!!),7*HH''	;? +rE   c                N    U R                    H  nUR                  SU5        M     g ra   )r[   write_vertex)rA   r~   vertexs      rC   r{   ImageBase.export_boundary_pathz   s"    ((F""2v. )rE   c                    U R                   $ )aM  Returns the boundray path in raw form in pixel coordinates.

A list of vertices as pixel coordinates, Two vertices describe a
rectangle, lower left corner is (-0.5, -0.5) and upper right corner
is (ImageSizeX-0.5, ImageSizeY-0.5), more than two vertices is a
polygon as clipping path. All vertices as pixel coordinates. (read/write)
)r?   rA   s    rC   r[   ImageBase.boundary_path~   s     """rE   c                &    U R                  U5        g r<   )set_boundary_path)rA   verticess     rC   r[   r      s    x(rE   c                   [         R                  " U5      n[        U5      (       a  [        U5      S:  a0  US   R                  US   5      (       d  UR	                  US   5        X l        U R                  U R                  SS9  SU R                  l	        [        U5      S:  a  SOSU R                  l
        [        U R
                  5      U R                  l        gU R                  5         g)	zSet boundary path to `vertices`. Two vertices describe a rectangle
(lower left and upper right corner), more than two vertices is a polygon
as clipping path.
r8   r   Tstater      N)r   rH   rZ   iscloseappendr?   set_flag_stateUSE_CLIPPING_BOUNDARYr\   ro   rt   ru   rO   )rA   r   	_verticess      rC   r   ImageBase.set_boundary_path   s    
 IIh'	y>>9~!)B-*?*?	!*M*M  1."+ : :$G !DHH36y>A3Ea1DHH+-01D1D-EDHH*$$&rE   c                   [        SS5      n[        U R                  R                  5      U-   nX/U l        U R	                  [
        R                  SS9  SU R                  l        SU R                  l        SU R                  l	        g)z_Reset boundary path to the default rectangle [(-0.5, -0.5),
(ImageSizeX-0.5, ImageSizeY-0.5)].
g      Fr   r   r   r8   N)
r   r\   rl   r?   r   r+   r   ro   rt   ru   )rA   lower_left_cornerupper_right_corners      rC   rO   ImageBase.reset_boundary_path   st     !t,!$(("5"569JJ0EE77uE*+')*&rE   c                `   UR                  U R                  R                  5      U R                  l        UR                  U R                  R                  5      U R                  l        UR                  U R                  R
                  5      U R                  l        U R                  U5        U $ )z<Transform IMAGE entity by transformation matrix `m` inplace.)	transformr\   ri   transform_directionrj   rk   post_transformrA   ms     rC   r   ImageBase.transform   ss    ++dhhoo6001A1AB001A1ABArE   c                4   [        5       nUR                  S[        U R                  R                  5      5        UR                  S[        U R                  R
                  5      5        UR                  S[        U R                  R                  5      5        U$ )Nr   r   r   )r   set_rowr   r\   rj   rk   ri   r   s     rC   get_wcs_transformImageBase.get_wcs_transform   sc    J			!T$((**+,			!T$((**+,			!T$((//*+rE   c                (   U R                   n[        U5      S:X  aF  Uu  p#U[        UR                  UR                  5      U[        UR                  UR                  5      /nUS   R                  US   5      (       d  UR                  US   5        U$ )a  Returns the boundary path as closed loop in pixel coordinates.  Resolves the 
simple form of two vertices as a rectangle.  The image coordinate system has an 
inverted y-axis and the top-left corner is (0, 0).

.. versionchanged:: 1.2.0

    renamed from :meth:`boundray_path_ocs()`

r8   r   r   )r[   rZ   r   xyr   r   )rA   r[   p0p1s       rC   pixel_boundary_pathImageBase.pixel_boundary_path   s     **}""FBbddBDD!12tBDD"$$7GHMQ''b(9::  q!12rE   c                   [        U R                  R                  5      n[        U R                  R                  5      n[        U R                  R                  5      nX1S-  US-  -
  -  nU R                  R
                  R                  nU R                  5        Vs/ s H&  nX1UR                  -  -   X$UR                  -
  -  -   PM(     nnU$ s  snf )a+  Returns the boundary/clipping path in WCS coordinates.

It's recommended to acquire the clipping path as :class:`~ezdxf.path.Path` object
by the :func:`~ezdxf.path.make_path` function::

    from ezdxf.path import make_path

    image = ...  # get image entity
    clipping_path = make_path(image)

      ?)	r   r\   rj   rk   ri   rl   r   r   r   )rA   uvoriginheightpr   s          rC   boundary_path_wcsImageBase.boundary_path_wcs   s     !!"!!"dhhoo&c'AG##$$&& --/
/ !##g!|"45/ 	 
 	
s   -Cc                J   > U R                   (       d  g U ?[        TU ]  5         g r<   )is_aliver?   r=   destroyr@   s    rC   r   ImageBase.destroy   s    }}rE   )r?   r\   returnNonerI   r   r   r   r<   r]   zOptional[SubclassProcessor]r   r$   )rb   zIterable[DXFTag]r~   r'   r   r   )r~   r'   r   zIterable[UVec]r   r   )r   r   r   r   )r   r   )r   z
list[Vec2])r   z
list[Vec3])$__name__
__module____qualname____firstlineno____doc__DXFTYPEdictr6   __annotations__ry   r   MIN_DXF_VERSION_FOR_EXPORT
SHOW_IMAGESHOW_IMAGE_WHEN_NOT_ALIGNEDr   USE_TRANSPARENCYr>   r"   rK   rN   rU   rX   rw   r{   propertyr[   setterr   rO   r   r   r   r   r   __static_attributes____classcell__rB   s   @rC   r2   r2   0   s    G9=6?N!(J"#- 5A :#
 8<4	 R@8/ # # ) )'$
+$2 rE   r2   AcDbRasterImageZ   )r|   default
   )xtype         iT  F   r   )r   i  )r   r   fixeri  2   e   i  i  ih  G   r8   [   i"  )r|   r   r   r   )rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   c                    ^  \ rS rSrSrSr\" \\\	5      r
\r\	R                  rSSS.rSU 4S jjr\    S           SU 4S jjj5       r\4SU 4S	 jjjrSS
 jrSU 4S jjrS rS rSU 4S jjrSU 4S jjrSS jr\SS j5       r\R<                  S S j5       r\S!S j5       rSU 4S jjr S"U 4S jjr!Sr"U =r#$ )#r+   i=  r4   IMAGE0r   )layerrn   c                L   > [         TU ]  5         / U l        S U l        S U l        g r<   )r=   r>   r?   
_image_def_image_def_reactorr@   s    rC   r>   Image.__init__G  s%    *,.2=ArE   c           	       > U=(       d    0 nUR                  SS 5      nSnU(       a'  UR                  (       a  UR                  R                  nUR	                  SU5        [        S[        TU ]  XX45      5      nXWl        U$ )N	image_defr   r   rl   r+   )	popr   r\   rl   
setdefaultr   r=   newr   )	clshandleowner
dxfattribsdocr   rl   imagerB   s	           rC   r   	Image.newM  so      %2
NN;5	
++"11JlJ7Wegk&IJ#rE   c                   > [        U[        5      (       d   e[        TU ]  XS9  UR                  R                  S5        S Ul        U R                  Ul        g )N)rJ   rs   )rG   r+   r=   rK   r\   discardr   r   )rA   rI   rJ   rB   s      rC   rK   Image.copy_dataa  sO    &%((((&> 	

56$(! OOrE   c                    U R                   R                  (       a  g U R                  (       a  g U R                  5         g r<   )r   
is_loadingr   _create_image_def_reactorr   s    rC   post_bind_hookImage.post_bind_hookk  s,    88"" 	&&(rE   c                j  > [         TU ]  U5        UR                  nUR                  U R                  R                  SS 5      5      U l        U R
                  c  U R                  5         g UR                  U R                  R                  SS 5      5      U l        U R                  c  U R                  $ g )Nrm   rs   )	r=   post_load_hookentitydbgetr\   r   r   r   _fix_missing_image_def_reactor)rA   r   dbrB   s      rC   r   Image.post_load_hooku  s    s#\\&&.@$!GH??"LLN"$&&HHLL3T:#
 ""* 666rE   c                     U R                  5         [        R                  S[	        U 5       35        g ! [         a;  n[        R                  S[	        U 5       S3US9  U R                  5          S nAg S nAff = f)Nz9An exception occurred while executing fixing command for z, destroying entity.)exc_infoz$Created missing ImageDefReactor for )r   	Exceptionlogger	exceptionstrr   debug)rA   es     rC   r   $Image._fix_missing_image_def_reactor  sw    		**, 	;CI;GH  	Kt9+13  
 LLN	s   4 
A91A44A9c                L   U R                   R                  R                  U R                  R                  5      nUR                  R                  nX R                  l        Xl        U R                   U R                  R                   L a  U R                  R                  U5        g g r<   )	r   objectsadd_image_def_reactorr\   r   rs   r   r   append_reactor_handle)rA   image_def_reactorreactor_handles      rC   r   Image._create_image_def_reactor  ss     HH,,BB488??S*..55,:)"388t***OO11.A +rE   c                   > [         TU ]  U5        [        U R                  [        5      (       a0  UR                  U R                  R                  R                  5        gg)z5Register required resources to the resource registry.N)r=   register_resourcesrG   r   r,   
add_handler\   r   )rA   registryrB   s     rC   r  Image.register_resources  sD    "8,dnnh// 2 2 9 9: 0rE   c                  > [        U[        5      (       d   e[        TU ]  X5        U R                  n[        U[
        5      (       a  U R                  5       nUR                  SXC5      u  pE[        U[
        5      (       aV  XQl        [        UR                  [        5      (       a0  UR                  UR                  R                  R                  5        gggg)z3Translate resources from self to the copied entity.ACAD_IMAGE_DICTN)rG   r+   r=   map_resourcesr   r,   get_image_def_namemap_acad_dict_entryr   r-   r  r\   r   )rA   clonemappingsource_image_defnameclone_image_defrB   s         rC   r  Image.map_resources  s    %''''e->>&11**,D$+$?$?!4%!D /844"1e66HH#990044;; I 5 2rE   c                    U R                   c  gU R                   R                  R                  S5      nUR                  5        H  u  p#X0R                  L d  M  Us  $    g)zAReturns the name of the `image_def` entry in the ACAD_IMAGE_DICT. r  )r   rootdictget_required_dictitemsr   )rA   
image_dictr  entrys       rC   r  Image.get_image_def_name  sS    88XX&&889JK
%++-KD' . rE   c                    U R                   $ )z>Returns the associated IMAGEDEF entity, see :class:`ImageDef`.)r   r   s    rC   r   Image.image_def  s     rE   c                    U(       a=  UR                   (       a,  UR                  R                  U R                  l        Xl        g U R                  R                  S5        S U l        g )Nrm   )r   r\   r   rm   r   r   )rA   r   s     rC   r   r+    sB    ++(1(<(<DHH%'OHH/0"DOrE   c                    U R                   $ )z/Returns the associated IMAGEDEF_REACTOR entity.)r   r   s    rC   r  Image.image_def_reactor  s     &&&rE   c                @  > U R                   (       d  g U R                  nU(       aj  UR                   (       aY  U R                  nU(       a6  UR                   (       a%  UR                  UR                  R
                  5        UR                  5         [        TU ]  5         g r<   )r   r   r   discard_reactor_handler\   r   r   r=   )rA   reactorr   rB   s      rC   r   Image.destroy  sc    }}))w''IY//001C1CDOOrE   c                $   > [         TU ]  U5        g r<   )r=   auditrA   auditorrB   s     rC   r4  Image.audit  s    grE   )r?   r   r   r   )NNNN)r   zType[Image]r   Optional[str]r   r8  r   zOptional[dict]r   zOptional[Drawing]r   r+   r   )r   r)   r   zOptional[Callable])r  zxref.Registryr   r   )r  r   r  zxref.ResourceMapperr   r   )r   r  )r   zOptional[ImageDef])r   r,   r   r   )r   zOptional[ImageDefReactor]r6  r#   r   r   )$r   r   r   r   r   r   r   r   r   
acdb_image
DXFATTRIBSacdb_image_group_codesr6   r  ry   DEFAULT_ATTRIBSr>   classmethodr   r"   rK   r   r   r   r   r  r  r  r   r   r   r  r   r4  r   r   r   s   @rC   r+   r+   =  s   Gz;
CJ-__N #a0OB  !%#%)!%  #	
  
 & 5A , ,)&I	B;,   # # ' '
 rE   r+   AcDbWipeoutc                     ^  \ rS rSrSrSr\" \\\	5      r
SSSSSSS	SSSS
.
r\r\	R                  rSS jrS rSU 4S jjrSU 4S jjrSrU =r$ )r/   i  zDXF WIPEOUT entityWIPEOUTr      r   r   r   r   )
r   rn   ro   rp   rq   rr   rl   rm   rs   rv   c                t  ^^^^ U R                  U R                  5        [        R                  " T5      m[	        T5      mTR
                  u  mmU R                  n[        TR                  5      Ul	        [        TSS5      Ul
        [        STS5      Ul        UUUU4S jnU R                  U" 5       5        g)zBSet a new masking area, the area is placed in the layout xy-plane.r   c               3     >#    TR                   n T H5  nX-
  n[        UR                  T-  S-
  SUR                  T-  -
  5      v   M7     g 7f)Nr   )extminr   r   r   )rE  r   r   boundsr   x_sizey_sizes      rC   r[   /Wipeout.set_masking_area.<locals>.boundary_path  sG     ]]F"O133<#-sQSS6\/ABB #s   A	AN)update_dxf_attribsr=  r   rH   r   sizer\   r   rE  ri   rj   rk   r   )rA   r   r\   r[   rF  rG  rH  s    `  @@@rC   set_masking_areaWipeout.set_masking_area  s     4 4599X&x(hh&--(
61a(1fa(	C 	C 	}/rE   c                H    SU R                   l        SU R                   l        g )Nr   )r\   rs   rm   r   s    rC   _reset_handlesWipeout._reset_handles  s    ,/)$'!rE   c                D   > U R                  5         [        TU ]	  U5        g r<   )rO  r=   r4  r5  s     rC   r4  Wipeout.audit  s    grE   c                D   > U R                  5         [        TU ]	  U5        g)rg   N)rO  r=   rw   r}   s     rC   rw   Wipeout.export_entity  s    i(rE    r   r9  r   )r   r   r   r   r   r   r   r   r   acdb_wipeoutr;  r=  acdb_wipeout_group_codesr6   r  ry   rL  rO  r4  rw   r   r   r   s   @rC   r/   r/     sj    Gz;EJ$'O 0!&&N0(() )rE   r/   AcDbRasterImageDefg{Gz?)r   r   >   r   r8      rh   filenamerl   
pixel_sizeloadedresolution_unitsc                  f   ^  \ rS rSrSrSr\" \\5      r	\
r S   SU 4S jjjrS	U 4S jjrSrU =r$ )
r,   iE  zDXF IMAGEDEF entityIMAGEDEFc                b   > [         TU ]  U5      nU(       a  UR                  U[        S5        U$ Nr   )r=   rU   rY   acdb_image_def_group_codesrA   r]   r\   rB   s      rC   rU   ImageDef.load_dxf_attribsM  s/     g&y1**30JAN
rE   c                   > [         TU ]  U5        UR                  [        [        R
                  5        U R                  R                  U/ SQ5        g)rg   rZ  N)r=   rw   rx   r   acdb_image_defr  r\   rz   r}   s     rC   rw   ImageDef.export_entityU  s@    i(_n.A.AB##
	
rE   rU  r<   r   r   )r   r   r   r   r   r   r   r   rg  r;  r   r   rU   rw   r   r   r   s   @rC   r,   r,   E  sF    Gz>:J!( 8<4	 
 
rE   r,   AcDbRasterImageDefReactorJ  )rh   image_handlec                  f   ^  \ rS rSrSrSr\" \\5      r	\
r S   SU 4S jjjrS	U 4S jjrSrU =r$ )
r-   iq  zDXF IMAGEDEF_REACTOR entityIMAGEDEF_REACTORc                b   > [         TU ]  U5      nU(       a  UR                  U[        S5        U$ rb  )r=   rU   rY   "acdb_image_def_reactor_group_codesrd  s      rC   rU    ImageDefReactor.load_dxf_attribsy  0     g&y1**30RTUV
rE   c                  > [         TU ]  U5        UR                  [        [        R
                  5        UR                  SU R                  R                  5        UR                  SU R                  R                  5        g)rg   r   rj  N)	r=   rw   rx   r   acdb_image_def_reactorr  r\   rh   rk  r}   s     rC   rw   ImageDefReactor.export_entity  s[    i(_.D.I.IJR!7!78S$(("7"78rE   rU  r<   r   r   )r   r   r   r   r   r   r   r   rs  r;  r   r   rU   rw   r   r   r   s   @rC   r-   r-   q  sG    % Gz+ABJ!( 8<4	 9 9rE   r-   AcDbRasterVariablesH   	   rh   framequalityunitsc                  f   ^  \ rS rSrSrSr\" \\5      r	\
r S   SU 4S jjjrS	U 4S jjrSrU =r$ )
r.   i  zDXF RASTERVARIABLES entityRASTERVARIABLESc                b   > [         TU ]  U5      nU(       a  UR                  U[        S5        U$ rb  )r=   rU   rY   !acdb_raster_variables_group_codesrd  s      rC   rU    RasterVariables.load_dxf_attribs  s0     g&y1**30QSTU
rE   c                   > [         TU ]  U5        UR                  [        [        R
                  5        U R                  R                  U/ SQ5        g)rg   rx  N)r=   rw   rx   r   acdb_raster_variablesr  r\   rz   r}   s     rC   rw   RasterVariables.export_entity  sA    i(_.C.H.HI##	
rE   rU  r<   r   r   )r   r   r   r   r   r   r   r   r  r;  r   r   rU   rw   r   r   r   s   @rC   r.   r.     sG    $Gz+@AJ!( 8<4	 
 
rE   r.   AcDbWipeoutVariablesry  c                  f   ^  \ rS rSrSrSr\" \\5      r	\
r S   SU 4S jjjrS	U 4S jjrSrU =r$ )
WipeoutVariablesi  zDXF WIPEOUTVARIABLES entityWIPEOUTVARIABLESc                b   > [         TU ]  U5      nU(       a  UR                  U[        S5        U$ rb  )r=   rU   rY   "acdb_wipeout_variables_group_codesrd  s      rC   rU   !WipeoutVariables.load_dxf_attribs  rq  rE   c                   > [         TU ]  U5        UR                  [        [        R
                  5        U R                  R                  US5        g)rg   ry  N)r=   rw   rx   r   acdb_wipeout_variablesr  r\   rz   r}   s     rC   rw   WipeoutVariables.export_entity  s;    i(_.D.I.IJ##Iw7rE   rU  r<   r   r   )r   r   r   r   r   r   r   r   r  r;  r   r   rU   rw   r   r   r   s   @rC   r  r    sG    % Gz+ABJ!( 8<4	 8 8rE   r  )Z
__future__r   ospathlibtypingr   r   r   r   r   r	   r
   typing_extensionsr   loggingezdxf.lldxfr   ezdxf.lldxf.attributesr   r   r   r   r   r   ezdxf.lldxf.constr   r   r   
ezdxf.mathr   r   r   r   r   	dxfentityr   r   dxfgfxr   r   dxfobjr    factoryr!   copyr"   ezdxf.auditr#   ezdxf.entitiesr$   r%   r&   ezdxf.lldxf.tagwriterr'   ezdxf.lldxf.typesr(   ezdxf.documentr)   r0   r*   __all__	getLoggerr  r2   point3dpoint2dis_integer_boolis_in_integer_rangefit_into_integer_range	is_one_ofr:  r<  r+   r   attribsrV  rW  r/   rg  rc  r,   rs  ro  r-   r  r  r.   r  r  r  rU  rE   rC   <module>r     s\   # 	    #  !  @ ? @ @ 4 +  $ #BB7(&
P			7	#z
 zz  C"EMM2 2U]]3 2U]]3b6#CL Q' // 	
 33As;221c:	
 33As;221c:	
 33As;221c:	
 %,CL #*))1a&1 	#
 ") // 
CIL
Z ,J7  hI h hX =$z/A/A*BC-l;  3)i 3) 3)t  Q/AJb6btD$?OP#q) $)))4 	
2 0?  
y 
 
@ % Q/  &88N%O " 9i 9 9. $ Q/ // 	
 // 	
  33Aq9 	
=$' P %77L$M ! 
i 
 
< %
 	// 	
	
  &88N%O " 8y 8 8rE   