HEX
Server: Apache
System: Linux opal14.opalstack.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
User: curbgloabal_opal (1234)
PHP: 8.1.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/share/inkscape/extensions/measure.pyc
�
��Yc@sdZddlZddlZddlZddlZddlZddlZddlZyejej	d�Wn'ej
k
r�ejej	d�nXej�yddlZWn!ej
ed��e�nXejdddd	gd
dddgddddgddd
dgg�Zejddd
dgddddgddddgddddgg�Zejddddgddddgd	dddgddddgg�Zejddddgddddgddddgdd	ddgg�Zejddddgdddd
gddddgddddgg�Zd �Zd!�Zd"�Zd#�Zd$�Zd%d&�Zd%d'�Zd%d(d)�Zd(d*�Zd+�Zd,�Z d-�Z!d.�Z"d/ej#fd0��YZ$e%d1kre$�Z&e&j'�ndS(2sU
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

Copyright (C) 2015 ~suv <suv-sf@users.sf.net>
Copyright (C) 2010 Alvin Penner
Copyright (C) 2006 Georg Wiora
Copyright (C) 2006 Nathan Hurst
Copyright (C) 2005 Aaron Spike, aaron@ekips.org

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

TODO:
 * should use the standard attributes for text
 * Implement option to keep text orientation upright 
    1. Find text direction i.e. path tangent,
    2. check direction >90 or <-90 Degrees
    3. rotate by 180 degrees around text center
i����NttCs�Failed to import the numpy modules. These modules are required by this extension. Please install them and try again.  On a Debian-like system this can be done with the command, sudo apt-get install python-numpy.iiii����i����ii#i
i���i���iii����i�ii-i��i��ii��i�i	ii����ii����cCs'tg|D]}t|�d^q
�S(Ni(tsumtlen(tcsptp((s)/usr/share/inkscape/extensions/measure.pytnumsegsFscCs||||S(N((tv1tv2R((s)/usr/share/inkscape/extensions/measure.pytinterpcoordHscCs2t|d|d|�t|d|d|�gS(Nii(R	(tp1tp2R((s)/usr/share/inkscape/extensions/measure.pytinterppointsJscCs9|\}}|\}}tj||d||d�S(Ni(tmathtsqrt(t.0t.1tx1ty1tx2ty2((s)/usr/share/inkscape/extensions/measure.pyt
pointdistanceLscCs?t|d|d�t|d|d�t|d|d�S(Niii(R(tsp1tsp2((s)/usr/share/inkscape/extensions/measure.pytbezlenapprxNsg�?cCs:|\}}|\}}||||||||gS(N((RRttRRRR((s)/usr/share/inkscape/extensions/measure.pyttpointPsc	Cs�t|d|d|�}t|d|d|�}t|d|d|�}t|||�}t|||�}t|||�}|d|d|g|||g||d|dggS(Niii(R(	RRRtm1tm2tm3tm4tm5tm((s)/usr/share/inkscape/extensions/measure.pytcspbezsplitRsg����MbP?cCsK|d|d|d|df}tj|||�}t|||�S(Niii(tbezmisctbeziertatlengthR!(RRtlt	tolerancetbezR((s)/usr/share/inkscape/extensions/measure.pytcspbezsplitatlengthZs&cCs6|d|d|d|df}tj||�S(Niii(R"tbezierlength(RRR%R&((s)/usr/share/inkscape/extensions/measure.pytcspseglength^s&cCs�d}g}xq|D]i}|jg�xStdt|��D]<}t||d||�}|dj|�||7}q<WqW||fS(Niii����(tappendtxrangeRR)(RttotaltlengthstsptiR$((s)/usr/share/inkscape/extensions/measure.pyt	csplengthas

cCsvd}xh|D]`}t|�dkr+q
nx\tt|��D]H}|d||ddd||dd||ddd7}q>Wx�tdt|��D]�}tj||ddd||ddd||dd||ddg�}tj||ddd||ddd||dd||ddg�}|d|t|jd7}q�Wq
W|S(Ngig�?iig333333�?(ii(Rtrangetnumpytmatrixtmat_areatT(RtareaR.R/tvec_xtvec_y((s)/usr/share/inkscape/extensions/measure.pytcspareaks
FSS%c		Cs�t|�}d}d}t|�dkrAtjtd��d	Sxn|D]f}xtt|��D]�}|||ddd||ddd||dd||ddd||ddd||ddd7}|||ddd||dd||ddd||ddd||ddd||ddd7}qaWxLtdt|��D]5}tj||ddd||ddd||dd||ddg�}tj||ddd||ddd||dd||ddg�}tj|t	|j
d
|t|j
d|t|j
d|t
|j
d
g�}|||j
dd7}|||j
dd7}quWqHW||||fS(Ngg:�0�yE>s-Area is zero, cannot calculate Center of Massiiiii(ii(ii(ii(ii(ii(ii(ii(R9tabstinkexterrormsgt_R1RR2R3t
mat_cofm_0R5t
mat_cofm_1t
mat_cofm_2t
mat_cofm_3(	RR6txctycR.R/R7R8tvec_t((s)/usr/share/inkscape/extensions/measure.pytcspcofmvs"
z~SSW!cCs8tjj|tjdd�idd6�}||_dS(Nttspantsvgs"font-size:65%;baseline-shift:supertstyle(R;tetreet
SubElementtaddNSttext(tnodeRLtsuper((s)/usr/share/inkscape/extensions/measure.pytappendSuperScript�s+tLengthcBsDeZd�Zd�Zd�Zd�Zdd�Zdd�ZRS(c
Cstjj|�|jjddddddddd	d
d�|jjddddddd
ddd
d�|jjdddddddddd
d�|jjdddddddddd
d�|jjdddddddddd
d�|jjdddddddddd
d�|jjd dddddd!ddd
d"�|jjd#dddd$dd%dd&d
d'�|jjd(d)dddddd*dd+d
d,�|jjd-d.dddd$dd/dd0d
d1�|jjd2d3dddddd4dd5d
d6�|jjd7d8dddddd9dd:d
d;�|jjd<d=dddd$dd>dd?d
d@�|jjdAdBddddCddDdtd
dE�|jjdFddddddGddHd
dI�|jjdJddddddKddLd
dM�dS(NNs--typetactiontstorettypetstringtdesttmtypetdefaulttlengththelpsType of measurements--formattmformatt
textonpathsText Orientations--presetFormattpresetFormatt	TaP_startsPreset text layouts
--startOffsettstartOffsettcustomsText Offset along Paths--startOffsetCustomtinttstartOffsetCustomi2s--anchortanchortstartsText Anchors
--positiontpositions
Text Positions--angletfloattangleitAngles-fs
--fontsizetfontsizeisSize of length lable text in pxs-os--offsettoffseti����sThe distance above the curves-us--unittunittmmsThe unit of the measurements-ps--precisiont	precisionis0Number of significant digits after decimal points-ss--scaletscaleis"Scale Factor (Drawing:Real Length)s-rs--orienttinkbooltorients Keep orientation of text uprights--tabttabtsamplings'The selected UI-tab when OK was presseds
--measurehelptmeasurehelpRtdummy(R;tEffectt__init__tOptionParsert
add_optiontTrue(tself((s)/usr/share/inkscape/extensions/measure.pyRu�s�cCs�|jjdkr|j�nt|jj�}|jd�}|jj|9_d}|jj�}|j	d�rIt
jdd|j	d��j�j
dd�\}}}}|j|j	d��t|�}|j|j	d	��t|�|kr!|j|j	d	��t|�}n||jd�:}|jj|:_n|||jd
|jj�9}xu|jj�D]d\}	}
|
jtjdd�krztj|
dd
d
gd
dd
gg�}tj|
j	d��}tj||�|jjdkrDt|�\}
}tjj|
j�tjdd��|_ n�|jjdkr�t!t"|�||jj#�}tjj|
j�tjdd��|_ nxt$|�\}}tjj|
j�tjdd��|_ |j j%dd|
j	d��|j&|j |||�qzt'j(dt)|�dit*|||jj#|�d6�j�}|jjdkr<|jj+}|dkr�t)|jj,�d}n|jjdkr�|j-|j dd|d|jj|	|jj.||jj�q�|j-|j dd|d|jjd|	|jj.||jj�q�|jjdkr�|jj/dkr{t$|�\}}d}n�|jj/dkr�tj0|
g�}|d|d |dd!}|d"|d#|d"d!}d}n2|ddd d}|ddd d }d$}|jjdkr|j1|j |||d|jj|	|t|jj2�|jj|jjd"�q�|j1|j |||d|jjd|	|t|jj2�|jj|jjd"�q�qzqzWdS(%Ns	"presets"t1pxg�?tviewBoxs +|, +|,t itwidththeightt1tpathRGgtdRXRLR6tidtMassCenter_s	%(len)25.tfRs"textonpath"R_t%is^2s"fixedtext"tmasstmiddletcenterig@iiRc(3toptionsRZt	setPresetR`RltunittouuRitdocumenttgetroottgettretsubtstriptsplitReRhRjtselectedt	iteritemsttagR;RKtsimpletransformtcomposeParentstcubicsuperpatht	parsePathtapplyTransformToPathRVR0RIRJt	getparenttgroupR:R9RmREtsettaddCrosstlocaletformattstrtroundR^Rat
addTextOnPathRbRdtcomputeBBoxtaddTextWithTspanRf(RytprecRmtfactortdoctviewxtviewytviewwtviewhR�RMtmatRtslengthststotalRBRCtlenstrR^ttxttyRbtbbox((s)/usr/share/inkscape/extensions/measure.pyteffect�sn
<"(%!*- -* DBF		W\cCsei	dddddgd6dddddgd6dddddgd6dd	dddgd
6dddddgd6dd
dddgd6dddddgd6dddddgd6dddddgd6}|jjdkr�d|jj}n|jj}||d|j_||d|j_||d|j_||d|j_||d|j_dS(Ns"textonpath"s50%Rctdefault_lengths"fixedtext"gtdefault_areatdefault_cofms0%R]R�t
TaP_middles100%tendtTaP_endtFT_startR�tFT_bboxR�tFT_massRWtdefault_iiiii(	tNoneR�R\RVRZR^RbRdRf(Rytpreset_dicttcurrent_preset((s)/usr/share/inkscape/extensions/measure.pyR�s$cCs�d|}|jddt||�t|�t|�t|�t|�t|�t|�t|�f�|jddtd|��dS(NiR�s#m %s,%s %s,0 %s,0 m %s,%s 0,%s 0,%sRHs(stroke:#000000;fill:none;stroke-width:%sg�?(R�R�(RyRMtxtyRmR$((s)/usr/share/inkscape/extensions/measure.pyR�)s
bic	CsCtjj|tjdd��}	i	dd6dd6|d6t|jj�d6d	d
6dd6d
d6d
d6dd6}
|	jdtj	|
��|	jtjdd�d|�|	jd|�|	jdt|��|ddkrt
|	d�t|�d |	_nt|�|	_|jdt|��|jdt|��dS(NttextPathRGR�s
text-aligntbottomsvertical-alignstext-anchors	font-sizes1.0sfill-opacitytnonetstroketnormalsfont-weights
font-styles#000000tfillRHthreftxlinkt#R^tdyi����s^2t2R�R�(R;RIRJRKR�R�RhR�tsimplestyletformatStyleRORL(RyRMR�R�RLR�RbR^R�tnewts((s)/usr/share/inkscape/extensions/measure.pyR�.s! 
c	CsFtjj|tjdd�idtjdd�6�}	i	dd6dd	6|d
6t|jj�d6dd
6dd6dd6dd6dd6}
|	jdtj	|
��|	jdt|��|ddkr�t
|	d�t|�d |	_nt|�|	_|jdt|��|jdt|��|jdd|||f�dS(NRFRGtlinetroletsodipodiR�s
text-alignR�svertical-alignstext-anchors	font-sizes1.0sfill-opacityR�R�R�sfont-weights
font-styles#000000R�RHR�i����s^2R�R�R�t	transformsrotate(%s, %s, %s)(R;RIRJRKR�R�RhR�R�R�RORL(RyRMR�R�RLR�RbRfR�R�R�((s)/usr/share/inkscape/extensions/measure.pyR�Bs7
(t__name__t
__module__RuR�R�R�R�R�(((s)/usr/share/inkscape/extensions/measure.pyRP�s	C	B		t__main__((t__doc__R�R�R;R�R�R�R"t	setlocaletLC_ALLtErrortlocalizeR2R<R=texitR3R4R>R?R@RARR	RRRRR!R'R)R0R9RERORtRPR�tetaffect(((s)/usr/share/inkscape/extensions/measure.pyt<module>"sN
KKKKK						
			�