
    BPc)                         d Z ddlZddlmZmZmZ ddl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 )	z
This extension module can measure arbitrary path and object length
It adds text to the selected path containing the length in a given unit.
Area and Center of Mass calculated using Green's Theorem:
http://mathworld.wolfram.com/GreensTheorem.html
    N)TextElementTextPathTspan)cspareacspcofm	csplength)inkex_gettextc                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	dd	Z
dd
ZdS )MeasureLengthz$Measure the length of selected pathsc                    |                     dddd           |                     d|                                 | j        d           |                     d	d
d           |                     ddd           |                     dt          dd           |                     ddd           |                     ddd           |                     dt          dd           |                     ddt          dd           |                     ddt          d d!           |                     d"d#d$d%           |                     d&d't          d(d)           |                     d*d+t          d,d-           d S ).Nz--typemtypelengthzType of measurement)destdefaulthelpz--methodzText Orientation method)typer   r   z--presetFormatr   zPreset text layout)r   r   z--startOffsetcustomzText Offset along Pathz--startOffsetCustom2   z--anchorstartzText Anchorz
--positionzText Positionz--angler   Anglez-fz
--fontsize   zSize of length label text in pxz-oz--offsetizThe distance above the curvez-uz--unitpxzThe unit of the measurementz-pz--precision   z0Number of significant digits after decimal pointz-sz--scaleg      ?z"Scale Factor (Drawing:Real Length))add_argument
arg_methodmethod_textonpathintfloat)selfparss     )/usr/share/inkscape/extensions/measure.pyadd_argumentszMeasureLength.add_arguments)   s   7H;P 	 	
 	
 	
 	""**	 	 	
 	
 	
 	i6J 	 	
 	
 	
 	X4L 	 	
 	
 	
 	!R>V 	 	
 	
 	
 	*gMJJJ,oNNN)%III2 	 	
 	
 	
 	/ 	 	
 	
 	
 	(D/L 	 	
 	
 	
 	C 	 	
 	
 	
 	5 	 	
 	
 	
 	
 	
    c                 \   t          | j        j                  }| j                            d| j        j        z             }| j        xj        |z  c_        | j                            d| j        j                  }| j        j	        
                    t          j                  }|s!t          j        t          d                    |D ]a}|j                            |                                                                          }|                                                                 }| j        j        dk    rLt+          |          \  }}	|                                                    t/                                | _        nU| j        j        dk    ret3          t5          |          |z  | j        j        z            }	|                                                    t/                                | _        n	 t9          |          \  }
}n3# t:          $ r&}t          j        t=          |                    d }~ww xY w|                                                    t          j                              | _        | j                            dd|                     d          z              | !                    | j        |
||           || j        _        tE          |	|z  | j        j        z  |          }| j        #                    |t=          |                     cd S )N1   z'Please select at least one path object.r   areaidMassCenter_)$r   options	precisionsvgviewport_to_unitdocument_unitoffsetunit_to_viewportunit	selectionfilterinkexPathElementAbortExtension_path	transformcomposed_transformto_superpath	getparentr   r   addr   groupabsr   scaler   
ValueErrorstrsetget	add_crossroundmethod)r   precr@   factorfilterednodecspinverse_parent_transformslengthsstotalxcycerrvals                 r!   effectzMeasureLength.effect_   s   4<)**))$(((
 
 	u$**1dl.?@@ 8%,,U->?? 	U&q)R'S'STTT 	0 	0D)%%d&=&=&?&?@@MMOOC(,(8(8(K(K(M(M'M$|!X--#,S>> &!^^--11+--@@

#v--WS\\F2T\5GGHH!^^--11+--@@

9$S\\FB! 9 9 9.s3xx8889!^^--11%2C2E2EFF

t]TXXd^^%CDDDtz2r5999'?
$$,*<<dCCCLc#hh////-	0 	0s   H
I !IIc           
         | j         j        }|dk    rt          | j         j                  dz   }| j         j        dk    rG|                     | j        dd|dz   | j         j        z   || j         j        || j         j	                   d S |                     | j        dd|dz   | j         j        z   dz   || j         j        || j         j	                   d S )Nr   %r   r    ^2)
r*   startOffsetrB   startOffsetCustomr   add_textonpathr>   r1   anchorr/   )r   rK   lenstrrY   s       r!   r   zMeasureLength.method_textonpath   s    l.(""dl<==CK<))
t|00##	 	 	 	 	 
t|0047##	 	 	 	 	r#   c                 z   |                     d          }|j                            |                                                                          }| j        j        dk    rt          |          \  }}d}nh| j        j        dk    r"|                    d          }|j	        \  }}d}n6|d         d         d         d         }|d         d         d         d         }d}| j        j
        d	k    rd|                     | j        |||d
z   | j        j        z   |t          | j        j                   | j        j        | j        j        dz  z              d S |                     | j        |||d
z   | j        j        z   dz   |t          | j        j                   | j        j         | j        j        dz  z              d S )Nr(   massmiddlecenterTr   r&   r   r   rW   r   rX   )rD   r8   r9   r:   r;   r*   positionr   bounding_boxra   r   add_fixedtextr>   r1   r   angler/   fontsize)	r   rK   r]   _idrL   txtyr\   bboxs	            r!   method_fixedtextzMeasureLength.method_fixedtext   s   hhtnni!!$"9"9";";<<IIKK< F**S\\FBFF\"h..$$T**D[FBFFQ1aBQ1aBF<))
t|00T\'(((#dl&;a&??     
t|0047T\'((($$t|'<q'@@    r#   c                    g d| j         ddddg| j         ddddg| j         ddddg| j         ddddg| j        dddd	g| j        dddd	g| j        ddd
d	g| j        dddd	gd	}| j        j        dk    rd| j        j        z   }n| j        j        }||         d         | j        _        ||         d         | j        _        ||         d         | j        _        ||         d         | j        _        ||         d         }| |||          S dS )zA preset option for alignments)NNNNNz50%r   Nz0%r`   z100%endg        ra   r_   )	default_cofmdefault_length	TaP_start
TaP_middleTaP_enddefault_areaFT_startFT_bboxFT_massr   default_r&   r         r   )	r   rk   r*   presetFormatr   rY   r\   rb   re   )r   rK   r]   preset_dictcurrent_presetrG   s         r!   method_presetszMeasureLength.method_presets   sM    ;::#5ugtTR0$tL15(D$O.tTJ!2D$M.dGSI-tT8SI-tT63G

 

 <$	11'$,*<<NN!\6N#.~#>q#A ).9!< +N ;A >(8;^,Q/6$''' r#   c                    d|z  }|                     ddt          ||z
            dt          |          dt          |          dt          |          dt          |           dt          |           dt          |          dt          |                     |                     d	d
t          d|z            z             d S )Nrx   dzm ,rW   z,0 z,0 m z 0,stylez(stroke:#000000;fill:none;stroke-width:%sg      ?)rC   rB   )r   rK   xyr@   ls         r!   rE   zMeasureLength.add_cross   s    IC1q5zzzz3q66663q66663q66663r7777CGGGGSVVVVSQRVVVU	
 	
 	

 	Ds3QV;GWGWWXXXXXr#   r   c	           
      t   |                     t                                }	dd|t          | j        j                  dddddd	}
|
|	_        ||	_        |	                    d|           |	                    d	t          |                     |d
d          dk    rD|	                    t          j
        d                     t          |          d d
         |	_        nt          |          |	_        |                    dt          |                     |                    dt          |                     d S )Nra   bottom1.0nonenormal#000000	z
text-alignzvertical-alignztext-anchorz	font-sizezfill-opacitystrokezfont-weightz
font-stylefillrY   dyrX   2r   r   )r=   r   rB   r*   rf   r   hrefrC   appendr   superscripttext)r   rK   r   r   r   _noder\   rY   r   newss              r!   r[   zMeasureLength.add_textonpath   s   hhxzz"""&!T\233!#"

 

 	{+++c"gg9JJu(--...4yy"~CHH4yyCHc!ffc!ffr#   c           
      $   |                     t                                }|                    dd           dd|| j                            | j        j                  dddddd		}	|	|_        |                    d
t          |                     |dd          dk    rD|	                    t          j
        d                     t          |          d d         |_        nt          |          |_        |                    dt          |                     |                    dt          |                     |                    dd|d|d|d           |                                                                 |j        z  |_        d S )Nzsodipodi:rolelinera   r   r   r   r   r   r   r   r   rX   r   r   r   r9   zrotate(z, ))r=   r   rC   r,   r-   r*   rf   r   rB   r   r   r   r<   r:   r9   )
r   rK   r   r   r   r\   re   r   r   r   s
             r!   rd   zMeasureLength.add_fixedtext  sf   hhuww((("&!224<3HII!#"

 

 	c"gg9JJu(--...4yy"~CHH4yyCHc!ffc!ffeeeQQQBCCC..**==???$.Pr#   N)r   )__name__
__module____qualname____doc__r"   rT   r   rk   r}   rE   r[   rd    r#   r!   r   r   &   s        ..4
 4
 4
l$0 $0 $0L  6! ! !F( ( (6Y Y Y   6Q Q Q Q Q Qr#   r   __main__)r   r4   r   r   r   inkex.bezierr   r   r   inkex.localizationr	   r7   EffectExtensionr   r   runr   r#   r!   <module>r      s   0   . . . . . . . . . . 4 4 4 4 4 4 4 4 4 4 1 1 1 1 1 1tQ tQ tQ tQ tQE) tQ tQ tQn zMOO r#   