
    BPc                         d Z ddlmZmZmZmZmZmZ ddlZddlm	Z	 d Z
d Zd Z G d d	ej                  Zed
k    r e                                             dS dS )z
Generate gears in SVG
    )acoscospiradianssinsqrtN)PathElementc                     t          |           t          |          }} t          |dz  | dz  z
            | z  t          | |z            z
  S )N   )floatr   r   )RbRs     ./usr/share/inkscape/extensions/render_gears.pyinvolute_intersect_angler      sE    "IIuQxxBAA#R!V55    c                 R    | t          |          z  }| t          |          z  }||fS )N)r   r   )radiusanglexys       r   point_on_circler   #   s+    UAUAa4Kr   c                     | d         }| dd          } d                     |d         |d                   }| D ]'}|d                     |d         |d                   z  }(|dz  }|S )Nr      zM{:.5f},{:.5f}z L{:.5f},{:.5f}z)format)pfsvgdr   s       r   points_to_svgdr   )   sw    	!A	!""A""1Q41..D 5 5!((1qt444CKDKr   c                       e Zd ZdZd Zd ZdS )GearszRendered Gearsc                 &   |                     dt          dd           |                     dt          dd           |                     dt          dd	           |                     d
t          dd           |                     ddd           d S )Nz--teeth   zNumber of teeth)typedefaulthelpz--pitchg      4@zCircular Pitchz--anglezPressure Anglez--centerdiameterzDiameter of holez--unitpxz"unit for pitch and center diameter)r%   r&   )add_argumentintr   )selfparss     r   add_argumentszGears.add_arguments6   s    )#r@QRRR)%DTUUU)%DTUUUUD?Q 	 	
 	
 	
 	d)M 	 	
 	
 	
 	
 	
r   c           	   #     /0K   | j         j        /| j                            t	          | j         j                  | j         j        z             }| j         j        }| j                            t	          | j         j                  | j         j        z             }dt          z  0t          /          |z  t          z  }|dz  }|t          t          |                    z  }|dz  }t          /          |z  }d|z  }	||	z   }
|
dz  }t          |z  dt          /          z  z  }dt          t          |                    dz  z  }/|k     }d}|	|z   }||z
  }|dz  }0dt          /          z  z  }t          ||          }t          ||
          |z
  }/0fdt          /          D             }g }|D ]}||z
  }||z
  }||z   }||z   }||z   }||z
  }t!          ||          }t!          ||          } t!          |
|          }!t!          ||          }"t!          ||          }#t!          |
|          }$||k    rF|t          ||          z
  }%||%z
  }&||%z   }'t!          ||&          }(t!          ||'          })|(| |!|$|#|)g}*n*t!          ||          }(t!          ||          })|(|| |!|$|#|"|)g}*|                    |*           t%          |          }+ddt	          | j                            d	                    d
},t'                      }-|,|-_        |+|-_        |-V  |dk    r%t'          j        d|dz            }.|,|._        |.V  d S d S )Ng       @g      ?r   g        g      @c                 :    g | ]}|z  t                    z  S  )r   ).0r   teethtwo_pis     r   
<listcomp>z"Gears.generate.<locals>.<listcomp>y   s(    EEE1AJu-EEEr   z#000000none1px)strokefillzstroke-width)r   r   )optionsr1   svgunittouustrpitchunitr   centerdiameterr   r   r   r   r   r   ranger   extendr   r	   stylepatharc)1r*   r<   r   r>   pitch_diameterpitch_radiusbase_diameterbase_radiuspitch_diametrialaddendumouter_radiusouter_diametertoothundercutneeds_undercut	clearancededendumroot_radiusroot_diameterhalf_thick_anglepitch_to_base_anglepitch_to_outer_anglecenterspointscpitch1base1outer1pitch2base2outer2b1p1o1b2p2o2pitch_to_root_angleroot1root2r1r2p_tmprB   rA   gearrC   r1   r2   s1                                                  @@r   generatezGears.generateA   s     "!!#dl&8"9"9DL<M"MNNL 	 **+,,t|/@@
 
 r u-2%+ 'WU^^)<)<<#c) !<<.8 )) $h.%+ n$uU||);< #genn--23) 	 i' #X-#c)!S5<<%786{LQQ$[,??BUU 	 FEEEEeEEE "	! "	!A ))F00E22F))F00E22F !e44B v66B v66B e44B v66B v66B[((&9<T= = '# !44!44$[%88$[%88RRR0$[%88$[%88RRRR8MM%    f%%   1 1% 8 899
 

 }}
	


C/&.1*<==CCIIIIII  r   N)__name__
__module____qualname__container_labelr,   rl   r/   r   r   r!   r!   3   s<        &O	
 	
 	
p p p p pr   r!   __main__)__doc__mathr   r   r   r   r   r   inkexr	   r   r   r   GenerateExtensionr!   rm   runr/   r   r   <module>rw      s   (  3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2       6 6 6
    ~ ~ ~ ~ ~E# ~ ~ ~B z	EGGKKMMMMM r   