From b4c66b1bd95854abcbada897165d7e8c125f2f80 Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Fri, 26 Jun 2020 18:00:56 +0200 Subject: [PATCH] snake integration continuded --- libs/snake/snake/BUILD/CMakeCache.txt | 296 ++++++++++++++++++++++++++ qgroundcontrol.pro | 1 + src/Snake/snake_geometry.h | 20 +- src/Wima/WimaController.cc | 74 ++++++- src/Wima/WimaController.h | 3 +- src/main.cc | 8 +- 6 files changed, 381 insertions(+), 21 deletions(-) create mode 100644 libs/snake/snake/BUILD/CMakeCache.txt diff --git a/libs/snake/snake/BUILD/CMakeCache.txt b/libs/snake/snake/BUILD/CMakeCache.txt new file mode 100644 index 000000000..6c152b5dd --- /dev/null +++ b/libs/snake/snake/BUILD/CMakeCache.txt @@ -0,0 +1,296 @@ +# This is the CMakeCache file. +# For build in directory: /home/valentin/Desktop/drones/qgroundcontrol/libs/snake/snake/BUILD +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or +// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/lib/ccache/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-7 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-7 + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=SNAKE + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//The directory containing a CMake configuration file for GeographicLib. +GeographicLib_DIR:PATH=GeographicLib_DIR-NOTFOUND + +//Value Computed by CMake +SNAKE_BINARY_DIR:STATIC=/home/valentin/Desktop/drones/qgroundcontrol/libs/snake/snake/BUILD + +//Value Computed by CMake +SNAKE_SOURCE_DIR:STATIC=/home/valentin/Desktop/drones/qgroundcontrol/libs/snake/snake + +//Dependencies for target +polyclipping_LIB_DEPENDS:STATIC= + +//Dependencies for target +snake_LIB_DEPENDS:STATIC= + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/valentin/Desktop/drones/qgroundcontrol/libs/snake/snake/BUILD +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=10 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=2 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/valentin/Desktop/drones/qgroundcontrol/libs/snake/snake +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.10 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index e9341760c..5088e2384 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -30,6 +30,7 @@ DebugBuild { } else { DESTDIR = $${OUT_PWD}/release + DEFINES += NDEBUG } # diff --git a/src/Snake/snake_geometry.h b/src/Snake/snake_geometry.h index 4f8ceced3..c3592d522 100644 --- a/src/Snake/snake_geometry.h +++ b/src/Snake/snake_geometry.h @@ -68,24 +68,16 @@ public: { assert((m > 0) || (n > 0)); assert(!_isInitialized); - if (!_isInitialized){ - _m = m; - _n = n; - _elements = n*m; - _matrix.resize(_elements, value); - } + _m = m; + _n = n; + _elements = n*m; + _matrix.resize(_elements, value); + _isInitialized = true; } void setDimension(size_t m, size_t n) { - assert((m > 0) || (n > 0)); - assert(!_isInitialized); - if (!_isInitialized){ - _m = m; - _n = n; - _elements = n*m; - _matrix.resize(_elements); - } + setDimension(m, n, T{0}); } private: diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index 788581312..b58384d30 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -2,6 +2,7 @@ #include "utilities.h" #include "time.h" +#include "assert.h" const char* WimaController::wimaFileExtension = "wima"; @@ -20,7 +21,7 @@ const char* WimaController::altitudeName = "Altitude"; const char* WimaController::reverseName = "Reverse"; const char* WimaController::snakeTileWidthName = "SnakeTileWidth"; const char* WimaController::snakeTileHeightName = "SnakeTileHeight"; -const char* WimaController::snakeMinTileAreaName = "SnakeMinTileAreaWidth"; +const char* WimaController::snakeMinTileAreaName = "SnakeMinTileArea"; const char* WimaController::snakeLineDistanceName = "SnakeLineDistance"; const char* WimaController::snakeMinTransectLengthName = "SnakeMinTransectLength"; @@ -87,7 +88,7 @@ WimaController::WimaController(QObject *parent) _enableDisableLowBatteryHandling(enableLowBatteryHandling->rawValue()); // Snake Worker Thread. - connect(&_snakeWorker, &SnakeWorker::resultReady, this, &WimaController::_snakeResultsReady); + connect(&_snakeWorker, &SnakeWorker::resultReady, this, &WimaController::_snakeStoreWorkerResults); } QmlObjectListModel* WimaController::visualItems() @@ -1039,6 +1040,7 @@ void WimaController::_eventTimerHandler() _snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble()); _snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble()); _snakeWorker.start(); + _setSnakeCalcInProgress(true); } } } @@ -1311,11 +1313,73 @@ bool WimaController::_verifyScenarioDefinedWithErrorMessage() errorString.push_back(c); qgcApp()->showMessage(errorString); } + return value; } -void WimaController::_snakeResultsReady(const WorkerResult_t &r) -{ - // continue here +void WimaController::_snakeStoreWorkerResults(const WorkerResult_t &r) +{ + _setSnakeCalcInProgress(false); + if (!r.success) { + qgcApp()->showMessage(r.errorMessage); + return; + } + + // create Mission items from r.waypoints + long n = r.waypoints.size() - r.returnPathIdx.size() - r.arrivalPathIdx.size() + 2; + assert(n >= 1); + QVector missionItems; + missionItems.reserve(int(n)); + + unsigned long startIdx = r.returnPathIdx.last(); + unsigned long endIdx = r.returnPathIdx.first(); + QObject parent; + int seqNum = 0; + for (unsigned long i = startIdx; i <= endIdx; ++i) { + QGeoCoordinate wp{r.waypoints[int(i)].value()}; + MissionItem item = new MissionItem(seqNum++, + MAV_CMD_NAV_WAYPOINT, + MAV_FRAME_GLOBAL_RELATIVE_ALT, + 0, // Hold time (delay for hover and capture to settle vehicle before image is taken) + 0.0, // No acceptance radius specified + 0.0, // Pass through waypoint + std::numeric_limits::quiet_NaN(), // Yaw unchanged + wp.latitude(), + wp.longitude(), + wp.altitude(), + true, // autoContinue + false, // isCurrentItem + &parent); + } + + // create mission items + _missionController->removeAll(); + QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems(); + + // create SimpleMissionItem by using _missionController + for ( int i = 0; i < missionItems.size(); i++) { + _missionController->insertSimpleMissionItem(missionItems[i], missionControllerVisualItems->count()); + } + // copy mission items from _missionController to _missionItems + for ( int i = 1; i < missionControllerVisualItems->count(); i++) { + SimpleMissionItem *visualItem = qobject_cast((*missionControllerVisualItems)[i]); + if (visualItem == nullptr) { + qWarning("WimaController::fetchContainerData(): Nullptr at SimpleMissionItem!"); + return; + } + SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this); + _missionItems.append(visualItemCopy); + } + + _updateWaypointPath(); + + // set _nextPhaseStartWaypointIndex to 1 + disconnect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::_calcNextPhase); + bool reverse = _reverse.rawValue().toBool(); + _nextPhaseStartWaypointIndex.setRawValue(reverse? _missionItems.count() : int(1)); + connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::_calcNextPhase); + + if(!_calcNextPhase()) + return; } void WimaController::_loadCurrentMissionItemsFromBuffer() diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 55684c936..1685bdb49 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -232,7 +232,7 @@ private slots: void _setSnakeCalcInProgress (bool inProgress); bool _verifyScenarioDefined (void); bool _verifyScenarioDefinedWithErrorMessage (void); - void _snakeResultsReady (const WorkerResult_t &r); + void _snakeStoreWorkerResults (const WorkerResult_t &r); private: @@ -311,6 +311,7 @@ private: SettingsFact _snakeMinTileArea; SettingsFact _snakeLineDistance; SettingsFact _snakeMinTransectLength; + QmlObjectListModel _snakeTiles; // tiles }; diff --git a/src/main.cc b/src/main.cc index 4f39344ca..386e2d00c 100644 --- a/src/main.cc +++ b/src/main.cc @@ -58,6 +58,9 @@ #include #include "QGCMapEngine.h" +// Snake +#include "Wima/WimaControllerDetail.h" + /* SDL does ugly things to main() */ #ifdef main #undef main @@ -145,7 +148,7 @@ int main(int argc, char *argv[]) // install the message handler AppMessages::installHandler(); - +QList #ifdef Q_OS_MAC #ifndef __ios__ // Prevent Apple's app nap from screwing us over @@ -250,6 +253,9 @@ int main(int argc, char *argv[]) // on in the code. qRegisterMetaType > >(); + // Snake + qRegisterMetaType("WorkerResult"); + app->_initCommon(); //-- Initialize Cache System getQGCMapEngine()->init(); -- 2.22.0