Ë
    £èh_?  ã                  ób  — d dl mZ d dlmZmZmZ d dlZd dlmZ	 d dl
Zd dlmZmZmZ d dlmZ ddlmZ dd	lmZmZmZmZ dd
lmZmZ ddlmZ ddlmZm Z  dgZ! G d„ de jD                  «      Z#d d„Z$d!d„Z% G d„ d«      Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/ G d„ de«      Z0d"d„Z1	 	 d#	 	 	 	 	 	 	 d$d„Z2y)%é    )Úannotations)ÚIterableÚSequenceÚno_type_checkN)ÚElementTree)ÚVec2ÚBoundingBox2dÚMatrix44)ÚCommandé   )ÚColor)ÚBackendInterfaceÚBkPath2dÚ
BkPoints2dÚ	ImageData)ÚConfigurationÚLineweightPolicy)ÚBackendProperties)ÚlayoutÚrecorderÚ
SVGBackendc                  ó°   ‡ — e Zd ZdZd
ˆ fd„Z ej                  «       ddœ	 	 	 	 	 	 	 dd„Z ej                  «       dddœ	 	 	 	 	 	 	 dd„Ze	dd	„«       Z
ˆ xZS )r   zÍThis is a native SVG rendering backend and does not require any external packages
    to render SVG images other than the core dependencies.  This backend support content
    cropping at page margins.
    c                ó0   •— t         ‰| �  «        d| _        y )NT)ÚsuperÚ__init__Ú_init_flip_y)ÚselfÚ	__class__s    €ú8lib/python3.12/site-packages/ezdxf/addons/drawing/svg.pyr   zSVGBackend.__init__   s   ø€ Ü‰ÑÔØ ˆÕó    N©ÚsettingsÚ
render_boxc               ó¬  — d}t        j                   |«      }d|_        | j                  «       }|€|j                  «       }t	        j
                  || j                  ¬«      }|j                  ||«      }|j                  dk(  s|j                  dk(  rt        j                  d«      S |j                  |||¬«      }|j                  |«       |j                  rD|j                  |¬«      \  }}	|j!                  |«      }
d|
z  }|j#                  ||
z  |	|
z  |«       d	| _        | j%                  ||«      }|j'                  |«       |j)                  «       S )
NTi@B )Úflip_yr   Úsvg)r"   Ú
top_origin)r'   gš™™™™™¹?F)ÚcopyÚoutput_coordinate_spaceÚplayerÚbboxr   ÚLayoutr   Úget_final_pageÚwidthÚheightÚETÚElementÚget_placement_matrixÚ	transformÚcrop_at_marginsÚget_margin_rectÚpage_output_scale_factorÚ	crop_rectÚmake_backendÚreplayÚget_xml_root_element)r   Úpager"   r#   r'   r*   Úoutput_layoutÚmÚp1Úp2Úoutput_scaleÚmax_sagittaÚbackends                r   r:   zSVGBackend.get_xml_root_element!   sE  € ð ˆ
Ü—9‘9˜XÓ&ˆð ,5ˆÔ(ð —‘“ˆØÐØŸ™›ˆJô Ÿ™ j¸×9JÑ9JÔKˆØ×+Ñ+¨D°(Ó;ˆØ�:‰:˜Š?˜dŸk™k¨QÒ.Ü—:‘:˜eÓ$Ð$à×.Ñ.Ø˜8°
ð /ó 
ˆð 	×Ñ˜ÔØ×#Ò#Ø×)Ñ)°ZÐ)Ó@‰FˆB�à#×<Ñ<¸TÓBˆLØ Ñ,ˆKà×Ñ˜R ,Ñ.°°\Ñ0AÀ;ÔOà!ˆÔØ×#Ñ# D¨(Ó3ˆØ�‰�gÔØ×+Ñ+Ó-Ð-r    T)r"   r#   Úxml_declarationc               óZ   — | j                  |||¬«      }t        j                  |d|¬«      S )aÊ  Returns the XML data as unicode string.

        Args:
            page: page definition, see :class:`~ezdxf.addons.drawing.layout.Page`
            settings: layout settings, see :class:`~ezdxf.addons.drawing.layout.Settings`
            render_box: set explicit region to render, default is content bounding box
            xml_declaration: inserts the "<?xml version='1.0' encoding='utf-8'?>" string
                in front of the <svg> element

        r!   Úunicode)ÚencodingrC   )r:   r0   Útostring)r   r;   r"   r#   rC   Úxmls         r   Ú
get_stringzSVGBackend.get_stringL   s.   € ð$ ×'Ñ'¨°xÈJÐ'ÓWˆÜ�{‰{˜3¨ÀOÔTÐTr    c                ó   — t        | |«      S )z8Override this method to use a customized render backend.)ÚSVGRenderBackend)r;   r"   s     r   r8   zSVGBackend.make_backenda   s   € ô    hÓ/Ð/r    ©ÚreturnÚNone)r;   úlayout.Pager"   úlayout.Settingsr#   úBoundingBox2d | NonerM   ú
ET.Element)r;   rO   r"   rP   r#   rQ   rM   Ústr)r;   rO   r"   rP   rM   rK   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚSettingsr:   rI   Ústaticmethodr8   Ú__classcell__)r   s   @r   r   r      s¢   ø„ ñõ
!ð %4 F§O¡OÓ$5Ø+/ñ).àð).ð "ð	).ð
 )ð).ð 
ó).ð^ %4 F§O¡OÓ$5Ø+/ØñUàðUð "ð	Uð
 )ðUð 
óUð* ò0ó ô0r    c                óæ   — t        |«      }| j                  | j                  kD  r'|t        || j                  | j                  z  z  «      fS t        || j                  | j                  z  z  «      |fS ©N)Úroundr.   r/   )r;   r)   Úsizes      r   Úmake_view_boxr_   g   sa   € ÜÐ(Ó)€DØ‡z�z�D—K‘KÒØ”U˜4 4§;¡;°·±Ñ#;Ñ<Ó=Ð=Ð=Ü�˜Ÿ™ d§k¡kÑ1Ñ2Ó3°TÐ9Ð9r    c                óN   — t        || j                  z  || j                  z  «      S r\   )Úminr.   r/   )r;   r)   s     r   Úscale_page_to_view_boxrb   n   s'   € äØ $§*¡*Ñ,Ø $§+¡+Ñ-óð r    c                  óH   — e Zd Zdd„Zddddddœ	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zy)ÚStylesc                ó>   — || _         t        «       | _        d| _        y )Nr   )Ú_xmlÚdictÚ_class_namesÚ_counter)r   rH   s     r   r   zStyles.__init__w   s   € ØˆŒ	Ü,0«FˆÔØˆ�r    Únoneç      ð?)ÚstrokeÚstroke_widthÚstroke_opacityÚfillÚfill_opacityc               ó  — d|› d|› d|d›d|› d|d›d�}t        |«      }	 | j                  |   S # t        $ r Y nw xY wd| j                  d	›�}| xj                  d
z  c_        | j	                  ||«       || j                  |<   |S )Nz	{stroke: z; stroke-width: z; stroke-opacity: z.3fz; fill: z; fill-opacity: z;}ÚCÚXr   )Úhashrh   ÚKeyErrorri   Ú
_add_class)	r   rl   rm   rn   ro   rp   ÚstyleÚkeyÚnames	            r   Ú	get_classzStyles.get_class|   s¼   € ð ˜˜ð !Ø)˜Nð +Ø-¨cÐ2ð 3Ø�Fð Ø)¨#Ð.¨cð	3ð 	ô �5‹kˆð	Ø×$Ñ$ SÑ)Ð)øÜò 	Ùð	úà�4—=‘= Ð#Ð$ˆØ�Š˜Ñ�Ø�‰˜˜eÔ$Ø!%ˆ×Ñ˜#ÑØˆs   ¡0 °	<»<c                ó~   — t        j                  d«      }d|› d|› �|_        | j                  j	                  |«       y )Nrw   Ú.Ú )r0   r1   Útextrf   Úappend)r   ry   Ú	style_strrw   s       r   rv   zStyles._add_class—   s6   € Ü—
‘
˜7Ó#ˆØ˜˜˜a 	˜{Ð+ˆŒ
Ø�	‰	×Ñ˜Õr    N)rH   rR   rM   rN   )rl   r   rm   z	int | strrn   Úfloatro   r   rp   r�   rM   rS   )r€   rS   rM   rN   )rT   rU   rV   r   rz   rv   © r    r   rd   rd   v   s^   „ óð Ø"(Ø #ØØ!ñð ðð  ð	ð
 ðð ðð ðð 
óô6 r    rd   zM {0.x:.0f} {0.y:.0f}zm {0.x:.0f} {0.y:.0f}zL {0.x:.0f} {0.y:.0f}zl {0.x:.0f} {0.y:.0f}z)Q {0.x:.0f} {0.y:.0f} {1.x:.0f} {1.y:.0f}z)q {0.x:.0f} {0.y:.0f} {1.x:.0f} {1.y:.0f}z=C {0.x:.0f} {0.y:.0f} {1.x:.0f} {1.y:.0f} {2.x:.0f} {2.y:.0f}z=c {0.x:.0f} {0.y:.0f} {1.x:.0f} {1.y:.0f} {2.x:.0f} {2.y:.0f}z{0.x:.0f} {0.y:.0f}c                  ó  — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zd d
„Z	 	 	 	 	 	 d!d„Zd"d„Z	 	 	 	 	 	 d#d„Z	 	 	 	 	 	 d$d„Zd%d„Zed&d'd„«       Zed(d„«       Zeed&d)d„«       «       Zd*d„Zd+d„Zd+d„Zd+d„Zd+d„Zy),rK   aN  Creates the SVG output.

    This backend requires some preliminary work, record the frontend output via the
    Recorder backend to accomplish the following requirements:

    - Scale the content in y-axis by -1 to invert the y-axis (SVG).
    - Move content in the first quadrant of the coordinate system.
    - The viewBox is defined by the lower left corner in the origin (0, 0) and
      the upper right corner at (view_box_width, view_box_height)
    - The output coordinates are integer values, scale the content appropriately.
    - Replay the recorded output on this backend.

    c                ó  — || _         t        «       | _        t        ||j                  «      \  }}||j
                  z  | _        d| _        d| _        t        j                  | _        t        |j                  |j                  z  «      | _        t        | j                  |j                  z  «      | _        t        | j                  |j                  z  «      | _        t!        j"                  dd|j
                  d›d�|j$                  d›d�d|› d|› �¬	«      | _        t)        t!        j*                  | j&                  d
«      «      | _        t!        j*                  | j&                  ddddt/        |«      t/        |«      ¬«      | _        t!        j*                  | j&                  d«      | _        | j2                  j5                  dd«       | j2                  j5                  dd«       | j2                  j5                  dd«       y )Nçš™™™™™©?rk   r&   zhttp://www.w3.org/2000/svgÚgÚmmz0 0 r}   )Úxmlnsr.   r/   ÚviewBoxÚdefsÚrectÚwhiteÚ0)ro   ÚxÚyr.   r/   zstroke-linecapr]   zstroke-linejoinz	fill-ruleÚevenodd)r"   rg   Ú_stroke_width_cacher_   r)   Úwidth_in_mmÚstroke_width_scaleÚmin_lineweightÚlineweight_scalingr   ÚABSOLUTEÚlineweight_policyÚintÚmax_stroke_widthÚmin_stroke_widthÚfixed_stroke_widthr0   r1   Úheight_in_mmÚrootrd   Ú
SubElementÚstylesrS   Ú
backgroundÚentitiesÚset)r   r;   r"   Úview_box_widthÚview_box_heights        r   r   zSVGRenderBackend.__init__·   s¿  € Ø ˆŒÜ59³VˆÔ Ü*7Ø�(×2Ñ2ó+
Ñ'ˆ˜ð
 *8¸$×:JÑ:JÑ)JˆÔØ"ˆÔØ"%ˆÔÜ!1×!:Ñ!:ˆÔô &)Ø×,Ñ,¨x×/HÑ/HÑHó&
ˆÔô &)Ø×!Ñ! H×$=Ñ$=Ñ=ó&
ˆÔô
 (+Ø×!Ñ! H×$?Ñ$?Ñ?ó(
ˆÔô —J‘JØØ.Ø×%Ñ% aÐ(¨Ð+Ø×'Ñ'¨Ð*¨"Ð-Ø˜>Ð*¨!¨OÐ+<Ð=ô
ˆŒ	ô œRŸ]™]¨4¯9©9°fÓ=Ó>ˆŒÜŸ-™-Ø�I‰IØØØØÜ�nÓ%Ü�Ó'ô
ˆŒô Ÿ™ d§i¡i°Ó5ˆŒØ�‰×ÑÐ*¨GÔ4Ø�‰×ÑÐ+¨WÔ5Ø�‰×Ñ˜+ yÕ1r    c                ó   — | j                   S r\   )r�   ©r   s    r   r:   z%SVGRenderBackend.get_xml_root_elementë   s   € Ø�y‰yÐr    c                ó   — |sy t        j                  | j                  d|¬«      }| j                  |j                  «      }| j                  |j                  «      \  }}| j                  j                  |||¬«      }|j                  d|«       y )NÚpath©Úd)rl   rm   rn   Úclass)
r0   rž   r¡   Úresolve_stroke_widthÚ
lineweightÚresolve_colorÚcolorrŸ   rz   r¢   )r   rª   Ú
propertiesÚelementrm   Ústroke_colorrn   Úclss           r   Úadd_strokeszSVGRenderBackend.add_strokesî   s�   € ÙØÜ—-‘- §¡¨v¸Ô;ˆØ×0Ñ0°×1FÑ1FÓGˆØ'+×'9Ñ'9¸*×:JÑ:JÓ'KÑ$ˆ�nØ�k‰k×#Ñ#ØØ%Ø)ð $ó 
ˆð
 	�‰�G˜SÕ!r    c                óè   — |sy t        j                  | j                  d|¬«      }| j                  |j                  «      \  }}| j
                  j                  ||¬«      }|j                  d|«       y )Nr¨   r©   )ro   rp   r«   )r0   rž   r¡   r®   r¯   rŸ   rz   r¢   )r   rª   r°   r±   Ú
fill_colorrp   r³   s          r   Úadd_fillingzSVGRenderBackend.add_fillingû   s`   € ÙØÜ—-‘- §¡¨v¸Ô;ˆØ#'×#5Ñ#5°j×6FÑ6FÓ#GÑ ˆ
�LØ�k‰k×#Ñ#¨À,Ð#ÓOˆØ�‰�G˜SÕ!r    c                ó(   — |d d t        |dd «      fS )Né   é	   )Úalpha_to_opacity)r   r¯   s     r   r®   zSVGRenderBackend.resolve_color  s   € Ø�R�aˆyÔ*¨5°°1¨:Ó6Ð6Ð6r    c                óÌ  — 	 | j                   |   S # t        $ r 	 | j                  }Y nw xY w| j                  }|t        j
                  k(  rU| j                  r$t        | j                  |«      | j                  z  }n| j                  }t        || j                  z  «      }n4|t        j                  k(  r!t        || j                  | j                  «      }|| j                   |<   |S r\   )r‘   ru   r›   r—   r   r–   r•   Úmaxr”   r]   r“   ÚRELATIVEÚmap_lineweight_to_stroke_widthrš   r™   )r   r.   rm   Úpolicys       r   r¬   z%SVGRenderBackend.resolve_stroke_width  sÛ   € ð	3Ø×+Ñ+¨EÑ2Ð2øÜò 	3ØØ×2Ñ2ŠLð	3úð ×'Ñ'ˆØÔ%×.Ñ.Ò.Ø×&Ò&Ü˜D×/Ñ/°Ó7¸$×:QÑ:QÑQ‘à×+Ñ+�Ü  ¨×)@Ñ)@Ñ!@ÓA‰LØÔ'×0Ñ0Ò0Ü9Ø�t×,Ñ,¨d×.CÑ.CóˆLð +7ˆ× Ñ  Ñ'ØÐs   ‚ ‘*©*c                ó¬   — |d d }t        |dd «      }| j                  j                  d|«       | j                  j                  dt        |«      «       y )Nr¹   rº   ro   zfill-opacity)r»   r    r¢   rS   )r   r¯   Ú	color_strÚopacitys       r   Úset_backgroundzSVGRenderBackend.set_background  sI   € Ø˜"˜1�Iˆ	Ü" 5¨¨1 :Ó.ˆØ�‰×Ñ˜F IÔ.Ø�‰×Ñ˜N¬C°«LÕ9r    c                óJ   — | j                  | j                  ||g«      |«       y r\   ©r´   Úmake_polyline_str)r   Úposr°   s      r   Ú
draw_pointzSVGRenderBackend.draw_point   s!   € Ø×Ñ˜×/Ñ/°°c°
Ó;¸ZÕHr    c                óJ   — | j                  | j                  ||g«      |«       y r\   rÆ   )r   ÚstartÚendr°   s       r   Ú	draw_linezSVGRenderBackend.draw_line#  s!   € Ø×Ñ˜×/Ñ/°¸°Ó=¸zÕJr    c                óz   — t        |«      }t        |«      dk(  ry | j                  | j                  |«      |«       y )Nr   )ÚlistÚlenr´   Úmake_multi_line_str)r   Úlinesr°   s      r   Údraw_solid_linesz!SVGRenderBackend.draw_solid_lines&  s6   € ô �U“ˆÜˆu‹:˜Š?ØØ×Ñ˜×1Ñ1°%Ó8¸*ÕEr    c                óF   — | j                  | j                  |«      |«       y r\   )r´   Úmake_path_str)r   r¨   r°   s      r   Ú	draw_pathzSVGRenderBackend.draw_path.  s   € Ø×Ñ˜×+Ñ+¨DÓ1°:Õ>r    c                ó´   — g }|D ]0  }t        |«      sŒ|j                  | j                  |d¬«      «       Œ2 | j                  dj	                  |«      |«       y )NT©Úcloser}   )rÐ   r   rÕ   r·   Újoin)r   Úpathsr°   rª   r¨   s        r   Údraw_filled_pathsz"SVGRenderBackend.draw_filled_paths1  sP   € ð ˆÛˆDÜ�4�yØ—‘˜×+Ñ+¨D¸Ð+Ó=Õ>ð ð 	×Ñ˜Ÿ™ !› jÕ1r    c                óf   — | j                  | j                  |j                  «       d¬«      |«       y )NTrØ   )r·   rÇ   Úvertices)r   Úpointsr°   s      r   Údraw_filled_polygonz$SVGRenderBackend.draw_filled_polygon:  s.   € ð 	×ÑØ×"Ñ" 6§?¡?Ó#4¸DÐ"ÓAÀ:õ	
r    c                 ó   — y r\   r‚   )r   Ú
image_datar°   s      r   Ú
draw_imagezSVGRenderBackend.draw_imageA  ó   € Ør    c                ó
  — t        | «      dk  ry| d   }t        j                  |«      dg}| dd  D ]-  }||z
  }|}|j                  t        j                  |«      «       Œ/ |r|j                  d«       dj                  |«      S )Né   Ú r   Úlr   ÚZr}   )rÐ   Ú	CMD_M_ABSÚformatr   ÚCMD_CONTrÚ   )rß   rÙ   Úcurrentrª   ÚpointÚrelatives         r   rÇ   z"SVGRenderBackend.make_polyline_strD  s   € äˆv‹;˜Š?ØØ˜‘)ˆä!×(Ñ(¨Ó1°3Ð7ˆØ˜A˜B“ZˆEØ˜w‘ˆHØˆGØ�H‰H”X—_‘_ XÓ.Õ/ð  ñ Ø�H‰H�SŒMØ�x‰x˜‹{Ðr    c                óp  — t        | «      dkD  sJ ‚| d   \  }}t        j                  |«      t        j                  ||z
  «      g}|}| dd  D ]W  \  }}|j	                  t
        j                  ||z
  «      «       |}|j	                  t        j                  ||z
  «      «       |}ŒY dj                  |«      S )Nr   r   r}   )rÐ   rê   rë   Ú	CMD_L_RELr   Ú	CMD_M_RELrÚ   )rÒ   rË   rÌ   rª   rí   s        r   rÑ   z$SVGRenderBackend.make_multi_line_strS  s¬   € ä�5‹z˜AŠ~Ðˆ~Ø˜1‘X‰
ˆˆsÜ!×(Ñ(¨Ó/´×1AÑ1AÀ#ÈÁ+Ó1NÐOˆØˆØ  ›)‰JˆE�3Ø�H‰H”Y×%Ñ% e¨g¡oÓ6Ô7ØˆGØ�H‰H”Y×%Ñ% c¨G¡mÓ4Ô5Ø‰Gð	 $ð
 �x‰x˜‹{Ðr    c           	     ó„  — t         j                  | j                  «      g}t        | «      dk(  ry| j                  }| j	                  «       D �]N  }|j
                  }|j                  t        j                  k(  r(|j                  t        j                  ||z
  «      «       nø|j                  t        j                  k(  r(|j                  t        j                  ||z
  «      «       n³|j                  t        j                  k(  r6|j                  t        j                  |j                  |z
  ||z
  «      «       n`|j                  t        j                   k(  rC|j                  t"        j                  |j$                  |z
  |j&                  |z
  ||z
  «      «       |}�ŒQ |r|j                  d«       dj)                  |«      S )Nr   rç   ré   r}   )rê   rë   rË   rÐ   ÚcommandsrÌ   Útyper   ÚMOVE_TOr   rò   ÚLINE_TOrñ   Ú	CURVE3_TOÚ
CMD_C3_RELÚctrlÚ	CURVE4_TOÚ
CMD_C4_RELÚctrl1Úctrl2rÚ   )r¨   rÙ   rª   rí   ÚcmdrÌ   s         r   rÕ   zSVGRenderBackend.make_path_str`  sG  € ô "×(Ñ(¨¯©Ó4Ð5ˆÜˆt‹9˜Š>Øà—*‘*ˆØ—=‘=—?ˆCØ—'‘'ˆCØ�x‰xœ7Ÿ?™?Ò*Ø—‘œ×)Ñ)¨#°©-Ó8Õ9Ø—‘œWŸ_™_Ò,Ø—‘œ×)Ñ)¨#°©-Ó8Õ9Ø—‘œW×.Ñ.Ò.Ø—‘œ×*Ñ*¨3¯8©8°gÑ+=¸sÀW¹}ÓMÕNØ—‘œW×.Ñ.Ò.Ø—‘Ü×%Ñ%ØŸ	™	 GÑ+¨S¯Y©Y¸Ñ-@À#ÈÁ-óôð
 ŠGð #ñ Ø�H‰H�SŒMà�x‰x˜‹{Ðr    c                ó¦   — |j                   | _         |j                  r#|j                  dz  dz  }t        d|«      | _        |j                  | _        y )Ngffffff9@i,  r…   )r—   r”   r½   r•   )r   ÚconfigÚmin_lineweight_mms      r   Ú	configurezSVGRenderBackend.configure|  sM   € Ø!'×!9Ñ!9ˆÔØ× Ò à &× 5Ñ 5¸Ñ <¸sÑ BÐÜ"% dÐ,=Ó">ˆDÔØ"(×";Ñ";ˆÕr    c                 ó   — y r\   r‚   r¦   s    r   ÚclearzSVGRenderBackend.clear„  rä   r    c                 ó   — y r\   r‚   r¦   s    r   ÚfinalizezSVGRenderBackend.finalize‡  rä   r    c                 ó   — y r\   r‚   )r   Úentityr°   s      r   Úenter_entityzSVGRenderBackend.enter_entityŠ  rä   r    c                 ó   — y r\   r‚   )r   r	  s     r   Úexit_entityzSVGRenderBackend.exit_entity�  rä   r    N)r;   rO   r"   rP   rM   rN   )rM   rR   )rª   rS   r°   r   )r¯   r   rM   ztuple[Color, float])r.   r�   rM   r˜   )r¯   r   rM   rN   )rÈ   r   r°   r   rM   rN   )rË   r   rÌ   r   r°   r   rM   rN   )rÒ   zIterable[tuple[Vec2, Vec2]]r°   r   rM   rN   )r¨   r   r°   r   rM   rN   )rÛ   zIterable[BkPath2d]r°   r   rM   rN   )rß   r   r°   r   rM   rN   )râ   r   r°   r   rM   rN   )F)rß   zSequence[Vec2]rM   rS   )rÒ   zSequence[tuple[Vec2, Vec2]]rM   rS   )r¨   r   rM   rS   )r  r   rM   rN   rL   )rT   rU   rV   rW   r   r:   r´   r·   r®   r¬   rÄ   rÉ   rÍ   rÓ   rÖ   rÜ   rà   rã   rY   rÇ   rÑ   r   rÕ   r  r  r  r
  r  r‚   r    r   rK   rK   ¨   sù   „ ñó22óhó"ó"ó7óó(:óIóKðFØ0ðFØ>OðFà	óFó?ð2Ø'ð2Ø5Fð2à	ó2ð
Ø ð
Ø.?ð
à	ó
óð óó ðð ò
ó ð
ð Øóó ó ðó4<óóóôr    rK   c                óX   — t        | «      r	 t        | d«      dz  S y# t        $ r Y yw xY w)Né   éÿ   rk   )rÐ   r˜   Ú
ValueError)Úalphas    r   r»   r»   ‘  s=   € ô ˆ5„zð	Ü�u˜b“> CÑ'Ð'ð øô ò 	ØØð	ús   � �	)¨)c                ól   — t        t        | |«      |«      |z
  } ||z
  ||z
  z  }|t        | |z  «      z   S )zDMap the DXF lineweight in mm to stroke-width in viewBox coordinates.)r½   ra   r]   )r­   rš   r™   r”   Úmax_lineweightÚfactors         r   r¿   r¿   œ  sF   € ô ”S˜ ^Ó4°nÓEÈÑV€JØÐ!1Ñ1°nÀ~Ñ6UÑV€FØœe J°Ñ$7Ó8Ñ8Ð8r    )r;   rO   r)   r�   rM   ztuple[int, int])r;   rO   r)   r�   rM   r�   )r  rS   rM   r�   )r…   gáz®Gá @)r­   r�   rš   r˜   r™   r˜   rM   r˜   )3Ú
__future__r   Útypingr   r   r   r(   Ú	xml.etreer   r0   ÚnumpyÚnpÚ
ezdxf.mathr   r	   r
   Ú
ezdxf.pathr   Ú
type_hintsr   rB   r   r   r   r   r  r   r   r°   r   rç   r   r   Ú__all__ÚRecorderr   r_   rb   rd   rê   rò   Ú	CMD_L_ABSrñ   Ú
CMD_C3_ABSrù   Ú
CMD_C4_ABSrü   rì   rK   r»   r¿   r‚   r    r   Ú<module>r"     sÜ   ðõ #ß 4Ñ 4ã Ý 'Û ç 4Ñ 4Ý õ ß FÓ Fß 3Ý )ß àˆ.€ôM0�×"Ñ"ô M0ó`:ó÷$ ñ $ ðN $€	Ø#€	Ø#€	Ø#€	Ø8€
Ø8€
ØL€
ØL€
Ø €ôfÐ'ô fóRð Øð
9Øð
9àð
9ð ð
9ð 	ô
9r    