
    Dg?                    <   d dl mZ d dlmZmZmZ d dlmZ d dlZ G d de      Z	 G d de      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dZdZdZdZdZdZd2dZd3dZdZdZ dZ!d4dZ"dZ#d Z$d!Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+d(Z,d)Z-d5d*Z.d6d+Z/d7d,Z0d8d-Z1d9d.Z2d:d/Z3g d0Z4g d1Z5y);    )annotations)Union
NamedTupleSequence)SelfNc                  v    e Zd ZU dZded<   ded<   ded<   ddZedd       ZddZedd	       Z	e
dd
       Zy)RGBzNamed tuple representing an RGB color value.

    Attributes:
        r: red channel in range [0, 255]
        g: green channel in range [0, 255]
        b: blue channel in range [0, 255]
    intrgbc                Z    | j                   dz  | j                  dz  | j                  dz  fS z=Returns the color value as a tuple of floats in range [0, 1].   r   r   r   selfs    K/var/www/html/public_html/venv/lib/python3.12/site-packages/ezdxf/colors.py	to_floatszRGB.to_floats   s'    vv|TVVc\466C<77    c           	         t        t        dt        |d   dz              d      }t        t        dt        |d   dz              d      }t        t        dt        |d   dz              d      } | |||      S )z=Returns an :class:`RGB` instance from floats in range [0, 1].r   r         )maxminround)clsrgbr   r   r   s        r   from_floatszRGB.from_floats   sr     Cs1v|,-q1Cs1v|,-q1Cs1v|,-q11a|r   c                V    d| j                   d| j                  d| j                  dS )z0Returns the color value as hex string "#RRGGBB".#02xr   r   s    r   to_hexz
RGB.to_hex"   s)    466#,tvvcl466#,77r   c                    |j                  d      }t        |dd d      }t        |dd d      }t        |dd d      } | |||      S )zReturns an :class:`RGB` instance from a hex color string, the `color` string
        is a hex string "RRGGBB" with an optional leading "#", an appended alpha
        channel is ignore.
        r!   r   r            )lstripr
   )r   color
hex_stringr   r   r   s         r   from_hexzRGB.from_hex&   sV     \\#&

1Q$
1Q$
1Q$1a|r   c                    t        |       S zeReturns perceived luminance for an RGB color in range [0.0, 1.0]
        from dark to light.
        	luminancer   s    r   r/   zRGB.luminance2       
 r   N)returntuple[float, float, float])r   r2   r1   r   r1   strr)   r4   r1   r   r1   float)__name__
__module____qualname____doc____annotations__r   classmethodr   r#   r+   propertyr/    r   r   r	   r	   	   s^     F
F
F8  8 	 	  r   r	   c                      e Zd ZU dZded<   ded<   ded<   dZded<   ddZedd	       Zdd
Z	edd       Z
edd       Zy)RGBAaF  Named tuple representing an RGBA color value. 
    The default alpha channel is 255 (opaque).

    Attributes:
        r: red channel in range [0, 255]
        g: green channel in range [0, 255]
        b: blue channel in range [0, 255]
        a: alpha channel in range [0, 255], where 0 is transparent and 255 is opaque
    r
   r   r   r   r   ac                v    | j                   dz  | j                  dz  | j                  dz  | j                  dz  fS r   r   r   r   rB   r   s    r   r   zRGBA.to_floatsJ   s1    vv|TVVc\466C<#EEr   c           	     d   t        t        dt        |d   dz              d      }t        t        dt        |d   dz              d      }t        t        dt        |d   dz              d      }	 t        t        dt        |d   dz              d      } | ||||      S # t        $ r d}Y w xY w)zReturns an :class:`RGBA` instance from floats in range [0, 1].

        The alpha channel is optional. 
        The default alpha channel is 255 (opaque).
        r   r   r   r      )r   r   r   
IndexError)r   valuesr   r   r   rB   s         r   r   zRGBA.from_floatsN   s     Cvay3/0!4Cvay3/0!4Cvay3/0!4	CU6!9s?34a8A 1aA  	A	s   1%B! !B/.B/c                p    d| j                   d| j                  d| j                  d| j                  dS )z2Returns the color value as hex string "#RRGGBBAA".r!   r"   rD   r   s    r   r#   zRGBA.to_hex^   s3    466#,tvvcl466#,tvvclCCr   c                    |j                  d      }t        |dd d      }t        |dd d      }t        |dd d      }d}t        |      dkD  rt        |dd d      } | ||||      S )	zReturns an :class:`RGBA` instance from a hex color string, the `color` string
        is a hex string "RRGGBBAA" with an optional leading "#". 
        The alpha channel is optional. 
        The default alpha channel is 255 (opaque).
        r!   r   r   r%   r&   r'   r      )r(   r
   len)r   r)   r*   r   r   r   rB   s          r   r+   zRGBA.from_hexb   s{     \\#&

1Q$
1Q$
1Q$z?QJqOR(A1aAr   c                    t        |       S r-   r.   r   s    r   r/   zRGBA.luminancer   r0   r   N)r1   z!tuple[float, float, float, float])rH   Sequence[float]r1   r   r3   r5   r6   )r8   r9   r:   r;   r<   rB   r   r=   r   r#   r+   r>   r/   r?   r   r   rA   rA   :   si     F
F
FAsLF  D    r   rA      i  r   r   rF   r&      r'      rK   	                  c                \    t        |       }|d   t        k(  rt        t        |d         fS |S )zyDecode :term:`raw-color` value as tuple(type, Union[aci, (r, g, b)]), the
    true color value is a (r, g, b) tuple.
    r   r   )decode_raw_color_intCOLOR_TYPE_RGBint2rgb)valuedatas     r   decode_raw_colorr^      s3      &DAw. wtAw///Kr   c                    | dz	  dz  }|t         k(  rt         t        fS |t        k(  rt        t        fS |t        k(  rt        | dz  fS |t
        k(  rt
        | dz  fS |t        k(  rt        dfS t        d|d      )zhDecode :term:`raw-color` value as tuple(type, int), the true color value
    is a 24-bit int value.
       r    r   zUnknown color type: 0xr"   )COLOR_TYPE_BY_BLOCKBYBLOCKCOLOR_TYPE_BY_LAYERBYLAYERCOLOR_TYPE_ACIrZ   COLOR_TYPE_WINDOW_BG
ValueError)r\   flagss     r   rY   rY      s     b[D E##"G++	%	%"G++	.	 ut|++	.	 ux///	&	&#Q&&1%=>>r   i   i   i   c                    t        | t              rK| t        k(  rt        S | t        k(  rt
        S d| cxk  rdk  rn nt        dz   dz   | z  S t        d|        t        dz  t        |       z    dz   S )zcEncode :term:`true-color` value or :ref:`ACI` color value into a :term:
    `raw color` value.
    r   rO   r`   l    zInvalid color index: )

isinstancer
   rc   BY_BLOCK_RAW_VALUEre   BY_LAYER_RAW_VALUErf   rh   rZ   rgb2intr\   s    r   encode_raw_colorrp      s     %G%%g%%__%+,z9:UBB4UG<=="b(GEN:;jHIIr   i   i  i  i  i  i  i  if  iL  i2  i  c                <    t        dt        |       z
  dz        dz  S )a  
    Returns DXF transparency value as integer in the range from 0 to 255,
    where 0 is 100% transparent and 255 is opaque.

    Args:
        value: transparency value as float in the range from 0 to 1, where 0 is
            opaque and 1 is 100% transparent.

          ?r   i   )r
   r7   ro   s    r   float2transparencyrs      s"     eEl"c)*Z77r   c                <    dt        t        |       dz        dz  z
  S )z
    Returns transparency value as float from 0 to 1, 0 for no transparency
    (opaque) and 1 for 100% transparency.

    Args:
        value: DXF integer transparency value, 0 for 100% transparency and 255
            for opaque

    rr   r   g     o@)r7   r
   ro   s    r   transparency2floatru      s"     s5zD()E111r   c                :    t        | dz	  dz  | dz	  dz  | dz        S )z/Split RGB integer `value` into (r, g, b) tuple.r%   r   rK   )r	   ro   s    r   r[   r[      s.    	"	!t r   c                r    | \  }}}t        |      dz  dz  t        |      dz  dz  z  t        |      dz  z  S )z,Combined integer value from (r, g, b) tuple.r   r%   rK   )r
   )r   r   r   r   s       r   rn   rn      s?    GAq!Vd]r!s1v}&:;s1v}MMr   c                F    | dk  rt        |       t        t        |          S )zRConvert :ref:`ACI` into (r, g, b) tuple, based on default AutoCAD
    colors.
    r   )rG   r[   DXF_DEFAULT_COLORS)indexs    r   aci2rgbr{     s'     qy%e,--r   c                    t        | d         dz  }t        | d         dz  }t        | d         dz  }t        t        j                  d|z  |z  d|z  |z  z   d|z  |z  z         d      S )	zaReturns perceived luminance for an RGB color in the range [0.0, 1.0]
    from dark to light.
    r   r   r   r   gA`"?gbX9?gv/?rF   )r7   r   mathsqrt)r)   r   r   r   s       r   r/   r/     sr     	eAh#AeAh#AeAh#A519q=519q=8519q=HI1MMr   (   r             r     ra   退  r       RR    ??   L &&L   & &  ?   ) Rg   ?O  L &/L  	& &     R R|  ? ?_  &L &9L  & &     | R  _ ?o  9L &BL  & !& r      R   ?  LL &LL  && &&     | R  _ ?o  L9 &LB  & &!     R R|  ? ?_  L& &L9  & &  ?   ) Rg   ?O  L &L/  &	 & r       RR    ??  L  &L&  &  & ?   )  gR   O? L  /L& 	&  iX    R  |R ?  _? &L  9L& &  iX    |  鑥R _  o? 9L  BL& &  XX r    饥  饥R   ? LL  LL& &&  r      |  饑R _  o? L9  i~B& &  r      R  |R ?  _? L&  i~9& &  iX ?   )  gR   O? L  i~/& &	  iX r       RR    ?? L   i~&& &   iX  ?   ) Rg   ?O L  i~&/ & 	 iX     R R|  ? ?_ L & i~&9 &  iX     | R  _ ?o L 9 L&B &  XX r      R   ? L L L&L & & r9     |  R _  o? 9 L B&L  & r9     R  |R ?  _? & L 9&L  & iX ?   )  gR   O?  L /&L 	 & iX r   ieee ifff i i ra   (   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   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   r   r   r   r   r   r   r   r   r   r   r   i& r   r   r   r   r   r   r   r   r   i& r   r   r   r   r   r   r   r   r   i!& r   r   r   r   r   r   r   r   r   i&& r  r  r  r  r  r  r  iLB& r  i&! r	  r
  r  r  r  r  r  iL9& r  i& r  r  r  r  r  r  r  iL/& r  i& r   r  r  r  r  r  r  iL&& r  i& r   r!  r"  r#  r$  r%  r&  iL&/ r'  i& r(  r)  r*  r+  r,  r-  r.  iL&9 r/  i& r0  r1  r2  r3  r4  r5  r6  r7  r8  i&! r   r:  r;  r<  r=  r>  r?  r@  rA  i&& rB  rC  rD  rE  rF  rG  rH  rI  rJ  i!& rK  rL  rM  rN  rO  rP  rQ  rR  rS  i& rT  rU  rV  rW  rX  rY  rZ  r[  r\  i& r   i--- i[[[ i i i )r\   r
   r1   ztuple[int, Union[int, RGB]])r\   r
   r1   ztuple[int, int])r\   zUnion[int, RGB]r1   r
   )r\   r7   r1   r
   )r\   r
   r1   r7   )r\   r
   r1   r	   )r   zRGB | tuple[int, int, int]r1   r
   )rz   r
   r1   r	   )r)   rN   r1   r7   )6
__future__r   typingr   r   r   typing_extensionsr   r}   r	   rA   rc   re   BYOBJECTREDYELLOWGREENCYANBLUEMAGENTABLACKWHITEGRAY
LIGHT_GRAYrd   rb   rZ   rf   rg   r^   rY   rm   rl   WINDOW_BG_RAW_VALUErp   TRANSPARENCY_BYBLOCKOPAQUETRANSPARENCY_10TRANSPARENCY_20TRANSPARENCY_30TRANSPARENCY_40TRANSPARENCY_50TRANSPARENCY_60TRANSPARENCY_70TRANSPARENCY_80TRANSPARENCY_90rs   ru   r[   rn   r{   r/   ry   DXF_DEFAULT_PAPERSPACE_COLORSr?   r   r   <module>rx     s$   # . . " .* .b=: =@ 
	
	
		
     ?& !     J" ! 	
82 N.N$A JA! r   