
    BPcI                     B   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	m
Z
  ed          \  ZZd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z G d de          Z G d dej                  Z e!dk    r e             "                                 dS dS )ag  
This extension allows you to draw various triangle constructions
It requires a path to be selected
It will use the first three nodes of this path

Dimensions of a triangle__

       /`__
      / a_c``--__
     /           ``--__ s_a
s_b /                  ``--__
   /a_a                    a_b`--__
  /--------------------------------``B
 A              s_b
    )acoscospisinsqrttanN)PathElementCircle   c                    | dk    r*|j         }|j        t          |j                  |j        d}n$| }|j        t          |j                  |j        d}t          ||          \  }}	t          |          t          |	          t          |          d}
|	                    t          di |
          }||_        ||_        d S )Nr   strokezstroke-widthfill)cxcyr )d_radd_colstrd_thd_fillc_colc_thc_fillget_cartesian_ptaddr
   stylelabel)radcentreparamsr   nameparentr   
circ_styler   r   circ_attribselems               4/usr/share/inkscape/extensions/draw_from_triangle.pydraw_SVG_circler)   .   s     axxKk
OOL
 


 k
OOL
 

 ff--FBb''Rs1vv>>L::f,,|,,--DDJDJJJ    c                 j   t          | |          \  }}}|                    t                                }dt          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   t          |d                   z   dz   |_        |j        t          |j                  |j        d|_        ||_	        d S )NM r   ,    L z zr   )
get_cartesian_trir   r	   r   pathl_coll_thl_fillr   r   )	vert_matr"   r   r#   r$   p1p2p3r'   s	            r(   draw_SVG_trir9   H   s[   "& JBB ::kmm$$D
be**	
	 be**	 		
 be**	 	 be**	 	 be**		 
	 be**	 	 be**	 	 be**	  !	 	I( +EJ DJ
 DJJJr*   c                 X   | \  }}|\  }}|                     t                                }	|j        t          |j                  |j        d|	_        dt          |          z   dz   t          |          z   dz   t          |          z   dz   t          |          z   |	_        ||	_        d S )Nr   r,   r-   r/   )	r   r	   r2   r   r3   r4   r   r1   lavel)
abr   r#   r$   x1y1x2y2lines
             r(   draw_SVG_linerC   i   s    HRHR::kmm$$D+EJ DJ
 s2ww$s2ww.6R@3FRPDIDJJJr*   c           
          t          d          D ]N}t          | |         |          }t          |d         | dz           |||dz   t          |          z   |           Od S )N   :)ranger   rC   r   )r5   r"   widthr#   r$   ioppositepoints          r(   draw_vertex_linesrK   w   st    1XX 
 
(!f==1Iqb1f}eTCZ#a&&5H&	
 	
 	
 	

 
r*   c                 ^    | \  }}|\  }}t          ||z
  ||z
  z  ||z
  ||z
  z  z             S )zfind the pythagorean distance)r   )r<   r=   x0y0r>   r?   s         r(   distancerO      sA    HRHRbR"W%bR"W(==>>>r*   c                 j    |t                    | t                    z
  |t                   | t                   fS )z&get the vector from (x0,y0) to (x1,y1))XY)r<   r=   s     r(   vector_from_torS      s#    Q4!A$;!ad""r*   c                    |d         d         | d         z  |d         d         | d         z  z   |d         d         | d         z  z   }|d         d         | d         z  |z  }|d         d         | d         z  |z  }||d         d         d         z  ||d         d         d         z  z   ||d         d         d         z  ||d         d         d         z  z   fS )Nr   r.   r   r   )tpdenomc1c2s        r(   r   r      s    aDGadNQqT!Wqt^+ad1g!n<E	
1a1Q4%	B	
1a1Q4%	B!Q
?R!A$q'!*_,b1Q471:oQqT!WQZ.OOOr*   c                     | \  \  }}}\  }}}\  }}	}
t          |||f|          }t          |||f|          }t          ||	|
f|          }|||fS )z7get the cartesian points from a trilinear vertex matrix)r   )argr"   t11t12t13t21t22t23t31t32t33r6   r7   r8   s                 r(   r0   r0      sk    8;5OS#s_c3osC	3S/6	2	2B	3S/6	2	2B	3S/6	2	2Br2:r*   c                 T    | | z  ||z  z   ||z  z
  d| z  |z  z  }t          |          S )Nr   )r   )r<   r=   ccosxs       r(   angle_from_3_sidesrh      s5    EAEMAE!a!eai0D::r*   c                    |                      ddt          |dz   dz            z   dz             } |                      ddt          |dz   dz            z   dz             } |                      ddt          |d	z   dz            z   dz             } |                      d
dt          |dz   dz            z   dz             } |                      ddt          |dz   dz            z   dz             } |                      ddt          |d	z   dz            z   dz             } |                      dd          } |                      dd          } | S )Ns_az
params[0][r   rE   ]s_br.   s_cr   a_az
params[1][a_ba_careazparams[4][0]	semiperimzparams[4][1])replacer   )stringoss     r(   translate_stringrv      sK    ^^|c26Q,///#5 F ^^|c26Q,///#5 F ^^E<#rAvl2C2C#Cc#IJJF^^E<#rAvl2C2C#Cc#IJJF^^E<#rAvl2C2C#Cc#IJJF^^E<#rAvl2C2C#Cc#IJJF^^FN33F^^K88FMr*   c                     g }t          d          D ]W}| }t          ||          }t          d|                    d          z             }|                     ||                     X|S )NrE   lambda params: ")rG   rv   evalstripappend)tcfr"   
trilin_ptsrI   tempfuncs         r(   pt_from_tcfr      s     J1XX 
 
a((

3/
 
 	DLL	
 	
 	
 	
 r*   c                 r    t          | j        j                  }t          |          dk     rg S |dd         S )zGreturns a list of first n points (x,y) in an SVG path-representing noderE   N)listr1   control_pointslen)nodenpointss      r(   get_n_points_from_pathr      s6    $)*++F
6{{Q	"1":r*   c                     | t           dz  k    s1| t            dz  k    s"| dt           z  dz  k    s| dt           z  dz  k    rdS dt          |           z  S )Nr   rE       h] r.   )r   r   xs    r(   secr      sT    	R!VqRC!G||qAFQJ!rBw{:J:J|3q66zr*   c                     | dk    s'| t           k    s| dt           z  k    s| dt           z  k    rdS dt          |           z  S Nr   r   r   r.   )r   r   r   s    r(   cscr      @    AvvbARKK1R<<|3q66zr*   c                     | dk    s'| t           k    s| dt           z  k    s| dt           z  k    rdS dt          |           z  S r   )r   r   r   s    r(   cotr      r   r*   c                       e Zd Zd ZdS )Stylec                 *   |                     d          | _        |                     d          | _        d| _        d| _        |                     d          | _        d| _        d| _        |                     d          | _        d| _	        d| _
        d S )N4px2pxz#aaaaaaz#000000none)unittouur   r   r   r   r3   r4   r2   r   r   r   )selfsvgs     r(   __init__zStyle.__init__   s    \\%((
LL''	
 LL''	
 LL''	


r*   N)__name__
__module____qualname__r   r   r*   r(   r   r      s#            r*   r   c                       e Zd Zd Zd ZdS )DrawFromTrianglec                 ^   |                     d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     d	t          j        d           |                     d
t          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dt          j        d           |                     dd           |                     dd           |                     dt          j        d           |                     dt          j        d           |                     d d!           |                     d"t          j        d           |                     d#t          j        d           d S )$Nz--tabz--circumcircleF)typedefaultz--circumcentrez
--incirclez
--incentrez--contact_triz--excirclesz--excentresz--extouch_triz--excentral_triz--orthocentrez--orthic_triz--altitudesz--anglebisectorsz
--centroidz--ninepointcentrez--ninepointcirclez--symmediansz--sym_pointz	--sym_triz--gergonne_ptz
--nagel_ptz--modetrilin)r   z
--cust_strzcos(a_a):cos(a_b):cos(a_c)z	--cust_ptz--cust_radiusz--radiuszs_a*s_b*s_c/(4*area)z--isogonal_conjz--isotomic_conj)add_argumentinkexBoolean)r   parss     r(   add_argumentszDrawFromTriangle.add_arguments   sF   '"""*NNN*NNN,U]EJJJ,U]EJJJ/uMMM-emUKKK-emUKKK/uMMM+%-OOO/uMMM.u}eLLL-emUKKK,5=%PPP,U]EJJJ-EM5QQQ-EM5QQQ.u}eLLL-emUKKK+EM5III/uMMM,U]EJJJ(H555,0LMMM+EM5III/uMMM*.DEEE+%-OOO+%-OOOOOr*   c                    | j         }g }| j        j                            t          j                  D ]}t          |d          }t          |          dk    rt          | j                  }| j        	                                
                    t          j                            d                    }dt          |d         d                   z   dz   t          |d         d                   z   dz   |_        ddg|d         d         |d         d         z
  |d         d         |d         d         z
  g|d         d         |d         d         z
  |d         d         |d         d         z
  gg}t          |d         |d                   }t          |d         |d                   }t          |d         |d                   }	|||	f}
t!          ||	|          }t!          ||	|          }t!          |||	          }|||f}t#          |d         |d                   }t#          |d         |d                   }t#          |d         |d                   }||f}||z   |	z   d	z  }t%          |||z
  z  ||z
  z  ||	z
  z            }||f}|
||||f}|j        s|j        rp||z  |	z  d
|z  z  }t+          |          t+          |          t+          |          f}|j        rt-          d|||d|           |j        rt-          ||||d|           |j        s|j        r?g d}|j        rt-          d|||d|           |j        r||z  }t-          ||||d|           |j        rL||	z  | |z   |	z   z  }||	z  ||z
  |	z   z  }||z  ||z   |	z
  z  }d||f|d|f||dff}t5          |||d|           |j        rC| |z   |	z   |z  }||z
  |	z   |z  }||z   |	z
  |	z  }d||f|d|f||dff}t5          |||d|           |j        r$t;          d|          }t-          d|||d|           |j        rodt?          |          t?          |          gt?          |          dt?          |          gt?          |          t?          |          dgg}t5          |||d|           |j         r"d|z  d|z  d|	z  g}t-          d|||d|           |j!        s|j"        ryt+          ||z
            t+          ||z
            t+          ||z
            g}|j!        rt-          d|||d|           |j"        r"||z  |	z  d|z  z  }t-          ||||d|           |j#        rodt?          |          t?          |          gt?          |          dt?          |          gt?          |          t?          |          dgg}tI          |||d|           |j%        rd}tI          |||d|           |j&        s|j'        s|j(        rd}|j(        rt5          |||d|           tS          d          D ]r}|j&        r8|||
|         z
  z  }t-          |||         ||dt          |          z   |           |j'        r*t-          d||         ||dt          |          z   |           s|j*        s|j+        rBd||	f|d|	f||dff}|j*        rt5          |||d |           |j+        rtI          |||d!|           |j,        r|||	f}t-          d|||d"|           |j-        r$t;          d#|          }t-          d|||d$|           |j.        r$t;          d%|          }t-          d|||d&|           |j/        s|j0        s|j1        s|j2        rg }|j3        d'k    rtS          d          D ]~}|j4        5                    d(          }tm          ||         d          ||<   to          d)||         8                    d*          z             }|9                     ||                     n|j4        } t;          | |          }|j/        rt-          d|||d+|           |j0        rYtm          |j:        d          }to          d)|8                    d*          z             } ||          }t-          ||||d,|           |j1        r8g d-}!tS          d          D ]}d||         z  |!|<   t-          d|!||d.|           |j2        r\g d-}"tS          d          D ].}d|d         |         |d         |         z  ||         z  z  |"|<   /t-          d|"||d/|           d S d S d S d S )0NrE   TriangleElementsz
translate(r   r-   r.   )r   g       @   CircumcentreCircumcircle)r.   r.   r.   IncentreIncircleContactTriangleExtouchTrianglezcos(a_b)*cos(a_c)OrthocentreOrthicTriangleCentroidNinePointCentre   NinePointCircleAltitude))r   r.   r.   )r.   r   r.   )r.   r.   r   AngleBisectors))r.   r.   )r.   r   r.   )r.   r.   r   ExcentralTrianglez	Excircle:z	Excentre:SymmedialTriangle	SymmedianSymmmedianPointz1/(s_a*(s_b+s_c-s_a))GergonnePointz(s_b+s_c-s_a)/s_a
NagelPointr   rF   rx   ry   CustomTrilinearPointCustomTrilinearCircle)r   r   r   CustomIsogonalConjugateCustomIsotomicConjugate);optionsr   	selectionfilterr   r	   r   r   r   get_current_layerr   Groupnewr   	transformrO   rh   rS   r   circumcentrecircumcircler   r)   incentreincirclecontact_trir9   extouch_triorthocentrer   
orthic_trir   centroidninepointcentreninepointcircle	altitudesrK   anglebisectors	excircles	excentresexcentral_trirG   sym_tri
symmedians	sym_pointgergonne_ptnagel_ptcust_ptcust_radiusisogonal_conjisotomic_conjmodecust_strsplitrv   rz   r{   r|   radius)#r   soptsr   stlayervtxrj   rl   rm   sidesrn   ro   rp   anglesabacbcvecsrr   rq   uvalsr"   r   ptt1t2t3v_matrI   stringsr   rt   isogonalisotomics#                                      r(   effectzDrawFromTriangle.effect  s   \  	 H&--e.?@@ 	2 	2D(q11CCs88q==txB H..0044 233 E +SQ^^;cACAq	NNRUXXEO
 AQSVAY&Aq	CF1I(=>QSVAY&Aq	CF1I(=>C 3q63q6**C3q63q6**C3q63q6**CE %S#s33C$S#s33C$S#s33C3_FAA//BAA//BAA//B8DsSC/IY_-SAYQT_U D 9%E F  N"/ N#IOq4x0#hhC#c((3? N#Ar62~uMMM? N#Ar62~uMMM{ Jbk JYY; J#Ar62z5III; Jy(A#Ar62z5III~ J3Y3$*s"233Y#)c/23Y#)c/2Rr1bkBA;?UFB0A5III~ JdSj3&#-Ci#o,Ci#o,Rr1bkBA;?UFB0A5III~ I !4f==2vr=%HHH} IC#c((+XXq#c((+XXs3xx+
 UFB0@%HHH{ F#gq3wC02vr:uEEE! QR%7 Q#)nnc#)nnc#)nnE% Q#Ar627H%PPP% Qc	C1t84A#Ar627H%PPP| HC#c((+XXq#c((+XXs3xx+
 "%ZGGG  N9!%5EuMMM| r| r/? <# P 4GOOOq 	 	A|  Ia$89'uQx[3q665I5   | 'uQx[3q665I5   z MR] MS#aS!}E: P 4GOOO= M%eVReLLL| M3_2vr3DeLLL~ K !8&AA2vr?EJJJ{ H !4f==2vr<GGGz *R^ *r/? *2CS *7h&&"1XX  "$+"3"3C"8"8%5gaj!%D%D
#-
0@0@0E0EE    		 DLL      % B : V#Ar627MuUUU> W.ry!<<G)GMM#,>,>> D VA#Ar627NPUVVV# (yyH"1XX 0 0&'"Q%i#8VR1JE   # (yyH"1XX P P&'6!9Q<&)A,+FA+N&O#8VR1JE    A =p* *H r*   N)r   r   r   r   r  r   r*   r(   r   r      s;        P P PBL L L L Lr*   r   __main__)#__doc__mathr   r   r   r   r   r   r   r	   r
   rG   rQ   rR   r)   r9   rC   rK   rO   rS   r   r0   rh   rv   r   r   r   r   r   objectr   EffectExtensionr   r   runr   r*   r(   <module>r     s  (   / . . . . . . . . . . . . . . .  % % % % % % % %	qA
  4  B
 
 

 
 
? ? ?# # #
P P P    
  $  &            F   &n n n n nu, n n nb z r*   