1917 lines
46 KiB
C++
1917 lines
46 KiB
C++
// SaveInIP.cpp: implementation of the CSaveInIP class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include "SaveInIP.h"
|
||
#include "Constant.h"
|
||
#include "CtrlProtocolDef.h"
|
||
#ifdef _DEBUG
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[]=__FILE__;
|
||
#define new DEBUG_NEW
|
||
#endif
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
extern int g_iUILanguage;
|
||
extern HHOOK hHook;
|
||
extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);
|
||
CSaveInIP::CSaveInIP()
|
||
{
|
||
m_resFile = NULL;
|
||
m_nFirstPole = 0;
|
||
m_nLandSign = 0;
|
||
m_MediumType = 0;
|
||
/* m_rect = NULL;*/
|
||
m_szDistancePole = _T("");
|
||
m_szPoleStart = _T("1");
|
||
m_methodType = 0;
|
||
m_nPoleStepX=0;
|
||
m_nPoleStepY=0;
|
||
m_fXDistancePole = 0;
|
||
m_fYDistancePole = 0;
|
||
m_fPoleDistance = 0;
|
||
m_i3DRollDiecetion = 0;
|
||
m_fABDistance = 0;
|
||
m_fMinAMDistance = 0 ;
|
||
m_fAPosX = 0;
|
||
m_fAPosY = 0;
|
||
}
|
||
|
||
CSaveInIP::~CSaveInIP()
|
||
{
|
||
|
||
|
||
}
|
||
|
||
BOOL CSaveInIP::CreateIPFile(CString szFilePath)
|
||
{
|
||
m_resFile = fopen(szFilePath, "w");
|
||
|
||
if (m_resFile == NULL)
|
||
{
|
||
CString strInfo = _T("");
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strInfo.Format(_T("打开文件失败, fileinfo = %s, errorno = %d"), szFilePath.GetBuffer(0), GetLastError());
|
||
AfxMessageBox(strInfo.GetBuffer(0));
|
||
}
|
||
else
|
||
{
|
||
strInfo.Format(_T("Open file failed, fileinfo = %s, errorno = %d"), szFilePath.GetBuffer(0), GetLastError());
|
||
MessageBoxEx(NULL, strInfo, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL CSaveInIP::AddDateToFile(CStringArray *szDateArray)
|
||
{
|
||
CString szData;
|
||
szData.Empty();
|
||
|
||
CStringArray szDealDataArray;
|
||
szDealDataArray.RemoveAll();
|
||
//[1,16]属于2D,>21是3D
|
||
switch(m_MediumType)
|
||
{
|
||
case 1://温纳
|
||
Wenner_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 2://偶极
|
||
dipole_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 3:
|
||
Wenner_Y_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 4:
|
||
Pole_dipole_2d(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 5:
|
||
Reverse_Pole_dipole_2d(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 6:
|
||
A_M_ARRAY_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 7:
|
||
AMN_ARRAY_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 9:
|
||
Dipole_Dipole_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 11://斯伦贝谢
|
||
Schlumberger_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 17:
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
AfxMessageBox(_T("暂不支持装置类型=17"));
|
||
}
|
||
else
|
||
{
|
||
MessageBoxEx(NULL, _T("Not Support MediumType = 17"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
// CE_Schlumberger(szDateArray,&szDealDataArray);
|
||
return FALSE;
|
||
|
||
case 22:
|
||
Pole_Pole_3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 23:
|
||
Pole_Dipole_3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 24:
|
||
Dipole_Dipole_3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 25:
|
||
Schlumberger3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 26:
|
||
WennerAlfa3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 27:
|
||
WennerBeta3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 28:
|
||
Gradient_3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 29:
|
||
Mid_Gardient_Scan_3D(szDateArray,&szDealDataArray);
|
||
break;
|
||
case 50: //to be do , louis
|
||
case 39:
|
||
Wenner_Schlumberger_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
//由于边缘梯度的排列和用户自定义一样,在这里就直接沿用了用户自定义的排列
|
||
case 40:
|
||
case 41:
|
||
case 43:
|
||
Custom_2D(szDateArray,&szDealDataArray);
|
||
break;
|
||
default:
|
||
return FALSE;
|
||
}
|
||
|
||
szData.Empty();
|
||
|
||
for (int nIndex = 0; nIndex < szDealDataArray.GetSize(); nIndex++)
|
||
{
|
||
szData += szDealDataArray.GetAt(nIndex);
|
||
if(nIndex != szDealDataArray.GetSize() - 1)
|
||
szData += " ";
|
||
}
|
||
|
||
szData += "\n";
|
||
fwrite(szData.GetBuffer(szData.GetLength()), 1, szData.GetLength(), m_resFile);
|
||
szData.Empty();
|
||
fflush(m_resFile);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
CString CSaveInIP::TransformMediumType(CString szMediumType)
|
||
{
|
||
CString szResult;
|
||
int nType;
|
||
|
||
szResult.Empty();
|
||
szResult = szMediumType;
|
||
|
||
nType = atoi(szResult);
|
||
szResult.Empty();
|
||
|
||
switch (nType)//nType是我们的装置类型
|
||
{
|
||
case 1:
|
||
szResult = "1";
|
||
break;
|
||
|
||
case 2:
|
||
szResult = "4";
|
||
break;
|
||
|
||
case 3:
|
||
szResult = "5";
|
||
break;
|
||
|
||
case 4:
|
||
szResult = "6";
|
||
break;
|
||
|
||
case 5:
|
||
szResult = "6";
|
||
break;
|
||
case 6:
|
||
szResult = "2";
|
||
break;
|
||
case 7:
|
||
szResult = "6";
|
||
break;
|
||
case 8:
|
||
szResult = szMediumType;
|
||
break;
|
||
case 9:
|
||
szResult = "3";
|
||
break;
|
||
case 10:
|
||
szResult = szMediumType;
|
||
break;
|
||
case 11:
|
||
szResult = "7";
|
||
break;
|
||
case 12:
|
||
szResult = szMediumType;
|
||
break;
|
||
case 13:
|
||
szResult = szMediumType;
|
||
break;
|
||
|
||
case 14:
|
||
szResult = szMediumType;
|
||
break;
|
||
|
||
case 15:
|
||
szResult = szMediumType;
|
||
break;
|
||
|
||
case 16:
|
||
szResult = szMediumType;
|
||
break;
|
||
case 18:
|
||
break;
|
||
case 22:
|
||
szResult = "2";
|
||
break;
|
||
case 23:
|
||
szResult = "6";
|
||
break;
|
||
case 24:
|
||
szResult = "3";
|
||
break;
|
||
case 25:
|
||
szResult = "7";
|
||
break;
|
||
case 26:
|
||
szResult = "1";
|
||
break;
|
||
case 27:
|
||
szResult = "4";
|
||
break;
|
||
case 28:
|
||
szResult = "11";
|
||
break;
|
||
case 29:
|
||
szResult = "11";
|
||
break;
|
||
case 50://to be do , louis
|
||
case 39:
|
||
szResult = "7";
|
||
break;
|
||
case 40:
|
||
case 41:
|
||
case 43:
|
||
szResult = "11";
|
||
break;
|
||
default:
|
||
return "NULL";
|
||
}
|
||
|
||
return szResult;
|
||
}
|
||
|
||
|
||
BOOL CSaveInIP::CloseFile()
|
||
{
|
||
switch (m_MediumType)
|
||
{
|
||
case 2:
|
||
case 11:
|
||
WriteZero(6);
|
||
break;
|
||
case 25:
|
||
case 26:
|
||
case 27:
|
||
WriteZero(5);
|
||
break;
|
||
default:
|
||
WriteZero(4);
|
||
}
|
||
|
||
if (m_resFile)
|
||
{
|
||
fclose(m_resFile);
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
void CSaveInIP::WriteZero(int nCount)
|
||
{
|
||
for(int nIndex = 0; nIndex < nCount; nIndex++)
|
||
{
|
||
fwrite("0\r\n",1,3,m_resFile);
|
||
fflush(m_resFile);
|
||
}
|
||
}
|
||
|
||
void CSaveInIP::Wenner_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Wenner的计算值有三列,计算公式分别:
|
||
//第一列:A * 间距
|
||
//第二列:(M-A) * 间距
|
||
//第三列:R0
|
||
//第四列:视电阻率M,暂时先填入一个暂时值
|
||
//不需要层数
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
//第一列:
|
||
DOUBLE dRowInfo = 0;
|
||
CString strRowInfo = _T("");
|
||
dRowInfo = (0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(3)))-1) * atof(m_szDistancePole.GetBuffer(0));
|
||
strRowInfo.Format("%.2f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第二列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = (atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0)) ) * atof(m_szDistancePole.GetBuffer(0));
|
||
strRowInfo.Format("%.2f", dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第三列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRowInfo.Format("%.5f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第四列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRowInfo.Format("%.4f", dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
|
||
}
|
||
|
||
void CSaveInIP::Schlumberger_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Schlumberger的计算值有四列,计算公式分别:
|
||
//第一列:A * m_szDistancePole
|
||
//第二列:(p2 - p1) * m_szDistancePole
|
||
//第三列:(p1 - c1) / (p2 - p1), 层数
|
||
//第四列:R0
|
||
//第五列:视电阻率M
|
||
szTARArray->RemoveAll();
|
||
|
||
//第一列:
|
||
DOUBLE dRowInfo = 0;
|
||
DOUBLE fDistancePole = atof(m_szDistancePole.GetBuffer(0));
|
||
CString strRowInfo = _T("");
|
||
|
||
dRowInfo = (0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(3)))-1) * fDistancePole;
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第二列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)) ) * fDistancePole;
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第三列
|
||
strRowInfo.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0)) ) / ( atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)) );
|
||
strRowInfo.Format("%.5f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第四列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第五列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRowInfo.Format("%.4f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
}
|
||
|
||
void CSaveInIP::dipole_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Schlumberger的计算值有四列,计算公式分别:
|
||
//第一列:C2 * m_szDistancePole
|
||
//第二列:(C1 - C2) * m_szDistancePole
|
||
//第三列:(P1-C1) / (C1 - C2) ,偶极分离因子
|
||
//第四列:R0
|
||
//第五列:视电阻率M
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
|
||
//第一列:
|
||
DOUBLE firstRow;
|
||
CString szFirstRow;
|
||
DOUBLE fdistance = atof(m_szDistancePole);//m_szDistancePole成员变量,保存了电极间距
|
||
firstRow = (0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(0)))-1) * fdistance;
|
||
szFirstRow.Format("%.3f",fabs(firstRow));
|
||
szTARArray->Add(szFirstRow);
|
||
|
||
//第二列:
|
||
CString szSencondRow;
|
||
DOUBLE fSencondRow;
|
||
fSencondRow = ( atof(szSRCArray->GetAt(0)) - atof(szSRCArray->GetAt(1)) ) * fdistance;
|
||
szSencondRow.Format("%.3f",fabs(fSencondRow));
|
||
szTARArray->Add(szSencondRow);
|
||
|
||
//第三列
|
||
DOUBLE thirdRow;
|
||
CString szThirdRow;
|
||
thirdRow = atof(szSRCArray->GetAt(4));
|
||
szThirdRow.Format("%.5f",fabs(thirdRow));
|
||
szTARArray->Add(szThirdRow);
|
||
|
||
|
||
//第四列
|
||
DOUBLE fourRow;
|
||
CString szfourRow;
|
||
fourRow = atof(szSRCArray->GetAt(5));
|
||
szfourRow.Empty();
|
||
szfourRow.Format("%.4f",fabs(fourRow));
|
||
szTARArray->Add(szfourRow);
|
||
}
|
||
|
||
BOOL CSaveInIP::WriteLandInform(CStringArray *f_szArray)
|
||
{
|
||
CString szNum;
|
||
|
||
szNum.Format("%d\n", m_nLandSign);
|
||
fwrite(szNum.GetBuffer(0), szNum.GetLength(), 1, m_resFile);
|
||
|
||
//写入地型数据标志 和 地型数据点的个数
|
||
szNum.Format("%d\n", f_szArray->GetSize());
|
||
fwrite(szNum.GetBuffer(0), szNum.GetLength(), 1, m_resFile);
|
||
|
||
for (int i = 0; i < f_szArray->GetSize(); i++)
|
||
{
|
||
szNum = f_szArray->GetAt(i);
|
||
szNum += "\n";
|
||
fwrite(szNum.GetBuffer(0), szNum.GetLength(), 1, m_resFile);
|
||
}
|
||
|
||
szNum.Format("%d\n", m_nFirstPole);
|
||
|
||
fwrite(szNum.GetBuffer(0), szNum.GetLength(), 1, m_resFile);
|
||
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CSaveInIP::WennerAlfa3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
// int nSort[4] = {A, M, N, B};
|
||
int nSort[4] = {A, B, M, N};
|
||
int nId = 0;
|
||
int nPoleStart = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 4; i++)
|
||
{
|
||
nId = nSort[i];
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.2f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.2f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//视电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
|
||
}
|
||
|
||
void CSaveInIP::WennerBeta3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[4] = {A, B, M, N};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 4; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
// int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
|
||
//视电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
void CSaveInIP::Schlumberger3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
// int nSort[4] = {A, M, N, B};
|
||
int nSort[4] = {A, B, M, N};
|
||
int nId = 0;
|
||
int nPoleStart = 0;
|
||
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
Pos = new _pos();
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
for(int i = 0; i < 4; i++)
|
||
{
|
||
nId = nSort[i];
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//视电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
bool CSaveInIP::AddFileHeader(int method, int mediumType, CStringArray *szDataArray)
|
||
{
|
||
m_MediumType = mediumType; //保存在装置类型
|
||
m_methodType = method; //保存测试方法(电阻率Res,激电IP...)
|
||
|
||
if (mediumType >= 17 && mediumType <= 21) //1D脚本装置类型
|
||
{
|
||
// InitCEFileHeader(szDataArray);
|
||
CString strTips;
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strTips.Format(_T("不支持装置类型导出,类型 = %d"), mediumType);
|
||
AfxMessageBox(strTips);
|
||
}
|
||
else
|
||
{
|
||
strTips.Format(_T("Not support mediumType export, type = %d"), mediumType);
|
||
MessageBoxEx(NULL, strTips, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
return false;
|
||
}
|
||
|
||
if (mediumType >= 1 && mediumType <= 16|| mediumType >= 39) //2D脚本装置类型
|
||
{
|
||
Init2DFileHeader(szDataArray);
|
||
}
|
||
|
||
if (mediumType > 21 && mediumType < 39) //3D脚本装置类型
|
||
{
|
||
Init3DFileHeader(szDataArray);
|
||
}
|
||
return true;
|
||
|
||
}
|
||
|
||
void CSaveInIP::GetInfoFromString(CString strInfo, CString strBreak, std::vector<CString>& vtRes)
|
||
{
|
||
vtRes.clear();
|
||
if (strInfo.IsEmpty())
|
||
{
|
||
return;
|
||
}
|
||
int nStart = 0;
|
||
int nPos = strInfo.Find(strBreak.GetBuffer(0));
|
||
CString strTmp = _T("");
|
||
while (-1 != nPos)
|
||
{
|
||
strTmp = strInfo.Mid(nStart, nPos - nStart);
|
||
vtRes.push_back(strTmp);
|
||
nStart = nPos + 1;
|
||
nPos = strInfo.Find(strBreak.GetBuffer(0), nStart);
|
||
}
|
||
//如果此时容器不为空,说明字符串中有出现过分隔符,此时将字符中最后一些内容取出
|
||
if (!vtRes.empty())
|
||
{
|
||
strTmp = strInfo.Right(strInfo.GetLength() - nStart);
|
||
vtRes.push_back(strTmp);
|
||
}
|
||
return ;
|
||
|
||
}
|
||
|
||
void CSaveInIP::Init3DFileHeader(CStringArray *szArray)
|
||
{
|
||
//3D的文件头
|
||
CString szTmp = _T("");
|
||
CString strShow = _T("");
|
||
int x0, y0, x1,y1;
|
||
std::vector<CString> vtInfo;
|
||
if (szArray->GetSize() != 9)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strShow.Format(_T("IP3DFileHeader信息错误, 大小 = %d"), szArray->GetSize());
|
||
AfxMessageBox(strShow.GetBuffer(0));
|
||
}
|
||
else
|
||
{
|
||
strShow.Format(_T("IP3DFileHeader infomation error, size = %d"), szArray->GetSize());
|
||
MessageBoxEx(NULL, strShow, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
return ;
|
||
}
|
||
|
||
for (int i = 0; i < szArray->GetSize(); i++)
|
||
{
|
||
switch (i)
|
||
{
|
||
case 1: //得到存储电极数矩阵的字符串
|
||
szTmp = szArray->GetAt(i);
|
||
vtInfo.clear();
|
||
GetInfoFromString(szTmp, ",", vtInfo);
|
||
if (vtInfo.size() != 4)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strShow.Format(_T("解析信息错误, info = %s, size = %d"), szTmp.GetBuffer(0), vtInfo.size());
|
||
AfxMessageBox(strShow.GetBuffer(0));
|
||
}
|
||
else
|
||
{
|
||
strShow.Format(_T("Parser infomation Error, info = %s, size = %d"), szTmp.GetBuffer(0), vtInfo.size());
|
||
MessageBoxEx(NULL, strShow, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
continue;
|
||
}
|
||
szTmp.Empty();
|
||
//如果是中梯则选取AB距离/X轴电极间距作为X轴的网格大小
|
||
if (29 == atoi(szArray->GetAt(3)))
|
||
{
|
||
std::vector<CString> vtTemp;
|
||
vtTemp.clear();
|
||
CString strTmpInfo = szArray->GetAt(2);
|
||
GetInfoFromString(strTmpInfo, ",", vtTemp);
|
||
float fXPoleDis = atof(vtTemp[0].GetBuffer(0));
|
||
int iXGridSize = (0 == fXPoleDis) ? (int)m_fABDistance : (int)(m_fABDistance/fXPoleDis);
|
||
szTmp.Format(_T("%d\r\n%d\r\n"), iXGridSize+1, atoi(vtInfo[3].GetBuffer(0)) - atoi(vtInfo[1].GetBuffer(0))+1);
|
||
}
|
||
else
|
||
szTmp.Format(_T("%d\r\n%d\r\n"), atoi(vtInfo[2].GetBuffer(0)) - atoi(vtInfo[0].GetBuffer(0))+1, atoi(vtInfo[3].GetBuffer(0)) - atoi(vtInfo[1].GetBuffer(0))+1);
|
||
m_rect.x0 = atoi(vtInfo[0].GetBuffer(0));
|
||
m_rect.y0 = atoi(vtInfo[1].GetBuffer(0));
|
||
m_rect.x1 = atoi(vtInfo[2].GetBuffer(0));
|
||
m_rect.y1 = atoi(vtInfo[3].GetBuffer(0));
|
||
break;
|
||
case 2:
|
||
szTmp = szArray->GetAt(i);
|
||
vtInfo.clear();
|
||
GetInfoFromString(szTmp, ",", vtInfo);
|
||
if (vtInfo.size() != 2)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strShow.Format(_T("解析电极间距信息错误, info = %s, size = %d"), szTmp.GetBuffer(0), vtInfo.size());
|
||
AfxMessageBox(strShow.GetBuffer(0));
|
||
}
|
||
else
|
||
{
|
||
strShow.Format(_T("Parser Distance Pole infomation Error, info = %s, size = %d"), szTmp.GetBuffer(0), vtInfo.size());
|
||
MessageBoxEx(NULL, strShow, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
continue;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format(_T("%.2f\r\n%.2f\r\n"), atof(vtInfo[0].GetBuffer(0)) , atof(vtInfo[1].GetBuffer(0)) );
|
||
m_fXDistancePole = atof(vtInfo[0].GetBuffer(0));
|
||
m_fYDistancePole = atof(vtInfo[1].GetBuffer(0));
|
||
break;
|
||
case 3:
|
||
szTmp = szArray->GetAt(i);
|
||
szTmp = TransformMediumType(szTmp);
|
||
|
||
if (szTmp == "11")//混合装置
|
||
{
|
||
szTmp += _T("\r\n0\r\nType of data(0=apparent resistivity,1=resistance)\r\n0");
|
||
}
|
||
break;
|
||
|
||
default://0和8
|
||
szTmp = szArray->GetAt(i);
|
||
break;
|
||
}
|
||
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
fflush(m_resFile);
|
||
szTmp.Empty();
|
||
}
|
||
}
|
||
|
||
bool CSaveInIP::Init2DFileHeader(CStringArray *szArray)
|
||
{
|
||
//第一行:文件名
|
||
//第二行:电极间距
|
||
//第三行:装置类型
|
||
|
||
//(混合装置多三行,比如说微分,多三行0)???这个需要确定
|
||
|
||
//第四行:测点总数
|
||
//第五行:给出的排列中心位置,在这里固定为0
|
||
//第六行:现场IP,在这里固定为1
|
||
//第七列:IP数据类型,这里填写Chargeability
|
||
//第八列:IP单位,这里填写msec;
|
||
|
||
CString szData = _T("");
|
||
CString szMediumType = _T("");
|
||
|
||
for (int nIndex = 0; nIndex < szArray->GetSize(); nIndex++)
|
||
{
|
||
|
||
if (nIndex == 1)
|
||
{
|
||
m_szDistancePole = szArray->GetAt(nIndex);
|
||
m_fPoleDistance = atof(m_szDistancePole);
|
||
}
|
||
|
||
if (nIndex == 2)
|
||
{
|
||
szMediumType = szArray->GetAt(nIndex);//将装置类型保存起来,后面根据这个变量进行不同的运算。
|
||
szArray->SetAt(nIndex,TransformMediumType(szMediumType));//这里将装置类型转换成res软件的类型定义表
|
||
if (szArray->GetAt(nIndex) == "NULL")
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("转换装置类型失败!"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Transfer MediumType Failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if (szMediumType == "3")//微分属于混合排列类型,文件头需要添加三行0
|
||
{
|
||
// szArray->InsertAt(nIndex + 1, "0");
|
||
// szArray->InsertAt(nIndex + 2, "0");
|
||
// szArray->InsertAt(nIndex + 3, "0");
|
||
}
|
||
}
|
||
|
||
szData += szArray->GetAt(nIndex);
|
||
szData += "\n";
|
||
}
|
||
|
||
fwrite(szData.GetBuffer(szData.GetLength()), 1, szData.GetLength(), m_resFile);
|
||
szData.Empty();
|
||
fflush(m_resFile);
|
||
return true;
|
||
}
|
||
|
||
void CSaveInIP::InitCEFileHeader(CStringArray *szArray)
|
||
{
|
||
// switch (m_methodType)
|
||
// {
|
||
// case Res:
|
||
// InitCeResHeader(szArray);
|
||
// break;
|
||
// case IP:
|
||
// InitCeIpHeader(szArray);
|
||
// break;
|
||
// default:
|
||
//
|
||
// break;
|
||
// }
|
||
|
||
}
|
||
|
||
void CSaveInIP::InitCeResHeader(CStringArray *szArray)
|
||
{
|
||
CString szTmp = _T("");
|
||
|
||
for (int n = 0; n < szArray->GetSize(); n++)
|
||
{
|
||
switch (n)
|
||
{
|
||
case 0:
|
||
szTmp = szArray->GetAt(n);
|
||
break;
|
||
case 1:
|
||
szTmp = "Array Type\r\nSchlumberger" ;
|
||
break;
|
||
case 2:
|
||
szTmp = "Number of data points\r\n" + szArray->GetAt(n);
|
||
szTmp += "\r\nData Type\r\nResistivity";
|
||
break;
|
||
case 3:
|
||
szTmp = "Error in measurements included\r\n" + szArray->GetAt(n);
|
||
|
||
szTmp += "\r\nData section";
|
||
break;
|
||
}
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
fflush(m_resFile);
|
||
szTmp.Empty();
|
||
}
|
||
}
|
||
|
||
void CSaveInIP::InitCeIpHeader(CStringArray *szArray)
|
||
{
|
||
CString szTmp = _T("");
|
||
|
||
for (int n = 0; n < szArray->GetSize(); n++)
|
||
{
|
||
switch (n)
|
||
{
|
||
case 0:
|
||
szTmp = szArray->GetAt(n);
|
||
break;
|
||
case 1:
|
||
szTmp = "Array Type\r\nSchlumberger" ;
|
||
break;
|
||
case 2:
|
||
szTmp = "Number of data points\r\n" + szArray->GetAt(n);
|
||
szTmp += "\r\nData Type\r\nIP\r\nChargeability\r\nmsec";
|
||
break;
|
||
case 3:
|
||
szTmp += szArray->GetAt(n);
|
||
break;
|
||
case 4:
|
||
szTmp = "Error in measurements included\r\n" + szArray->GetAt(n);
|
||
szTmp += "\r\nData section";
|
||
break;
|
||
}
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
fflush(m_resFile);
|
||
szTmp.Empty();
|
||
}
|
||
}
|
||
|
||
void CSaveInIP::CE_Schlumberger(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
switch (m_methodType)
|
||
{
|
||
case 1:
|
||
CE_Res_Schlumberger(szSRCArray, szTARArray);
|
||
break;
|
||
case 2:
|
||
CE_Res_Schlumberger(szSRCArray, szTARArray);//IP和电阻率数据数据主体一样
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CSaveInIP::CE_Res_Schlumberger(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
CString szTmp = _T("");
|
||
float fTmp = 0;
|
||
|
||
for (int n = 0; n < szSRCArray->GetSize(); n++)
|
||
{
|
||
if (n == 2)
|
||
{
|
||
fTmp = atof(szSRCArray->GetAt(n));
|
||
szTmp.Format("%.4f", fabs(fTmp));
|
||
}
|
||
else
|
||
{
|
||
fTmp = atof(szSRCArray->GetAt(n));
|
||
szTmp.Format("%.3f", fabs(fTmp));
|
||
}
|
||
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
}
|
||
|
||
void CSaveInIP::AddCEModel(CStringArray *szArray)
|
||
{
|
||
CString szTmp = _T("");
|
||
|
||
szTmp = szArray->GetAt(0); //取得用户模型选项
|
||
if (szTmp == "Yes")
|
||
{
|
||
//该部分待开发
|
||
}
|
||
else
|
||
{
|
||
szTmp = "User Starting Model Available\r\n";
|
||
szTmp += "No";
|
||
}
|
||
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
szTmp.Empty();
|
||
fflush(m_resFile);
|
||
}
|
||
|
||
void CSaveInIP::Mid_Gardient_Scan_3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[4] = {A, B, M, N};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
szTARArray->Add(_T("4"));
|
||
for(int i = 0; i < 4; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
//AB是X轴的基准轴,所以此时Y的位置信息为0
|
||
if (i < 2)
|
||
{
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",0 + m_fAPosX + i* m_fABDistance);
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",0);
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
else
|
||
{
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",m_fAPosX + m_fMinAMDistance + m_fXDistancePole * Pos->x);
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",m_fYDistancePole * Pos->y - m_fAPosY);
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
}
|
||
|
||
// int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//增加时电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
void CSaveInIP::Dipole_Dipole_3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[4] = {A, B, M, N};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 4; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
// int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//增加时电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
void CSaveInIP::Set_3D_LandSign(int f_type)
|
||
{
|
||
CString szTmp = _T("");
|
||
|
||
szTmp.Format("Topography\r\n%d", f_type);
|
||
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
szTmp.Empty();
|
||
fflush(m_resFile);
|
||
|
||
|
||
}
|
||
|
||
void CSaveInIP::Add_3D_LandFile(CStringArray *szSRCArray)
|
||
{
|
||
CString szTmp = _T("");
|
||
|
||
for (int n = 0; n < szSRCArray->GetSize(); n++)
|
||
{
|
||
szTmp += szSRCArray->GetAt(n);
|
||
szTmp +=" ";
|
||
}
|
||
|
||
szTmp += "\r\n";
|
||
fwrite(szTmp.GetBuffer(szTmp.GetLength()), 1, szTmp.GetLength(), m_resFile);
|
||
szTmp.Empty();
|
||
fflush(m_resFile);
|
||
}
|
||
|
||
//联剖A
|
||
void CSaveInIP::Pole_dipole_2d(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Pole_dipole_2d的计算值有四列,计算公式分别:
|
||
//第一列:C1 * 间距
|
||
//第二列:(p2 - p1) * 间距
|
||
//第三列:(p1 - c1)/(p2 - p1),页就是层数
|
||
//第四列:R0
|
||
//第五列:视电阻率M
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
//第一列:
|
||
DOUBLE dRowInfo = 0;;
|
||
DOUBLE fDistancePole = atof(m_szDistancePole.GetBuffer(0));
|
||
CString strRowInfo = _T("");
|
||
//modified by lsq 20160716
|
||
//将记录点的位置改为M点位置
|
||
dRowInfo = (atof(szSRCArray->GetAt(2)) -1) * fDistancePole;
|
||
strRowInfo.Format("%.2f", dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第二列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)) ) * fDistancePole;
|
||
strRowInfo.Format("%.2f", dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第三列
|
||
strRowInfo.Empty();
|
||
dRowInfo = (atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0))) / (atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)));
|
||
strRowInfo.Format("%.5f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第四列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第五列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRowInfo.Format("%.4f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
|
||
|
||
}
|
||
|
||
//联剖b
|
||
void CSaveInIP::Reverse_Pole_dipole_2d(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Reverse_Pole_dipole_2d的计算值有四列,计算公式分别:
|
||
//第一列:P1 * 间距
|
||
//第二列:(c2 - p2) * 间距
|
||
//第三列:(c2 - p2)/(p2 - p1) 层数
|
||
//第四列:R0
|
||
//第五列:视电阻率M
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
//第一列:
|
||
DOUBLE dRowInfo = 0;
|
||
DOUBLE fDistancePole = atof(m_szDistancePole.GetBuffer(0));
|
||
CString strRowInfo = _T("");
|
||
//modified by lsq 20160716
|
||
//将记录点的位置改为N点位置
|
||
// dRowInfo = (0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(3)))-1) * fDistancePole;
|
||
dRowInfo = (atof(szSRCArray->GetAt(3)) - 1) * fDistancePole;
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第二列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(1)) - atof(szSRCArray->GetAt(3)) ) * fDistancePole;
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第三列
|
||
strRowInfo.Empty();
|
||
dRowInfo = (atof(szSRCArray->GetAt(1)) - atof(szSRCArray->GetAt(3))) / (atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)));
|
||
strRowInfo.Format("%.5f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第四列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRowInfo.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第五列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRowInfo.Format("%.4f", dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
|
||
}
|
||
|
||
//微分排列2d
|
||
void CSaveInIP::Wenner_Y_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//Wenner_Y_2D这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Reverse_Pole_dipole_2d的计算值有四列,计算公式分别:
|
||
//第0列: 电极数
|
||
//第一列:记录点的位置,在这里为BM的中点
|
||
//第二列:C2和高程(默认0)
|
||
//第三列:P1和高程(默认0)
|
||
//第四列:P2和高程(默认0)
|
||
//第五列:R0
|
||
//第六列:视电阻率M
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
DOUBLE dRowInfo = 0;
|
||
CString strRowInfo = _T("");
|
||
|
||
//电极间距
|
||
DOUBLE fdistance = atof(m_szDistancePole);//m_szDistancePole成员变量,保存了电极间距
|
||
|
||
//第一列
|
||
strRowInfo.Empty();
|
||
dRowInfo = (0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(1)))-1) * fdistance;
|
||
strRowInfo.Format("%.3f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第二列:
|
||
strRowInfo.Empty();
|
||
dRowInfo = (atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0))) * fdistance;
|
||
strRowInfo.Format("%.3f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第三列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRowInfo.Format("%.5f",fabs(dRowInfo));
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
//第四列
|
||
strRowInfo.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRowInfo.Format("%.4f",dRowInfo);
|
||
szTARArray->Add(strRowInfo);
|
||
|
||
}
|
||
|
||
void CSaveInIP::Pole_Dipole_3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[3] = {A, M, N};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 3; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
// int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//需要增加视电阻率M
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(5);
|
||
szTARArray->Add(szTmp);
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
|
||
void CSaveInIP::Pole_Pole_3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[2] = {A, M};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 2; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos_by_normal_axis(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
//int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
//需要再增加视电阻率
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
//中梯,混合类型
|
||
void CSaveInIP::Gradient_3D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
/*
|
||
按顺序传入A、B、M、N、R0 5个值
|
||
*/
|
||
|
||
int A = 0, B = 1, M = 2, N = 3, R = 4;
|
||
int nSort[2] = {/*A, B, */M, N};
|
||
int nId = 0;
|
||
_pos *Pos = NULL;
|
||
|
||
CString szTmp = _T("");
|
||
int nTmp = 0;
|
||
int nPoleStart = 0;
|
||
|
||
int nDistancePole = 0;
|
||
|
||
nPoleStart = atoi(m_szPoleStart.GetBuffer(m_szPoleStart.GetLength()));
|
||
|
||
Pos = new _pos();
|
||
|
||
szTARArray->Add("2"); //混合类型前面要跟点击数量
|
||
|
||
_rect tmpRect;
|
||
//如果是按照Y轴合并,由于m_rect已经是旋转过后的矩阵,那么在计算时,还要将其旋转回去进行计算
|
||
//因为pole_to_pos函数是按照电极的长度对于X轴来进行解析的
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
tmpRect.x0 = m_rect.y0;
|
||
tmpRect.x1 = m_rect.y1;
|
||
tmpRect.y0 = m_rect.x0;
|
||
tmpRect.y1 = m_rect.x1;
|
||
}
|
||
else
|
||
{
|
||
tmpRect.x0 = m_rect.x0;
|
||
tmpRect.x1 = m_rect.x1;
|
||
tmpRect.y0 = m_rect.y0;
|
||
tmpRect.y1 = m_rect.y1;
|
||
}
|
||
|
||
for(int i = 0; i < 2; i++)
|
||
{
|
||
nId = nSort[i];
|
||
|
||
szTmp = szSRCArray->GetAt(nId);
|
||
nTmp = atoi(szTmp.GetBuffer(0));
|
||
|
||
pole_to_pos(&tmpRect, nPoleStart, m_nPoleStepX, m_nPoleStepY, Pos, nTmp);
|
||
|
||
//如果是按照Y轴方向合并,则需要进行逻辑坐标轴的转换
|
||
//此时转换之需要颠倒X轴和Y轴的位置就好
|
||
if (2 == m_i3DRollDiecetion)
|
||
{
|
||
int iTmp = Pos->x;
|
||
Pos->x = Pos->y;
|
||
Pos->y = iTmp;
|
||
}
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->x * m_fXDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
|
||
szTmp.Empty();
|
||
szTmp.Format("%.3f",(float)(Pos->y * m_fYDistancePole));
|
||
szTARArray->Add(szTmp);
|
||
}
|
||
|
||
int q = szSRCArray->GetSize();
|
||
|
||
szTmp.Empty();
|
||
szTmp = szSRCArray->GetAt(4);
|
||
szTARArray->Add(szTmp);
|
||
|
||
|
||
//视电阻率M???
|
||
szTARArray->Add(szSRCArray->GetAt(5));
|
||
|
||
|
||
|
||
delete Pos;
|
||
Pos = NULL;
|
||
}
|
||
|
||
void CSaveInIP::Dipole_Dipole_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
//szSRCArray这五个值得顺序分别是 0:A的位置 1:B的位置 2:M的位置 3:N的位置 4:R0
|
||
//Pole_dipole_2d的计算值有四列,计算公式分别:
|
||
//第一列:C1 * 间距
|
||
//第二列:(p2 - p1) * 间距
|
||
//第三列:第三列:(p1 - c1) / (p2 - p1),层数,这个数要不就是整数,如果不是整数的话,那么至少要有5位数字
|
||
//第四列:R0
|
||
//第四列:视电阻率M,暂时填入某个值,等待算法更新
|
||
|
||
szTARArray->RemoveAll();
|
||
|
||
//第一列:
|
||
DOUBLE dRowInfo = 0;
|
||
DOUBLE fDistancePole = atof(m_szDistancePole.GetBuffer(0));
|
||
CString strRow = _T("");
|
||
|
||
dRowInfo = (0.5*(atof(szSRCArray->GetAt(2))+atof(szSRCArray->GetAt(0)))-1) * fDistancePole;
|
||
strRow.Format("%.2f",dRowInfo);
|
||
szTARArray->Add(strRow);
|
||
|
||
//第二列:
|
||
strRow.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)) ) * fDistancePole;
|
||
strRow.Format("%.4f",dRowInfo);
|
||
szTARArray->Add(strRow);
|
||
|
||
//第三列
|
||
strRow.Empty();
|
||
dRowInfo = ( atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0)) ) / ( atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)) );
|
||
strRow.Format("%.5f",dRowInfo);
|
||
szTARArray->Add(strRow);
|
||
|
||
//第四列
|
||
strRow.Empty();
|
||
dRowInfo = atof(szSRCArray->GetAt(4));
|
||
strRow.Format("%.4f",dRowInfo);
|
||
szTARArray->Add(strRow);
|
||
|
||
//第五列
|
||
dRowInfo = atof(szSRCArray->GetAt(5));
|
||
strRow.Empty();
|
||
strRow.Format("%.4f", dRowInfo);
|
||
szTARArray->Add(strRow);
|
||
|
||
}
|
||
void CSaveInIP::SetPoleStep(int f_StepX, int f_StepY)
|
||
{
|
||
m_nPoleStepX = f_StepX;
|
||
m_nPoleStepY = f_StepY;
|
||
}
|
||
|
||
void CSaveInIP::Custom_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
if (szSRCArray->GetSize()<6)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("数据格式错误在Custom_array"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Data format error in Custom_array!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
szTARArray->RemoveAll();
|
||
float fVal = 0;
|
||
CString strZVal = _T("0.000");
|
||
int iRealPoleCnt = 0;
|
||
for (int i = 0; i < 4; i++)
|
||
{
|
||
if (atof(szSRCArray->GetAt(i)) > 0)
|
||
{
|
||
iRealPoleCnt++;
|
||
}
|
||
}
|
||
CString strVal = _T("");
|
||
strVal.Format(_T("%d"),iRealPoleCnt);
|
||
|
||
//第1列电极的个数,为实际电极的个数
|
||
szTARArray->Add(strVal);
|
||
|
||
|
||
//第2,3列A点的位置和Z位置
|
||
fVal = atof(szSRCArray->GetAt(0));
|
||
if (fVal > 0)
|
||
{
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
szTARArray->Add(strZVal);
|
||
}
|
||
|
||
|
||
|
||
//第4,5列B点的位置和Z位置
|
||
fVal = atof(szSRCArray->GetAt(1));
|
||
if (fVal > 0)
|
||
{
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
szTARArray->Add(strZVal);
|
||
}
|
||
|
||
|
||
//第6,7列M点的位置和Z位置
|
||
fVal = atof(szSRCArray->GetAt(2));
|
||
if (fVal > 0)
|
||
{
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
szTARArray->Add(strZVal);
|
||
}
|
||
|
||
|
||
|
||
//第8,9列N点的位置和Z位置
|
||
fVal = atof(szSRCArray->GetAt(3));
|
||
if (fVal > 0)
|
||
{
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
szTARArray->Add(strZVal);
|
||
}
|
||
|
||
//第10列RO的值
|
||
fVal = atof(szSRCArray->GetAt(4));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第11列极化率
|
||
fVal = atof(szSRCArray->GetAt(5));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.3f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
}
|
||
|
||
void CSaveInIP::Wenner_Schlumberger_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
if (szSRCArray->GetSize()<6)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("数据格式错误在Wenner_Schlumberger"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Data format error in Wenner_Schlumberger!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
szTARArray->RemoveAll();
|
||
float fVal = 0;
|
||
CString strVal = _T("");
|
||
|
||
//第一列A点的位置
|
||
fVal = 0.5*(atof(szSRCArray->GetAt(2)) + atof(szSRCArray->GetAt(3)))-1;
|
||
strVal.Format(_T("%.2f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第二列最小电极间距
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.2f"), m_fPoleDistance*(atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2))));
|
||
szTARArray->Add(strVal);
|
||
|
||
//第三列间隔系数=n/x
|
||
fVal = (atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0))) / (atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.5f"), fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第四列RO的值
|
||
fVal = atof(szSRCArray->GetAt(4));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.2f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第五列视电阻率的值
|
||
fVal = atof(szSRCArray->GetAt(5));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.4f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
}
|
||
|
||
void CSaveInIP::AMN_ARRAY_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
if (szSRCArray->GetSize()<6)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("数据格式错误在A_M_array"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Data format error in A_M_array!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
szTARArray->RemoveAll();
|
||
float fVal = 0;
|
||
CString strVal = _T("");
|
||
|
||
//第一列A点的位置
|
||
fVal = atof(szSRCArray->GetAt(2)) - 1;
|
||
strVal.Format(_T("%.2f"), m_fPoleDistance*fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第二列AM之间的电极间距
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.2f"), m_fPoleDistance*(atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2))));
|
||
szTARArray->Add(strVal);
|
||
|
||
//第三列AM/MN
|
||
fVal = (atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0))) / (atof(szSRCArray->GetAt(3)) - atof(szSRCArray->GetAt(2)));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.5f"), fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第四列RO的值
|
||
fVal = atof(szSRCArray->GetAt(4));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.2f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第五列视电阻率
|
||
fVal = atof(szSRCArray->GetAt(5));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.4f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
}
|
||
|
||
void CSaveInIP::A_M_ARRAY_2D(CStringArray *szSRCArray, CStringArray *szTARArray)
|
||
{
|
||
if (szSRCArray->GetSize()<6)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("数据格式错误在A_M_array"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Data format error in A_M_array!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
szTARArray->RemoveAll();
|
||
float fVal = 0;
|
||
CString strVal = _T("");
|
||
|
||
//第一列AM中点的位置
|
||
fVal = 0.5*(atof(szSRCArray->GetAt(2))+atof(szSRCArray->GetAt(0)))-1;
|
||
strVal.Format(_T("%.2f"), fVal*m_fPoleDistance);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第二列AM之间的电极间距
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.2f"), m_fPoleDistance*(atof(szSRCArray->GetAt(2)) - atof(szSRCArray->GetAt(0))));
|
||
szTARArray->Add(strVal);
|
||
|
||
//第三列RO的值
|
||
fVal = atof(szSRCArray->GetAt(4));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.5f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
//第四列视电阻率的值
|
||
fVal = atof(szSRCArray->GetAt(5));
|
||
strVal.Empty();
|
||
strVal.Format(_T("%.4f"),fVal);
|
||
szTARArray->Add(strVal);
|
||
|
||
}
|
||
|
||
void CSaveInIP::SetMidGardientInfo(float fAPosX, float fAPosY, float fABDistance, float fMinAMDistance)
|
||
{
|
||
m_fAPosX = fAPosX;
|
||
m_fAPosY = fAPosY;
|
||
m_fABDistance = fABDistance;
|
||
m_fMinAMDistance = fMinAMDistance;
|
||
|
||
} |