📄 prnregister.cpp
字号:
// PRNRegister.cpp: implementation of the CPRNRegister class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GSV.h"
#include "GSVDoc.h"
#include "GSVView.h"
#include "PRNRegister.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define TECrx 23
CPRNRegister::CPRNRegister()
{
for(int i=0;i<=GPSSATMAXNUMBER;i++)
{
gs.SatSheet[i].Being=FALSE;
gs.SatSheet[i].ContinueTime=0;
gs.SatSheet[i].pL1=NULL;
gs.SatSheet[i].pL2=NULL;
gs.SatSheet[i].PRN=i;
gs.SatSheet[i].SumATec=0;
gs.SatSheet[i].SumPTec=0;
gs.SatSheet[i].AverATec=0;
gs.SatSheet[i].AverPTec=0;
gs.SatSheet[i].nCountInAverageT=0;
gs.SatSheet[i].azimuth=0;
gs.SatSheet[i].elev=0;
}
SetTimePar(2,60);
m_nGpsLock=0;
TableX=10;
TableY=120;
deltL1L2=100;
widthTableCol=70;
widthTableRow=2*deltL1L2+80;
widthDeltRow=30;
nColumn=12;
nRow=2;
linespace=20;
widthRowSpecified=45;
nChannel=12;
pfont_range=NULL;
pfont_tec=NULL;
LOGFONT d_lf ;
memset(&d_lf, 0, sizeof(LOGFONT));
lstrcpy(d_lf.lfFaceName, "Times New Roman") ;
d_lf.lfHeight=12;
d_lf.lfWidth=0;
d_lf.lfWeight=FW_BLACK ;
// d_lf.lfStrikeOut =TRUE;
d_lf.lfCharSet =GB2312_CHARSET;
pfont_range=new CFont();
pfont_range->CreateFontIndirect(&d_lf);
pfont_tec=new CFont();
pfont_tec->CreateFontIndirect(&d_lf);
}
CPRNRegister::~CPRNRegister()
{
ClearMem();
delete pfont_range;
delete pfont_tec;
}
BOOL CPRNRegister::GPSRegister(VARIABLE_RANGE *pRg)
{
unsigned long _L1_L2;
unsigned long CH_number;
long CH_N;
_L1_L2=0x00200000&pRg->ch_tr_status;
CH_number=0x000003E0&pRg->ch_tr_status;
CH_number=CH_number>>5;
CH_N=CH_number;
if(pRg->PRN>32)
{
gs.SatSheet[0].PRN=pRg->PRN;
gs.SatSheet[0].Being=TRUE;
gs.SatSheet[0].pL1=new VARIABLE_RANGE;
(*gs.SatSheet[0].pL1)=*pRg;
}
else
{
if(gs.SatSheet[pRg->PRN].Being==FALSE)
gs.SatSheet[pRg->PRN].Being=TRUE;
if(_L1_L2==0x00000000)
{
gs.SatSheet[pRg->PRN].pL1 = new VARIABLE_RANGE;
(*gs.SatSheet[pRg->PRN].pL1)=*pRg;
}
else if(_L1_L2==0x00200000)
{
gs.SatSheet[pRg->PRN].pL2 = new VARIABLE_RANGE;
(*gs.SatSheet[pRg->PRN].pL2)=*pRg;
}
/*
psr : 载波相位
adr : 伪距测量码
typedef struct PRN_REGISTER
{
unsigned short PRN;
unsigned long ContinueTime;
BOOL Being;
VARIABLE_RANGE *pL1;
VARIABLE_RANGE *pL2;
double psrTEC;
double adrTEC;
double SumPTec;
double SumATec;
double AverPTec;
double AverATec;
int nCountInAverageT;
unsigned short elev;
unsigned short azimuth;
} PRN_REGISTER;
*/
if((gs.SatSheet[pRg->PRN].pL1!=NULL)&&(gs.SatSheet[pRg->PRN].pL2!=NULL))
{
gs.SatSheet[pRg->PRN].adrTEC=1.80585*(gs.SatSheet[pRg->PRN].pL1->adr-1.2833*gs.SatSheet[pRg->PRN].pL2->adr);
gs.SatSheet[pRg->PRN].psrTEC=TECrx+-9.483*(gs.SatSheet[pRg->PRN].pL1->psr-gs.SatSheet[pRg->PRN].pL2->psr);
gs.SatSheet[pRg->PRN].SumATec=gs.SatSheet[pRg->PRN].SumATec+gs.SatSheet[pRg->PRN].adrTEC;
gs.SatSheet[pRg->PRN].SumPTec=gs.SatSheet[pRg->PRN].SumPTec+gs.SatSheet[pRg->PRN].psrTEC;
gs.SatSheet[pRg->PRN].nCountInAverageT=gs.SatSheet[pRg->PRN].nCountInAverageT+1;
}
}
return TRUE;
}
void CPRNRegister::ClearMem()
{
for(int i=0;i<=GPSSATMAXNUMBER;i++)
{
if(gs.SatSheet[i].pL1!=NULL)
{ delete gs.SatSheet[i].pL1;
gs.SatSheet[i].pL1=NULL;
}
if(gs.SatSheet[i].pL2!=NULL)
{ delete gs.SatSheet[i].pL2;
gs.SatSheet[i].pL2=NULL;
}
gs.SatSheet[i].Being=FALSE;
}
}
void CPRNRegister::ClearAverageTec()
{
for(int i=0;i<=GPSSATMAXNUMBER;i++)
{
gs.SatSheet[i].AverATec=gs.SatSheet[i].SumATec/gs.SatSheet[i].nCountInAverageT;
gs.SatSheet[i].AverPTec=gs.SatSheet[i].SumPTec/gs.SatSheet[i].nCountInAverageT;
gs.SatSheet[i].SumATec=0;
gs.SatSheet[i].SumPTec=0;
gs.SatSheet[i].nCountInAverageT=0;
}
}
BOOL CPRNRegister::SetGsHead(VBINARY_HEADER *phdr)
{
Timer=Timer+1;
if(Timer==NsamplePoint)
{
// CGSVDoc* pdoc=(CGSVDoc*)m_pDoc;
// POSITION pos = pdoc->GetFirstViewPosition();
// CGSVView* pFirstView = (CGSVView*)pdoc->GetNextView( pos );
// pFirstView->Invalidate();
Timer=0;
ClearAverageTec();
}
ClearMem();
gs.hdr=*phdr;
return TRUE;
}
void CPRNRegister::DrawRangeCon()
{
unsigned long CH_number;
long CH_N;
int x;
int y;
for(int j=0;j<=GPSSATMAXNUMBER;j++)
{
if(gs.SatSheet[j].pL1!=NULL)
{
CH_number=0x000003E0&gs.SatSheet[j].pL1->ch_tr_status;
CH_number=CH_number>>5;
CH_N=CH_number;
x=TableX+widthRowSpecified+widthTableCol*(CH_N%nColumn);
y=TableY+(widthTableRow+widthDeltRow)*((int)CH_N/nColumn);
DrawRangeCell(x, y, widthTableCol, deltL1L2, gs.SatSheet[j].pL1);
}
if(gs.SatSheet[j].pL2!=NULL)
{
CH_number=0x000003E0&gs.SatSheet[j].pL2->ch_tr_status;
CH_number=CH_number>>5;
CH_N=CH_number;
x=TableX+widthRowSpecified+widthTableCol*(CH_N%nColumn);
y=TableY+(widthTableRow+widthDeltRow)*((int)CH_N/nColumn);
y=y+deltL1L2;
DrawRangeCell(x, y, widthTableCol, deltL1L2, gs.SatSheet[j].pL2);
}
}
}
void CPRNRegister::DrawRange(CDC *pDC)
{
m_pDC=pDC;
m_pDC->SelectObject(pfont_range);
int Labley=TableY+40;
int xSpe=30;
int ySpe=TableY;
for(int i=0;i<nRow;i++)
{
COLORREF oldTx=m_pDC->SetTextColor(RGB(250,150,0));
m_pDC->TextOut(TableX,Labley,"L1");
Labley=Labley+deltL1L2;
m_pDC->TextOut(TableX,Labley,"L2");
Labley=Labley+(widthDeltRow+deltL1L2);
m_pDC->SetTextColor(oldTx);
DrawRangeSpe(xSpe,ySpe,widthRowSpecified-xSpe,deltL1L2);
ySpe=ySpe+deltL1L2;
DrawRangeSpe(xSpe,ySpe,widthRowSpecified-xSpe,deltL1L2);
ySpe=ySpe+(widthDeltRow+deltL1L2);
}
for(int channel=0;channel<nChannel;channel++)
{
char buffer1[15]="CHANNEL: ";
char buffer2[5];
sprintf( buffer2,"%2d",channel);
lstrcat( buffer1, buffer2 );
xSpe=TableX+widthRowSpecified+widthTableCol*(channel%nColumn);
ySpe=TableY+(widthTableRow+widthDeltRow)*((int)channel/nColumn);
int x=xSpe+2;
int y=ySpe+2;
int deltx=widthTableCol-2-1;
int delty=widthTableRow-2-1;
int x3=x+deltx;
int y3=y+delty;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x3,y);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x,y3);
m_pDC->LineTo(x,y);
xSpe=xSpe+widthTableCol/3;
ySpe=ySpe-3*widthDeltRow/5;
m_pDC->TextOut(xSpe,ySpe,buffer1);
}
DrawRangeCon();
}
void CPRNRegister::DrawRangeSpe(int x, int y, int width, int height)
{
int vacancy=2;
int delt1_2=0;
x=x+5;
y=y+5;
m_pDC->TextOut( x , y , "PRN :");
y=y+linespace+delt1_2;
m_pDC->TextOut( x , y , "psr :");
y=y+linespace;
m_pDC->TextOut( x , y , "adr :");
y=y+linespace;
m_pDC->TextOut( x , y , "dopp:");
y=y+linespace;
m_pDC->TextOut( x , y , "CN0 :");
}
void CPRNRegister::DrawRangeCell(int x, int y, int width, int height, VARIABLE_RANGE *pRange)
{
int vacancy=2;
int delt1_2=0;
int snap_to_decimal1=30;
int snap_to_decimal2=42;
x=x+vacancy;
y=y+vacancy;
int deltx=width-vacancy-1;
int delty=height-vacancy-1;
int x3=x+deltx;
int y3=y+delty;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x3,y);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x,y3);
m_pDC->LineTo(x,y);
x=x+vacancy;
y=y+vacancy;
char buffer[50];
COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));
sprintf( buffer,"%5u",pRange->PRN );
m_pDC->TextOut( x , y , buffer);
m_pDC->SetTextColor(RGB(0,0,250));
y=y+linespace+delt1_2;
sprintf( buffer,"%15.3f",pRange->psr );
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%15.3f",pRange->adr );
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%10.3f",pRange->Dopp );
m_pDC->TextOut( x+snap_to_decimal1 , y , buffer);
y=y+linespace;
sprintf( buffer,"%6.1f",pRange->CN0 );
m_pDC->TextOut( x+snap_to_decimal2 , y , buffer);
m_pDC->SetTextColor(oldTx);
}
void CPRNRegister::DrawTec(CDC *pDC)
{
m_pDC=pDC;
m_pDC->SelectObject(pfont_tec);
DrawTecGrid();
DrawTecCon();
DrawTecSpe();
Draw134Gps();
}
void CPRNRegister::DrawTecSpe()
{
int vacancy=2;
int delt1_2=0;
int x=0;
int y=0;
x=x+vacancy;
y=y+vacancy;
int deltx=widthRowSpecified;
int delty=deltL1L2+40;
COLORREF oldTx=m_pDC->SetTextColor(RGB(250,250,0));
div_t div_result;
div_result = div( m_nGpsLock, nColumn );
if(div_result.rem>0)
div_result.quot++;
for(int i=0;i<div_result.quot;i++)
{
x=TableX+5;
y=TableY+5+(deltL1L2+40+widthDeltRow)*i;
/* int x3=x+deltx-5;
int y3=y+delty-5;
m_pDC->MoveTo(x-5,y-2.5);
m_pDC->LineTo(x3,y-2.5);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x-5,y3);
m_pDC->LineTo(x-5,y-2.5);
*/
m_pDC->TextOut( x , y , "PRN ");
/* y=y+linespace+delt1_2;
m_pDC->TextOut( x , y , "psrTEC ");
y=y+linespace;
m_pDC->TextOut( x , y , "adrTEC ");
*/
y=y+linespace;
m_pDC->TextOut( x , y , "dopp");
y=y+linespace;
m_pDC->TextOut( x , y , "CN0 ");
y=y+linespace;
m_pDC->TextOut( x , y , "ATEC");
y=y+linespace;
m_pDC->TextOut( x , y , "RTEC");
y=y+linespace;
m_pDC->TextOut( x , y , "az");
y=y+linespace;
m_pDC->TextOut( x , y , "el");
y=y+linespace;
m_pDC->TextOut( x , y , "S4");
y=y+linespace;
m_pDC->TextOut( x , y , "δφ");
}
m_pDC->SetTextColor(oldTx);
}
void CPRNRegister::DrawTecCon()
{
int nGps=0;
int x=0;
int y=0;
// DrawTecCell(500,10,widthTableCol,deltL1L2+40,&gs.SatSheet[0]);
for(int i=1;i<=GPSSATMAXNUMBER;i++)
{
if(gs.SatSheet[i].Being==TRUE)
{
x=TableX+widthRowSpecified+widthTableCol*(nGps%nColumn);
y=TableY+(deltL1L2+40+widthDeltRow)*((int)nGps/nColumn);
DrawTecCell(x,y,widthTableCol,deltL1L2+40,&gs.SatSheet[i]);
nGps=nGps+1;
}
}
m_nGpsLock=nGps;
}
void CPRNRegister::DrawTecCell(int x, int y, int width, int height, PRN_REGISTER *pPrnReg)
{
int vacancy=2;
int delt1_2=0;
int snap_to_decimal1=0;
int snap_to_decimal2=17;
x=x+vacancy;
y=y+vacancy;
/*
int deltx=width-vacancy-1;
int delty=height-vacancy-1;
int x3=x+deltx;
int y3=y+delty;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x3,y);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x,y3);
m_pDC->LineTo(x,y);
*/
x=x+vacancy;
y=y+vacancy;
char buffer[50];
COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));
sprintf( buffer,"%5u",pPrnReg->PRN );
m_pDC->TextOut( x , y , buffer);
m_pDC->SetTextColor(RGB(200,200,250));
y=y+linespace+delt1_2;
// sprintf( buffer,"%9.3f",pPrnReg->pL1->Dopp );
// m_pDC->TextOut( x , y , buffer);
y=y+linespace;
// sprintf( buffer,"%9.1f",pPrnReg->pL1->CN0 );
// m_pDC->TextOut( x , y , buffer);
if((pPrnReg->pL1!=NULL)&&(pPrnReg->pL2!=NULL))
{
/*
sprintf( buffer,"%11.3f",pPrnReg->psrTEC );
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%11.3f",pPrnReg->adrTEC );
m_pDC->TextOut( x , y , buffer);
*/
y=y+linespace;
sprintf( buffer,"%16.3f",pPrnReg->AverPTec );
CString buf1;
CString buf2;
buf1=buffer;
buf2=buf1.Right(9);
m_pDC->TextOut( x , y , buf2);
y=y+linespace;
sprintf( buffer,"%16.3f",pPrnReg->AverATec );
buf1=buffer;
buf2=buf1.Right(9);
buf2.SetAt(0,' ');
m_pDC->TextOut( x , y , buf2);
}else{
y=y+linespace;
buffer[0]='\0';
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
m_pDC->TextOut( x , y , buffer);
}
y=y+linespace;
sprintf( buffer,"%9u",pPrnReg->azimuth);
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%9u",pPrnReg->elev);
m_pDC->TextOut( x , y , buffer);
m_pDC->SetTextColor(oldTx);
}
BOOL CPRNRegister::SetTimePar(float sampT, int averT)
{
sampleT=sampT;
averageT=averT;
NsamplePoint=(int)averageT/sampleT;
Timer=0;
return TRUE;
}
void CPRNRegister::DrawTecGrid()
{
int x=TableX,y=TableY;
int x3=TableX+widthRowSpecified+11*widthTableCol;
int y3=TableY+widthTableRow-100;
CPen *old , pen(PS_SOLID, 2, RGB(50,150,50)) ;
old = m_pDC->SelectObject(&pen) ;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x3,y);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x,y3);
m_pDC->LineTo(x,y);
CPen pen1(PS_SOLID,2, RGB(50,150,50));
m_pDC->SelectObject(&pen1) ;
x=TableX+widthRowSpecified;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x,y3);
for(int i=0;i<10;i++)
{
x=x+widthTableCol;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x,y3);
}
m_pDC->SelectObject(old) ;
}
BOOL CPRNRegister::SetGpsInf(CArray<VARIABLE_GPGSV, VARIABLE_GPGSV> *pAGpgsv)
{
int lr=pAGpgsv->GetSize();
int index;
if(lr==0)
return FALSE;
for(int i=0;i<lr;i++)
{
if(pAGpgsv->GetAt(i).PRN>200||pAGpgsv->GetAt(i).PRN<0)
return FALSE;
if(pAGpgsv->GetAt(i).PRN>32)
{
gs.SatSheet[0].elev=pAGpgsv->GetAt(i).elev;
gs.SatSheet[0].azimuth=pAGpgsv->GetAt(i).azimuth;
}else{
gs.SatSheet[pAGpgsv->GetAt(i).PRN].elev=pAGpgsv->GetAt(i).elev;
gs.SatSheet[pAGpgsv->GetAt(i).PRN].azimuth=pAGpgsv->GetAt(i).azimuth;
}
}
return TRUE;
}
void CPRNRegister::Draw134Gps()
{
int x=500,y=10;
PRN_REGISTER *pPrnReg=&gs.SatSheet[0];
int vacancy=2;
int delt1_2=0;
int snap_to_decimal1=0;
int snap_to_decimal2=17;
x=x+vacancy;
y=y+vacancy;
int deltx=80;
int delty=100;
int x3=x+deltx;
int y3=y+delty;
CPen *old , pen(PS_SOLID, 2, RGB(50,150,50)) ;
old = m_pDC->SelectObject(&pen) ;
m_pDC->MoveTo(x,y);
m_pDC->LineTo(x3,y);
m_pDC->LineTo(x3,y3);
m_pDC->LineTo(x,y3);
m_pDC->LineTo(x,y);
m_pDC->SelectObject(old) ;
x=x+vacancy;
y=y+vacancy;
char buffer[50];
COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));
sprintf( buffer,"%8u",pPrnReg->PRN );
m_pDC->TextOut( x , y , buffer);
if(pPrnReg->Being==TRUE)
{ m_pDC->SetTextColor(RGB(200,200,250));
y=y+linespace+delt1_2;
sprintf( buffer,"%9.3f",pPrnReg->pL1->Dopp );
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%9.1f",pPrnReg->pL1->CN0 );
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%9u",pPrnReg->azimuth);
m_pDC->TextOut( x , y , buffer);
y=y+linespace;
sprintf( buffer,"%9u",pPrnReg->elev);
m_pDC->TextOut( x , y , buffer);
}
m_pDC->SetTextColor(oldTx);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -