
    ը	fF                    N   d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
 ddlZddlmZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddl d Z G d d      Z G d d      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d de$      Z% G d d e      Z& G d! d"e      Z' G d# d$e      Z( G d% d&e      Z) G d' d(e      Z* G d) d*e      Z+ G d+ d,e      Z, G d- d.e      Z- G d/ d0e      Z. G d1 d2e      Z/y)3a  
@package psmap.instructions

@brief Map feature objects

Classes:
 - dialogs::Instruction
 - dialogs::InstructionObject
 - dialogs::InitMap
 - dialogs::MapFrame
 - dialogs::PageSetup
 - dialogs::Mapinfo
 - dialogs::Text
 - dialogs::Image
 - dialogs::NorthArrow
 - dialogs::Point
 - dialogs::Line
 - dialogs::Rectangle
 - dialogs::Scalebar
 - dialogs::RasterLegend
 - dialogs::VectorLegend
 - dialogs::Raster
 - dialogs::Vector
 - dialogs::VProperties

(C) 2011-2012 by Anna Kratochvilova, and the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Anna Kratochvilova <kratochanna gmail.com> (bachelor's project)
@author Martin Landa <landa.martin gmail.com> (mentor)
    N)ceil)strftime	localtime)open)cmdlist_to_tuple)GErrorGMessageGWarning)GetCmdString)VectorDBInfo)NewId)*c                  (    t        t                     S N)intwxNewId     3/usr/lib/grass83/gui/wxpython/psmap/instructions.pyr   r   5   s    wy>r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zy)Instructionz'Class which represents instruction filec                 L    || _         || _        t               | _        || _        y r   )parentobjectsToDrawlistinstructionenv)selfr   r   r   s       r   __init__zInstruction.__init__<   s"    *6r   c                 j   dt        dt                     z   dz   }t        j                         }|d|d   z  z  }|d|d   z  z  }|d| j	                  d	      d
   z  z  }d}| j	                  d      sd}| j
                  D cg c]  }t        |       }}||z   dj                  |      z   dz   S c c}w )z!Returns text for instruction filez# timestamp: z%Y-%m-%d %H:%M
z# location: %s
LOCATION_NAMEz# mapset: %s
MAPSETz# page orientation: %s
pageOrientation mapz	border n
z
end)r   r   grassgisenvFindInstructionByTyper   strjoin)r   commentr   bordereachtexts         r   __str__zInstruction.__str__C   s    !H-=y{$KKdRlln%O(<<<#c(m33&((0?@	
 ))%0!F&*&6&67dD	77$))D/1G;; 8s   B0c                 L    | j                   D ]  }|j                  |k(  s|c S  y r   r   idr   r4   r/   s      r   __getitem__zInstruction.__getitem__S   s,    $$ 	Dww"}	 r   c                 H    | j                   D ]  }|j                  |k(  s y y)zTest if instruction is includedTFr3   r5   s      r   __contains__zInstruction.__contains__Y   s*    $$ 	Dww"}	 r   c                    | j                   D ]  }|j                  |k(  s|j                  dk(  r| j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }||z   |z   |z   D ],  }|| j                   v s| j                   j	                  |       . | j                   j	                  |       || j
                  v r| j
                  j	                  |        y y)	zDelete instructionr'   vectorTr   vPropertiesrasterlabelsN)r   r4   typer*   remover   )r   r4   r/   vektorr<   r=   r>   items           r   __delitem__zInstruction.__delitem__`   s    $$ 	Dww"}99%!77t7LF"&"<"<]QU"<"VK!77t7LF!77t7LF & 4v = F :4#3#33 ,,33D9:   ''-+++&&--b1	r   c                 f   |j                   dk(  r| j                  j                  d|       n| j                  j                  |       |j                   dvr\|j                   dk(  r'| j                  j                  d|j
                         y| j                  j                  |j
                         yy)zAdd instructionr'   r   )r$   r=   r:   r<   initMapr>   N)r?   r   insertappendr   r4   r   r   s     r   AddInstructionzInstruction.AddInstructions   s     u$##A{3##K0 $
 
 5(""))![^^<""))+..9
r   c                     g }| j                   D ]#  }|j                  |k(  s|j                  |       % t        |      dk(  r|s|d   S |S )z'Find instruction(s) with the given type   r   )r   r?   rG   len)r   r?   r   instr/   s        r   r*   z!Instruction.FindInstructionByType   sQ    $$ 	"DyyD D!	" t9>$7Nr   c                    || _         	 t        |dd      }d}d}|D ]C  }d	|v r| j                  |
       d} n)d|v s"|j                  d      d   j                         }E |s| j                  d
       | j                  d      }t        j                  | j                        }|d   |d   z   dz  |d   |d   z   dz  f|d<   t        | j                   |dk(  | j                        }||d<   t               }	d}
|	d   rt        |	d         }
t        | j                         }|j#                  |j%                         d   dd      |
z  }|t'        |d   |d   z
        z  |d<   t)        d |d   j*                  |d   j,                  | j                  !       d}g }d}d"}|j/                  d#       |D ]  }|j                         s|j                         }|rr|j1                  |       d$|v r\d}i }|d%k(  r	|d   |d<   n0|d&v r||d'<   n&|d(v rt3               |d)<   ||d*<   |d"z  }n
|d+k(  r||d,<    | j4                  ||fi |}|s yg }|j7                  d+      rd+}d}|j1                  |       |j7                  d-      rx|j                         d"   j9                         d.v r| j5                  d-|g      }|r y|j                         d"   j9                         d/v s2d-}d}|j1                  |       I|j7                  d0      r|r^| j5                  d||1      }|rv y|j7                  d2      r| j5                  d2|3      }|r y|j7                  d4      r| j5                  d4|3      }|r y|j7                  d5      rd5}d}|j1                  |       |j7                  d%      rd%}d}|j1                  |       |j7                  d6      rd6}d}|j1                  |       D|j7                  d7      rd7}d}|j1                  |       l|j7                  d8      rd8}d}|j1                  |       |j7                  d9      rd9}d}|j1                  |       |j7                  d:      rd:}d}|j1                  |       |j7                  d;      rXt;        |j                               dk(  r%|j                         d"   j9                         d.v r nd;}d}|j1                  |       M|j7                  d<      rd<}d}|j1                  |       u|j7                  d=      rd=}d}|j1                  |       |j7                  d>      rd>}d}|j1                  |       |j7                  d?      rd?}d}|j1                  |       |j7                  d@      s d@}d}|j1                  |        | j                  dA      }| j                  d4      }| j                  dB      }| j                  dC      }| j                  dD      }| j                  dEdF      }d|dG<   |dH   d#k(  r?|d   }|dI   d4k(  r|r||d4   k(  r(d|dG<   n"|dI   dCk(  r|r|dJ   D ]  }||d#   k(  sd|dG<    |r|dK   r.|r,|d4   |d4<   |dL   st=        |d4   M      }|dNk(  rdO|dL<   nd|dL<   |j?                  |d4   |dL   |dP   |dQ   |dR   S      }|jA                  |d4   |dL   |dP   |dQ   |dT   |U      }tC        t        |dV   d#         t        |dV   d"         ||W      |d<   |r|D ]G  }tE        |dJ         D ]4  \  }}|d   |jF                  k(  s|dX   |dJ   |   dY<   |dZ   |dJ   |   d[<   6 I |rT|jI                  ||dP   |dT   |dQ   \      } tC        t        |dV   d#         t        |dV   d"         | d#   | d"   W      |d<   | j                  dB      }|s1tK        t3               | j                        }| jM                  |       y||d,<   y# t        $ r t        t	        d      |z         Y yw xY w)]z6Reads instruction file and creates instruction objectsLatin_1ignore)encodingerrorszUnable to open file
%smessageNFPortraitz
# g.region)regionInstructionTz# page orientation:r'   r   ns   wecenter)portraitr   rectg      ?unitsmetersinchmetervaluefromUnittoUnitscale,  )dpiwidthheightr   rK   r   endscalebar)r0   epspointline	rectanglemapInstruction)vpointsvlinesvareasr4   vectorMapNumberpaperr%   r.   rZ   nononeyyesscale )isRegionCommentmaploc)r   r0   r=   mapinfor0   rq   rr   rs   rt   
colortablevlegendrv   rw   rx   r>   rasterLegendr$   r:   vectorLegendr<   r;   drawMap	scaleTypemapTyper   rasterDefaultdiscreter'   CELLr   fontsizecolsrn   )r=   r   r   r   rn   rm   )r=   r   r   r   rm   
paperInstrwherexr   rm   rn   label   lpos   )vectorInstrr   rm   r   )'filenamer   IOErrorr   _	SetRegionsplitstripr*   r(   regionr   GetMapBoundsprojInfofloatUnitConversionr   convertGetabsSetResolutionrm   rn   seekrG   r   
SendToRead
startswithlowerrL   getRasterTypeEstimateHeightEstimateWidthRect2D	enumerater4   EstimateSize	PageSetuprI   )!r   r   filer   orientationrs   r'   r   mapRectprojtoMrb   r]   isBufferbufferr   ry   kwargsokr   r=   r$   r:   r   
vectorMapsmapForRegionvmap
rasterTypern   rm   ir/   sizes!                                    r   ReadzInstruction.Read   s    	9XFD
    	:Dt#6"&#t+"jjob1779	: NNTN2 ((/$((+vc{2a7&+s:SWX9XXHMM[J%>TXX
 Fz=X'Ct{{+MMa 06'MRUXX3sfSk 9;;G3v;,,S[5G5GTXX	

 		! 	$D::<::<Dd#D=$HF"j0*-g,w$(UU36/0$(GG',wt4C01'1,$/0;}-(fGGB$F)%d#*::<?((*.AAD6:B$ZZ\!_**,<"*K#HMM$'*__WdO_T *___E *___E +'d#,(d#($d#'#d#)%d#($d#-)d#.tzz|$)djjl1o.C.C.E J /
 *d#+'d#+'d#*&d#*&d#*&d#	$B 11.A++H5))&1++H511.A//D/I
 I{q u:L9~)f6(#33%)C	NY8+"6N .D#tAw.)-I.
 O,)/)9X&#J/!.<3I!JJ!V+36Z036Z0 "00#H-%j1%j1!&)#H- 1 F !..#H-%j1%j1!&)"7+ / E $*W-a01W-a01	$L  " <(8 <GAtAw$'')/3G}vq)!,/3F|vq)!,<<
 #00 &)*5&w/%f-	 1  (.L1!45L1!45q'7	(V$ ))&1UW$((3D%
  #.D   	167(BC	s   ` !aac                    t        d&i ddgddgddgddgddgddgd	d	gd
d
gdddgddgddgddgdddgdddgdddgddgddgddg}t        d&i dt        dt        dt        dt        d	t
        d
t        dt        dt        dt        dt        dt        dt        dt        dt        dt        dt         }||   }|D ]  }| j#                  |      }|dv s|st%               }	|dk(  r!|d   }	 ||   |	|dd  | j&                        }
nc|dv rHd }|D ]  }|j)                  d!      d"k\  sd#} |dk(  r|s|dk(  r|s} ||   |	| | j&                  $      }
n ||   |	| j&                  %      }
 |
j*                  ||fi |}|r| j-                  |
        y  |j*                  ||fi |}|r y  y#)'Nrz   r$   r   r'   rj   r.   r=   r   rp   r0   rq   image
northArrowrr   rs   rt   rv   r:   r<   rw   rx   r   r   r   r   r>   )r0   r<   r   r   rr   rs   rt   r4   rK   )subTyper   )r   r   Fz# north arrowr   T)settingsr   rY   r   )dictr   MapFrameRasterMapinfoScalebarTextImage
NorthArrowPointLine	RectangleRasterLegendVectorLegendVectorVPropertiesLabelsr*   r   r   findr   rI   )r   r   r0   r   psmapInstrDictmyInstrDictmyInstructionr   instrr4   newInstrcommentFoundrs   r   s                 r   r   zInstruction.SendToRead  s    
(
7
 '
 7	

 :
 K
 !\
 
 ,'
 )
 
 #m
 }-
 m,
 m,
  ''!
" $$#
$ :%
*  


 
 	

 
 
 
 "
 
 
  
 &
 &
 
 $
  !
& '{3 0	!A..q1E	 W%B-{1~ +AB HH H
 11#(L $ 099_5:+/L0 W(, , -{1~b4TXXNH-{1~bdhh?H"X]];??''1   UZZT<V< a0	!b r   c                    t        t               | j                        }| j                  |       |rt	        |j                  d      j                               }t        |d         dk  rRd|d   v rd|d<   d|d<   |d   d   |d	<   nZd
|d   v rd|d<   d
|d<   |d   d
   |d	<   n=d|d   v r6d|d<   |d   d   |d<   n%d|d<   nd|d<   t        j                  d      }d|g}t        |      j                  dd      }t        t        d      |z         	 t        j                  dd| j                  i|d   | j                  d<   y# t        j                  $ r!}t!        t        d      |z         Y d}~yd}~ww xY w)zJSets region from file comment or sets current region in case of no commentrY   z# rK   r   r=   r   r   r   r'   r:   r   r\   Nzg.regionr&   z:Instruction file will be loaded with following region: %s
r   GRASS_REGIONzRegion cannot be set
%sFr   )r   r   r   rI   r   r   r   rL   r(   r   r   replacer	   r   
region_envScriptErrorr   )r   rV   r'   cmdr   	cmdStringr^   s          r   r   zInstruction.SetRegion  s   uwDHH-C "#4#:#:4#@#F#F#HIC 3q6{as1v%'(C$%-C	N!$Q!1CJQ''(C$%-C	N!$Q!1CJQ''(C$$'F8$4CM $%K  C\\d+Fv&C %--j"=	KLyX	
	','7'7'ODHH'OA'ODHH^$   	1/0145	s   1E E<E77E<N)F)__name__
__module____qualname____doc__r   r1   r6   r8   rC   rI   r*   r   r   r   r   r   r   r   r   9   s;    1< &:*EN\|$r   r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)InstructionObjectz.Abstract class representing single instructionc                 ~    || _         || _        t               | _        | j                  | _        t               | _        y r   )r4   r   r   defaultInstructionr   r   unitConvr   r4   r   s      r   r   zInstructionObject.__init__!  s4     #'&22&(r   c                      y)z+Returns particular part of text instructionr&   r   r   s    r   r1   zInstructionObject.__str__,  s    r   c                 n    | j                   j                         D ]  }||k(  s	| j                   |   c S  y r   )r   keys)r   keyr/   s      r   r6   zInstructionObject.__getitem__0  s=    $$))+ 	-Ds{'',,	- r   c                 "    || j                   |<   y r   r   )r   r   rg   s      r   __setitem__zInstructionObject.__setitem__6  s     %r   c                     | j                   S )zGet current valuesr   r   s    r   GetInstructionz InstructionObject.GetInstruction9  s    r   c                     || _         y)zSet default valuesNr   rH   s     r   SetInstructionz InstructionObject.SetInstruction=  s
    &r   c                      y)zRead instruction and save themNr   )r   r   r0   r   s       r   r   zInstructionObject.ReadA  s    r   c                    t        |j                  d            t        |j                  d            }}t        j                  | j                        }|d   |d   |d   z
  dz  |z  z   }|d   |d   |d   z
  dz  |z  z   }||fS )zCConverts text coordinates from percent of region to map coordinates%rY   r[   rZ   d   r]   r^   )r   r   r(   r   r   )r   r^   rZ   r   NEs         r   PercentToRealzInstructionObject.PercentToRealE  s    QWWS\"E!''#,$71$((+3K6#;4;a??3K6#;4;a??!tr   N)r   r   r   r   r   r1   r6   r   r   r   r   r  r   r   r   r   r     s-    8	)& 'r   r   c                       e Zd ZdZd Zy)InitMapzClass representing virtual mapc                     t         j                  | ||       d| _        t        d d       | _        t        | j                        | _        y )Nr4   r   rE   )ra   rj   r   r   r?   r   r   r   r   s      r   r   zInitMap.__init__Q  sB    ""4BC"8	 #'D"= 7 78r   N)r   r   r   r   r   r   r   r   r  r  N  s
    (9r   r  c                   "    e Zd ZdZd Zd Zd Zy)r   z;Class representing map (instructions maploc, scale, border)c                     t         j                  | ||       d| _        t        d d dd t	               dd d dddd	      | _        t        | j
                        | _        y )
Nr  r'   Tr   rk   r   rK   0:0:0)r'   r   r   r   ra   r   rj   r_   
resolutionr.   rm   color)r   r   r?   r   r   r   r   r   s      r   r   zMapFrame.__init__^  sf    ""4BC"8	"&#
   7 78r   c                    d}d}t        j                  | j                        }| j                  d   dk(  r:| j                  d   }| j                  d   dk(  rd|d	|d
   d|d   d}ncd|z  }n]| j                  d   dk(  r| j                  d   }d|z  }n6| j                  d   dv r% t	        j
                  d      j                  d i |}||z  }|dz  }d| j                  d   j                  | j                  d   j                  fz  }| j                  d   dk7  r8|d| j                  d   j                  | j                  d   j                  fz  z  }||z  }|dz  }| j                  d   dk(  rdd| j                  d   z  z  }||z  }|dz  }d}| j                  d   dk(  rd}n8d}|t	        j
                  d      j                  | j                        z  }|dz  }||z  }|dz  }|S )!Nr&   rY   r   r   r'   r   r=   z# g.region raster=z nsres=nsresz ewres=ewresr!   z# g.region vector=%s
rK   r   z# g.region region=%s
)r\   r   z6# g.region n=$n s=$s e=$e w=$w rows=$rows cols=$cols 
zmaploc %.3f %.3fra   r   z  %.3f %.3fzscale 1:%.0frj   r.   rZ   zborder nz	border y
z"    width $width
    color $color
    endr   )r(   r   r   r   stringTemplate
substituter   r   rm   rn   )r   r   r-   r   r'   maplocInstructionscaleInstructionborderInstructions           r   r1   zMapFrame.__str__s  sP    $((+K(A-""5)C	*h67O7O 3c:k*a/%%h/F.7Gk*f4fooIj#!#G 	.V$&&V$&&2
 
 K(A-  (..  (//2 "  	"" K(A--T5E5Eg5N1NO%%ETMEH%, * ,6"j))*+ *""r   c                 p   d|v r|d   }i }|dk(  r|D ]  }|j                  d      r n	 |j                         d   j                         dv rd|d<    n|j                         d   j                         dv rd|d<   nO|j                  d	      r|j                         d   |d	<   n'|j                  d
      r|j                         d   |d
<    nw|dk(  r	 |j                  d      j                  d      d   }sd|d<   nd|d<   dt        |      z  }t        || j                  d   z
        d|z  kD  r't        t        d      || j                  d   dz         n|dk(  r|j                  d      j                         }	t        |	      dk\  rt        | j                  d   j                         d   t        |	d         z
        dkD  s;t        | j                  d   j                         d   t        |	d         z
        dkD  r^t        t        d      |	d   |	d   | j                  d   j                         d   | j                  d   j                         d   dz         t        |	      dk(  rt        | j                  d   j                         d   t        |	d         z
        dkD  s;t        | j                  d   j                         d   t        |	d         z
        dkD  r^t        t        d      |	d   |	d   | j                  d   j                         d   | j                  d   j                         d   dz         | j                  j                  |       y # t        $ r t	        t        d      |z         Y  yw xY w# t        t        f$ r t	        t        d      |z         Y yw xY w)!%Read instruction and save informationr   r.   ro   rK   r{   rZ   r~   r   rm   r  Failed to read instruction %sFrj   r   rW   r\   r   r   g{Gz?z8Scale has changed, old value: %(old)s
new value: %(new)s)oldnewz4Failed to read instruction %s.
Use 1:25000 notation.r   zmaploc ra   r         ?zUMap frame position changed, old value: %(old1)s %(old2)s
new value: %(new1)s %(new2)s)old1old2new1new2r   zQMap frame size changed, old value: %(old1)s %(old2)s
new value: %(new1)s %(new2)sT)r   r   r   
IndexErrorr   r   r   r   r   r   r
   
ValueErrorrL   r   update)
r   r   r0   r   r   r   rs   	scaleTextrj   r   s
             r   r   zMapFrame.Read  s   &$%67O(" !??5)!zz|A,,.2EE*-ha..0L@*-h1)-ag1)-ag!" G# JJx066s;A>	 ')*E+&)*E+&E),,ut//889TE\JUV"'0@0@0IJK H$ZZ	*002F6{a((0446q9E&)<LLMPSS4++F3779!<uVAY?OOPSVVt %+1I$*1I$($4$4V$<$@$@$B1$E$($4$4V$<$@$@$B1$E	
 6{a((0446q9E&)<LLMPSS4++F3779!<uVAY?OOPSVVp %+1I$*1I$($4$4V$<$@$@$B1$E$($4$4V$<$@$@$B1$E	
 	&C " !1<=KL !( 
+ MN!" s+   (M%A8M%BN % N	N	&N54N5Nr   r   r   r   r   r1   r   r   r   r   r   r   [  s    E9*:xUr   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)r   z#Class representing page instructionc                     t         j                  | ||       d| _        t        dddddddd	d	
	      | _        t        | j                        | _        y )Nr  r$   rd   a4rU   gK7 @gA`b'@r  rK   )	UnitsFormatr%   WidthHeightLeftRightTopBottomr	  r   s      r   r   zPageSetup.__init__
  s[    ""4BC"8	"&"
#
   7 78r   c                 F   | j                   d   dk(  r/t        j                  d      j                  | j                         }n.t        j                  d      j                  | j                         }|t        j                  d      j                  | j                         z  }|S )Nr,  customz*paper
    width $Width
    height $Height
zpaper $Format
zG    left $Left
    right $Right
    bottom $Bottom
    top $Top
    endr   r  r  r  r   r   s     r   r1   zPageSetup.__str__  s    H%1OO?j))*  OO$56AA$BRBRSEY

*T%%
&	' r   c                    i }g d| _         t        t        g d| j                               | _        |dk(  r/|D ]  }|j	                  d      rt        |j                               dkD  rp|j                         d   }| j                  t        j                  ddd            }	 ||d	<   t        j                  ||         D ]  \  }}	t        |	      ||<     nUd|d	<   |d	   dk(  s|j	                  d      r|j                         }	 t        |d         || j                  |d      <    d|v r|d   dk(  r|d   |d   c|d<   |d<   | j$                  j'                  |       y# t        $ r" t        t        d
      |t         dz         Y  yw xY w# t"        t        f$ r t        t        d      |z         Y  yw xY w)r  )r-  r.  r/  r0  r1  r2  )rm   rn   leftrighttopbottomrz   rK   zps.mappT)flagsquietr,  z;Failed to read instruction %(file)s.
Unknown format %(for)s)r   forFr4  ro   r   zFailed to read instruction %s.r%   	Landscaper.  r-  )catsr   zipsubInstrr   rL   r   _toDictr(   read_commandsix	iteritemsr   KeyErrorr   r   formatr#  r   r%  )
r   r   r0   r   r   rs   pformatavailableFormatsr   rg   s
             r   r   zPageSetup.Read)  s   I	EtyyQ
 '!  %??7+4::<(1,"&**,q/+/<<!..xs$O,().5E(O.1mm<LW<U.V :
U-25\c
:! +3h8_09O::<D%8=d1gdmmDG45; %D &6-+@K+O27/5>/gh##E*3  ( )" !$b!" ,7v"F!G $))" '1 %q!AB[PQ$%s$   %3E(!F('FF&G ?G c           	          t               }|j                         j                  d      D ]H  }t        t        | j                  |j                         dd              }|||j                         d   <   J |S )Nr!   rK   r   )r   r   r   rB  rA  )r   paperStrsizeDictrs   ds        r   rD  zPageSetup._toDictZ  sg    6NN$**40 	*DSDJJL$456A()HTZZ\!_%	* r   N)r   r   r   r   r   r1   r   rD  r   r   r   r   r     s    -9$/br   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)r   z&Class representing mapinfo instructionc           
          t         j                  | ||       d| _        t        dddddddd 	      | _        t        | j                        | _        y )
Nr  r   rd   r   r   	Helvetica
   r  r}   )unitr   fontr   r  
backgroundr.   ra   r	  r   s      r   r   zMapinfo.__init__g  sX    ""4BC"8	"&	#
   7 78r   c                 ,   d}|d| j                   d   d   | j                   d   d   fz  z  }|t        j                  d      j                  | j                         z  }|t        j                  d      j                  | j                         z  }|dz  }|S )	Nzmapinfo
    where %.3f %.3f
r   r   rK   7    font $font
    fontsize $fontsize
    color $color
z.    background $background
    border $border
r  r5  r6  s     r   r1   zMapinfo.__str__x  s    (W%a(W%a(,
 
 	
 	H

*T%%
&	' 	>

*T%%
&	' 	r   c                 n   i }	 |D ]  }|j                  dd      }|d   dk(  r	|d   |d<   &|d   dk(  rt        |d         |d<   @|d   dk(  r	|d   |d<   Q|d   dk(  r	|d   |d<   b|d   dk(  r	|d   |d<   s|d   d	k(  s|t        |d   j                         d         t        |d   j                         d         f|d	<    	 | j                  j                  |       | j                  | j                        | j                  d<   y# t        t        f$ r t        t        d
      |z         Y yw xY w)r  NrK   r   rV  r   r  rW  r.   r   r  F)mapinfoDictra   T)
r   r   r   r$  r#  r   r   r   r%  EstimateRect)r   r   r0   r   rs   subs         r   r   zMapinfo.Read  s\   	 Xjjq)q6V#$'FE&MVz)(+CFE*%Vw&%(VE'NV|+*-a&E,'Vx'&)!fE(OVw&%*3q6<<>!+<%=uSV\\^TUEV?W%WE'NX" 	&#'#4#4AQAQ#4#R  J' 	145CD	s   A=D AD &D43D4c                     |d   dz  }|d   dz  }| j                   j                  |dd      }| j                   j                  |dd      }t        t        |d   d         t        |d   d	         ||
      S )zEstimate size to draw mapinfor         rr   rd   rf   r   r   rK   r   )r   r   r   r   )r   r\  r]   hrm   rn   s         r   r]  zMapinfo.EstimateRect  s    
#b(
#a'%%A%O&&Q&PK(+,K(+,	
 	
r   N)r   r   r   r   r   r1   r   r]  r   r   r   r   r   d  s    09"2
r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z#Class representing text instructionc                     t         j                  | ||       d| _        t        d i dddddddd	d
ddddddddddddddddd dddddddd dd | _        t        | j                        | _        y )!Nr  r0   r&   rV  rS  r   rT  r  blackrW  r}   hcolorhwidthrK   r.   rm   1XYTr   rR  rU  rd   rotaterefzcenter centerxoffsetr   yoffseteastnorthr   r	  r   s      r   r   zText.__init__  s    ""4BC"8	"& #
#
#
 #
 	#

 #
 #
 #
 #
 #
 #
 #
 #
 #
  #
 #
  !#
" ##
$ %#
*   7 78r   c                    | j                   d   j                  dd      }d| j                   d   d| j                   d   }|d|z  z  }|t        j                  d	      j	                  | j                         z  }|t        j                  d
      j	                  | j                         z  }| j                   d   dk7  r1|t        j                  d      j	                  | j                         z  }|t        j                  d      j	                  | j                         z  }| j                   d   dk7  r1|t        j                  d      j	                  | j                         z  }|t        j                  d      j	                  | j                         z  }| j                   d   dk7  r1|t        j                  d      j	                  | j                         z  }| j                   d   r1|t        j                  d      j	                  | j                         z  }t        | j                   d         st        | j                   d         r1|t        j                  d      j	                  | j                         z  }|dz  }|S )Nr0   r!   z\nztext rn   ro  z %s
rZ      hcolor $hcolor
rf  r}       hwidth $hwidth
    border $border
r.       width $width
z    background $background
rk  0z    ref $ref
rj      rotate $rotate
rl  rm  z*    xoffset $xoffset
    yoffset $yoffset
r  )r   r   r  r  r  r   )r   r0   r   s      r   r1   zText.__str__  s4   '//e< $ 0 0 8$:J:J7:ST4H

*T%%
&	' 	!78CCDDTDTUUH%/V__%;<GG   E 	!78CCDDTDTUUH%/V__%9:EEdFVFVWWE!?@KK
 	
 E"c)V__%56AA$BRBRSSEH%V__%;<GG   E !!),-t7G7G	7R1SV__>j))*+E 	r   c                    |d   }i }|D ][  }	 |j                  dd      d   }|dk(  r}|j                  dd      dd \  }}	d|v r%d|	v r!d|d	<   | j                  ||	      \  |d
<   |d<   n"d|d	<   t        |      t        |	      c|d
<   |d<   |j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r#t        |j                  dd      d         |d<   ny|dk(  r|j                  dd      d   |d<   nZ|dk(  r|j                  dd      d   |d<   n;|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r"t        |j                  dd      d         |d<   n}|dk(  r"t        |j                  dd      d         |d<   nV|dk(  r"t        |j                  dd      d         |d<   n/|dk(  r*|j                  dd      d   j	                         dv rd|d<   ^ t        ||d
   |d   d| j                        |d<   | j                  j                  |       y# t
        t        f$ r t        t        d      |z         Y  yw xY w)r  ru   NrK   r   r0   r   r   Tri  rn  ro  FrV  r   r  rm   rf  rg  rW  r.   rk  rj  rl  rm  opaque)rZ   r}   r}   r  mapInstrr   r   
paperToMapr   r   )r   r  r   r   r   r#  r$  r   r   PaperMapCoordinatesr   r   r%  )
r   r   r0   r   r'   r   rs   r^  r^   rZ   s
             r   r   z	Text.Read  s   %& ,	D+jjq)!,&=::dA.q3DAqaxC1H&*d8<8J8J1a8P5fuW~&+d8=a%(5fuW~$(JJtQ$7$:E&MF]$(JJtQ$7$:E&MJ&(-djjq.A!.D(EE*%G^%)ZZa%8%;E'NG^%)ZZa%8%;E'NH_&*jjq&9!&<E(OH_&*jjq&9!&<E(OL(*.**T1*=a*@E,'H_&*jjq&9!&<E(OE\#'::dA#6q#9E%LH_&+DJJtQ,?,B&CE(OI%'*4::dA+>q+A'BE)$I%'*4::dA+>q+A'BE)$H_zz$*1-335F.4l+Q,	Z -FmGn
g 	& 
+ q89KGHs   IJ((&KKNr'  r   r   r   r   r     s    -96>:r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r   z*Class representing eps instruction - imagec           
          t         j                  | ||       || _        d| _        t	        ddddd d d d      | _        t	        | j
                        | _        y )	Nr  r   r&   TrR  rd   rK   )epsfileri  r   rU  rn  ro  rj  rj   )r   r   r   r?   r   r   r   r   r4   r   r   s       r   r   zImage.__init__+  s_    ""4BC"8 	"&	#
   7 78r   c                    | j                  d       | j                  d   j                  t        j                  d      d      }d| j                  d   d| j                  d	   d
}|d|z  z  }| j                  d   r1|t        j                  d      j                  | j                        z  }| j                  d   r1|t        j                  d      j                  | j                        z  }|dz  }|S )NTtoCenterr  GISBASE$GISBASEeps rn  rq  ro  r!       epsfile %s
rj  rw  rj       scale $scale
r  ChangeRefPointr   r   osgetenvr  r  r  r   r  r   s      r   r1   zImage.__str__=  s    T*""9-55bii	6JJW!%!1!1&!94;K;KG;TU#g--H%V__%;<GG   E G$V__%9:EEdFVFVWWEr   c                    |d   }i }|D ]  }	 |j                  dd      d   }|dk(  rd|j                  dd      dd \  }}	d|v r%d|	v r!d|d	<   | j                  ||	      \  |d
<   |d<   nd|d	<   t        |      t        |	      c|d
<   |d<   n|dk(  r>|j                  dd      d   }
|
j                  dt	        j
                  d            |d<   nM|dk(  r"t        |j                  dd      d         |d<   n&|dk(  r!t        |j                  dd      d         |d<    t        j                  j                  |d         st        t        d      ||d   dz         yt        j                  j                  |d         |d<   | j                  |d         |d<   d|v rt        |d   d   |d   d   |d         |d<   | j                  j!                  |       | j#                  d       t%        || j                  d
   | j                  d   d| j&                        |d<   | j(                  j+                  |d   d   dd      }| j(                  j+                  |d   d   dd      }t-        t        |d   d         t        |d   d         || j                  d   z  || j                  d   z        |d<   | j                  j!                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  ru   NrK   r   rq   r   r   Tri  rn  ro  Fr  r  r  rj  rj   r  z=Failed to read instruction %(inst)s: file %(file)s not found.)rM   r   r   r  rz  r   rr   rd   rf   r   ra   )r   r  r   r   r  r  r#  r$  r   r   pathexistsabspathGetImageOrigSizeBBoxAfterRotationr   r%  r  r}  r   r   r   r   )r   r   r0   r   r{  r   rs   r^  r^   rZ   r  r]   rb  s                r   r   z
Image.ReadL  s7   *+ 	Djjq)!,%<::dA.q3DAqaxC1H&*d8<8J8J1a8P5fuW~&+d8=a%(5fuW~I%"jjq1!4G'.z299YCW'XE)$H_&+DJJtQ,?,B&CE(OG^%*4::dA+>q+A%BE'N%	. ww~~eI./TU&i0@AB 77??5+;<i--eI.>?fu-fa %-"2E(OE&M 	&U+,v&w'
g MM!!-"WV " 
 MM!!-"WV " 
 E'N1%&E'N1%&d&&w//t''00	
f 	&O 
+ q89KGHs   DK&L Lc                    | j                   j                  d      }|s| j                   j                  d      }|j                  }|rj| j                  d   j	                         }t        | j                   |   |d   |d   d| j                        }|\  | j                  d<   | j                  d	<   yt        | j                   |   | j                  d   | j                  d	   d
| j                        \  }}| j                  j                  | j                  d   d   dd      }| j                  j                  | j                  d   d   dd      }	||| j                  d   z  dz  z  }||	| j                  d   z  dz  z  }t        | j                   |   ||d| j                        \  }
}|
|c| j                  d<   | j                  d	<   y)z*Change reference point (left top x center)r'   rE   ra   r   rK   Trz  rn  ro  Fr   rr   rd   rf   rj   r\   N)	r   r*   r4   r   	GetCentrer}  r   r   r   )r   r  r{  mapIdr_   ENCenterr   r   r]   rb  r^   rZ   s               r   r  zImage.ChangeRefPoint  s   ==66u=}}::9EH%%f-779F*u-))HHH CK?DV$d&6&6w&?&u-""6*""7+ HHDAq %%&&v.q1GF & A %%&&v.q1GF & A T%%g..22AT%%g..22A&u-aDdhhDAq CDQ?DV$d&6&6w&?r   c                 &   t         j                  j                  |      d   }t         j                  j                  |      d   j	                         dk(  rxd}t        |d      }dx}}|r>|j                         }|j                  |      dk(  r|j                         dd \  }}n|r>|j                          t        |      t        |      fS t        j                  |t        j                        }|j                         |j                         fS )	zIGet image size.

        If eps, size is read from image header.
        rK   z.epsz%%BoundingBoxrr   r      )r?   )r  r  r   splitextr   r   readliner   closer   wxr   BITMAP_TYPE_ANYGetWidth	GetHeight)	r   	imagePathfileNamebbInfor   r]   rb  rs   imgs	            r   r  zImage.GetImageOrigSize  s    
 77==+A.77H%a(..0F:$F	3'DIA}}99V$)::<!,DAq	 
 JJL8U1X%%((8"*<*<=C<<>3==?22r   N)	r   r   r   r   r   r1   r   r  r  r   r   r   r   r   (  s!    49$?B$GL3r   r   c                       e Zd ZdZd Zd Zy)r   z1Class representing eps instruction -- North Arrowc                 D    t         j                  | |||       d| _        y )N)r4   r   r   r   )r   r   r?   r  s       r   r   zNorthArrow.__init__  s    tX3? 	r   c                    | j                  d       | j                  d   j                  t        j                  d      d      }d| j                  d   d| j                  d	   d
}|dz  }|d|z  z  }| j                  d   r1|t        j                  d      j                  | j                        z  }| j                  d   r1|t        j                  d      j                  | j                        z  }|dz  }|S )NTr  r  r  r  r  rn  rq  ro  r!   z# north arrow
r  rj  rw  rj   r  r  r  r  s      r   r1   zNorthArrow.__str__  s    T*""9-55bii	6JJW!%!1!1&!94;K;KG;TU""#g--H%V__%;<GG   E G$V__%9:EEdFVFVWWEr   N)r   r   r   r   r   r1   r   r   r   r   r     s    ;!r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z$Class representing point instructionc                     t         j                  | ||       d| _        t        t        j
                  j                  dd      ddddd	d
dd d 
      | _        t        | j                        | _        y )Nr  rr   basicr   r  z200:200:200r   rT  TrR  rd   )
symbolr  fcolorrj  r   ri  r   rU  rn  ro  )	r   r   r?   r   r  r  r,   r   r   r   s      r   r   zPoint.__init__  sm    ""4BC"8	"&77<<- #
   7 78r   c                 V   t        j                  d      j                  | j                        }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|dz  }|S )Nzpoint $east $north
    symbol $symbol
    color $color
    fcolor $fcolor
rw      size $size
r  r  r  r  r   r6  s     r   r1   zPoint.__str__  s     67BB4CSCST!78CCDDTDTUU!56AA$BRBRSS!78CCDDTDTUU!78CCDDTDTUU!34??@P@PQQr   c                 b   |d   }i }|D ])  }	 |j                  dd      d   }|dk(  rd|j                  dd      dd \  }}	d|v r%d|	v r!d|d	<   | j                  ||	      \  |d
<   |d<   nd|d	<   t        |      t        |	      c|d
<   |d<   n|dk(  r|j                  dd      d   |d<   n|dk(  r"t        |j                  dd      d         |d<   nb|dk(  r"t        |j                  dd      d         |d<   n;|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<   , | j                  j                  |       t        || j                  d
   | j                  d   d| j                        |d<   | j                  j                  |d   dd      x}
}t        t        |d   d         |
dz  z
  t        |d   d   |dz  z
        |
|      |d<   | j                  j                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  ru   NrK   r   rr   r   r   Tri  rn  ro  Fr  rj  r   r  r  r  rz  r   rd   rf   r\   r   ra   )r   r  r   r#  r$  r   r   r   r%  r}  r   r   r   r   )r   r   r0   r   r{  r   rs   r^  r^   rZ   r]   rb  s               r   r   z
Point.Read  sk   *+ 	Djjq)!,'>::dA.q3DAqaxC1H&*d8<8J8J1a8P5fuW~&+d8=a%(5fuW~H_&*jjq&9!&<E(OH_&+DJJtQ,?,B&CE(OF]$)$**T1*=a*@$AE&MG^%)ZZa%8%;E'NH_&*jjq&9!&<E(O+	6 	&,v&w'
g %%-'& & 
 	
A E'N1%&Q.E'N1%A-.	
f 	&/ 
+ q89KGHs   D%H&H.-H.Nr'  r   r   r   r   r     s    .9&2r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z#Class representing line instructionc           	          t         j                  | ||       d| _        t        ddt	        j
                         t	        j
                         gd d d d       | _        t        | j                        | _        y )Nr  rs   r  r\   )r  rm   r   east1north1east2north2)r   r   r?   r   r  Point2Dr   r   r   s      r   r   zLine.__init__:  sf    ""4BC"8	"&::<.#
   7 78r   c                 0   t        j                  d      j                  | j                        }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|dz  }|S )Nz#line $east1 $north1 $east2 $north2
r  ru      end
r  r6  s     r   r1   zLine.__str__J  s     FGRR
 	!56AA$BRBRSS!56AA$BRBRSSr   c                 L   |d   }i }|D ]  }	 |j                  dd      d   }|dk(  r|j                  dd      dd \  }}	}
}d|v rCd|	v r?d|
v r;d|v r7| j                  ||	      \  |d<   |d	<   | j                  |
|      \  |d
<   |d<   nt        |      t        |	      c|d<   |d	<   t        |
      t        |      c|d
<   |d<   nD|dk(  r"t        |j                  dd      d         |d<   n|dk(  r|j                  dd      d   |d<    | j                  j                  |       t        || j                  d   | j                  d	   d| j                        \  }}	t        || j                  d
   | j                  d   d| j                        \  }
}t        j                  ||	      t        j                  |
|      g|d<   t        |d   d   |d   d         |d<   | j                  j                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  ru   NrK   r   rs   r  r   r  r  r  r  rm   r  r  Frz  r   ra   T)r   r  r   r#  r$  r   r   r   r%  r}  r   r  r  Rect2DPPr   r   r0   r   r{  r   rs   r^  e1n1e2n2s               r   r   z	Line.ReadS  sI   *+ 	Djjq)!,&=%)ZZa%81%=NBBbySBY3"9:>:L:LRQS:T7gh:>:L:LRQS:T7gh:?)U2Y7gh:?)U2Y7ghG^%*4::dA+>q+A%BE'NG^%)ZZa%8%;E'N	* 	&$w'x(
B %w'x(
B **R,bjjR.@Ag w!2E'N14EFf&/ 
+ q89KGHs   C:G99&H#"H#Nr'  r   r   r   r   r   7  s    -9 ,r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z(Class representing rectangle instructionc           	          t         j                  | ||       d| _        t        dddd d d d       | _        t        | j                        | _        y )Nr  rt   r  r}   r\   )r  r  rm   r  r  r  r  r	  r   s      r   r   zRectangle.__init__  sU    ""4BC"8	"&#
   7 78r   c                    t        j                  d      j                  | j                        }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|dz  }|S )Nz(rectangle $east1 $north1 $east2 $north2
r  r  ru  r  r  r6  s     r   r1   zRectangle.__str__  s     KLWW
 	!56AA$BRBRSS!78CCDDTDTUU!56AA$BRBRSSr   c                 f   |d   }i }|D ]  }	 |j                  dd      d   }|dk(  r|j                  dd      dd \  }}	}
}d|v rCd|	v r?d|
v r;d|v r7| j                  ||	      \  |d<   |d	<   | j                  |
|      \  |d
<   |d<   nt        |      t        |	      c|d<   |d	<   t        |
      t        |      c|d
<   |d<   nb|dk(  r"t        |j                  dd      d         |d<   n;|dk(  r|j                  dd      d   |d<   n|dk(  r|j                  dd      d   |d<    | j                  j                  |       t        || j                  d   | j                  d	   d| j                        \  }}	t        || j                  d
   | j                  d   d| j                        \  }
}t        t        j                  ||	      t        j                  |
|            |d<   | j                  j                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  ru   NrK   r   rt   r  r   r  r  r  r  rm   r  r  r  Frz  ra   T)r   r  r   r#  r$  r   r   r   r%  r}  r   r  r  r  r  s               r   r   zRectangle.Read  sJ   *+ 	Djjq)!,+%%)ZZa%81%=NBBbySBY3"9:>:L:LRQS:T7gh:>:L:LRQS:T7gh:?)U2Y7gh:?)U2Y7ghG^%*4::dA+>q+A%BE'NG^%)ZZa%8%;E'NH_&*jjq&9!&<E(O#	. 	&$w'x(
B %w'x(
B !B!3RZZB5GHf&- 
+ q89KGHs   DH&H0/H0Nr'  r   r   r   r   r     s    29 -r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)r   z'Class representing scalebar instructionc                     t         j                  | ||       d| _        t        ddddd dd ddd	d
d      | _        t        | j                        | _        y )Nr  rp   rd   )rK   rK   autog?rT  r   fr   rK   )rU  r   unitsLengthunitsHeightlengthrn   ra   r   rW  rp   segmentnumbersr	  r   s      r   r   zScalebar.__init__  sd    ""4BC"8	"&#
   7 78r   c                 H   t        j                  d      j                  | j                        }|d| j                  d   d   | j                  d   d   fz  z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d	      j                  | j                        z  }|d
z  }|S )Nzscalebar $scalebar
rY  r   r   rK   z*    length $length
    units $unitsLength
    height $height
z*    segment $segment
    numbers $numbers
z2    fontsize $fontsize
    background $background
r  r  r6  s     r   r1   zScalebar.__str__  s    67BB4CSCST(W%a(W%a(,
 
 	
 	:

*T%%
&	' 	!78CCDDTDTUU:

*T%%
&	' 	B

*T%%
&	' 	r   c           	         |d   }i }|D ]  }	 |j                  d      rd|v rd|d<   nd|d<   n|j                  d      r/t        t        t        |j	                         dd             |d<   n|j                  d	      r!t        |j	                         d         |d	<   n|j                  d
      r.|j	                         d   dv r[|j	                         d   |d<   nC|j                  d      r!t        |j	                         d         |d<   n|j                  d      r t        |j	                         d         |d<   n|j                  d      r t        |j	                         d         |d<   n|j                  d      r t        |j	                         d         |d<   n~|j                  d      rm|j	                         d   j                         j                         dv rd|d<   n6|j	                         d   j                         j                         dv rd|d<    | j                  j                  |       | j                  | j                  |      \  }}| j                  d   d   |dz  z
  }	| j                  d   d   |dz  z
  }
t        |	|
||      | j                  d<   y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  rj   rp   z
scalebar sr[   r  r   rK   r   r  rb   )r  rc   
kilometersfeetmiles	nautmilesr  rn   r   r  r  rW  r~   r   r{   rZ   r  F)scalebarDictrj   r   r\   ra   T)r   r   r'   r   r   r   r   r   r#  r$  r   r   r   r%  r   r   )r   r   r0   r   rj   r   rs   r]   rb  r   r   s              r   r   zScalebar.Read  s   w $	D#??:.#t+,/j),/j)__W-%)#eTZZ\!A5F*G%HE'N__X.&+DJJLO&<E(O__W-zz|A +  04zz|Am,__X.&+DJJLO&<E(O__Z0(-djjl1o(>E*%__Y/'*4::<?';E)$__Y/'*4::<?';E)$__\2zz|A,,.446,F.1l+a..0668<OO.1l+C$	L 	&  d.>.>e L1W%a(1q50W%a(1q50#)!Q1#5  
+ q89KGHs   HJ00&KKc                 h   t               d   }|r|| j                  j                         vrd}|d   dk7  r%| j                  j                  |d   |d   d      }n!| j                  j                  |d   |d      }||z  }|dz  }|d	   d
| j                  j                  |d   dd      z  z   }||fS )zEstimate size to draw scalebarrb   rc   r  r  r  rd   rf   皙?rn   r\   r   rr   )r   r   getAllUnitsr   )r   r  rj   rb   r  rn   s         r   r   zScalebar.EstimateSize+  s    
7#T]]%>%>%@@E&&0]]**"8,%m4 + F ]]**"8,uV + F 	%#h'!dmm.C.Cz*WV /D /
 +
 
 r   Nr   r   r   r   r   r1   r   r   r   r   r   r   r     s    19*&/b r   r   c                   4    e Zd ZdZd Zd Zd ZddZ	 d	dZy)
r   )Class representing colortable instructionc                     t         j                  | ||       d| _        t        di ddddddd	d d
d dd dddd dd dddddddddddddddddd| _        t        | j                        | _        y ) Nr  r   rLegendFrU  rd   r   Tr=   r   r?   r   rR  rm   rn   r   rK   rV  rS  r   rT  r  re  tickbarrZ   rangeminr   maxnodatar   r	  r   s      r   r   zRasterLegend.__init__F  s    ""4BC"8"	"& #
#
#
 #
 	#

 #
 #
 #
 #
 #
 #
 #
 #
 #
  !#
" ##
$ %#
& '#
( )#
.   7 78r   c                 Z   d}|t        j                  d      j                  | j                        z  }|d| j                  d   d   | j                  d   d   fz  z  }| j                  d   r1|t        j                  d      j                  | j                        z  }|t        j                  d	      j                  | j                        z  }| j                  d
   dk(  r| j                  d   r1|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }| j                  d   r|t        j                  d      j                  | j                        z  }nb|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|t        j                  d      j                  | j                        z  }|dz  }|S )Nzcolortable y
z    raster $raster
rY  r   r   rK   rm   ru  z    discrete $discrete
r   rZ   rn   r  z    tickbar $tickbar
r  z    range $min $max
z    cols $cols
z    nodata $nodata
rZ  r  r  r6  s     r   r1   zRasterLegend.__str__c  s    !78CCDDTDTUU(W%a(W%a(,
 
 	
 G$V__%9:EEdFVFVWWE!;<GG
 	
 J'3.))?@KK$$  V__%=>II   E ()@ALL$$  V__%78CCDDTDTUUEV__%;<GG   E 	H

*T%%
&	' 	r   c           	         i }d|d<   |D ][  }	 |j                  d      r/t        t        t        |j	                         dd             |d<   n|j                  d      r|j	                         d   |d<   n|j                  d      r!t        |j	                         d         |d<   n|j                  d	      r|j	                         d   |d
<   n|j                  d      r|j	                         d   |d<   nj|j                  d      r!t        |j	                         d         |d<   n8|j                  d      r!t        |j	                         d         |d<   n|j                  d      r!t        |j	                         d         |d<   n|j                  d      rEd|d<   t        |j	                         d         |d<   t        |j	                         d         |d<   n~|j                  d      rp|j	                         d   j                         j                         dv rd|d<   n5|j	                         d   j                         j                         dv rd|d<   n|j                  d      rn|j	                         d   j                         j                         dv rd|d<   n|j	                         d   j                         j                         dv rd|d<   n~|j                  d      rm|j	                         d   j                         j                         dv rd|d<   n6|j	                         d   j                         j                         dv rd|d<   ^ d|v r.d|d<   d|vr*t        |d         }||d<   |dk(  rd|d<   nd|d<   nd|d<   | j                  j                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w) r  Tr  r   rK   r   font rV  r   zcolor r  r=   rm   rn   r   r  r  r\   r  r  r~   r   r{   rZ   r  r   r  Fr   r   r?   r   )r   r   r'   r   r   r   r   r   r#  r$  r   r   r   r   r%  )r   r   r0   r   r   rs   r   s          r   r   zRasterLegend.Read  sb   i (	D'??7+%)#eTZZ\!A5F*G%HE'N__W-$(JJLOE&M__Z0(-djjl1o(>E*%__X.%)ZZ\!_E'N__X.&*jjl1oE(O__W-%*4::<?%;E'N__X.&+DJJLO&<E(O__V,$'

Q$8E&M__W-%)E'N#(a#9E%L#(a#9E%L__X.zz|A,,.446,F*-ha..0668<OO*-h__Y/zz|A,,.446,F+.i(a..0668<OO+.i(__Z0zz|A,,.446,F,/j)a..0668<OO,/j)I(	T u%*E/"&*uX?
 *f'(+E*%(+E*% &*E/"& ' 
+ q89KGHs   MN<<&O&%O&Nc                    |dk(  r&|r|}n!| j                   j                  |dz  dd      }|dk(  r|r|}nd}t        j                  |      }|d   d	v r|d
   |d   }}t	        ||z        }	nUt        j
                  d|d      j                         j                  d      }
t	        t        t        |
            |z        }	| j                   j                  d|	z  |z  dd      }|S )z%Estimate height to draw raster legendrZ   rT  rr   rd   rf   r   rK   datatype)DCELLFCELLr  r  z
r.categoryrW   )r'   sepr!   g      ?)
r   r   r(   raster_infor   rE  r   r   r   rL   )r   r=   r   r   r   rn   rinfominimmaximrowscats              r   r   zRasterLegend.EstimateHeight  s    s?.."R-'& /  s?%%f-EZ $66$U|U5\uEDL) &&|SIUWU4[ 
 E#c(Od23]]**Dj8+gf + F r   c                    |dk(  rt        j                  |      }|d   |d   }	}|r|}n!| j                  j                  |dz  dd      }t	        t        t        |      t        |	      t                    }
| j                  j                  |
|z  dz  dd      }||z  }|S |d	k(  r,|r|}nd
}|r|}|S |d   |d   z
  |d   z
  }||z  |d
z
  z  d
z   }|S )z#Estimate size to draw raster legendrZ   r  r  r\   rr   rd   rf   r   r   rK   r-  r0  r/  )r(   r  r   r   rL   r  r+   )r   r=   r   r   r   rm   r   r  r  r  r0   textPart
paperWidths                r   r   zRasterLegend.EstimateWidth  s   
 s?%%f-E <u5E--"Q, .  s3u:s5zs;<D}},,Xo)GF - H XE   _ 	 w'*W*==
6@RR  $d*tax81<r   NN)NNN)	r   r   r   r   r   r1   r   r   r   r   r   r   r   r   C  s(    39:!F=~ F MQ"r   r   c                   *    e Zd ZdZd Zd Zd ZddZy)r   r  c                     t         j                  | ||       d| _        t        ddddddd d	d
d
      | _        t        | j                        | _        y )Nr  r   Frd   rR  Tg?rK   rS  rT  r}   )
vLegendrU  r   defaultSizerm   r   spanrV  r   r.   r	  r   s      r   r   zVectorLegend.__init__  s^    ""4BC"8"	"&#
   7 78r   c                    d}|d| j                   d   d   | j                   d   d   fz  z  }|t        j                  d      j                  | j                         z  }|t        j                  d      j                  | j                         z  }| j                   d   r1|t        j                  d	      j                  | j                         z  }|t        j                  d
      j                  | j                         z  }|dz  }|S )Nzvlegend
rY  r   r   rK   z&    font $font
    fontsize $fontsize
z     width $width
    cols $cols
r  z    span $span
rt  r  r5  r6  s     r   r1   zVectorLegend.__str__"  s   (W%a(W%a(,
 
 	
 	!KLWW
 	
 	!EFQQ
 	
 F#V__%78CCDDTDTUUE!78CCDDTDTUUr   c           	      \   i }d|d<   |D ]W  }	 |j                  d      r/t        t        t        |j	                         dd             |d<   n|j                  d      r|j	                         d   |d<   n|j                  d      r t        |j	                         d         |d<   n|j                  d	      r t        |j	                         d         |d	<   n|j                  d
      r t        |j	                         d         |d
<   nX|j                  d      r t        |j	                         d         |d<   n'|j                  d      r|j	                         d   |d<   Z | j                  j                  |       y# t        t        f$ r t        t        d      |z         Y  yw xY w)r  Tr  r   rK   r   r  rV  r   rm   r   r  r.   r  F)r   r   r'   r   r   r   r#  r$  r   r   r   r%  )r   r   r0   r   r   rs   s         r   r   zVectorLegend.Read4  sh   i 	D??7+%)#eTZZ\!A5F*G%HE'N__W-$(JJLOE&M__Z0(-djjl1o(>E*%__W-%*4::<?%;E'N__V,$'

Q$8E&M__V,$)$**,q/$:E&M__X.&*jjl1oE(O	* 	& 
+ q89KGHs   EF&F+*F+Nc                 z   |r|}n|dz  }|r|}nd}|d   }|D cg c]  }|d   dk7  s|d    }}t        t        |t                     |z  dz  |f}| j                  j                  |d   d	d
      }	| j                  j                  |d   d	d
      }
||	z   |z  }t        |      |
z  |z  }|dz  }||fS c c}w )z#Estimate size to draw vector legendg      8@rK   r   r   r   r   r  r\   rr   rd   rf   r  )rL   r  r   r   )r   r   r   rm   r   vectorsr:   r>   extentwExtenthExtentr]   rb  s                r   r   zVectorLegend.EstimateSizeQ  s    EtOEDDf%*1DVAY!^&)DDc&c*+h6:HE--'')gf ( 
 --'')gf ( 
 W_$K'!D(	S1v Es
   B8B8r  r  r   r   r   r   r     s    39&$:r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z%Class representing raster instructionc                     t         j                  | ||       d| _        t        dd       | _        t        | j                        | _        y )Nr  r=   F)isRasterr=   r	  r   s      r   r   zRaster.__init__o  s@    ""4BC"8	"&d"C 7 78r   c                 b    t        j                  d      j                  | j                        }|S )Nzraster $rasterr  r6  s     r   r1   zRaster.__str__w  s'     01<<T=M=MNr   c                 h   i }d|d<   	 |j                         d   }	 t	        j
                  |d      }|d
   |d<   | j                  j                  |       y# t        $ r t        t        d      |z         Y yw xY w# t        j                  $ r }t        |j                         Y d	}~yd	}~ww xY w)r  Tr	  rK   r  FcellelementrS   Nfullnamer=   )
r   r#  r   r   r(   	find_filer   rg   r   r%  )r   r   r0   r   r'   infor^   s          r   r   zRaster.Read{  s     j	**,q/C	??37D z*h&  	145CD	
    	177#	s(   A A>  A;:A;>B1B,,B1Nr'  r   r   r   r   r   l  s    /9r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   zClass keeps vector layersc                     t         j                  | ||       d| _        t        d       | _        t        | j                        | _        y )Nr  r:   r;   r	  r   s      r   r   zVector.__init__  s=    ""4BC"8	"&D/ 7 78r   c                      y)Nr&   r   r   s    r   r1   zVector.__str__  s    r   c                    i }|D ]  }|j                  d      s#|j                  d      s|j                  d      s7|j                  d      rd}n'|j                  d      rd}n|j                  d      rd}|j                         d   }	 t        j                  |d	      }|d   }|d   }
|d   }dj                  |j                  d            dz   } n 
g}| j                  d   sg | j                  d<   | j                  d   j                  |       y# t        j                  $ r!}	t        |	j                  
       Y d}	~	 yd}	~	ww xY w)r  rv   rw   rx   pointslinesareasrK   r:   r  rS   NFr  r4   ry   (@)r   T)
r   r   r(   r  r   r   rg   r,   r   rG   )r   r   r0   r   r   rs   r   r   r  r^   r4   r   r   s                r   r   zVector.Read  sD    	D	*??8,??8, ??9-&G__X.%G__X.%Gzz|A! ??4BD J'D\/0C1C77	8 wD%0'')DV$ ''.! (( !177+ !s   DE.E

ENr'  r   r   r   r   r     s    #9%r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z5Class represents instructions vareas, vlines, vpointsc                 <   t         j                  | ||       d| _        || _        | j                  dk(  rdt	        d/i dddd dddd	d
ddddddddddd dt
        j                  j                  dd      dd dddd dd dd	ddd d d!d d"d }nb| j                  d#k(  r:t	        d/i dd#dd dd$dd	d
dddddd%dd&d'dd ddd(d d)d*d+d,d!d d"d }nt	        d-d d	ddddd'd d ddd d .      }|| _        t	        | j                        | _	        y )0Nr  r<   r  r   namer?   zpoint or centroid
connectionFlayerrh  maskedrZ   r  r  rm   rK   r  z255:0:0	rgbcolumnr  r  r   rq   r   r  
sizecolumnrj   rotationrj  r   rotatecolumnr   r   r  zline or boundaryrg  rf  r}   cwidthstylesolidlinecapbuttr  )r   r  r  r   r!  r  rm   r  r"  patpwidthrj   r   r   r   )
r   r   r?   r   r   r  r  r,   r   r   )r   r4   r   r   dds        r   r   zVProperties.__init__  s   ""4BC"8!	<<8#   ) !	
     !  ww||GS1       !" #$ "%& '( )B, \\W$  ( !	
             !B&  B  #% 7 78r   c                 	   | j                   }t        j                  d      j                  |      }| j                  dv r'|t        j                  d      j                  |      z  }|d   r~|t        j                  d      j                  |      z  }d|v r(|t        j                  d      j                  |      z  }n+d|v r'|t        j                  d	      j                  |      z  }|t        j                  d
      j                  |      z  }|t        j                  d      j                  |      z  }| j                  dv r|d   dk7  r'|t        j                  d      j                  |      z  }|d   r'|t        j                  d      j                  |      z  }|t        j                  d      j                  |      z  }n|d   r(|t        j                  d      j                  |      z  }nV|d   dk7  rN|t        j                  d      j                  |      z  }|t        j                  d      j                  |      z  }| j                  dk(  r(|d   s(|t        j                  d      j                  |      z  }n'|t        j                  d      j                  |      z  }|d   r(|t        j                  d      j                  |      z  }nN|t        j                  d      j                  |      z  }|t        j                  d      j                  |      z  }|d   rT|d   (|t        j                  d       j                  |      z  }n'|t        j                  d!      j                  |      z  }| j                  d"k(  r|d#   ~|d#   j                  t        j                  d$      d%      }|d&|z  z  }|t        j                  d'      j                  |      z  }|t        j                  d      j                  |      z  }| j                  d(k(  r|d)   (|t        j                  d      j                  |      z  }n'|t        j                  d*      j                  |      z  }|t        j                  d+      j                  |      z  }|t        j                  d,      j                  |      z  }|t        j                  d-      j                  |      z  }|d.z  }|S )/Nzv$subType $name
)r  r  z    type $type
r  z    layer $layer
rA  z    cats $cats
r   z    where $where
z    masked $masked
r  )r  r  r  r}   ru  r"  z    rgbcolumn $rgbcolumn
r  rf  rs  rr  r  rq   r  z    eps $eps
r   r  z    sizecolumn $sizecolumn
r  r$  rj  rw  z    rotatecolumn $rotatecolumn
r  r+  r  r  z    pat %s
z    pwidth $pwidth
r  rm   z    cwidth $cwidth
z    style $style
z    linecap $linecap
z     label $label
    lpos $lpos
r  )r   r  r  r  r   r   r  r  )r   dicvInstructionpatternFiles       r   r1   zVProperties.__str__  sb   ':;FFsK<<..FOO,>?JJ3OOL|FOO,@ALLSQQL}0B C N Ns SSC0D E P PQT UU(>?JJ3OO(<=HHMM<<..7|v%0D E P PQT UU;0!*S/" FOO,BCNNsSSL;0!*S/" X&(0F G R RSV WW0F G R RSV WW <<8#u:0F G R RSV WW0@ A L LS QQ6{0B C N Ns SS2!*S/" 0D E P PQT UU:x=, FOO4J$K$V$V% L !FOO:% jo&L <<7"5z%!%j0091EzR <<0F G R RSV WW0D E P PQT UU<<7"7|'0D E P PQT UU0F G R RSV WWFOO,@ALLSQQLFOO,DEPPQTUUL0

*S/	 		!r   c                 2   i }	 t        j                  |d   j                         d   d      }|d   |d	<   d
|d<   t        |d	         | _        | j                  j                  j                         | _        | j                  sd|d<   |d   j                  d      r|dd D ]   }|j                  d      rag }|j                  d      dk7  r|j                  d       |j                  d      dk7  r|j                  d       dj                  |      |d<   v|j                  d      r|j                         d   |d<   |j                  d      r|j                         d   |d<   |j                  d      r|j                         d   |d<   |j                  d      r|j                         d   |d<   |j                  d      r|j                         d   |d<   @|j                  d      rd|d<   |j                         d   |d<   n|j                  d      r!t        |j                         d         |d<   |j                  d      rd
|d<   |j                         d   |d<   |j                  d      s|j                         d   |d<   d
|d<   d|d<    n|d   j                  d      r|dd D ]  }|j                  d      rag }|j                  d       dk7  r|j                  d        |j                  d!      dk7  r|j                  d!       dj                  |      |d<   v|j                  d"      r t        |j                         d         |d"<   |j                  d#      r|j                         d   |d#<   |j                  d      r|j                         d   |d<   |j                  d$      r&t        |j                         d         |d$<   d|d%<   .|j                  d&      r|j                         d   |d&<   W|j                  d'      sj|j                         d   |d'<    n|d   j                  d(      r|dd D ]  }|j                  d      r|j                         d   |d<   +|j                  d)      r<|j                         d   }	|	j                  d*t!        j"                  d+            |d)<   x|j                  d,      r t        |j                         d         |d,<   |j                  d      st        |j                         d         |d<    |dd D ]I  }|j                  d-      r t%        |j                         d         |d-<   5|j                  d.      r|j                  dd      d   |d.<   _|j                  d/      r|j                         d   |d/<   |j                  d0      r/|j                         d   j'                         d1v rd2|d0<   d3|d0<   |j                  d4      r|j                         d   |d4<   |j                  d      r|j                         d   |d<   |j                  d%      s+t        |j                         d         |d%<   L d.|vr)d5j                  |d	   j                  d6            d7z   |d.<   d-|vr|d8   |d-<   | j(                  j+                  |       y
# t         j                  $ r }t	        |j
                         Y d}~yd}~ww xY w)9r  r   rK   r:   )r  r  rS   NFr  r  Tr  rv   r?   rr   rX   centroidz or r  r"  r  rq   zsize r   r#  r   rj   zrotate r$  rj  r%  rw   rs   boundaryrg  rf  r&  rm   r'  r)  rx   r+  r  r  r,  r   r   r   r!  r~   r   rZ   r  r  r  r  ry   )r(   r  r   r   r   rg   r   	mapDBInfolayersr   r   r   rG   r,   r   r   r  r  r   r   r   r%  )
r   r   r0   r   r   r  r^   rs   tpr1  s
             r   r   zVProperties.ReadY  s
   	??Q(:HMD Z(f"l%eFm4nn++002{{"'E, 7i(QR +??6*Byy)R/		'*yy,2		*-$*KKOE&M__X.&*jjl1oE(O__[1)-aE+&__X.&*jjl1oE(O__U+#'::<?E%L__W-$(JJLOE&M__\2$(E&M*.**,q/E,'__X.%*4::<?%;E'N__Y/(,E*%&*jjl1oE(O__^4,0JJLOE.)(,E*%&*E(O;+@ !W)QR 7??6*Byy(B.		&)yy,2		*-$*KKOE&M__X.&+DJJLO&<E(O__X.&*jjl1oE(O__[1)-aE+&__X.&+DJJLO&<E(O%)E'N__W-%)ZZ\!_E'N__Y/'+zz|AE)$)7, !W)QR 	<??8,&*jjl1oE(O__U+"&**,q/K#.#6#6z299YCW#XE%L__X.&+DJJLO&<E(O__W-%*4::<?%;E'N	< H 	8Dv& #DJJLO 4f)!%D!!4Q!7g)!%ag*::<?((*l:&)E(O&)E(O)!%ag-%)ZZ\!_k")!&tzz|A!7g#	8& % XXeFm&9&9#&>?#EE'N"#45E&M&U    	177#	s   +[# #\6\\Nr'  r   r   r   r   r     s    ?B9HKZor   r   c                   "    e Zd ZdZd Zd Zd Zy)r   z%Class representing labels instructionc                     t         j                  | ||       d| _        t        g       | _        t        | j                        | _        y )Nr  r>   )r>   r	  r   s      r   r   zLabels.__init__  s=    ""4BC"8	"&b/ 7 78r   c                 L    d}| j                   d   D ]  }|d|z  z  }|dz  } |S )Nr&   r>   z
labels %s
zend
r   )r   r   r   s      r   r1   zLabels.__str__  sA    %%h/ 	E]U**EWE	 r   c                     |D ]G  }	 |j                  d      r3|j                  dd      d   }| j                  d   j                  |       I y# t        t
        f$ r t        t        d      |z         Y  yw xY w)r  r>   NrK   r  FT)r   r   r   rG   r#  r$  r   r   )r   r   r0   r   rs   r>   s         r   r   zLabels.Read  s     	D??8,!ZZa03F$$X.55f=		 	 
+ q89KGHs   AA&A87A8Nr'  r   r   r   r   r     s    /9r   r   )0r   r  r  rF  mathr   timer   r   ior   r  grass.scriptscriptr(   grass.script.taskr   	core.gcmdr   r	   r
   
core.utilsr   dbmgr.vinfor   gui_core.wrapr   r   psmap.utilsr   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>rG     sY   D 
  
  $  	  . 0 0 # $ * b bJ- -`
9 
9i  iXZ! ZzG
 G
Tw wt_3 _3D 0R RjH HVJ! JZq   q hF$ FR]$ ]@   F3 3lC# CL r   