// This source code is property of the Computer Graphics and Visualization 
// chair of the TU Dresden. Do not distribute! 
// Copyright (C) CGV TU Dresden - All Rights Reserved

#include "GridTraverser.h"
#include "GridUtils.h"


GridTraverser::GridTraverser()
{ }

GridTraverser::GridTraverser(const Eigen::Vector3f& o, const Eigen::Vector3f&d, const Eigen::Vector3f cell_extents)
	: orig(o), dir(d), cellExtents(cell_extents)
{
	dir.normalize();
	Init();
}

Eigen::Vector3f& GridTraverser::Origin()
{
	return orig;
}
const Eigen::Vector3f& GridTraverser::Origin() const
{
	return orig;
}

Eigen::Vector3f& GridTraverser::Direction()
{
	return dir;
}

const Eigen::Vector3f& GridTraverser::Direction() const
{
	return dir;
}

void GridTraverser::SetCellExtents(const Eigen::Vector3f& cellExtent)
{
	this->cellExtents = cellExtent;
	Init();
}

void GridTraverser::Init()
{
	current = PositionToCellIndex(orig, cellExtents);
	/* Task 3.2.2 */
	//you can add some precalculation code here
}

void GridTraverser::operator++(int)
{
	/* Task 3.2.2 */
	//traverse one step along the ray
	//update the cell index stored in attribute "current"
}

Eigen::Vector3i GridTraverser::operator*()
{
	return current;
}

	
