/*
-----------------------------------------------------------------------------
This source file is part of OpenSpace3D
For the latest info, see http://www.openspace3d.com

Copyright (c) 2010 I-maginer

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program 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 Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA, or go to
http://www.gnu.org/copyleft/lesser.txt

You may alternatively use this source under the terms of a specific version of
the OpenSpace3D Unrestricted License provided you have obtained such a license from
I-maginer.
-----------------------------------------------------------------------------
*/

#include "Prerequisites.h"
#include "ArMarker.h"
#include "ArManager.h"

ArMarker::ArMarker(int id, float markerSize)
{
	m_id = id;
	m_visible = false;
	m_size = markerSize;
}

ArMarker::~ArMarker()
{

}

cv::Mat ArMarker::GetMarkerBitmap(int size)
{
	return aruco::Marker::createMarkerImage(m_id, size);
}

void ArMarker::SetPosition(Vector3 pos)
{
	m_pos = pos;
}

void ArMarker::SetPixelPosition(Vector3 pos)
{
	m_pixel_pos = pos;
}

void ArMarker::SetOrientation(Quaternion orientation)
{
	m_orientation = orientation;
}

Vector3 ArMarker::GetPosition()
{
	return m_pos;
}

Vector3 ArMarker::GetPixelPosition()
{
  return m_pixel_pos;
}
Quaternion ArMarker::GetOrientation()
{
	return m_orientation;
}

int ArMarker::GetID()
{
	return m_id;
}

void ArMarker::SetVisible(bool visible)
{
	m_visible = visible;
}

bool ArMarker::IsVisible()
{
	return m_visible;
}

void ArMarker::SetSize(float size)
{
  m_size = size;
}

float ArMarker::GetSize()
{
  return m_size;
}

void ArMarker::Update(cv::Mat image)
{
/*	
	// List of dectected images
	vector<aruco::Marker> markersDetected;

	aruco::CameraParameters CamParam;
	//CamParam.resize(image.size());

	// Detect all markers seen on image
	detector->detect(image, markersDetected, CamParam, markerSize);

	//temp id detected
	int detectedID;
	MarkerList::iterator imarker;

	for(unsigned int i=0;i<markersDetected.size();i++)
	{
		detectedID = markersDetected[i].id;
		for (imarker=markerList.begin(); imarker!=markerList.end(); ++imarker)
		{
			if((*imarker)->GetID() == detectedID)
			{
				markersDetected[i].draw(image, cv::Scalar(255, 0, 0), 2, true);
				//markersDetected[i].calculateExtrinsics(markerSize,
				//(*imarker)->SetPosition();
				//(*imarker)->SetOrientation();
			}
		}
	}
*/
}