3
ƽh                 @   s   d Z ddlZddlmZ G dd dZG dd deZG dd	 d	eZG d
d deZG dd deZ	G dd deZ
G dd de
ZG dd deZG dd deZG dd deZG dd de
Zeeee	eeeegZdddZdS )z/Contains classes for generating hatch patterns.    N)Pathc               @   s   e Zd ZdZdS )HatchPatternBasez#The base class for a hatch pattern.N)__name__
__module____qualname____doc__ r   r   6/tmp/pip-build-7iwl8md4/matplotlib/matplotlib/hatch.pyr      s   r   c               @   s   e Zd Zdd Zdd ZdS )HorizontalHatchc             C   s.   t |jd|jd | | _| jd | _d S )N-+   )intcount	num_linesnum_vertices)selfhatchdensityr   r   r	   __init__   s    zHorizontalHatch.__init__c             C   s   t jdd| jddd\}}||d 7 }d|dd ddf< ||dd dd	f< d|d	d ddf< ||d	d dd	f< tj|dd d< tj|d	d d< d S )
Ng        g      ?FT)retstepg       @r   r      )nplinspacer   r   MOVETOLINETO)r   verticescodesstepsstepsizer   r   r	   set_vertices_and_codes   s    z&HorizontalHatch.set_vertices_and_codesN)r   r   r   r   r    r   r   r   r	   r
      s   r
   c               @   s   e Zd Zdd Zdd ZdS )VerticalHatchc             C   s.   t |jd|jd | | _| jd | _d S )N|r   r   )r   r   r   r   )r   r   r   r   r   r	   r      s    zVerticalHatch.__init__c             C   s   t jdd| jddd\}}||d 7 }||dd ddf< d|dd dd	f< ||d	d ddf< d|d	d dd	f< tj|dd d< tj|d	d d< d S )
Ng        g      ?FT)r   g       @r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r	   r    "   s    z$VerticalHatch.set_vertices_and_codesN)r   r   r   r   r    r   r   r   r	   r!      s   r!   c               @   s   e Zd Zdd Zdd ZdS )NorthEastHatchc             C   sJ   t |jd|jd |jd | | _| jr@| jd d | _nd| _d S )N/xXr   r   r   )r   r   r   r   )r   r   r   r   r   r	   r   /   s
    &zNorthEastHatch.__init__c             C   s   t jdd| jd }d| |dd ddf< d| |dd ddf< d| |dd ddf< d| |dd ddf< tj|dd d< tj|dd d< d S )Ng      ?r   g        r   r   g      ?g      )r   r   r   r   r   r   )r   r   r   r   r   r   r	   r    7   s    z%NorthEastHatch.set_vertices_and_codesN)r   r   r   r   r    r   r   r   r	   r#   .   s   r#   c               @   s   e Zd Zdd Zdd ZdS )SouthEastHatchc             C   sJ   t |jd|jd |jd | | _| jr@| jd d | _nd| _d S )N\r%   r&   r   r   r   )r   r   r   r   )r   r   r   r   r   r	   r   B   s    
zSouthEastHatch.__init__c             C   s   t jdd| jd }d| |dd ddf< d| |dd ddf< d| |dd ddf< d| |dd ddf< tj|dd d< tj|dd d< d S )Ng      ?r   g        r   r   g      ?g      )r   r   r   r   r   r   )r   r   r   r   r   r   r	   r    K   s    z%SouthEastHatch.set_vertices_and_codesN)r   r   r   r   r    r   r   r   r	   r'   A   s   	r'   c               @   s    e Zd ZdZdd Zdd ZdS )ShapesFc             C   sf   | j dkrd| _d| _nJ| j d d | j d  | j d | j   | _| jt| j | jrZdnd | _d S )Nr   r   r   )num_rowsZ
num_shapesr   lenshape_verticesfilled)r   r   r   r   r   r	   r   X   s    
zShapes.__init__c             C   s  d| j  }| j| | j }| js2|d d d d }| j}t|}d}xt| j d D ]}	|	d dkrztjdd| j d }
ntj|d d|d  | j }
|	| }xr|
D ]j}|||f |||| < ||||| < ||7 }| js|||f |||| < ||||| < ||7 }qW qTW d S )Ng      ?r   g?r   r   )	r*   r,   sizer-   shape_codesr+   ranger   r   )r   r   r   offsetr,   Zinner_verticesr0   Z
shape_sizecursorrowcolsZrow_posZcol_posr   r   r	   r    c   s,    

zShapes.set_vertices_and_codesN)r   r   r   r-   r   r    r   r   r   r	   r)   U   s   r)   c               @   s   e Zd Zdd ZdS )Circlesc             C   s*   t j }|j| _|j| _tj| || d S )N)r   Zunit_circler   r,   r   r0   r)   r   )r   r   r   pathr   r   r	   r      s    zCircles.__init__N)r   r   r   r   r   r   r   r	   r6   ~   s   r6   c               @   s   e Zd ZdZdd ZdS )SmallCirclesg?c             C   s"   |j d| | _tj| || d S )No)r   r*   r6   r   )r   r   r   r   r   r	   r      s    zSmallCircles.__init__N)r   r   r   r/   r   r   r   r   r	   r8      s   r8   c               @   s   e Zd ZdZdd ZdS )LargeCirclesgffffff?c             C   s"   |j d| | _tj| || d S )NO)r   r*   r6   r   )r   r   r   r   r   r	   r      s    zLargeCircles.__init__N)r   r   r   r/   r   r   r   r   r	   r:      s   r:   c               @   s   e Zd ZdZdZdd ZdS )SmallFilledCirclesg?Tc             C   s"   |j d| | _tj| || d S )N.)r   r*   r6   r   )r   r   r   r   r   r	   r      s    zSmallFilledCircles.__init__N)r   r   r   r/   r-   r   r   r   r   r	   r<      s   r<   c               @   s   e Zd ZdZdZdd ZdS )Starsg      ?g      @Tc             C   s\   |j d| | _tjd}|j| _tjt| jtj	tj
d| _tj| jd< tj| || d S )N*   )Zdtyper   )r   r*   r   Zunit_regular_starr   r,   r   fullr+   r   	code_typer0   r   r)   r   )r   r   r   r7   r   r   r	   r      s    
zStars.__init__NgUUUUUU?)r   r   r   r/   r-   r   r   r   r   r	   r>      s   r>      c       
         s   t    fddtD }tdd |D }|dkrDttjdS tj|df}tj|tj}d}xP|D ]H}|jdkrj||||j  }||||j  }	|j||	 ||j7 }qjW t||S )z
    Given a hatch specifier, *hatchpattern*, generates Path to render
    the hatch in a unit square.  *density* is the number of lines per
    unit square.
    c                s   g | ]}| qS r   r   ).0Z
hatch_type)r   hatchpatternr   r	   
<listcomp>   s   zget_path.<locals>.<listcomp>c             S   s   g | ]
}|j qS r   )r   )rD   patternr   r   r	   rF      s    r   r   )r   r   )	r   _hatch_typessumr   r   emptyrB   r   r    )
rE   r   patternsr   r   r   r3   rG   Zvertices_chunkZcodes_chunkr   )r   rE   r	   get_path   s     

rL   )rC   )r   numpyr   Zmatplotlib.pathr   r   r
   r!   r#   r'   r)   r6   r8   r:   r<   r>   rH   rL   r   r   r   r	   <module>   s,   )	