
    h                     x    S r SSKJrJr  SSKJrJrJrJrJ	r	J
r
JrJrJrJr  S\
-  rS\
-  rS r " S S\5      rg	)
zConvert SVG Path's elliptical arcs to Bezier curves.

The code is mostly adapted from Blink's SVGPathNormalizer::DecomposeArcToCubic
https://github.com/chromium/chromium/blob/93831f2/third_party/
blink/renderer/core/svg/svg_path_parser.cc#L169-L278
    )IdentityScale)
atan2ceilcosfabsisfinitepiradianssinsqrttan         ?c                 l    U R                  UR                  UR                  45      nUS   US   S-  -   $ )Nr      y              ?)transformPointrealimag)matrixptrs      K/var/www/html/env/lib/python3.13/site-packages/fontTools/svgLib/path/arc.py
_map_pointr      s6    rww01AQ4!A$)    c                   ,    \ rS rSrS rS rS rS rSrg)EllipticalArc   c                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        [        U5      U l        S =U l	        =U l
        =U l        U l        g N)current_pointrxryrotationlargesweeptarget_pointr   anglecenter_pointtheta1theta2	theta_arc)selfr!   r"   r#   r$   r%   r&   r'   s           r   __init__EllipticalArc.__init__   sV    * 

( X&
 JNMMDKM$+r   c                 n   [        U R                  5      n[        U R                  5      nU(       a  U(       d  gU R                  U R                  :X  a  gU R                  U R                  -
  S-  n[
        R                  " U R                  * 5      n[        XC5      nX-  nX"-  nUR                  UR                  -  nUR                  UR                  -  n	X-  X-  -   n
U
S:  a*  U[        U
5      -  nU[        U
5      -  nXsU l        U l        [        SU-  SU-  5      R                  U R                  * 5      n[        X@R                  5      n[        X@R                  5      nX-
  nUR                  UR                  -  UR                  UR                  -  -   n[        SU-  S-
  S5      n[        U5      nU R                  U R                  :X  a  U* nUU-  nX-   S-  nU[!        UR                  * UR                  5      -  nUU-  nUU-  n[#        UR                  UR                  5      n[#        UR                  UR                  5      nUU-
  nUS:  a  U R                  (       a
  U[$        -  nO US:  a  U R                  (       d	  U[$        -  nUU l        UU-   U l        UU l        UU l        g)NFr   r         ?g        r   T)r   r"   r#   r'   r!   r   rotater(   r   r   r   r   r   maxr&   r%   complexr   TWO_PIr*   r+   r,   r)   )r-   r"   r#   mid_point_distancepoint_transformtransformed_mid_point	square_rx	square_rysquare_xsquare_yradii_scalepoint1point2deltadscale_factor_squaredscale_factorr)   r*   r+   r,   s                        r   _parametrizeEllipticalArc._parametrize'   sk    $'']$'']r  2 22"0043D3DDK"//4::+6 *? OG	G	(--0E0J0JJ(--0E0J0JJ *X-AA?${##B${##B!DGTWBB/66

{CO-?-?@O->->?JJ#ejj5::&=="1q54<501::#(=L3.UZZ88,,v{{FKK0v{{FKK0VO	q=TZZI]4::Iy("(r   c           	   #   |  #    U R                   c  U R                  5       (       d  g [        R                  " U R                  5      R                  U R                  U R                  5      n[        [        [        U R                  [        S-   -  5      5      5      n[        U5       GH  nU R                  X0R                  -  U-  -   nU R                  US-   U R                  -  U-  -   nS[        SXT-
  -  5      -  n[!        U5      (       d    g [#        U5      n[%        U5      n[#        U5      n	[%        U5      n
['        XU-  -
  XvU-  -   5      nXR                   -  n['        X5      nXR                   -  nUnU['        Xi-  U* U
-  5      -  n[)        X5      n[)        X5      n[)        X5      nXU4v   GM     g 7f)NgMbP?r   gUUUUUU?r1   )r)   rD   r   r2   r(   scaler"   r#   intr   r   r,   PI_OVER_TWOranger*   r   r	   r   r   r4   r   )r-   r7   num_segmentsistart_theta	end_thetatsin_start_thetacos_start_thetasin_end_thetacos_end_thetar>   r'   r?   s                 r   _decompose_to_cubic_curves(EllipticalArc._decompose_to_cubic_curvesm   s    $T->->-@-@"//$**5;;DGGTWWM
 4T^^{U7J%K LMN|$A++NN(:\(IIKq1u&>&MMI#di&=>??AA;;!+.O!+.O	NM	NMo"55o"55F '''F"=@L---L!Fga/!m1CDDF8F8F%oDL,..7 %s   F:F<c                     U R                  5        H[  u  p#nUR                  UR                  UR                  4UR                  UR                  4UR                  UR                  45        M]     g r    )rT   curveTor   r   )r-   penr>   r?   r'   s        r   drawEllipticalArc.draw   s[    ,0,K,K,M(FLKKfkk*fkk*""L$5$56 -Nr   )r(   r)   r!   r%   r$   r"   r#   r&   r'   r*   r+   r,   N)	__name__
__module____qualname____firstlineno__r.   rD   rT   rY   __static_attributes__ r   r   r   r      s    N DL%/Nr   r   N)__doc__fontTools.misc.transformr   r   mathr   r   r   r   r	   r
   r   r   r   r   r5   rI   r   objectr   r`   r   r   <module>re      s?    5 N N N 
RBhDF Dr   