diff --git a/.gitignore b/.gitignore
index 4ccd6fa..16cb3ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -662,3 +662,5 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
+**/**/x64
+**/**/.vs
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
new file mode 100644
index 0000000..a1e4dca
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
@@ -0,0 +1,119 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}
+ QtVS_v304
+ 10.0
+ 10.0
+ $(MSBuildProjectDirectory)\QtMsBuild
+
+
+
+ Application
+ v143
+ true
+ Unicode
+
+
+ Application
+ v143
+ false
+ true
+ Unicode
+
+
+
+
+
+
+ qgis_qt5
+ core;gui;widgets
+ debug
+
+
+ tools_qt5
+ core;xml;gui;widgets
+ release
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D:\OSGeo4W\apps\qgis-dev\include;D:\OSGeo4W\include;$(IncludePath)
+ D:\OSGeo4W\lib;D:\OSGeo4W\apps\qgis-dev\lib;$(ReferencePath)
+ D:\OSGeo4W\lib;D:\OSGeo4W\apps\qgis-dev\lib;$(LibraryPath)
+
+
+
+ qgis_core.lib;qgis_app.lib;qgis_gui.lib;%(AdditionalDependencies)
+
+
+ _USE_MATH_DEFINES;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;%(PreprocessorDefinitions)
+ stdcpp17
+
+
+
+
+ true
+ Level3
+ true
+ true
+
+
+ Windows
+ true
+
+
+
+
+ true
+ Level3
+ true
+ true
+ true
+ true
+
+
+ Windows
+ false
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
new file mode 100644
index 0000000..81ae6d6
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
@@ -0,0 +1,41 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {99349809-55BA-4b9d-BF79-8FDBB0286EB3}
+ ui
+
+
+ {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}
+ ts
+
+
+
+
+ Resource Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp b/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
new file mode 100644
index 0000000..6b7744a
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
@@ -0,0 +1,63 @@
+#include "ManualLabelToolWidget.h"
+#include
+#include
+#include
+#include
+
+ManualLabelToolWidget::ManualLabelToolWidget(QWidget *parent)
+ : QMainWindow(parent)
+{
+ this->init_UI();
+
+}
+
+ManualLabelToolWidget::~ManualLabelToolWidget()
+{
+}
+
+void ManualLabelToolWidget::init_UI()
+{
+ // 1. inti map canvas
+ this->map_canvas = new QgsMapCanvas();
+ this->setCentralWidget((this->map_canvas));
+
+ // 2. map tool pan
+ this->map_tool_pan = new QgsMapToolPan(this->map_canvas);
+ this->map_canvas->setMapTool(this->map_tool_pan);
+
+ // 3. map layer manager
+ this->map_layerTreeView =new QgsLayerTreeView(this);
+ // 4. create map model
+ this->map_layerModel = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this);
+ this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeRename); // ÔÊÐíÖØÃüÃû
+ this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // ÔÊÐíµ÷Õû˳Ðò
+ this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // ÔÊÐí¸Ä±ä¿É¼ûÐÔ
+ this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // ÒÔÊ÷״ͼÏÔʾͼÀý
+ this->map_layerModel->setAutoCollapseLegendNodes(10); // ×Ô¶¯ÕÛµþ¹ý¶àͼÀýÏî
+
+ this->map_layerTreeView->setModel(this->map_layerModel);
+ // create bridge between mapcontrol and layer
+ this->map_layer_Bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), this->map_canvas, this);
+
+
+ // layer ²¼¾Ö
+ // 1. ´´½¨Ò»¸öQDockWidget£¨Í£¿¿´°¿Ú£©À´³ÐÔØÍ¼²ãÊ÷ÊÓͼ
+ this->layerTreeDock =new QDockWidget(tr(u8"ͼ²ã¹ÜÀíÆ÷"), this);
+ this->layerTreeDock->setWidget(this->map_layerTreeView);
+
+ // 2. ½«ÒÑÓеÄͼ²ãÊ÷ÊÓͼ(m_layerTreeView)ÉèÖÃΪÕâ¸öÍ£¿¿´°¿ÚµÄÖÐÐIJ¿¼þ
+ layerTreeDock->setWidget(this->map_layerTreeView);
+
+ // 3. (¿ÉÑ¡µ«ÍƼö)ÉèÖÃÍ£¿¿´°¿ÚÔÊÐíÍ£¿¿µÄÇøÓò
+ layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+
+
+ // 5. ½«Í£¿¿´°¿ÚÌí¼Óµ½Ö÷´°¿ÚµÄ×ó²àÇøÓò
+ this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock);
+
+
+
+
+}
+
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.h b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
new file mode 100644
index 0000000..88d4e2f
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+class ManualLabelToolWidget : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ ManualLabelToolWidget(QWidget *parent = nullptr);
+ ~ManualLabelToolWidget();
+
+
+
+private: // UI
+ void init_UI();// Init UI
+
+private: // ×é¼þ
+ QgsMapCanvas* map_canvas=nullptr; // map widget
+ QgsMapToolPan* map_tool_pan = nullptr; // map tool for pan zoom
+
+ QgsLayerTreeModel* map_layerModel = nullptr;
+ QgsLayerTreeView* map_layerTreeView = nullptr;
+ QgsLayerTreeMapCanvasBridge* map_layer_Bridge = nullptr;
+
+private: // ²¼¾Ö
+ QDockWidget* layerTreeDock;
+
+
+};
+
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc b/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc
new file mode 100644
index 0000000..876730d
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Manual-Label-Tool-Widget/main.cpp b/Manual-Label-Tool-Widget/main.cpp
new file mode 100644
index 0000000..e3b1a43
--- /dev/null
+++ b/Manual-Label-Tool-Widget/main.cpp
@@ -0,0 +1,27 @@
+//#include "ManualLabelToolWidget.h"
+//#include
+//
+//int main(int argc, char *argv[])
+//{
+// QApplication app(argc, argv);
+// ManualLabelToolWidget window;
+// window.show();
+// return app.exec();
+//}
+#include
+#include
+
+#include
+#include
+#include
+#include "ManualLabelToolWidget.h"
+//ÕûÊýÀàÐÍÖ÷º¯Êý(ÕûÊýÀàÐÍͳ¼Æ²ÎÊý¸öÊý,×Ö·ûÀàÐÍÖ¸ÕëÊý×éÖ¸Ïò×Ö·û´®²ÎÊý)
+int main(int argc, char** argv)
+{
+ //QApplicationÓÐÇÒ½öÓÐÒ»¸öÓ¦ÓóÌÐòÀàµÄ¶ÔÏó
+ QApplication app(argc, argv);
+ ManualLabelToolWidget labeltoolwidget;
+ labeltoolwidget.show();
+ //µÈ´ýÓû§²Ù×÷
+ return app.exec();
+}
diff --git a/Manual-Label-Tool-Widget/symbology-style.db b/Manual-Label-Tool-Widget/symbology-style.db
new file mode 100644
index 0000000..214fcf7
Binary files /dev/null and b/Manual-Label-Tool-Widget/symbology-style.db differ
diff --git a/Manual-Labeling-Client/Manual-Labeling-Client.sln b/Manual-Labeling-Client/Manual-Labeling-Client.sln
new file mode 100644
index 0000000..7138e24
--- /dev/null
+++ b/Manual-Labeling-Client/Manual-Labeling-Client.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35825.156 d17.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Manual-Labeling-Client", "Manual-Labeling-Client.vcxproj", "{2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Manual-Label-Tool-Widget", "..\Manual-Label-Tool-Widget\Manual-Label-Tool-Widget.vcxproj", "{89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}.Debug|x64.ActiveCfg = Debug|x64
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}.Debug|x64.Build.0 = Debug|x64
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}.Release|x64.ActiveCfg = Release|x64
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}.Release|x64.Build.0 = Release|x64
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}.Debug|x64.ActiveCfg = Debug|x64
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}.Debug|x64.Build.0 = Debug|x64
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}.Release|x64.ActiveCfg = Release|x64
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {47BDF617-39C7-4200-BDD6-E88A9224CB56}
+ EndGlobalSection
+EndGlobal
diff --git a/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj
new file mode 100644
index 0000000..1927ff4
--- /dev/null
+++ b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj
@@ -0,0 +1,122 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}
+ QtVS_v304
+ 10.0
+ 10.0
+ $(MSBuildProjectDirectory)\QtMsBuild
+
+
+
+ Application
+ v143
+ true
+ Unicode
+
+
+ Application
+ v143
+ false
+ true
+ Unicode
+
+
+
+
+
+
+ qgis_qt5
+ core;gui;widgets
+ debug
+
+
+ tools_qt5
+ core;gui;widgets
+ release
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ Use
+ stdafx.h
+ Level3
+ true
+ true
+
+
+ Windows
+ true
+
+
+ stdafx.h;%(PrependInclude)
+
+
+
+
+ true
+ Use
+ stdafx.h
+ Level3
+ true
+ true
+ true
+ true
+
+
+ Windows
+ false
+ true
+ true
+
+
+ stdafx.h;%(PrependInclude)
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters
new file mode 100644
index 0000000..a021ac0
--- /dev/null
+++ b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters
@@ -0,0 +1,50 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {99349809-55BA-4b9d-BF79-8FDBB0286EB3}
+ ui
+
+
+ {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}
+ ts
+
+
+
+
+ Resource Files
+
+
+ Form Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/Manual-Labeling-Client/ManualLabelingClient.cpp b/Manual-Labeling-Client/ManualLabelingClient.cpp
new file mode 100644
index 0000000..ec607f4
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.cpp
@@ -0,0 +1,12 @@
+#include "stdafx.h"
+#include "ManualLabelingClient.h"
+
+ManualLabelingClient::ManualLabelingClient(QWidget *parent)
+ : QMainWindow(parent)
+{
+ ui.setupUi(this);
+}
+
+ManualLabelingClient::~ManualLabelingClient()
+{}
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.h b/Manual-Labeling-Client/ManualLabelingClient.h
new file mode 100644
index 0000000..81f18b0
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include
+#include "ui_ManualLabelingClient.h"
+
+class ManualLabelingClient : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ ManualLabelingClient(QWidget *parent = nullptr);
+ ~ManualLabelingClient();
+
+private:
+ Ui::ManualLabelingClientClass ui;
+};
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.qrc b/Manual-Labeling-Client/ManualLabelingClient.qrc
new file mode 100644
index 0000000..8df6f23
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.qrc
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.ui b/Manual-Labeling-Client/ManualLabelingClient.ui
new file mode 100644
index 0000000..7344599
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.ui
@@ -0,0 +1,29 @@
+
+
+ ManualLabelingClientClass
+
+
+ ManualLabelingClientClass
+
+
+
+ 0
+ 0
+ 600
+ 400
+
+
+
+ ManualLabelingClient
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Manual-Labeling-Client/main.cpp b/Manual-Labeling-Client/main.cpp
new file mode 100644
index 0000000..5b46cc4
--- /dev/null
+++ b/Manual-Labeling-Client/main.cpp
@@ -0,0 +1,11 @@
+#include "stdafx.h"
+#include "ManualLabelingClient.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ ManualLabelingClient window;
+ window.show();
+ return app.exec();
+}
diff --git a/Manual-Labeling-Client/stdafx.cpp b/Manual-Labeling-Client/stdafx.cpp
new file mode 100644
index 0000000..fd4f341
--- /dev/null
+++ b/Manual-Labeling-Client/stdafx.cpp
@@ -0,0 +1 @@
+#include "stdafx.h"
diff --git a/Manual-Labeling-Client/stdafx.h b/Manual-Labeling-Client/stdafx.h
new file mode 100644
index 0000000..c3cbb7d
--- /dev/null
+++ b/Manual-Labeling-Client/stdafx.h
@@ -0,0 +1 @@
+#include