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..2695a43
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
@@ -0,0 +1,123 @@
+
+
+
+
+ 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..dc0477e
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
@@ -0,0 +1,49 @@
+
+
+
+
+ {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
+
+
+ Source Files
+
+
+
+
+ Header 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..c41aa68
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
@@ -0,0 +1,276 @@
+#include "ManualLabelToolWidget.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+//QgsUnitTypes
+
+// ¶¨Òå·ÃÎʲÎÊý
+#define RASTERFILEFILTER u8"ËùÓÐÎļþ (*.*);;TIF (*.tif);;TIFF (*.tiff);;bin (*.bin);;dat (*.dat);;"
+
+
+
+ManualLabelToolWidget::ManualLabelToolWidget(QWidget *parent)
+ : QMainWindow(parent)
+{
+ this->init_UI();
+
+}
+
+ManualLabelToolWidget::~ManualLabelToolWidget()
+{
+}
+
+void ManualLabelToolWidget::init_UI()
+{
+ this->setWindowTitle(tr(u8"AI±ê×¢Èí¼þ"));
+ // ³õʼ´óС
+ {
+ this->resize(1920,1080);
+ }
+
+ //µØÍ¼¿ØÖÆ
+ {
+ // 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);
+
+
+ }
+
+ // ״̬¹¤¾ßÀ¸
+ {
+ appStatusBar = this->statusBar(); // »ñÈ¡»ò´´½¨×´Ì¬À¸
+
+ scaleLabel = new QLabel(tr(u8"±ÈÀý³ß£º"));
+ CoordinaryTextLabel = new QLabel(tr(u8"×ø±êϵ£º"));
+ PointXYLabel = new QLabel(tr(u8"×ø±ê£º"));
+ UnitLabel = new QLabel(tr(u8"µ¥Î»£º"));
+ appStatusBar->addPermanentWidget(PointXYLabel); //
+ appStatusBar->addPermanentWidget(scaleLabel); //
+ appStatusBar->addPermanentWidget(UnitLabel); //
+ appStatusBar->addPermanentWidget(CoordinaryTextLabel); //
+
+ // Á¬½Ó±ÈÀý³ß±ä»¯ÐźÅ
+ connect(map_canvas, SIGNAL(scaleChanged(double)) , this, SLOT(updateScaleLabel(double)));
+ connect(map_canvas, SIGNAL(xyCoordinates(const QgsPointXY&)), this, SLOT(updateCoordinateLabel(const QgsPointXY&)));
+
+ connect(map_canvas, SIGNAL(extentsChanged()), this, SLOT(onMapExtentsChanged()));
+
+
+ }
+
+ // ²Ëµ¥À¸
+ {
+ menubar = this->menuBar();
+
+ // Ôڲ˵¥À¸ÉÏÌí¼Ó"Îļþ"ºÍ"±à¼"²Ëµ¥
+ fileMenu = menubar->addMenu(tr(u8"Îļþ"));
+
+
+ // Ïò"Îļþ"²Ëµ¥ÖÐÌí¼Ó²Ëµ¥ÏQAction£©
+ newAction = fileMenu->addAction(tr(u8"н¨"));
+ fileMenu->addSeparator(); // Ìí¼Ó·Ö¸îÏß[1,5](@ref)
+ openMenu = fileMenu->addMenu(tr(u8"´ò¿ª"));
+
+ openRasterFolderAction = openMenu->addAction(tr(u8"´ò¿ªÓ°ÏñÎļþ¼Ð"));
+ openRasterAction = openMenu->addAction(tr(u8"´ò¿ªÓ°Ïñ"));
+ openSLCRasterAction = openMenu->addAction(tr(u8"SLCÓ°Ïñ"));
+ editMenu = menubar->addMenu(tr(u8"±à¼"));
+
+ // ʼþ°ó¶¨
+ QObject::connect(this->openRasterAction, SIGNAL(triggered()), this, SLOT(openRasterLayerTriggered()));
+
+ }
+
+ // AI±ê×¢¹¤¾ßÀ¸
+ {
+ AiLabelToolBar = new QToolBar(tr(u8"AI±ê×¢¹¤¾ßÀ¸"), this);
+ this->addToolBar(Qt::LeftToolBarArea, AiLabelToolBar);
+ }
+
+}
+
+void ManualLabelToolWidget::open()
+{
+}
+
+
+void ManualLabelToolWidget::openRasterLayerTriggered()
+{
+ if (lastFileDialogPath.isEmpty()) {
+ lastFileDialogPath = ".";
+ }
+ // ´ò¿ªÓ°Ïñ
+ // 2. Ñ¡Ôñ¶à¸öÎļþ
+ QString rasterPath = QFileDialog::getOpenFileName(
+ this,
+ tr(u8"ÇëÑ¡ÔñÓ°ÏñÎļþ"),
+ lastFileDialogPath,
+ tr(RASTERFILEFILTER)
+ );
+
+ lastFileDialogPath = rasterPath;
+ // ¶ÁÈ¡Êý¾Ý
+ this->openRaster(rasterPath);
+}
+
+void ManualLabelToolWidget::openRaster(QString& filePath)
+{
+ QString filename = QFileInfo(filePath).fileName();
+
+ QgsRasterLayer* rasterLayer = new QgsRasterLayer(filePath, filename);
+ if (!rasterLayer->isValid()) {
+ qDebug() << "Failed to load raster layer!";
+ // ´íÎó´¦Àí
+ return;
+ }
+
+ QgsProject::instance()->addMapLayer(rasterLayer);
+
+}
+
+void ManualLabelToolWidget::updateCoordinateLabel(const QgsPointXY& point)
+{
+ QString coordText = QString(tr(u8"×ø±ê£ºX:%1 Y:%2")).arg(QString::number(point.x(), 'f', 2)).arg(QString::number(point.y(), 'f', 2));
+ PointXYLabel->setText(coordText);
+}
+
+void ManualLabelToolWidget::onMapExtentsChanged()
+{
+ QgsRectangle currentExtent = map_canvas->extent();
+
+ //// ÏÖÔÚÄã¿ÉÒÔʹÓÃÕâ¸ö·¶Î§ÐÅÏ¢ÁË£¬ÀýÈ磺
+ //// 1. ´òÓ¡·¶Î§×ø±ê
+ //qDebug() << "з¶Î§ - Xmin:" << currentExtent.xMinimum()
+ // << "Ymin:" << currentExtent.yMinimum()
+ // << "Xmax:" << currentExtent.xMaximum()
+ // << "Ymax:" << currentExtent.yMaximum();
+}
+
+void ManualLabelToolWidget::onLayersChanged(QgsMapLayer* layer)
+{
+
+ // WGS×ø±êϵ
+ QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
+ // »ñÈ¡×ø±êϵµÄÃèÊöÐÅÏ¢ºÍÈÏÖ¤±êʶ·û£¬ÀýÈç "WGS 84 / EPSG:4326"
+ QString description = currentCrs.description();
+ QString authid = currentCrs.authid();
+
+
+ // »ñÈ¡µ±Ç°ÏîÄ¿ÖÐËùÓÐͼ²ã
+ QList layers = QgsProject::instance()->mapLayers().values();
+ int layerCount = layers.size();
+
+ // Åжϵ±Ç°ÊÇ·ñ½öÓÐÒ»²ã
+ if (layerCount == 0&&description == "") {
+ QgsMapLayer* theOnlyLayer = layers.first();
+
+ // ¼ì²éͼ²ãÊÇ·ñÓÐЧÇÒÓµÓж¨ÒåµÄ×ø±êϵ
+ if (theOnlyLayer && theOnlyLayer->isValid() && theOnlyLayer->crs().isValid()) {
+ // ½«µØÍ¼»²¼µÄÄ¿±ê×ø±êϵÉèÖÃΪÓëͼ²ãÒ»ÖÂ
+ map_canvas->mapSettings().setDestinationCrs(theOnlyLayer->crs());
+ // ¿ÉÑ¡£º½«µØÍ¼·¶Î§Ëõ·ÅÖÁ¸Ãͼ²ãµÄÈ«·¶Î§£¬Ìṩ¸üºÃµÄ³õʼÊÓͼ
+ map_canvas->setExtent(theOnlyLayer->extent());
+ // ˢл²¼£¬Ê¹¸ü¸ÄÉúЧ
+ map_canvas->refresh();
+ qDebug() << "ͼ²ãÊýÁ¿Îª1£¬ÒÑͬ²½»²¼×ø±êϵÖÁ£º" << theOnlyLayer->crs().description();
+ }
+ }
+
+}
+
+void ManualLabelToolWidget::updateScaleLabel(double scale)
+{
+ // ½«±ÈÀý³ßÊýÖµ¸ñʽ»¯ÎªÒ×¶ÁµÄ×Ö·û´®£¬ÀýÈç 1:10000
+ QString scaleText = QString(tr(u8"±ÈÀý³ß£º1:%1")).arg(QString::number(scale, 'f', 0));
+ scaleLabel->setText(scaleText);
+
+ // ͬʱ¸üе¥Î»±êÇ©
+ Qgis::DistanceUnit unit = map_canvas->mapUnits();
+ QString unitString;
+ if (unit == Qgis::DistanceUnit::Meters) {
+ unitString = tr(u8"Ã×");
+ }
+ else if (unit == Qgis::DistanceUnit::Degrees) {
+ unitString = tr(u8"¶È");
+ }
+ else if (unit == Qgis::DistanceUnit::Feet) {
+ unitString = tr(u8"Ó¢³ß");
+ }
+ else {
+ unitString = tr(u8"δ֪");
+ }
+ UnitLabel->setText(QString(tr(u8"µ¥Î»£º%1")).arg(unitString));
+
+ // WGS×ø±êϵ
+ QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
+ // »ñÈ¡×ø±êϵµÄÃèÊöÐÅÏ¢ºÍÈÏÖ¤±êʶ·û£¬ÀýÈç "WGS 84 / EPSG:4326"
+ QString description = currentCrs.description();
+ QString authid = currentCrs.authid();
+
+ if (description == "") {
+ // ¼ÙÉè ui->label_crs ÊÇÓÃÓÚÏÔÊ¾×ø±êϵÐÅÏ¢µÄQLabel
+ CoordinaryTextLabel->setText(QString(tr(u8"×ø±êϵ£ºÎ´Öª")));
+ }
+ else {
+ // ¼ÙÉè ui->label_crs ÊÇÓÃÓÚÏÔÊ¾×ø±êϵÐÅÏ¢µÄQLabel
+ CoordinaryTextLabel->setText(QString(tr(u8"×ø±êϵ£º%1 (%2)")).arg(description).arg(authid));
+ }
+
+
+}
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.h b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
new file mode 100644
index 0000000..4f961ca
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
@@ -0,0 +1,86 @@
+#pragma once
+
+#include
+#include
+#include
+
+class QgsMapCanvas;
+class QgsMapToolPan;
+class QgsLayerTreeModel;
+class QgsLayerTreeView;
+class QgsLayerTreeMapCanvasBridge;
+class QDockWidget;
+class QLabel;
+class QStatusBar;
+class QMenuBar;
+class QToolBar;
+class QgsMapLayer;
+
+
+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;
+
+ // ״̬À¸
+ QLabel* scaleLabel; // ±ÈÀý³ß
+ QLabel* CoordinaryTextLabel; // ͼ²ã×ø±êϵ
+ QLabel* PointXYLabel;// Êó±êÖ¸Õë×ø±ê
+ QLabel* UnitLabel;
+ QStatusBar* appStatusBar;// ״̬¿ØÖÆÀ¸
+
+private: // ²Ëµ¥À¸
+ QMenuBar* menubar;
+
+private: // »æÖÆÍ¼²ã
+ QToolBar* AiLabelToolBar;
+
+private: // Îļþ²Ëµ¥
+ QMenu* fileMenu;
+ QAction* newAction;
+ QMenu* openMenu;
+ QAction* openRasterFolderAction;
+ QAction* openRasterAction;
+ QAction* openSLCRasterAction;
+
+private:// ±à¼²Ëµ¥
+ QMenu* editMenu;
+
+public slots:// ¹¦Äܺ¯ÊýÇø
+ void open();
+ void openRasterLayerTriggered();
+ void openRaster(QString &path);
+
+public slots: // ״̬À¸º¯Êý
+ void updateScaleLabel(double);
+ void updateCoordinateLabel(const QgsPointXY&);
+
+ void onMapExtentsChanged();
+ void onLayersChanged(QgsMapLayer* layer);
+
+public: // ³£ÓñäÁ¿Çø
+ QString lastFileDialogPath;
+
+
+
+
+
+};
+
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/RasterOperator.cpp b/Manual-Label-Tool-Widget/RasterOperator.cpp
new file mode 100644
index 0000000..6fd7b3e
--- /dev/null
+++ b/Manual-Label-Tool-Widget/RasterOperator.cpp
@@ -0,0 +1 @@
+#include "RasterOperator.h"
diff --git a/Manual-Label-Tool-Widget/RasterOperator.h b/Manual-Label-Tool-Widget/RasterOperator.h
new file mode 100644
index 0000000..aeeb388
--- /dev/null
+++ b/Manual-Label-Tool-Widget/RasterOperator.h
@@ -0,0 +1,5 @@
+#pragma once
+class RasterOperator
+{
+};
+
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