
    h                    @   S SK Jr  S SKJrJr  S SKrS SKJr  SSKJ	r	J
r
  SSKJr  / SQrSS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jr S      S!S jjr S"     S#S jjr S$     S%S jjr S&   S'S jjrS(S jr S&   S'S jjrS)S jrg)*    )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                    US:X  a  [        [        U 5      5      $ US;   a  [        U 5      $ US;   a  [        U 5      $ US:X  a  [	        U 5      $ [        SR                  U5      5      e)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     H/var/www/html/env/lib/python3.13/site-packages/ezdxf/math/parametrize.pyr   r      sj    J00	(	( ,,	0	0#J//	5J''-44V<==    c                d    [        U S-
  5      n[        U 5       Vs/ s H  o"U-  PM	     sn$ s  snf Nr   )floatrange)lengthnts      r   r   r   "   s.    fqjA =)=aE=)))s   -c                <    [        [        [        U 5      5      5      $ N)_normalize_distanceslistlinear_distances)r   s    r   r   r   '   s    %5j%A BCCr    c           	         [        X SS  5       VVs/ s H*  u  p[        R                  " UR                  U5      5      PM,     nnn[	        U5      $ s  snnf r"   )zipmathsqrtr   r*   )r   p1p2	distancess       r   r   r   +   sO    14ZAB1P1Pvr		"++b/"1P    	**s   1Ac                    [        U 5      n[        U5      S::  a  / $ S/nSnU S S  H  nX4-  nUR                  X1-  5        M     UR                  S5        U$ )Ng-q=              ?)sumabsappend)r3   total_lengthparamssds        r   r*   r*   2   sb    y>L
<E!	%FAs^	a&'  MM#Mr    c              #  Z   #    S nU  H  nUc  UnM
  UR                  U5      v   UnM!     g 7fr)   r   )pointsprevps      r   r,   r,   ?   s5     D<DmmA s   )+c                *    [        [        U 5      5      $ r)   )r8   r,   )rA   s    r   r   r   I   s    '((r    c                @    [        [        U 5      5      n[        U5      $ r)   )r+   arc_distancesr*   )r   r3   s     r   r   r   M   s    ]:./I	**r    c              #    ^#    U mSU4S jjn[        U" 5       5      n[        U5      S:X  a  g UR                  US   5        [        S[        T5      S-
  5       He  nTUS-      TU   -
  R                  nX#   n[
        R                  " US5      (       a  Uv   MA  [
        R                  " US-  U-  5      S-  U-  v   Mg     g 7f)Nc               3     >#    [        [        T5      S-
  5       H$  n  [        TU    TU S-      TU S-      5      nUv   M&     g ! [         a    Sn Nf = f7f)N   r   r5   )r$   r   r
   ZeroDivisionError)iradiusrC   s     r   _radiiarc_distances.<locals>._radiiU   s`     s1v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
1v{HHQrUO1c!fqj!a!eHqtO..T<<AN))HsNR/036;; "s   CCc                6   UR                  5       nUR                  S5      (       a	  [        XS9$ UR                  S5      (       a	  [        XS9$ UR                  S5      (       a	  [	        XS9$ UR                  S5      (       a	  [        XS9$ [        SU 35      e)a  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   r[   s      r   r   r   j   s    , \\^F26OO			5	!	!-fJJ			5	!	!-fJJ			5	!	!.vKK+F8455r    c           	     h   US:X  a!  [        S [        X SS 5       5       5      nX"4$ US:X  a  [        [        U 5      5      nX"4$ UR                  S5      (       aK  [	        USS 5      nSn[        U 5       H)  nU[        [        UR                  U5      5      5      -  nM+     XD4$ [        S	U 35      e)
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  H   #    U  H  u  pUR                  U5      v   M     g 7fr)   r@   ).0p0r1   s      r   	<genexpr>1estimate_end_tangent_magnitude.<locals>.<genexpr>   s     Q9Pvr2;;r??9Ps    "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VABZ9PQQ))	5=01))			9	%	%F12J/7E%e&7&7&>?@@A 8tI&RSSr    c           
        [        X SS 5       VVs/ s H	  u  p4XC-
  PM     nnn[        [        X5      5      n[        XfSS 5       VVs/ s H	  u  pxX-
  PM     n	nn[        XY5       V
Vs/ s H	  u  pX-  PM     nn
n[        XSS 5       VVs/ s H  u  pXU-   -  PM     nnn[        5       /nUR	                  [        [        U5      S-
  5       Vs/ s H   nSUU   -
  UU   -  UU   UUS-      -  -   PM"     sn5        SUS   -  US   -
  US'   UR                  SUS   -  US   -
  5        U(       a   U Vs/ s H  nUR                  5       PM     nnU$ s  snnf s  snnf s  snn
f s  snnf s  snf s  snf )zLReturns from 3 points interpolated and optional normalized tangent
vectors.
r   Nr7   rO   r   r6   )	r.   r+   r   r   extendr$   r   r:   r[   )r   r   r[   Q0Q1qr'   t0t1delta_tqkdtkr>   dt0dt1alphatangentsrV   vs                      r   r_   r_      sr     #:!"~>?>VR>A?_Z01A%(abE]3]62rw]G3!$Q1gbA1/27ABK/HI/H83S#I/HEI F8HOO@Ec!fqj@QR@Q1#a.AaD	 58aAh#6	6@QR !*x{*HQKOOC!B%K(2,./+348aAKKM84O 	@31I 	S
 5s#   E
E+E%E+'E1;E6c                   [        U 5      n[        U 5      n[        5       n[        U5       H`  nX5S-
     R	                  X5   5      R
                  nX5S-      R	                  X5S-      5      R
                  nUR                  XfU-   -  5        Mb     / n[        U5       H-  nSXE   -
  X5   -  XE   X5S-      -  -   n	UR                  U	5        M/     U(       a  U V
s/ s H  oR                  5       PM     nn
U$ s  sn
f )zLReturns from 5 points interpolated and optional normalized tangent
vectors.
r   rI   r7   )r   _delta_qr+   r$   crossrR   r:   r[   )r   r[   r&   rq   ry   rV   v1v2rz   vkr{   s              r   r`   r`      s     	JAAFE1XAhnnQT"--AhnnQ1uX&11R7^$ 
 H1XEHn$ux!E('::  +348aKKM84O 5s   C6c                   [        U 5      n[        5       /nUR                  [        US-
  5       Vs/ s H  o0US-      X   -
  PM     sn5        SUS   -  US   -
  US'   UR	                  SX!S-
     -  X!S-
     -
  5        UR	                  SX!   -  X!S-
     -
  5        UR	                  SUS   -  US   -
  5        U$ s  snf )Nr   rO   rI   r   )r   r   rn   r$   r:   )rA   r&   rq   rV   s       r   r}   r}      s    FA	AHHq1u>AQUmfi'>?1:!AaDHHS1U8^aAh&'HHS14Z!E("#HHS1Q4Z!A$H ?s   B>c                V   SnU nUS   US   -
  U-  /n[        S[        U 5      S-
  5       H1  nUR                  X5   X5S-
     -
  U-  X5S-      X5   -
  U-  -   5        M3     UR                  US   US   -
  U-  5        U(       a  U Vs/ s H  ofR                  5       PM     nnU$ s  snf )NrO   r   r   r6   )r$   r   r:   r[   )r   r[   frC   r'   rV   r{   s          r   ra   ra      s     	AA
A$1+	A1c*o)*	!$q5/Q&!E(QT/Q)>>? +HHaeaemq !$%&Aq[[]A&H 's   	B&c           	        ^ U4S jnU" U S   U S   5      /n[        S[        U 5      S-
  5       H%  nUR                  U" XS-      XS-
     5      5        M'     UR                  U" U S   U S   5      5        U$ )Nc                0   > X-
  R                  ST-
  5      $ )Nr7   rZ   )re   r1   tensions     r   tangent'cardinal_interpolation.<locals>.tangent   s    ""3=11r    r   r   r6   r   )r$   r   r:   )r   r   r   r'   rV   s    `   r   cardinal_interpolationr      s|    2 
A
1	./A1c*o)*	E*J1u,=>? +HHWZ^Z^45Hr    )r   
list[Vec3]r   strrP   list[float])r%   ri   rP   r   )r   r   rP   r   )r3   zSequence[float]rP   r   )rA   Iterable[Vec3]rP   rQ   )rA   r   rP   r#   )r   r   rP   rQ   )z5-pointsT)rA   r   r   r   rP   r   )r   )rA   r   r   r   rP   ztuple[float, float])r   T)r   r   r   r   rP   r   )T)r   r   rP   r   )rA   r   rP   r   )r   r   r   r#   rP   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}   ra   r    r    r   <module>r      s    # %   *
>*
D+
)+
<2 =A 6 6 # 6 6H '.TT #TTD >B$'. '+0 '+	r    