
    <`d                     ^    d Z ddlmZ ddlmZmZmZmZ ddlZdgZ	d Z
 G d de          ZdS )z#Calculate the perimeter of a glyph.    )BasePen)approximateQuadraticArcLengthCcalcQuadraticArcLengthCapproximateCubicArcLengthCcalcCubicArcLengthCNPerimeterPenc                 h    t          j        | d         |d         z
  | d         |d         z
            S )Nr      )mathhypot)p0p1s     ;lib/python3.11/site-packages/fontTools/pens/perimeterPen.py	_distancer      s,    
2a52a5="Q%"Q%-000    c                   L    e Zd ZddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd ZdS )r   N{Gzt?c                     t          j        | |           d| _        || _        |dk    r| j        n| j        | _        |dk    r| j        n| j        | _	        d S )Nr   g~jtX?g~jtH?)
r   __init__value	tolerance_addCubicQuadrature_addCubicRecursive	_addCubic_addQuadraticQuadrature_addQuadraticExact_addQuadratic)selfglyphsetr   s      r   r   zPerimeterPen.__init__   se    	4"""$*$.
 09F/B/B4++H_$.7@G7K7Kt33QUQh$r   c                     || _         d S N)_PerimeterPen__startPointr   r   s     r   _moveTozPerimeterPen._moveTo   s    $r   c                 |    |                                  }|| j        k    r|                     | j                   d S d S r!   )_getCurrentPointr"   _lineTor#   s     r   
_closePathzPerimeterPen._closePath   sD    "4<<!""""" r   c                 j    |                                  }| xj        t          ||          z  c_        d S r!   )r&   r   r   )r   r   r   s      r   r'   zPerimeterPen._lineTo$   s1    "**	"b!!!****r   c                 D    | xj         t          |||          z  c_         d S r!   )r   r   r   c0c1c2s       r   r   zPerimeterPen._addQuadraticExact(   s#    **'B333****r   c                 D    | xj         t          |||          z  c_         d S r!   )r   r   r+   s       r   r   z$PerimeterPen._addQuadraticQuadrature+   s#    **.r2r:::****r   c                     |                                  }|                     t          | t          | t          |            d S r!   )r&   r   complex)r   r   p2r   s       r   _qCurveToOnezPerimeterPen._qCurveToOne.   s=    "Wb\7B<">>>>>r   c           	      R    | xj         t          ||||| j                  z  c_         d S r!   )r   r   r   r   r,   r-   r.   c3s        r   r   zPerimeterPen._addCubicRecursive2   s)    **#BBDNCCC****r   c                 F    | xj         t          ||||          z  c_         d S r!   )r   r   r5   s        r   r   z PerimeterPen._addCubicQuadrature5   s%    ***2r2r:::****r   c                     |                                  }|                     t          | t          | t          | t          |            d S r!   )r&   r   r1   )r   r   r2   p3r   s        r   _curveToOnezPerimeterPen._curveToOne8   sA    ".."w|Wb\7B<HHHHHr   )Nr   )__name__
__module____qualname__r   r$   r(   r'   r   r   r3   r   r   r:    r   r   r   r      s        	i 	i 	i 	i  # # #
" " "4 4 4; ; ;? ? ?D D D; ; ;I I I I Ir   )__doc__fontTools.pens.basePenr   fontTools.misc.bezierToolsr   r   r   r   r   __all__r   r   r>   r   r   <module>rC      s    ) ) * * * * * * P  P  P  P  P  P  P  P  P  P  P  P  
1 1 1+I +I +I +I +I7 +I +I +I +I +Ir   