
    BPc                         d dl mZmZ d dlZd dlmZmZ  G d dej                  Zedk    r e            	                                 dS dS )    )atan2degreesN)ClipPathFilterc                   *    e Zd ZdZd Zd Zd Zd ZdS )Edge3DzGenerate a 3d edgec                    |                     dt          dd           |                     dt          dd           |                     dt          d	d
           |                     dt          d	d           |                     dt          dd           |                     dt          j        d           |                     dt          dd           d S )Nz--angleg     F@z2angle of illumination, clockwise, 45 = upper right)typedefaulthelpz--stddevg      @zGaussian Blur stdDeviationz--blurheight       @zGaussian Blur heightz--blurwidthzGaussian Blur widthz--shades   zNumber of shadesz--bwzBlack and white)r
   r   z--thickg      $@zstroke-width for pieces)add_argumentfloatintinkexBoolean)selfparss     (/usr/share/inkscape/extensions/edge3d.pyadd_argumentszEdge3D.add_arguments   s   E	 	 	
 	
 	
 	UC6R 	 	
 	
 	
 	:P 	 	
 	
 	
 	s9N 	 	
 	
 	
 	*3@RSSS&u};LMMME46O 	 	
 	
 	
 	
 	
    c                     d } | ||           ||          z
            } | ||           ||          z
            }||k     S )z_Return true if angle (degrees, clockwise, 0 = up/north) is between
        angles start and endc                     | dk     r| dz   S | S )z Add 360 to x if x is less than 0r        v@ )xs    r   fzEdge3D.angle_between.<locals>.f8   s    1uu5y Hr   r   )r   startendangler   aes          r   angle_betweenzEdge3D.angle_between4   sd    	 	 	 Aaahh5!""Aaaffqqxx  1ur   c                    d| j         j        z  dz  }| j        j                            t
          j                  D ]}|j                                        }d}d}t          d| j         j                  D ]}| j         j
        rd|cxk     r| j         j        dz
  k     rn n-| j         j        ||dz   z  z
  g}| j         j        ||z  z
  g}|                    | j         j        ||z  z              |                    | j         j        ||dz   z  z              t          |          t          | j         j        dz
            z  }	g }
g }|D ]\  }}|dk    rg }
|
r|dk    r|
d         |dd         d         g}n)|d	k    r|dd         d         |
d         g}n
|dd         }t          t          |d         |
d         z
  |d         |
d         z
                      }|                     |d         |d         |          s#|                     |d         |d         |          r.|                    d
|
f           |                    ||f           |}n
|dd         }|}
|r||                     |          \  }}|                    |                                          }||_        d|_        |xj        |z  c_        dt+          d|	z            z
  }t          j        |||f          |j        d<   dS )zCheck each internode to see if it's in one of the wedges
        for the current shade.  shade is a floating point 0-1 white-blackr   r   Nr      ZVHMz*fill:none;stroke-opacity:1;stroke-width:10   g     o@stroke)optionsshadessvg	selectionfilterr   PathElementpath	to_arraysrangebwr!   appendr   r   r   r$   	get_groupaddcopystyler   Color)r   deltanodearraygroupfiltshader   r    levellastresultcmdparamspointangrefnew_nodecols                      r   effectzEdge3D.effectC   s?    ++c1H&--e.?@@ +	L +	LDI''))EEDq$,"566 'L 'L<? q5'J'J'J'J4<3F3J'J'J'J'J'J+euqy.AAB|)EEM9:T\/%%-?@@@

4<-0CCDDDeuT\-@1-D'E'EE#(  KCczz!  *#::%)!WfRSSk!n$=EE CZZ%+BCC[^T!W$=EE$*233KE%eE!HtAw,>a4PQ7@R&S&STT--!!Hc!fc  9!//a#a&#FF9 #MM3+666"MM3-888#$RSSkDD L}&*nnT&:&:t$yy55H$*HM%QHNNNd*NNEEM 2 22C/4{Cc?/K/KHN8,O'L	+	L +	Lr   c           
         | j         j        }|                    t                                }|                    |                                          }|                                                    t          j                              }|                    t          j                              }|                    d|	                    d                     |                    t          ddt          | j        j                  t          | j        j                                      }|                    d| j        j                   |t          j        |	                    d                    fS )	z
        make a clipped group, clip with clone of original, clipped group
        include original and group of paths.
        z	clip-pathr   )as_urlz-0.5)r   yheightwidthfeGaussianBlur)stdDeviation)r2   )r0   defsr:   r   r;   	getparentr   Groupsetget_idr   strr.   
blurheight	blurwidthadd_primitivestddevStyle)r   r?   rV   cliprL   
clip_grouprA   rB   s           r   r9   zEdge3D.get_groupu   s+   
 x}xx

##88DIIKK((^^%%))%+--88
u{}}--{DKKqK$9$9::: xx4<233$,011	  
 
 	+$,:MNNNekA)>)>?????r   N)__name__
__module____qualname____doc__r   r$   rN   r9   r   r   r   r   r      s_        
 
 
,  0L 0L 0Ld@ @ @ @ @r   r   __main__)
mathr   r   r   r   r   EffectExtensionr   rc   runr   r   r   <module>rk      s   *           " " " " " " " "q@ q@ q@ q@ q@U" q@ q@ q@h z
FHHLLNNNNN r   