
    BPc                         d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
mZ  G d dej                  Zedk    r e                                             dS dS )	z7 Interpolate between two paths, respecting their style     N)pairwise)AttributeInterpolatorStyleInterpolatorEqualSubsegmentsInterpolatorFirstNodesInterpolator)inkex_gettextc                   *    e Zd ZdZd Zd Zd Zd ZdS )InterpzInterpolate extensionc                    |                     ddt          dd           |                     ddt          dd	           |                     d
dt          dd           |                     ddt          j        dd           |                     dt          j        dd           |                     dt          j        dd           d S )Nz-ez
--exponent      ?z4values other than zero give non linear interpolation)typedefaulthelpz-sz--steps   znumber of interpolation stepsz-mz--methodequalSubsegmentszmethod of interpolationz-dz--dupTzduplicate endpathsz--styleFz*try interpolation of some style propertiesz--zsortz&use z-order instead of selection order)add_argumentfloatintstrinkexBoolean)selfparss     (/usr/share/inkscape/extensions/interp.pyadd_argumentszInterp.add_arguments'   s   G 	 	
 	
 	
 	)#q7V 	 	
 	
 	
 	&* 	 	
 	
 	
 	'tBV 	 	
 	
 	
 	=	 	 	
 	
 	
 	9	 	 	
 	
 	
 	
 	
    c                    |                                  }|                                 }|s!t          j        t	          d                    |D ]#\  }}t
          }| j        j        dk    rt          }t          j
        ||d|          }| j        j        rt          ||          }| j                                                            t          j                              }|D ]}	|                    |	          }
|                    t          j                              }|
|_        | j        j        r|                    |	          }||_        mt)          j        |j                  |_        %d S )Nz&At least two paths need to be selected
firstNodesd)method)	get_stepsget_copied_path_pairsr   AbortExtension_r   optionsr    r   r   create_from_attributestyler   svgget_current_layeraddGroupinterpolatePathElementpathcopydeepcopy)r   stepsobjectpairselem1elem2r    path_interpolatorstyle_interpolatorgrouptimeinterpolated_pathnewinterpolated_styles                r   effectzInterp.effectI   sl     0022 	T&q)Q'R'RSSS) 	; 	;NUE1F|"l22/ 5 Kuc&! ! ! |! E%6ue%D%D"H..0044U[]]CCE ; ;$5$A$A$$G$G!ii 1 3 344,<% ;);)G)G)M)M& 2CII $ek : :CII;	; 	;r   c                       j         j         fdt           j         j                  D             } j         j        r
dg|z   dgz   }|S )zReturns the interpolation steps as a monotonous array with elements between 0 and 1.
        0 and 1 are added as first and last elements if the source paths should be duplicatedc                 @    g | ]}|d z   j         j        dz   z  z  S )   r   )r%   r1   ).0iexponentr   s     r   
<listcomp>z$Interp.get_steps.<locals>.<listcomp>o   sA     
 
 
 !e*S01h>
 
 
r   r   r?   )r%   rB   ranger1   dup)r   r1   rB   s   ` @r   r!   zInterp.get_stepsg   sp     <(

 
 
 
 
4<-..
 
 
 < 	&C%K1#%Er   c                    | j         j        r| j        j                                        }n| j        j        }d |                                D             }|D ]}|                                 t          |d          }|S )zReturns deep copies of pairs of subsequent objects of the
        current selection, either in z order or in selection order.
        Objects other than path objects are ignored. Transforms are baked in.c                 F    g | ]}t          |t          j                  |S  )
isinstancer   r-   )r@   nodes     r   rC   z0Interp.get_copied_path_pairs.<locals>.<listcomp>   s:     
 
 
D%BS1T1T

 
 
r   F)start)r%   zsortr(   	selectionrendering_ordervaluesapply_transformr   )r   objectsrJ   r2   s       r   r"   zInterp.get_copied_path_pairsw   s     < 	)h(88::GG h(G
 
$^^--
 
 
  	# 	#D  """"we444r   N)__name__
__module____qualname____doc__r   r<   r!   r"   rH   r   r   r
   r
   $   sW         
  
  
D; ; ;<       r   r
   __main__)rU   r/   r   inkex.utilsr   inkex.tweenr   r   r   r   inkex.localizationr   r$   EffectExtensionr
   rR   runrH   r   r   <module>r\      s   * > =                          2 1 1 1 1 1f f f f fU" f f fR z
FHHLLNNNNN r   