merge plugin in rscder

This commit is contained in:
copper 2023-07-26 20:53:08 +08:00
parent fde841c037
commit bf7f7f0bca
121 changed files with 466 additions and 689 deletions

View File

@ -1,68 +1,96 @@
import sys import os
import time import sys
from PyQt5.QtCore import Qt import datetime
from PyQt5.QtGui import QFont, QPixmap import logging
from PyQt5.QtWidgets import QSplashScreen, QProgressBar, QStyleFactory, QMessageBox import pprint
from qgis.core import QgsApplication
# from qgis.core import def format_now():
from rscder.gui.mainwindow import MainWindow return datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
import multiprocessing os.environ['ECD_BASEDIR'] = os.path.join( os.path.dirname(__file__))
from rscder.gui import license if os.path.exists(os.path.join(os.path.dirname(__file__), 'share')):
from rscder.utils.setting import Settings os.environ['PROJ_LIB'] = os.path.join(os.path.dirname(__file__), 'share/proj')
import os os.environ['GDAL_DATA'] = os.path.join(os.path.dirname(__file__), 'share')
BASE_DIR = os.environ['ECD_BASEDIR']
class MulStart: BASE_DIR = os.path.join( os.path.dirname(__file__))
os.makedirs(os.path.join(BASE_DIR, 'logs'), exist_ok=True)
def __init__(self, **kargs) -> None:
super(MulStart, self).__init__() logging.basicConfig(level=logging.INFO, filename=os.path.join(BASE_DIR, 'logs', format_now() + '_log.txt'), filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
self.kargs = kargs logging.info('sys path :' + pprint.pformat(sys.path))
def run(self): logging.info('os.environ :' + pprint.pformat(os.environ))
QgsApplication.setAttribute(Qt.AA_EnableHighDpiScaling) import time
QgsApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) from PyQt5.QtCore import Qt
QgsApplication.setOrganizationName("西安理工大学-ImgSciGroup") from PyQt5.QtGui import QFont, QPixmap
QgsApplication.setApplicationName("Easy Change Detection") from PyQt5.QtWidgets import QSplashScreen, QProgressBar, QStyleFactory, QMessageBox
QgsApplication.setApplicationVersion("v0.0.1") from qgis.core import QgsApplication
QgsApplication.setFont(QFont("Segoe UI", 10)) # from qgis.core import
QgsApplication.setStyle(QStyleFactory.create("Fusion")) from rscder.gui.mainwindow import MainWindow
from rscder.gui import license
from rscder.utils.setting import Settings
# pyrcc5 res.qrc -o rc.py import os
# import rscder.rc
class MulStart:
app = QgsApplication([], True)
QgsApplication.initQgis() def __init__(self, **kargs) -> None:
while not Settings.General().license: super(MulStart, self).__init__()
QMessageBox.warning(None, "Warning", "Please select a license file.") self.kargs = kargs
if(license.License().exec_() == license.License.Accepted): def run(self):
continue app = QgsApplication([], True)
else: QgsApplication.setPrefixPath('qgis', True)
sys.exit(0) QgsApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
# Create and display the splash screen QgsApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
splash_pix = QPixmap(os.path.join(BASE_DIR, "./icons/splash.png")) QgsApplication.setOrganizationName("ImgSciGroup")
# splash_pix.scaledToWidth(800) QgsApplication.setApplicationName("Easy Change Detection")
# splash_pix.scaledToHeight(600) QgsApplication.setApplicationVersion("v0.0.1")
QgsApplication.setFont(QFont("Segoe UI", 10))
splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint) QgsApplication.setStyle(QStyleFactory.create("Fusion"))
# splash
# splash.setFixedSize(800, 600)
progressBar = QProgressBar(splash) # pyrcc5 res.qrc -o rc.py
progressBar.setMaximum(10) # import rscder.rc
progressBar.setTextVisible(False)
progressBar.setGeometry(106, splash_pix.height() - 60, splash_pix.width()-212, 10)
QgsApplication.initQgis()
splash.show() while not Settings.General().license:
for i in range(1, 11): QMessageBox.warning(None, "Warning", "Please select a license file.")
progressBar.setValue(i) if(license.License().exec_() == license.License.Accepted):
t = time.time() continue
while time.time() < t + 0.05: else:
app.processEvents() sys.exit(0)
# Create and display the splash screen
ex = MainWindow(**self.kargs) splash_pix = QPixmap(os.path.join(BASE_DIR, "./icons/splash.png"))
# ex.canvas.load_image(r'data\100001678.jpg') # splash_pix.scaledToWidth(800)
# ex.canvas.load_result_from_txt(r'data\100001678.txt') # splash_pix.scaledToHeight(600)
# ex.showMaximized()
ex.show() splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
splash.finish(ex) # splash
sys.exit(app.exec_()) # splash.setFixedSize(800, 600)
progressBar = QProgressBar(splash)
progressBar.setMaximum(10)
progressBar.setTextVisible(False)
progressBar.setGeometry(106, splash_pix.height() - 60, splash_pix.width()-212, 10)
splash.show()
for i in range(1, 11):
progressBar.setValue(i)
t = time.time()
while time.time() < t + 0.05:
app.processEvents()
ex = MainWindow(**self.kargs)
# ex.canvas.load_image(r'data\100001678.jpg')
# ex.canvas.load_result_from_txt(r'data\100001678.txt')
# ex.showMaximized()
ex.show()
splash.finish(ex)
sys.exit(app.exec_())
def main():
# print(sys.path)
t = MulStart()
t.run()
if __name__ == '__main__':
main()

View File

@ -1,19 +1,19 @@
import os import os
# os.environ['PROJ_LIB'] = os.path.join(os.path.dirname(__file__), 'share/proj') # os.environ['PROJ_LIB'] = os.path.join(os.path.dirname(__file__), 'share/proj')
# os.environ['GDAL_DATA'] = os.path.join(os.path.dirname(__file__), 'share') # os.environ['GDAL_DATA'] = os.path.join(os.path.dirname(__file__), 'share')
os.environ['ECD_BASEDIR'] = os.path.join( os.path.dirname(__file__), '..') os.environ['ECD_BASEDIR'] = os.path.join( os.path.dirname(__file__))
BASE_DIR = os.path.join( os.path.dirname(__file__), '..') BASE_DIR = os.path.join( os.path.dirname(__file__))
from rscder.gui.keygen import LicenseGen from rscder.gui.keygen import LicenseGen
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
import sys import sys
def main(): def main():
app =QApplication(sys.argv) app =QApplication(sys.argv)
license = LicenseGen() license = LicenseGen()
license.show() license.show()
sys.exit(app.exec_()) sys.exit(app.exec_())
if __name__ == "__main__": if __name__ == "__main__":
main() main()

1
lic/license.lic Normal file
View File

@ -0,0 +1 @@
U2cvLo/waByK0JLEzMsbuevhDgvFdw9E2wATS9YnC1NrtbmcSH9Rb3F2Bn5G8D8AruY/+S4tf+Lj5PRRyUXubyM2e6erbEYW7HnA9BZljgLMHnmrxpiW1woR6OEWzhJH6Y6GILPn7S0esv4oO3JjRyDRYXecz/lw58wkdZbHktpNVKfjoe827/aKa7gmYNXO

View File

@ -1,5 +0,0 @@
2023-03-25 11:00:10,230 - root - INFO - lic data:2033-01-01 00:00:00
2023-03-25 11:00:10,230 - root - INFO - remain_days: 3569
2023-03-25 11:00:11,182 - root - INFO - lic data:2033-01-01 00:00:00
2023-03-25 11:00:11,182 - root - INFO - remain_days: 3569
2023-03-25 11:00:30,172 - root - INFO - nothing

View File

@ -1,4 +0,0 @@
2023-03-25 11:02:32,812 - root - INFO - lic data:2033-01-01 00:00:00
2023-03-25 11:02:32,812 - root - INFO - remain_days: 3569
2023-03-25 11:02:33,761 - root - INFO - lic data:2033-01-01 00:00:00
2023-03-25 11:02:33,761 - root - INFO - remain_days: 3569

View File

@ -1 +0,0 @@
from about.main import *

View File

@ -1 +0,0 @@
from change_rate.main import *

View File

@ -1 +0,0 @@
from evaluation.main import *

View File

@ -1 +0,0 @@
from export_to.main import *

View File

@ -1,5 +0,0 @@
from misc import Register
FOLLOW = Register('流程')
from follow.main import *

View File

@ -1,63 +0,0 @@
- author: RSCDER
description: "\u5173\u4E8E"
enabled: true
module: about
name: "\u5173\u4E8E"
path: ./plugin\about
version: 1.0.0
- author: RSCDER
description: ExportTo
enabled: true
module: export_to
name: ExportTo
path: ./plugin\export_to
version: 1.0.0
- author: RSCDER
description: FilterCollection
enabled: true
module: filter_collection
name: FilterCollection
path: ./plugin\filter_collection
version: 1.0.0
- author: RSCDER
description: Evaluation
enabled: true
module: evaluation
name: Evaluation
path: ./plugin\evaluation
version: 1.0.0
- author: RSCDER
description: UnsupervisedPlugin
enabled: true
module: unsupervised_method
name: UnsupervisedPlugin
path: ./plugin\unsupervsied_method
version: 1.0.0
- author: RSCDER
description: VegatationPlugin
enabled: true
module: veg_method
name: VegatationPlugin
path: ./plugin\veg_method
version: 1.0.0
- author: RSCDER
description: set Change Rate
enabled: true
module: change_rate
name: set_change_rate
path: ./plugin\change_rate
version: 1.0.0
- author: RSCDER
description: Follow box
enabled: true
module: follow
name: FollowPlugin
path: ./plugin\follow
version: 1.0.0
- author: RSCDER
description: AI CD
enabled: true
module: ai_method
name: AIPlugin
path: ./plugin\ai_method
version: 1.0.0

View File

@ -1,5 +0,0 @@
from misc import Register
THRES = Register('阈值方法')
from thres.main import *

View File

@ -1 +0,0 @@
from unsupervised_method.main import *

View File

@ -1 +0,0 @@
from veg_method.main import *

View File

@ -1,118 +1,118 @@
x,y,diff,status x,y,diff,status
234053.9937022142,3530980.0747939292,80.47999999999999,1 234053.9937022142,3530980.0747939292,80.47999999999999,1
234153.9937022142,3530980.0747939292,76.88000000000001,1 234153.9937022142,3530980.0747939292,76.88000000000001,1
234253.9937022142,3530980.0747939292,77.83,1 234253.9937022142,3530980.0747939292,77.83,1
234353.9937022142,3530980.0747939292,81.65,1 234353.9937022142,3530980.0747939292,81.65,1
234453.9937022142,3530980.0747939292,84.71,1 234453.9937022142,3530980.0747939292,84.71,1
234553.9937022142,3530980.0747939292,79.03999999999999,1 234553.9937022142,3530980.0747939292,79.03999999999999,1
234653.9937022142,3530980.0747939292,74.18,1 234653.9937022142,3530980.0747939292,74.18,1
234753.9937022142,3530980.0747939292,76.0,1 234753.9937022142,3530980.0747939292,76.0,1
234853.9937022142,3530980.0747939292,85.37,1 234853.9937022142,3530980.0747939292,85.37,1
234953.9937022142,3530980.0747939292,73.00999999999999,1 234953.9937022142,3530980.0747939292,73.00999999999999,1
235053.9937022142,3530980.0747939292,52.32,1 235053.9937022142,3530980.0747939292,52.32,1
235153.9937022142,3530980.0747939292,86.32,1 235153.9937022142,3530980.0747939292,86.32,1
235253.9937022142,3530980.0747939292,84.875,1 235253.9937022142,3530980.0747939292,84.875,1
234053.9937022142,3530880.0747939292,79.83,1 234053.9937022142,3530880.0747939292,79.83,1
234153.9937022142,3530880.0747939292,84.71,1 234153.9937022142,3530880.0747939292,84.71,1
234253.9937022142,3530880.0747939292,78.86999999999999,1 234253.9937022142,3530880.0747939292,78.86999999999999,1
234353.9937022142,3530880.0747939292,79.36999999999999,1 234353.9937022142,3530880.0747939292,79.36999999999999,1
234453.9937022142,3530880.0747939292,80.62,1 234453.9937022142,3530880.0747939292,80.62,1
234553.9937022142,3530880.0747939292,81.55,1 234553.9937022142,3530880.0747939292,81.55,1
234653.9937022142,3530880.0747939292,73.83,1 234653.9937022142,3530880.0747939292,73.83,1
234753.9937022142,3530880.0747939292,78.67,1 234753.9937022142,3530880.0747939292,78.67,1
234853.9937022142,3530880.0747939292,71.81,1 234853.9937022142,3530880.0747939292,71.81,1
234953.9937022142,3530880.0747939292,75.89,1 234953.9937022142,3530880.0747939292,75.89,1
235053.9937022142,3530880.0747939292,59.660000000000004,1 235053.9937022142,3530880.0747939292,59.660000000000004,1
235153.9937022142,3530880.0747939292,80.33,1 235153.9937022142,3530880.0747939292,80.33,1
235253.9937022142,3530880.0747939292,82.5,1 235253.9937022142,3530880.0747939292,82.5,1
234053.9937022142,3530780.0747939292,80.27,1 234053.9937022142,3530780.0747939292,80.27,1
234153.9937022142,3530780.0747939292,81.04,1 234153.9937022142,3530780.0747939292,81.04,1
234253.9937022142,3530780.0747939292,78.48,1 234253.9937022142,3530780.0747939292,78.48,1
234353.9937022142,3530780.0747939292,84.17999999999999,1 234353.9937022142,3530780.0747939292,84.17999999999999,1
234453.9937022142,3530780.0747939292,91.45,1 234453.9937022142,3530780.0747939292,91.45,1
234553.9937022142,3530780.0747939292,81.96,1 234553.9937022142,3530780.0747939292,81.96,1
234653.9937022142,3530780.0747939292,74.38,1 234653.9937022142,3530780.0747939292,74.38,1
234753.9937022142,3530780.0747939292,74.42999999999999,1 234753.9937022142,3530780.0747939292,74.42999999999999,1
234853.9937022142,3530780.0747939292,68.12,1 234853.9937022142,3530780.0747939292,68.12,1
234953.9937022142,3530780.0747939292,73.22999999999999,1 234953.9937022142,3530780.0747939292,73.22999999999999,1
235053.9937022142,3530780.0747939292,56.28999999999999,1 235053.9937022142,3530780.0747939292,56.28999999999999,1
235153.9937022142,3530780.0747939292,75.52,1 235153.9937022142,3530780.0747939292,75.52,1
235253.9937022142,3530780.0747939292,74.55000000000001,1 235253.9937022142,3530780.0747939292,74.55000000000001,1
234053.9937022142,3530680.0747939292,78.72,1 234053.9937022142,3530680.0747939292,78.72,1
234153.9937022142,3530680.0747939292,77.56,1 234153.9937022142,3530680.0747939292,77.56,1
234253.9937022142,3530680.0747939292,73.77,1 234253.9937022142,3530680.0747939292,73.77,1
234353.9937022142,3530680.0747939292,77.64999999999999,1 234353.9937022142,3530680.0747939292,77.64999999999999,1
234453.9937022142,3530680.0747939292,86.4,1 234453.9937022142,3530680.0747939292,86.4,1
234553.9937022142,3530680.0747939292,80.36,1 234553.9937022142,3530680.0747939292,80.36,1
234653.9937022142,3530680.0747939292,70.63000000000001,1 234653.9937022142,3530680.0747939292,70.63000000000001,1
234753.9937022142,3530680.0747939292,77.24,1 234753.9937022142,3530680.0747939292,77.24,1
234853.9937022142,3530680.0747939292,61.29,1 234853.9937022142,3530680.0747939292,61.29,1
234953.9937022142,3530680.0747939292,54.230000000000004,1 234953.9937022142,3530680.0747939292,54.230000000000004,1
235053.9937022142,3530680.0747939292,50.22,1 235053.9937022142,3530680.0747939292,50.22,1
235153.9937022142,3530680.0747939292,71.95,1 235153.9937022142,3530680.0747939292,71.95,1
235253.9937022142,3530680.0747939292,76.75,1 235253.9937022142,3530680.0747939292,76.75,1
234053.9937022142,3530580.0747939292,78.06,1 234053.9937022142,3530580.0747939292,78.06,1
234153.9937022142,3530580.0747939292,83.17,1 234153.9937022142,3530580.0747939292,83.17,1
234253.9937022142,3530580.0747939292,83.14,1 234253.9937022142,3530580.0747939292,83.14,1
234353.9937022142,3530580.0747939292,84.32,1 234353.9937022142,3530580.0747939292,84.32,1
234453.9937022142,3530580.0747939292,62.23,1 234453.9937022142,3530580.0747939292,62.23,1
234553.9937022142,3530580.0747939292,84.72,1 234553.9937022142,3530580.0747939292,84.72,1
234653.9937022142,3530580.0747939292,86.11999999999999,1 234653.9937022142,3530580.0747939292,86.11999999999999,1
234753.9937022142,3530580.0747939292,81.85,1 234753.9937022142,3530580.0747939292,81.85,1
234853.9937022142,3530580.0747939292,70.58,1 234853.9937022142,3530580.0747939292,70.58,1
234953.9937022142,3530580.0747939292,50.63999999999999,1 234953.9937022142,3530580.0747939292,50.63999999999999,1
235053.9937022142,3530580.0747939292,63.17,1 235053.9937022142,3530580.0747939292,63.17,1
235153.9937022142,3530580.0747939292,76.55,1 235153.9937022142,3530580.0747939292,76.55,1
235253.9937022142,3530580.0747939292,74.225,1 235253.9937022142,3530580.0747939292,74.225,1
234053.9937022142,3530480.0747939292,78.14,1 234053.9937022142,3530480.0747939292,78.14,1
234153.9937022142,3530480.0747939292,77.41,1 234153.9937022142,3530480.0747939292,77.41,1
234253.9937022142,3530480.0747939292,78.31,1 234253.9937022142,3530480.0747939292,78.31,1
234353.9937022142,3530480.0747939292,78.0,1 234353.9937022142,3530480.0747939292,78.0,1
234453.9937022142,3530480.0747939292,82.67,1 234453.9937022142,3530480.0747939292,82.67,1
234553.9937022142,3530480.0747939292,89.29,1 234553.9937022142,3530480.0747939292,89.29,1
234653.9937022142,3530480.0747939292,73.53,1 234653.9937022142,3530480.0747939292,73.53,1
234753.9937022142,3530480.0747939292,82.24000000000001,1 234753.9937022142,3530480.0747939292,82.24000000000001,1
234853.9937022142,3530480.0747939292,81.16,1 234853.9937022142,3530480.0747939292,81.16,1
234953.9937022142,3530480.0747939292,73.44000000000001,1 234953.9937022142,3530480.0747939292,73.44000000000001,1
235053.9937022142,3530480.0747939292,74.52,1 235053.9937022142,3530480.0747939292,74.52,1
235153.9937022142,3530480.0747939292,71.52,1 235153.9937022142,3530480.0747939292,71.52,1
235253.9937022142,3530480.0747939292,89.85,1 235253.9937022142,3530480.0747939292,89.85,1
234053.9937022142,3530380.0747939292,79.36,1 234053.9937022142,3530380.0747939292,79.36,1
234153.9937022142,3530380.0747939292,78.77,1 234153.9937022142,3530380.0747939292,78.77,1
234253.9937022142,3530380.0747939292,72.13000000000001,1 234253.9937022142,3530380.0747939292,72.13000000000001,1
234353.9937022142,3530380.0747939292,77.56,1 234353.9937022142,3530380.0747939292,77.56,1
234453.9937022142,3530380.0747939292,74.67,1 234453.9937022142,3530380.0747939292,74.67,1
234553.9937022142,3530380.0747939292,84.54,1 234553.9937022142,3530380.0747939292,84.54,1
234653.9937022142,3530380.0747939292,89.53,1 234653.9937022142,3530380.0747939292,89.53,1
234753.9937022142,3530380.0747939292,85.99,1 234753.9937022142,3530380.0747939292,85.99,1
234853.9937022142,3530380.0747939292,87.22999999999999,1 234853.9937022142,3530380.0747939292,87.22999999999999,1
234953.9937022142,3530380.0747939292,85.53,1 234953.9937022142,3530380.0747939292,85.53,1
235053.9937022142,3530380.0747939292,75.82,1 235053.9937022142,3530380.0747939292,75.82,1
235153.9937022142,3530380.0747939292,66.47999999999999,1 235153.9937022142,3530380.0747939292,66.47999999999999,1
235253.9937022142,3530380.0747939292,67.55,1 235253.9937022142,3530380.0747939292,67.55,1
234053.9937022142,3530280.0747939292,80.64,1 234053.9937022142,3530280.0747939292,80.64,1
234153.9937022142,3530280.0747939292,81.23,1 234153.9937022142,3530280.0747939292,81.23,1
234253.9937022142,3530280.0747939292,76.6,1 234253.9937022142,3530280.0747939292,76.6,1
234353.9937022142,3530280.0747939292,93.39,1 234353.9937022142,3530280.0747939292,93.39,1
234453.9937022142,3530280.0747939292,85.55,1 234453.9937022142,3530280.0747939292,85.55,1
234553.9937022142,3530280.0747939292,90.69,1 234553.9937022142,3530280.0747939292,90.69,1
234653.9937022142,3530280.0747939292,87.16000000000001,1 234653.9937022142,3530280.0747939292,87.16000000000001,1
234753.9937022142,3530280.0747939292,87.01,1 234753.9937022142,3530280.0747939292,87.01,1
234853.9937022142,3530280.0747939292,90.9,1 234853.9937022142,3530280.0747939292,90.9,1
234953.9937022142,3530280.0747939292,86.92999999999999,1 234953.9937022142,3530280.0747939292,86.92999999999999,1
235053.9937022142,3530280.0747939292,67.22,1 235053.9937022142,3530280.0747939292,67.22,1
235153.9937022142,3530280.0747939292,63.77,1 235153.9937022142,3530280.0747939292,63.77,1
235253.9937022142,3530280.0747939292,78.475,1 235253.9937022142,3530280.0747939292,78.475,1
234053.9937022142,3530180.0747939292,76.86111111111111,1 234053.9937022142,3530180.0747939292,76.86111111111111,1
234153.9937022142,3530180.0747939292,79.76388888888889,1 234153.9937022142,3530180.0747939292,79.76388888888889,1
234253.9937022142,3530180.0747939292,80.15277777777777,1 234253.9937022142,3530180.0747939292,80.15277777777777,1
234353.9937022142,3530180.0747939292,91.45833333333333,1 234353.9937022142,3530180.0747939292,91.45833333333333,1
234453.9937022142,3530180.0747939292,82.05555555555556,1 234453.9937022142,3530180.0747939292,82.05555555555556,1
234553.9937022142,3530180.0747939292,94.15277777777777,1 234553.9937022142,3530180.0747939292,94.15277777777777,1
234653.9937022142,3530180.0747939292,82.72222222222221,1 234653.9937022142,3530180.0747939292,82.72222222222221,1
234753.9937022142,3530180.0747939292,89.11111111111111,1 234753.9937022142,3530180.0747939292,89.11111111111111,1
234853.9937022142,3530180.0747939292,91.41666666666667,1 234853.9937022142,3530180.0747939292,91.41666666666667,1
234953.9937022142,3530180.0747939292,87.58333333333333,1 234953.9937022142,3530180.0747939292,87.58333333333333,1
235053.9937022142,3530180.0747939292,64.54166666666666,1 235053.9937022142,3530180.0747939292,64.54166666666666,1
235153.9937022142,3530180.0747939292,56.40277777777778,1 235153.9937022142,3530180.0747939292,56.40277777777778,1
235253.9937022142,3530180.0747939292,64.86111111111111,1 235253.9937022142,3530180.0747939292,64.86111111111111,1

View File

@ -1,29 +0,0 @@
import os
import sys
# sys.path.insert(0, os.path.dirname(__file__))
# sys.path.insert(0, os.path.join('..', os.path.dirname(__file__), 'libs'))
# os.environ['PROJ_LIB'] = os.path.join(os.path.dirname(__file__), 'share/proj')
# os.environ['GDAL_DATA'] = os.path.join(os.path.dirname(__file__), 'share')
os.environ['ECD_BASEDIR'] = os.path.join( os.path.dirname(__file__), '..')
BASE_DIR = os.path.join( os.path.dirname(__file__), '..')
# import ctypes
# ctypes.windll.LoadLibrary()
from rscder.mul.mulstart import MulStart
import logging
from plugins.misc import format_now
os.makedirs(os.path.join(BASE_DIR, 'logs'), exist_ok=True)
logging.basicConfig(level=logging.INFO, filename=os.path.join(BASE_DIR, 'logs', format_now() + '_log.txt'), filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
def main():
# print(sys.path)
t = MulStart()
t.run()
if __name__ == '__main__':
main()

View File

@ -9,7 +9,6 @@ from rscder.gui.project import Create
from rscder.utils.icons import IconInstance from rscder.utils.icons import IconInstance
from rscder.utils.project import Project from rscder.utils.project import Project
from rscder.utils.misc import singleton from rscder.utils.misc import singleton
from rscder.gui.plugins import PluginDialog
from rscder.utils.setting import Settings from rscder.utils.setting import Settings
from rscder.gui.load import loader from rscder.gui.load import loader
from functools import partial from functools import partial
@ -77,7 +76,7 @@ class ActionManager(QtCore.QObject):
self.export_menu = self.postop_menu.addMenu(IconInstance().DOCUMENT,'&结果导出') self.export_menu = self.postop_menu.addMenu(IconInstance().DOCUMENT,'&结果导出')
self.view_menu = menubar.addMenu('&视图') self.view_menu = menubar.addMenu('&视图')
self.plugin_menu = menubar.addMenu('&插件') # self.plugin_menu = menubar.addMenu('&插件')
self.help_menu = menubar.addMenu( '&帮助') self.help_menu = menubar.addMenu( '&帮助')
# vbox = QVBoxLayout() # vbox = QVBoxLayout()
@ -191,16 +190,16 @@ class ActionManager(QtCore.QObject):
''' '''
Plugin menu Plugin menu
''' '''
plugin_list = self.add_action(QAction(IconInstance().PLUGINS,'&插件列表', self.w_parent), 'Plugin') # plugin_list = self.add_action(QAction(IconInstance().PLUGINS,'&插件列表', self.w_parent), 'Plugin')
plugin_list.triggered.connect(self.plugin_list) # plugin_list.triggered.connect(self.plugin_list)
# toolbar = self.add_toolbar('Plugin') # toolbar = self.add_toolbar('Plugin')
# toolbar.addAction(plugin_list) # toolbar.addAction(plugin_list)
self.plugin_menu.addAction(plugin_list) # self.plugin_menu.addAction(plugin_list)
self.message_box.info('菜单初始化完成') self.message_box.info('菜单初始化完成')
self.message_box.info(self.actions.keys())
''' '''
Enabled actions Enabled actions
@ -228,9 +227,6 @@ class ActionManager(QtCore.QObject):
lic_end_date.setText('有效期至:%s' % (Settings.General().end_date)) lic_end_date.setText('有效期至:%s' % (Settings.General().end_date))
self.status_bar.addPermanentWidget(lic_end_date) self.status_bar.addPermanentWidget(lic_end_date)
def plugin_list(self):
dialog = PluginDialog(self.w_parent)
dialog.show()
def project_create(self): def project_create(self):
project = Project() project = Project()

View File

@ -1,39 +1,39 @@
from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QCheckBox, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QTextEdit, QFileDialog, QMessageBox from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QCheckBox, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QTextEdit, QFileDialog, QMessageBox
from PyQt5 import QtCore, QtGui from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from rscder.utils.icons import IconInstance from rscder.utils.icons import IconInstance
from rscder.utils.setting import Settings from rscder.utils.setting import Settings
class GUICfg(QDialog): class GUICfg(QDialog):
def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags() ) -> None: def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags() ) -> None:
super().__init__(parent, flags) super().__init__(parent, flags)
self.setWindowTitle("界面定制") self.setWindowTitle("界面定制")
self.setWindowIcon(IconInstance(parent).LOGO) self.setWindowIcon(IconInstance(parent).LOGO)
form_layout = QFormLayout(self) form_layout = QFormLayout(self)
default_size_label = QLabel('默认格网') default_size_label = QLabel('默认格网')
default_size = QLineEdit() default_size = QLineEdit()
default_size.setValidator(QtGui.QIntValidator(1, 1000)) default_size.setValidator(QtGui.QIntValidator(1, 1000))
def set_defaultsize(): def set_defaultsize():
Settings.General().size = (int(default_size.text()), int(default_size.text())) Settings.General().size = (int(default_size.text()), int(default_size.text()))
# form_layout.addRow # form_layout.addRow
default_size.textChanged.connect( set_defaultsize ) default_size.textChanged.connect( set_defaultsize )
form_layout.addRow(default_size_label, default_size) form_layout.addRow(default_size_label, default_size)
self.setLayout(form_layout) self.setLayout(form_layout)
auto_save_label = QLabel('自动保存') auto_save_label = QLabel('自动保存')
auto_save = QCheckBox() auto_save = QCheckBox()
auto_save.setChecked(Settings.General().auto_save) auto_save.setChecked(Settings.General().auto_save)
def set_autosave(): def set_autosave():
Settings.General().auto_save = auto_save.isChecked() Settings.General().auto_save = auto_save.isChecked()
auto_save.stateChanged.connect(set_autosave) auto_save.stateChanged.connect(set_autosave)
form_layout.addRow(auto_save_label, auto_save) form_layout.addRow(auto_save_label, auto_save)

View File

@ -1,67 +1,67 @@
from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QCheckBox, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QTextEdit, QFileDialog, QMessageBox from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QCheckBox, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QTextEdit, QFileDialog, QMessageBox
from PyQt5 import QtCore, QtGui from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from rscder.utils.icons import IconInstance from rscder.utils.icons import IconInstance
from rscder.utils.setting import Settings from rscder.utils.setting import Settings
from rscder.utils.project import Project from rscder.utils.project import Project
from qgis.core import QgsRectangle from qgis.core import QgsRectangle
class Location(QDialog): class Location(QDialog):
extent = QtCore.pyqtSignal(object) extent = QtCore.pyqtSignal(object)
def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags() ) -> None: def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags() ) -> None:
super().__init__(parent, flags) super().__init__(parent, flags)
self.setWindowTitle("定位") self.setWindowTitle("定位")
self.setWindowIcon(IconInstance(parent).LOGO) self.setWindowIcon(IconInstance(parent).LOGO)
X_label = QLabel('X:') X_label = QLabel('X:')
Y_label = QLabel('Y:') Y_label = QLabel('Y:')
X = QLineEdit() X = QLineEdit()
X.setValidator(QtGui.QDoubleValidator()) X.setValidator(QtGui.QDoubleValidator())
Y = QLineEdit() Y = QLineEdit()
Y.setValidator(QtGui.QDoubleValidator()) Y.setValidator(QtGui.QDoubleValidator())
hlay = QHBoxLayout() hlay = QHBoxLayout()
hlay.addWidget(X_label) hlay.addWidget(X_label)
hlay.addWidget(X) hlay.addWidget(X)
hlay.addWidget(Y_label) hlay.addWidget(Y_label)
hlay.addWidget(Y) hlay.addWidget(Y)
btns = QPushButton('确定') btns = QPushButton('确定')
hlay.addWidget(btns) hlay.addWidget(btns)
self.setLayout(hlay) self.setLayout(hlay)
def loc(): def loc():
x = float(X.text()) x = float(X.text())
y = float(Y.text()) y = float(Y.text())
extent = QgsRectangle(x - 100, y - 100, x + 100, y + 100 ) extent = QgsRectangle(x - 100, y - 100, x + 100, y + 100 )
self.extent.emit(extent) self.extent.emit(extent)
btns.clicked.connect(loc) btns.clicked.connect(loc)
# form_layout = QFormLayout(self) # form_layout = QFormLayout(self)
# default_size_label = QLabel('默认格网') # default_size_label = QLabel('默认格网')
# default_size = QLineEdit() # default_size = QLineEdit()
# default_size.setValidator(QtGui.QIntValidator(1, 1000)) # default_size.setValidator(QtGui.QIntValidator(1, 1000))
# def set_defaultsize(): # def set_defaultsize():
# Settings.General().size = (int(default_size.text()), int(default_size.text())) # Settings.General().size = (int(default_size.text()), int(default_size.text()))
# # form_layout.addRow # # form_layout.addRow
# default_size.textChanged.connect( set_defaultsize ) # default_size.textChanged.connect( set_defaultsize )
# form_layout.addRow(default_size_label, default_size) # form_layout.addRow(default_size_label, default_size)
# self.setLayout(form_layout) # self.setLayout(form_layout)
# auto_save_label = QLabel('自动保存') # auto_save_label = QLabel('自动保存')
# auto_save = QCheckBox() # auto_save = QCheckBox()
# auto_save.setChecked(Settings.General().auto_save) # auto_save.setChecked(Settings.General().auto_save)
# def set_autosave(): # def set_autosave():
# Settings.General().auto_save = auto_save.isChecked() # Settings.General().auto_save = auto_save.isChecked()
# auto_save.stateChanged.connect(set_autosave) # auto_save.stateChanged.connect(set_autosave)
# form_layout.addRow(auto_save_label, auto_save) # form_layout.addRow(auto_save_label, auto_save)

View File

@ -15,7 +15,7 @@ from rscder.utils.icons import IconInstance
from rscder.utils.project import Project from rscder.utils.project import Project
from rscder.gui.layercombox import LayerCombox from rscder.gui.layercombox import LayerCombox
from rscder.gui.eagle_eye import eagleEye from rscder.gui.eagle_eye import eagleEye
import pprint
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
closed = pyqtSignal() closed = pyqtSignal()
@ -51,7 +51,7 @@ class MainWindow(QMainWindow):
self.action_manager.set_status_bar(self.statusBar()) self.action_manager.set_status_bar(self.statusBar())
self.action_manager.set_actions() self.action_manager.set_actions()
PluginLoader(dict( plugin_loader = PluginLoader(dict(
layer_tree=self.layer_tree, layer_tree=self.layer_tree,
pair_canvas=self.double_map, pair_canvas=self.double_map,
message_box=self.message_box, message_box=self.message_box,
@ -59,7 +59,10 @@ class MainWindow(QMainWindow):
mainwindow=self, mainwindow=self,
toolbar=self.toolbar, toolbar=self.toolbar,
statusbar=self.statusBar(), statusbar=self.statusBar(),
)).load_plugin() ))
plugin_loader.load_plugin()
self.message_box.info(pprint.pformat(plugin_loader.plugins.keys()))
self.resize(*Settings.General().size) self.resize(*Settings.General().size)

View File

@ -1,128 +0,0 @@
import logging
import os
import shutil
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
from rscder.plugins.loader import PluginLoader
from rscder.utils.icons import IconInstance
from rscder.utils.setting import Settings
class PluginDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('插件')
self.setWindowIcon(IconInstance().PLUGINS)
self.setMinimumWidth(900)
self.setMinimumHeight(600)
self.plugins = list(Settings.Plugin().plugins)
self.plugin_table = QTableWidget(len(self.plugins), 3, self)
self.plugin_table.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.plugin_table.setColumnWidth(0, 200)
self.plugin_table.setColumnWidth(1, 500)
self.plugin_table.setHorizontalHeaderLabels(['名称', '模块ID', '启用'])
self.plugin_table.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.plugin_table.cellDoubleClicked.connect(self.edit_plugin)
for idx, plugin in enumerate(self.plugins):
name_item = QTableWidgetItem(plugin['name'])
module_item = QTableWidgetItem(plugin['module'])
enabled_item = QTableWidgetItem('启用')
enabled_item.setCheckState(Qt.Checked if plugin['enabled'] else Qt.Unchecked)
self.plugin_table.setItem(idx, 0, name_item)
self.plugin_table.setItem(idx, 1, module_item)
self.plugin_table.setItem(idx, 2, enabled_item)
self.add_button = QPushButton('添加', self)
self.add_button.clicked.connect(self.add_plugin)
self.remove_button = QPushButton('移除', self)
self.remove_button.clicked.connect(self.remove_plugin)
self.save_button = QPushButton('保存', self)
self.save_button.clicked.connect(self.save_plugin)
self.cancel_button = QPushButton('取消', self)
self.cancel_button.clicked.connect(self.close)
layout = QVBoxLayout(self)
layout.addWidget(self.plugin_table)
hlayout = QHBoxLayout()
hlayout.addWidget(self.add_button)
hlayout.addWidget(self.remove_button)
hlayout.addWidget(self.save_button)
hlayout.addWidget(self.cancel_button)
layout.addLayout(hlayout)
self.setLayout(layout)
self.has_change = False
def add_plugin(self):
plugin_directory = QFileDialog.getExistingDirectory(self, 'Select Plugin Directory', '.')
if plugin_directory is not None:
info = PluginLoader.load_plugin_info(plugin_directory)
logging.info(info)
if info is not None:
try:
dst = PluginLoader.copy_plugin_to_3rd(plugin_directory)
except:
QMessageBox.warning(self, 'Warning', 'Failed to copy plugin to 3rd party directory')
return
info['module'] = os.path.basename(plugin_directory)
info['enabled'] = True
info['path'] = dst
self.has_change = True
self.plugin_table.insertRow(self.plugin_table.rowCount())
name_item = QTableWidgetItem(info['name'])
name_item.setIcon(IconInstance().TOOLBOX)
module_item = QTableWidgetItem(info['module'])
enabled_item = QTableWidgetItem('启用')
enabled_item.setCheckState(Qt.Checked)
self.plugin_table.setItem(self.plugin_table.rowCount() - 1, 0, name_item)
self.plugin_table.setItem(self.plugin_table.rowCount() - 1, 1, module_item)
self.plugin_table.setItem(self.plugin_table.rowCount() - 1, 2, enabled_item)
self.plugins.append(info)
else:
pass
def remove_plugin(self):
self.has_change = True
row_ids = list( row.row() for row in self.plugin_table.selectionModel().selectedRows())
row_ids.sort(reverse=True)
for row in row_ids:
self.plugin_table.removeRow(row)
info = self.plugins.pop(row)
try:
shutil.rmtree(info['path'])
except Exception as e:
# logging
logging.info(e)
pass
# for idx in self.plugins
def edit_plugin(self, row, column):
self.has_change = True
if column == 2:
self.plugin_table.item(row, column).setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
def save_plugin(self):
for idx in range(self.plugin_table.rowCount()):
enabled = self.plugin_table.item(idx, 2).checkState() == Qt.Checked
self.plugins[idx]['enabled'] = enabled
Settings.Plugin().plugins = self.plugins
self.has_change = False
self.close()
def closeEvent(self, event):
if self.has_change:
reply = QMessageBox.question(self, 'Message', "Do you want to save the changes?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
self.save_plugin()
event.accept()
else:
event.accept()
else:
event.accept()

View File

@ -0,0 +1 @@
from .main import *

View File

@ -0,0 +1 @@
from .main import *

View File

@ -0,0 +1 @@
from .main import *

View File

@ -0,0 +1 @@
from .main import *

View File

@ -1,9 +1,9 @@
from misc import Register from rscder.plugins.misc import Register
FILTER = Register('滤波处理算法') FILTER = Register('滤波处理算法')
from .mean_filter import MeanFilter from .mean_filter import MeanFilter
from filter_collection.main import * from rscder.plugins.filter_collection.main import *
from .morphology_filter import MorphologyFilter from .morphology_filter import MorphologyFilter
from .bilater_filter import BilaterFilter from .bilater_filter import BilaterFilter
from .lee_filter import LeeFilter from .lee_filter import LeeFilter

View File

@ -1,9 +1,9 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer

View File

@ -1,9 +1,9 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer

View File

@ -1,18 +1,16 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer
from rscder.utils.icons import IconInstance from rscder.utils.icons import IconInstance
import os import os
from datetime import datetime
import numpy as np import numpy as np
import torch
import torch.nn.functional as F
import cv2 import cv2
from tqdm import tqdm from tqdm import tqdm
def adaptiveMedianDeNoise(count, image): def adaptiveMedianDeNoise(count, image):

View File

@ -1,9 +1,9 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer
@ -11,9 +11,6 @@ from rscder.utils.icons import IconInstance
import os import os
from datetime import datetime from datetime import datetime
import numpy as np import numpy as np
import torch
import torch.nn.functional as F
import pandas as pd
import cv2 import cv2
from tqdm import tqdm from tqdm import tqdm
def adaptiveMedianDeNoise(count, image): def adaptiveMedianDeNoise(count, image):

View File

@ -12,8 +12,8 @@ from rscder.gui.layercombox import RasterLayerCombox
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from misc import AlgFrontend, AlgSelectWidget from rscder.plugins.misc import AlgFrontend, AlgSelectWidget
import functools import functools

View File

@ -1,9 +1,9 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer

View File

@ -1,9 +1,9 @@
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
from misc.utils import format_now from rscder.plugins.misc.utils import format_now
from osgeo import gdal, gdal_array from osgeo import gdal, gdal_array
from skimage.filters import rank from skimage.filters import rank
from skimage.morphology import rectangle from skimage.morphology import rectangle
from filter_collection import FILTER from rscder.plugins.filter_collection import FILTER
from PyQt5.QtWidgets import QDialog, QAction from PyQt5.QtWidgets import QDialog, QAction
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer from rscder.utils.project import PairLayer, Project, RasterLayer, ResultPointLayer

View File

@ -0,0 +1,5 @@
from rscder.plugins.misc import Register
FOLLOW = Register('流程')
from .main import *

View File

@ -4,8 +4,8 @@ from rscder.plugins.basic import BasicPlugin
from rscder.utils.icons import IconInstance from rscder.utils.icons import IconInstance
from rscder.gui.actions import ActionManager from rscder.gui.actions import ActionManager
from PyQt5 import QtWidgets, QtGui from PyQt5 import QtWidgets, QtGui
from follow import FOLLOW from . import FOLLOW
from misc import AlgFrontend from rscder.plugins.misc import AlgFrontend
class FollowDialog(QtWidgets.QDialog): class FollowDialog(QtWidgets.QDialog):

View File

@ -9,6 +9,19 @@ import os
import sys import sys
import inspect import inspect
from rscder.plugins.about import AboutPlugin
from rscder.plugins.change_rate import RateSetPlugin
from rscder.plugins.evaluation import EvaluationPlugin
from rscder.plugins.export_to import ExportPlugin
from rscder.plugins.filter_collection import MainPlugin as FilterPlugin
from rscder.plugins.follow import FollowPlugin
from rscder.plugins.unsupervised_method import UnsupervisedPlugin
from rscder.plugins.veg_method import VegtationPlugin
PLUGINS = [
AboutPlugin, RateSetPlugin, EvaluationPlugin, ExportPlugin, FilterPlugin, FollowPlugin, UnsupervisedPlugin, VegtationPlugin
]
class PluginLoader(QObject): class PluginLoader(QObject):
plugin_loaded = pyqtSignal() plugin_loaded = pyqtSignal()
@ -16,7 +29,7 @@ class PluginLoader(QObject):
def __init__(self, ctx): def __init__(self, ctx):
super().__init__() super().__init__()
self.ctx = ctx self.ctx = ctx
self.plugins = [] self.plugins = dict()
@staticmethod @staticmethod
def copy_plugin_to_3rd(dir, random_suffix=True): def copy_plugin_to_3rd(dir, random_suffix=True):
@ -48,19 +61,11 @@ class PluginLoader(QObject):
return info return info
def load_plugin(self): def load_plugin(self):
plugins = Settings.Plugin().plugins
if Settings.Plugin().root not in sys.path: for plugin in PLUGINS:
sys.path.insert(0, Settings.Plugin().root)
for plugin in plugins:
# path = plugin['path']
if not plugin['enabled']:
continue
try: try:
module = importlib.import_module(plugin['module']) self.plugins[plugin.__name__] = plugin(self.ctx)
for oname, obj in inspect.getmembers(module):
if inspect.isclass(obj) and issubclass(obj, BasicPlugin) and obj != BasicPlugin and obj != PluginLoader:
self.plugins.append(obj(self.ctx))
break
except Exception as e: except Exception as e:
# import traceback # import traceback
# traceback.print_exc() # traceback.print_exc()

Some files were not shown because too many files have changed in this diff Show More