Database Preprocessing for Urban IRT
Detailed Description
This is an example of how to use the WinProp API to preprocess an urban database for IRT. The full example is distributed with the installation.#include <stdio.h> #include <string> #include <iostream> #include "IRT_preprocess_urban.h" #ifndef API_DATA_FOLDER #define API_DATA_FOLDER "../../api/winprop/data/" #endif // !API_DATA_FOLDER int main(int argc, char** argv) { int Error = 0; WinProp_PreProUrban PreproPara; WinProp_Callback Callback; // Initializations WinProp_Structure_Init_Callback(&Callback); WinProp_Structure_Init_PreProUrban(&PreproPara); Callback.Percentage = CallbackProgress; Callback.Message = CallbackMessage; Callback.Error = CallbackError; // Definition of parameters for preprocessing sprintf(PreproPara.FilenameBuildings, "%s", API_DATA_FOLDER "/outdoor/City"); sprintf(PreproPara.FilenameTopography, "%s", API_DATA_FOLDER "/outdoor/Topo.tdb"); PreproPara.Model = PREDMODEL_IRT; PreproPara.Mode = PP_MODE_IRT_3D; PreproPara.NrHeights = 1; PreproPara.Heights = (double*)malloc(sizeof(double) * (PreproPara.NrHeights)); PreproPara.Heights[0] = 1.5; PreproPara.HeightAbsolute = 0; PreproPara.ConsiderIndoorPixels = 0; PreproPara.AdaptiveResolution = 0; PreproPara.Resolution = (double)10.; PreproPara.SegmentHorizontal = (double)100.; PreproPara.SegmentVertical = (double)100.; PreproPara.TileHorizontal = (double)100.; PreproPara.TileVertical = (double)100.; PreproPara.ConsiderTopography = 1; PreproPara.AbsoluteBuildingHeights = 0; PreproPara.MultipleInteractions = 1; PreproPara.SphericMode = PP_MODE_IRT_ZONE_OFF; // Enable multi threading PreproPara.MultiThreading = 2; // Set IRT polygon PreproPara.CornersPolygon = (COORDPOINT*)malloc(sizeof(COORDPOINT) * 8); if (PreproPara.CornersPolygon != nullptr) { PreproPara.NrCornersPolygon = 8; PreproPara.CornersPolygon[0] = { 324.424, 2551.730, PreproPara.Heights[0] }; PreproPara.CornersPolygon[1] = { 803.687, 2971.085, PreproPara.Heights[0] }; PreproPara.CornersPolygon[2] = { 1660.829, 2961.869, PreproPara.Heights[0] }; PreproPara.CornersPolygon[3] = { 2084.793, 2445.740, PreproPara.Heights[0] }; PreproPara.CornersPolygon[4] = { 2084.793, 1501.039, PreproPara.Heights[0] }; PreproPara.CornersPolygon[5] = { 1582.488, 1127.767, PreproPara.Heights[0] }; PreproPara.CornersPolygon[6] = { 817.512, 1141.592, PreproPara.Heights[0] }; PreproPara.CornersPolygon[7] = { 333.641, 1514.864, PreproPara.Heights[0] }; } // Compute the preprocessing Error = OutdoorPlugIn_ComputePrePro( &PreproPara, API_DATA_FOLDER "/outdoor/City_IRT_API", // no extension here nullptr, nullptr, &Callback, nullptr ); if (PreproPara.Heights != NULL) free(PreproPara.Heights); PreproPara.Heights = nullptr; PreproPara.NrHeights = 0; if (PreproPara.CornersPolygon != nullptr) free(PreproPara.CornersPolygon); return Error; } int _STD_CALL CallbackMessage(const char * Text) { if (Text == nullptr) return 0; std::cout << "\n" << Text; return(0); } int _STD_CALL CallbackError(const char * Text, int Error) { if (Text == nullptr) return 0; std::cout << "\n"; #ifdef __LINUX std::cout << "\033[31m" << "Error (" << Error << "): "; // highlight error in red color #else HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, FOREGROUND_RED); std::cout << "Error (" << Error << "): "; #endif // __LINUX std::cout << Text; #ifdef __LINUX std::cout << "\033[0m"; // highlight error in red color #else SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN); #endif // __LINUX return 0; } int _STD_CALL CallbackProgress(int value, const char* text) { char Line[200]; sprintf(Line, "\n%d%% %s", value, text); std::cout << Line; return(0); }