
    BPc
                         d Z ddlmZmZmZmZmZmZ ddlZd Z	d Z
d Z G d dej                  Zed	k    r e                                             dS dS )
z
Generate a gear rack as SVG.
    )acoscosradianssinsqrttanNc                     t          |           t          |          }} t          |dz  | dz  z
            | z  t          | |z            z
  S )N   )floatr   r   )RbRs     2/usr/share/inkscape/extensions/render_gear_rack.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  }(|S )z0
    p: list of 2 tuples (x, y coordinates)
    r      NzM{:.3f},{:.3f}zL{:.3f},{:.3f})format)pfsvgdr   s       r   points_to_svgdr   '   sp     	
!A	!""A""1Q41..D 4 4 ''!ad333Kr   c                       e Zd ZdZd Zd ZdS )RackGearzRendered Gear Rackc                     |                     dt          dd           |                     dt          dd           |                     dt          d	d
           d S )Nz--lengthg      Y@zRack Length)typedefaulthelpz	--spacingg      $@zTooth Spacingz--angleg      4@zContact Angle)add_argumentr   )selfparss     r   add_argumentszRackGear.add_arguments6   s_    *5%mTTT+E4oVVV)%OTTTTTr   c              #   ,  K   | j                             t          | j        j                  dz             }| j                             t          | j        j                  dz             }t          | j        j                  }g }d}t          |          |z  }||k     rv|	                    |df           |	                    ||z   |f           |	                    ||z   |f           |	                    ||z   |z   df           ||dz  z  }||k     vt          |          }ddt          | j                             d                    d}t          j        t          t          j        |                    t          |                    V  d S )	Npxr   g       @z#000000none1px)strokefillzstroke-width)styled)svgunittouustroptionslengthspacingr   r   r   appendr   inkexPathElementStyle)	r%   r4   r5   r   pointsr   taspathr.   s	            r   generatezRackGear.generate;   s     ""3t|':#;#;d#BCC(##C(<$=$=$DEE*++ %jj7"&jjMM1a&!!!MM1s7G,---MM1w;0111MM1w;,a01113A &jj f%%   1 1% 8 899
 

 c%+e*<*<&=&=TKKKKKKKKr   N)__name__
__module____qualname__container_labelr'   r=    r   r   r   r   3   s?        *OU U U
L L L L Lr   r   __main__)__doc__mathr   r   r   r   r   r   r7   r   r   r   GenerateExtensionr   r>   runrB   r   r   <module>rH      s   &  4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 6
  	 	 	!L !L !L !L !Lu& !L !L !LH zHJJNN r   