Ë
    £èhj�  ã                  óè  — U d dl mZ d dlmZ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Zd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z5 d dl6m7Z7 d dl8m9Z9m:Z: erd dl;m<Z< d dl=m>Z> d dl?m@Z@ g d¢ZAe5ZBdZCdZDdZEdZF ejŽ                  d«      ZHej’                  ZJdeKd<   d4d5d„ZL G d „ d!«      ZM G d"„ d#«      ZN G d$„ d%e
«      ZO G d&„ d'eN«      ZP eP«       ZQ G d(„ d)«      ZReeeP   gdf   ZS G d*„ d+«      ZT ejª                  d,«      ZVd6d-„ZWd7d.„ZXd8d/„ZYd9d0„ZZd:d1„Z[d;d2„Z\	 d<	 	 	 d=d3„Z]y)>é    )Úannotations)ÚTYPE_CHECKINGÚOptionalÚUnionÚcastÚSequenceÚCallableÚIterableÚ
NamedTuple)Ú	TypeAliasN)Úoptions)ÚRGB)Úacadctb)ÚConfiguration)ÚColor)ÚDXF_DEFAULT_COLORSÚint2rgb)	ÚAttribÚInsertÚFace3dÚLinetypeÚViewportÚLayerÚLayerOverridesÚ	TextstyleÚ
DXFGraphic)ÚCONTINUOUS_PATTERN)Ú
DXFPolygon)ÚInsertUnitsÚMeasurement)Úfind_support_file)Úconst)Úmake_table_key)Úfonts)Úscale_patternÚHatchPatternType)ÚDrawing)ÚTable)ÚLayout)Ú
PropertiesÚBackendPropertiesÚLayerPropertiesÚLayoutPropertiesÚRenderContextÚ	layer_keyÚis_valid_colorÚ
rgb_to_hexÚ
hex_to_rgbÚMODEL_SPACE_BG_COLORÚPAPER_SPACE_BG_COLORÚVIEWPORT_COLORÚOLE2FRAME_COLORÚset_color_alphaÚFillingz#212830ú#ffffffz#aaaaaaz#89adbaÚezdxfr   ÚCTBc                óF   — t        j                  | «      j                  |k  S ©N)r   Úfrom_hexÚ	luminance)ÚcolorÚdarks     ú?lib/python3.12/site-packages/ezdxf/addons/drawing/properties.pyÚis_dark_colorrC   P   s   € Ü�<‰<˜Ó×(Ñ(¨DÑ0Ð0ó    c                  ó    — e Zd ZdZdZdZdd„Zy)r8   r   é   é   c                ó�   — t         j                  | _        d| _        d| _        d | _        d | _        d| _        d| _        g | _	        y )NÚSOLIDç        ç      ð?)
r8   rI   ÚtypeÚnameÚangleÚgradient_color1Úgradient_color2Úgradient_centeredÚpattern_scaleÚpattern©Úselfs    rB   Ú__init__zFilling.__init__Y   sB   € ä—M‘MˆŒ	à ˆŒ	àˆŒ
Ø04ˆÔØ04ˆÔØ(+ˆÔØ$'ˆÔØ)+ˆ�rD   N©ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__rI   ÚPATTERNÚGRADIENTrV   © rD   rB   r8   r8   T   s   „ Ø€EØ€GØ€Hô,rD   r8   c                  óB   — e Zd ZdZdd„Zd„ Zedd„«       Zed	d„«       Zy)
r*   zãAn implementation agnostic representation of DXF entity properties like
    color and linetype. These properties represent the actual values after
    resolving all DXF specific rules like "by layer", "by block" and so on.
    c                óÂ   — d| _         d| _        d| _        t        | _        d| _        d| _        d| _        d| _        d | _	        d | _
        t        j                  | _        y )Nr9   é   Ú
CONTINUOUSrK   ç      Ð?TÚ0)r@   ÚpenÚlinetype_namer   Úlinetype_patternÚlinetype_scaleÚ
lineweightÚ
is_visibleÚlayerÚfontÚfillingr   ÚUnitlessÚunitsrT   s    rB   rV   zProperties.__init__m   se   € ð $ˆŒ
ØˆŒð #/ˆÔô  2DˆÔØ%(ˆÔà!%ˆŒØˆŒð ˆŒ
ð
 /3ˆŒ	ð +/ˆŒä ×)Ñ)ˆ�
rD   c           	     óp   — d| j                   › d| j                  › d| j                  › d| j                  › d�	S )NÚ(z, z, "z"))r@   rg   rj   rl   rT   s    rB   Ú__str__zProperties.__str__ž   s@   € à�—
‘
ˆ|˜2˜d×0Ñ0Ð1°°D·O±OÐ3Dð EØ—
‘
ˆ|˜2ðð	
rD   c                ó@   — t        j                  | j                  «      S ©zReturns color as RGB tuple.©r   r>   r@   rT   s    rB   ÚrgbzProperties.rgb¤   ó   € ô �|‰|˜DŸJ™JÓ'Ð'rD   c                ó.   — | j                   j                  S ©zEReturns perceived color luminance in range [0, 1] from dark to light.©rw   r?   rT   s    rB   r?   zProperties.luminance©   ó   € ð �x‰x×!Ñ!Ð!rD   NrW   ©rX   r   ©rX   Úfloat)	rZ   r[   r\   Ú__doc__rV   rs   Úpropertyrw   r?   r_   rD   rB   r*   r*   g   s:   „ ñó
/*òb
ð ò(ó ð(ð ò"ó ñ"rD   r*   c                  ó|   — e Zd ZU dZdZded<   dZded<   dZd	ed
<   dZded<   dZ	d	ed<   e
dd„«       Ze
dd„«       Zy)r+   zBThe backend receives a condensed version of the entity properties.ú#000000r   r@   rd   r   rj   re   Ústrrl   rF   Úintrf   Ú Úhandlec                ó@   — t        j                  | j                  «      S ru   rv   rT   s    rB   rw   zBackendProperties.rgb¸   rx   rD   c                ó.   — | j                   j                  S rz   r{   rT   s    rB   r?   zBackendProperties.luminance½   r|   rD   Nr}   r~   )rZ   r[   r\   r€   r@   Ú__annotations__rj   rl   rf   r‡   r�   rw   r?   r_   rD   rB   r+   r+   ¯   s\   … ÙLà€Eˆ5ÓØ€J�ÓØ€Eˆ3ÓØ€CˆƒLØ€FˆCÓàò(ó ð(ð ò"ó ñ"rD   r+   c                  ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )r,   zšModified attribute meaning:

    is_visible: Whether entities belonging to this layer should be drawn
    layer: Stores real layer name (mixed case)

    c                ó0   •— t         ‰| �  «        d| _        y ©NF)ÚsuperrV   Úhas_aci_color_7)rU   Ú	__class__s    €rB   rV   zLayerProperties.__init__Ë   s   ø€ Ü‰ÑÔØ$ˆÕrD   c                ó6   — | j                   r|S | j                  S )zyReturns the layer color or if layer color is ACI color 7 the
        given layout default foreground color `fg`.
        )r�   r@   )rU   Úfgs     rB   Úget_entity_color_from_layerz+LayerProperties.get_entity_color_from_layerÏ   s   € ð ×ÒØˆIà—:‘:ÐrD   )r’   r   rX   r   )rZ   r[   r\   r€   rV   r“   Ú__classcell__)r�   s   @rB   r,   r,   Ã   s   ø„ ñô%÷rD   r,   c                  ó¼   — e Zd Zdej                  df	 	 	 	 	 	 	 d	d„Zed
d„«       Zed
d„«       Zedd„«       Z	e
ej                  fdd„«       Ze
ddd„«       Zddd„Zy)r-   Nc                ó‚   — || _         || _        d| _        d| _        d| _        | j                  ||«       |�|| _        yy)zs
        Args:
            name: tab/display name
            units: enum :class:`ezdxf.enums.InsertUnits`
        r†   FN)rM   rp   Ú_background_colorÚ_default_colorÚ_has_dark_backgroundÚ
set_colors)rU   rM   Úbackground_colorÚforeground_colorrp   Údark_backgrounds         rB   rV   zLayoutProperties.__init__ß   sM   € ð ˆŒ	Ø"'ˆŒ
à!#ˆÔØ ˆÔØ$)ˆÔ!Ø�‰Ð(Ð*:Ô;àÐ&Ø(7ˆDÕ%ð 'rD   c                ó   — | j                   S )z,Returns the default layout background color.)r—   rT   s    rB   r›   z!LayoutProperties.background_color÷   s   € ð ×%Ñ%Ð%rD   c                ó   — | j                   S )z,Returns the default layout foreground color.)r˜   rT   s    rB   Údefault_colorzLayoutProperties.default_colorü   s   € ð ×"Ñ"Ð"rD   c                ó   — | j                   S )z:Returns ``True`` if the actual background-color is "dark".)r™   rT   s    rB   Úhas_dark_backgroundz$LayoutProperties.has_dark_background  s   € ð ×(Ñ(Ð(rD   c                ó&   — t        dt        | ¬«      S )NÚModel©rp   )r-   r3   r¥   s    rB   Ú
modelspacezLayoutProperties.modelspace  s   € äØÜ Øô
ð 	
rD   c                ó†   — | j                   dk(  rt        }nt        }|€| j                  }t	        | j                   ||¬«      S )z Setup default layout properties.r¤   r¥   )rM   r3   r4   rp   r-   )Úlayoutrp   Úbgs      rB   Úfrom_layoutzLayoutProperties.from_layout  s;   € ð �;‰;˜'Ò!Ü%‰Bä%ˆBØˆ=Ø—L‘LˆEÜ §¡¨R°uÔ=Ð=rD   c                óú   — t        |«      st        d|› �«      ‚|| _        t        |«      dk(  r|dd }t	        |«      | _        |�!t        |«      st        d|› �«      ‚|| _        y| j
                  rdnd| _        y)zƒSetup default layout colors.

        Required color format "#RRGGBB" or including alpha transparency
        "#RRGGBBAA".
        zInvalid background color: é	   Nrb   zInvalid foreground color: r9   rƒ   )r0   Ú
ValueErrorr—   ÚlenrC   r™   r˜   )rU   r©   r’   s      rB   rš   zLayoutProperties.set_colors  s„   € ô ˜bÔ!ÜÐ9¸"¸Ð>Ó?Ð?Ø!#ˆÔÜˆr‹7�aŠ<Ø�B�Q�ˆBÜ$1°"Ó$5ˆÔ!Øˆ>Ü! "Ô%Ü Ð#=¸b¸TÐ!BÓCÐCØ"$ˆDÕà/3×/HÒ/H¡)ÈiˆDÕrD   )rM   r„   r›   r   rœ   úOptional[Color]r�   zOptional[bool])rX   r   ©rX   Úbool)rX   r-   r=   )r¨   r)   rp   úOptional[int]rX   r-   )r©   r   r’   r¯   rX   rY   )rZ   r[   r\   r   ro   rV   r�   r›   r    r¢   Ústaticmethodr¦   rª   rš   r_   rD   rB   r-   r-   Ü   s±   „ ð -1Ø×"Ñ"Ø*.ð8àð8ð  ð8ð *ð	8ð (ó8ð0 ò&ó ð&ð ò#ó ð#ð ò)ó ð)ð Ø$×-Ñ-ó 
ó ð
ð ó>ó ð>õXrD   r-   c                  óÔ  — e Zd ZdZ	 d*dddœ	 	 	 	 	 d+d„Zd*d,d„Zd-d„Zd.d/d	„Zd
„ Zd0d„Z	d1d„Z
d2d„Zd3d„Ze	 	 	 	 	 	 	 	 d4d„«       Zd5d„Zd6d„Zd7d„Zd8d„Zd9d„Zed:d„«       Zed;d„«       Zd<d„Zd=d„Zd>d„Zd?d„Zd@d„Zddœ	 	 	 	 	 dAd„ZdBd„Zddœ	 	 	 	 	 dCd„Zddœ	 	 	 	 	 dDd „Z	 	 	 	 	 	 dEd!„Z dFd"„Z!	 	 	 	 	 	 dGd#„Z"dHd$„Z#ddœ	 	 	 	 	 dId%„Z$ddœ	 	 	 	 	 dJd&„Z%d'„ Z&dKd(„Z'dLd)„Z(y)Mr.   a'  The render context for the given DXF document. The :class:`RenderContext`
    resolves the properties of DXF entities from the context they reside in to actual
    values like RGB colors, transparency, linewidth and so on.

    A given `ctb` file (plot style file) overrides the default properties for all
    layouts, which means the plot style table stored in the layout is always ignored.

    Args:
        doc: DXF document
        ctb: path to a plot style table or a :class:`~ezdxf.addons.acadctb.ColorDependentPlotStyles`
            instance
        export_mode: Whether to render the document as it would look when
            exported (plotted) by a CAD application to a file such as pdf,
            or whether to render the document as it would appear inside a
            CAD application.
    Nr†   F)ÚctbÚexport_modec               óœ  — g | _         t        «       | _        d | _        || _        || _        t        «       | _        t        «       | _        t        j                  | _
        d| _        t        j                  | _        d| _        d| _        d | _        t        «       | _        t&        j)                  «       | _        | j-                  | j
                  «      | _        t1        j2                  ddd«      | _        d | _        |�rì| j9                  |j)                  «       «       t;        |j<                  «      | _        |j>                  j3                  dd«      | _        |j>                  j3                  dd«      | _        |j>                  j3                  dd«      | _        |j@                  �x|j@                  }tC        |tD        «      r*|jG                  d	tH        jJ                  jL                  «      }tO        jP                  |«      jR                  jU                  «       | _        | jW                  |«       	 t        |j>                  j3                  d
d«      «      | _
        	 t        |j>                  j3                  dd«      «      | _        | j                  t        j                  k(  rH| j                  t        jZ                  k(  rt        j\                  | _
        nt        j^                  | _
        | j                  | j*                  _
        y # tX        $ r t        j                  | _
        Y ŒÌw xY w# tX        $ r t        j                  | _        Y ŒÅw xY w)NrK   r   zdrawing-addonÚshx_resolve_orderÚtslz$LTSCALEz$PDSIZEz$PDMODEÚ\z	$INSUNITSz$MEASUREMENT)0Ú_saved_statesÚdictÚline_patternÚ"current_block_reference_propertiesr¶   Úoverride_ctbÚlayersr$   r   ro   rp   ri   r    ÚImperialÚmeasurementÚpdsizeÚpdmodeÚdocument_dirÚ_hatch_pattern_cacher-   r¦   Úcurrent_layout_propertiesÚ_load_plot_style_tableÚplot_stylesr   Úgetr¸   Ú_layer_properties_overrideÚset_current_layoutÚ_load_line_patternÚ	linetypesÚheaderÚfilenameÚ
isinstancer„   ÚreplaceÚosÚpathÚsepÚpathlibÚPathÚparentÚresolveÚ_setup_text_stylesr­   ÚMetricÚMetersÚInches)rU   Údocrµ   r¶   rÐ   s        rB   rV   zRenderContext.__init__B  st  € ð 02ˆÔÜ8<»ˆÔØHLˆÔ/Ø&ˆÔØˆÔÜ26³&ˆŒÜ04³ˆŒ
Ü ×)Ñ)ˆŒ
Ø%(ˆÔÜ&×/Ñ/ˆÔØˆŒØˆŒØ48ˆÔÜAEÃˆÔ!Ü)9×)DÑ)DÓ)FˆÔ&Ø×6Ñ6°t×7HÑ7HÓIˆÔä!(§¡ØÐ0°%ó"
ˆÔð IMˆÔ'âØ×#Ñ# C§N¡NÓ$4Ô5Ü 2°3·=±=Ó AˆDÔØ"%§*¡*§.¡.°¸SÓ"AˆDÔØŸ*™*Ÿ.™.¨°CÓ8ˆDŒKØŸ*™*Ÿ.™.¨°AÓ6ˆDŒKØ�|‰|Ð'ØŸ<™<�Ü˜h¬Ô,Ø'×/Ñ/°´b·g±g·k±kÓB�HÜ$+§L¡L°Ó$:×$AÑ$A×$IÑ$IÓ$K�Ô!Ø×#Ñ# CÔ(ð2Ü(¨¯©¯©¸ÀQÓ)GÓH�”
ð8Ü#.¨s¯z©z¯~©~¸nÈaÓ/PÓ#Q�Ô ð �z‰zœ[×1Ñ1Ò1Ø×#Ñ#¤{×'9Ñ'9Ò9Ü!,×!3Ñ!3�D•Jä!,×!3Ñ!3�D”JØ/3¯z©zˆ×&Ñ&Õ,øô ò 2Ü(×1Ñ1�–
ð2ûô ò 8Ü#.×#7Ñ#7�Ö ð8ús$   È0*L É*L* ÌL'Ì&L'Ì*MÍ
Mc                ó   — || _         y)z­The function `func` is called with the current layer properties as
        argument after resetting them, so the function can override the layer
        properties.
        N©rË   )rU   Úfuncs     rB   Úset_layer_properties_overridez+RenderContext.set_layer_properties_override{  s   € ð
 +/ˆÕ'rD   c                ó@   — | j                   r| j                  |«       y y r=   rà   )rU   rÀ   s     rB   Ú_override_layer_propertiesz(RenderContext._override_layer_properties‚  s   € Ø×*Ò*Ø×+Ñ+¨FÕ3ð +rD   c                ó  — t        |t        «      r'|dk(  r| j                  }|dk(  rI|j                  «       }n8t        |t        «      s(t        dt        j                  › dt        |«      › �«      ‚t        j                  |«      | _
        | j                  |«      | _        t        «       | _        |j                  rS| j!                  |j                  «      | _        | j#                  t%        | j                  j'                  «       «      «       yy)a  Set the current layout and update layout specific properties.

        Args:
            layout: modelspace or a paperspace layout
            ctb: path to a plot style table or a :class:`~ezdxf.addons.acadctb.ColorDependentPlotStyles`
                instance

        r†   z%expected argument ctb of type str or z, got N)rÑ   r„   r¿   Úget_plot_style_filenamer;   Ú	TypeErrorrZ   rL   r-   rª   rÇ   rÈ   rÉ   r¼   rÀ   rÞ   Ú_setup_layersrä   ÚlistÚvalues)rU   r¨   rµ   s      rB   rÌ   z RenderContext.set_current_layout†  sØ   € ô �cœ3ÔØ�bŠyà×'Ñ'�Ø�bŠyà×4Ñ4Ó6‘Ü˜C¤Ô%ÜØ7¼¿¹°~ÀVÌDÐQTËIÈ;ÐWóð ô *:×)EÑ)EÀfÓ)MˆÔ&Ø×6Ñ6°sÓ;ˆÔÜ“fˆŒØ�:Š:Ø×,Ñ,¨V¯Z©ZÓ8ˆDŒKØ×+Ñ+¬D°·±×1CÑ1CÓ1EÓ,FÕGð rD   c                ó,   — t        j                   | «      S )zReturns a shallow copy.)ÚcopyrT   s    rB   rì   zRenderContext.copy¢  s   € ä�y‰y˜‹ÐrD   c                óÌ   — i }|j                   €| j                   |d<   |j                  €| j                  |d<   |j                  €| j                  |d<    |j                  di |¤ŽS )zwWhere the user has not specified a value, populate configuration
        fields based on the dxf header values
        rÃ   rÄ   rÂ   r_   )rÃ   rÄ   rÂ   Úwith_changes)rU   ÚconfigÚchangess      rB   Úupdate_configurationz"RenderContext.update_configuration¦  sk   € ð ˆØ�=‰=Ð Ø $§¡ˆG�HÑØ�=‰=Ð Ø $§¡ˆG�HÑØ×ÑÐ%Ø%)×%5Ñ%5ˆG�MÑ"Ø"ˆv×"Ñ"Ñ- WÑ-Ð-rD   c                óª   — t        «       }|j                  D ]9  }| j                  t        t        |«      «      }||t        |j                  «      <   Œ; |S r=   )r¼   rÀ   Úresolve_layer_propertiesr   r   r/   rl   )rU   rÞ   rÀ   rl   Úlayer_propertiess        rB   rè   zRenderContext._setup_layers³  sL   € Ü-1«VˆØ—Z”ZˆEØ#×<Ñ<¼TÄ%ÈÓ=OÓPÐØ8HˆF”9Ð-×3Ñ3Ó4Ò5ð  ð ˆrD   c                ó\   — |j                   D ]  }| j                  t        d|«      «       Œ y )Nr   )ÚstylesÚadd_text_styler   )rU   rÞ   Ú
text_styles      rB   rÚ   z RenderContext._setup_text_stylesº  s%   € ØŸ*œ*ˆJØ×Ñ¤ [°*Ó =Õ>ñ %rD   c                óì  — |j                   }|€J ‚|j                  D �ch c]  }t        |«      ’Œ }}|j                  j                  }t        «       }|j                  D ]�  }t        t        |«      }|j                  «       }|j                  |«      r#|j                  «       }| j                  |||«       | j                  |«      }	t        |	j                  «      }
|	||
<   |
|v sŒ‡d|	_        Œ� |S c c}w r�   )rÞ   Úfrozen_layersr/   Údxfr‡   r¼   rÀ   r   r   Úget_vp_overridesÚhas_overridesrì   Ú_apply_layer_overridesró   rl   rk   )rU   ÚvprÞ   rM   Úfrozen_layer_namesÚ	vp_handlerÀ   rl   Ú	overridesrô   Úkeys              rB   Ú_setup_vp_layerszRenderContext._setup_vp_layers¾  sç   € Ø�f‰fˆØˆÐˆØ:<×:JÒ:JÓKÑ:J°$œi¨�oÐ:JÐÐKØ—F‘F—M‘Mˆ	Ü-1«VˆØ—Z”ZˆEÜœ Ó&ˆEØ×.Ñ.Ó0ˆIØ×&Ñ& yÔ1ØŸ
™
›�Ø×+Ñ+¨I°u¸iÔHØ#×<Ñ<¸UÓCÐÜÐ,×2Ñ2Ó3ˆCØ*ˆF�3‰KØÐ(Ò(Ø.3Ð Õ+ð  ð ˆùò Ls   ŸC1c                ó  — |j                  | «      |_        |j                  | «      }|�||_        |j	                  | «      |_        |j                  | «      |j                  _        |j                  | «      |j                  _
        y r=   )Ú	get_colorr@   Úget_rgbrw   Úget_transparencyÚtransparencyÚget_linetyperû   ÚlinetypeÚget_lineweightrj   )r  rl   r  Ú	rgb_colors       rB   rþ   z$RenderContext._apply_layer_overridesÑ  st   € ð  ×)Ñ)¨)Ó4ˆŒØ×%Ñ% iÓ0ˆ	ØÐ Ø!ˆEŒIØ&×7Ñ7¸	ÓBˆÔØ&×3Ñ3°IÓ>ˆ�	‰	ÔØ(×7Ñ7¸	ÓBˆ�	‰	ÕrD   c                óJ  — |j                   €| S | j                  «       }|j                  }|dk(  r|j                  j	                  d«      }|r|j                  |«      |_        |j                  |«      }||_        |j                  t        |j                  «       «      «       |S )Nr†   Úplot_style_name)rÞ   rì   r¿   rû   rÊ   rÈ   rÉ   r  rÀ   rä   ré   rê   )rU   rÿ   Úvp_ctxrµ   rÀ   s        rB   Úfrom_viewportzRenderContext.from_viewportß  s‹   € Ø�6‰6ˆ>ØˆKØ—‘“ˆØ×!Ñ!ˆØ�"Š9Ø—&‘&—*‘*Ð.Ó/ˆCÙØ!'×!>Ñ!>¸sÓ!CˆFÔØ×(Ñ(¨Ó,ˆØˆŒØ×)Ñ)¬$¨v¯}©}«Ó*?Ô@ØˆrD   c                ó\  — t        «       }|j                  j                  |_        |j                  j                  |_        | j                  |«      |_        t        |j                  «      }|dk  rt        |j                  |«      |_        |j                  d«      s|j                  j                  dk(  |_        t        |j                  j                  «      j                  «       |_        | j                   j#                  |j                  t$        «      |_        | j)                  |j                  j*                  «      |_        |j-                  «       xr |j/                  «        |_        | j2                  r2|xj0                  t5        |j                  j6                  «      z  c_        |S )zResolve layer properties.éÿ   Ú
true_colorrb   )r,   rû   rM   rl   r@   rf   Ú_true_layer_colorÚtransparency_to_alphar	  r7   Úhas_dxf_attribr�   r„   r  Úupperrg   r½   rÊ   r   rh   Ú_true_layer_lineweightrj   Úis_onÚ	is_frozenrk   r¶   r±   Úplot)rU   rl   Ú
propertiesÚalphas       rB   ró   z&RenderContext.resolve_layer_propertiesí  s?  € ä$Ó&ˆ
à Ÿ9™9Ÿ>™>ˆ
ÔØŸ™Ÿ™ˆ
ŒØ×1Ñ1°%Ó8ˆ
Ôô & e×&8Ñ&8Ó9ˆØ�3Š;Ü.¨z×/?Ñ/?ÀÓGˆJÔð
 ×#Ñ# LÔ1Ø).¯©¯©¸AÑ)=ˆJÔ&ô $' u§y¡y×'9Ñ'9Ó#:×#@Ñ#@Ó#Bˆ
Ô Ø&*×&7Ñ&7×&;Ñ&;Ø×$Ñ$Ô&8ó'
ˆ
Ô#ð !%× ;Ñ ;¸E¿I¹I×<PÑ<PÓ Qˆ
ÔØ %§¡£Ò G°e·o±oÓ6GÐ2Gˆ
ÔØ×ÒØ×!Ò!¤T¨%¯)©)¯.©.Ó%9Ñ9Õ!ØÐrD   c                óÌ  — t        |j                  j                  «      }|j                  j                  }d}|dk(  r3|j	                  «       \  }}}|r?t        j                  ||rdnd|¬«      }n"	 t        j                  || j                  ¬«      }|€t        j                  «       }|| j
                  |<   y# t
        j                  $ r t        j                  d«       Y ŒPw xY w)zSetup text style properties.Nr†   i¼  i�  )ÚfamilyÚweightÚitalic)Úorderz+no fonts available, not even fallback fonts)Ú	table_keyrû   rM   rm   Úget_extended_font_datar$   Úfind_best_matchÚresolve_font_facer¸   ÚFontNotFoundErrorÚloggerÚwarningÚFontFace)rU   rø   rM   Ú	font_fileÚ	font_facer   r"  Úbolds           rB   r÷   zRenderContext.add_text_style  sÍ   € ä˜Ÿ™×,Ñ,Ó-ˆØ—N‘N×'Ñ'ˆ	Øˆ	Ø˜Š?Ø#-×#DÑ#DÓ#FÑ ˆF�F˜DÙÜ!×1Ñ1Ø!±©#¸3Àvô‘	ðNÜ!×3Ñ3Ø T×%;Ñ%;ô�	ð ÐÜŸ™Ó(ˆIØ$ˆ�
‰
�4Òøô ×*Ñ*ò NÜ—‘ÐLÖMðNús   Á1!B8 Â8(C#Ã"C#c                ó´   — |j                   j                  d«      rt        |j                  «      S |j                  }|dk  s|dkD  rd}| j                  |«      S )Nr  rF   r  rb   )rû   Úhasattrr1   rw   r@   Ú_aci_to_true_color)rU   rl   Úacis      rB   r  zRenderContext._true_layer_color"  sQ   € Ø�9‰9×Ñ˜\Ô*Ü˜eŸi™iÓ(Ð(ð —+‘+ˆCà�QŠw˜# š)Ø�Ø×*Ñ*¨3Ó/Ð/rD   c                óH   — |dk  r| j                  «       S t        |«      dz  S )Nr   ç      Y@)Údefault_lineweightr   )rU   rj   s     rB   r  z$RenderContext._true_layer_lineweight-  s(   € Ø˜Š>Ø×*Ñ*Ó,Ð,ä˜Ó$ uÑ,Ð,rD   c                óN  — t        | t        «      r1t        | t        j                  «      } 	 t        j                  | «      }n| }t        dd«      D ]/  }||   }|j                  «       sŒt        t        |   «      |_        Œ1 |S # t        $ r t        j                  «       }Y Œ_w xY w)NrF   é   )rÑ   r„   r!   r   Úsupport_dirsr   ÚloadÚIOErrorÚnew_ctbÚrangeÚhas_object_colorr   r   r@   )rÐ   rµ   r2  Úentrys       rB   rÈ   z$RenderContext._load_plot_style_table3  s—   € ô
 �h¤Ô$Ü(¨´7×3GÑ3GÓHˆHð(Ü—l‘l 8Ó,‘ð ˆCô
 ˜˜C–=ˆCØ˜‘HˆEØ×%Ñ%Õ'ä%Ô&8¸Ñ&=Ó>�•ð	 !ð
 ˆ
øô ò (Ü—o‘oÓ'’ð(ús   ¬B ÂB$Â#B$c                ó,   — t        | j                  «      S )zfReturns ``True`` if current processing state is inside of a block
        reference (INSERT).
        )r±   r¾   rT   s    rB   Úinside_block_referencez$RenderContext.inside_block_referenceK  s   € ô
 �D×;Ñ;Ó<Ð<rD   c                ó\   — | j                   j                  | j                  «       || _        y r=   )r»   Úappendr¾   )rU   Úblock_references     rB   Ú
push_statezRenderContext.push_stateR  s$   € Ø×Ñ×!Ñ! $×"IÑ"IÔJØ2AˆÕ/rD   c                óB   — | j                   j                  «       | _        y r=   )r»   Úpopr¾   rT   s    rB   Ú	pop_statezRenderContext.pop_stateV  s   € Ø26×2DÑ2D×2HÑ2HÓ2JˆÕ/rD   c                ó`  — t        «       }| j                  |«      |_        t        |j                  «      }| j	                  «       |_        | j                  ||¬«      |_        | j                  ||¬«      |_	        | j                  ||¬«      \  |_        |_        | j                  ||¬«      |_        | j                  |«      |_        | j#                  ||¬«      |_        |j'                  d«      r| j)                  |«      |_        t-        |t.        «      r| j1                  |«      |_        |S )z#Resolve all properties of `entity`.©Úresolved_layerÚstyle)r*   Úresolve_layerrl   r/   Úresolve_unitsrp   Úresolve_colorr@   Úresolve_penrf   Úresolve_linetyperg   rh   Úresolve_lineweightrj   Úresolve_linetype_scaleri   Úresolve_visiblerk   Úis_supported_dxf_attribÚresolve_fontrm   rÑ   r   Úresolve_fillingrn   )rU   ÚentityÚprJ  s       rB   Úresolve_allzRenderContext.resolve_allY  s  € ä‹LˆØ×$Ñ$ VÓ,ˆŒÜ" 1§7¡7Ó+ˆØ×$Ñ$Ó&ˆŒØ×$Ñ$ V¸NÐ$ÓKˆŒØ× Ñ  ¸Ð ÓGˆŒØ.2×.CÑ.CØ >ð /Dó /
Ñ+ˆŒ˜Ô+ð ×.Ñ.¨vÀnÐ.ÓUˆŒØ×6Ñ6°vÓ>ˆÔØ×+Ñ+¨FÀ>Ð+ÓRˆŒØ×)Ñ)¨'Ô2Ø×&Ñ& vÓ.ˆAŒFÜ�fœjÔ)Ø×,Ñ,¨VÓ4ˆAŒIØˆrD   c                ó.   — | j                   j                  S r=   )rÇ   rp   rT   s    rB   rM  zRenderContext.resolve_unitsm  s   € Ø×-Ñ-×3Ñ3Ð3rD   c                óH   — |j                   j                  | j                  z  S r=   )rû   Últscaleri   )rU   rW  s     rB   rR  z$RenderContext.resolve_linetype_scalep  s   € Ø�z‰z×!Ñ! D×$7Ñ$7Ñ7Ð7rD   rI  c               ó:  — t        |t        «      r t        |j                  j                  «       S t        |t
        «      rt        |j                  «       «      S t        |t        «      r|j                  S |xs t        | j                  |«      «      }| j                  j                  |«      }|r|j                  syt        |t        «      r/t        |j                  j                  «       xr |j                   S t        |j                  j                  «       S )zcResolve the visibility state of `entity`. Returns ``True`` if
        `entity` is visible.
        F)rÑ   r   r±   rû   Ú	invisibler   ÚanyÚget_edges_visibilityr   rk   r/   rL  rÀ   rÊ   r   Úis_invisible)rU   rW  rJ  Úentity_layerrô   s        rB   rS  zRenderContext.resolve_visibles  sà   € ô �fœfÔ%ä˜FŸJ™J×0Ñ0Ó1Ð1Ð1Ü˜¤Ô'Ü�v×2Ñ2Ó4Ó5Ð5Ü˜¤Ô)ð ×$Ñ$Ð$à%ÒN¬°4×3EÑ3EÀfÓ3MÓ)NˆØŸ;™;Ÿ?™?¨<Ó8ÐÙÐ$4×$?Ò$?ØÜ˜¤Ô'Ü˜FŸJ™J×0Ñ0Ó1Ð1ÒM¸&×:MÑ:MÐ6MÐMä˜FŸJ™J×0Ñ0Ó1Ð1Ð1rD   c                ó€   — |j                   j                  }|dk(  r"| j                  r| j                  j                  }|S )znResolve the layer of `entity`, this is only relevant for entities
        inside of block references.
        re   )rû   rl   r@  r¾   )rU   rW  rl   s      rB   rL  zRenderContext.resolve_layer�  s8   € ð —
‘
× Ñ ˆØ�CŠ<˜D×7Ò7Ø×;Ñ;×AÑAˆEØˆrD   c               ó¤  — |j                   j                  d«      rd}n|j                   j                  }|xs t        | j	                  |«      «      }| j
                  j                  |t        «      }|t        j                  k(  r&|j                  | j                  j                  «      }ni|t        j                  k(  r:| j                  s| j                  j                  }n3| j                  j                  }n| j!                  |j"                  |«      }| j%                  |j                   j                  d«      |j                  «      }|dd |z   S )zaResolve the rgb-color of `entity` as hex color string:
        "#RRGGBB" or "#RRGGBBAA".
        r  rb   r	  N)rû   r0  r@   r/   rL  rÀ   rÊ   ÚDEFAULT_LAYER_PROPERTIESr"   ÚBYLAYERr“   rÇ   r    ÚBYBLOCKr@  r¾   Ú_true_entity_colorrw   Ú_entity_alpha_str)rU   rW  rJ  r2  rb  rô   r@   r  s           rB   rN  zRenderContext.resolve_color–  s  € ð �:‰:×Ñ˜lÔ+ð ‰Cà—*‘*×"Ñ"ˆCà%ÒN¬°4×3EÑ3EÀfÓ3MÓ)NˆØŸ;™;Ÿ?™?¨<Ô9QÓRÐà”%—-‘-ÒØ$×@Ñ@Ø×.Ñ.×<Ñ<ó‰Eð ”E—M‘MÒ!Ø×.Ò.Ø×6Ñ6×DÑD‘à×?Ñ?×EÑE‘à×+Ñ+¨F¯J©J¸Ó<ˆEØ×&Ñ&Ø�J‰J�N‰N˜>Ó*Ð,<×,BÑ,Bó
ˆð �R�aˆy˜5Ñ Ð rD   c               ó�  — |j                   j                  }|xs t        | j                  |«      «      }| j                  j                  |t        «      }|t        j                  k(  r|j                  }|S |t        j                  k(  r(| j                  sd}|S | j                  j                  }|S |t        j                  k(  rd}|S )zIResolve the aci-color of `entity` as pen number in the range of [1..255].rb   )rû   r@   r/   rL  rÀ   rÊ   re  r"   rf  rf   rg  r@  r¾   ÚBYOBJECT)rU   rW  rJ  rf   rb  rô   s         rB   rO  zRenderContext.resolve_pen¶  s¶   € ð �j‰j×ÑˆØ%ÒN¬°4×3EÑ3EÀfÓ3MÓ)NˆØŸ;™;Ÿ?™?¨<Ô9QÓRÐà”%—-‘-ÒØ"×&Ñ&ˆCð ˆ
ð ”E—M‘MÒ!Ø×.Ò.Ø�ð
 ˆ
ð ×=Ñ=×AÑA�ð ˆ
ð ”E—N‘NÒ"ØˆCØˆ
rD   c                ó    — |t         j                  k(  r&| j                  r| j                  j                  dd S y|€|dd S |dz  }|dk  r|d›S y)zEReturns the alpha value as hex string "xx" or empty string if opaque.rb   Nr†   r  Ú02x)r"   ÚTRANSPARENCY_BYBLOCKr@  r¾   r@   )rU   Úraw_transparencyÚlayer_colorr  s       rB   ri  zRenderContext._entity_alpha_strÉ  si   € ð œu×9Ñ9Ò9Ø×*Ò*Ø×>Ñ>×DÑDÀQÀRÐHÐHð àÐ%Ø˜q˜r�?Ð"à  4Ñ'ˆØ�3Š;Ø˜C�[Ð!ØrD   c                óŽ  — |t         j                  k(  rP| j                  j                  t	        |«      t
        «      }|j                  | j                  j                  «      }|S |t         j                  k(  r<| j                  s| j                  j                  }|S | j                  j                  }|S | j                  d|«      }|S )z7Resolve the `aci` color as hex color string: "#RRGGBB" N)r"   rf  rÀ   rÊ   r/   re  r“   rÇ   r    rg  r@  r¾   r@   rh  )rU   r2  rJ  rl   r@   s        rB   Úresolve_aci_colorzRenderContext.resolve_aci_colorá  s°   € à”%—-‘-ÒØ—K‘K—O‘O¤I¨nÓ$=Ô?WÓXˆEØ×5Ñ5Ø×.Ñ.×<Ñ<óˆEð ˆð ”E—M‘MÒ!Ø×.Ò.Ø×6Ñ6×DÑD�ð
 ˆð ×?Ñ?×EÑE�ð ˆð ×+Ñ+¨D°#Ó6ˆEØˆrD   c                ó°   — |�t        |«      S d|cxk  rdk  r)n | j                  j                  S | j                  |«      S | j                  j                  S )zjReturns rgb color in hex format: "#RRGGBB".

        `true_color` has higher priority than `aci`.
        r   r7  )r1   r1  rÇ   r    )rU   r  r2  s      rB   rh  z RenderContext._true_entity_colorñ  sY   € ð Ð!Ü˜jÓ)Ð)Ø�Œ]�sŒ]ð ×1Ñ1×?Ñ?Ð?ð ×*Ñ*¨3Ó/Ð/à×1Ñ1×?Ñ?Ð?rD   c                ó|   — |dk(  r| j                   j                  S t        | j                  |   j                  «      S )zeReturns the `aci` value (AutoCAD Color Index) as rgb value in
        hex format: "#RRGGBB".
        rb   )rÇ   r    r1   rÉ   r@   )rU   r2  s     rB   r1  z RenderContext._aci_to_true_colorÿ  s9   € ð �!Š8Ø×1Ñ1×?Ñ?Ð?ä˜d×.Ñ.¨sÑ3×9Ñ9Ó:Ð:rD   c               óˆ  — |j                   j                  }d|cxk  rdk  r.n n+| j                  |   j                  t        j
                  k7  r	 |j                   j                  j                  «       }|dk(  rZ|xs t        | j                  |«      «      }| j                  j                  |t        «      }|j                  }|j                  }||fS |dk(  rH| j                  r0| j                  j                  }| j                  j                  }||fS d}t         }||fS | j"                  j                  |t         «      }||fS )z¬Resolve the linetype of `entity`. Returns a tuple of the linetype
        name as upper-case string and the simplified linetype pattern as tuple
        of floats.
        r   r7  rf  rg  ÚSTANDARD)rû   r@   rÉ   r  r   ÚOBJECT_LINETYPEr  r/   rL  rÀ   rÊ   re  rg   rh   r@  r¾   r   r½   )rU   rW  rJ  r2  rM   rb  rl   rS   s           rB   rP  zRenderContext.resolve_linetype  s7  € ð �j‰j×Ñˆà�ŒM�c�M˜t×/Ñ/Øñ 
ç
‰(”g×-Ñ-ò .ð
 Ø�z‰z×"Ñ"×(Ñ(Ó*ˆØ�9ÒØ)ÒR¬Y°t×7IÑ7IÈ&Ó7QÓ-RˆLØ—K‘K—O‘O LÔ2JÓKˆEØ×&Ñ&ˆDØ×,Ñ,ˆGð �Wˆ}Ðð �YÒØ×*Ò*Ø×>Ñ>×LÑL�à×;Ñ;×LÑLð ð �Wˆ}Ðð	 "�Ü,�ð �Wˆ}Ðð ×'Ñ'×+Ñ+¨DÔ2DÓEˆGØ�Wˆ}ÐrD   c               ó8   ‡ ‡‡— ˆˆˆ fd„}t        d |«       «      S )aö  Resolve the lineweight of `entity` in mm.

        DXF stores the lineweight in mm times 100 (e.g. 0.13mm = 13).
        The smallest line weight is 0 and the biggest line weight is 211.
        The DXF/DWG format is limited to a fixed value table,
        see: :attr:`ezdxf.lldxf.const.VALID_DXF_LINEWEIGHTS`

        CAD applications draw lineweight 0mm as an undefined small value, to
        prevent backends to draw nothing for lineweight 0mm the smallest
        return value is 0.01mm.

        c                 ó¤  •— ‰j                   j                  } d| cxk  rdk  rHn nE‰j                  |    j                  t        j
                  k7  r‰j                  j                  | «      S ‰j                   j                  }|t        j                  k(  rH‰xs t        ‰j                  ‰«      «      }‰j                  j                  |t        «      j                  S |t        j                  k(  r2‰j                  r‰j                   j                  S ‰j#                  «       S |t        j$                  k(  r‰j#                  «       S t'        |«      dz  S )Nr   r7  r4  )rû   r@   rÉ   rj   r   ÚOBJECT_LINEWEIGHTr  r"   ÚLINEWEIGHT_BYLAYERr/   rL  rÀ   rÊ   re  ÚLINEWEIGHT_BYBLOCKr@  r¾   r5  ÚLINEWEIGHT_DEFAULTr   )r2  rj   rb  rW  rJ  rU   s      €€€rB   rj   z4RenderContext.resolve_lineweight.<locals>.lineweight<  s  ø€ Ø—*‘*×"Ñ"ˆCà�C”˜#• 4×#3Ñ#3Øñ$ç‰jœG×5Ñ5ò$6ð ×'Ñ'×6Ñ6°sÓ;Ð;ØŸ™×.Ñ.ˆJØœU×5Ñ5Ò5Ø-ÒV´¸4×;MÑ;MÈfÓ;UÓ1V�Ø—{‘{—‘Ø Ô":óç‘*ðð œu×7Ñ7Ò7Ø×.Ò.Ø×BÑB×MÑMÐMð  ×2Ñ2Ó4Ð4Øœu×7Ñ7Ò7Ø×.Ñ.Ó0Ð0ä˜ZÓ(¨5Ñ0Ð0rD   g{®Gáz„?)Úmax)rU   rW  rJ  rj   s   ``` rB   rQ  z RenderContext.resolve_lineweight,  s   ú€ ö 	1ô4 �4™›Ó&Ð&rD   c                 ó   — y)z/Returns the default lineweight of the document.rd   r_   rT   s    rB   r5  z RenderContext.default_lineweightX  s   € ð rD   c                ó‚   — |j                   j                  dd«      }| j                  j                  t        |«      «      S )zjResolve the text style of `entity` to a font name.
        Returns ``None`` for the default font.
        rK  ÚStandard)rû   rÊ   r$   r$  )rU   rW  rK  s      rB   rU  zRenderContext.resolve_font]  s0   € ð
 —
‘
—‘˜w¨
Ó3ˆØ�z‰z�~‰~œi¨Ó.Ó/Ð/rD   c                ó”  ‡ ‡‡‡— ˆˆfd„}ˆˆˆ fd„}t        |t        «      syt        t        |«      Št        «       Š‰j                  j
                  rn‰j                  Š‰€t        j                  ‰_        ‰S ‰j                  dk(  r1t        j                  ‰_        t        ‰j                  «      ‰_        ‰S  |«        ‰S  |«        ‰S )zBResolve filling properties (SOLID, GRADIENT, PATTERN) of `entity`.c                 óŠ  •— t         j                  ‰_        ‰j                  j	                  «       ‰_        t        ‰j                  «      ‰_        ‰j                  r,t        ‰j                  dz  «      } t        | | | f«      ‰_        nt        ‰j                  «      ‰_        ‰j                  ‰_        ‰j                  ‰_        y )Nr  )r8   r^   rL   rM   r  r1   Úcolor1rO   Ú	one_colorÚroundÚtintrP   Úcolor2ÚrotationrN   ÚcenteredrQ   )Úcrn   Úgradients    €€rB   Úsetup_gradientz5RenderContext.resolve_filling.<locals>.setup_gradienth  s�   ø€ Ü"×+Ñ+ˆGŒLØ#Ÿ=™=×.Ñ.Ó0ˆGŒLä&0°·±Ó&AˆGÔ#Ø×!Ò!Ü˜(Ÿ-™-¨#Ñ-Ó.�Ü*4°a¸¸A°YÓ*?�Õ'ä*4°X·_±_Ó*E�Ô'à$×-Ñ-ˆGŒMØ(0×(9Ñ(9ˆGÕ%rD   c                 ó†  •— t         j                  ‰_        ‰j                  j                  j                  «       ‰_        ‰j                  j                  ‰_        ‰j                  j                  ‰_	        ‰j                  j                  r‰xj                  dz  c_        ‰j                  j                  ‰j                  «      ‰_        ‰j                  ry ‰j                  } | sy t        | j                  «       d‰j                  z  ‰j                   «      ‰_        ‰j                  ‰j                  ‰j                  <   y )NrG   rK   )r8   r]   rL   rû   Úpattern_namer  rM   rR   Úpattern_anglerN   Úpattern_doublerÆ   rÊ   rS   r%   Úas_list)rS   rn   ÚpolygonrU   s    €€€rB   Úsetup_patternz4RenderContext.resolve_filling.<locals>.setup_patternv  så   ø€ Ü"Ÿ?™?ˆGŒLØ"Ÿ;™;×3Ñ3×9Ñ9Ó;ˆGŒLØ$+§K¡K×$=Ñ$=ˆGÔ!Ø#ŸK™K×5Ñ5ˆGŒMØ�{‰{×)Ò)à×%Ò%¨Ñ*Õ%à"×7Ñ7×;Ñ;¸G¿L¹LÓIˆGŒOØ�ŠØà—o‘oˆGÙØô ,Ø—‘Ó! 3¨×)>Ñ)>Ñ#>ÀÇÁÀóˆGŒOð 7>·o±oˆD×%Ñ% g§l¡lÒ3rD   Nr   )rÑ   r   r   r8   rû   Ú
solid_fillrŒ  rI   rL   Úkindr1   r„  rO   )rU   rW  r�  r”  rn   rŒ  r“  s   `   @@@rB   rV  zRenderContext.resolve_fillinge  s­   û€ õ	:ö	Fô@ ˜&¤*Ô-Øä”z 6Ó*ˆÜ“)ˆØ�;‰;×!Ò!Ø×'Ñ'ˆHØÐÜ&Ÿ}™}�”ð ˆð —=‘= AÒ%Ü#*§=¡=�G”LÜ.8¸¿¹Ó.I�GÔ+ð
 ˆñ #Ô$ð ˆñ ŒOØˆrD   r=   )rÞ   zOptional[Drawing]rµ   ú	str | CTBr¶   r±   )rá   zOptional[LayerPropsOverride])rÀ   úSequence[LayerProperties])r†   )r¨   r)   rµ   r—  )rï   r   rX   r   )rÞ   r'   rX   údict[str, LayerProperties])rÞ   r'   )rÿ   r   rX   r™  )r  r„   rl   r   r  r   rX   rY   )rÿ   r   rX   r.   )rl   r   rX   r,   )rø   r   )rl   r   rX   r   )rj   r…   rX   r   )rÐ   r—  r°   )rC  r*   rX   rY   rW   )rW  r   rX   r*   )rX   r   )rW  r   rX   r   )rW  r   rJ  úOptional[str]rX   r±   )rW  r   rX   r„   )rW  r   rJ  rš  rX   r   )rW  r   rJ  rš  rX   r…   )ro  r²   rp  r   rX   r„   )r2  r…   rJ  r„   rX   r   )r  zOptional[tuple[int, int, int]]r2  r…   rX   r   )r2  r…   rX   r   )rW  r   rJ  rš  rX   ztuple[str, Sequence[float]])rW  r   rJ  rš  rX   r   )rW  r   rX   zOptional[fonts.FontFace])rW  r   rX   zOptional[Filling]))rZ   r[   r\   r€   rV   râ   rä   rÌ   rì   rñ   rè   rÚ   r  r³   rþ   r  ró   r÷   r  r  rÈ   r�   r@  rD  rG  rY  rM  rR  rS  rL  rN  rO  ri  rr  rh  r1  rP  rQ  r5  rU  rV  r_   rD   rB   r.   r.   0  s  „ ñð& "&ð7:ð Ø!ñ7:àð7:ð ð	7:ð
 ó7:ôr/ó4ôHò8ó.óó?óð& ðCØðCàðCð "ðCð 
ò	Có ðCóóó<%ó.	0ó-ð òó ðð. ò=ó ð=óBóKóó(4ó8ð FJñ2Ø ð2Ø5Bð2à	ó2ó4ð FJñ!Ø ð!Ø5Bð!à	ó!ðB FJñØ ðØ5Bðà	óð&Ø -ðØ<Aðà	óó0ð @Ø8ð@Ø?Bð@à	ó@ó;ð FJñ"Ø ð"Ø5Bð"à	$ó"ðJ FJñ*'Ø ð*'Ø5Bð*'à	ó*'òXó
0ôBrD   r.   z#[0-9A-Fa-f]{6,8}c                ó¬   — t        | «      t        urt        dt        | «      › d�«      ‚t        | «      dv rt	        t
        j                  | «      «      S y)NzInvalid argument type: Ú.©rb   r¬   F)rL   r   rç   r®   r±   ÚCOLOR_PATTERNÚ	fullmatch)r@   s    rB   r0   r0   ­  sL   € ÜˆEƒ{œ%ÑÜÐ1´$°u³+°¸aÐ@ÓAÐAÜ
ˆ5ƒz�VÑÜ”M×+Ñ+¨EÓ2Ó3Ð3ØrD   c                ó^   — t        d„ | D «       «      s
J d| › �«       ‚| \  }}}d|d›|d›|d›�S )z'Returns color in hex format: "#RRGGBB".c              3  ó<   K  — | ]  }d |cxk  xr dk  nc –— Œ y­w)r   r  Nr_   )Ú.0Úxs     rB   Ú	<genexpr>zrgb_to_hex.<locals>.<genexpr>·  s   è ø€ Ð*¡c ˆq�AŽ}˜�}ˆ}¡cùs   ‚zinvalid RGB color: Ú#rm  )Úall)rw   ÚrÚgÚbs       rB   r1   r1   µ  sI   € äÑ*¡cÓ*Ô*ÐGÐ.AÀ#ÀÐ,GÓGÐ*Ø�G€A€qˆ!Øˆq�ˆg�a˜�W˜Q˜s˜GÐ$Ð$rD   c                ó¸   — | j                  d«      } t        | «      dk(  sJ ‚t        | dd d«      }t        | dd d«      }t        | dd d«      }t        |||«      S )z,Returns hex string color as (r, g, b) tuple.r¥  é   r   rG   é   é   )Úlstripr®   r…   r   )Ú
hex_stringr§  r¨  r©  s       rB   r2   r2   ¼  sh   € à×"Ñ" 3Ó'€JÜˆz‹?˜aÒÐÐÜˆJ�q˜ˆO˜RÓ €AÜˆJ�q˜ˆO˜RÓ €AÜˆJ�q˜ˆO˜RÓ €AÜˆq�!�Q‹<ÐrD   c                ó–   — | j                  d«      rt        | «      dv sJ d| › d�«       ‚d|cxk  rdk  sn J d|› �«       ‚| dd	 › |d
›�S )zÂReturns `color` including the new `alpha` channel in hex format:
    "#RRGGBBAA".

    Args:
        color: may be an RGB or RGBA hex color string
        alpha: the new alpha value (0-255)
    r¥  r�  zinvalid RGB color: "Ú"r   r7  zalpha out of range: Nrb   rm  )Ú
startswithr®   )r@   r  s     rB   r7   r7   Æ  sx   € ð ×Ñ˜CÔ ¤S¨£Zð 4ñ &ð 'ð 
˜e˜W AÐ&ó'ð ð �Ô˜ÔÐ;Ð3°E°7Ð;Ó;ÐØ�B�Qˆiˆ[˜˜s˜Ð$Ð$rD   c                ób   — t        t        d| «      d«      } t        t        d| z
  dz  «      «      S )NrJ   rK   r  )Úminr~  r…   r†  )Úvalues    rB   r  r  Ö  s-   € ä”�C˜“ Ó%€EÜŒu�c˜E‘k SÑ(Ó)Ó*Ð*rD   c                óº   — t        «       }| D ]K  }t        |t        «      sJ ‚|j                  j                  j                  «       }|j                  «       ||<   ŒM |S )z·Load linetypes defined in a DXF document into  as dictionary,
    key is the upper case linetype name, value is the simplified line pattern,
    see :func:`compile_line_pattern`.
    )r¼   rÑ   r   rû   rM   r  Úsimplified_line_pattern)rÎ   rS   r  rM   s       rB   rÍ   rÍ   Ü  sV   € ô
 +/«&€GÛˆÜ˜(¤HÔ-Ð-Ð-Ø�|‰|× Ñ ×&Ñ&Ó(ˆØ ×8Ñ8Ó:ˆ�Šð ð €NrD   c                óš   — |D �ch c]  }t        |«      ’Œ }}| D ])  }t        |j                  «      |v r||_        Œ"| |_        Œ+ yc c}w )zùSet layer state of `layers` to on/off.

    Args:
        layers: layer properties
        layer_names: iterable of layer names
        state: `True` turn this `layers` on and others off,
            `False` turn this `layers` off and others on
    N)r/   rl   rk   )rÀ   Úlayer_namesÚstaterM   Úunique_layer_namesrl   s         rB   Úset_layers_stater¼  é  sR   € ñ 7BÓB±k¨dœ) D�/°kÐÐBÛˆÜ�U—[‘[Ó!Ð%7Ñ7Ø$ˆEÕà#(˜yˆEÕñ	 ùò Cs   …A)gš™™™™™É?)r@   r   rA   r   rX   r±   )r@   r   rX   r±   )rw   z7Union[tuple[int, int, int], tuple[float, float, float]]rX   r   )r¯  r   rX   r   )r@   r   r  r…   rX   r   )rµ  r   rX   r…   )rÎ   r(   rX   zdict[str, Sequence[float]])T)rÀ   r˜  r¹  zIterable[str])^Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Útyping_extensionsr   rÓ   rÖ   Úrerì   Úloggingr:   r   Úezdxf.colorsr   Úezdxf.addonsr   Úezdxf.addons.drawing.configr   Úezdxf.addons.drawing.type_hintsr   r   r   Úezdxf.entitiesr   r   r   r   r   r   r   r   r   Úezdxf.entities.ltyper   Úezdxf.entities.polygonr   Úezdxf.enumsr   r    Úezdxf.filemanagementr!   Úezdxf.lldxfr"   Úezdxf.lldxf.validatorr#   r/   Úezdxf.fontsr$   Úezdxf.tools.patternr%   r&   Úezdxf.documentr'   Úezdxf.sections.tabler(   Úezdxf.layoutsr)   Ú__all__r$  r3   r4   r5   r6   Ú	getLoggerr)  ÚColorDependentPlotStylesr;   rŠ   rC   r8   r*   r+   r,   re  r-   ÚLayerPropsOverrider.   Úcompilerž  r0   r1   r2   r7   r  rÍ   r¼  r_   rD   rB   Ú<module>r×     s|  ðö #÷	÷ 	ó 	õ (Û 	Û Û 	Û Û å Ý Ý  Ý 5Ý 1ß 4÷
÷ 
õ 
õ 4Ý -ß 0Ý 2Ý Ý =Ý ß ?áÝ&Ý*Ý$ò€ð$ €	Ø Ð Ø Ð Ø€Ø€Ø	ˆ×	Ñ	˜7Ó	#€Ø×1Ñ1€€YÓ 1ô1÷,ñ ,÷&E"ñ E"ôP"˜
ô "ô(�jô ñ, +Ó,Ð ÷NXñ NXðb ˜x¨Ñ8Ð9¸4Ð?Ñ@Ð ÷w	ñ w	ðt �—
‘
Ð.Ó/€óó%óó%ó +ó
ð JNð)Ø%ð)Ø4Aô)rD   