You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

282 lines
9.8 KiB
C++

#include "StdAfx.h"
#include "CameraHawkvis.h"
#include "Propertie.h"
#include "PropertieMgr.h"
#include "LogMgr.h"
#include "AuthorityMgr.h"
#include "GlobalFunction.h"
#include "ExceptionMsg.h"
#include "FileMgr.h"
#include "CStringFuc.h"
#define RESULT_CNT 10 //ץȡ<D7A5><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CCameraHawkvis *gCameraHawkvis = new CCameraHawkvis;
CCameraHawkvis::CCameraHawkvis(void)
{
m_nExpore = 80000;//<2F>ع<EFBFBD>ֵ
m_bOpen = false;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
m_bRotate180 = true;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ת180<38><30>
m_bMirrorH = false;//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
m_bMirrorV = false;//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
}
CCameraHawkvis::~CCameraHawkvis(void)
{
}
CMFCPropertyGridProperty *CCameraHawkvis::CreatGridProperty()
{
CString PropertyName;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString Description;//<2F><><EFBFBD><EFBFBD>
CString Path = _T("HawkvisCCD");;//<2F>洢·<E6B4A2><C2B7>
CString Name;
//-------------------------------------------------------------------------------//
PropertyName = _T("CCD ");
CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName);
//<2F>Ȱѹ<C8B0>ͬ<EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
CMFCPropertyGridProperty* pBase = CCamera::CreatGridProperty();
pGroup->AddSubItem(pBase);
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(PropertyName);
if(gAuthorityMgr->CheckAuthority(_FACTORY))
{
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_bRotate180");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bRotate180);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD>ת180 <20><>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ת180 <20><>");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bRotate180, Description);
pGroup1->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_nExpore");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_nExpore);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD>ع<EFBFBD>ֵ");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ֵ(0~2000000)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_nExpore, Description);
pGroup1->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_bMirrorH");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bMirrorH);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bMirrorH, Description);
pGroup1->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_bMirrorV");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bMirrorV);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bMirrorV, Description);
pGroup1->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
pGroup->AddSubItem(pGroup1);
}
return pGroup;
}
void CCameraHawkvis::ExportPar(ofstream *pFile)
{
CCamera::ExportPar(pFile);
(*pFile)<<"<><C4A3>] [CCameraHawkvis]------------------------------------------------"<<endl;
}
void CCameraHawkvis::Ini()
{
//<2F>󶨻<EFBFBD><F3B6A8BB><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>ocx <20>ؼ<EFBFBD>
//m_HawkvisCtrl = &(GetFrame()->m_DlgHawkvisCamera.m_HawkvisCtrl);
#if 0//def __HAWKVIS_MINDVISION_CCD__
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_HawkvisCtrl->MV_SetReversal(0,m_bMirrorH);//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
m_HawkvisCtrl->MV_SetReversal(1,m_bMirrorV);//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>óɹ<C3B3><C9B9><EFBFBD>û<EFBFBD><C3BB>
BOOL bMirrorH,bMirrorV;
m_HawkvisCtrl->MV_GetReversal(0,&bMirrorH);
m_HawkvisCtrl->MV_GetReversal(1,&bMirrorV);
gLogMgr->WriteDebugLog("Hawkvis : MV_GetReversal : bMirrorH = "+Bool2Str(bMirrorH));
gLogMgr->WriteDebugLog("Hawkvis : MV_GetReversal : bMirrorV = "+Bool2Str(bMirrorV));
#endif
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CCameraHawkvis::OpenCamera()
{
if(gLogMgr->IsDebuging())//<2F><><EFBFBD><EFBFBD>״̬
return true;
return true;
/*
#ifdef __HAWKVIS_MINDVISION_CCD__
//m_HawkvisCtrl->MV_CloseCamera();
#else
m_HawkvisCtrl->HV_CloseCamera();
#endif
//gLogMgr->WriteDebugLog("Hawkvis : Close Cam");
#ifdef __HAWKVIS_MINDVISION_CCD__
if(m_HawkvisCtrl->MV_OpenCamera())
#else
if(m_HawkvisCtrl->HV_OpenCamera())
#endif
{
gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->OK");
m_bOpen = true;
OpenTemp();//<2F><>ȡģ<C8A1><C4A3>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ֵ
#ifdef __HAWKVIS_MINDVISION_CCD__
m_HawkvisCtrl->MV_SetCameraExpTime(m_nExpore);
#else
m_HawkvisCtrl->HV_SetCameraExpTime(m_nExpore);
#endif
return true;
}
else
{
gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->ERR");
return false;
}*/
}
//ץȡ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (һ<><D2BB>ֻץȡһ<C8A1><D2BB>mark ͼ<><CDBC>)
bool CCameraHawkvis::CatchPoint(Dbxy &pt)
{
if(!m_bUse)
return false;
//<2F><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>Ƶ<EFBFBD>Բ
m_HawkvisCtrl->ClearGraphicObject();
//ץȡһ֡
#ifdef __HAWKVIS_MINDVISION_CCD__
if(!m_HawkvisCtrl->MV_GetOneFrame())
#else
if(!m_HawkvisCtrl->HV_GetOneFrame())
#endif
{
CString str = _T("func : Hawkvis Get One Frame----->Error");
CExceptionMsg Msg;
Msg.SetMsg(str);
throw Msg;
}
Sleep(m_CatchWaitDelay);//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ocx <20>ؼ<EFBFBD><D8BC><EFBFBD>
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double pdbX[10], pdbY[10], pdbAngles[10], pdbScale[10], pdbSore[10];
long nCount[1] = { 1 };
//FindShapeMode <20>ؼ<EFBFBD><D8BC><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><D2BA><EFBFBD><EFBFBD><EFBFBD>
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ<C8A1><D6B5>Χ1<CEA7><31>5
//<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ƕ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ڰ˸<DAB0><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ID<49><44>
VARIANT *v_pdbX = new VARIANT[1];
VARIANT *v_pdbY = new VARIANT[1];
VARIANT *v_pdbAngles = new VARIANT[1];
VARIANT *v_pdbScale = new VARIANT[1];
VARIANT *v_pdbSore = new VARIANT[1];
bool ret = m_HawkvisCtrl->FindShapeModel(0, v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount);
if(!ret)//2018-01-15 <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻᱨ<DCBB><E1B1A8>
{
CString str = _T("func : Hawkvis Find Shape Model----->Error");
CExceptionMsg Msg;
Msg.SetMsg(str);
throw Msg;
}
//pdbX
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbX->parray); ++index){
::SafeArrayGetElement(v_pdbX->parray, &index, pdbX + index);
}
//pdbY
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbY->parray); ++index){
::SafeArrayGetElement(v_pdbY->parray, &index, pdbY + index);
}
//pdbAngles
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbAngles->parray); ++index){
::SafeArrayGetElement(v_pdbAngles->parray, &index, pdbAngles + index);
}
//pdbScale
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbScale->parray); ++index){
::SafeArrayGetElement(v_pdbScale->parray, &index, pdbScale + index);
}
//pdbSore
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbSore->parray); ++index){
::SafeArrayGetElement(v_pdbSore->parray, &index, pdbSore + index);
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
#if 1
CString str;
str.Format("X: %0.3f, Y:%0.f", pdbX[0], pdbY[0]);
pt.x = pdbX[0];
pt.y = pdbY[0];
str.Format("X: %0.3f, Y:%0.3f",pt.x,pt.y);
gLogMgr->WriteDebugLog(str);
#endif
if(!IsDbxyZero(pt))
{
m_HawkvisCtrl->SetCrossShow(1,30,30,-1,-1,true);
m_HawkvisCtrl->ZoomFitWindow();
}
return true;
}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
void CCameraHawkvis::OpenTemp()
{
CFileMgr FileMgr;
CString path = FileMgr.GetWorkPath();
m_HawkvisCtrl->LoadShapeModel((LPCTSTR)path);
gLogMgr->WriteDebugLog("Hawkvis : LoadCatchTemp");
}
#if 0
Dbxy CCameraHawkvis::CCDpt2Platcoord(Dbxy CCDpt)
{
Dbxy pt;
pt.x = m_Coord.x - CCDpt.x;
pt.y = m_Coord.y + CCDpt.y;
return pt;
}
#endif