/**
* @file SimpleVisualisationWindow.cpp
* @author   Ulrich Kemloh <kemlohulrich@gmail.com>
* @version 0.1
* Copyright (C) <2009-2010>
*
* @section LICENSE
* This file is part of OpenPedSim.
*
* OpenPedSim is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* OpenPedSim is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenPedSim. If not, see <http://www.gnu.org/licenses/>.
*
* @section DESCRIPTION
*
* @brief Testing class
*
*
*  Created on: 23.07.2009
*
*/


#include <vtkActor.h>
#include <vtkLight.h>
#include <vtkAssembly.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>

#include "SimpleVisualisationWindow.h"
#include "./geometry/LinePlotter.h"
#include "./geometry/PointPlotter.h"

SimpleVisualisationWindow::SimpleVisualisationWindow() {
	assembly =NULL;
	//actor=NULL;

}

SimpleVisualisationWindow::~SimpleVisualisationWindow() {

}


void SimpleVisualisationWindow::setActor(vtkAssembly* actor){
	assembly=actor;
}


void SimpleVisualisationWindow::start(){


	// Create the renderer with black bg
	vtkRenderer* renderer = vtkRenderer::New();
	renderer->SetBackground(0,0,0);

//	//add the line actor
//	LinePlotter * ln = new LinePlotter();
//	ln->PlotPoint(324,34,34);
//	ln->AddPoint(1,1,1);
//	ln->AddPoint(11,11,171);
//	ln->AddPoint(34,334,334);
//	ln->AddPoint(81,821,81);
//	ln->AddPoint(134,14,134);

//	ln->PlotLine(1,1,1,324,34,34,1);
//	ln->PlotLine(11,11,171,34,334,334,1);
//	ln->PlotLine(81,821,81,14,134,134,1);
//	renderer->AddActor(ln->getActor());

	//
//	PointPlotter * pt = new PointPlotter();
//	pt->PlotPoint(324,34,34);
//	pt->PlotPoint(1,1,1);
//	pt->PlotPoint(11,11,171);
//	pt->PlotPoint(34,334,334);
//	pt->PlotPoint(81,821,81);
//	pt->PlotPoint(134,14,134);
//	renderer->AddActor(pt->getActor());

	//add the different actors
	renderer->AddActor(assembly);
	//renderer->AddActor(actor);


	// Set up the lighting.
	vtkLight *light = vtkLight::New();
	light->SetFocalPoint(1.875,0.6125,0);
	light->SetPosition(3000,3000,10);
	light->SetIntensity(1);
	light->SetLightTypeToCameraLight();
	//	renderer->AddLight(light);
//	light->Delete();

	// Create a render window
	vtkRenderWindow *renderWindow = vtkRenderWindow::New();
	renderWindow->AddRenderer( renderer );
	renderWindow->SetSize(600, 800);

	//CAUTION: this is necessary for windows to update the window name after the first render
	// but this will freeze your system on linux, strange....
#ifdef WIN32
	renderWindow->Render();
#endif
	renderWindow->SetWindowName("Visualizing a Geometry");


	// Create an interactor
	vtkRenderWindowInteractor *renderWinInteractor = vtkRenderWindowInteractor::New();
	renderWinInteractor = vtkRenderWindowInteractor::New();
	renderWindow->SetInteractor( renderWinInteractor );
	//set full screen and catch esc to restore defaults one
	//renderWindow->SetFullScreen(1);

	// Create my interactor style
	vtkInteractorStyleTrackballCamera* style = vtkInteractorStyleTrackballCamera::New();
	renderWinInteractor->SetInteractorStyle( style );
	style->Delete();

	// Initialize and enter interactive mode
	renderWinInteractor->Initialize();
	renderWinInteractor->Start();

	//cleaning up
	renderWindow->Delete();
	renderWinInteractor->Delete();
	if(assembly)
		assembly->Delete();
//	if(actor)
//		actor->Delete();

}