www.pudn.com > bitmappaint.rar > radarView.cpp
// radarView.cpp : implementation of the CRadarView class
//
#include "stdafx.h"
#include "radar.h"
#include "radarDoc.h"
#include "radarView.h"
#include "wzdbtmap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRadarView
IMPLEMENT_DYNCREATE(CRadarView, CScrollView)
BEGIN_MESSAGE_MAP(CRadarView, CScrollView)
//{{AFX_MSG_MAP(CRadarView)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
ON_COMMAND(ID_HLONG, OnHLong)
ON_COMMAND(ID_HSHORT, OnHShort)
ON_COMMAND(ID_VLONG, OnVLong)
ON_UPDATE_COMMAND_UI(ID_HLONG, OnUpdateHlong)
ON_COMMAND(ID_VSHORT, OnVShort)
ON_UPDATE_COMMAND_UI(ID_HSHORT, OnUpdateHshort)
ON_UPDATE_COMMAND_UI(ID_VLONG, OnUpdateVlong)
ON_UPDATE_COMMAND_UI(ID_VSHORT, OnUpdateVshort)
ON_COMMAND(ID_IMAGE_SAVE, OnImageSave)
//}}AFX_MSG_MAP
// Standard printing commands
//ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
//ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
ON_MESSAGE(WM_USERAPPLY,OnUserApply)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRadarView construction/destruction
CRadarView::CRadarView():m_para("")
{
// TODO: add construction code here
bb.m_BitRect.SetRect(0,0,1600,1400);
m_BkColor=RGB(255,255,255);
m_WaveColor=RGB(0,0,0);
m_bBitmapIsNone=true;
m_bShowWaveLine=true;
m_bFillRight=true;
m_bFillLeft=false;
m_nLeftx=300;
m_nLefty=300;
m_nRightx=300;
m_nRighty=100;
m_nTraceToTrace=20;
m_nTraceWidth=40;
m_nTraceFrom=1;
m_nTraceTo=50;
m_nTimeFrom=0;
m_nTimeTo=400;
m_nMaxMin=30000;
m_nGrayFrom=30;
m_nGrayTo=250;
m_nVAxisLength=1000;
m_nHAxisLength=m_nTraceToTrace*49;
m_para.m_page1.m_GainSelect=1;
m_para.m_page1.m_nSECAbsorb=3;
m_para.m_page1.m_nAGCMaxGain=200;
m_para.m_page1.m_nSECMaxGain=200;
m_para.m_page1.m_fGainVelocity=0.1f;
m_para.m_page1.m_fPusleNumber=1;
m_para.m_page1.m_nCONGain=200;
m_para.m_page3.m_LeftAxis=0;
m_para.m_page3.m_RightAxis=1;
m_para.m_page3.m_fLeftx=3.00f;
m_para.m_page3.m_fLefty=3.00f;
m_para.m_page3.m_fRightx=3.00f;
m_para.m_page3.m_fRighty=1.00f;
m_para.m_page3.m_fTraceToTrace=0.20f;
m_para.m_page3.m_nTimeFrom=0;
m_para.m_page3.m_nTimeTo=400;
m_para.m_page3.m_nTraceFrom=1;
m_para.m_page3.m_nTraceTo=50;
m_para.m_page3.m_fTraceWidth=0.4f;
m_para.m_page3.m_fVAxisLength=10.0f;
m_para.m_page3.m_fHAxisLength=m_nHAxisLength/100.0f;
m_para.m_page4.m_DisplaySelect=0;
m_para.m_page4.m_FillSelect=1;
m_para.m_page4.m_GraySelect=1;
m_para.m_page4.m_DisplayWave=true;
m_para.m_page4.m_nMaxMinGray=m_nMaxMin;
m_para.m_page4.m_nGrayFrom=m_nGrayFrom;
m_para.m_page4.m_nGrayTo=m_nGrayTo;
m_para.m_page5.m_fVelocity=0.1f;
m_para.SetTitle("参数设置");
}
CRadarView::~CRadarView()
{
}
BOOL CRadarView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CRadarView drawing
void CRadarView::OnDraw(CDC* pDC)
{
CRadarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SetMapMode(MM_LOMETRIC);
CRect rect1;
rect1=bb.m_BitRect;
pDC->LPtoDP(&rect1);
CSize size(rect1.Width(),-rect1.Height());
if(pDoc->m_bFileOpened==true)
{
if( m_nTraceFrom<1 || m_nTraceTo> pDoc->m_nTotalTraceNumber
|| m_nTraceFrom>m_nTraceTo)
{
m_nTraceFrom=1;
m_para.m_page3.m_nTraceFrom=1;
}
if(m_nTraceTo<1 || m_nTraceTo>pDoc->m_nTotalTraceNumber)
{
m_nTraceTo=pDoc->m_nTotalTraceNumber;
m_para.m_page3.m_nTraceTo=m_nTraceTo;
}
if(m_nTimeFrom<0 || m_nTimeFrom>int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime)
|| m_nTimeFrom>m_nTimeTo)
{
m_nTimeFrom=0;
m_para.m_page3.m_nTimeFrom=0;
}
if(m_nTimeTo<0|| m_nTimeTo>int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime))
{
m_nTimeTo=int(pDoc->m_nTimeWindow-pDoc->m_nTimeZeroPoint*pDoc->m_fSampleTime);
m_para.m_page3.m_nTimeTo=m_nTimeTo;
}
m_nPointFrom=int(m_nTimeFrom/pDoc->m_fSampleTime);
m_nPointTo=int(m_nTimeTo/pDoc->m_fSampleTime);
PointStep=float(m_nVAxisLength)/(m_nPointTo-m_nPointFrom);
if(m_bBitmapIsNone==true)
{
//创建空位图
bb.CreateBitmapEx(size);//创建位图大小
CBrush brush;
brush.CreateSolidBrush(m_BkColor);
bb.GetDC()->FillRect(CRect(0,0,size.cx,size.cy),&brush);
bb.GetDC()->SetMapMode(MM_LOMETRIC);
CPen Pen(NULL,1,m_WaveColor);
bb.GetDC()->SelectObject(&Pen);
//自画位图
switch(m_para.m_page4.m_DisplaySelect)
{
case 0: ShowWave(bb.GetDC()); break;
case 1: ShowGray(bb.GetDC()); break;
case 2: ShowColor(bb.GetDC());break;
}
bb.PrepareBitmap();//把内存环境的屏幕像素转化到位图中
bb.SaveBitmap("book2.bmp");
m_bBitmapIsNone=false;
}
CDC dcComp;
dcComp.CreateCompatibleDC(pDC);
dcComp.SelectObject(&bb);
// draw bitmap
CRect rect2(0,0,bb.m_Width,bb.m_Height);
pDC->DPtoLP(&rect2);
pDC->StretchBlt(0,0,rect2.Width(),rect2.Height(), &dcComp, 0,0,size.cx,size.cy,SRCCOPY);
}
}
void CRadarView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = 2000;
sizeTotal.cy = 1000;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CRadarView printing
BOOL CRadarView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CRadarView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CRadarView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CRadarView diagnostics
#ifdef _DEBUG
void CRadarView::AssertValid() const
{
CScrollView::AssertValid();
}
void CRadarView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CRadarDoc* CRadarView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRadarDoc)));
return (CRadarDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRadarView message handlers
void CRadarView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(GetDocument()->m_bFileOpened==false)
{
AfxMessageBox("请先输入文件!");
}
else
{
m_para.DoModal();
}
CScrollView::OnRButtonDown(nFlags, point);
}
LRESULT CRadarView::OnUserApply(WPARAM wParam,LPARAM lParam)
{
int n;
CRadarDoc* pDoc=GetDocument();
n=m_para.m_page1.m_nSECAbsorb;
pDoc->m_fAbsorb=(float)m_para.m_page1.m_nSECAbsorb;
pDoc->m_nAGCMaxGain=m_para.m_page1.m_nAGCMaxGain;
pDoc->m_nSECMaxGain=m_para.m_page1.m_nSECMaxGain;
pDoc->m_fPusleNumber=m_para.m_page1.m_fPusleNumber;
pDoc->m_nCONGain=m_para.m_page1.m_nCONGain;
pDoc->m_fGainVelocity=m_para.m_page1.m_fGainVelocity;
pDoc->m_nPointAverage=m_para.m_page2.m_nPointAverage;
pDoc->m_nTraceAverage=m_para.m_page2.m_nTraceAverage;
m_nLeftx=int(m_para.m_page3.m_fLeftx*100);
m_nLefty=int(m_para.m_page3.m_fLefty*100);
m_nRightx=int(m_para.m_page3.m_fRightx*100);
m_nRighty=int(m_para.m_page3.m_fRighty*100);
m_nTraceToTrace=int(m_para.m_page3.m_fTraceToTrace*100);
m_nVAxisLength=int(m_para.m_page3.m_fVAxisLength*100);
m_nTraceFrom=m_para.m_page3.m_nTraceFrom;
m_nTraceTo=m_para.m_page3.m_nTraceTo;
m_nTimeFrom=m_para.m_page3.m_nTimeFrom;
m_nTimeTo=m_para.m_page3.m_nTimeTo;
m_nHAxisLength=m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom);
m_para.m_page3.m_fHAxisLength=m_nHAxisLength/100.0f;
m_nTraceWidth=int(m_para.m_page3.m_fTraceWidth*100);
m_nMaxMin=m_para.m_page4.m_nMaxMinGray;
switch(m_para.m_page4.m_FillSelect)
{
case 0: m_bFillLeft=true; m_bFillRight=false; break;
case 1: m_bFillRight=true; m_bFillLeft=false; break;
case 2: m_bFillLeft=false; m_bFillRight=false; break;
}
m_bShowWaveLine=m_para.m_page4.m_DisplayWave;
m_nGrayFrom=m_para.m_page4.m_nGrayFrom;
m_nGrayTo=m_para.m_page4.m_nGrayTo;
bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom),
m_nLefty+m_nRighty+m_nVAxisLength);
pDoc->m_fVelocity=m_para.m_page5.m_fVelocity;
bb.DeleteObject();
m_bBitmapIsNone=true;
Invalidate(true);
return 0;
}
void CRadarView::ShowWave(CDC *pDC)
{
CRadarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int i,j;
int x0,y0,x1,y1,x2;
CPoint pt[4];
bool onefill,twofill,threefill;
CBrush brush(m_WaveColor);
pDC->SelectObject(&brush);
CPen Pen(NULL,1,m_WaveColor);
pDC->SelectObject(&Pen);
short* seis=new short[pDoc->m_nPtsOfTrace];
for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++)
seis[j]=pDoc->Data[i][j];
if(pDoc->m_nTraceAverage!=1)
{ pDoc->TraceAverage(seis,i,pDoc->m_nTraceAverage);}
if(pDoc->m_nPointAverage!=1)
{ pDoc->PointAverage(seis,pDoc->m_nPointAverage);}
switch(m_para.m_page1.m_GainSelect)
{
case 0: pDoc->AGCGain(seis); break;
case 1: pDoc->SECGain(seis); break;
case 2: pDoc->CONGain(seis); break;
case 3: break;
case 4: break;
default: break;
}
x0=m_nLeftx+(i-m_nTraceFrom)*m_nTraceToTrace+
m_nTraceWidth/2+m_nTraceToTrace;
y0=-m_nLefty;
for(j=m_nPointFrom+pDoc->m_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++)
{
// /* ***画波线*** */
if(m_bShowWaveLine)
{
x1=seis[j];
if(j+1>pDoc->m_nPtsOfTrace) x2=0;
x2=seis[j+1];
if(j==m_nPointFrom+pDoc->m_nTimeZeroPoint)
{
x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767);
y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pDC->MoveTo(x1,y1);
}
if((x1>0&&x2<0)||(x1<0&&x2>0))
{
x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767);
y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pDC->LineTo(x1,y1);
if(j!=m_nPointTo+pDoc->m_nTimeZeroPoint)
{ x1=x0; y1=y1-int(PointStep*0.5);
pDC->LineTo(x1,y1);
}
}
else
{
x1=x0+int(seis[j]*m_nTraceWidth*0.5/32767);
y1=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pDC->LineTo(x1,y1);
}
}
/* ***画波线*** */
/* ***填充波*** */
if(m_bFillRight==true||m_bFillLeft==true)
{
if(j==m_nPointTo+pDoc->m_nTimeZeroPoint) break;
x1=seis[j];
x2=seis[j+1];
if(m_bFillRight==true) {
onefill=(x1>=0&&x2>=0);
twofill=(x1>0&&x2<0);
threefill=(x1<0&&x2>0);
}
if(m_bFillLeft==true) {
onefill=(x1<=0&&x2<=0);
twofill=(x1<0&&x2>0);
threefill=(x1>0&&x2<0);
}
if(onefill)
{
pt[0].x=x0;
pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pt[1].x=x0+int(seis[j]*m_nTraceWidth*0.5/32767);
pt[1].y=pt[0].y;
pt[2].x=x0+int(seis[j+1]*m_nTraceWidth*0.5/32767);
pt[2].y=int(pt[1].y-PointStep);
pt[3].x=x0;
pt[3].y=pt[2].y;
pDC->Polygon(pt,4);
}
if(twofill)
{
pt[0].x=x0;
pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pt[1].x=x0+int(seis[j]*m_nTraceWidth*0.5/32767);
pt[1].y=pt[0].y;
pt[2].x=x0;
pt[2].y=int(pt[1].y-PointStep/2);
pt[3].x=x0;
pt[3].y=pt[2].y;
pDC->Polygon(pt,4);
}
if(threefill)
{
pt[0].x=x0;
pt[0].y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep+PointStep/2);
pt[1].x=x0;
pt[1].y=pt[0].y;
pt[2].x=x0+int(seis[j+1]*m_nTraceWidth*0.5/32767);
pt[2].y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
pt[3].x=x0;
pt[3].y=pt[2].y;
pDC->Polygon(pt,4);
}
}
/* ***填充波*** */
}//点循环
}//道循环
delete []seis;
}
void CRadarView::ShowGray(CDC *pDC)
{
CRadarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int i,j,n,m;
int top,bottom,right,left;
int x0,y0,f,f1,f2,f3,f4;
float u,v;
float MaxMin;
short** seis;
CPoint pt;
CRect rect;
if(m_nTraceTo==m_nTraceFrom) return ;
seis=pDoc->Create2DShortArray(m_nTraceTo-m_nTraceFrom+1,pDoc->m_nPtsOfTrace);
for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++)
{
seis[i-m_nTraceFrom+1][j]=pDoc->Data[i][j];
}
if(pDoc->m_nTraceAverage!=1)
pDoc->TraceAverage(seis[i-m_nTraceFrom+1],i,pDoc->m_nTraceAverage);
if(pDoc->m_nPointAverage!=1)
pDoc->PointAverage(seis[i-m_nTraceFrom+1],pDoc->m_nPointAverage);
switch(m_para.m_page1.m_GainSelect)
{
case 0: pDoc->AGCGain(seis[i-m_nTraceFrom+1]); break;
case 1: pDoc->SECGain(seis[i-m_nTraceFrom+1]); break;
case 2: pDoc->CONGain(seis[i-m_nTraceFrom+1]); break;
case 3: break;
case 4: break;
default: break;
}
}
for(i=0;im_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++)
{
///* ***画灰度***
rect.TopLeft().y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
rect.BottomRight().y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
rect.TopLeft().x=x0;
rect.BottomRight().x=x0+m_nTraceToTrace;
pDC->LPtoDP(&rect);
top=rect.TopLeft().y;
bottom=rect.BottomRight().y;
left=rect.TopLeft().x;
right=rect.BottomRight().x;
MaxMin=m_nMaxMin/32767.0f;
f1= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i][j]/32767.0f); //top left
f2= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i+1][j]/32767.0f); //top right
f3= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i][j+1]/32767.0f); //bottom left
f4= PointGrayValue(m_nGrayFrom,m_nGrayTo,MaxMin,seis[i+1][j+1]/32767.0f); //bottom right
for(n=left;n<=right;n++)
{
for(m=top;m<=bottom;m++)
{
if(right-left==0||bottom-top==0)continue;
u=(float)(n-left)/(right-left);
v=(float)(m-top)/(bottom-top);
f=int((1-u)*(1-v)*f1+(1-u)*v*f3+u*(1-v)*f2+u*v*f4);
pt.x=n; pt.y=m;
pDC->DPtoLP(&pt);
pDC->SetPixelV(pt,RGB(f,f,f));
}
}
// ***画灰度***
}//点循环
}//道循环
delete []seis;
}
void CRadarView::ShowColor(CDC *pDC)
{
CRadarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int i,j,n,m;
int top,bottom,right,left;
int x0,y0;
float f,f1,f2,f3,f4;
float u,v;
short** seis;
COLORREF rgb;
CPoint pt;
CRect rect;
if(m_nTraceTo==m_nTraceFrom) return ;
seis=pDoc->Create2DShortArray(m_nTraceTo-m_nTraceFrom+1,pDoc->m_nPtsOfTrace);
for(i=m_nTraceFrom-1;im_nPtsOfTrace;j++)
{
seis[i-m_nTraceFrom+1][j]=pDoc->Data[i][j];
}
if(pDoc->m_nTraceAverage!=1)
pDoc->TraceAverage(seis[i-m_nTraceFrom+1],i,pDoc->m_nTraceAverage);
if(pDoc->m_nPointAverage!=1)
pDoc->PointAverage(seis[i-m_nTraceFrom+1],pDoc->m_nPointAverage);
switch(m_para.m_page1.m_GainSelect)
{
case 0: pDoc->AGCGain(seis[i-m_nTraceFrom+1]); break;
case 1: pDoc->SECGain(seis[i-m_nTraceFrom+1]); break;
case 2: pDoc->CONGain(seis[i-m_nTraceFrom+1]); break;
case 3: break;
case 4: break;
default: break;
}
}
for(i=0;im_nTimeZeroPoint;j<=m_nPointTo+pDoc->m_nTimeZeroPoint;j++)
{
///* ***画伪色***
rect.TopLeft().y=y0-int((j-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
rect.BottomRight().y=y0-int((j+1-m_nPointFrom-pDoc->m_nTimeZeroPoint)*PointStep);
rect.TopLeft().x=x0;
rect.BottomRight().x=x0+m_nTraceToTrace;
pDC->LPtoDP(&rect);
top=rect.TopLeft().y;
bottom=rect.BottomRight().y;
left=rect.TopLeft().x;
right=rect.BottomRight().x;
f1=seis[i][j]/32767.0f; //top left
f2=seis[i+1][j]/32767.0f; //top right
f3=seis[i][j+1]/32767.0f; //bottom left
f4=seis[i+1][j+1]/32767.0f; //bottom right
for(n=left;n<=right;n++)
{
for(m=top;m<=bottom;m++)
{
if(right-left==0||bottom-top==0)continue;
u=(float)(n-left)/(right-left);
v=(float)(m-top)/(bottom-top);
f=(1-u)*(1-v)*f1+(1-u)*v*f3+u*(1-v)*f2+u*v*f4;
rgb=RGB(PointRedValue(f),PointGreenValue(f),PointBlueValue(f));
pt.x=n; pt.y=m;
pDC->DPtoLP(&pt);
pDC->SetPixelV(pt,rgb);//
}
}
// ***画伪色***
}//点循环
}//道循环
delete []seis;
}
int CRadarView::PointGrayValue(int m_nGrayFrom,int m_nGrayTo,float MaxMin,float ptValue)
{
int PtGrayValue;
if(ptValue>MaxMin)
{
PtGrayValue=m_nGrayTo;
}
else if(ptValue<-MaxMin)
{
PtGrayValue=m_nGrayFrom;
}
else
{
PtGrayValue=int((m_nGrayTo-m_nGrayFrom)*(ptValue+MaxMin)*0.5/MaxMin)+m_nGrayFrom;
}
return PtGrayValue;
}
int CRadarView::PointRedValue(float ptValue)
{
int RedValue;
if(ptValue<0)
{
RedValue=0;
}
else if(ptValue>0.5)
{
RedValue=255;
}
else
{
RedValue=int(510*ptValue);
}
return RedValue;
}
int CRadarView::PointGreenValue(float ptValue)
{
int GreenValue;
if(ptValue<-0.5)
{
GreenValue=int(510*(ptValue));
}
else if(ptValue>0.5)
{
GreenValue=int(510*(1-ptValue));
}
else
{
GreenValue=255;
}
return GreenValue;
}
int CRadarView::PointBlueValue(float ptValue)
{
int BlueValue;
if(ptValue<-0.5)
{
BlueValue=255;
}
else if(ptValue>0)
{
BlueValue=0;
}
else
{
BlueValue=int(-510*ptValue);
}
return BlueValue;
}
void CRadarView::OnFilePrint()
{
// TODO: Add your command handler code here
CScrollView::OnFilePrint();
}
void CRadarView::OnFilePrintPreview()
{
// TODO: Add your command handler code here
CScrollView::OnFilePrintPreview();
}
void CRadarView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
if(!m_bBitmapIsNone)
{
pDC->SetMapMode(MM_LOMETRIC);
bb.Print(pDC);
}
CScrollView::OnPrint(pDC, pInfo);
}
void CRadarView::OnHLong()
{
// TODO: Add your command handler code here
m_nTraceToTrace=m_nTraceToTrace+5;
m_nTraceWidth=2*5+m_nTraceWidth;
m_para.m_page3.m_fTraceToTrace=m_nTraceToTrace/100.0f;
m_para.m_page3.m_fTraceWidth=m_nTraceWidth/100.0f;
m_bBitmapIsNone=true;
bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom),
m_nLefty+m_nRighty+m_nVAxisLength);
bb.DeleteObject();
Invalidate();
}
void CRadarView::OnHShort()
{
// TODO: Add your command handler code here
m_nTraceToTrace=m_nTraceToTrace-5;
m_nTraceWidth=m_nTraceWidth-2*5;
m_para.m_page3.m_fTraceToTrace=m_nTraceToTrace/100.0f;
m_para.m_page3.m_fTraceWidth=m_nTraceWidth/100.0f;
m_bBitmapIsNone=true;
bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom),
m_nLefty+m_nRighty+m_nVAxisLength);
bb.DeleteObject();
Invalidate();
}
void CRadarView::OnVLong()
{
// TODO: Add your command handler code here
m_nVAxisLength=m_nVAxisLength+200;
m_para.m_page3.m_fVAxisLength=m_nVAxisLength/100.0f;
m_bBitmapIsNone=true;
bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom),
m_nLefty+m_nRighty+m_nVAxisLength);
bb.DeleteObject();
Invalidate();
}
void CRadarView::OnUpdateHlong(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(GetDocument()->m_bFileOpened);
}
void CRadarView::OnVShort()
{
// TODO: Add your command handler code here
m_nVAxisLength=m_nVAxisLength-200;
m_para.m_page3.m_fVAxisLength=m_nVAxisLength/100.0f;
m_bBitmapIsNone=true;
bb.m_BitRect.SetRect(0,0,m_nLeftx+m_nRightx+m_nTraceWidth+m_nTraceToTrace*(m_nTraceTo-m_nTraceFrom),
m_nLefty+m_nRighty+m_nVAxisLength);
bb.DeleteObject();
Invalidate();
}
void CRadarView::OnUpdateHshort(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(GetDocument()->m_bFileOpened);
}
void CRadarView::OnUpdateVlong(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(GetDocument()->m_bFileOpened);
}
void CRadarView::OnUpdateVshort(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(GetDocument()->m_bFileOpened);
}
void CRadarView::OnImageSave()
{
// TODO: Add your command handler code here
CString SaveFile;
CFileDialog dlg(false,"dt1","*.bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"data Files(*.bmp)|*.bmp||");
if(!m_bBitmapIsNone)
{
if(dlg.DoModal()==IDOK)
{
SaveFile=dlg.GetPathName();
bb.SaveBitmap(SaveFile);
}
}
}