📄 magneticprodoc.cpp
字号:
double fTemp=0.0;
for(int i=0;i<iT0Num;i++)
{
fTemp=fTemp+T0[i];
}
dT0=fTemp/(double)iT0Num;
if(dT0>0.0)
return true;
else
return false;
}
//////////////////////////////////////////////////////////////////////////
///// 处理日变数据,获得日变引起的变化数据 ///////
/////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetRealSunData(SData sArray[], int PN)
{
for(int i=0;i<PN;i++)
{
m_SData[i].mData=sArray[i].mData-dT0;
}
// ASSERT(i==PN);
return true;
}
///////////////////////////////////////////////////////////////////////////
//////////// 查看T0的值 /////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnViewT0()
{
// TODO: Add your command handler code here
if(dT0>1.0) //如果已经获得dT0,直接显示,否则,读取数据文件,计算后显示
{
CString cT0;
cT0.Format("%f",dT0);
AfxMessageBox(cT0);
}
else
{
if(!GetSunT0())
{
AfxMessageBox("ERROR,I can't get the value! ");
}
else
{
CString cT0;
cT0.Format("%f",dT0);
AfxMessageBox(cT0);
}
}
///////////////////////////////////////////////////////////////////////////
if((dT0>1.0 )&&(bRec)&&(!bGetRealSunData))
{
GetRealSunData(m_SData, sPointNum);
bGetRealSunData=true;
}
}
void CMagneticProDoc::OnDrawCMdata()
{
// TODO: Add your command handler code here
}
///////////////////////////////////////////////////////////////////////////////
//////// 获得磁测数据的最大最小值,以便于绘图,如果是区域性的,需要///////////
//////// 手工输入最大最小值,以便于统一绘图!! ///////////////////////
///////////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetGridMaxMinMid(MData fMArray[])
{
int i=0,j=0;
yMMax=yMMin=fMArray[0].mData;
for(i=0;i<mPointNum;i++)
{
if(fMArray[i].mData>yMMax)
yMMax=fMArray[i].mData;
if(fMArray[i].mData<yMMin)
yMMin=fMArray[i].mData;
}
yMMid=(yMMax+yMMin)/2.0;
//yMMid=56500;
//yMMin=56000;
//yMMax=57000;
return true;
}
//////////////////////////////////////////////////////////////////////////////
//////////////// 以下是磁测数据文件数据程序段 //////////////////////
//////////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnOutputMagdata()
{
// TODO: Add your command handler code here
CFileDialog dlg(false,_T("txt"),_T("*.TXT"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("文本文件 (*.TxT)|*.txt|"));
if(dlg.DoModal())
{
GetGridMaxMinMid(m_MData); //获得最大,最小
GetMDataX(m_MData, mPointNum); //调整X
CStdioFile *pFile=new CStdioFile;
CString f1,f2,fTemp="";
fTemp=dlg.GetFileName();
if(fTemp=="")
{
::AfxMessageBox(" The filename is empty!");
}
else
{
pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);
for(int i=0;i<mPointNum;i++)
{
f1.Format("%f",20*(m_MData[i].x-727.5)+1235.356);
f2.Format("%f",20*(m_MData[i].y-674.0)+410.9232);
fTemp=f1+","+f2+"\n";
pFile->WriteString(fTemp);
}
pFile->Close();
::AfxMessageBox("Magnetic Data output successed!");
}
}
}
////////////////////////////////////////////////////////////////////////////
//////////////// 以下是获得磁测数据X值的处理程序段 //////////////////////
////////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::GetMDataX(MData fMData[], int PN) //获得磁测数据X值
{
for(int i=0;i<PN;i++)
{
m_MData[i].x=fMData[i].x+(fMData[i].mData-yMMid)*CO/(yMMax-yMMin);
}
return true;
}
////////////////////////////////////////////////////////////////////////////
//////////////// 以下是磁测日变数据值的处理程序段 /////////////////
////////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnOutputSData()
{
// TODO: Add your command handler code here
CFileDialog dlg(false,_T("sxt"),_T("*.SXT"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("文本文件 (*.sxt)|*.sxt|"));
if(dlg.DoModal())
{
CStdioFile *pFile=new CStdioFile;
CString f1,f2,f3,f4,f5,fTemp="";
int iHour,iMin,iSecond;
//double dTime;
fTemp=dlg.GetFileName();
if(fTemp=="")
{
::AfxMessageBox(" The filename is empty!");
}
else
{
pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);
for(int i=0;i<sPointNum;i++)
{
f1.Format("%5.5f",m_SData[i].mData);
iHour=m_SData[i].sTime.GetHour();
iMin=m_SData[i].sTime.GetMinute();
iSecond=m_SData[i].sTime.GetSecond();
//dTime=(double)iHour+iMin/60.0+iSecond/3600;
//f2.Format("%2.6f",dTime);
f3.Format("%d",iHour);
f4.Format("%d",iMin);
f5.Format("%d",iSecond);
f2=f3+":"+f4+":"+f5;
fTemp=f2+" "+f1+"\n";
pFile->WriteString(fTemp);
}
pFile->Close();
::AfxMessageBox("Real Sun Data output successed!");
}
}
}
///////////////////////////////////////////////////////////////////////////////////
//调用数据交换平台的对话框类,实现数据交换功能!
void CMagneticProDoc::OnExchangExch()
{
// TODO: Add your command handler code here
CDataExPlatFormDialog exdlg;
exdlg.DoModal();
}
////////////////////////////////////////////////////////////////////////////////////
////////// 日变改正程序段 /////////////////
////////////////////////////////////////////////////////////////////////////////////
bool CMagneticProDoc::DayChangRectification(MData mData[], SData sData[])
{
int i=0,j=0,k=0;
try{
for(i=0;i<mPointNum;i++)
for(j=k;j<sPointNum-1;j++)
{
if(mData[i].mTime>sData[j].sTime&&mData[i].mTime<sData[j+1].sTime)
{
m_MData[i].mData=mData[i].mData-(sData[j].mData+sData[j+1].mData)/2.0;
//k=0;
}
}
bRec=true;
return true;
}
catch(...)
{
return false;
}
}
///////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnViewDayChangRectification()
{
// TODO: Add your command handler code here
if((dT0>10.0)&&(mPointNum>0)&&(!bRec)&&(bGetRealSunData))
{
ASSERT(DayChangRectification(m_MData, m_SData));
::AfxMessageBox("日变改正完成");
}
else
{
::AfxMessageBox("Sat或Zat文件未打开,不能进行日变改正!");
}
}
////////////////////////////////////////////////////////////////////////////
void CMagneticProDoc::OnOutputMRectificationData()
{
// TODO: Add your command handler code here
if(bRec)
{
CFileDialog dlg(false,_T("zat"),_T("*.zat"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("文本文件 (*.zat)|*.zat|"));
if (dlg.DoModal())
{
CStdioFile *pFile=new CStdioFile;
CString f1,f2,f3,f4,f5,f6,f7,f8,fTemp="";
fTemp=dlg.GetFileName();
int md=0;
if(m_MData[1].y>m_MData[0].y)
{
md=1;
}
else
md=-1;
if(fTemp=="")
{
::AfxMessageBox(" The filename is empty!");
}
else
{
pFile->Open(fTemp,CFile::modeWrite | CFile::modeCreate);
fTemp.Format("%d",mPointNum);
fTemp=fTemp+"\n";
pFile->WriteString(fTemp);
for(int i=0;i<mPointNum;i++)
{
f1.Format("%d",100+md*i);
f2.Format("%d",(long)(m_MData[0].x)*1000);
f3.Format("%d",((long)(m_MData[i].y)+4000)*1000);
f4.Format("%5.1f",m_MData[i].mData);
f6.Format("%2d",m_MData[i].mTime.GetHour());
f7.Format("%2d",m_MData[i].mTime.GetMinute());
f8.Format("%2d",m_MData[i].mTime.GetSecond());
f5=f6+":"+f7+":"+f8;
fTemp=f1+" "+f2+" "+f3+" "+f4+" "+f5+"0"+"\n";
pFile->WriteString(fTemp);
}
pFile->Close();
::AfxMessageBox("Recification Mag Data output successed!");
}
}
}
else
{
::AfxMessageBox("未进行日变改正,或无日变数据!");
}
}
void CMagneticProDoc::OnExchangGpstoMapGis()
{
// TODO: Add your command handler code here
CGpsToExChangDialog gdlg;
gdlg.DoModal();
}
void CMagneticProDoc::OnExchangMagnetic()
{
// TODO: Add your command handler code here
CMagneticDataToMapGisDialog mdlg;
mdlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -