Database Preprocessing for Indoor IRT

Detailed Description

This is an example of how to use the WinProp API to preprocess an indoor database for IRT. The full example is distributed with the installation.
#include <stdio.h>
#include <string>
#include <iostream>

#include "IRT_preprocess.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_PrePro      PreproPara;
	WinProp_Callback    Callback;

    /* ---------------------------- Initialisations -------------------------- */
    WinProp_Structure_Init_Callback(&Callback);
	WinProp_Structure_Init_PrePro(&PreproPara);
	Callback.Percentage = CallbackProgress;
	Callback.Message = CallbackMessage;
	Callback.Error = CallbackError;

	/* ----------------- Definition of parameters for preprocessing ---------- */
	PreproPara.NrHeights = 1;
	PreproPara.Heights = (double*)malloc(sizeof(double) * PreproPara.NrHeights);
	PreproPara.Heights[0] = 1.5;
	PreproPara.Resolution = 2.0;
	PreproPara.AdaptiveResolution = 1;
	PreproPara.AdaptiveResolutionFactor = 2;
	PreproPara.MultipleInteractions = 0;
	PreproPara.ExcludeDiffractions = 1;
	PreproPara.OnlyPixelsInsideBuilding = 1;
	PreproPara.TileLength = 10.0;
	PreproPara.SegmentLength = 10.0;
	PreproPara.TimeVariantMode = 1;
	PreproPara.TimeVariantStart = 0.0;
	PreproPara.TimeVariantStop = 2.0;
	PreproPara.TimeVariantInterval = 0.5;
	PreproPara.TimeVariantNrSteps = 2;
	PreproPara.TimeVariantSteps = (double*)malloc(sizeof(double) * PreproPara.TimeVariantNrSteps);
	PreproPara.TimeVariantSteps[0] = 1.0;
	PreproPara.TimeVariantSteps[1] = 2.0;

	Error = WinProp_PreProcessIndoor(
		// specify full path with extension
		API_DATA_FOLDER  "/indoor/IndoorVectordatabase.ida",
		// no extension here
		API_DATA_FOLDER "/indoor/IRT_Preprocessed_database",
		&PreproPara,
		&Callback
	);


	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);
}