/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2012 Raytrix GmbH. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once

#include "RxCore.h"
#include "RxString.h"
#include "RxMainLens.h"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// namespace: Rx
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rx
{
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>
	/// 	Raytrix Calibration Data description class.
	/// </summary>
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	class RXCORE_API CRxCalibMetaData
	{
	public:

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// 	Initializes a new instance of the CRxCalibData class.
		/// </summary>
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		CRxCalibMetaData();

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// 	Finalizes an instance of the CRxCalibData class.
		/// </summary>
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		virtual ~CRxCalibMetaData();

		/// <summary>	The unique identifier. </summary>
		CRxString UniqueID;
		/// <summary>	The camera serial. </summary>
		CRxString CameraSerial;
		/// <summary>	The camera type. </summary>
		CRxString CameraType;
		/// <summary>	The camera hardware id comprised of the internal camera type and the internal camera serial. </summary>
		CRxString CameraHardwareId;
		/// <summary>	The caption. </summary>
		CRxString Caption;
		/// <summary>	The description. </summary>
		CRxString Description;
		/// <summary>	The main lens information. </summary>
		CRxMainLens MainLens;

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// 	For electronically controllable lenses, this is the data value which reflects the focus setting. This value may not be
		/// 	the focus distance in millimeters.
		/// </summary>
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		double MainLensFocusData;

		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// 	For electronically controllable lenses, this is the data value which reflects the aperture setting. This value may not
		/// 	be the f-number.
		/// </summary>
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		double MainLensApertureData;

		/// <summary>	true if this CRxCalibData is the default calibration. </summary>
		bool IsDefaultCalib;

		/// <summary>	True if this CRxCalibMetaData describes a master calibration. </summary>
		bool IsMasterCalib;
	};
}

#pragma make_public(Rx::CRxCalibMetaData)
