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.

660 lines
19 KiB
C++

#include "StdAfx.h"
#include "Product.h"
#include "GlobalFunction.h"
#include "LogMgr.h"
#include "ObjComponentMgr.h"
#include "ExceptionMsg.h"
#include "ProductMgr.h"
#include "CommonFlowMgr.h"
#include "DrawSimpleShape.h"
4 years ago
//IMPLEMENT_SERIAL(CProduct,CObject,1)
CProduct::CProduct(void)
{
m_bUsed = true;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>
m_MaxRotateAng = 0.3;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>
m_RotateAng = 0;
m_bLastOne = true;//<2F>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
m_bHasMarkPt3 = false;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>mark3
}
CProduct::~CProduct(void)
{
}
void CProduct::Draw(CDC* pDC)
{
CPen Pen;
Pen.CreatePen(PS_INSIDEFRAME,0.5,RGB_GREEN1);
DbRect Rect(m_BasePt,3);
DrawCrossX(pDC,Pen,Rect);
}
#if 1
//<2F><><EFBFBD>ö<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::SetTheoryMarkPt(Dbxy pt1,Dbxy pt2)
{
if(pt1.x<pt2.x)//<2F><>֤<EFBFBD><D6A4><EFBFBD>ߵĵ<DFB5>Ϊmark1
{
m_TheoryMarkPt1 = pt1;
m_TheoryMarkPt2 = pt2;
}
else
{
m_TheoryMarkPt1 = pt2;
m_TheoryMarkPt2 = pt1;
}
}
//<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::GetMarkCoord(Dbxy &mark1,Dbxy &mark2)
{
mark1.x = m_TheoryMarkPt1.x;
mark1.y = m_TheoryMarkPt1.y;
mark2.x = m_TheoryMarkPt2.x;
mark2.y = m_TheoryMarkPt2.y;
}
#endif
#if 1
void CProduct::WriteWorkFile(vector<CLab> &LabVec)
{
LabVec.push_back(CLab(LAB_NULL,m_BasePt.x));
LabVec.push_back(CLab(LAB_NULL,m_BasePt.y));
LabVec.push_back(CLab(LAB_NULL,m_bUsed));
LabVec.push_back(CLab(LAB_NULL,m_TheoryMarkPt1.x));
LabVec.push_back(CLab(LAB_NULL,m_TheoryMarkPt1.y));
LabVec.push_back(CLab(LAB_NULL,m_TheoryMarkPt2.x));
LabVec.push_back(CLab(LAB_NULL,m_TheoryMarkPt2.y));
}
void CProduct::ReadWorkFile(CLabVecRang &LabVecRang)
{
int idx = LabVecRang.GetStart();
m_BasePt.x = LabVecRang.GetDouble(idx++);
m_BasePt.y = LabVecRang.GetDouble(idx++);
m_bUsed = LabVecRang.GetBool(idx++);
m_TheoryMarkPt1.x = LabVecRang.GetDouble(idx++);
m_TheoryMarkPt1.y = LabVecRang.GetDouble(idx++);
m_TheoryMarkPt2.x = LabVecRang.GetDouble(idx++);
m_TheoryMarkPt2.y = LabVecRang.GetDouble(idx++);
}
#endif
#if 1
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>λ<EFBFBD><CEBB>
void CProduct::ResetRealMarkPt()
{
m_RealMarkPt1.x = 0;
m_RealMarkPt1.y = 0;
m_RealMarkPt2.x = 0;
m_RealMarkPt2.y = 0;
//m_RealMarkPt3.x = 0;
//m_RealMarkPt3.y = 0;
//ƫ<>ƺ<EFBFBD><C6BA><EFBFBD>ת<EFBFBD><D7AA>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
m_Offset.x = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>Ϊƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>X
m_Offset.y = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>Ϊƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>Y
m_RotateAng = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>Ϊƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>
}
bool CProduct::IsSetRealMarkPt1()
{
return (!IsDbxyZero(m_RealMarkPt1));
}
bool CProduct::IsSetRealMarkPt2()
{
return (!IsDbxyZero(m_RealMarkPt2));
}
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CProduct::IsMarkReady()
{
Dbxy MarkPt1;
Dbxy MarkPt2;
if(gObjComponentMgr->GetTwoMarkPt(MarkPt1,MarkPt2))//<2F>ж<EFBFBD>λ<EFBFBD><CEBB>
{
return IsSetRealMarkPt1() && IsSetRealMarkPt2();
}
else//<2F>޶<EFBFBD>λ<EFBFBD><CEBB>
{
return gCommonFlowMgr->IsNoMarkCanWork();
}
}
4 years ago
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(CCD <20><>ץȡ<D7A5><C8A1><EFBFBD><EFBFBD><><D7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ƽ<EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::SetRealMarkPt(Dbxy pt)
{
if(IsSetRealMarkPt1() && IsSetRealMarkPt2())
{
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>λ<EFBFBD><CEBB>
ResetRealMarkPt();
}
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>λ<EFBFBD><CEBB>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>λ<EFBFBD><CEBB>1
if(!IsSetRealMarkPt1())
{
gLogMgr->WriteDebugLog("SetRealMarkPt1");
m_RealMarkPt1 = pt;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>λ<EFBFBD><CEBB>1<EFBFBD><31>û<EFBFBD><C3BB><EFBFBD>ö<EFBFBD>λ<EFBFBD><CEBB>2 ʱ<><CAB1><EFBFBD>ö<EFBFBD>λ<EFBFBD><CEBB>2
else if(!IsSetRealMarkPt2())
{
gLogMgr->WriteDebugLog("SetRealMarkPt2");
m_RealMarkPt2 = pt;
double RotatoAdjustX = gCommonFlowMgr->GetRotatoAdjust();//mark<72><6B><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_RealMarkPt2.x += RotatoAdjustX;
}
//<2F><>Ҫͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ݵĶ<DDB5>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD>
if(!IsSetRealMarkPt1() || !IsSetRealMarkPt2())
return;
CalAffinePars();
return;
//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ת
CalTheoryToRealPar();
//<2F><><EFBFBD><EFBFBD>ץȡ<D7A5><C8A1><EFBFBD><EFBFBD>mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(gCommonFlowMgr->IsbStretchDataToRealSize())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳߴ<CAB3><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CalRealStretchPar();
//<2F><><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StretchPt(m_TheoryMarkPt1,m_StretchParX);
StretchPt(m_TheoryMarkPt1,m_StretchParY);
StretchPt(m_TheoryMarkPt2,m_StretchParX);
StretchPt(m_TheoryMarkPt2,m_StretchParY);
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ƫ<EFBFBD><C6AB>
CalTheoryToRealPar();
}
}
4 years ago
#include"CameraHawkvis.h"
#include<opencv2/opencv.hpp>
using namespace cv;
void CProduct::CalAffinePars()
{
4 years ago
//΢<><CEA2><EFBFBD>Ƕȵķ<C8B5><C4B7><EFBFBD>ϵ<EFBFBD><CFB5>
{
Point2f PRThroryCoords[3];//<2F><>תǰ<D7AA><C7B0><EFBFBD><EFBFBD>ֵ
Point2f ARRealCoords[3];//<2F><>ת<EFBFBD><D7AA>ʵ<EFBFBD><CAB5>ֵ
PRThroryCoords[0] = Point2f(0, -1000);
PRThroryCoords[1] = Point2f(1000, 0);
PRThroryCoords[2] = Point2f(0, 1000);
auto angle = gProductMgr->GetAdjustAngle();
angle = _360ToAngle(angle);
auto SinAngle = sin(angle);
auto CosAngle = cos(angle);
ARRealCoords[0] = Point2f(1000*SinAngle, -1000*CosAngle);
ARRealCoords[1] = Point2f(1000*CosAngle, 1000*SinAngle);
ARRealCoords[2] = Point2f(-1000*SinAngle, 1000*CosAngle);
Mat warp_mat(2, 3, CV_32FC1);
//<2F>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
warp_mat = getAffineTransform(PRThroryCoords, ARRealCoords);
warp_mat.convertTo(warp_mat, CV_32FC1);//<2F><>ת<EFBFBD><D7AA>ʱ,Ĭ<><C4AC>CV_64FC1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ȡ<><C8A1>6<EFBFBD><36><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD>
m_rp00 = warp_mat.at<float>(0, 0);
m_rp01 = warp_mat.at<float>(0, 1);
m_p02 = warp_mat.at<float>(0, 2);
m_rp10 = warp_mat.at<float>(1, 0);
m_rp11 = warp_mat.at<float>(1, 1);
m_rp12 = warp_mat.at<float>(1, 2);
}
/*
CString logstr;
4 years ago
Dbxy T2oft = Dbxy(0, 0);
4 years ago
o_TheoryMarkPt1 = m_TheoryMarkPt1 - m_BasePt-T2oft;
logstr.Format("TheoryMarkPt1 Coord(%f,%f)", o_TheoryMarkPt1.x, o_TheoryMarkPt1.y);
gLogMgr->WriteDebugLog(logstr);
4 years ago
o_TheoryMarkPt2 = m_TheoryMarkPt2 - m_BasePt-T2oft;
logstr.Format("TheoryMarkPt2 Coord(%f,%f)", o_TheoryMarkPt2.x, o_TheoryMarkPt2.y);
gLogMgr->WriteDebugLog(logstr);
4 years ago
o_TheoryMarkPt3 = m_TheoryMarkPt3 - m_BasePt-T2oft;
logstr.Format("TheoryMarkPt3 Coord(%f,%f)", o_TheoryMarkPt3.x, o_TheoryMarkPt3.y);
gLogMgr->WriteDebugLog(logstr);
4 years ago
o_RealMarkPt1 = m_RealMarkPt1 - m_BasePt-T2oft;
logstr.Format("RealMarkPt1 Coord(%f,%f)", o_RealMarkPt1.x, o_RealMarkPt1.y);
gLogMgr->WriteDebugLog(logstr);
4 years ago
o_RealMarkPt2 = m_RealMarkPt2 - m_BasePt-T2oft;
logstr.Format("RealMarkPt2 Coord(%f,%f)", o_RealMarkPt2.x, o_RealMarkPt2.y);
gLogMgr->WriteDebugLog(logstr);
4 years ago
o_RealMarkPt3 = m_RealMarkPt3 - m_BasePt-T2oft;
logstr.Format("RealMarkPt3 Coord(%f,%f)", o_RealMarkPt3.x, o_RealMarkPt3.y);
gLogMgr->WriteDebugLog(logstr);
double TheoryDis = CalDistance(o_TheoryMarkPt1, o_TheoryMarkPt2);
logstr.Format("[Mark1&2<><32><EFBFBD>ۼ<EFBFBD><DBBC><EFBFBD>]: [%f]", TheoryDis);
gLogMgr->WriteDebugLog(logstr);
double RealDis = CalDistance(o_RealMarkPt1, o_RealMarkPt2);
logstr.Format("[Mark1&2<><32>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>]: [%f]", RealDis);
gLogMgr->WriteDebugLog(logstr);
double DisDiff = abs(TheoryDis - RealDis);
logstr.Format(_T("[Mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>] = [%f]"), DisDiff);
gLogMgr->WriteDebugLog(logstr);
if (DisDiff > abs(gProductMgr->GetMaxMarkDisDiff()))
{
gTrackWorkFlow1.RadAlamOnOff(true);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
ResetRealMarkPt();
4 years ago
CString LogStr("Mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3AC><EFBFBD><EFBFBD>Χ,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\r\n");
logstr = LogStr + logstr;
AfxMessageBox(logstr);
gTrackWorkFlow1.RadAlamOnOff(false);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
CExceptionMsg Msg;
Msg.SetMsg(CString(""));
throw Msg;//<2F>׳<EFBFBD><D7B3>
4 years ago
/ * CExceptionMsg Msg;
Msg.SetMsg(LogStr);
4 years ago
throw Msg;* /
}
Point2f ThroryCoords[3];
Point2f RealCoords[3];
Mat warp_mat(2, 3, CV_32FC1);
ThroryCoords[1] = Point2f(o_TheoryMarkPt1.x, o_TheoryMarkPt1.y);
ThroryCoords[2] = Point2f(o_TheoryMarkPt2.x, o_TheoryMarkPt2.y);
ThroryCoords[0] = Point2f(o_TheoryMarkPt3.x, o_TheoryMarkPt3.y);
RealCoords[1] = Point2f(o_RealMarkPt1.x, o_RealMarkPt1.y);
RealCoords[2] = Point2f(o_RealMarkPt2.x, o_RealMarkPt2.y);
RealCoords[0] = Point2f(o_RealMarkPt3.x, o_RealMarkPt3.y);
//<2F>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
warp_mat = getAffineTransform(ThroryCoords, RealCoords);
warp_mat.convertTo(warp_mat, CV_32FC1);//<2F><>ת<EFBFBD><D7AA>ʱ,Ĭ<><C4AC>CV_64FC1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ȡ<><C8A1>6<EFBFBD><36><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD>
m_p00 = warp_mat.at<float>(0, 0);
m_p01 = warp_mat.at<float>(0, 1);
m_p02 = warp_mat.at<float>(0, 2);
m_p10 = warp_mat.at<float>(1, 0);
m_p11 = warp_mat.at<float>(1, 1);
m_p12 = warp_mat.at<float>(1, 2);
4 years ago
*/
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ݵ<EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>תֵ
void CProduct::CalTheoryToRealPar()
{
gLogMgr->WriteDebugLog("func : CalTheoryToRealPar");
//<2F>Ե<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ƫ<EFBFBD><C6AB>
m_Offset.x = m_RealMarkPt1.x - m_TheoryMarkPt1.x;
m_Offset.y = m_RealMarkPt1.y - m_TheoryMarkPt1.y;
//<2F>õ<EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA>ĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ)
Dbxy OffsetPt2 = m_TheoryMarkPt2;
OffsetPt2.x += m_Offset.x;
OffsetPt2.y += m_Offset.y;
//<2F><><EFBFBD><EFBFBD><E2B4A6>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mark <20><>һ<EFBFBD><D2BB>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʱ<EFBFBD>ĽǶȼ<C7B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
if(IsTwoDbEqual(m_RealMarkPt1.x,OffsetPt2.x))
{
OffsetPt2.x += 0.001;
}
if(IsTwoDbEqual(m_RealMarkPt1.y,OffsetPt2.y))
{
OffsetPt2.y += 0.001;
}
//<2F>Եڶ<D4B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԵĽǶ<C4BD>
m_RotateAng = CalAngle(m_RealMarkPt1,OffsetPt2,m_RealMarkPt2);
m_RotateAng *= -1;
double RotateAng = AngleTo360(m_RotateAng);
//gLogMgr->SetbWriteDebugLog(true);
CString LogStr;
LogStr.Format(_T("[m_Offset.x] = [%f] ,[m_Offset.y] = [%f]"),m_Offset.x,m_Offset.y);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[RotateAng] = [%f]"),m_RotateAng);//<2F><><EFBFBD>Ƚ<EFBFBD>
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[RotateAng360] = [%f]"),RotateAng);
gLogMgr->WriteDebugLog(LogStr);
//gLogMgr->SetbWriteDebugLog(false);
//ͨ<><CDA8><EFBFBD>ж<EFBFBD>ʵ<EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>mark1 <20><>mark2 <20>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץȡ<D7A5><C8A1><EFBFBD><EFBFBD>
double TheoryDis = CalDistance(m_TheoryMarkPt1,m_TheoryMarkPt2);//<2F><><EFBFBD>۾<EFBFBD><DBBE><EFBFBD>
double RealDis = CalDistance(m_RealMarkPt1,m_RealMarkPt2);//ʵ<>ʾ<EFBFBD><CABE><EFBFBD>
double DisDiff = abs(TheoryDis - RealDis);
LogStr.Format(_T("[Mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>] = [%f]"),DisDiff);
gLogMgr->WriteDebugLog(LogStr);
if(DisDiff > abs(gProductMgr->GetMaxMarkDisDiff()))
{
gTrackWorkFlow1.RadAlamOnOff(true);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
ResetRealMarkPt();
CString LogStr("Mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3AC><EFBFBD><EFBFBD>Χ,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
CExceptionMsg Msg;
Msg.SetMsg(LogStr);
throw Msg;
}
}
//ʹ<><CAB9>Ĭ<EFBFBD><C4AC>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
void CProduct::UseDefualtOffset()
{
m_Offset.x = m_Offset.y = 0;
m_RotateAng = 0;
}
#endif
#if 1
//<2F><>ȡ<EFBFBD><C8A1>ת<EFBFBD>Ƕ<EFBFBD>(360 <20>Ƚ<EFBFBD>)
double CProduct::GetRotateAng()
{
return AngleTo360(m_RotateAng);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳߴ<CAB3><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::CalRealStretchPar()
{
Dbxy ProductScale = CalRealProductScale();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DbRect AllObjRect = gObjComponentMgr->GetAllObjRect2();
SObjOperatePar &StretchParX = m_StretchParX;
SObjOperatePar &StretchParY = m_StretchParY;
//<2F><><EFBFBD><EFBFBD>X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
StretchParX.OpType = _OP_STRETCH;
StretchParX.BasePt = AllObjRect.GetCenterPt();
StretchParX.OldSize = AllObjRect.Width();
StretchParX.Diff = (ProductScale.x-1)*StretchParX.OldSize;
StretchParX.NewSize = StretchParX.OldSize + StretchParX.Diff;
StretchParX.xy = _X;
}
//<2F><><EFBFBD><EFBFBD>Y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
StretchParY.OpType = _OP_STRETCH;
StretchParY.BasePt = AllObjRect.GetCenterPt();
StretchParY.OldSize = AllObjRect.Height();
StretchParY.Diff = (ProductScale.y-1)*StretchParY.OldSize;
StretchParY.NewSize = StretchParY.OldSize + StretchParY.Diff;
StretchParY.xy = _Y;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::TheoryDataToRealData(vector<Dbxy> &vec,Dbxy &Offset)
{
vector<Dbxy>::iterator iter = vec.begin();
vector<Dbxy>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
4 years ago
auto & it = (*iter);
it = TheoryPtToRealPt(it);
it = it + Offset;
//(*iter).x += Offset.x;
//(*iter).y += Offset.y;
}
}
4 years ago
void CProduct::TheoryDataToRealData0(vector<vector<Dbxy>>& vec, Dbxy & AreaCenter, Dbxy CutAdjust)
{
gLogMgr->WriteDebugLog("CProduct::TheoryDataToRealData");
vector<vector<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::iterator iter_end = vec.end();
for (;iter != iter_end;iter++)
{
TheoryDataToRealData0(*iter, AreaCenter, CutAdjust);
}
}
void CProduct::TheoryDataToRealData0(vector<Dbxy>& vec, Dbxy & AreaCenter, Dbxy CutAdjust)
{
vector<Dbxy>::iterator iter = vec.begin();
vector<Dbxy>::iterator iter_end = vec.end();
for (;iter != iter_end;iter++)
{
auto & it = (*iter);
it = TheoryPtToRealPt(it);
it = it - AreaCenter;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbxy Scale = gProgram_SZ_XL->GetJig2Scale();
if (gServer->m_RcvCurTrackIndex == 1)
{
Scale = gProgram_SZ_XL->GetJig4Scale();
}
it.x *= Scale.x;
it.y *= Scale.y;
it = it + CutAdjust;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
4 years ago
void CProduct::TheoryDataToRealData(vector<Dbxy> &vec, Dbxy &AreaCenter, Dbxy CutAdjust)
{
vector<Dbxy>::iterator iter = vec.begin();
vector<Dbxy>::iterator iter_end = vec.end();
4 years ago
//ԭͼ<D4AD><CDBC><EFBFBD><EFBFBD>
//gObjComponentMgr->CalAllObjCenterPt();
//Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt();
for (;iter != iter_end;iter++)
{
4 years ago
//(*iter) = (*iter) - DataCenter; //<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>(0,0)(ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>)Ϊԭ<CEAA><D4AD>
auto x = (*iter).x;
auto y = (*iter).y;
4 years ago
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
double retx = m_p00*x + m_p01*y + m_p02;
double rety = m_p10*x + m_p11*y + m_p12;
//ǿ<>Ƶ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
//double retx2 = m_rp00*retx + m_rp01*rety + m_rp02;
//double rety2 = m_rp10*retx + m_rp11*rety + m_rp12;
(*iter).x = retx;
(*iter).y= rety;
4 years ago
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD>
auto temp = AreaCenter;//-DataCenter;
(*iter) = (*iter) - temp;
4 years ago
if (!m_bManualMark)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbxy Scale = gProgram_SZ_XL->GetJig2Scale();
if (gServer->m_RcvCurTrackIndex == 1)
{
Scale = gProgram_SZ_XL->GetJig4Scale();
}
(*iter).x *= Scale.x;
(*iter).y *= Scale.y;
//ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD>
(*iter).x += CutAdjust.x;
(*iter).y += CutAdjust.y;
4 years ago
}
auto DataRange = gCommonFlowMgr->m_CalibrationRange / 2;
if (abs(iter->x)>DataRange||abs(iter->y)>DataRange)
{
CExceptionMsg msg;
CString str;
str.Format("x=%.4f y=%.4f \r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>: dx=%.4f,dy=%.4f", iter->x, iter->y,CutAdjust.x,CutAdjust.y);
msg.SetMsg(CString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣,<2C><><EFBFBD><EFBFBD>У׼<D0A3><D7BC>Χ!\r\n")+str);
throw msg;
}
4 years ago
}
}
void CProduct::ResetAffinePars()
{
m_p00 = 1;
m_p01 = 0;
m_p02 = 0;
m_p10 = 0;
m_p11 = 1;
m_p12 = 0;
}
//<2F><>ȡʵ<C8A1>ʲ<EFBFBD>Ʒ<EFBFBD>ijߴ<C4B3><DFB4><EFBFBD><EFBFBD><EFBFBD>
Dbxy CProduct::CalRealProductScale()
{
Dbxy ProductScale;
//<2F><><EFBFBD><EFBFBD>mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD>
if(m_bHasMarkPt3)//3
{
ProductScale.x = CalRealProductScaleExt(m_TheoryMarkPt1,m_TheoryMarkPt2,m_RealMarkPt1,m_RealMarkPt2);
if(IsTwoDbEqual(m_TheoryMarkPt1.x,m_TheoryMarkPt3.x))//mark1 <20><>mark3
{
ProductScale.y = CalRealProductScaleExt(m_TheoryMarkPt1,m_TheoryMarkPt3,m_RealMarkPt1,m_RealMarkPt3);
}
else
{
ProductScale.y = CalRealProductScaleExt(m_TheoryMarkPt2,m_TheoryMarkPt3,m_RealMarkPt2,m_RealMarkPt3);
}
}
else//<2F><><EFBFBD><EFBFBD>mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
double Scale = CalRealProductScaleExt(m_TheoryMarkPt1,m_TheoryMarkPt2,m_RealMarkPt1,m_RealMarkPt2);
ProductScale.x = ProductScale.y = Scale;
}
CString LogStr;
LogStr.Format(_T("[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x] = [%f]"),ProductScale.x);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y] = [%f]"),ProductScale.y);
gLogMgr->WriteDebugLog(LogStr);
return ProductScale;
}
double CProduct::CalRealProductScaleExt(Dbxy TheoryMarkPt1,Dbxy TheoryMarkPt2,Dbxy RealMarkPt1,Dbxy RealMarkPt2)
{
double TheoryMarkDis = CalDistance(TheoryMarkPt1,TheoryMarkPt2);
double RealMarkDis = CalDistance(RealMarkPt1,RealMarkPt2);
double Diff = (RealMarkDis-TheoryMarkDis);
double ProductScale = RealMarkDis/TheoryMarkDis;
CString LogStr;
LogStr.Format(_T("[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ] = [%f]"),TheoryMarkDis);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[<5B><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ] = [%f]"),RealMarkDis);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[<5B>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>] = [%f]"),Diff);
gLogMgr->WriteDebugLog(LogStr);
return ProductScale;
}
//<2F><><EFBFBD><EFBFBD>
//BasePt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
//Size <20><><EFBFBD><EFBFBD>ǰ<EFBFBD>ijߴ<C4B3>
//Diff <20>Ǿɳߴ<C9B3><DFB4><EFBFBD><EFBFBD>³ߴ<C2B3><DFB4>IJ<EFBFBD>
void CProduct::StretchPt(Dbxy &Pt,SObjOperatePar &Par)
{
if(Par.Diff == 0)
return;
if(Par.xy == _X)
{
Pt.x = Pt.x+Par.Diff*((Pt.x-Par.BasePt.x)/Par.OldSize);
}
else
{
Pt.y = Pt.y+Par.Diff*((Pt.y-Par.BasePt.y)/Par.OldSize);
}
}
//<2F><><EFBFBD><EFBFBD>ץȡ<D7A5><C8A1><EFBFBD><EFBFBD>mark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(CenterPt<50><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>)
void CProduct::StretchDataToRealSize(vector<vector<Dbxy>> &vec)
{
vector<vector<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
int size = (*iter).size();
for(int k=0;k<size;k++)
{
Dbxy &pt = (*iter)[k];
StretchPt(pt,m_StretchParX);
StretchPt(pt,m_StretchParY);
}
}
}
4 years ago
/*
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(SrcVec <20><>DecVec <20>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>)
void CProduct::TheoryDataToRealData(vector<vector<Dbxy>> &SrcVec,vector<vector<Dbxy>> &DecVec,Dbxy &Offset)
{
gLogMgr->WriteDebugLog("CProduct::TheoryDataToRealData");
int size1 = SrcVec.size();
int size2 = DecVec.size();
if(size1!=size2)
{
gLogMgr->WriteDebugLog("SrcVec.size() != DecVec.size()");
return;
}
for(int k=0;k<size1;k++)
{
TheoryDataToRealData(SrcVec[k],DecVec[k],Offset);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(SrcVec <20><>DecVec <20>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>)
void CProduct::TheoryDataToRealData(vector<Dbxy> &SrcVec,vector<Dbxy> &DecVec,Dbxy &Offset)
{
int size1 = SrcVec.size();
int size2 = DecVec.size();
if(size1!=size2)
{
gLogMgr->WriteDebugLog("SrcVec.size() != DecVec.size()");
return;
}
for(int k=0;k<size1;k++)
{
DecVec[k] = TheoryPtToRealPt(SrcVec[k]);
DecVec[k].x += Offset.x;
DecVec[k].y += Offset.y;
}
}
4 years ago
*/
//(TheoryPt <20><><EFBFBD><EFBFBD>ת,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>)
Dbxy CProduct::TheoryPtToRealPt(Dbxy TheoryPt)
{
4 years ago
/*Dbxy ret;
ret.x = TheoryPt.x*m_p00 + TheoryPt.y*m_p01 + m_p02;
ret.y = TheoryPt.x*m_p10 + TheoryPt.y*m_p11 + m_p12;
return ret;*/
double RotateAng = m_RotateAng;
Dbxy pt;
//<2F><><EFBFBD><EFBFBD>ת----------------------------------
pt = RotatoPt(TheoryPt,RotateAng,m_TheoryMarkPt1);//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD>λ<EFBFBD><CEBB>
//<2F>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>-----------------------
Dbxy Offset;
Offset.x = m_Offset.x;
Offset.y = m_Offset.y;
pt.x = pt.x + Offset.x;
pt.y = pt.y + Offset.y;
return pt;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CProduct::TheoryDataToRealData(vector<vector<Dbxy>> &vec,Dbxy &Offset)
{
gLogMgr->WriteDebugLog("CProduct::TheoryDataToRealData");
vector<vector<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
TheoryDataToRealData(*iter,Offset);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
4 years ago
void CProduct::TheoryDataToRealData(vector<vector<Dbxy>> &vec, Dbxy &AreaCenter, Dbxy CutAdjust)
{
gLogMgr->WriteDebugLog("CProduct::TheoryDataToRealData");
vector<vector<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::iterator iter_end = vec.end();
for (;iter != iter_end;iter++)
{
4 years ago
TheoryDataToRealData(*iter, AreaCenter,CutAdjust);
}
}
#endif