
    Ogf                    z   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jz                  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j                         ed!       ed"d#$       ed%d ej                  e&       ed'd( ej                  d d)       ej                  d d)      &       ed*d( ej                  d d)       ej                  d d)      &       ed+d  ej                  d d)       ej                  d d)      &       ed,       ed-d	 ej                  d	d.h      e&       ed/       ed0ed ej                  e1      d2      ZF eeF      ZGe+ G d3 d4e?             ZH ed5 eIeFj                              ZK eeK      ZLe+ G d6 d7e?             ZM ed8 edd $       ed	       edej                         edej                   ed9d9      :       ed%d	$       ed'd  ej                  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j                  e&       ed-d	ej                  e&       edEd# ej                  d dF      e&      dG      ZT eeT      ZUe+ G dH dIe)             ZV edJdK ed"d ej                  e&      i      ZW eeW      ZXe+ G dL dMe)             ZYy)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ddZd fdZd dZed        Zej2                  d!d       Zd!dZddZd"dZd#dZd$dZd%dZd fdZ  xZ!S )&	ImageBaseDXF IMAGE entity	IMAGEBASEz dict[int, Union[str, list[str]]]_CLS_GROUP_CODESdummyr            c                0    t         |           g | _        y N)super__init___boundary_pathself	__class__s    Y/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/image.pyr=   zImageBase.__init__=   s     +-    c                \    t        |t              sJ t        | j                        |_        y r;   )
isinstancer2   listr>   )r@   entitycopy_strategys      rB   	copy_datazImageBase.copy_dataF   s%    &),,, $T%8%8 9rC   c                B    t         |           | j                          y r;   )r<   post_new_hookreset_boundary_pathr?   s    rB   rK   zImageBase.post_new_hookJ   s      "rC   c                &   t         |   |      }|r~|j                  d   j                  d      }| j	                  |       |j                  || j                  dd       t        | j                        dk  r|| _	        | j                          |S )Nr7   )   )codesT)recover)r<   load_dxf_attribs
subclassespop_tagsload_boundary_pathfast_load_dxfattribsr5   lenboundary_pathdxfrL   )r@   	processorrX   	path_tagsrA   s       rB   rQ   zImageBase.load_dxf_attribsN   s     g&y1!,,Q/88u8EI##I.**30E0EqRV*W4%%&*((*
rC   c                b    |D cg c]  \  }}|dk(  st        |       c}}| _        y c c}}w NrN   )r   r>   )r@   tagscodevalues       rB   rT   zImageBase.load_boundary_path[   s&    >BQ{tUdbjtE{QQs   ++c                j   t         |   |       |j                  t        | j                         t        | j                        | j                  _        | j                  j                  |g d       | j                  |       |j                  t        k\  r| j                  j                  |d       yy)(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_NAMErV   rW   rX   ro   export_dxf_attribsexport_boundary_path
dxfversionr   r@   	tagwriterrA   s     rB   rq   zImageBase.export_entity^   s    i(_d.A.AB),T-?-?)@&##	
& 	!!),7*HH''	;? +rC   c                J    | j                   D ]  }|j                  d|        y r\   )rW   write_vertex)r@   rx   vertexs      rB   ru   zImageBase.export_boundary_pathz   s'    (( 	/F""2v.	/rC   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)
        )r>   r@   s    rB   rW   zImageBase.boundary_path~   s     """rC   c                &    | j                  |       y r;   )set_boundary_path)r@   verticess     rB   rW   zImageBase.boundary_path   s    x(rC   c                   t        j                  |      }t        |      rt        |      dkD  r+|d   j                  |d         s|j	                  |d          || _        | j                  | j                  d       d| j                  _	        t        |      dk  rdnd| j                  _
        t        | j
                        | j                  _        y| j                          y)	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   rF   rV   iscloseappendr>   set_flag_stateUSE_CLIPPING_BOUNDARYrX   ri   rn   ro   rL   )r@   r   	_verticess      rB   r   zImageBase.set_boundary_path   s    
 IIh'	y>9~!)B-*?*?	!*M  1."+D : :$G !DHH36y>A3Ea1DHH+-01D1D-EDHH*$$&rC   c                   t        dd      }t        | j                  j                        |z   }||g| _        | j	                  t
        j                  d       d| j                  _        d| j                  _        d| j                  _	        y)zoReset boundary path to the default rectangle [(-0.5, -0.5),
        (ImageSizeX-0.5, ImageSizeY-0.5)].
        g      Fr   r   r   r7   N)
r   rX   rf   r>   r   r+   r   ri   rn   ro   )r@   lower_left_cornerupper_right_corners      rB   rL   zImageBase.reset_boundary_path   sw     !t,!$(("5"569JJ02DEE77uE*+')*&rC   c                `   |j                  | j                  j                        | j                  _        |j                  | j                  j                        | j                  _        |j                  | j                  j
                        | j                  _        | j                  |       | S )z<Transform IMAGE entity by transformation matrix `m` inplace.)	transformrX   rc   transform_directionrd   re   post_transformr@   ms     rB   r   zImageBase.transform   ss    ++dhhoo6001A1AB001A1ABArC   c                4   t               }|j                  dt        | j                  j                               |j                  dt        | j                  j
                               |j                  dt        | j                  j                               |S )Nr   r   r   )r   set_rowr   rX   rd   re   rc   r   s     rB   get_wcs_transformzImageBase.get_wcs_transform   sc    J			!T$((**+,			!T$((**+,			!T$((//*+rC   c                   | j                   }t        |      dk(  rG|\  }}|t        |j                  |j                        |t        |j                  |j                        g}|d   j                  |d         s|j                  |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   )rW   rV   r   xyr   r   )r@   rW   p0p1s       rB   pixel_boundary_pathzImageBase.pixel_boundary_path   s     **}""FBbddBDD!12tBDD"$$7GHMQ''b(9:  q!12rC   c                   t        | j                  j                        }t        | j                  j                        }t        | j                  j                        }||dz  |dz  z
  z  }| j                  j
                  j                  }| j                         D cg c]'  }|||j                  z  z   |||j                  z
  z  z   ) }}|S c c}w )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   rX   rd   re   rc   rf   r   r   r   )r@   uvoriginheightpr   s          rB   boundary_path_wcszImageBase.boundary_path_wcs   s     !!"!!"dhhoo&!c'AG##$$&& --/
 a!##g!v|"45
 
 	
s   ,Cc                @    | j                   sy | `t        |           y r;   )is_aliver>   r<   destroyr?   s    rB   r   zImageBase.destroy   s    }}rC   returnNonerG   r   r   r   r;   rY   zOptional[SubclassProcessor]r   r$   )r]   zIterable[DXFTag]rx   r'   r   r   )rx   r'   r   zIterable[UVec]r   r   )r   r   r   r   )r   r   )r   z
list[Vec2])r   z
list[Vec3])"__name__
__module____qualname____doc__DXFTYPEdictr5   __annotations__rs   r   MIN_DXF_VERSION_FOR_EXPORT
SHOW_IMAGESHOW_IMAGE_WHEN_NOT_ALIGNEDr   USE_TRANSPARENCYr=   r"   rI   rK   rQ   rT   rq   ru   propertyrW   setterr   rL   r   r   r   r   r   __classcell__rA   s   @rB   r2   r2   0   s    G9=6?N!(J"#- 5A :#
 8<4	R@8/ # # ) )'$
+$2 rC   r2   AcDbRasterImageZ   )rv   default
   )xtype         iT  F   r   )r   i  )r   r   fixeri  2   e   i  i  ih  G   r7   [   i"  )rv   r   r   r   )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   c                  J    e Zd ZdZdZ eeee      Z	e
Zej                  ZdddZd fdZe	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d fd       Zefd fdZdd	Zd fd
Zd Zd Zd fdZd fdZddZedd       Zej:                  dd       Zedd       Zd fdZd  fdZ  xZ!S )!r+   r3   IMAGE0r   )layerrh   c                L    t         |           g | _        d | _        d | _        y r;   )r<   r=   r>   
_image_def_image_def_reactorr?   s    rB   r=   zImage.__init__G  s%    *,.2=ArC   c           	         |xs i }|j                  dd       }d}|r"|j                  r|j                  j                  }|j	                  d|       t        dt        |   ||||            }||_        |S )N	image_defr   r   rf   r+   )	popr   rX   rf   
setdefaultr   r<   newr   )	clshandleowner
dxfattribsdocr   rf   imagerA   s	           rB   r   z	Image.newM  su      %2
NN;5	
++"11JlJ7Wegk&%SIJ#rC   c                    t        |t              sJ t        |   ||       |j                  j                  d       d |_        | j                  |_        y )N)rH   rm   )rE   r+   r<   rI   rX   discardr   r   )r@   rG   rH   rA   s      rB   rI   zImage.copy_dataa  sN    &%(((&> 	

56$(! OOrC   c                l    | j                   j                  ry | j                  ry | j                          y r;   )r   
is_loadingr   _create_image_def_reactorr}   s    rB   post_bind_hookzImage.post_bind_hookk  s,    88"" 	&&(rC   c                f   t         |   |       |j                  }|j                  | j                  j                  dd             | _        | j
                  | j                          y |j                  | j                  j                  dd             | _        | j                  | j                  S y )Nrg   rm   )	r<   post_load_hookentitydbgetrX   r   r   r   _fix_missing_image_def_reactor)r@   r   dbrA   s      rB   r   zImage.post_load_hooku  s    s#\\&&.@$!GH??"LLN"$&&HHLL3T:#
 ""* 666rC   c                    	 | j                          t        j                  dt	        |               y # t        $ r>}t        j                  dt	        |        d|       | j                          Y d }~y d }~ww xY w)Nz9An exception occurred while executing fixing command for z, destroying entity.)exc_infoz$Created missing ImageDefReactor for )r   	Exceptionlogger	exceptionstrr   debug)r@   es     rB   r   z$Image._fix_missing_image_def_reactor  sw    		**, 	;CI;GH  	Kt9+13  
 LLN	s   4 	A;4A66A;c                N   | j                   j                  j                  | j                  j                        }|j                  j                  }|| j                  _        || _        | j                   | j                  j                   u r| j                  j                  |       y y r;   )	r   objectsadd_image_def_reactorrX   r   rm   r   r   append_reactor_handle)r@   image_def_reactorreactor_handles      rB   r   zImage._create_image_def_reactor  sw     HH,,BB488??S*..55,:)"388t***OO11.A +rC   c                    t         |   |       t        | j                  t              r0|j                  | j                  j                  j                         yy)z5Register required resources to the resource registry.N)r<   register_resourcesrE   r   r,   
add_handlerX   r   )r@   registryrA   s     rB   r   zImage.register_resources  sA    "8,dnnh/ 2 2 9 9: 0rC   c                   t        |t              sJ t        |   ||       | j                  }t        |t
              r| j                         }|j                  d||      \  }}t        |t
              rR||_        t        |j                  t              r0|j                  |j                  j                  j                         yyyy)z3Translate resources from self to the copied entity.ACAD_IMAGE_DICTN)rE   r+   r<   map_resourcesr   r,   get_image_def_namemap_acad_dict_entryr   r-   r   rX   r   )r@   clonemappingsource_image_defnameclone_image_defrA   s         rB   r   zImage.map_resources  s    %'''eW->>&1**,D$+$?$?!4)9%!D/ /84"1e66H#990044;; I 5 2rC   c                    | j                   y| j                   j                  j                  d      }|j                         D ]  \  }}|| j                  u s|c S  y)zAReturns the name of the `image_def` entry in the ACAD_IMAGE_DICT. r   )r   rootdictget_required_dictitemsr   )r@   
image_dictr  entrys       rB   r   zImage.get_image_def_name  s\    88XX&&889JK
%++- 	KD%'	 rC   c                    | j                   S )z>Returns the associated IMAGEDEF entity, see :class:`ImageDef`.)r   r}   s    rB   r   zImage.image_def  s     rC   c                    |r9|j                   r-|j                  j                  | j                  _        || _        y | j                  j                  d       d | _        y )Nrg   )r   rX   r   rg   r   r   )r@   r   s     rB   r   zImage.image_def  sD    ++(1(<(<DHH%'DOHH/0"DOrC   c                    | j                   S )z/Returns the associated IMAGEDEF_REACTOR entity.)r   r}   s    rB   r   zImage.image_def_reactor  s     &&&rC   c                   | j                   sy | j                  }|r[|j                   rO| j                  }|r1|j                   r%|j                  |j                  j
                         |j                          t        |           y r;   )r   r   r   discard_reactor_handlerX   r   r   r<   )r@   reactorr   rA   s      rB   r   zImage.destroy  sc    }}))w''IY//001C1CDOOrC   c                $    t         |   |       y r;   )r<   auditr@   auditorrA   s     rB   r  zImage.audit  s    grC   r   )NNNN)r   zType[Image]r   Optional[str]r   r  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]r  r#   r   r   )"r   r   r   r   r   r   r   r   
acdb_image
DXFATTRIBSacdb_image_group_codesr5   r  rs   DEFAULT_ATTRIBSr=   classmethodr   r"   rI   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   s   @rB   r+   r+   =  s   Gz;
CJ-__N #a0OB  !%#%)!%  #	
  
 & 5A ,)&I	B;,   # # ' '
 rC   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   rh   ri   rj   rk   rl   rf   rg   rm   rp   c                p   | j                  | j                         t        j                        t	              j
                  \  | j                  }t        j                        |_	        t        dd      |_
        t        dd      |_        fd}| j                   |              y)zBSet a new masking area, the area is placed in the layout xy-plane.r   c               3     K   j                   } D ]5  }|| z
  }t        |j                  z  dz
  d|j                  z  z
         7 y w)Nr   )extminr   r   r   )r%  r{   r   boundsr   x_sizey_sizes      rB   rW   z/Wipeout.set_masking_area.<locals>.boundary_path  sQ     ]]F" CVO133<#-sQSS6\/ABBCs   AAN)update_dxf_attribsr  r   rF   r   sizerX   r   r%  rc   rd   re   r   )r@   r   rX   rW   r&  r'  r(  s    `  @@@rB   set_masking_areazWipeout.set_masking_area  s     4 4599X&x(hh&--(
61a(1fa(	C 	}/rC   c                H    d| j                   _        d| j                   _        y )Nr   )rX   rm   rg   r}   s    rB   _reset_handleszWipeout._reset_handles  s    ,/)$'!rC   c                D    | j                          t        | 	  |       y r;   )r-  r<   r  r  s     rB   r  zWipeout.audit  s    grC   c                D    | j                          t        | 	  |       y)ra   N)r-  r<   rq   rw   s     rB   rq   zWipeout.export_entity  s    i(rC   r   r  r   )r   r   r   r   r   r   r   r   acdb_wipeoutr  r  acdb_wipeout_group_codesr5   r  rs   r+  r-  r  rq   r   r   s   @rB   r/   r/     sj    Gz;EJ$'O 0!&&N0(() )rC   r/   AcDbRasterImageDefg{Gz?)r   r   >   r   r7      rb   filenamerf   
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IMAGEDEFc                X    t         |   |      }|r|j                  |t        d       |S Nr   )r<   rQ   rU   acdb_image_def_group_codesr@   rY   rX   rA   s      rB   rQ   zImageDef.load_dxf_attribsM  s/     g&y1**30JAN
rC   c                    t         |   |       |j                  t        t        j
                         | j                  j                  |g d       y)ra   r4  N)r<   rq   rr   r   acdb_image_defr  rX   rt   rw   s     rB   rq   zImageDef.export_entityU  s@    i(_n.A.AB##
	
rC   r;   r   r   )r   r   r   r   r   r   r   r@  r  r   r   rQ   rq   r   r   s   @rB   r,   r,   E  sA    Gz>:J!( 8<4	
 
rC   r,   AcDbRasterImageDefReactorJ  )rb   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_REACTORc                X    t         |   |      }|r|j                  |t        d       |S r<  )r<   rQ   rU   "acdb_image_def_reactor_group_codesr>  s      rB   rQ   z ImageDefReactor.load_dxf_attribsy  0     g&y1**30RTUV
rC   c                   t         |   |       |j                  t        t        j
                         |j                  d| j                  j                         |j                  d| j                  j                         y)ra   r   rB  N)	r<   rq   rr   r   acdb_image_def_reactorr  rX   rb   rC  rw   s     rB   rq   zImageDefReactor.export_entity  s[    i(_.D.I.IJR!7!78S$(("7"78rC   r;   r   r   )r   r   r   r   r   r   r   rJ  r  r   r   rQ   rq   r   r   s   @rB   r-   r-   q  sB    % Gz+ABJ!( 8<4	9 9rC   r-   AcDbRasterVariablesH   	   rb   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RASTERVARIABLESc                X    t         |   |      }|r|j                  |t        d       |S r<  )r<   rQ   rU   !acdb_raster_variables_group_codesr>  s      rB   rQ   z RasterVariables.load_dxf_attribs  s0     g&y1**30QSTU
rC   c                    t         |   |       |j                  t        t        j
                         | j                  j                  |g d       y)ra   rN  N)r<   rq   rr   r   acdb_raster_variablesr  rX   rt   rw   s     rB   rq   zRasterVariables.export_entity  sA    i(_.C.H.HI##	
rC   r;   r   r   )r   r   r   r   r   r   r   rW  r  r   r   rQ   rq   r   r   s   @rB   r.   r.     sB    $Gz+@AJ!( 8<4	
 
rC   r.   AcDbWipeoutVariablesrO  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WIPEOUTVARIABLESc                X    t         |   |      }|r|j                  |t        d       |S r<  )r<   rQ   rU   "acdb_wipeout_variables_group_codesr>  s      rB   rQ   z!WipeoutVariables.load_dxf_attribs  rH  rC   c                    t         |   |       |j                  t        t        j
                         | j                  j                  |d       y)ra   rO  N)r<   rq   rr   r   acdb_wipeout_variablesr  rX   rt   rw   s     rB   rq   zWipeoutVariables.export_entity  s;    i(_.D.I.IJ##Iw7rC   r;   r   r   )r   r   r   r   r   r   r   r_  r  r   r   rQ   rq   r   r   s   @rB   rZ  rZ    sB    % Gz+ABJ!( 8<4	8 8rC   rZ  )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   attribsr0  r1  r/   r@  r=  r,   rJ  rG  r-   rW  rU  r.   r_  r]  rZ   rC   rB   <module>r~     sp   # 	    #  !  @ ? @ @ 4 +  $ #BB7(&
P			7	#z
 zz  C"EMM2 2U]]3 2U]]3b6#CL Q' // 	
 3i33As;2)221c:	
 3i33As;2)221c:	
 3i33As;2)221c:	
 %,CL #*)i))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) $)i)))4 	
2 0?  
y 
 
@ % Q/  &88N%O " 9i 9 9. $ Q/ // 	
 // 	
  3i33Aq9 	
=$' P %77L$M ! 
i 
 
< %
 	// 	
	
  &88N%O " 8y 8 8rC   