o
    gcn                     @   sb  d dl Z d dlZeeZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZmZ d dlmZmZmZ d dlZddlmZ ddlmZ ddlmZ ddlmZmZmZmZ dd	lm Z  e!Z"d
d Z#e# Z$	 ddgZ%g dZ&g dZ'g dZ(G dd deZ)G dd de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Z0G d!d" d"eZ1G d#d$ d$eZ2G d%d& d&eZ3G d'd( d(eZ4G d)d* d*eZ5G d+d, d,eZ6G d-d. d.eZ7G d/d0 d0Z8G d1d2 d2eZ9G d3d4 d4eZ:G d5d6 d6eZ;G d7d8 d8eZ<e)e*e,e-e.e/e0e1e2e3e4e5e6e7e9e:e;e<gZ=d9d: Z>d;d< Z?dS )=    N)StringPropertyIntPropertyFloatPropertyBoolPropertyEnumPropertyFloatVectorProperty)OperatorPanelAddonPreferences   )bl_info)EPSGIO)SRS)HAS_GDAL
HAS_PYPROJHAS_PIL	HAS_IMGIO)settingsc                  C   s4   t jd} t j| d}t j|st | |S )N~z.bgis)ospath
expanduserjoinexistsmkdir)homeloc r   gC:\Users\olivi\AppData\Roaming\Blender Foundation\Blender\3.4\scripts\addons\BlenderGIS-master\prefs.py
getAppData   s
   
r   )z	EPSG:3857zWeb MercatorzLWorldwide projection, high distortions, not suitable for precision modelling)z	EPSG:4326zWGS84 latlonznLongitude and latitude in degrees, DO NOT USE AS SCENE CRS (this system is defined only for reprojection tasks))zhttps://portal.opentopography.org/API/globaldem?demtype=SRTMGL1&west={W}&east={E}&south={S}&north={N}&outputFormat=GTiff&API_Key={API_KEY}zOpenTopography SRTM 30mz6OpenTopography.org web service for SRTM 30m global DEM)zhttps://portal.opentopography.org/API/globaldem?demtype=SRTMGL3&west={W}&east={E}&south={S}&north={N}&outputFormat=GTiff&API_Key={API_KEY}zOpenTopography SRTM 90mz6OpenTopography.org web service for SRTM 90m global DEM)zwhttp://www.gmrt.org/services/GridServer?west={W}&east={E}&south={S}&north={N}&layer=topo&format=geotiff&resolution=highzMarine-geo.org GMRTzSMarine-geo.org web service for GMRT global DEM (terrestrial (ASTER) and bathymetry)))z+https://lz4.overpass-api.de/api/interpreterzoverpass-api.dezMain Overpass API instance)z0http://overpass.openstreetmap.fr/api/interpreterzoverpass.openstreetmap.frzFrench Overpass API instance)z-https://overpass.kumi.systems/api/interpreterzoverpass.kumi.systemszKumi Systems Overpass Instance)ZbuildingZhighwayZlanduseZleisureZnaturalZrailwayZwaterwayc                   @   &   e Zd ZdZdZdZdhZdd ZdS )BGIS_OT_pref_showzbgis.pref_showz%Display BlenderGIS addons preferencesPreferencesINTERNALc                 C   sL   t   d|j_td tjjd _t j	
t}d|jd< tjjd dhS )NADDONSnameZWinManTshow_expandedINVOKE_DEFAULTFINISHED)addon_utilsmodules_refreshpreferencesactive_sectionr   bpydatawindow_managersaddon_searchaddons_fake_modulesgetPKGopsscreenuserpref_show)selfcontextmodr   r   r   executeL   s   
zBGIS_OT_pref_show.executeN__name__
__module____qualname__	bl_idnamebl_descriptionbl_label
bl_optionsr:   r   r   r   r   r!   E       r!   c                   @   s  e Zd ZU eZdd Zeee	de
d< eddede
d< d	d
 Zdd Zeddeede
d< dd Zdd Zeddeede
d< eeede
d< dd Zeddede
d< dd Zd d! Zed"ed#d$eed%e
d&< ed'd(d)d*e
d+< ed,d-d)d*e
d.< ed/d0d1d*e
d2< ed3d4d)d*e
d5< ed6d7g d8de
d9< d:d; Zeeede
d<< ed=d>ede
d?< d@dA Zeeede
dB< edCdDede
dE< edFdGdHe
dI< edJdKd1d*e
dL< edMdNd)d*e
dO< edPdQd)d*e
dR< dSdT ZedUdVg dWedXdYe
dZ< d[d\ Zd]S )^
BGIS_PREFSc                 C      dd t | jD S )Nc                 S      g | ]}t |qS r   tuple).0elemr   r   r   
<listcomp>`       z,BGIS_PREFS.listPredefCRS.<locals>.<listcomp>)jsonloadspredefCrsJsonr7   r8   r   r   r   listPredefCRS_      zBGIS_PREFS.listPredefCRS)defaultrO   zPredefinate CRSz.Choose predefinite Coordinate Reference System)r%   descriptionitems	predefCrsc                 C   s:   dg}t r
|d tr|d |d |d |S )N)AUTOAuto detectz3Auto select the best library for reprojection tasks)GDALrY   z!Force GDAL as reprojection engine)PYPROJZpyProjz#Force pyProj as reprojection engine)r   zepsg.ioz$Force epsg.io as reprojection engine)BUILTINzBuilt inz4Force reprojection through built in Python functions)r   appendr   r7   r8   rU   r   r   r   getProjEngineItemso   s   



zBGIS_PREFS.getProjEngineItemsc                 C      | j t_d S N)
projEnginer   proj_enginerP   r   r   r   updateProjEngine{      zBGIS_PREFS.updateProjEnginezProjection enginezSelect projection enginer%   rT   rU   updatera   c                 C   s4   dg}t r
|d tr|d tr|d |S )N)rW   rX   z$Auto select the best imaging library)rY   rY   z%Force GDAL as image processing engine)IMGIOZImageIOz)Force ImageIO as image processing  engine)PILrh   z%Force PIL as image processing  engine)r   r\   r   r   r]   r   r   r   getImgEngineItems   s   


zBGIS_PREFS.getImgEngineItemsc                 C   r_   r`   )	imgEnginer   
img_enginerP   r   r   r   updateImgEngine   rd   zBGIS_PREFS.updateImgEnginezImage processing enginezSelect image processing enginerj   osmTagsJsonc                 C   s(   |j jt j }t|j}dd |D S )Nc                 S   s   g | ]}|||fqS r   r   )rI   tagr   r   r   rK          z*BGIS_PREFS.listOsmTags.<locals>.<listcomp>)r+   addonsr3   rM   rN   rm   r7   r8   prefstagsr   r   r   listOsmTags   s   zBGIS_PREFS.listOsmTagszOSM tagszList of registered OSM tagsosmTagsc                 C   s   t j| ddS )NcacheFolder )r-   r   abspathr2   r7   r   r   r   getCacheFolder   s   zBGIS_PREFS.getCacheFolderc                 C   s6   t |t jt jB r|| d< d S td d| d< d S )Nrv   z-The selected cache folder has no write accessz'The selected folder has no write access)r   accessX_OKW_OKlogerror)r7   valuer   r   r   setCacheFolder   s   
zBGIS_PREFS.setCacheFolderzCache folderz3Define a folder where to store Geopackage SQlite dbDIR_PATH)r%   rS   rT   subtyper2   setrv   zSynch. lat/longz[Keep geo origin synchronized with crs origin. Can be slow with remote reprojection servicesTr%   rT   rS   synchOrjzZoom to mousez'Zoom towards the mouse pointer positionzoomToMousezLock originz)Do not move scene origin when panning mapF
lockOriginzLock objectsz1Retain objects geolocation when moving map originlockObjzResampling methodz5Choose GDAL's resampling method used for reprojection))NNzNearest Neighboorrw   )BLZBilinearrw   )CBCubicrw   )CBSzCubic Splinerw   )LCZZLanczosrw   
resamplAlgc                 C   rE   )Nc                 S   rF   r   rG   rI   entryr   r   r   rK      rL   z1BGIS_PREFS.listOverpassServer.<locals>.<listcomp>)rM   rN   overpassServerJsonrP   r   r   r   listOverpassServer   rR   zBGIS_PREFS.listOverpassServerr   zOverpass serverzSelect an overpass serveroverpassServerc                 C   rE   )Nc                 S   rF   r   rG   r   r   r   r   rK      rL   z,BGIS_PREFS.listDemServer.<locals>.<listcomp>)rM   rN   demServerJsonrP   r   r   r   listDemServer   rR   zBGIS_PREFS.listDemServerr   zElevation serverz@Select a server that provides Digital Elevation Model datasource	demServerrw   zByou need to register and request a key from opentopography websiter%   rT   opentopography_api_keyzMerge duplicate verticeszAMerge shared vertices between features when importing vector datamergeDoubleszAdjust 3D viewzWUpdate 3d view grid size and clip distances according to the new imported object's sizeadjust3DviewzForce textured solid shadingz/Update shading mode to display raster's textureforceTexturedSolidc                 C   s    t t}|t | j d S r`   )logging	getLoggerr3   setLevelgetLevelNamelogLevel)r7   r8   loggerr   r   r   updateLogLevel  s   
zBGIS_PREFS.updateLogLevelzLogging levelzSelect the logging level))DEBUGDebugrw   )INFOInforw   )WARNINGWarningrw   )ERRORErrorrw   )CRITICALZCriticalrw   r   )r%   rT   rU   rf   rS   r   c                 C   s  | j }| }|jdd | jdd}|j| ddd |jddd	 |jd
dd	 |jddd	 |jddd	 | }|jdd || d | }|| d || d || d || d | }|| d | }|jdd | jdd}|jddd}|| d d|jddd	_|jddd	 |jd dd	 |jd!dd	 |jd"dd	 | }|| d# || d$ || d% | }|jd&d | jdd}|| d' |jd(dd	 |jd)dd	 |jd*dd	 |jd+dd	 | jdd}|| d, |jd-dd	 |jd.dd	 |jd/dd	 |jd0dd	 | }|jd1d | | d2 | }|jd3d || d4 || d5 || d6 d S )7NzSpatial Reference Systems)textg      ?)factorrV   rw   bgis.add_predef_crsADD)iconbgis.edit_predef_crsPREFERENCESbgis.rmv_predef_crsREMOVEbgis.reset_predef_crsPLAY_REVERSEZBasemapsrv   r   r   r   r   r   zImport/Exportg?T)r   alignru   z/http://wiki.openstreetmap.org/wiki/Map_Featureszwm.url_openr   bgis.add_osm_tagbgis.edit_osm_tagbgis.rmv_osm_tagbgis.reset_osm_tagsr   r   r   zRemote datasourcer   bgis.add_overpass_serverbgis.edit_overpass_serverbgis.rmv_overpass_serverbgis.reset_overpass_serverr   bgis.add_dem_serverbgis.edit_dem_serverbgis.rmv_dem_serverbgis.reset_dem_serverzOpentopography Api Keyr   Systemra   rj   r   )layoutboxlabelrowsplitpropoperatorurl)r7   r8   r   r   r   r   r   r   r   draw  sn   zBGIS_PREFS.drawN)r<   r=   r>   r3   r?   rQ   r   rM   dumpsDEFAULT_CRS__annotations__r   r^   rc   ri   rl   DEFAULT_OSM_TAGSrt   rz   r   APP_DATAr   r   DEFAULT_OVERPASS_SERVERr   DEFAULT_DEM_SERVERr   r   r   r   r   r   rD   X   s   
 







	
	

	






	rD   c                   @   s4   e Zd ZdZedd Zedd Zedd ZdS )		PredefCRSz
	Collection of utility methods (callable at class level) to deal with predefined CRS dictionary
	Can be used by others operators that need to fill their own crs enum
	c                  C   s   t jjjt j} t| jS )Load the json string)r-   r8   r+   rp   r3   rM   rN   rO   )rr   r   r   r   getData`  s   zPredefCRS.getDatac                    s6   |   }z fdd|D d W S  ty   Y dS w )zYReturn the convenient name of a given srid or None if this crs does not exist in the listc                    s    g | ]}|d   kr|d qS )r   r   r   r   keyr   r   rK   k  s     z%PredefCRS.getName.<locals>.<listcomp>r   N)r   
IndexError)clsr   r.   r   r   r   getNamef  s   zPredefCRS.getNamec                 C   s   dd |   D S )zAReturn a list of predefined crs usable to fill a bpy EnumPropertyc                 S   rF   r   rG   r   r   r   r   rK   r  rL   z*PredefCRS.getEnumItems.<locals>.<listcomp>)r   r   r   r   r   getEnumItemso  s   zPredefCRS.getEnumItemsN)	r<   r=   r>   __doc__staticmethodr   classmethodr   r   r   r   r   r   r   Y  s    

r   c                   @   s   e Zd ZU dZdZdZdhZeddded< ed	d
ded< ed	dded< dd Z	dd Z
dd Zdd Zedde
ded< e ed< eddeeded< edd d!d"ed#< ed$d%d!d"ed&< d'd( Zd)d* Zd+d, Zd-S ).BGIS_OT_add_predef_crsr   zAdd predefinate CRSAddr#   Z
Definition9Specify EPSG code or Proj4 string definition for this CRSr   crsDescription%Choose a convenient name for this CRSr%   +Add a description or comment about this CRSdescc                 C      dS NTr   rP   r   r   r   check  s   zBGIS_OT_add_predef_crs.checkc                 C   s^   t  s| dhd d S t | j}t|| _|r-d|d d  | _|d d | _	d S d S )Nr   zCannot request epsg.io websiteEPSG:r   coder%   )
r   pingreportsearchqueryrM   r   resultsr   r%   )r7   r8   r   r   r   r   r     s   zBGIS_OT_add_predef_crs.searchc                 C   sH   g }| j dkr"t| j D ]}d|d  }||d |d |f q|S )Nrw   r   r   r%   )r   rM   rN   r\   )r7   r8   ZcrsItemsresultZsridr   r   r   updEnum  s   
zBGIS_OT_add_predef_crs.updEnumc                    sH    j dkr" fddt j D d }d|d   _|d  _d S d S )Nrw   c                    s   g | ]}|d   j kr|qS )r   )crsEnum)rI   r   ry   r   r   rK     s    z/BGIS_OT_add_predef_crs.fill.<locals>.<listcomp>r   r   r   r%   )r   rM   rN   r   r   )r7   r8   r   r   ry   r   fill  s
   
zBGIS_OT_add_predef_crs.fillZQueryzHit enter to process the search)r%   rT   rf   r   r   ZResultszSelect the desired CRSre   r   Searchz/Search for coordinate system into EPSG databaseFr   r   zSave to addon preferencesz-Save Blender user settings after the additionsavec                 C      |j | S r`   window_managerinvoke_props_dialogr7   r8   eventr   r   r   invoke  rd   zBGIS_OT_add_predef_crs.invokec                 C   s`   | j }|| d | jr|| d || d |  || d || d || d d S )Nr   r   r   r   r%   r   )r   r   r   	separator)r7   r8   r   r   r   r   r     s   zBGIS_OT_add_predef_crs.drawc                 C   s   t | js| dhd | j rd| j | _|jjt j}t	|j
}|| j| j| jf t||_
|j  | jrDtjj  dhS )Nr   Invalid CRSr   r(   )r   validater   r   isdigitr+   rp   r3   rM   rN   rO   r\   r%   r   r   area
tag_redrawr   r-   r4   wmZsave_userprefr7   r8   rr   r.   r   r   r   r:     s   

zBGIS_OT_add_predef_crs.executeN)r<   r=   r>   r?   r@   rA   rB   r   r   r   r   r   r   r   r   r  r   r:   r   r   r   r   r   x  s(   
 

r   c                   @   r    )BGIS_OT_rmv_predef_crsr   zRemove predefinate CRSRemover#   c                    V   |j jt j }|j  dkr#t|j} fdd|D }t||_|j	  dhS )Nrw   c                       g | ]
}|d   kr|qS r   r   rI   er   r   r   rK         z2BGIS_OT_rmv_predef_crs.execute.<locals>.<listcomp>r(   )
r+   rp   r3   rV   rM   rN   rO   r   r  r  r
  r   r   r   r:        
zBGIS_OT_rmv_predef_crs.executeNr;   r   r   r   r   r    rC   r  c                   @   r    )BGIS_OT_reset_predef_crsr   zReset predefinate CRSResetr#   c                 C   *   |j jt j }tt|_|j  dhS Nr(   )	r+   rp   r3   rM   r   r   rO   r  r  r7   r8   rr   r   r   r   r:        
z BGIS_OT_reset_predef_crs.executeNr;   r   r   r   r   r    rC   r  c                   @   s`   e Zd ZU dZdZdZdhZeddded< ed	d
ded< eddded< dd Z	dd Z
dS )BGIS_OT_edit_predef_crsr   zEdit predefinate CRSEditr#   zEPSG code or Proj4 stringr   r   r   r   r   r%   Namer   r   c                    `   |j jt j }|j  dkrdhS t|j} fdd|D d }|\| _| _| _	|j
| S )Nrw   	CANCELLEDc                       g | ]
}|d   kr|qS r  r   r   r   r   r   rK     r  z2BGIS_OT_edit_predef_crs.invoke.<locals>.<listcomp>r   )r+   rp   r3   rV   rM   rN   rO   r   r%   r   r   r   r7   r8   r  rr   r.   r   r   r   r   r       zBGIS_OT_edit_predef_crs.invokec                    s   |j jt j }|j t|j}t| j	r8 fdd|D }|
| j	| j| jf t||_|j  dhS | dhd dhS )Nc                    r  r  r   r   r   r   r   rK     r  z3BGIS_OT_edit_predef_crs.execute.<locals>.<listcomp>r   r  r(   )r+   rp   r3   rV   rM   rN   rO   r   r  r   r\   r%   r   r   r  r  r   r
  r   r   r   r:     s   
zBGIS_OT_edit_predef_crs.executeNr<   r=   r>   r?   r@   rA   rB   r   r   r  r:   r   r   r   r   r       
 
r  c                   @   @   e Zd ZU dZdZdZdhZeddded< d	d
 Z	dd Z
dS )BGIS_OT_add_osm_tagr   z"Add new predefinate OSM filter tagr   r#   Tag=Specify the tag (examples : 'building', 'landuse=forest' ...)r   rn   c                 C   r   r`   r   r   r   r   r   r    rd   zBGIS_OT_add_osm_tag.invokec                 C   sJ   |j jt j }t|j}|| j t||_| j|_	|j
  dhS r  )r+   rp   r3   rM   rN   rm   r\   rn   r   ru   r  r  rq   r   r   r   r:     s   
zBGIS_OT_add_osm_tag.executeNr"  r   r   r   r   r%    s   
 r%  c                   @   r    )BGIS_OT_rmv_osm_tagr   z!Remove predefinate OSM filter tagr  r#   c                 C   sP   |j jt j }|j}|dkr t|j}|||= t||_|j	
  dhS )Nrw   r(   )r+   rp   r3   ru   rM   rN   rm   indexr   r  r  r7   r8   rr   rn   rs   r   r   r   r:   )  s   
zBGIS_OT_rmv_osm_tag.executeNr;   r   r   r   r   r(  "  rC   r(  c                   @   r    )BGIS_OT_reset_osm_tagsr   z Reset predefinate OSM filter tagr  r#   c                 C   r  r  )	r+   rp   r3   rM   r   r   rm   r  r  r  r   r   r   r:   :  r  zBGIS_OT_reset_osm_tags.executeNr;   r   r   r   r   r+  3  rC   r+  c                   @   r$  )BGIS_OT_edit_osm_tagr   zEdit predefinate OSM filter tagr  r#   r&  r'  r   rn   c                 C   s2   |j jt j }|j| _| jdkrdhS |j| S )Nrw   r  )r+   rp   r3   ru   rn   r   r   )r7   r8   r  rr   r   r   r   r  I  s
   
zBGIS_OT_edit_osm_tag.invokec                 C   s\   |j jt j }|j}t|j}|||= || j	 t
||_| j	|_|j  dhS r  )r+   rp   r3   ru   rM   rN   rm   r)  r\   rn   r   r  r  r*  r   r   r   r:   P  s   
zBGIS_OT_edit_osm_tag.executeNr"  r   r   r   r   r,  @  s   
 r,  c                   @   `   e Zd ZU dZdZdZdhZeddded< ed	d
ded< ed	dded< dd Z	dd Z
dS )BGIS_OT_add_dem_serverr   zAdd new topography web servicer   r#   Url templateLDefine url template string. Bounding box varaibles are {W}, {E}, {S} and {N}r   r   r   (Choose a convenient name for this serverr%   9Add a description or comment about this remote datasourcer   c                 C   r   r`   r   r   r   r   r   r  h  rd   zBGIS_OT_add_dem_server.invokec                    s~   g d}t  fdd|D r5|jjt j}t|j}| j j	 j
f t||_|j  dhS  dhd dhS )Nz{W}z{E}z{S}z{N}c                       g | ]}| j v qS r   r   rI   try   r   r   rK   m  ro   z2BGIS_OT_add_dem_server.execute.<locals>.<listcomp>r   Invalid URLr(   )allr+   rp   r3   rM   rN   r   r\   r   r%   r   r   r  r  r   )r7   r8   	templatesrr   r.   r   ry   r   r:   k  s   
zBGIS_OT_add_dem_server.executeNr"  r   r   r   r   r.  ^     
 r.  c                   @   r    )BGIS_OT_rmv_dem_serverr   z%Remove a given topography web servicer  r#   c                    r  )Nrw   c                    r  r  r   r  r   r   r   rK     r  z2BGIS_OT_rmv_dem_server.execute.<locals>.<listcomp>r(   )
r+   rp   r3   r   rM   rN   r   r   r  r  r
  r   r   r   r:   ~  r  zBGIS_OT_rmv_dem_server.executeNr;   r   r   r   r   r<  w  rC   r<  c                   @   r    )BGIS_OT_reset_dem_serverr   z$Reset default topographic web serverr  r#   c                 C   r  r  )	r+   rp   r3   rM   r   r   r   r  r  r  r   r   r   r:     r  z BGIS_OT_reset_dem_server.executeNr;   r   r   r   r   r=    rC   r=  c                   @   r-  )BGIS_OT_edit_dem_serverr   zEdit a topographic web serverr  r#   r/  r0  r   r   r   r1  r%   r2  r   c                    r  )Nrw   r  c                    r  r  r   r   r   r   r   rK     r  z2BGIS_OT_edit_dem_server.invoke.<locals>.<listcomp>r   )r+   rp   r3   r   rM   rN   r   r   r%   r   r   r   r   r   r   r   r    r!  zBGIS_OT_edit_dem_server.invokec                    s   |j jt j }|j t|j}g d}tfdd|D rA fdd|D }|j	j
jf t||_|j  dhS dhd dhS )Nr3  c                    r4  r   r5  r6  ry   r   r   rK     ro   z3BGIS_OT_edit_dem_server.execute.<locals>.<listcomp>c                    r  r  r   r   r   r   r   rK     r  r   r8  r(   )r+   rp   r3   r   rM   rN   r   r9  r\   r   r%   r   r   r  r  r   )r7   r8   rr   r.   r:  r   )r   r7   r   r:     s   
zBGIS_OT_edit_dem_server.executeNr"  r   r   r   r   r>    r#  r>  c                   @   sH   e Zd ZdZdd Zdd Zdd fdd	Zd
d Zdd Zdd Z	dS )EditEnumz
	Helper to deal with an enum property that use a serialized json backend
	Can be used by others operators to edit and EnumProperty
	WORK IN PROGRESS
	c                 C   s&   t jjjt j| _|| _|d | _d S )NZJson)r-   r8   r+   rp   r3   rr   enumNamejsonName)r7   r@  r   r   r   __init__  s   zEditEnum.__init__c                 C   s"   t t| j| j}dd |D S )r   c                 S   rF   r   rG   r   r   r   r   rK     rL   z$EditEnum.getData.<locals>.<listcomp>)rM   rN   getattrrr   rA  )r7   r.   r   r   r   r     s   zEditEnum.getDatac                 C   r   r   r   )xr   r   r   <lambda>  s    zEditEnum.<lambda>c                 C   s>   ||sd S |   }||||f t| j| jt| d S r`   )r   r\   setattrrr   rA  rM   r   )r7   r   r   tooltipr   r.   r   r   r   r\     s
   zEditEnum.appendc                    s@    dkr|   } fdd|D }t| j| jt| d S d S )Nrw   c                    r  r  r   r  r   r   r   rK     r  z#EditEnum.remove.<locals>.<listcomp>)r   rF  rr   rA  rM   r   )r7   r   r.   r   r   r   remove  s
   zEditEnum.removec                 C   s   |  | | ||| d S r`   )rH  r\   )r7   r   r   r   rG  r   r   r   edit  s   
zEditEnum.editc                 C   s   t | j| jtt d S r`   )rF  rr   rA  rM   r   r   ry   r   r   r   reset  s   zEditEnum.resetN)
r<   r=   r>   r   rB  r   r\   rH  rI  rJ  r   r   r   r   r?    s    r?  c                   @   r-  )BGIS_OT_add_overpass_serverr   zAdd new OSM overpass server urlr   r#   r/  /Define the url end point of the overpass serverr   r   r   r1  r%   5Add a description or comment about this remote serverr   c                 C   r   r`   r   r   r   r   r   r    rd   z"BGIS_OT_add_overpass_server.invokec                 C   sL   |j jt j }t|j}|| j| j| j	f t
||_|j  dhS r  )r+   rp   r3   rM   rN   r   r\   r   r%   r   r   r  r  r
  r   r   r   r:     s   
z#BGIS_OT_add_overpass_server.executeNr"  r   r   r   r   rK    r;  rK  c                   @   r    )BGIS_OT_rmv_overpass_serverr   zRemove a given overpass serverr  r#   c                    r  )Nrw   c                    r  r  r   r  r   r   r   rK     r  z7BGIS_OT_rmv_overpass_server.execute.<locals>.<listcomp>r(   )
r+   rp   r3   r   rM   rN   r   r   r  r  r
  r   r   r   r:     r  z#BGIS_OT_rmv_overpass_server.executeNr;   r   r   r   r   rN    rC   rN  c                   @   r    )BGIS_OT_reset_overpass_serverr   zReset default overpass serverZRestr#   c                 C   r  r  )	r+   rp   r3   rM   r   r   r   r  r  r  r   r   r   r:     r  z%BGIS_OT_reset_overpass_server.executeNr;   r   r   r   r   rO  	  rC   rO  c                   @   r-  )BGIS_OT_edit_overpass_serverr   zEdit an overpass server urlr  r#   r/  rL  r   r   r   r1  r%   rM  r   c                    r  )Nrw   r  c                    r  r  r   r   r   r   r   rK   '  r  z7BGIS_OT_edit_overpass_server.invoke.<locals>.<listcomp>r   )r+   rp   r3   r   rM   rN   r   r   r%   r   r   r   r   r   r   r   r  !  r!  z#BGIS_OT_edit_overpass_server.invokec                    sd   |j jt j }|j t|j} fdd|D }|| j| j	| j
f t||_|j  dhS )Nc                    r  r  r   r   r   r   r   rK   /  r  z8BGIS_OT_edit_overpass_server.execute.<locals>.<listcomp>r(   )r+   rp   r3   r   rM   rN   r   r\   r   r%   r   r   r  r  r
  r   r   r   r:   +  s   
z$BGIS_OT_edit_overpass_server.executeNr"  r   r   r   r   rP    r#  rP  c                  C   s   t D ]0} ztj|  W q ty2 } ztd|  tj|  tj|  W Y d }~qd }~ww tj	j
jt j
}|jdkrEt|_d S d S )Nz6{} is already registered, now unregister and retry... rw   )classesr-   utilsregister_class
ValueErrorr~   warningformatunregister_classr8   r+   rp   r3   rv   r   )r   r  rr   r   r   r   registerK  s   

rX  c                  C   s   t D ]} tj|  qd S r`   )rQ  r-   rR  rW  r   r   r   r   
unregister[  s   rY  )@rM   r   r   r<   r~   sysr   r-   	bpy.propsr   r   r   r   r   r   	bpy.typesr   r	   r
   r)   rw   r   Zcore.proj.reprojr   Zcore.proj.srsr   Zcore.checkdepsr   r   r   r   corer   __package__r3   r   r   r   r   r   r   r!   rD   r   r   r  r  r  r%  r(  r+  r,  r.  r<  r=  r>  r?  rK  rN  rO  rP  rQ  rX  rY  r   r   r   r   <module>   s    
   P(%(!