ó
 ‰\c           @   s  d  d l  Z d  d l j Z d  d l j Z e j d d d d d d g ƒ Z	 d d	 l
 m Z d
 g Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k r e j j ƒ  d d l m Z d d l m Z e j ƒ  Z e e ƒ Z e e e j ƒ Z e j ƒ  n  d S(   iÿÿÿÿNt   whitet   redt
   dodgerbluet   goldt   greenyellowt
   bluevioleti   (   t   CanvasToolBaset	   PaintToolc           B   sò   e  Z d  Z d d d d d d d „ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z	 e	 j d	 „  ƒ Z	 e d
 „  ƒ Z
 e
 j d „  ƒ Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s  Widget for painting on top of a plot.

    Parameters
    ----------
    manager : Viewer or PlotPlugin.
        Skimage viewer or plot plugin object.
    overlay_shape : shape tuple
        2D shape tuple used to initialize overlay image.
    alpha : float (between [0, 1])
        Opacity of overlay
    on_move : function
        Function called whenever a control handle is moved.
        This function must accept the end points of line as the only argument.
    on_release : function
        Function called whenever the control handle is released.
    on_enter : function
        Function called whenever the "enter" key is pressed.
    rect_props : dict
        Properties for :class:`matplotlib.patches.Rectangle`. This class
        redefines defaults in :class:`matplotlib.widgets.RectangleSelector`.

    Attributes
    ----------
    overlay : array
        Overlay of painted labels displayed on top of image.
    label : int
        Current paint color.

    Examples
    ----------
    >>> from skimage.data import camera
    >>> import matplotlib.pyplot as plt
    >>> from skimage.viewer.canvastools import PaintTool
    >>> import numpy as np

    >>> img = camera() #doctest: +SKIP

    >>> ax = plt.subplot(111) #doctest: +SKIP 
    >>> plt.imshow(img, cmap=plt.cm.gray) #doctest: +SKIP
    >>> p = PaintTool(ax,np.shape(img[:-1]),10,0.2) #doctest: +SKIP
    >>> plt.show() #doctest: +SKIP

    >>> mask = p.overlay #doctest: +SKIP
    >>> plt.imshow(mask,cmap=plt.cm.gray) #doctest: +SKIP
    >>> plt.show() #doctest: +SKIP
    i   g333333Ó?c	   
   	   C   s  t  t |  ƒ j | d | d | d | ƒt d d d d d d	 d
 t ƒ }	 |	 j | d  k	 ra | n i  ƒ | |  _ t |  _	 d  |  _
 | |  _ t j d d d |	  |  _ |  j j t ƒ |  j j |  j ƒ d |  _ | |  _ |  j
 |  j g |  _ |  j j |  ƒ d  S(   Nt   on_movet   on_entert
   on_releaset	   edgecolort   rt	   facecolors   0.7t   alphag      à?t   animatedi    i   (   i    i    (   t   superR   t   __init__t   dictt   Truet   updatet   NoneR   t   LABELS_CMAPt   cmapt   _overlay_plott   shapet   pltt	   Rectanglet   _cursort   set_visiblet   Falset   axt	   add_patcht   labelt   radiust   artistst   managert   add_tool(
   t   selfR$   t   overlay_shapeR"   R   R   R
   R	   t
   rect_propst   props(    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR   ;   s     !						c         C   s   |  j  S(   N(   t   _label(   R&   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR!   V   s    c         C   sX   | |  j  j k r2 t d t |  j  d ƒ ƒ ‚ n  | |  _ |  j j |  j  | ƒ ƒ d  S(   Ns   Maximum label value = %si   (   R   t   Nt
   ValueErrort   lenR*   R   t   set_edgecolor(   R&   t   value(    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR!   Z   s     	c         C   s   |  j  S(   N(   t   _radius(   R&   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR"   a   s    c         C   sY   | |  _  d | d |  _ |  j j |  j ƒ |  j j |  j ƒ t | |  j ƒ |  _ d  S(   Ni   i   (   R0   t   _widthR   t	   set_widtht
   set_heightt   CenteredWindowt   _shapet   window(   R&   R   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR"   e   s
    	c         C   s   |  j  S(   N(   t   _overlay(   R&   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyt   overlaym   s    c      	   C   s¬   | |  _  | d  k r7 |  j j j |  j ƒ d  |  _ ng |  j d  k rŽ t d |  j d |  j d t	 j
 ƒ  d t ƒ } |  j j | |  |  _ n |  j j | ƒ |  j ƒ  d  S(   NR   R   t   normR   (   R7   R   R   t   imagest   removeR   R   R   R   t   mcolorst   NoNormR   t   imshowt   set_datat   redraw(   R&   t   imageR)   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR8   q   s    	c         C   s   |  j  S(   N(   R5   (   R&   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR      s    c         C   so   | |  _  |  j d  k	 rS |  j j d | d d | d d d f ƒ |  j |  _ n  t j | d d ƒ|  _ d  S(   Ng      à¿i   g      à?i    t   dtypet   uint8(	   R5   R   R   t
   set_extentR0   R"   t   npt   zerosR8   (   R&   R   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR   ƒ   s    	c         C   s0   | j  d k r, |  j |  j ƒ |  j ƒ  n  d  S(   Nt   enter(   t   keyt   callback_on_entert   geometryR@   (   R&   t   event(    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyt   on_key_pressŒ   s    c         C   sV   | j  d k s" |  j j | ƒ r& d  S|  j | j | j ƒ |  j | j | j ƒ d  S(   Ni   (   t   buttonR   t   in_axest   update_cursort   xdatat   ydatat   update_overlay(   R&   RK   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyt   on_mouse_press‘   s    "c         C   s'   | j  d k r d  S|  j |  j ƒ d  S(   Ni   (   RM   t   callback_on_releaseRJ   (   R&   RK   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyt   on_mouse_release—   s    c         C   s   |  j  j | ƒ s0 |  j j t ƒ |  j ƒ  d  S|  j j t ƒ |  j | j | j	 ƒ | j
 d k rs |  j ƒ  d  S|  j | j | j	 ƒ |  j |  j ƒ d  S(   Ni   (   R   RN   R   R   R   R@   R   RO   RP   RQ   RM   RR   t   callback_on_moveRJ   (   R&   RK   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR   œ   s    

c         C   s2   |  j  } |  j | |  j j | | ƒ <| |  _  d  S(   N(   R8   R!   R6   t   at(   R&   t   xt   yR8   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyRR   ª   s    	c         C   s<   | |  j  d } | |  j  d } |  j j | | f ƒ d  S(   Ni   (   R"   R   t   set_xy(   R&   RX   RY   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyRO   °   s    c         C   s   |  j  S(   N(   R8   (   R&   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyRJ   µ   s    N(   t   __name__t
   __module__t   __doc__R   R   t   propertyR!   t   setterR"   R8   R   RL   RS   RU   R   RR   RO   RJ   (    (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR      s&   .								R4   c           B   s    e  Z d  Z d „  Z d „  Z RS(   sq  Window that create slices numpy arrays over 2D windows.

    Examples
    --------
    >>> a = np.arange(16).reshape(4, 4)
    >>> w = CenteredWindow(1, a.shape)
    >>> a[w.at(1, 1)]
    array([[ 0,  1,  2],
           [ 4,  5,  6],
           [ 8,  9, 10]])
    >>> a[w.at(0, 0)]
    array([[0, 1],
           [4, 5]])
    >>> a[w.at(4, 3)]
    array([[14, 15]])
    c         C   s   | |  _  | |  _ d  S(   N(   R"   t   array_shape(   R&   R"   R`   (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR   Ë   s    	c   
      C   sˆ   |  j  \ } } |  j } t d | | ƒ } t | | | d ƒ } t d | | ƒ } t | | | d ƒ }	 t | |	 ƒ t | | ƒ g S(   Ni    i   (   R`   R"   t   maxt   mint   slice(
   R&   t   rowt   colt   ht   wR   t   xmint   xmaxt   ymint   ymax(    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyRW   Ï   s    	(   R[   R\   R]   R   RW   (    (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyR4   º   s   	t   __main__(   t   data(   t   ImageViewer(   t   numpyRE   t   matplotlib.pyplott   pyplotR   t   matplotlib.colorst   colorsR<   t   ListedColormapR   t   viewer.canvastools.baseR   t   __all__R   t   objectR4   R[   t   testingt   rundocst    Rm   t   viewerRn   t   cameraRA   R   t
   paint_toolt   show(    (    (    sC   lib/python2.7/site-packages/skimage/viewer/canvastools/painttool.pyt   <module>   s    	®