| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | #include "stdafx.h"#include "FieldMgrClr.h"#include "../OTSLog/COTSUtilityDllFunExport.h"namespace OTSCLRINTERFACE {	CFieldMgrClr::CFieldMgrClr(int scanFieldSize, Size a_ResolutionSize)	{		CSize resolu;		resolu.cx = a_ResolutionSize.Width;		resolu.cy = a_ResolutionSize.Height;		m_LpFieldMgr = new CFieldMgrPtr(new CFieldMgr(scanFieldSize, resolu));	}	CFieldMgrClr::CFieldMgrClr(CFieldMgrPtr a_pFieldMgr)	{		ASSERT(a_pFieldMgr);		if (!a_pFieldMgr)		{			LogErrorTrace(__FILE__, __LINE__, _T("CBSEImgClr: Generate CElementChemistryClr pointer failed."));			return;		}					m_LpFieldMgr = new CFieldMgrPtr(a_pFieldMgr);							}	CFieldMgrClr::!CFieldMgrClr()	{		if (m_LpFieldMgr != nullptr)		{			delete m_LpFieldMgr;			m_LpFieldMgr = NULL;		}	}	CFieldMgrClr::~CFieldMgrClr()	{		if (m_LpFieldMgr != nullptr)		{			delete m_LpFieldMgr;			m_LpFieldMgr = NULL;		}	}			CFieldMgrPtr CFieldMgrClr::GetCFiledMgrPtr()	{		return *m_LpFieldMgr;	}	bool CFieldMgrClr::Init(CDomainClr^ a_pMeasureArea,		 int a_FieldStartMode		)	{				CDomainPtr pDomain = a_pMeasureArea->GetDomainPtr();		CFieldMgrPtr pFieldMgr = GetCFiledMgrPtr();		ASSERT(pFieldMgr);		if (!pFieldMgr)		{			LogErrorTrace(__FILE__, __LINE__, _T("Init: invalid pointer."));			return false;		}				bool bRet = pFieldMgr->Init(pDomain,a_FieldStartMode);		return bRet;	}	int CFieldMgrClr::GetEffectiveFieldWidth()	{		CFieldMgrPtr pFieldMgr = GetCFiledMgrPtr();		return pFieldMgr->GetEffectiveFieldWidth();	}	int CFieldMgrClr::GetEffectiveFieldHeight()	{		CFieldMgrPtr pFieldMgr = GetCFiledMgrPtr();		return pFieldMgr->GetEffectiveFieldHeight();	}		List<Point>^ CFieldMgrClr::GetFieldCentrePoints()	{		List<Point>^ NameClr = gcnew List<Point>();		if (m_LpFieldMgr != nullptr)		{			std::vector<CPoint> sName = m_LpFieldMgr->get()->GetFieldCentrePoints();			for each(auto p in sName)			{				NameClr->Add( Point(p.x, p.y));			}					}		return NameClr;	}		int CFieldMgrClr::GetTotalFields()	{		return m_LpFieldMgr->get()->GetTotalFields ();	}		SortedList<int,Point>^ CFieldMgrClr::GetUnmeasuredFieldCentrePoints(List<Point>^ a_listMeasuredFieldCentrePoints)	{		SortedList<int,Point>^ Pts = gcnew SortedList<int,Point>();		std::vector<CPoint> measuredPoint;		for (int i = 0; i < a_listMeasuredFieldCentrePoints->Count; i++)		{			measuredPoint.push_back(CPoint(a_listMeasuredFieldCentrePoints[i].X, a_listMeasuredFieldCentrePoints[i].Y));		}		if (m_LpFieldMgr != nullptr)		{			std::vector<CPoint> ps = m_LpFieldMgr->get()->GetUnmeasuredFieldCentrePoints(measuredPoint);			for (int i=0;i<ps.size();i++)			{				auto p = ps[i];				Pts->Add(i,Point(p.x, p.y));			}		}		return Pts;	}		CDomainClr ^ CFieldMgrClr::GetMeasureArea()	{		return gcnew CDomainClr(m_LpFieldMgr->get()->GetMeasureArea());	}	// measure area	bool CFieldMgrClr::CFieldMgrClr::SetMeasureArea(CDomainClr^ a_pMeasureArea)	{		ASSERT(a_pMeasureArea);		if (!a_pMeasureArea)		{			LogErrorTrace(__FILE__, __LINE__, _T("SetMeasureArea:invalid measure area."));			return false;		}		CFieldMgrPtr pFieldMgr = GetCFiledMgrPtr();		ASSERT(pFieldMgr);		if (!pFieldMgr)		{			LogErrorTrace(__FILE__, __LINE__, _T("SetMeasureArea: invalid pointer."));			return false;		}		CDomainPtr pDomain = a_pMeasureArea->GetDomainPtr();		ASSERT(pDomain);		if (!pDomain)		{			LogErrorTrace(__FILE__, __LINE__, _T("SetMeasureArea:invalid mesaure area pointer."));			return false;		}		pFieldMgr->SetMeasureArea(pDomain);		return true;	}	int CFieldMgrClr::GetOverlap()	{		return m_LpFieldMgr->get()->GetOverlap();	}	// measure area	bool CFieldMgrClr::CFieldMgrClr::SetOverlap(int a_overlap)	{		m_LpFieldMgr->get()->SetOverlap(a_overlap);		return true;	}	bool CFieldMgrClr::FindNeighborField( List<Point>^ a_flds, Point centerField,Point% a_neighbor, int a_direction)	{		std::vector<CPoint> allfieldPos;		CPoint curFld;		CPoint neighbor;		for (int i = 0; i < a_flds->Count; i++)		{			allfieldPos.push_back(CPoint(a_flds[i].X, a_flds[i].Y));		}		curFld.x = centerField.X;		curFld.y = centerField.Y;		if (m_LpFieldMgr->get()->FindNeighborField(allfieldPos, curFld, neighbor, (SORTING_DIRECTION)a_direction))		{			a_neighbor.X = neighbor.x;			a_neighbor.Y = neighbor.y;			return true;		}		else		{			return false;		}			}}
 |