// obdelnik.h: interface for the CRectang class.
// obdelnik je "rovnoběžný" s osama, symetrický
//
//////////////////////////////////////////////////////////////////////
/** \file Obdelnik.h
	\brief Rozhraní pro třídu CRectang
*/

#if !defined(CAL_RECTANG_H)
#define CAL_RECTANG_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "PrimitiveBase.h"

/** Reprezentuje vlastnosti geometrického objektu typu \b obdelnik
*/
class CRectang : public CPrimitiveBase  
{
DECLARE_DYNAMIC(CRectang)

private:
//MR	int m_type;		///< ID geometrickéo objektu  - pokud bude nutné, musí se vymyslet "automatické" nebo jednoznačné vytvoření	
//MR???	bool m_Overflow;						///< Příznak zda požadovaný pixel je za počtem opakování a je tak okolím
	//MR proměnné specifické pro danou třídu
	
	double rect_width;	///< rozměr x obdélníka
	double rect_height;   ///< rozměr y obdélníka
	

	
	/** Vrátí vzdálenost bodu od středu kruhu
		@param[in] point - souřadnice bodu
		@return vzdálenost bodu od středu
	*/
//MR	double GetDistanceToCenter(CStructures::iPoint point);

	/** Vrátí pozici pixelu v základním umístění objektu.
		Přepočítá souřadnici aktuálního pixelu na odpovídající pixel objektu v základním umístění.
		Každý objekt je popsán analytickým popisem a umístěn na rovinu vrstvy. Poté se objekt může 
		v rovině libovolně zopakovat.

		@param[in] VirtualPosition typu CStructures::Point - souřadnice bodu v rovině vrstvy
		@return bod typu CStructures::Point v základním umístění geometrického objektu 
	*/
//MR	CStructures::iPoint GetRealPoint(CStructures::iPoint VirtualPosition); //Vrati pozici pixelu v zakladnim vzoru

public:
	CRectang(char *txt=NULL); ///< Defaultni konstruktor

	virtual ~CRectang(); ///< Destruktor

	void SetRect (double dx, double dy) {rect_width = dx; rect_height = dy;}

	// vrátí jas v daném místě plochy
		virtual CStructures::ARGBPixel GetPixelValue(double Position[3]) ;



	//------- Puvodni param konstruktor --------------------
	//CCircle(int distance, CStructures::CenterPoint circleCenter, int radius, float ObjectColor, float ObjectAlpha, float EnvColor, float EnvAlpha);
	//------------------------------------------------------

	/** Parametrický konstruktor.
		Vytvoří geometrický objekt \b kruh se zadanými parametry.
		@param circleCenter - umístění středu kruhu na rovině vzoru
		@param radius - poloměr kruhu
		
		Zbylé parametry jsou předány kostruktoru základní třdíy
		@see CPrimitiveBase parametrický konstruktor
	*/
	//MR parametrický konstruktor není moc vhodný - je to hodně složité - lépe default a potom nastavovat parametry
	//MR CRectang(int distance, CStructures::fPoint circleCenter, int radius, CStructures::ARGBPixel Object, CStructures::ARGBPixel Env, const char* title = "Untitled");
	
	

	//--------- Přepsáné virtuální funkce ze základní třídy --------------//

	CStructures::ARGBPixel GetPixelValue(CStructures::fPoint position); //vrati hodnotu pixelu na dane pozici
//MR	int GetType()	{return m_type;}

	//MR asi bude jinde ??? void Translate(int dx, int dy);
	//MR asi bude jinde ??? void Rotate(double gama);
/*MR v příkladu se nepoužívá	int GetRadius() const {return m_radius;} ///< Vrátí poloměr kruhu
*/
	//MR tohle by mělo být v bázi - mají to všechny třídy??? void Resample(CStructures::Supersample supersample);

	//--------------------------------------------------------------------//


	//dumping objektu
	#ifdef _DEBUG
		void Dump(CDumpContext& dc) const;
	#endif //_DEBUG


};

#endif // !defined(_CIRCLE_H_)
