// Calibrs.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

#include "Calibrs.h"
#include "AppMain.h"
#include "obdelnik.h"
#include "siestar.h"
#include "frekvenc.h"
/*

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using namespace std;

// The one and only application object - for MFC console application without winmain one cwinapp object must exist
// but commenting this theApp has no effect
//MR??? 
   CWinApp theApp;
*/

//MR funkce pro testování algoritmů
// nejjednodušší aplikace - kamera bez filtrů, čistý vzor - nový způsob práce
// vzorem je rectangle
int Test1b(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application rectangle --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing
		// barvy vzoru
		CStructures::ARGBPixel Color3 = {255,255,255,255};//ARGB
		CStructures::ARGBPixel Env3 = {255,50,50,50};  //ARGB 	

		// CStructures::fPoint center; 		center.X = 10; 		center.Y = 20;//stred kruhu
        //appMain.SetCamera(800,600,6);

//MR kamera je předělána tak aby měla všechny parametry a filtry zatím původní 
//MR kamera se nadefinuje a vloží se hotová (dále není možné ji - zatím - měnit)		
		CCamera cam(800,600,10e-3);
		cam.SetPixel(10e-6,10e-6);
		cam.SetCenter(400,300);
		cam.SetProjectionCenter(0,0,0.0);
		cam.SetRotation(0,0,0);

		appMain.SetCamera(cam);//MR proč kamera je zadána jako objekt a zbylé jsou dynamické?

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, false, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using

//MR vrstva vzoru se vytvoří a nadefinuje zde, do aplikace se vloží hotová, vytvoří se a zaregistruje jedním povelem	
		CRectang *rect= new CRectang("obdelnik 1"); //defaultní konstruktor - proměnné pouze "nuluje"
		// obecná nastavení roviny a opakování textury
		rect->SetDistance(1);		// vzdálenost vzoru od kamery
		rect->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		rect->SetColor(Color3,Env3); // barva objektu a pozadí

		
		// ještě musíme nastavit středy, posuny a rotace, 
		CStructures::Angle angle; angle.alfa = -0; angle.beta = 0; angle.gama = 0;
		rect->SetAngle(angle);
		CStructures::fPoint center; center.X =0.0; center.Y=0.0;
		rect->SetLayerCenter(center);

		// nastavení rozměrů vlastního vzoru
		rect->SetRect(0.10,0.05);
		
 		//MR appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		appMain.CreateLayer(rect); // zařazení do registru vzorů
		appMain.RegisterLayer(0,0); // zařazení vzoru jako vrstvy pro generování

		appMain.RunSimulationNew(false);
		//MR appMain.RunSimulation(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application rectangle  --\n");
	
	return nRetCode;
}

//MR funkce pro testování algoritmů
// nejjednodušší aplikace - kamera bez filtrů, čistý vzor - nový způsob práce
// vzorem je circle
int Test1c(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application circle --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing
		// barvy vzoru
		CStructures::ARGBPixel Color3 = {255,255,0,55};//ARGB
		CStructures::ARGBPixel Env3 = {255,50,50,50};  //ARGB 	

		//MR kamera je předělána tak aby měla všechny parametry a filtry zatím původní 
//MR kamera se nadefinuje a vloží se hotová (dále není možné ji - zatím - měnit)		
		CCamera cam(800,600,10e-3);
		cam.SetPixel(10e-6,10e-6);
		cam.SetCenter(400,300);
		cam.SetProjectionCenter(0,0,0.0);
		cam.SetRotation(0,0,0);

 		appMain.SetCamera(cam);//MR proč kamera je zadána jako objekt a zbylé jsou dynamické?

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, true, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using

//MR vrstva vzoru se vytvoří a nadefinuje zde, do aplikace se vloží hotová, vytvoří se a zaregistruje jedním povelem	
		CCircle *circ= new CCircle("kruh 1"); //defaultní konstruktor - proměnné pouze "nuluje"
		// obecná nastavení roviny a opakování textury
		circ->SetDistance(1);		// vzdálenost vzoru od kamery
		circ->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		circ->SetColor(Color3,Env3); // barva objektu a pozadí

		
		// ještě musíme nastavit středy, posuny a rotace, 
		CStructures::Angle angle; angle.alfa = -0; angle.beta = 0; angle.gama = 0;
		circ->SetAngle(angle);
		CStructures::fPoint center; center.X =0.0; center.Y=0.0;
		circ->SetLayerCenter(center);

		// nastavení rozměrů vlastního vzoru
		circ->SetRadius(0.04);
		
 		//MR appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		appMain.CreateLayer(circ); // zařazení do registru vzorů
		appMain.RegisterLayer(0,0); // zařazení vzoru jako vrstvy pro generování

		appMain.RunSimulationNew(false);
		//MR appMain.RunSimulation(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application rectangle  --\n");
	
	return nRetCode;
}

//MR funkce pro testování algoritmů
// nejjednodušší aplikace - kamera bez filtrů, čistý vzor - nový způsob práce
// vzorem je circle
int Test1s(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application circle --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing
		// barvy vzoru
		CStructures::ARGBPixel Color3 = {255,255,0,55};//ARGB
		CStructures::ARGBPixel Env3 = {255,255,255,255};  //ARGB 	

		//MR kamera je předělána tak aby měla všechny parametry a filtry zatím původní 
//MR kamera se nadefinuje a vloží se hotová (dále není možné ji - zatím - měnit)		
		CCamera cam(800,600,10e-3);
		cam.SetPixel(10e-6,10e-6);
		cam.SetCenter(400,300);
		cam.SetProjectionCenter(0,0,0.0);
		cam.SetRotation(0,0,0);

 		appMain.SetCamera(cam);//MR proč kamera je zadána jako objekt a zbylé jsou dynamické?

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, true, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using

//MR vrstva vzoru se vytvoří a nadefinuje zde, do aplikace se vloží hotová, vytvoří se a zaregistruje jedním povelem	
		CSieStar *circ= new CSieStar("hvezda 1"); //defaultní konstruktor - proměnné pouze "nuluje"
		// obecná nastavení roviny a opakování textury
		circ->SetDistance(1);		// vzdálenost vzoru od kamery
		circ->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		circ->SetColor(Color3,Env3); // barva objektu a pozadí

		
		// ještě musíme nastavit středy, posuny a rotace, 
		CStructures::Angle angle; angle.alfa = -0; angle.beta = 0; angle.gama = 0;
		circ->SetAngle(angle);
		CStructures::fPoint center; center.X =0.0; center.Y=0.0;
		circ->SetLayerCenter(center);

		// nastavení rozměrů vlastního vzoru
		circ->SetPairs(64);
		
 		//MR appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		appMain.CreateLayer(circ); // zařazení do registru vzorů
		appMain.RegisterLayer(0,0); // zařazení vzoru jako vrstvy pro generování

		appMain.RunSimulationNew(false);
		//MR appMain.RunSimulation(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application rectangle  --\n");
	
	return nRetCode;
}
int Test1f(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application circle --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing
		// barvy vzoru
		CStructures::ARGBPixel Color3 = {255,255,0,0};//ARGB
		CStructures::ARGBPixel Env3 = {255,255,255,255};  //ARGB 	

		//MR kamera je předělána tak aby měla všechny parametry a filtry zatím původní 
//MR kamera se nadefinuje a vloží se hotová (dále není možné ji - zatím - měnit)		
		CCamera cam(1366,768,10e-3);
		cam.SetPixel(10e-6,10e-6);
		cam.SetCenter(400,300);
		cam.SetProjectionCenter(0,0,0.0);
		cam.SetRotation(0,0,0);

 		appMain.SetCamera(cam);//MR proč kamera je zadána jako objekt a zbylé jsou dynamické?

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, true, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using

//MR vrstva vzoru se vytvoří a nadefinuje zde, do aplikace se vloží hotová, vytvoří se a zaregistruje jedním povelem	
		CFrekvenc *circ= new CFrekvenc("Frekv 1"); //defaultní konstruktor - proměnné pouze "nuluje"
		// obecná nastavení roviny a opakování textury
		circ->SetDistance(1.5);		// vzdálenost vzoru od kamery
		circ->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		circ->SetColor(Color3,Env3); // barva objektu a pozadí

		
		// ještě musíme nastavit středy, posuny a rotace, 
		CStructures::Angle angle; angle.alfa = -0; angle.beta = 0; angle.gama = 0;
		circ->SetAngle(angle);
		CStructures::fPoint center; center.X =0.0; center.Y=0.0;
		circ->SetLayerCenter(center);

		// nastavení rozměrů vlastního vzoru
		circ->SetPairs(8);
		
 		//MR appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		appMain.CreateLayer(circ); // zařazení do registru vzorů
		appMain.RegisterLayer(0,0); // zařazení vzoru jako vrstvy pro generování

		appMain.RunSimulationNew(false);
		//MR appMain.RunSimulation(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application rectangle  --\n");
	
	return nRetCode;
}


//MR funkce pro testování algoritmů
// nejjednodušší aplikace - kamera bez filtrů, čistý vzor
int Test1(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing

		appMain.SetCamera(800,600,545);
		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, false, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using
				
		CStructures::ARGBPixel Color3 = {255,255,255,255};
		CStructures::ARGBPixel Env3 = {255,0,0,0};		
		CStructures::fPoint center; 		center.X = 10; 		center.Y = 20;//stred kruhu
		//MR appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		appMain.RegisterLayer(0,0);
		//MR appMain.RunSimulation(false);
		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application --\n");
	
	return nRetCode;
}


//MR funkce pro testování algoritmů
// aplikace se dvěma vrstvama - filtrů, a vzorů
int Test2(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test2 function for testing application with two patterns --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing

		//MR kamera je předělána tak aby měla všechny parametry a filtry zatím původní 
        //MR kamera se nadefinuje a vloží se hotová (dále není možné ji - zatím - měnit)		
		CCamera cam(800,600,10e-3);
		cam.SetPixel(10e-6,10e-6);
		cam.SetCenter(400,300);
		cam.SetProjectionCenter(0,0,0.0);
		cam.SetRotation(0,0,0);

		appMain.SetCamera(cam);//MR proč kamera je zadána jako objekt a zbylé jsou dynamické?

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, false, true); //create filter parameters
		appMain.RegisterFilter(0,-1); // register filter for using
				
		//MR appMain.CreateFilter(IDF_BARREL, "Soudek.jpg", 0.01, 0, 0); //MR zapojit až při ladění filtrů
		//MR jak se pozná který filtr je který? - podle pořadí vytvoření? první je nula?
		//MR MappMain.RegisterFilter(1,-1);
		CStructures::ARGBPixel Color3 = {255,255,255,255}; 
		CStructures::ARGBPixel Env3 = {0,0,0,0}; //MR ARGB - první značí "propustnost" - nula=propustí vše

        CRectang *rect1= new CRectang("obdelnik 1"); //defaultní konstruktor - proměnné pouze "nuluje"
		// obecná nastavení roviny a opakování textury
		rect1->SetDistance(1);		// vzdálenost vzoru od kamery
		rect1->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		rect1->SetColor(Color3,Env3); // barva objektu a pozadí
				
		// ještě musíme nastavit středy, posuny a rotace, 
		CStructures::Angle angle; angle.alfa = -0; angle.beta = 0; angle.gama = 0;
		rect1->SetAngle(angle);
		CStructures::fPoint center; center.X =0.0; center.Y=0.0;
		rect1->SetLayerCenter(center);
		// nastavení rozměrů vlastního vzoru
		rect1->SetRect(0.10,0.05);
		 		
		appMain.CreateLayer(rect1); // zařazení do registru vzorů
		appMain.RegisterLayer(0,0); // zařazení vzoru jako vrstvy pro generování - první vytvořený vzor je první od kamery
		//MR druhá vrstva
		CRectang *rect2= new CRectang("obdelnik 2"); //defaultní konstruktor - proměnné pouze "nuluje"
		CStructures::ARGBPixel Color4 = {255,0,0,255};
		CStructures::ARGBPixel Env4 = {255,0,255,0};

		// obecná nastavení roviny a opakování textury
		rect2->SetDistance(2);		// vzdálenost vzoru od kamery
		rect2->SetXYDistance(0.20,0.10); // krok vzoru v ploše
		rect2->SetColor(Color4,Env4); // barva objektu a pozadí
				
		// ještě musíme nastavit středy, posuny a rotace, 		
		//MR angle.alfa = 10;
		angle.beta = 45;

		rect2->SetAngle(angle);		
		rect2->SetLayerCenter(center);
		// nastavení rozměrů vlastního vzoru
		rect2->SetRect(0.15,0.05);
		 		
		appMain.CreateLayer(rect2); // zařazení do registru vzorů
		appMain.RegisterLayer(1,1); // zařazení vzoru jako vrstvy pro generování - druhý vytvořený vzor je druhý od kamery
		
		appMain.RunSimulationNew(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application --\n");
	
	return nRetCode;
}


//MR funkce pro testování algoritmů
// aplikace se třema vrstvama - filtrů, a vzorů
int Test3(void)
{
	int nRetCode = 0;
	
    TRACE("-- Entering Test1 function for testing simple (minimal) application --\n");
	
	// initialize MFC and print and error on failure - foc console application without WinMain 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	    CAppMain appMain; // new object for data processing

		appMain.SetCamera(800,600,545);

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, 0, 1); //create filter parameters
		appMain.CreateFilter(IDF_BARREL, "Soudek.jpg", 0.01, 0, 0);
		appMain.CreateFilter(IDF_LIGHTNESS, "Vinetace.jpg", 0.96, 0, 0);

		appMain.RegisterFilter(0,-1); // register filter for using
		appMain.RegisterFilter(1,-1);
		appMain.RegisterFilter(2,-1);

		CStructures::ARGBPixel Color1 = {255,0,0,255}; //ARGB
		CStructures::ARGBPixel Env1 = {127,255,0,0};
		CStructures::ARGBPixel Color3 = {255,255,255,255};
		CStructures::ARGBPixel Env3 = {255,0,0,0};		

		CStructures::fPoint center; 		center.X = 10; 		center.Y = 20;//stred kruhu
		CStructures::iPoint begin2, end2;     	begin2.X = -30;		begin2.Y = -10;		end2.X = 45;		end2.Y = 78;
		
		//MR		appMain.CreateLayer("Linie", 645, begin2, end2, 10, Color1, Env1);
		//MR		appMain.CreateLayer("Kolecko", 945, center, 60, Color1, Env1);
		//MR		appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
		
	
		appMain.RegisterLayer(0,0);
		appMain.RegisterLayer(1,1);
		appMain.RegisterLayer(2,2);

		//MR appMain.RunSimulation(false);

		nRetCode = 0;
	}

	TRACE("-- Leaving  Test1 function for testing simple (minimal) application --\n");
	
	return nRetCode;
}


//MR    =================
/*
#define XPREVIEW 800	///< Rozlišení pro náhled předlohy
#define YPREVIEW 600	///< Rozlišení pro náhled předlohy
*/
 
void Test0(void)
{/*
  IplImage* img = 0; 
  int height,width,step,channels;
  uchar *data;
  int i,j,k;

    // load an image  
  img=cvLoadImage("splash.bmp",-1);
  if(!img){
    printf("Could not load image file: splash.bmp\n");
    exit(0);
  }

  // get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (uchar *)img->imageData;
  printf("Processing a %dx%d image with %d channels\n",height,width,channels); 

  // create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
  cvMoveWindow("mainWin", 100, 100);

  // invert the image
  for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
    data[i*step+j*channels+k]=255-data[i*step+j*channels+k];

  // show the image
  cvShowImage("mainWin", img );

  // wait for a key
  cvWaitKey(0);

  // release the image
  cvReleaseImage(&img );
  return ;
  */
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;	
//	Test1s();
	Test1f();
//	Test0();
//	nRetCode += Test1b() ;   //MR řádek pro testování algoritmů - odladěno rectangle
//	nRetCode += Test1c() ;   //MR řádek pro testování algoritmů - odladeno circle
//	nRetCode += Test1() ;   //MR řádek pro testování algoritmů
//	nRetCode += Test2() ;   //MR řádek pro testování algoritmů - odladěno rectangle
//  nRetCode += Test3() ;   //MR řádek pro testování algoritmů
	//MR toto by mělo prezentovat "nasbírané" memory leaky díky define na konci stdafx.h
_CrtDumpMemoryLeaks ();
	/*
	
	
	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode = 1;
	}
	else
	{	
	
	
		/* ---- ZACATEK TESOVACIHO KODU --- */
	/*
		CAppMain appMain;

		//barvy
		CStructures::ARGBPixel Color1 = {255,0,0,255}; //ARGB
		CStructures::ARGBPixel Env1 = {127,255,0,0};
		CStructures::ARGBPixel Color2 = {255,0,255,0};
		CStructures::ARGBPixel Env2 = {255,0,0,0};
		CStructures::ARGBPixel Color3 = {255,255,255,255};
		CStructures::ARGBPixel Env3 = {255,0,0,0};

		//stred kruhu
		CStructures::CenterPoint center;
		center.X = 10;
		center.Y = 20;

		//Linka
		CStructures::Point begin1, end1, begin2, end2;
		begin1.X = 0;
		begin1.Y = -20;
		end1.X = 0;
		end1.Y = 20;

		begin2.X = -30;
		begin2.Y = -10;
		end2.X = 45;
		end2.Y = 78;

		string ch;
		bool useFile;
		string fileName;

		do
		{
			string projName = "";
			cout << "Project name to open: ";
			getline(cin, projName);
			
			int ret;
			cout << "Loading project...\n";
			ret = appMain.Load(projName.c_str());
			if(ret == 0)
			{//Project Open Succeeded.
				cout << "Done.\n";

				appMain.SetPath("C:\\Projects\\");
				appMain.SetProjName("First");

				cout << "Use (F)ile or (P)attern?: ";
				getline(cin, ch);
				useFile = (ch == "F" || ch == "f") ? true : false;

				if(useFile)
				{
					cout << "File to load: ";
					getline(cin, fileName);
				}

				cout << "Preview pattern? Y/N: ";
				getline(cin, ch);
				if(ch == "Y" || ch == "y")
				{
					ret = appMain.LayerPreview(XPREVIEW, YPREVIEW, useFile, fileName.c_str());
					if(ret == 1)
					{
						cout << "No layer registered\n";
						continue;
					}
					if(ret == 2)
					{
						cout <<"Faild to open file\n";
						continue;
					}
				}
				
				/*cout << "Save pattern? Y/N: ";
		/*		getline(cin, ch);
				if(ch == "Y" || ch == "y")*/
			/*	

				cout << "Run simulation? Y/N: ";
				getline(cin, ch);
				if(ch == "Y" || ch == "y")
				{
					ret = appMain.RunSimulation(useFile, fileName.c_str());
					if(ret == 1)
					{
						cout << "No filter registered\n";
						continue;
					}
						
					if(ret == 2)
					{
						cout <<"Faild to open file\n";
						continue;
					}
						
				}
					
				//appMain.Save("project.xml");
			}
			else
			{
				switch(ret)
				{
					case 1:
						cout << "Fail to open file\n";
					break;
					case 2:
						cout << "XML format error\n";
					break;
				}

			} //end if

			cout << "Continue? Y/N: ";
			getline(cin,ch);	
		}
		while(ch != "N" && ch != "n");
		return 0;

		

			//appMain.SetCamera(800,600,545);

			//appMain.CreateLayer("Linie", 845, begin1, end1, 40, Color3, Env3);
			//appMain.CreateLayer("Kruh", 845, center, 80, Color3, Env3);
			//appMain.CreateLayer("Linie", 645, begin2, end2, 10, Color1, Env1);
			//appMain.CreateLayer("Kolecko", 945, center, 60, Color1, Env1);
			//appMain.CreateLayer("Krouzky", 700, center, 100, Color2, Env2);


			//appMain.RegisterLayer();
			//appMain.RegisterLayer(0,0);
			//appMain.RegisterLayer(1,1);
			//appMain.RegisterLayer(2,2);

			//appMain.RemoveRegistredLayer(1);

			//appMain.RemoveRegistredLayer();
			//appMain.RegisterLayer(2,0);
			//appMain.RegisterLayer(1,1);
			
			//appMain.TranslateLayer(60,0,0);
			//appMain.RotateLayer(70,0,0,1);
			//appMain.LayerXRepetition(140,-1,0);
			//appMain.LayerYRepetition(160,-1,0);
	
		
		

		appMain.CreateFilter(IDF_CAMERA, "Kamera.jpg", 0, 0, 1);
		appMain.CreateFilter(IDF_BARREL, "Soudek.jpg", 0.001, 0, 0);
		appMain.CreateFilter(IDF_BARREL, "Barrel.jpg", 0.0057, 0, 0);
		appMain.CreateFilter(IDF_LIGHTNESS, "Vinetace.jpg", 0.96, 0, 0);
		appMain.CreateFilter(IDF_NEW, "",0,0,0);

		appMain.RegisterFilter(0,-1);
		appMain.RegisterFilter(1,-1);
		appMain.RegisterFilter(3,-1);

		appMain.RegisterLayer(0,0);
		appMain.RegisterLayer(1,1);
		appMain.RegisterLayer(2,-1);
		appMain.RegisterLayer(3,0);

		/*appMain.LayerXRepetition(200, 3,0);
		appMain.LayerYRepetition(100,-1,0);*/
		/*appMain.RotateLayer(45,15,0);
		appMain.TranslateLayer(30,30,0);
		appMain.RotateLayer(20,0,1);*/


		

		//appMain.RunSimulation();
/*

		appMain.Save();
		appMain.Save("C:\\Projects\\myProj.xml");

  		return 0;

		/* ---- KONEC TESOVACIHO KODU --- */

		
	/*	

		//Pro predlohu
		CCircle* pCircle;
		CCircle* pCircle2;
		CCircle* pCircle3;

		CLine* pLine;

		CCamera* pCamera;
		CFilterBase* pFB;

		CPatternManager mngPatt;
		CFilterManager mngFilter;

		


		pLine = new CLine(845,begin1,end1,30,Color3, Env3, "Linka");

		//vytvoreni kruhu
		pCircle = new CCircle(845, center, 50, Color1, Env1);
		//pCircle = new CCircle(745, center, 200, Color1, Env1);
		pCircle2 = new CCircle(845, center, 50, Color2, Env2);
		//pCircle2 = new CCircle(945, center, 200, Color2, Env1);
		pCircle3 = new CCircle(745, center, 50, Color3, Env3);
		pCircle ->SetXRepetition(150, 2);
		pCircle ->SetYRepetition(150, 4);
		//pCircle2 ->SetXRepetition(400, 20);
		//pCircle2 ->SetYRepetition(400, 20);
		//pCircle3 ->SetXRepetition(100, 20);
		//pCircle3 ->SetYRepetition(100, 20);

		pCircle->RotXY(0,00);
		//pCircle->ResetPosition();
		pCircle2->RotXY(45,0);
		
		//pridani do seznamu
		mngPatt.AddLayer(pCircle);
		mngPatt.AddLayer(pCircle2);
		//mngPatt.AddPattern(pCircle3);


		//========== CAMERA =============//
		pCamera = new CCamera(800,600,0);

		//========= FILTRY ============//
		pFB = new CFilterCamera(0,0,"Camera");
		mngFilter.AddFilter(pFB);
		mngFilter.RegisterFilter(pFB,6);

		pFB = new CFilterLightness(0,0,"Light",0.95);
		mngFilter.AddFilter(pFB);
		mngFilter.RegisterFilter(pFB,6);

		pFB = new CFilterBarrel(0,0,"Barrel",0.001);
		mngFilter.AddFilter(pFB);
		mngFilter.RegisterFilter(pFB,6);


		//======= PRIPRAVA FILTRU =========//
		//mngFilter.PrepareFilters(pCamera);

		
		//vykresleni vzoru
		mngPatt.SetResolution(1200, 900);
		//mngPatt.SetOversample(3);
		//mngPatt.BuildPatternOld(800,600);
		//mngPatt.BuildMasterImage();

		mngFilter.LoadPattern(mngPatt.GetPattern());
		mngFilter.StartProcess();

		
		delete pCircle;
		delete pCircle2;


	}
*/
	return nRetCode;
	
}
