L ixdZddlmZmZddlmZmZmZmZm Z m Z m Z m Z m Z mZde zZde zZdZGddeZy ) 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 )IdentityScale) atan2ceilcosfabsisfinitepiradianssinsqrttan?cl|j|j|jf}|d|ddzzS)Nry?)transformPointrealimag)matrixptrs _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/svgLib/path/arc.py _map_pointrs6rww01A Q4!A$) c$eZdZdZdZdZdZy) EllipticalArcc||_||_||_||_||_||_||_t||_dx|_ x|_ x|_ |_ yN) current_pointrxryrotationlargesweep target_pointr angle center_pointtheta1theta2 theta_arc)selfr r!r"r#r$r%r&s r__init__zEllipticalArc.__init__sd*    (X& JNMMDKM$+rcNt|j}t|j}|r|sy|j|jk(ry|j|jz dz}t j |j }t||}||z}||z}|j|jz}|j|jz} ||z | |z z} | dkDr+|t| z}|t| z}||c|_|_td|z d|z j |j }t||j} t||j} | | z } | j| jz| j| jzz}td|z dz d}t|}|j|jk(r| }| |z} | | zdz}|t!| j | jz }| |z} | |z} t#| j| j}t#| j| j}||z }|dkr|jr |t$z }n|dkDr|js |t$z}||_||z|_||_||_y)NFrr?grT)rr!r"r&r rrotater'rrrr rmaxr%r$complexrTWO_PIr)r*r+r()r,r!r"mid_point_distancepoint_transformtransformed_mid_point square_rx square_rysquare_xsquare_y radii_scalepoint1point2deltadscale_factor_squared scale_factorr(r)r*r+s r _parametrizezEllipticalArc._parametrize's$''] $'']r    2 2 2"0043D3DDK"//4::+6 *?->? JJ #ejj5::&= ="1q54<501 :: #(=L 3.  UZZ88 ,,v{{FKK0v{{FKK0VO q=TZZ  I ]4::  I y( "(rc #xK|j|jsytj|jj |j |j}ttt|jtdzz }t|D]}|j||jz|z z}|j|dz|jz|z z}dtd||z zz}t!|syt#|}t%|}t#|} t%|} t'|||zz |||zz} | |jz } t'| | } | |jz } | } | t'|| z| | zz } t)|| } t)|| } t)|| } | | | fyw)NgMbP?rgUUUUUU?r/)r(rBrr0r'scaler!r"intrrr+ PI_OVER_TWOranger)rr r rr2r)r,r5 num_segmentsi start_theta end_thetatsin_start_thetacos_start_theta sin_end_theta cos_end_thetar<r&r=s r_decompose_to_cubic_curvesz(EllipticalArc._decompose_to_cubic_curvesms    $T->->-@ "//$**5;;DGGTWWM 4T^^{U7J%K LMN |$ /A++DNN(:\(IIK q1u&>&MMI#di+&=>??AA;!+.O!+.O NM NM!o"55!o"55F d'' 'F"=-@L D-- -L!F ga-/!m1CD DF8F8F%o|DL&,. .7 /sF8F:c|jD][\}}}|j|j|jf|j|jf|j|jf]yr)rQcurveTorr)r,penr<r=r&s rdrawzEllipticalArc.drawsa,0,K,K,M  (FFL KKfkk*fkk*""L$5$56  rN)__name__ __module__ __qualname__r-rBrQrUrrrrsN DL%/NrrN)__doc__fontTools.misc.transformrrmathrrrrr r r r r rr3rFrobjectrrYrrr^s?5NNN RBh  DFDr