https://github.com/minorua/Qgis2threejs
Tip revision: f5a129ad6273152d1b57cb876c9827bf546fa458 authored by Minoru Akagi on 14 July 2016, 01:45:40 UTC
version 1.4.2
version 1.4.2
Tip revision: f5a129a
qgis2threejs.py
# -*- coding: utf-8 -*-
"""
/***************************************************************************
Qgis2threejs
A QGIS plugin
export terrain data, map canvas image and vector data to web browser
-------------------
begin : 2013-12-21
copyright : (C) 2013 Minoru Akagi
email : akaginch@gmail.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
from PyQt4.QtCore import QFile, Qt #, QSettings, QTranslator, qVersion
from PyQt4.QtGui import QAction, QIcon
from qgis.core import QgsProject
from qgis2threejstools import logMessage, removeTemporaryOutputDir
class Qgis2threejs:
def __init__(self, iface):
# Save reference to the QGIS interface
self.iface = iface
# initialize plugin directory
self.plugin_dir = os.path.dirname(QFile.decodeName(__file__))
# initialize locale
#locale = QSettings().value("locale/userLocale")[0:2]
#localePath = os.path.join(self.plugin_dir, 'i18n', 'qgis2threejs_{0}.qm'.format(locale))
#if os.path.exists(localePath):
# self.translator = QTranslator()
# self.translator.load(localePath)
# if qVersion() > '4.3.3':
# QCoreApplication.installTranslator(self.translator)
self.objectTypeManager = None
self.pluginManager = None
self.exportSettings = {}
self.lastTreeItemData = None
self.settingsFilePath = None
def initGui(self):
# Create action that will start plugin configuration
icon = QIcon(os.path.join(self.plugin_dir, "icon.png"))
self.action = QAction(icon, u"Qgis2threejs", self.iface.mainWindow())
self.action.setObjectName("Qgis2threejs")
self.settingAction = QAction(u"Settings", self.iface.mainWindow())
self.settingAction.setObjectName("Qgis2threejsSettings")
# connect the action to the run method
self.action.triggered.connect(self.run)
self.settingAction.triggered.connect(self.setting)
# Add toolbar button and web menu items
self.iface.addWebToolBarIcon(self.action)
self.iface.addPluginToWebMenu(u"Qgis2threejs", self.action)
self.iface.addPluginToWebMenu(u"Qgis2threejs", self.settingAction)
def unload(self):
# Remove the web menu items and icon
self.iface.removeWebToolBarIcon(self.action)
self.iface.removePluginWebMenu(u"Qgis2threejs", self.action)
self.iface.removePluginWebMenu(u"Qgis2threejs", self.settingAction)
# remove temporary output directory
removeTemporaryOutputDir()
def run(self):
from vectorobject import ObjectTypeManager
from pluginmanager import PluginManager
from qgis2threejsdialog import Qgis2threejsDialog
if self.objectTypeManager is None:
self.objectTypeManager = ObjectTypeManager()
if self.pluginManager is None:
self.pluginManager = PluginManager()
# restore export settings
proj_path = QgsProject.instance().fileName()
settingsFilePath = proj_path + ".qto3settings" if proj_path else None
if not self.exportSettings or settingsFilePath != self.settingsFilePath:
if settingsFilePath and os.path.exists(settingsFilePath):
self.loadExportSettings(settingsFilePath)
logMessage(u"Restored export settings of this project: {0}".format(os.path.basename(proj_path))) #QgsProject.instance().title()
dialog = Qgis2threejsDialog(self.iface, self.objectTypeManager, self.pluginManager, self.exportSettings, self.lastTreeItemData)
# show dialog
dialog.show()
ret = dialog.exec_()
self.exportSettings = dialog.settings(True)
item = dialog.ui.treeWidget.currentItem()
self.lastTreeItemData = item.data(0, Qt.UserRole) if item else None
# if export succeeded, save export settings in the directory that project file exists
if ret and settingsFilePath:
self.saveExportSettings(settingsFilePath)
self.settingsFilePath = settingsFilePath
def setting(self):
from settingsdialog import SettingsDialog
dialog = SettingsDialog(self.iface.mainWindow())
dialog.show()
if dialog.exec_():
from pluginmanager import PluginManager
self.pluginManager = PluginManager()
def loadExportSettings(self, filename):
import json
with open(filename) as f:
self.exportSettings = json.load(f)
def saveExportSettings(self, filename):
import codecs
import json
try:
with codecs.open(filename, "w", "UTF-8") as f:
json.dump(self.exportSettings, f, ensure_ascii=False, indent=2, sort_keys=True)
return True
except Exception as e:
logMessage("Failed to save export settings: " + str(e))
return False