Ë
    £èhë  ã                  ó  — d dl mZ d dlmZmZ d dlZd dlmZ ddlm	Z	m
Z
 ddlmZ g 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!d„Z	 d"	 	 	 	 	 d#d„Z	 d$	 	 	 	 	 d%d„Z	 d&	 	 	 d'd„Zd(d„Z	 d&	 	 	 d'd„Zd)d„Zy)*é    )Úannotations)ÚIterableÚSequenceN)ÚVec3é   )Ú#tangents_cubic_bezier_interpolationÚcubic_bezier_interpolation)Úcircle_radius_3p)Úestimate_tangentsÚestimate_end_tangent_magnitudeÚcreate_t_vectorÚchord_lengthc                óÄ   — |dk(  rt        t        | «      «      S |dv rt        | «      S |dv rt        | «      S |dk(  rt	        | «      S t        dj                  |«      «      ‚)NÚuniform)ÚdistanceÚchord)ÚcentripetalÚ
sqrt_chordÚarczUnknown method: {})Úuniform_t_vectorÚlenÚdistance_t_vectorÚcentripetal_t_vectorÚarc_t_vectorÚ
ValueErrorÚformat)Ú
fit_pointsÚmethods     ú6lib/python3.12/site-packages/ezdxf/math/parametrize.pyr   r      sj   € Ø�ÒÜ¤ J£Ó0Ð0Ø	Ð(Ñ	(Ü  Ó,Ð,Ø	Ð0Ñ	0Ü# JÓ/Ð/Ø	�5ŠÜ˜JÓ'Ð'äÐ-×4Ñ4°VÓ<Ó=Ð=ó    c                ó`   — t        | dz
  «      }t        | «      D �cg c]  }||z  ‘Œ	 c}S c c}w ©Nr   )ÚfloatÚrange)ÚlengthÚnÚts      r   r   r   "   s0   € Üˆf�q‰jÓ€AÜ  œ=Ó)™=�aˆA�‹E˜=Ñ)Ð)ùÒ)s   œ+c                ó<   — t        t        t        | «      «      «      S ©N)Ú_normalize_distancesÚlistÚlinear_distances)r   s    r   r   r   '   s   € Ü¤Ô%5°jÓ%AÓ BÓCÐCr    c           	     óª   — t        | | dd  «      D ��cg c])  \  }}t        j                  |j                  |«      «      ‘Œ+ }}}t	        |«      S c c}}w r"   )ÚzipÚmathÚsqrtr   r*   )r   Úp1Úp2Ú	distancess       r   r   r   +   sS   € ä14°ZÀÈAÈBÀÔ1PôÙ1P¡v r¨2Œ�	‰	�"—+‘+˜b“/Õ"Ð1Pð ñ ô   	Ó*Ð*ùós   “.Ac                ó®   — t        | «      }t        |«      dk  rg S dg}d}| d d D ]  }||z  }|j                  ||z  «       Œ |j                  d«       |S )Ngê-�™—q=ç        éÿÿÿÿç      ð?)ÚsumÚabsÚappend)r3   Útotal_lengthÚparamsÚsÚds        r   r*   r*   2   sf   € Ü�y“>€LÜ
ˆ<Ó˜EÒ!Øˆ	Ø˜%€FØ€AØ�s˜‹^ˆØ	ˆQ‰ˆØ�‰�a˜,Ñ&Õ'ð ð ‡M�M�#ÔØ€Mr    c              #  óR   K  — d }| D ]  }|€|}Œ|j                  |«      –— |}Œ y ­wr)   ©r   )ÚpointsÚprevÚps      r   r,   r,   ?   s6   è ø€ Ø€DÛˆØˆ<ØˆDØØ�m‰m˜AÓÒØ‰ñ ùs   ‚%'c                ó*   — t        t        | «      «      S r)   )r8   r,   )rA   s    r   r   r   I   s   € ÜÔ Ó'Ó(Ð(r    c                ó@   — t        t        | «      «      }t        |«      S r)   )r+   Úarc_distancesr*   )r   r3   s     r   r   r   M   s   € Ü”] :Ó.Ó/€IÜ 	Ó*Ð*r    c              #  ót  ‡K  — | Šdˆfd„}t         |«       «      }t        |«      dk(  ry |j                  |d   «       t        dt        ‰«      dz
  «      D ]]  }‰|dz      ‰|   z
  j                  }||   }t        j                  |d«      r|–— Œ;t        j                  |dz  |z  «      dz  |z  –— Œ_ y ­w)Nc               3  óª   •K  — t        t        ‰«      dz
  «      D ]#  } 	 t        ‰|    ‰| dz      ‰| dz      «      }|–— Œ% y # t        $ r d}Y Œw xY w­w)Né   r   r5   )r$   r   r
   ÚZeroDivisionError)ÚiÚradiusrC   s     €r   Ú_radiizarc_distances.<locals>._radiiU   sa   øè ø€ Ü”s˜1“v ‘zÖ"ˆAðÜ)¨!¨A©$°°!°a±%±¸!¸AÀ¹E¹(ÓC�ð ‹Lñ #øô %ò Ø’ðüs'   ƒAŸA»AÁAÁAÁAÁAr   r6   r   ç       @)ÚreturnúIterable[float])r+   r   r:   r$   Ú	magnituder/   ÚiscloseÚasin)r   rM   ÚrÚkr   ÚrkrC   s         @r   rF   rF   R   s­   øè ø€ Ø€Aõô ™&›(“^€AÜ
ˆ1ƒv�‚{ØØ‡H�HˆQˆr‰U„OÜ�1”c˜!“f˜q‘jÖ!ˆØ�a˜!‘e‘H˜q ™t‘O×.Ñ.ˆØˆq‰TˆÜ�<‰<˜˜AÔØ‹Nä—)‘)˜H s™N¨RÑ/Ó0°3Ñ6¸Ñ;Ó;ñ "ùs   ƒB5B8c                ó.  — |j                  «       }|j                  d«      rt        | |¬«      S |j                  d«      rt        | |¬«      S |j                  d«      rt	        | |¬«      S |j                  d«      rt        | |¬«      S t        d|› �«      ‚)aB  Estimate tangents for curve defined by given fit points.
    Calculated tangents are normalized (unit-vectors).

    Available tangent estimation methods:

        - "3-points": 3 point interpolation
        - "5-points": 5 point interpolation
        - "bezier": tangents from an interpolated cubic bezier curve
        - "diff": finite difference

    Args:
        points: start-, end- and passing points of curve
        method: tangent estimation method
        normalize: normalize tangents if ``True``

    Returns:
        tangents as list of :class:`Vec3` objects

    Úbez©Ú	normalizez3-pz5-pÚdifzUnknown method: )ÚlowerÚ
startswithr   Útangents_3_point_interpolationÚtangents_5_point_interpolationÚfinite_difference_interpolationr   )rA   r   rZ   s      r   r   r   j   sŽ   € ð, �\‰\‹^€FØ×Ñ˜ÔÜ2°6ÀYÔOÐOØ	×	Ñ	˜5Ô	!Ü-¨fÀ	ÔJÐJØ	×	Ñ	˜5Ô	!Ü-¨fÀ	ÔJÐJØ	×	Ñ	˜5Ô	!Ü.¨vÀÔKÐKäÐ+¨F¨8Ð4Ó5Ð5r    c           	     ó^  — |dk(  r#t        d„ t        | | dd «      D «       «      }||fS |dk(  rt        t        | «      «      }||fS |j                  d«      rJt	        |dd «      }d}t        | «      D ](  }|t        t        |j                  |«      «      «      z  }Œ* ||fS t        d	|› �«      ‚)
aÒ  Estimate tangent magnitude of start- and end tangents.

    Available estimation methods:

        - "chord": total chord length, curve approximation by straight segments
        - "arc": total arc length, curve approximation by arcs
        - "bezier-n": total length from cubic bezier curve approximation, n
          segments per section

    Args:
        points: start-, end- and passing points of curve
        method: tangent magnitude estimation method

    r   c              3  óD   K  — | ]  \  }}|j                  |«      –— Œ y ­wr)   r@   )Ú.0Úp0r1   s      r   Ú	<genexpr>z1estimate_end_tangent_magnitude.<locals>.<genexpr>Ÿ   s   è ø€ ÐQÑ9P©v¨r°2˜2Ÿ;™; rŸ?Ñ9Pùs   ‚ r   Nr   zbezier-é   r5   z.Unknown tangent magnitude calculation method: )	r8   r.   rF   r]   Úintr	   r,   Úapproximater   )rA   r   r;   Úcountr=   Úcurves         r   r   r   �   sÂ   € ð" �ÒÜÑQ¼¸VÀVÈAÈBÀZÔ9PÓQÓQˆØ˜\Ð)Ð)Ø	�5ŠÜœ=¨Ó0Ó1ˆØ˜\Ð)Ð)Ø	×	Ñ	˜9Ô	%Ü�F˜1˜2�J“ˆØˆÜ/°Ö7ˆEØ”Ô% e×&7Ñ&7¸Ó&>Ó?Ó@Ñ@‰Að 8à�!ˆtˆäÐIÈ&ÈÐRÓSÐSr    c           
     óâ  — t        | | dd «      D ��cg c]
  \  }}||z
  ‘Œ }}}t        t        | |«      «      }t        ||dd «      D ��cg c]
  \  }}||z
  ‘Œ }	}}t        ||	«      D �
�cg c]
  \  }
}|
|z  ‘Œ }}
}t        |	|	dd «      D ��cg c]  \  }}|||z   z  ‘Œ }}}t        «       g}|j	                  t        t        |«      dz
  «      D �cg c]  }d||   z
  ||   z  ||   ||dz      z  z   ‘Œ! c}«       d|d   z  |d   z
  |d<   |j                  d|d   z  |d   z
  «       |r|D �cg c]  }|j                  «       ‘Œ }}|S c c}}w c c}}w c c}}
w c c}}w c c}w c c}w )zTReturns from 3 points interpolated and optional normalized tangent
    vectors.
    r   Nr7   rN   r   r6   )	r.   r+   r   r   Úextendr$   r   r:   rZ   )r   r   rZ   ÚQ0ÚQ1Úqr'   Út0Út1Údelta_tÚqkÚdtkr>   Údt0Údt1ÚalphaÚtangentsrU   Úvs                      r   r^   r^   ®   sŒ  € ô  # :¨z¸!¸"¨~Ô>Ô?Ñ>‘V�R˜ˆˆb‹Ð>€AÑ?ÜŒ_˜Z¨Ó0Ó1€AÜ%(¨¨A¨a¨b¨E¤]Ô3¡]™6˜2˜rˆr�B‹w ]€GÑ3Ü!$ Q¨¤Ô1¡‘g�b˜#ˆˆc‹ €AÑ1Ü/2°7¸GÀAÀB¸KÔ/HÔIÑ/H¡8 3¨ˆS�C˜#‘IÓÐ/H€EÑIÜ ›F˜8€HØ‡O�OÜ@EÄcÈ!ÃfÈqÁjÔ@QÓRÑ@Q¸1ˆ#��a‘‰.˜A˜a™DÑ	  5¨¡8¨a°°A±©hÑ#6Ó	6Ð@QÑRôð ˜˜!™‘*˜x¨™{Ñ*€HˆQ�KØ‡O�O�C˜!˜B™%‘K (¨2¡,Ñ.Ô/ÙÙ+3Ó4©8 a�A—K‘K•M¨8ˆÐ4Ø€Oùó 	@ùã3ùÛ1ùÛIùò 	Sùò
 5s#   “EÁEÁ-EÂE!Ã$E'Ä4E,c                óò  — t        | «      }t        | «      }t        «       }t        |«      D ]d  }||dz
     j	                  ||   «      j
                  }||dz      j	                  ||dz      «      j
                  }|j                  |||z   z  «       Œf g }t        |«      D ]0  }d||   z
  ||   z  ||   ||dz      z  z   }	|j                  |	«       Œ2 |r|D �
cg c]  }
|
j                  «       ‘Œ }}
|S c c}
w )zTReturns from 5 points interpolated and optional normalized tangent
    vectors.
    r   rI   r7   )r   Ú_delta_qr+   r$   ÚcrossrQ   r:   rZ   )r   rZ   r&   ro   rw   rU   Úv1Úv2rx   Úvkry   s              r   r_   r_   Ä   sú   € ô 	ˆJ‹€AÜ�Ó€Aä‹F€EÜ�1ŽXˆØ��A‘‰h�n‰n˜Q˜q™TÓ"×-Ñ-ˆØ��A‘‰h�n‰n˜Q˜q 1™u™XÓ&×1Ñ1ˆØ�‰�R˜2 ™7‘^Õ$ð ð
 €HÜ�1ŽXˆØ�E˜!‘H‰n  !¡Ñ$ u¨Q¡x°!°A¸±E±(Ñ':Ñ:ˆØ�‰˜Õð ñ Ù+3Ó4©8 a�A—K‘K•M¨8ˆÐ4Ø€Oùò 5s   ÃC4c                óŒ  — t        | «      }t        «       g}|j                  t        |dz
  «      D �cg c]  }| |dz      | |   z
  ‘Œ c}«       d|d   z  |d   z
  |d<   |j	                  d||dz
     z  ||dz
     z
  «       |j	                  d||   z  ||dz
     z
  «       |j	                  d|d   z  |d   z
  «       |S c c}w )Nr   rN   rI   r   )r   r   rl   r$   r:   )rA   r&   ro   rU   s       r   r{   r{   Ü   sÏ   € ÜˆF‹€AÜ	‹ˆ€AØ‡H�H´°q¸1±u´Ó>±¨Aˆf�Q˜‘U‰m˜f Q™iÓ'°Ñ>Ô?Ø��1‘‰:˜˜!™Ñ€A€a�DØ‡H�HˆS�1�Q˜‘U‘8‰^˜a  A¡™hÑ&Ô'Ø‡H�HˆS�1�Q‘4‰Z˜!˜A ™E™(Ñ"Ô#Ø‡H�HˆS�1�Q‘4‰Z˜!˜A™$ÑÔØ€Hùò ?s   ²Cc                óL  — d}| }|d   |d   z
  |z  g}t        dt        | «      dz
  «      D ]4  }|j                  ||   ||dz
     z
  |z  ||dz      ||   z
  |z  z   «       Œ6 |j                  |d   |d   z
  |z  «       |r|D �cg c]  }|j                  «       ‘Œ }}|S c c}w )NrN   r   r   r6   éþÿÿÿ)r$   r   r:   rZ   )r   rZ   ÚfrC   r'   rU   ry   s          r   r`   r`   ç   sÀ   € ð 	€AØ€Aà
ˆA‰$��1‘‰+˜Ñ	Ð€AÜ�1”c˜*“o¨Ñ)Ö*ˆØ	�‰�!�A‘$˜˜1˜q™5™‘/ QÑ&¨!¨A°©E©(°Q°q±T©/¸QÑ)>Ñ>Õ?ð +à‡H�Hˆa�‰e�a˜‘e‰m˜qÑ Ô!ÙÙ$%Ó&¡A˜qˆQ�[‰[�] AˆÐ&Ø€Hùò 's   ÂB!c           	     óð   ‡— ˆfd„} || d   | d   «      g}t        dt        | «      dz
  «      D ]&  }|j                   || |dz      | |dz
     «      «       Œ( |j                   || d   | d   «      «       |S )Nc                ó2   •— | |z
  j                  d‰z
  «      S )Nr7   rY   )rd   r1   Útensions     €r   Útangentz'cardinal_interpolation.<locals>.tangentø   s   ø€ Ø�R‘×"Ñ" 3¨¡=Ó1Ð1r    r   r   r6   r‚   )r$   r   r:   )r   r†   r‡   r'   rU   s    `   r   Úcardinal_interpolationrˆ   ö   s€   ø€ ô2ñ 
�˜A‘ 
¨1¡Ó	.Ð/€AÜ�1”c˜*“o¨Ñ)Ö*ˆØ	�‰‘˜ A¨¡EÑ*¨J°q¸1±uÑ,=Ó>Õ?ð +à‡H�H‰W�Z ‘^ Z°¡^Ó4Ô5Ø€Hr    )r   ú
list[Vec3]r   ÚstrrO   úlist[float])r%   rg   rO   r‹   )r   r‰   rO   r‹   )r3   zSequence[float]rO   r‹   )rA   úIterable[Vec3]rO   rP   )rA   rŒ   rO   r#   )r   r‰   rO   rP   )z5-pointsT)rA   r‰   r   rŠ   rO   r‰   )r   )rA   r‰   r   rŠ   rO   ztuple[float, float])r   T)r   r‰   r   rŠ   rO   r‰   )T)r   r‰   rO   r‰   )rA   r‰   rO   r‰   )r   r‰   r†   r#   rO   r‰   )Ú
__future__r   Útypingr   r   r/   Ú
ezdxf.mathr   Úbezier_interpolationr   r	   Úconstruct2dr
   Ú__all__r   r   r   r   r*   r,   r   r   rF   r   r   r^   r_   r{   r`   rˆ   © r    r   Ú<module>r”      sþ   ðõ #ß %Û Ý ÷õ *ò€ó
>ó*ó
Dó+ó
óó)ó+ó
<ð2 =Að 6Øð 6Ø #ð 6àó 6ðH '.ðTØðTØ #ðTàóTðD >BðØðØ$'ðàóð. '+ðØðàóó0ð '+ðØðàóô	r    