| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -83,8 +83,8 @@ void CProduct::ResetRealMarkPt()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_RealMarkPt1.y = 0;
 | 
					 | 
					 | 
					 | 
					    m_RealMarkPt1.y = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_RealMarkPt2.x = 0;
 | 
					 | 
					 | 
					 | 
					    m_RealMarkPt2.x = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_RealMarkPt2.y = 0;
 | 
					 | 
					 | 
					 | 
					    m_RealMarkPt2.y = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_RealMarkPt3.x = 0;
 | 
					 | 
					 | 
					 | 
					    //m_RealMarkPt3.x = 0;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_RealMarkPt3.y = 0;
 | 
					 | 
					 | 
					 | 
					    //m_RealMarkPt3.y = 0;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //偏移和旋转都要重设
 | 
					 | 
					 | 
					 | 
					    //偏移和旋转都要重设
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_Offset.x = 0;//理论数据映射为平台坐标的偏移X
 | 
					 | 
					 | 
					 | 
					    m_Offset.x = 0;//理论数据映射为平台坐标的偏移X
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    m_Offset.y = 0;//理论数据映射为平台坐标的偏移Y
 | 
					 | 
					 | 
					 | 
					    m_Offset.y = 0;//理论数据映射为平台坐标的偏移Y
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -140,6 +140,9 @@ void CProduct::SetRealMarkPt(Dbxy pt)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if(!IsSetRealMarkPt1() || !IsSetRealMarkPt2())
 | 
					 | 
					 | 
					 | 
					    if(!IsSetRealMarkPt1() || !IsSetRealMarkPt2())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					         return;
 | 
					 | 
					 | 
					 | 
					         return;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						CalAffinePars();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						return;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //计算偏移旋转
 | 
					 | 
					 | 
					 | 
					    //计算偏移旋转
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CalTheoryToRealPar();
 | 
					 | 
					 | 
					 | 
					    CalTheoryToRealPar();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -157,20 +160,98 @@ void CProduct::SetRealMarkPt(Dbxy pt)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					         CalTheoryToRealPar();
 | 
					 | 
					 | 
					 | 
					         CalTheoryToRealPar();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include<opencv2/opencv.hpp>
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					using namespace cv;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void CProduct::CalAffinePars()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						CString logstr;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_TheoryMarkPt1 = m_TheoryMarkPt1 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("TheoryMarkPt1 Coord(%f,%f)", o_TheoryMarkPt1.x, o_TheoryMarkPt1.y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_TheoryMarkPt2 = m_TheoryMarkPt2 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("TheoryMarkPt2 Coord(%f,%f)", o_TheoryMarkPt2.x, o_TheoryMarkPt2.y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_TheoryMarkPt3 = m_TheoryMarkPt3 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("TheoryMarkPt3 Coord(%f,%f)", o_TheoryMarkPt3.x, o_TheoryMarkPt3.y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_RealMarkPt1 = m_RealMarkPt1 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("RealMarkPt1 Coord(%f,%f)", o_RealMarkPt1.x, o_RealMarkPt1.y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_RealMarkPt2 = m_RealMarkPt2 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("RealMarkPt2 Coord(%f,%f)", o_RealMarkPt2.x, o_RealMarkPt2.y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						o_RealMarkPt3 = m_RealMarkPt3 - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						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理论间距]: [%f]", TheoryDis);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						double RealDis = CalDistance(o_RealMarkPt1, o_RealMarkPt2);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format("[Mark1&2真实间距]: [%f]", RealDis);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						double DisDiff = abs(TheoryDis - RealDis);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						logstr.Format(_T("[Mark 间距误差] = [%f]"), DisDiff);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						gLogMgr->WriteDebugLog(logstr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (DisDiff > abs(gProductMgr->GetMaxMarkDisDiff()))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							gTrackWorkFlow1.RadAlamOnOff(true);//报警提示
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							ResetRealMarkPt();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							CString LogStr("Mark 间距误差超出范围,定位可能误判!");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							AfxMessageBox(logstr);	
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							gTrackWorkFlow1.RadAlamOnOff(false);//报警提示		
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							CExceptionMsg Msg;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Msg.SetMsg(CString(""));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							throw Msg;//抛出异常
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						/*	CExceptionMsg Msg;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							Msg.SetMsg(LogStr);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							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);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						//得放射变换参数矩阵
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						warp_mat = getAffineTransform(ThroryCoords, RealCoords);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1  后续计算会错误
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						//取出6个变换参数
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						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);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//计算真实数据的偏移和旋转值
 | 
					 | 
					 | 
					 | 
					//计算真实数据的偏移和旋转值
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void CProduct::CalTheoryToRealPar()
 | 
					 | 
					 | 
					 | 
					void CProduct::CalTheoryToRealPar()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     gLogMgr->WriteDebugLog("func : CalTheoryToRealPar");
 | 
					 | 
					 | 
					 | 
					     gLogMgr->WriteDebugLog("func : CalTheoryToRealPar");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						 if (gLogMgr->IsDebuging())//调试时,理论点用作实际点.
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						 {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 m_RealMarkPt1 = m_TheoryMarkPt1;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 m_RealMarkPt2 = m_TheoryMarkPt2;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 m_Offset.x = 0;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 m_Offset.y = 0;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 m_RotateAng = 0;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							 return;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						 }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     //以第一个点的来计算相对的偏移
 | 
					 | 
					 | 
					 | 
					     //以第一个点的来计算相对的偏移
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     m_Offset.x = m_RealMarkPt1.x - m_TheoryMarkPt1.x;
 | 
					 | 
					 | 
					 | 
					     m_Offset.x = m_RealMarkPt1.x - m_TheoryMarkPt1.x;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     m_Offset.y = m_RealMarkPt1.y - m_TheoryMarkPt1.y;
 | 
					 | 
					 | 
					 | 
					     m_Offset.y = m_RealMarkPt1.y - m_TheoryMarkPt1.y;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -263,36 +344,49 @@ void CProduct::CalRealStretchPar()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//理论数据转换为实际数据
 | 
					 | 
					 | 
					 | 
					//理论数据转换为实际数据
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void CProduct::TheoryDataToRealData(vector<Dbxy> &vec,Dbxy &Offset)
 | 
					 | 
					 | 
					 | 
					void CProduct::TheoryDataToRealData(vector<Dbxy> &vec,Dbxy &Offset)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef Create_MarkData_file
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						CStdioFile sf;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (!sf.Open("MarkData.txt", CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							sf.m_hFile = NULL;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						CString str;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     vector<Dbxy>::iterator iter = vec.begin();
 | 
					 | 
					 | 
					 | 
					     vector<Dbxy>::iterator iter = vec.begin();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     vector<Dbxy>::iterator iter_end = vec.end();
 | 
					 | 
					 | 
					 | 
					     vector<Dbxy>::iterator iter_end = vec.end();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						for (; iter != iter_end; iter++)
 | 
					 | 
					 | 
					 | 
					     for(;iter!=iter_end;iter++)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     {
 | 
					 | 
					 | 
					 | 
					     {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter) = TheoryPtToRealPt((*iter));
 | 
					 | 
					 | 
					 | 
					          (*iter) = TheoryPtToRealPt((*iter));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter).x += Offset.x;
 | 
					 | 
					 | 
					 | 
					          (*iter).x += Offset.x;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter).y += Offset.y;
 | 
					 | 
					 | 
					 | 
					          (*iter).y += Offset.y;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							if (sf.m_hFile != NULL)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							{
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								str.Format("MarkAreaCenter: X=%f;Y=%f \n", (*iter).x, (*iter).y);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								sf.SeekToEnd();
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								sf.WriteString(str);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     }
 | 
					 | 
					 | 
					 | 
					     }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						sf.Close();
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#else
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//理论数据转换为实际数据
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void CProduct::TheoryDataToRealData(vector<Dbxy> &vec, Dbxy &BaseOffset, Dbxy CutAdjust)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						vector<Dbxy>::iterator iter = vec.begin();
 | 
					 | 
					 | 
					 | 
						vector<Dbxy>::iterator iter = vec.begin();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						vector<Dbxy>::iterator iter_end = vec.end();
 | 
					 | 
					 | 
					 | 
						vector<Dbxy>::iterator iter_end = vec.end();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     for(;iter!=iter_end;iter++)
 | 
					 | 
					 | 
					 | 
						for (;iter != iter_end;iter++)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						{
 | 
					 | 
					 | 
					 | 
						{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter) = TheoryPtToRealPt((*iter));
 | 
					 | 
					 | 
					 | 
							//(*iter) = TheoryPtToRealPt((*iter));
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter).x += Offset.x;
 | 
					 | 
					 | 
					 | 
							//(*iter) = (*iter) - m_BasePt;	
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          (*iter).y += Offset.y;
 | 
					 | 
					 | 
					 | 
							auto x = (*iter).x;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							auto y = (*iter).y;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							double retx = m_p00*x + m_p01*y + m_p02+ CutAdjust.x;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							double rety = m_p10*x + m_p11*y + m_p12+ CutAdjust.y;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							(*iter).x = retx;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							(*iter).y = rety;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							auto temp = BaseOffset - m_BasePt;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							(*iter) = (*iter) - temp;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							/*(*iter).x += CutAdjust.x;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							(*iter).y += CutAdjust.y;*/
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void CProduct::ResetAffinePars()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p00 = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p01 = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p02 = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p10 = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p11 = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						m_p12 = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//获取实际产品的尺寸比例
 | 
					 | 
					 | 
					 | 
					//获取实际产品的尺寸比例
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					Dbxy CProduct::CalRealProductScale()
 | 
					 | 
					 | 
					 | 
					Dbxy CProduct::CalRealProductScale()
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -434,4 +528,16 @@ void CProduct::TheoryDataToRealData(vector<vector<Dbxy>> &vec,Dbxy &Offset)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     }
 | 
					 | 
					 | 
					 | 
					     }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//理论数据转换为实际数据
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void CProduct::TheoryDataToRealData(vector<vector<Dbxy>> &vec, Dbxy &BaseOffset, 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++)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							TheoryDataToRealData(*iter, BaseOffset,CutAdjust);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif
 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
 
 |