📄 graphisc.cpp
字号:
SetCursor(m_hCursor);
}
if(m_bLbuttonFlage2)
{
this->m_nonuispointS2.x = m_myPoint.x - 5;
this->m_nonuispointE2.x = m_myPoint.x + 5;
LoadCur(IDC_CURSOR2);
SetCursor(m_hCursor);
}
if (m_bLbuttonFlage3)
{
this->m_nonuispointYS1.y = m_myPoint.y -5;
this->m_nonuispointYE1.y = m_myPoint.y +5;
LoadCur(IDC_CURSOR2);
SetCursor(m_hCursor);
}
if (m_bLbuttonFlage4)
{
this->m_nonuispointYS2.y = m_myPoint.y -5;
this->m_nonuispointYE2.y = m_myPoint.y +5;
LoadCur(IDC_CURSOR2);
SetCursor(m_hCursor);
}
if (((IsINWave(point)==1 || IsINWave(point)==2) && theApp.m_bnoniusx)
|| ((IsINWave(point)==3 || IsINWave(point)==4) && theApp.m_bnoniusy))
{
LoadCur(IDC_CURSOR2);
SetCursor(m_hCursor);
}
}
/**************************************************************
//画视图取背景
***************************************************************/
void CGraphisc::TextShow(CDC *pDC,CPoint PointS, CPoint PointE)
{
pOldBrush1 = pDC->SelectObject(pBrush1);
pDC->Rectangle(PointS.x,PointS.y,PointE.x,PointE.y);
pDC->SelectObject(pOldBrush);
}
void CGraphisc::ChangCDT(CoordinateRange CdtRange)
{
this->CdtRange = CdtRange;
}
void CGraphisc::DrawCustomFuction(CDC *pDC)
{
}
// 计算CH1和CH2通道的的各种数据
void CGraphisc::ComputeValueCH1()
{
int m = 0;
int i = 0;
int j = 0;
float m_mMax1 = 0.0f;
float m_mMin1 = 0.0f;
float m_mMax2 = 0.0f;
float m_mMin2 = 0.0f;
float m_nAverage1 = 0.0f;
float m_nAverage2 = 0.0f;
float ValLeftDat[1000];
float ValRightDat[1000];
memset(ValLeftDat,0,sizeof(ValLeftDat));
memset(ValRightDat,0,sizeof(ValRightDat));
// 得到一波数据中的左通道和右的数据
for (i=0; i<1000; i++)
{
j = 4 * i + 1;
ValLeftDat[i] = ((float)(theApp.m_aryReceDat[j])*0.256);
ValLeftDat[i] = (ValLeftDat[i]*1000)+(float)(theApp.m_aryReceDat[j+1]);
ValLeftDat[i] = ValLeftDat[i]/65536.0 * 2.42 ;
ValRightDat[i] = ((float)(theApp.m_aryReceDat[j+2])*0.256);
ValRightDat[i] = (ValRightDat[i]*1000)+(float)(theApp.m_aryReceDat[j+3]);
ValRightDat[i] = ValRightDat[i]/65536.0 * 2.42 ;
}
for (i=0;i<MY_POINT;i++)
{
ValLeftDat[i] = 82 * (1.24 - ValLeftDat[i]);
ValRightDat[i] = 82 * (1.24 - ValRightDat[i]);
// 得到CH1的最大和最小值
if (ValLeftDat[i]>m_mMax1)
{
m_mMax1 = ValLeftDat[i];
}
if (ValLeftDat[i]<m_mMin1)
{
m_mMin1 = ValLeftDat[i];
}
// 得到CH2的最大和最小值
if (ValRightDat[i]>m_mMax2)
{
m_mMax2 = ValRightDat[i];
}
if (ValRightDat[i]<m_mMin2)
{
m_mMin2 = ValRightDat[i];
}
// 得到CH1和CH2的值的总和
m_nAverage1 += ValLeftDat[i];
m_nAverage2 += ValRightDat[i];
}
for (i=0; i<MY_POINT; i++)
{
// 计算出每个通道画图的点(Y坐标)
if (theApp.m_strModeApp == "CH1+CH2")
{
ValLeftDat[i] = (ValLeftDat[i] + ValRightDat[i]) * (5.0/theApp.m_fVoleteVal1)
+ (EndPoint.y + StartPoint.y)/2;
theApp.m_aryLeftDat[i] = (int)ValLeftDat[i];
pPointArrayL[i].y = theApp.m_aryLeftDat[i];
}
else if (theApp.m_strModeApp == "CH1 CH2")
{
ValLeftDat[i] = ValLeftDat[i] * (5.0/theApp.m_fVoleteVal1)
+ StartPoint.y + (EndPoint.y - StartPoint.y)/4;
theApp.m_aryLeftDat[i] = (int)ValLeftDat[i];
pPointArrayL[i].y = theApp.m_aryLeftDat[i];
ValRightDat[i] = ValRightDat[i] * (5.0/theApp.m_fVoleteVal2)
+ (3*EndPoint.y + StartPoint.y)/4;
theApp.m_aryRightDat[i] = ValRightDat[i];
pPointArrayR[i].y = theApp.m_aryRightDat[i];
}
else
{
ValLeftDat[i] = ValLeftDat[i] * (5.0/theApp.m_fVoleteVal1)
+ (EndPoint.y + StartPoint.y)/2;
theApp.m_aryLeftDat[i] = (int)ValLeftDat[i];
pPointArrayL[i].y = theApp.m_aryLeftDat[i];
ValRightDat[i] = ValRightDat[i] * (5.0/theApp.m_fVoleteVal2)
+ (EndPoint.y + StartPoint.y)/2;
theApp.m_aryRightDat[i] = ValRightDat[i];
pPointArrayR[i].y = theApp.m_aryRightDat[i];
}
}
// 计算通道的平均值
theApp.m_nAverageCH1 = m_nAverage1/(MY_POINT*8);
theApp.m_nAverageCH2 = m_nAverage2/(MY_POINT*8);
// 计算通道的电压值
theApp.m_numVoleteCh1 = (m_mMax1 - m_mMin1)/8.1;
theApp.m_numVoleteCh2 = (m_mMax2 - m_mMin2)/8.1;
::PostMessage(theApp.m_hWndLeftView, UM_SHOEMESSAGE, 0, 0);
}
//波形文件保存
void CGraphisc::OnWaveFileSave()
{
}
//波形文件打开
void CGraphisc::OnWaveFileOpen()
{
}
//画函数图象
void CGraphisc::DrawWave(CDC *pDC, BOOL m_bPrintFlage)
{
CPen pen(PS_SOLID,1,RGB(245,255,20));
CPen pen1(PS_SOLID,1,RGB(0,255,245));
BOOL m_bFlagem = FALSE;
float m_nSpring = 0;
int num = 0;
int m = 0;
int i = 0;
int j = 0;
int x = 0;
int m_nbzdig = 0;
// CH1通道是否同步触发
if (theApp.m_strModeApp != "CH2")
{
if (theApp.m_bIsochronous1)
{
for (i=0;i<1000;i++)
{
if (theApp.m_strModeApp == "CH1+CH2")
{
m_nSpring = 2.46+ (StartPoint.y + EndPoint.y)/2;
}
else if (theApp.m_strModeApp == "CH1 CH2")
{
m_nSpring = 1.23+ StartPoint.y + (EndPoint.y - StartPoint.y)/4;
}
else
{
m_nSpring = 1.23+ (StartPoint.y + EndPoint.y)/2;
}
if (pPointArrayL[i].y>=m_nSpring)
{
if (pPointArrayL[i].y >= pPointArrayL[i+1].y)
{
m_nbzdig = i;
if (pPointArrayL[i+1].y <= m_nSpring)
{
break;
}
}
}
}
for (i=0;i<1000-m_nbzdig;i++)
{
pPointArrayL[i].y = pPointArrayL[i+m_nbzdig].y;
}
if (m_nbzdig>0)
{
if (pPointArrayL[1000-m_nbzdig-1].y>pPointArrayL[1000-m_nbzdig-5].y)
{
m_bFlagem = TRUE;
}
else
{
m_bFlagem = FALSE;
}
for(m=0; m<=500; m++)
{
if ((pPointArrayL[1000-m_nbzdig-1].y == pPointArrayL[m].y && m_bFlagem && pPointArrayL[m].y>pPointArrayL[m-4].y)
|| (pPointArrayL[1000-m_nbzdig-1].y == pPointArrayL[m].y && !m_bFlagem && pPointArrayL[m].y<=pPointArrayL[m-4].y))
{
for (i=0; i<m_nbzdig; i++)
{
pPointArrayL[1000-m_nbzdig+i].y = pPointArrayL[m+i].y;
}
}
else
{
continue;
}
}
}
}
}
// CH2通道是否同步触发
if (theApp.m_strModeApp != "CH1")
{
if (theApp.m_bIsochronous2)
{
for (i=0;i<1000;i++)
{
if (theApp.m_strModeApp == "CH1+CH2")
{
m_nSpring = 2.46+ (StartPoint.y + EndPoint.y)/2;
}
else if (theApp.m_strModeApp == "CH1 CH2")
{
m_nSpring = 1.23+ (3*EndPoint.y + StartPoint.y)/4;;
}
else
{
m_nSpring = 1.23+ (StartPoint.y + EndPoint.y)/2;
}
if (pPointArrayR[i].y>=m_nSpring)
{
if (pPointArrayR[i].y >= pPointArrayR[i+1].y)
{
m_nbzdig = i;
if (pPointArrayR[i+1].y <= m_nSpring)
{
break;
}
}
}
}
for (i=0;i<1000-m_nbzdig;i++)
{
pPointArrayR[i].y = pPointArrayR[i+m_nbzdig].y;
}
if (m_nbzdig>0)
{
if (pPointArrayR[1000-m_nbzdig-1].y>pPointArrayR[1000-m_nbzdig-5].y)
{
m_bFlagem = TRUE;
}
else
{
m_bFlagem = FALSE;
}
for(m=0; m<=500; m++)
{
if ((pPointArrayR[1000-m_nbzdig-1].y == pPointArrayR[m].y && m_bFlagem && pPointArrayR[m].y>pPointArrayR[m-4].y)
|| (pPointArrayR[1000-m_nbzdig-1].y == pPointArrayR[m].y && !m_bFlagem && pPointArrayR[m].y<=pPointArrayR[m-4].y))
{
for (i=0; i<m_nbzdig; i++)
{
pPointArrayR[1000-m_nbzdig+i].y = pPointArrayR[m+i].y;
}
}
else
{
continue;
}
}
}
}
}
//是否移动波形
if (theApp.m_bLeftBtn)
{
for (i=0; i<1000; i++)
{
pPointArrayL[i].y += theApp.m_nChannelLeft;
}
}
if (theApp.m_bRightBtn)
{
for (i=0; i<1000; i++)
{
pPointArrayR[i].y += theApp.m_nChannelRight;
}
}
//CH1当波形长度超过1000个点时,计算波形相衔接的点
if (theApp.m_nTimer>1000)
{
if (pPointArrayL[999].y>pPointArrayL[995].y)
{
m_bFlagem = TRUE;
}
else
{
m_bFlagem = FALSE;
}
for(m=0; m<600; m++)
{
if ((pPointArrayL[999].y == pPointArrayL[m].y && m_bFlagem && pPointArrayL[m].y>pPointArrayL[m-4].y)
|| (pPointArrayL[999].y == pPointArrayL[m].y && !m_bFlagem && pPointArrayL[m].y<=pPointArrayL[m-4].y))
{
for (j=0; j<1000; j++)
{
pPointArrayLeft[j].y = pPointArrayL[j].y;
}
for (j=0; j<1000-m; j++)
{
pPointArrayLeft[1000+j].y = pPointArrayL[m+j].y;
num = j;
}
for (j=0; j<1000-m && num+j<2000; j++)
{
pPointArrayLeft[1000+num+j].y = pPointArrayL[m+j].y;
}
}
else
{
continue;
}
}
}
//CH2当波形长度超过1000个点时,计算波形相衔接的点
if (theApp.m_nTimer>1000)
{
if (pPointArrayR[999].y>pPointArrayR[995].y)
{
m_bFlagem = TRUE;
}
else
{
m_bFlagem = FALSE;
}
for(m=0; m<500; m++)
{
if ((pPointArrayR[999].y == pPointArrayR[m].y && m_bFlagem && pPointArrayR[m].y>pPointArrayR[m-4].y)
|| (pPointArrayR[999].y == pPointArrayR[m].y && !m_bFlagem && pPointArrayR[m].y<=pPointArrayR[m-4].y))
{
for (j=0; j<1000; j++)
{
pPointArrayRight[j].y = pPointArrayR[j].y;
}
for (j=0; j<1000-m; j++)
{
pPointArrayRight[1000+j].y = pPointArrayR[m+j].y;
num = j;
}
for (j=0; j<1000-m && num+j<1000; j++)
{
pPointArrayRight[1000+num+j].y = pPointArrayR[m+j].y;
}
}
else
{
continue;
}
}
}
// 得到X坐标
for (i = 0; i<theApp.m_nTimer; i++)
{
pPointArrayL[i].x = pPointArrayR[i].x = x * ((fabs(EndPoint.x - StartPoint.x))/(theApp.m_nTimer))
+ StartPoint.x;
if (pPointArrayL[i].x > EndPoint.x + 5)
{
pPointArrayL[i].x = EndPoint.x + 5;
}
if (pPointArrayR[i].x > EndPoint.x + 5)
{
pPointArrayR[i].x = EndPoint.x + 5;
}
x++;
}
// 画X-Y模式时的波形
if (theApp.m_strModeApp == "X-Y")
{
for (i = 0; i<theApp.m_nTimer; i++)
{
pPointArrayR[i].x = pPointArrayL[i].y;
}
pDC->Polyline(pPointArrayR, theApp.m_nTimer);
}
//画当波形大于1000个点时的波形
else if(theApp.m_nTimer>1000)
{
if (theApp.m_strModeApp == "CH1 CH2")
{
for (j=0; j<theApp.m_nTimer; j++)
{
pPointArrayLeft[j].x = pPointArrayL[j].x;
pPointArrayRight[j].x = pPointArrayR[j].x;
}
if (!m_bPrintFlage)
{
pDC->SelectObject(pen);
}
pDC->Polyline(pPointArrayLeft, theApp.m_nTimer);
if (!m_bPrintFlage)
{
pDC->SelectObject(pen1);
}
pDC->Polyline(pPointArrayRight, theApp.m_nTimer);
}
else if (theApp.m_strModeApp == "CH1" || theApp.m_strModeApp == "CH1+CH2")
{
for (j=0; j<theApp.m_nTimer; j++)
{
pPointArrayLeft[j].x = pPointArrayL[j].x;
}
if (!m_bPrintFlage)
{
pDC->SelectObject(pen);
}
pDC->Polyline(pPointArrayLeft, theApp.m_nTimer);
}
else if(theApp.m_strModeApp == "CH2")
{
for (j=0; j<theApp.m_nTimer; j++)
{
pPointArrayRight[j].x = pPointArrayR[j].x;
}
if (!m_bPrintFlage)
{
pDC->SelectObject(pen1);
}
pDC->Polyline(pPointArrayRight, theApp.m_nTimer);
}
}
// 画小于或等于1000个点时的波形
else
{
if (theApp.m_strModeApp == "CH1 CH2")
{
if (!m_bPrintFlage)
{
pDC->SelectObject(pen);
}
pDC->Polyline(pPointArrayL, theApp.m_nTimer);
if (!m_bPrintFlage)
{
pDC->SelectObject(pen1);
}
pDC->Polyline(pPointArrayR, theApp.m_nTimer);
}
else if (theApp.m_strModeApp == "CH1" || theApp.m_strModeApp == "CH1+CH2")
{
if (!m_bPrintFlage)
{
pDC->SelectObject(pen);
}
pDC->Polyline(pPointArrayL, theApp.m_nTimer);
}
else if (theApp.m_strModeApp == "CH2")
{
if (!m_bPrintFlage)
{
pDC->SelectObject(pen1);
}
pDC->Polyline(pPointArrayR, theApp.m_nTimer);
}
}
theApp.m_count = 0;
}
void CGraphisc::SaveWave(CString str)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -