
    'jf                    &   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZm Z m!Z! d	d
l"m#Z#m$Z$ d	dl%m&Z&m'Z' d	dl(m)Z) d	dl*m+Z+ d	dl,m-Z- er(d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; g dZ< ej=        d          Z> G d de&          Z? ed eded            edej@                   edej@                   edej@                   ed ejA                   ed!           ed"d#$           ed%d ejB        e&           ed'd( ejC        d d)           ejD        d d)          &           ed*d( ejC        d d)           ejD        d d)          &           ed+d  ejC        d d)           ejD        d d)          &           ed,           ed-d	 ejE        d	d.h          e&           ed/           ed0ed ejB        e1          d2          ZF eeF          ZGe+ G d3 d4e?                      ZH ed5 eIeFjJ                            ZK eeK          ZLe+ G d6 d7e?                      ZM ed8 edd $           ed	           edejA                   edejA         ed9d9          :           ed%d	$           ed'd  ejE        h d;          e&          d<          ZN eeN          ZOe+ G d= d>e)                      ZP ed? edd.$           ed@          dA          ZQ eeQ          ZRe+ G dB dCe)                      ZS edD edd $           ed"d ejB        e&           ed-d	ejB        e&           edEd# ejC        d dF          e&          dG          ZT eeT          ZUe+ G dH dIe)                      ZV edJdK ed"d ejB        e&          i          ZW eeW          ZXe+ G dL dMe)                      ZYdS )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                      e Zd ZU dZdZ e            Zded<   dZe	Z
dZdZdZd	Zd, fdZefd-dZd, fdZ	 d.d/ fdZd0dZd1 fdZd2dZed             Zej        d3d             Zd3d!Zd,d"Zd4d%Zd5d&Zd6d(Zd7d*Zd, fd+Z  xZ!S )8	ImageBaseDXF IMAGE entity	IMAGEBASEz dict[int, Union[str, list[str]]]_CLS_GROUP_CODESdummyr            returnNonec                V    t                                                       g | _        d S N)super__init___boundary_pathself	__class__s    N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/image.pyr?   zImageBase.__init__=   s)     +-    entityr   c                f    t          |t                    sJ t          | j                  |_        d S r=   )
isinstancer2   listr@   )rB   rF   copy_strategys      rD   	copy_datazImageBase.copy_dataF   s1    &),,,,, $T%8 9 9rE   c                p    t                                                       |                                  d S r=   )r>   post_new_hookreset_boundary_pathrA   s    rD   rM   zImageBase.post_new_hookJ   s1      """""rE   N	processorOptional[SubclassProcessor]r$   c                \   t                                          |          }|r|j        d                             d          }|                     |           |                    || j        dd           t          | j                  dk     r|| _	        | 
                                 |S )Nr7      )codesT)recover)r>   load_dxf_attribs
subclassespop_tagsload_boundary_pathfast_load_dxfattribsr5   lenboundary_pathdxfrN   )rB   rO   r]   	path_tagsrC   s       rD   rV   zImageBase.load_dxf_attribsN   s     gg&&y11 	+!,Q/88u8EEI##I...**30EqRV*WWW4%&&**((***
rE   tagsIterable[DXFTag]c                (    d |D             | _         d S )Nc                >    g | ]\  }}|d k    t          |          S rR   )r   ).0codevalues      rD   
<listcomp>z0ImageBase.load_boundary_path.<locals>.<listcomp>\   s'    QQQ{tUdbjjtE{{jjjrE   r@   )rB   r_   s     rD   rY   zImageBase.load_boundary_path[   s    QQdQQQrE   	tagwriterr'   c                   t                                          |           |                    t          | j                   t          | j                  | j        _        | j        	                    |g d           | 
                    |           |j        t          k    r| j        	                    |d           dS dS )(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_NAMEr[   r\   r]   rx   export_dxf_attribsexport_boundary_path
dxfversionr   rB   rh   rC   s     rD   rz   zImageBase.export_entity^   s    i(((_d.ABBB),T-?)@)@&##  	
 	
 	
& 	!!),,,7**H''	;????? +*rE   c                F    | j         D ]}|                    d|           d S )NrS   )r\   write_vertex)rB   rh   vertexs      rD   r~   zImageBase.export_boundary_pathz   s7    ( 	/ 	/F""2v....	/ 	/rE   c                    | j         S )au  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)
        rg   rB   s    rD   r\   zImageBase.boundary_path~   s     ""rE   verticesIterable[UVec]c                0    |                      |           d S r=   )set_boundary_path)rB   r   s     rD   r\   zImageBase.boundary_path   s    x(((((rE   c                   t          j        |          }t          |          rt          |          dk    r<|d                             |d                   s|                    |d                    || _        |                     | j        d           d| j        _	        t          |          dk     rdnd| j        _
        t          | j                  | j        _        dS |                                  dS )	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.
        r7   r   Tstater      N)r   rI   r[   iscloseappendr@   set_flag_stateUSE_CLIPPING_BOUNDARYr]   rr   rw   rx   rN   )rB   r   	_verticess      rD   r   zImageBase.set_boundary_path   s    
 Ih''	y>> 
	'9~~!!)B-*?*?	!*M*M!  1..."+D :$GGG !DH36y>>A3E3Eaa1DH+-01D-E-EDH***$$&&&&&rE   c                    t          dd          }t          | j        j                  |z   }||g| _        |                     t
          j        d           d| j        _        d| j        _        d| j        _	        dS )zoReset boundary path to the default rectangle [(-0.5, -0.5),
        (ImageSizeX-0.5, ImageSizeY-0.5)].
        g      Fr   r   r   r7   N)
r   r]   ro   r@   r   r+   r   rr   rw   rx   )rB   lower_left_cornerupper_right_corners      rD   rN   zImageBase.reset_boundary_path   s{     !t,,!$("5669JJ02DEE7uEEE*+')*&&&rE   mr   c                &   |                     | j        j                  | j        _        |                    | j        j                  | j        _        |                    | j        j                  | j        _        |                     |           | S )z<Transform IMAGE entity by transformation matrix `m` inplace.)	transformr]   rl   transform_directionrm   rn   post_transformrB   r   s     rD   r   zImageBase.transform   sn    ++dho66001ABB001ABBArE   c                0   t                      }|                    dt          | j        j                             |                    dt          | j        j                             |                    dt          | j        j                             |S )Nr   r   r   )r   set_rowr   r]   rm   rn   rl   r   s     rD   get_wcs_transformzImageBase.get_wcs_transform   sr    JJ			!T$(*++,,,			!T$(*++,,,			!T$(/**+++rE   
list[Vec2]c                (   | j         }t          |          dk    r;|\  }}|t          |j        |j                  |t          |j        |j                  g}|d                             |d                   s|                    |d                    |S )aD  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()`

        r7   r   r   )r\   r[   r   xyr   r   )rB   r\   p0p1s       rD   pixel_boundary_pathzImageBase.pixel_boundary_path   s     *}"""FBbdBD!1!12tBD"$7G7GHMQ''b(9:: 	3  q!1222rE   
list[Vec3]c                (   t          | j        j                  t          | j        j                  t          | j        j                  dz  dz  z
  z  | j        j        j        fd|                                 D             }|S )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)

              ?c                F    g | ]}|j         z  z   |j        z
  z  z   S  )r   r   )rc   pheightoriginuvs     rD   rf   z/ImageBase.boundary_path_wcs.<locals>.<listcomp>   sD     
 
 
 a!#g!v|"45
 
 
rE   )r   r]   rm   rn   rl   ro   r   r   )rB   r   r   r   r   r   s     @@@@rD   boundary_path_wcszImageBase.boundary_path_wcs   s     !""!""dho&&!c'AG##$&
 
 
 
 
 
 
--//
 
 
 rE   c                ^    | j         sd S | `t                                                       d S r=   )is_aliver@   r>   destroyrA   s    rD   r   zImageBase.destroy   s2    } 	FrE   r:   r;   rF   r   r:   r;   r=   rO   rP   r:   r$   )r_   r`   rh   r'   r:   r;   )rh   r'   r   r   r:   r;   )r   r   r:   r   )r:   r   )r:   r   )r:   r   )"__name__
__module____qualname____doc__DXFTYPEdictr5   __annotations__r|   r   MIN_DXF_VERSION_FOR_EXPORT
SHOW_IMAGESHOW_IMAGE_WHEN_NOT_ALIGNEDr   USE_TRANSPARENCYr?   r"   rK   rM   rV   rY   rz   r~   propertyr\   setterr   rN   r   r   r   r   r   __classcell__rC   s   @rD   r2   r2   0   s        G9=????N!(J"#- - - - - - 5A : : : : :# # # # # #
 8<      R R R R@ @ @ @ @ @8/ / / / # # X# ) ) ) )' ' ' '$
+ 
+ 
+ 
+         $   2         rE   r2   AcDbRasterImageZ   )r   default
   )xtype         iT  F   r   )r   i  )r   r   fixeri  2   e   i  i  ih  G   r7   [   i"  )r   r   r   r   )rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   c                  >    e Zd ZdZdZ eeee          Z	e
Zej        ZdddZd1 fdZe	 	 	 	 d2d3 fd            Zefd4 fdZd1dZd5 fdZd Zd Zd6 fdZd7 fd#Zd8d%Zed9d'            Zej        d:d*            Zed;d,            Zd1 fd-Zd< fd0Z  xZ!S )=r+   r3   IMAGE0r   )layerrq   r:   r;   c                r    t                                                       g | _        d | _        d | _        d S r=   )r>   r?   r@   
_image_def_image_def_reactorrA   s    rD   r?   zImage.__init__G  s6    *,.2=ArE   NclsType[Image]handleOptional[str]owner
dxfattribsOptional[dict]docOptional[Drawing]c           	        |pi }|                     dd           }d}|r|j        r|j        j        }|                    d|           t          dt                                          ||||                    }||_        |S )N	image_defr   r   ro   r+   )	popr   r]   ro   
setdefaultr   r>   newr   )	r   r   r   r   r   r   ro   imagerC   s	           rD   r   z	Image.newM  s      %2
NN;55	
 	2+ 	2"1JlJ777Weggkk&%SIIJJ#rE   rF   r   c                    t          |t                    sJ t                                          ||           |j                            d           d |_        | j        |_        d S )N)rJ   rv   )rH   r+   r>   rK   r]   discardr   r   )rB   rF   rJ   rC   s      rD   rK   zImage.copy_dataa  sg    &%(((((&>>> 	
5666$(! OrE   c                \    | j         j        rd S | j        rd S |                                  d S r=   )r   
is_loadingr   _create_image_def_reactorr   s    rD   post_bind_hookzImage.post_bind_hookk  s>    8 	F" 	F 	&&(((((rE   r)   Optional[Callable]c                z   t                                          |           |j        }|                    | j                            dd                     | _        | j        |                                  d S |                    | j                            dd                     | _        | j        | j        S d S )Nrp   rv   )	r>   post_load_hookentitydbgetr]   r   r   r   _fix_missing_image_def_reactor)rB   r   dbrC   s      rD   r   zImage.post_load_hooku  s    s###\&&.@$!G!GHH?"LLNNN4"$&&HLL3T::#
 #
 "* 66trE   c                8   	 |                                   nY# t          $ rL}t                              dt	          |            d|           |                                  Y d }~d S d }~ww xY wt                              dt	          |                       d S )Nz9An exception occurred while executing fixing command for z, destroying entity.)exc_infoz$Created missing ImageDefReactor for )r   	Exceptionlogger	exceptionstrr   debug)rB   es     rD   r   z$Image._fix_missing_image_def_reactor  s    		**,,,, 	 	 	3t993 3 3    
 LLNNNFFFFF	 	GCIIGGHHHHHs    
A-AA((A-c                    | j         j                            | j        j                  }|j        j        }|| j        _        || _        | j         | j        j         u r| j                            |           d S d S r=   )	r   objectsadd_image_def_reactorr]   r   rv   r   r   append_reactor_handle)rB   image_def_reactorreactor_handles      rD   r   zImage._create_image_def_reactor  sr     H,BB48?SS*.5,:)"38t***O11.AAAAA +*rE   registryxref.Registryc                    t                                          |           t          | j        t                    r&|                    | j        j        j                   dS dS )z5Register required resources to the resource registry.N)r>   register_resourcesrH   r   r,   
add_handler]   r   )rB   r	  rC   s     rD   r  zImage.register_resources  s[    ""8,,,dnh// 	; 2 9:::::	; 	;rE   clonemappingxref.ResourceMapperc                   t          |t                    sJ t                                          ||           | j        }t          |t
                    r|                                 }|                    d||          \  }}t          |t
                    rI||_        t          |j        t                    r*|
                    |j        j        j                   dS dS dS dS )z3Translate resources from self to the copied entity.ACAD_IMAGE_DICTN)rH   r+   r>   map_resourcesr   r,   get_image_def_namemap_acad_dict_entryr   r-   r  r]   r   )rB   r  r  source_image_defnameclone_image_defrC   s         rD   r  zImage.map_resources  s    %'''''eW--->&11 
	**,,D$+$?$?!4)9% %!D/ /844 "1e6HH #9904;    
	 
	
  rE   r   c                    | j         dS | j         j                            d          }|                                D ]\  }}|| j        u r|c S dS )zAReturns the name of the `image_def` entry in the ACAD_IMAGE_DICT.N r  )r   rootdictget_required_dictitemsr   )rB   
image_dictr  entrys       rD   r  zImage.get_image_def_name  sg    82X&889JKK
%++-- 	 	KD%'' (rrE   Optional[ImageDef]c                    | j         S )z>Returns the associated IMAGEDEF entity, see :class:`ImageDef`.)r   r   s    rD   r   zImage.image_def  s     rE   r   r,   c                    |r&|j         r|j        j        | j        _        || _        d S | j                            d           d | _        d S )Nrp   )r   r]   r   rp   r   r   )rB   r   s     rD   r   zImage.image_def  sP     	#+ 	#(1(<DH%'DOOOH/000"DOOOrE   Optional[ImageDefReactor]c                    | j         S )z/Returns the associated IMAGEDEF_REACTOR entity.)r   r   s    rD   r  zImage.image_def_reactor  s     &&rE   c                    | j         sd S | j        }|rJ|j         rC| j        }|r&|j         r|                    |j        j                   |                                 t                                                       d S r=   )r   r   r   discard_reactor_handler]   r   r   r>   )rB   reactorr   rC   s      rD   r   zImage.destroy  s    } 	F) 	w' 	I EY/ E001CDDDOOrE   auditorr#   c                J    t                                          |           d S r=   )r>   auditrB   r(  rC   s     rD   r*  zImage.audit  s    grE   r   )NNNN)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   r   r   r   r   
acdb_image
DXFATTRIBSacdb_image_group_codesr5   r  r|   DEFAULT_ATTRIBSr?   classmethodr   r"   rK   r   r   r   r   r  r  r  r   r   r   r  r   r*  r   r   s   @rD   r+   r+   =  s'       Gz;
CCJ-_N #a00OB B B B B B  !%#%)!%      [& 5A , , , , , , ,) ) ) )     &I I I	B 	B 	B; ; ; ; ; ;     ,       X # # # # ' ' ' X'
 
 
 
 
 
         rE   r+   AcDbWipeoutc                       e Zd ZdZdZ eeee          Z	ddddddddddd	
Z
eZej        ZddZd Zd fdZd fdZ xZS )r/   zDXF WIPEOUT entityWIPEOUTr      r   r   r   r   )
r   rq   rr   rs   rt   ru   ro   rp   rv   ry   r   r   r:   r;   c                ~   |                      | j                   t          j                  t	                    j        \  | j        }t          j                  |_	        t          dd          |_
        t          dd          |_        fd}|                      |                       dS )zBSet a new masking area, the area is placed in the layout xy-plane.r   c               3  ~   K   j         } D ]/}|| z
  }t          |j        z  dz
  d|j        z  z
            V  0d S )Nr   )extminr   r   r   )r8  r   r   boundsr   x_sizey_sizes      rD   r\   z/Wipeout.set_masking_area.<locals>.boundary_path  sc      ]F" C CVO13<#-sQS6\/ABBBBBBC CrE   N)update_dxf_attribsr0  r   rI   r   sizer]   r   r8  rl   rm   rn   r   )rB   r   r]   r\   r9  r:  r;  s    `  @@@rD   set_masking_areazWipeout.set_masking_area  s     45559X&&x((h&-((
61a((1fa((	C 	C 	C 	C 	C 	C 	C 	C 	}}/////rE   c                6    d| j         _        d| j         _        d S )Nr   )r]   rv   rp   r   s    rD   _reset_handleszWipeout._reset_handles  s    ,/)$'!!!rE   r(  r#   c                r    |                                   t                                          |           d S r=   )r@  r>   r*  r+  s     rD   r*  zWipeout.audit  s1    grE   rh   r'   c                r    |                                   t                                          |           dS )rj   N)r@  r>   rz   r   s     rD   rz   zWipeout.export_entity  s3    i(((((rE   r   r,  r   )r   r   r   r   r   r   r   r   acdb_wipeoutr.  r0  acdb_wipeout_group_codesr5   r  r|   r>  r@  r*  rz   r   r   s   @rD   r/   r/     s        Gz;EEJ$' O 0!&N0 0 0 0(( ( (     ) ) ) ) ) ) ) ) ) )rE   r/   AcDbRasterImageDefg{Gz?)r   r   >   r   r7      rk   filenamero   
pixel_sizeloadedresolution_unitsc                  T     e Zd ZdZdZ eee          Ze	Z
	 dd fdZd fdZ xZS )r,   zDXF IMAGEDEF entityIMAGEDEFNrO   rP   r:   r$   c                    t                                          |          }|r|                    |t          d           |S Nr   )r>   rV   rZ   acdb_image_def_group_codesrB   rO   r]   rC   s      rD   rV   zImageDef.load_dxf_attribsM  sC     gg&&y11 	O**30JANNN
rE   rh   r'   r;   c                    t                                          |           |                    t          t          j                   | j                            |g d           dS )rj   rG  N)r>   rz   r{   r   acdb_image_defr  r]   r}   r   s     rD   rz   zImageDef.export_entityU  sj    i(((_n.ABBB##  
	
 
	
 
	
 
	
 
	
rE   r=   r   r   )r   r   r   r   r   r   r   rS  r.  r   r   rV   rz   r   r   s   @rD   r,   r,   E  s        Gz>::J!( 8<      
 
 
 
 
 
 
 
 
 
rE   r,   AcDbRasterImageDefReactorJ  )rk   image_handlec                  T     e Zd ZdZdZ eee          Ze	Z
	 dd fdZd fdZ xZS )r-   zDXF IMAGEDEF_REACTOR entityIMAGEDEF_REACTORNrO   rP   r:   r$   c                    t                                          |          }|r|                    |t          d           |S rO  )r>   rV   rZ   "acdb_image_def_reactor_group_codesrQ  s      rD   rV   z ImageDefReactor.load_dxf_attribsy  D     gg&&y11 	W**30RTUVVV
rE   rh   r'   r;   c                   t                                          |           |                    t          t          j                   |                    d| j        j                   |                    d| j        j                   dS )rj   r   rU  N)	r>   rz   r{   r   acdb_image_def_reactorr  r]   rk   rV  r   s     rD   rz   zImageDefReactor.export_entity  sq    i(((_.D.IJJJR!7888S$("788888rE   r=   r   r   )r   r   r   r   r   r   r   r]  r.  r   r   rV   rz   r   r   s   @rD   r-   r-   q  s        %% Gz+ABBJ!( 8<      9 9 9 9 9 9 9 9 9 9rE   r-   AcDbRasterVariablesH   	   rk   framequalityunitsc                  T     e Zd ZdZdZ eee          Ze	Z
	 dd fdZd fdZ xZS )r.   zDXF RASTERVARIABLES entityRASTERVARIABLESNrO   rP   r:   r$   c                    t                                          |          }|r|                    |t          d           |S rO  )r>   rV   rZ   !acdb_raster_variables_group_codesrQ  s      rD   rV   z RasterVariables.load_dxf_attribs  sD     gg&&y11 	V**30QSTUUU
rE   rh   r'   r;   c                    t                                          |           |                    t          t          j                   | j                            |g d           dS )rj   ra  N)r>   rz   r{   r   acdb_raster_variablesr  r]   r}   r   s     rD   rz   zRasterVariables.export_entity  sk    i(((_.C.HIII##  	
 	
 	
 	
 	
rE   r=   r   r   )r   r   r   r   r   r   r   rj  r.  r   r   rV   rz   r   r   s   @rD   r.   r.     s        $$Gz+@AAJ!( 8<      
 
 
 
 
 
 
 
 
 
rE   r.   AcDbWipeoutVariablesrb  c                  T     e Zd ZdZdZ eee          Ze	Z
	 dd fdZd fdZ xZS )WipeoutVariableszDXF WIPEOUTVARIABLES entityWIPEOUTVARIABLESNrO   rP   r:   r$   c                    t                                          |          }|r|                    |t          d           |S rO  )r>   rV   rZ   "acdb_wipeout_variables_group_codesrQ  s      rD   rV   z!WipeoutVariables.load_dxf_attribs  r[  rE   rh   r'   r;   c                    t                                          |           |                    t          t          j                   | j                            |d           dS )rj   rb  N)r>   rz   r{   r   acdb_wipeout_variablesr  r]   r}   r   s     rD   rz   zWipeoutVariables.export_entity  sS    i(((_.D.IJJJ##Iw77777rE   r=   r   r   )r   r   r   r   r   r   r   rr  r.  r   r   rV   rz   r   r   s   @rD   rm  rm    s        %% Gz+ABBJ!( 8<      8 8 8 8 8 8 8 8 8 8rE   rm  )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   attribsrC  rD  r/   rS  rP  r,   r]  rZ  r-   rj  rh  r.   rr  rp  rm  r   rE   rD   <module>r     s`   # " " " " " 				                   # " " " " "  ! ! ! ! ! !                @ ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ 4 4 4 4 4 4 4 4 + + + + + + + +       $ $ $ $ $ $       ######BBBBBBBBBB777777((((((&&&&&&
P
P
P		7	#	#z z z z z
 z z zz [ CCC'"EM222 72U]333 72U]333gb666#GCLL Q''' G/ 	
 
 
 g3i3As;;2)21c::	
 
 
 G3i3As;;2)21c::	
 
 
 3i3As;;2)21c::	
 
 
 %,GCLL #*')i)1a&11 	#
 #
 #
 ") W/ 
 
 
CI IL L
Z ,+J77  h h h h hI h h hX {=$$z/A*B*BCC--l;;  3) 3) 3) 3) 3)i 3) 3) 3)t  Q///GAJJgb666gbttD$?O?OPPP'#q))) $G)i))))44 	
 
 
  2 0/??  
 
 
 
 
y 
 
 
@ % Q///    &8%78N%O%O " 9 9 9 9 9i 9 9 9. $ Q/// / 	
 
 
 7/ 	
 
 
  3i3Aq99 	
 
 
=$ $' ' P %7$67L$M$M ! 
 
 
 
 
i 
 
 
< %
 	/ 	
 
 
	
   &8%78N%O%O " 8 8 8 8 8y 8 8 8 8 8rE   