o
    ¼Çhi  ã                   @   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   úo/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   sN   t  | |¡ d| _|| _|dkr| jn| j| _|dkr!| j| _	d S | j| _	d S )Nr   gú~j¼t“X?gú~j¼t“H?)
r   Ú__init__ÚvalueÚ	toleranceÚ_addCubicQuadratureÚ_addCubicRecursiveÚ	_addCubicÚ_addQuadraticQuadratureÚ_addQuadraticExactÚ_addQuadratic)ÚselfÚ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 d S r   )Ú_getCurrentPointr   Ú_lineTor   r   r   r   Ú
_closePath*   s   
ÿzPerimeterPen._closePathc                 C   s    |   ¡ }|  jt||ƒ7  _d S r   )r    r   r   )r   r   r   r   r   r   r!   /   s   zPerimeterPen._lineToc                 C   ó   |  j t|||ƒ7  _ d S r   )r   r   ©r   Úc0Úc1Úc2r   r   r   r   3   ó   zPerimeterPen._addQuadraticExactc                 C   r#   r   )r   r   r$   r   r   r   r   6   r(   z$PerimeterPen._addQuadraticQuadraturec                 C   s&   |   ¡ }|  t|Ž t|Ž t|Ž ¡ d S r   )r    r   Úcomplex)r   r   Úp2r   r   r   r   Ú_qCurveToOne9   s   zPerimeterPen._qCurveToOnec                 C   s    |  j t||||| jƒ7  _ d S r   )r   r   r   ©r   r%   r&   r'   Úc3r   r   r   r   =   s    zPerimeterPen._addCubicRecursivec                 C   s   |  j t||||ƒ7  _ d S r   )r   r   r,   r   r   r   r   @   s   z PerimeterPen._addCubicQuadraturec                 C   s,   |   ¡ }|  t|Ž t|Ž t|Ž t|Ž ¡ d S r   )r    r   r)   )r   r   r*   Úp3r   r   r   r   Ú_curveToOneC   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__ÚfontTools.pens.basePenr   ÚfontTools.misc.bezierToolsr   r   r   r   r	   Ú__all__r   r   r   r   r   r   Ú<module>   s   