B
    ¶ôJdd  ã               @   sR   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d„ Z
G dd„ deƒZdS )	z#Calculate the perimeter of a glyph.é    )ÚBasePen)ÚapproximateQuadraticArcLengthCÚcalcQuadraticArcLengthCÚapproximateCubicArcLengthCÚcalcCubicArcLengthCNÚPerimeterPenc             C   s$   t  | d |d  | d |d  ¡S )Nr   é   )ÚmathÚhypot)Úp0Úp1© r   úM/var/www/html/venv/lib/python3.7/site-packages/fontTools/pens/perimeterPen.pyÚ	_distance   s    r   c               @   s^   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r   Nç{®Gázt?c             C   sH   t  | |¡ d| _|| _|dkr&| jn| j| _|dkr<| jn| j| _	d S )Nr   gú~j¼t“X?gú~j¼t“H?)
r   Ú__init__ÚvalueÚ	toleranceÚ_addCubicQuadratureÚ_addCubicRecursiveÚ	_addCubicÚ_addQuadraticQuadratureÚ_addQuadraticExactÚ_addQuadratic)ÚselfZglyphsetr   r   r   r   r      s
    zPerimeterPen.__init__c             C   s
   || _ d S )N)Ú_PerimeterPen__startPoint)r   r   r   r   r   Ú_moveTo   s    zPerimeterPen._moveToc             C   s"   |   ¡ }|| jkr|  | j¡ d S )N)Ú_getCurrentPointr   Ú_lineTo)r   r   r   r   r   Ú
_closePath   s    
zPerimeterPen._closePathc             C   s    |   ¡ }|  jt||ƒ7  _d S )N)r   r   r   )r   r   r   r   r   r   r   $   s    zPerimeterPen._lineToc             C   s   |  j t|||ƒ7  _ d S )N)r   r   )r   Úc0Úc1Úc2r   r   r   r   (   s    zPerimeterPen._addQuadraticExactc             C   s   |  j t|||ƒ7  _ d S )N)r   r   )r   r    r!   r"   r   r   r   r   +   s    z$PerimeterPen._addQuadraticQuadraturec             C   s&   |   ¡ }|  t|Ž t|Ž t|Ž ¡ d S )N)r   r   Úcomplex)r   r   Úp2r   r   r   r   Ú_qCurveToOne.   s    zPerimeterPen._qCurveToOnec             C   s    |  j t||||| jƒ7  _ d S )N)r   r   r   )r   r    r!   r"   Úc3r   r   r   r   2   s    zPerimeterPen._addCubicRecursivec             C   s   |  j t||||ƒ7  _ d S )N)r   r   )r   r    r!   r"   r&   r   r   r   r   5   s    z PerimeterPen._addCubicQuadraturec             C   s,   |   ¡ }|  t|Ž t|Ž t|Ž t|Ž ¡ d S )N)r   r   r#   )r   r   r$   Zp3r   r   r   r   Ú_curveToOne8   s    zPerimeterPen._curveToOne)Nr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r%   r   r   r'   r   r   r   r   r      s   
)Ú__doc__ZfontTools.pens.basePenr   ZfontTools.misc.bezierToolsr   r   r   r   r	   Ú__all__r   r   r   r   r   r   Ú<module>   s   