
    jkei                     V    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y)z#Calculate the perimeter of a glyph.    )BasePen)approximateQuadraticArcLengthCcalcQuadraticArcLengthCapproximateCubicArcLengthCcalcCubicArcLengthCNPerimeterPenc                 R    t        j                  | d   |d   z
  | d   |d   z
        S )Nr      )mathhypot)p0p1s     =/usr/lib/python3/dist-packages/fontTools/pens/perimeterPen.py	_distancer      s+    ::bebemRURU]33    c                   J    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y)r   Nc                     t        j                  | |       d| _        || _        |dk\  r| j                  n| j
                  | _        |dk\  r| j                  | _	        y | j                  | _	        y )Nr   g~jtX?g~jtH?)
r   __init__value	tolerance_addCubicQuadrature_addCubicRecursive	_addCubic_addQuadraticQuadrature_addQuadraticExact_addQuadratic)selfglyphsetr   s      r   r   zPerimeterPen.__init__   sq    x(
" )2V(;D$$AXAX 	
 G# (( 	 (( 	r   c                     || _         y N)_PerimeterPen__startPointr   r   s     r   _moveTozPerimeterPen._moveTo'   s
    r   c                 z    | j                         }|| j                  k7  r| j                  | j                         y y r    )_getCurrentPointr!   _lineTor"   s     r   
_closePathzPerimeterPen._closePath*   s5    ""$"""LL**+ #r   c                 b    | j                         }| xj                  t        ||      z  c_        y r    )r%   r   r   )r   r   r   s      r   r&   zPerimeterPen._lineTo/   s%    ""$

iB''
r   c                 D    | xj                   t        |||      z  c_         y r    )r   r   r   c0c1c2s       r   r   zPerimeterPen._addQuadraticExact3   s    

-b"b99
r   c                 D    | xj                   t        |||      z  c_         y r    )r   r   r*   s       r   r   z$PerimeterPen._addQuadraticQuadrature6   s    

4RR@@
r   c                 n    | j                         }| j                  t        | t        | t        |        y r    )r%   r   complex)r   r   p2r   s       r   _qCurveToOnezPerimeterPen._qCurveToOne9   s.    ""$7B<"w|Dr   c           	      \    | xj                   t        ||||| j                        z  c_         y r    )r   r   r   r   r+   r,   r-   c3s        r   r   zPerimeterPen._addCubicRecursive=   s"    

)"b"b$..II
r   c                 F    | xj                   t        ||||      z  c_         y r    )r   r   r4   s        r   r   z PerimeterPen._addCubicQuadrature@   s    

0RR@@
r   c                 |    | j                         }| j                  t        | t        | t        | t        |        y r    )r%   r   r0   )r   r   r1   p3r   s        r   _curveToOnezPerimeterPen._curveToOneC   s2    ""$w|Wb\7B<"Nr   )Ng{Gzt?)__name__
__module____qualname__r   r#   r'   r&   r   r   r2   r   r   r9    r   r   r   r      s9    
",
(:AEJAOr   )__doc__fontTools.pens.basePenr   fontTools.misc.bezierToolsr   r   r   r   r   __all__r   r   r=   r   r   <module>rB      s7    ) *   
40O7 0Or   