⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgedoc.cpp

📁 《面向对象程序设计实用教程》一书的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		
		Cai_key = CaiYang_Fun();
		if(!Cai_key)
		{
			return ;
		}	

	 	//调用整理数据程序   BOOL ZhengLi_Fun(BOOL f)
	 	BOOL bl;
		if (i==0) 
		{
			bl = false;
		}
		else
		{
			bl = true;
		}

	
	if(!ZhengLi_Fun(bl))
		{
			AfxMessageBox("数据有错误!");
			return ;
		}	
	 }
	 
/*
	//调用绘图函数(直接使用链表中的数据)	
	SetModifiedFlag(true);//设置修改标志为真,提醒存盘    
	caiyangKey = false;
	drawlineKey = true;
	Y_Max(); //获得最大值
	UpdateAllViews(NULL);  //立刻画线
	canshuKey = false;
	drawlineKey = false;
*/
	//调用绘图函数(直接使用链表中的数据)	
	SetModifiedFlag(true);//设置修改标志为真,提醒存盘    
	caiyangKey = false;
	drawlineKey = true;
	Y_Max(); //获得最大值 //m_maxY
	E_Value();

	
	Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;	
	pView->GetClientRect (&ViewRect);
	basline = ViewRect.bottom*1.0 / (Num_Line + 1);
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412
	if(Num_Line != 2)
	{
		basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
	}else
	{	
		basline = (ViewRect.bottom*1.0-2*basline) / (Num_Line + 1);
	}
//	m_viewY0 = 3*basline;//m412
	m_HAddX = 50;
	m_stepX = 1;	
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412	
	//标准时以下面的步长为基准将样点放大6dB的整数倍
//	m_stepY = pow(2,int(log(32768*512/m_maxY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例				
	m_stepY = pow(2,int(log(m_averY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例				
	//m611
	//m_viewY0 = m_maxY * m_stepY + 2;
	m_viewY0 = basline;

	double tempx,mlog2;
	tempx = log(m_stepY/m_stepY0);
	mlog2 = log(2);
	m_Ndb = tempx/mlog2;	
	
    m_H = 0;

	m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;			
	m_xyAxisSize.cy = (Num_Line + 1) * basline ;//修改纵向滚动轴
	
//m412

	s[9].Format("%d", m_Mcishu) ;	
	UpdateAllViews(NULL);  //立刻画线
	canshuKey = false;
	drawlineKey = false;

	olddataKey = false;// 采样后是新数据

}


//模拟叠加采样
void CCgeDoc::OnMsin() 
{
	int OKOrCANCEL;
	POSITION Position;
	Position = GetFirstViewPosition();
	CView* pVView = GetNextView(Position);
	CCgeView *pView;
	while(pVView!=NULL)
	{
		if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
		{ break;};
		pVView = GetNextView(Position);
	}
	pView = (CCgeView *)pVView;

	if (IsModified()!=0)//提示数据已经修改,是否保存
	{
		//OnFileSave();
		pView->m_Viewparfile();
		SetModifiedFlag( false );
	}

//	Oncanshu5();
    m_NdbKey = true;
	m_Hkey = true;
	m_Ndb = 0;
	m_H = 0;
	m_Mcishu = 0;
	
	m_Mcishu = 5;
	CdiejiaDLG diejiadlg;
    diejiadlg.m_Mcishu.Format("%d",m_Mcishu);//保存上次的值
	OKOrCANCEL = diejiadlg.DoModal();
	if (OKOrCANCEL != IDOK)
	{   
		return;
	}	
	m_Mcishu = atoi(diejiadlg.m_Mcishu);
	if(m_Mcishu<2 || m_Mcishu >30) //限定次数
	{
		return ;
	}
    
	moniKey = true;
//	Oncanshu5();
	int i,j,k;
	float y,z;
    

	blank=false;
	unbas =false;	
//	m_stepY = 1;

	CProgressDlg m_dlg;	
	m_dlg.Create (pView);  //(this);
	m_dlg.SetWindowText(_T("              采样进度"));
	m_dlg.SetRange (0,m_Mcishu);
    m_dlg.SetPos (0);
    m_dlg.SetStep (1);  
	
   CMyLine *pMyLine;
   if(!m_CMyLineList.IsEmpty())
   {	
		//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			
		CMyLine *pMyLine;
		POSITION ps;
		ps = m_CMyLineList.GetHeadPosition();
		while ( ps != NULL )
		{
			pMyLine = (CMyLine *)m_CMyLineList.GetNext(ps);
			delete pMyLine; // Now delete the CAge objects.
		}
		m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			

   }
    //SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
	for(k=0;k<m_Mcishu;k++) //开始叠加
	{
		m_Mps  = m_CMyLineList.GetHeadPosition();//获得连表的头		
	//    if(k!=0) pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);	  	
		for( i=0;i<Num_Line;i++)
			{
				for( j=0;j<Num_Pointes;j++)
				{ 	      
    				y = 21448 * sin(j*0.0314159); //模拟数据
					if (k==0) //
					{
						AddLine(y);//第一次产生连表		 		 			
					}
					else //叠加修改对象连表
					{
						//pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);//不能与GetAt()或SetAt()连用
						pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps ); 
						z = pMyLine->y;
						pMyLine->y = z + y;
						m_CMyLineList.SetAt(m_Mps,pMyLine);
					
						//pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps ); 					
						//z = pMyLine->y;
    					pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);						
			
					}
					
				}   	
	
			}

	m_dlg.StepIt(); //修改进度条的值		 

	
	}//叠加m_Mcishu次

    m_dlg.DestroyWindow ();	
	//调用绘图函数(直接使用链表中的数据)	
	SetModifiedFlag(true);//设置修改标志为真,提醒存盘    
	caiyangKey = false;
	drawlineKey = true;
	Y_Max();
	E_Value(); //获得算术平均值
	/*
	//m412	
	pView->GetClientRect (&ViewRect);
	basline = ViewRect.bottom*1.0 / (Num_Line + 1);
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412
	basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
	m_viewY0 = 3*basline;//m412
	m_HAddX = 50;
	m_stepX = 1;	
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412	
	//标准时以下面的步长为基准将样点放大6dB的整数倍
	m_stepY = pow(2,int(log(32768*512/m_maxY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例				

	double tempx,mlog2;
	tempx = log(m_stepY/m_stepY0);
	mlog2 = log(2);
	m_Ndb = tempx/mlog2;	*/
	
	Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;	
	pView->GetClientRect (&ViewRect);
	basline = ViewRect.bottom*1.0 / (Num_Line + 1);
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412
	if(Num_Line != 2)
	{
		basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
	}else
	{	
		basline = (ViewRect.bottom*1.0-2*basline) / (Num_Line + 1);
	}
//	m_viewY0 = 3*basline;//m412
	m_HAddX = 50;
	m_stepX = 1;	
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412	
	//标准时以下面的步长为基准将样点放大6dB的整数倍
	m_stepY = pow(2,int(log(m_averY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例				
	//m611
	//m_viewY0 = m_maxY * m_stepY + 2;
	
	m_viewY0 = basline;
	double tempx,mlog2;
	tempx = log(m_stepY/m_stepY0);
	mlog2 = log(2);
	m_Ndb = tempx/mlog2;	
	
	m_H = 0;
	
	m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;			
	m_xyAxisSize.cy = (Num_Line + 1) * basline ;//修改纵向滚动轴
	
//m412
	s[9].Format("%d", m_Mcishu) ;
	/*Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;	
	m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;	
	m_xyAxisSize.cy = (Num_Line + 1) * basline ;
	m_stepX = 1;

	m_iniapage();
*/
	UpdateAllViews(NULL);  //立刻画线
	canshuKey = false;
	drawlineKey = false;		

}


//整理数据
BOOL CCgeDoc::ZhengLi_Fun(BOOL f)
{
	//电压值 HL*int(512/G) - V0(0,3,7,6)
	BOOL mark;
	BYTE data_b[3];
	int Data_GHL;
	int i,z;
	CMyLine *pMyLine;
	mark = f;
	int Iepp0;
	float Temp_Data_v0[512];

	POSITION Position;
	Position = GetFirstViewPosition();
	CView* pVView = GetNextView(Position);
	CCgeView *pView;
	while(pVView!=NULL)
	{
		if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
		{ break;};
		pVView = GetNextView(Position);
	}
	pView = (CCgeView *)pVView;
	CProgressDlg m_dlg;	
	m_dlg.Create (pView);  //(this);
	m_dlg.SetWindowText(_T("              整理数据"));
	m_dlg.SetRange (0,120);
	//m_dlg.SetRange (0,Num_Line);
    m_dlg.SetPos (10);
    //m_dlg.SetStep (1);   
	m_dlg.SetStep (10); //(Num_Line/4);  

	//同时打开两个片的数据文件
	CFile Data1_re("Data_1.txt",CFile::modeRead);
	CFile Data2_re("Data_2.txt",CFile::modeRead);

	//读奇数通道零点
	float Data_GHL_1[4];
	//Data1_re.Seek(i*3,CFile::begin);
	//for(i=0;i<4;i++)
	//{
		//Data1_re.Seek(i*3,CFile::begin);
//		Data1_re.Read(data_b,3);
		//switch (data_b[0])
		//{
		//case 0:
			for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data1_re.Seek(Iepp0*3,CFile::begin);
					Data1_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/1 * BtoInt(data_b[1],data_b[2]); //增益1
				}	
			Data_GHL_1[0] = E_Data_v0(Temp_Data_v0);
			m_dlg.StepIt ();
//				Data_GHL_1[0] = 512/1 * BtoInt(data_b[1],data_b[2]); //增益1
		//		break;

		//case 3:
			for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data1_re.Seek((Main_amp_nullshift+Iepp0)*3,CFile::begin);	//注意调整指针 
					Data1_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/8 * BtoInt(data_b[1],data_b[2]); //增益8
				}	
			Data_GHL_1[1] = E_Data_v0(Temp_Data_v0);
			m_dlg.StepIt ();
//				Data_GHL_1[1] = 512/8 * BtoInt(data_b[1],data_b[2]); //增益8
		//		break;
		//case 7:
			for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data1_re.Seek((Main_amp_nullshift+Main_amp_nullshift+Iepp0)*3,CFile::begin);
					Data1_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/64 * BtoInt(data_b[1],data_b[2]); //增益64
				}	
			Data_GHL_1[2] = E_Data_v0(Temp_Data_v0);
			m_dlg.StepIt ();
				//Data_GHL_1[2] = 512/64 * BtoInt(data_b[1],data_b[2]); //增益64
		//		break;
		//case 6:
			for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data1_re.Seek((3*Main_amp_nullshift+Iepp0)*3,CFile::begin);	
					Data1_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 1.0 * BtoInt(data_b[1],data_b[2]);      //增益512
				}	
			Data_GHL_1[3] = E_Data_v0(Temp_Data_v0);
			m_dlg.StepIt ();
				//Data_GHL_1[3] = 1 * BtoInt(data_b[1],data_b[2]);      //增益512
		//		break;
		//default:
			//	return false;
		//		break;
		
		//}


	//}
	
	//读偶数通道零点
	int Data_GHL_2[4];
	//Data2_re.Seek(i*3,CFile::begin);
	//for(i=0;i<4;i++)
	//{
		//Data2_re.Seek(i*3,CFile::begin);
		//Data2_re.Read(data_b,3);

	//	switch (data_b[0])
	//	{
	//	case 0:
			for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data2_re.Seek(Iepp0*3,CFile::begin);	
					Data2_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/1 * BtoInt(data_b[1],data_b[2]); //增益1
				}	
				Data_GHL_2[0] = E_Data_v0(Temp_Data_v0);
				m_dlg.StepIt ();
				//Data_GHL_2[0] = 512/1 * BtoInt(data_b[1],data_b[2]);
				//break;
		//case 3:
				for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data2_re.Seek((Main_amp_nullshift+Iepp0)*3,CFile::begin);	
					Data2_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/8 * BtoInt(data_b[1],data_b[2]); //增益8
				}	
				Data_GHL_2[1] = E_Data_v0(Temp_Data_v0);
				m_dlg.StepIt ();
				//Data_GHL_2[1] = 512/8 * BtoInt(data_b[1],data_b[2]);
		//		break;
		//case 7:
				for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data2_re.Seek((Main_amp_nullshift+Main_amp_nullshift+Iepp0)*3,CFile::begin);	
					Data2_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 512.0/64 * BtoInt(data_b[1],data_b[2]); //增益64
				}	
				Data_GHL_2[2] = E_Data_v0(Temp_Data_v0);
				m_dlg.StepIt ();
				//Data_GHL_2[2] = 512/64 * BtoInt(data_b[1],data_b[2]);
		//		break;
		//case 6:
				for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
				{
					Data2_re.Seek((3*Main_amp_nullshift+Iepp0)*3,CFile::begin);	
					Data2_re.Read(data_b,3);
					Temp_Data_v0[Iepp0] = 1 * BtoInt(data_b[1],data_b[2]);      //增益512
				}	
				Data_GHL_2[3] = E_Data_v0(Temp_Data_v0);
				m_dlg.StepIt ();
				//Data_GHL_2[3] = 1 * BtoInt(data_b[1],data_b[2]);
		//		break;
		//default:
//			return false;
		//	break;		
		//}
//	}


	//整理奇、偶数通道数据
	m_Mps  = m_CMyLineList.GetHeadPosition();//获得连表的头		

	for(int No=0;No<Num_Line/2;No++)
	{
	  //整理奇数数据
	  for(i=0;i<Num_Pointes;i++)
	  {	
		Data1_re.Seek((No + i*(Num_Line/2))*3+4*Main_amp_nullshift*3,CFile::begin); //???
		Data1_re.Read(data_b,3);
		//m_Mps  = m_CMyLineList.GetHeadPosition();//获得连表的头		
		
		switch (data_b[0])
		{
		case 0:
				Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[0];
				break;
		case 3:
				Data_GHL = 512/8 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[1];
				break;
		case 7:
				Data_GHL = 512/64 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[2];
				break;
		case 6:
				Data_GHL = 512/512 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[3];
				break;
		default: //??
				Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[0];
				break;
			//return false;
		
		}

			//写入连表 
	 		if(mark)
			{	
				//是叠加采样时
				//AddLine(Data_GHL);
				pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps ); 
				z = pMyLine->y;
				pMyLine->y = z + Data_GHL;
				m_CMyLineList.SetAt(m_Mps,pMyLine);			
    			pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);						
								
			}
			else
			{
				//是单次采样时,或者叠加采样的第一次
				AddLine(Data_GHL); //512*y / 放大倍数作为样点数据写入链表,y是从硬件获得的原始数据
			}

	  }//获得了一条奇数曲线的数据
	  
	m_dlg.StepIt ();	
	 //整理偶数数据 

	 for(i=0;i<Num_Pointes;i++)
	 {	
		//Data2_re.Seek(i*(Num_Line/2)*3+12,CFile::begin);
		Data2_re.Seek((No + i*(Num_Line/2))*3+4*Main_amp_nullshift*3,CFile::begin); //???
		Data2_re.Read(data_b,3);
	//	m_Mps  = m_CMyLineList.GetHeadPosition();//获得连表的头		

		switch (data_b[0])
		{
		case 0:
				Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[0];
				break;
		case 3:
				Data_GHL = 512/8 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[1];
				break;
		case 7:
				Data_GHL = 512/64 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[2];
				break;
		case 6:
				Data_GHL = 512/512 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[3];
				break;
		default:				
				break;
//			return false;
		
		}

			//写入连表
	 		if(mark)
			{	
				//是叠加采样时
				//AddLine(Data_GHL);
				pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps ); 
				z = pMyLine->y;
				pMyLine->y = z + Data_GHL;
				m_CMyLi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -