
    BPc                         d Z ddlmZmZ ddlmZ ddlZ G d de          Zedk    r e            	                                 dS dS )z
Distorts selected paths, stretching it vertically while squeezing horizontally.

Amount is controlled by ratio parameter.

Curve gives further effect by bunching the surface towards the ends.
    )XY)DiffeoNc                   P    e Zd ZdZ ed           Z ed           Zd ZddZdS )	RubberStretchzDistort selected pathsc                 "    | j         j        dz   S )Nd   )optionsratioselfs    //usr/share/inkscape/extensions/rubberstretch.py<lambda>zRubberStretch.<lambda>$   s    DL$6$<"=     c                 <    t          | j        j        dz  d          S )Nr	   gGz?)minr
   curver   s    r   r   zRubberStretch.<lambda>%   s    #dl&83&>"E"E r   c                 ~    |                     ddt          d           |                     ddt          d           d S )Nz-rz--ratio   )typedefaultz-cz--curve)add_argumentfloat)r   parss     r   add_argumentszRubberStretch.add_arguments'   sB    $	rBBB$	rBBBBBr    c                 v   |D ]>}|dxx         |d         z  cc<   |dxx         |d         z  cc<   |dxx         dz  cc<   ?|dxx         dz  cc<   | j         j        j        }| j         j        j         }|d         |z
  |d         |z
  }}d| j        || j         j        dz  z  dz   z  || j         j        dz  z  dz
  z  z   d| j        z  z  }d| j        || j         j        dz  z  dz   z  || j         j        dz  z  dz
  z  z   d| j        z  z  }	|||	z  z   |d<   |||z  z   |d<   |D ]}|	}
|dz  | j        z  |z  | j         j        z  | j         j        z  d| j        z  z  }| dz  | j        z  |z  | j         j        z  | j         j        z  d| j        z  z  |z  |z  }d|z  }|
|t                   z  ||t                   z  z   |d<   ||t                   z  ||t                   z  z   |d<   |D ]>}|dxx         |d         z  cc<   |dxx         |d         z  cc<   |dxx         dz  cc<   ?|dxx         dz  cc<   d S )Nr         )
bboxcenterxyr   widthr   heightr   r   )r   bptvectsvectbx0by0r#   r$   sx1sy1dx_dxdx_dydy_dxdy_dys                 r   applyDiffeozRubberStretch.applyDiffeo+   s    	 	DGGGs1vGGGGGGs1vGGGGGGrMGGGGA"i y!!AA1jDIOa'(1,.DIOa'(1,.. tzM jDI$q()A-/DI$q()A-// tzM q3wAq3wA 	8 	8DE*  )"	#
 )"# TZ-   *  )/	"
 )/" TZ-     GEd1goQ7DGd1goQ7DGG  	 	DGGGs1vGGGGGGs1vGGGGGGrMGGGGA"r   N)r   )	__name__
__module____qualname____doc__propertyr   r   r   r2   r   r   r   r   r   !   sf          H==>>EHEEFFEC C C? ? ? ? ? ?r   r   __main__)
r6   inkex.utilsr   r   pathmodifierr   inkexr   r3   runr   r   r   <module>r=      s   (                I I I I IF I I IX zMOO r   