
    Mcg                     x    d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZ de
z  Zde
z  Zd Z G d de      Zy	)
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    | j                  |j                  |j                  f      }|d   |d   dz  z   S )Nr      y              ?)transformPointrealimag)matrixptrs      T/var/www/html/bid-api/venv/lib/python3.12/site-packages/fontTools/svgLib/path/arc.py
_map_pointr      s6    rww01AQ4!A$)    c                   $    e Zd Zd Zd Zd Zd Zy)EllipticalArcc                     || _         || _        || _        || _        || _        || _        || _        t        |      | _        d x| _	        x| _
        x| _        | _        y 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__zEllipticalArc.__init__   sd    * 

( X&
 JNMMDKM$+r   c                 N   t        | j                        }t        | j                        }|r|sy| j                  | j                  k(  ry| j                  | j                  z
  dz  }t        j                  | j                         }t        ||      }||z  }||z  }|j                  |j                  z  }|j                  |j                  z  }	||z  |	|z  z   }
|
dkD  r+|t        |
      z  }|t        |
      z  }||c| _        | _        t        d|z  d|z        j                  | j                         }t        || j                        }t        || j                        }||z
  }|j                  |j                  z  |j                  |j                  z  z   }t        d|z  dz
  d      }t        |      }| j                  | j                  k(  r| }||z  }||z   dz  }|t!        |j                   |j                        z  }||z  }||z  }t#        |j                  |j                        }t#        |j                  |j                        }||z
  }|dk  r| j                  r
|t$        z  }n|dkD  r| j                  s	|t$        z  }|| _        ||z   | _        || _        || _        y)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   _parametrizezEllipticalArc._parametrize'   s    $'']$'']r  2 22"0043D3DDK"//4::+6 *?<N OG	G	(--0E0J0JJ(--0E0J0JJ *X	-AA?${##B${##B!2DGTWBB/66

{COT-?-?@OT->->?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           	   #   x  K   | j                   | j                         sy t        j                  | j                        j                  | j                  | j                        }t        t        t        | j                  t        dz   z                    }t        |      D ]  }| j                  || j                  z  |z  z   }| j                  |dz   | j                  z  |z  z   }dt        d||z
  z        z  }t!        |      s y t#        |      }t%        |      }t#        |      }	t%        |      }
t'        |||z  z
  |||z  z         }|| j                   z  }t'        |
|	      }|| j                   z  }|}|t'        ||	z  | |
z        z  }t)        ||      }t)        ||      }t)        ||      }|||f  y w)NgMbP?r   gUUUUUU?r/   )r(   rB   r   r0   r'   scaler!   r"   intr   r   r+   PI_OVER_TWOranger)   r   r	   r   r   r2   r   )r,   r5   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_curvesz(EllipticalArc._decompose_to_cubic_curvesm   s    $T->->-@"//$**5;;DGGTWWM
 4T^^{U7J%K LMN|$A++DNN(:\(IIKq1u&>&MMI#di+&=>??AA;!+.O!+.O	NM	NM!o"55!o"55F d'''F"=-@LD---L!Fga-/!m1CDDF8F8F%o|DL&,..7 %s   F8F:c                     | j                         D ][  \  }}}|j                  |j                  |j                  f|j                  |j                  f|j                  |j                  f       ] y r   )rQ   curveTor   r   )r,   penr<   r=   r&   s        r   drawzEllipticalArc.draw   s]    ,0,K,K,M(FFLKKfkk*fkk*""L$5$56 -Nr   N)__name__
__module____qualname__r-   rB   rQ   rU    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   r3   rF   r   objectr   rY   r   r   <module>r^      s?    5 N N N 
RBhDF Dr   