
    CPcA-                         d Z ddlZddlZddlmZmZmZmZ ddlZ G d dej	                  Z
edk    r e
                                             dS dS )zC
Create Voronoi diagram from seeds (midpoints of selected objects)
    N)Group	RectanglePathElementVector2dc                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )Voronoiz&Extension to create a Voronoi diagram.c                    |                     d           |                     dddg dd           |                     dd	d
gd	dd           |                     dt          j        ddd           |                     dddd           d S )Nz--tabz--diagram-typer   diagramType)r   DelaunayBothzDefines the type of the diagram)defaultdestchoiceshelpz
--clip-boxPagezAutomatic from seedsclip_boxz/Defines the bounding box of the Voronoi diagram)r   r   r   r   z--show-clip-boxFshowClipBoxz*Set this to true to write the bounding box)typer   r   r   z--delaunay-fill-optionsdelaunay-no-filldelaunayFillOptionsz(Set the Delaunay triangles color options)r   r   r   )add_argumentinkexBoolean)selfparss     -/usr/share/inkscape/extensions/voronoi2svg.pyadd_argumentszVoronoi.add_arguments(   s    '"""3332 	 	
 	
 	
 	34B 	 	
 	
 	
 	= 	 	
 	
 	
 	%&&;	 	 	
 	
 	
 	
 	
    c                 H    |d         |d         z  |d         |d         z  z   S )z!Clipping a line by a bounding boxr       )r   xys      r   dotzVoronoi.dotF   s%    tad{QqTAaD[((r   c                    |                      ||          |d         z
  }|                      ||          |d         z
  }||z  dk    rdS |                      ||          |                      ||          z
  }|dk    rdS |d         |                      ||          z
  |z  }d|z
  }||d         z  ||d         z  z   ||d         z  ||d         z  z   dfS )z.Get the line intersection of the two verticies   r   )r   r   Fr    T)r$   )	r   linevt1vt2sc1sc2tmpundvt0s	            r   intersect_line_segmentzVoronoi.intersect_line_segmentJ   s    hhtS!!DG+hhtS!!DG+9q==;hhtS!!DHHT3$7$77!88;Aw$,,,3#gSV|cCFl*C#a&L3Q<,GMMr   c                 ^   |d         |d         f|d         |d         f|d         |d         f|d         |d         fg}|d         t          |          k    rg S ||d                  }g }t          d          D ]H}|                     |||         ||dz   dz                     }	|	d         r|                    |	           It          |          dk     rg S t          |          dk    rt	          t          |                    }||d                  }
|                    |
d         |
d         df           ||d                  }|                    |d         |d         df           |d         d         }|d         d         }|d         d         }|d         d         }|D ]Z}t          |d         |          }t          |d         |          }t          |d         |          }t          |d         |          }[||z
  ||z
  k    r|                                 n|                    d            g }d}d}|D ]m}|d         r2|r(|r"|d         |d         g|d         |d         ggc S g c S |r|}| }<|r(|r"|d         |d         g|d         |d         ggc S g c S |r|}| }nd S )	Nr   r&   r          Fc                     | d         S )Nr    r!   )pts    r   <lambda>z#Voronoi.clip_edge.<locals>.<lambda>   s
    BqE r   )key)	lenranger/   appendlistsetminmaxsort)r   verticeslinesedgebboxbbcr'   interpointsipntr(   r)   minxminymaxxmaxypointstartinsidestart_writes                       r   	clip_edgezVoronoi.clip_edgeX   sA    !Wd1g!Wd1g!Wd1g!Wd1g	
 7c%jj  IT!W~q 	( 	(A--dCFCQ!<LMMC1v (""3''' {aI{as;//00K tAwCFCFE2333tAwCFCFE2333 1~a 1~a 1~a 1~a   	' 	'EuQx&&DuQx&&DuQx&&DuQx&&DD4KD4K((!1!1222  	. 	.EQx . &" L!&q58 4uQxq6JKKKKIII" & %# & L!&q58 4uQxq6JKKKKIII & %"-o'	. 	.r   c           	         | j         j        s#t          j        t	          d                     d S dt          | j                             d                    dddd}dt          | j                             d                    dddd}| j         j                                                                        }|	                                }d }|r| }g }g }g }g }	| j         j        
                                D ]}
|                    |
           |
                                }|r|j        \  }}||g}|r|                    |          }|                    t          |            | j        j        dk    r.|	                    |
j                            dd                     |                    t          ||                     | j        j        d	k    rI|                    t-                                }|                    d
d           |r|xj        |z  c_        | j        j        dk    r7|                    t-                                }|                    d
d	           | j        j        d	k    rWt3          d |D             d           }| j        j        dk    r| j         j        }| j         j        }d|d|f}n|j        |j        |j        |j         f}d|d         z  |d         z
  d|d         z  |d         z
  d|d         z  |d         z
  d|d         z  |d         z
  f}|                    t          |d         |d                              |                    t          |d         |d                              |                    t          |d         |d                              |                    t          |d         |d                              | j        j!        r|                    tE                                }|                    dt          |d                              |                    dt          |d                              |                    dt          |d         |d         z
                       |                    dt          |d         |d         z
                       ||_        | j        j        d	k    rtG          j$        |          \  }}}|D ]}|dd          \  }}|dk     s|dk     r| %                    ||||          }tM          |          dk    r|d         \  }}|d         \  } }!d||ggd| |!ggg}"|                    tO                                }#|#                    dt          t          j(        |"                               ||#_        | j        j        dk    rtG          j)        |          }$d}%| j        j        dk    rtU          j+        d           |$D ]N}&||&d                  }'||&d                  }(||&d                  })d|'j,        |'j-        ggd|(j,        |(j-        ggd|)j,        |)j-        ggdg gg}"| j        j        dk    s| j        j        dk    rk|	|&tU          j.        dd                            t          | j                             d                    |	|&tU          j.        dd                            ddd}|                    tO                                }#|#                    dt          t          j(        |"                               ||#_        |%dz  }%Nd S d S )NzPlease select objects!z#0000001pxnoneround)strokezstroke-widthfillzstroke-linecapzstroke-linejoinr   rU   r   zinkscape:labelr   c                 6    g | ]}|                                 S r!   )bounding_box).0nodes     r   
<listcomp>z"Voronoi.effect.<locals>.<listcomp>   s$    DDDdd//11DDDr   r   r   r&   r    r1   r"   r#   widthheightMLdzdelaunay-fillinkscapeZzdelaunay-fill-randomz0.005px)/svg	selectionr   errormsg_strto_dimensionlessfirst	getparentcomposed_transformvaluesr9   rW   centerapply_to_pointPointoptionsr   stylegetr
   addr   r;   	transformsumr   viewbox_widthviewbox_heightleftrighttopbottomr   r   voronoicomputeVoronoiDiagramrO   r7   r   PathcomputeDelaunayTriangulationrandomseedr"   r#   	randrange)*r   	linestyle	facestyleparent_grouptransinvtransptsnodesseedsfillsrY   rB   center_xcenter_yrK   group_voronoigroup_delaunay
group_bboxr[   r\   r   safe_boxrectr?   r@   edgesrA   vindex1vindex2segmentx1y1x2y2cmdspath	trianglesrE   trianglept1pt2pt3s*                                             r   effectzVoronoi.effect   sC   x! 	N1566777F   9 9% @ @AA%&
 
	   9 9% @ @AA%&
 
	 x)//11;;==//11 	vH H&--// 	8 	8DLL$$&&D 8%)["(!8, 8!0077E

5%=)))<37IIILL!?!?@@@U8X66777 <#z11(,,UWW55M.	::: 4''83''<#y00)--egg66N/<<< <#z11DDeDDDdKKJ |$...0ua0 O$N%	 HQK(1+-HQK(1+-HQK(1+-HQK(1+-	H JJuXa[(1+66777JJuXa[(1+66777JJuXa[(1+66777JJuXa[(1+66777|' '$((55c(1+..///c(1+..///#hqkHQK&?"@"@AAA3x{Xa['@#A#ABBB&
 <#z11%,%B3%G%G"HeU / /#'8 aKKWq[["nnXudHMMG7||a''!(B!(B!$r2h#BxA,00??c%*T*:*:&;&;<<<%.
<#y00<UCCIA|/?BBJ'''%  HQK(HQK(HQK(35#%.)35#%.)35#%.)"I	 L4GG|7;QQQ #(1A!Q1G1G(H"I(+DH,E,Ei,P,P(Q(Q %hv/?1/E/E&F G*1+2! !I &))+--88c%*T"2"233444&
Q; 10
 r   N)	__name__
__module____qualname____doc__r   r$   r/   rO   r   r!   r   r   r   r   %   sq        00
 
 
<) ) )N N NF. F. F.PR R R R Rr   r   __main__)r   r   r   r   r   r   r   rn   r{   EffectExtensionr   r   runr!   r   r   <module>r      s   2    B B B B B B B B B B B B M M M M Me# M M M` zGIIMMOOOOO r   