966 lines
32 KiB
C++
966 lines
32 KiB
C++
// DialCreateNew3DSpt.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "geomative.h"
|
||
#include "DialCreateNew3DSpt.h"
|
||
#include "Script3D.h"
|
||
#include "Medium3D.h"
|
||
#include "CDialog3DScriptDrawingBoard.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
#define MAX_GRID_SIZE 100
|
||
#define MAX_POLE_DISTANCE 100000
|
||
#define MAX_ITERATION_NUMBER 255
|
||
const float EPSINON = 0.00001;
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CDialCreateNew3DSpt dialog
|
||
extern bool IsExistSpecialChar(const CString &strFileName);
|
||
extern HHOOK hHook;
|
||
extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);
|
||
extern bool bIsInteger(CString strTxt);
|
||
extern bool bIsFloat(CString strTxt);
|
||
extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter);
|
||
extern int g_iUILanguage;
|
||
extern CGeoMativeApp theApp;
|
||
CDialCreateNew3DSpt::CDialCreateNew3DSpt(CScript3D* pNewScript, CLinkList<CMedium*>* pMedLinkList, INT_PTR* pRet, CWnd* pParent /*=NULL*/)
|
||
: CDialog(CDialCreateNew3DSpt::IDD, pParent)
|
||
{
|
||
//{{AFX_DATA_INIT(CDialCreateNew3DSpt)
|
||
m_strSptName = _T("");
|
||
m_strSptOperator = _T("");
|
||
m_strSptRemark = _T("");
|
||
m_strStacking = _T("");
|
||
m_strGridXSize = _T("");
|
||
m_strGridYSize = _T("");
|
||
m_uiXGridSize = 0;
|
||
m_uiYGridSize = 0;
|
||
m_fXPoleDistance = 0.0f;
|
||
m_fYPoleDistance = 0.0f;
|
||
m_uiIterationNumber = 0;
|
||
m_iSptArray = -1;
|
||
m_iSptRunMethod = -1;
|
||
|
||
//}}AFX_DATA_INIT
|
||
m_pNewScript = pNewScript;
|
||
m_pMedLinkList = pMedLinkList;
|
||
m_uiStepX = m_uiStepY = 1;
|
||
m_iSplitSptNum = 1;
|
||
m_strRect =_T("");
|
||
m_strPoleStart = _T("");
|
||
m_strPoleStep = _T("");
|
||
m_strPoleDistance = _T("");
|
||
m_fABSpace = 0;
|
||
m_fAPosX = 0;
|
||
m_fAPosY = 0;
|
||
m_CreateDate = CTime::GetCurrentTime();
|
||
}
|
||
|
||
|
||
void CDialCreateNew3DSpt::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CDialCreateNew3DSpt)
|
||
DDX_Control(pDX, IDC_EDIT_3D_SPT_MIN_AM_SPACE, m_fEditMinAMSpace);
|
||
DDX_Control(pDX, IDC_EDIT_3D_SPT_AB_DISTANCE, m_fEditABSpace);
|
||
DDX_Control(pDX, IDC_3D_SPT_DATETIMEPICKER, m_ctrlDateTime);
|
||
DDX_Control(pDX, IDC_COMBO_3D_SPT_MEASURE_METHOD, m_cmbSptRunMethod);
|
||
DDX_Control(pDX, IDC_COMBO_3D_SPT_ARRAY, m_cmdSptArray);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_NAME, m_strSptName);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_OPERATOR, m_strSptOperator);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_REMARK, m_strSptRemark);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_ITERATION_NUMBER, m_strStacking);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_X_GRID_SIZE, m_strGridXSize);
|
||
DDX_Text(pDX, IDC_EDIT_3D_SPT_Y_GRID_SIZE, m_strGridYSize);
|
||
// DDX_Text(pDX, IDC_EDIT_3D_SPT_X_POLE_DISTANCE, m_strXPoleSpace);
|
||
// DDX_Text(pDX, IDC_EDIT_3D_SPT_X_POLE_DISTANCE, m_strYPoleSpace);
|
||
DDX_Control(pDX, IDC_EDIT_3D_SPT_X_POLE_DISTANCE, m_fEditXPoleSpace);
|
||
DDX_Control(pDX, IDC_EDIT_3D_SPT_Y_POLE_DISTANCE, m_fEditYPoleSpace);
|
||
//}}AFX_DATA_MAP
|
||
DDX_Control(pDX, IDC_COMBO_3D_SPT_CABLE_DIRECTION, m_comCableDirection);
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CDialCreateNew3DSpt, CDialog)
|
||
//{{AFX_MSG_MAP(CDialCreateNew3DSpt)
|
||
//ON_WM_PAINT()
|
||
ON_CBN_SELCHANGE(IDC_COMBO_3D_SPT_MEASURE_METHOD, OnSelchangeCombo3dSptMeasureMethod)
|
||
ON_CBN_SELCHANGE(IDC_COMBO_3D_SPT_ARRAY, OnSelchangeCombo3dSptArray)
|
||
ON_WM_CREATE()
|
||
//}}AFX_MSG_MAP
|
||
ON_CBN_SELCHANGE(IDC_COMBO_3D_SPT_CABLE_DIRECTION, &CDialCreateNew3DSpt::OnCbnSelchangeCombo3dSptCableDirection)
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CDialCreateNew3DSpt message handlers
|
||
|
||
/*void CDialCreateNew3DSpt::OnPaint()
|
||
{
|
||
CPaintDC dc(this); // device context for painting
|
||
|
||
// TODO: Add your message handler code here
|
||
CRect rect;
|
||
GetDlgItem(IDC_STATIC_PICTURE)->GetWindowRect(&rect);
|
||
ScreenToClient(&rect);
|
||
//////////////////////////////////////////////////////////////////////////
|
||
CDC dcMem;
|
||
dcMem.CreateCompatibleDC(&dc);
|
||
|
||
CString str;
|
||
int iRunArray = m_cmdSptArray.GetItemData(m_cmdSptArray.GetCurSel());
|
||
int iRunMethod = m_cmbSptRunMethod.GetItemData(m_cmbSptRunMethod.GetCurSel());
|
||
WORD wResourceID = 0;
|
||
switch (iRunMethod)
|
||
{
|
||
case EN_3D_SPT_FULL_MEASURE:
|
||
//str = ".\\res\\full-measurement.bmp";//img path
|
||
//在这里只有单极-单极才会有全测量
|
||
wResourceID = IDB_P2P_FULL_MEASUREMENT1;
|
||
break;
|
||
|
||
case EN_3D_SPT_CROSS_DIAGONAL:
|
||
//str = ".\\res\\cross-diagonal.bmp";//img path
|
||
if (EN_3D_SPT_POLE_POLE == iRunArray)
|
||
wResourceID = IDB_P2P_CROSS_DIAGONAL_MEASUREMENT1;
|
||
else
|
||
wResourceID = IDB_CROSS_DIAGONAL1;
|
||
break;
|
||
|
||
case EN_3D_SPT_CROSS_MEASURE:
|
||
//str = ".\\res\\cross-measurement.bmp";//img path
|
||
if (EN_3D_SPT_POLE_POLE == iRunArray)
|
||
wResourceID = IDB_P2P_CROSS_MEASUREMENT1;
|
||
else
|
||
wResourceID = IDB_CROSS_MEASURE1;
|
||
break;
|
||
|
||
default:
|
||
//str = ".\\res\\default_measure.bmp";//img path
|
||
wResourceID = IDB_DEFAULT_MEASURE1;
|
||
break;
|
||
}
|
||
if (EN_3D_SPT_MID_GARDIENT == iRunArray)
|
||
{
|
||
wResourceID = IDB_DEFAULT_MEASURE1;
|
||
}
|
||
|
||
// HBITMAP createBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
||
//MAKEINTRESOURCE的函数是将资源ID转换为字符串的资源参数
|
||
HBITMAP createBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(wResourceID), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
||
BITMAP bitmap;
|
||
CBitmap bmp;
|
||
bmp.Attach(createBitmap);//HBitmap to CBitmap
|
||
bmp.GetBitmap(&bitmap);
|
||
CBitmap *pbmpOld=dcMem.SelectObject(&bmp);
|
||
dc.StretchBlt(rect.left-1,rect.top-1,rect.Width(),rect.Height(),&dcMem,0,0,
|
||
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
|
||
//////////////////////////////////////////////////////////////////////////
|
||
// Do not call CDialog::OnPaint() for painting messages
|
||
}*/
|
||
|
||
|
||
BOOL CDialCreateNew3DSpt::Create(UINT nID, CWnd* pParentWnd)
|
||
{
|
||
// TODO: Add your specialized code here and/or call the base class
|
||
pParentWnd->EnableWindow(FALSE);
|
||
return CDialog::Create(IDD, pParentWnd);
|
||
}
|
||
|
||
BOOL CDialCreateNew3DSpt::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
//将界面上的显示为中文
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
GetDlgItem(IDC_STATIC_BASIC_INFORMATION)->SetWindowText(_T("基本信息"));
|
||
GetDlgItem(IDC_STATIC_SPT_NAME)->SetWindowText(_T("脚本名称"));
|
||
GetDlgItem(IDC_STATIC_SPT_DATE)->SetWindowText(_T("日期"));
|
||
GetDlgItem(IDC_STATIC_SPT_REMARK)->SetWindowText(_T("备注"));
|
||
GetDlgItem(IDC_STATIC_SPT_OPERATOR)->SetWindowText(_T("操作员"));
|
||
|
||
GetDlgItem(IDC_STATIC_3D_SPT_SHOW)->SetWindowText(_T("脚本信息"));
|
||
GetDlgItem(IDC_STATIC_SPT_ARRAY)->SetWindowText(_T("装置"));
|
||
GetDlgItem(IDC_STATIC_SPT_RUN)->SetWindowText(_T("测量方法"));
|
||
|
||
GetDlgItem(IDC_STATIC_POLE_DISTANCE)->SetWindowText(_T("电极间距"));
|
||
GetDlgItem(IDC_STATIC_SPT_X_POLE_DISTANCE)->SetWindowText(_T("X轴电极间距"));
|
||
GetDlgItem(IDC_STATIC_SPT_Y_POLE_DISTANCE)->SetWindowText(_T("Y轴电极间距"));
|
||
|
||
GetDlgItem(IDC_STATIC_GRID_INFO)->SetWindowText(_T("网格信息"));
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_SIZE)->SetWindowText(_T("X轴网格大小"));
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_SIZE)->SetWindowText(_T("Y轴网格大小"));
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_OFFSET)->SetWindowText(_T("X轴网格偏移"));
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_OFFSET)->SetWindowText(_T("Y轴网格偏移"));
|
||
|
||
GetDlgItem(IDC_STATIC_SPT_ITER_NUMBER)->SetWindowText(_T("迭代数"));
|
||
GetDlgItem(IDC_STATIC_SPT_CABLE_DIRECTION)->SetWindowText(_T("电缆方向"));
|
||
GetDlgItem(IDOK)->SetWindowText(_T("确定"));
|
||
GetDlgItem(IDCANCEL)->SetWindowText(_T("取消"));
|
||
SetWindowText(_T("3D脚本"));
|
||
|
||
}
|
||
|
||
// TODO: Add extra initialization here
|
||
m_cmdSptArray.ResetContent();
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("Pole-Pole"), EN_3D_SPT_POLE_POLE);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("Pole-Dipole"), EN_3D_SPT_POLE_DIPOLE);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("Dipole-Dipole"), EN_3D_SPT_DIPOLE_DIPOLE);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("Schlumberger"), EN_3D_SPT_SCHLUMBERGER);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("WennerAlfa"), EN_3D_SPT_WENNER_ALFA);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("WennerBeta"), EN_3D_SPT_WENNER_BETA);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("Mid-Gradient-Scan"),EN_3D_SPT_MID_GARDIENT);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("landfill1"), EN_3D_SPT_LAND_FILL_ONE);
|
||
m_cmdSptArray.SetItemData(m_cmdSptArray.AddString("landfill2"), EN_3D_SPT_LAND_FILL_TWO);
|
||
|
||
m_comCableDirection.AddString("X");
|
||
m_comCableDirection.AddString("Y");
|
||
m_cmbSptRunMethod.ResetContent();
|
||
|
||
|
||
m_cmdSptArray.SetCurSel(-1);
|
||
m_cmbSptRunMethod.SetCurSel(-1);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_OFFSET)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_Y_GRID_OFFSET)->EnableWindow(FALSE);
|
||
|
||
((CEdit*)GetDlgItem(IDC_EDIT_3D_SPT_NAME))->SetLimitText(20);
|
||
((CEdit*)GetDlgItem(IDC_EDIT_3D_SPT_REMARK))->SetLimitText(50);
|
||
((CEdit*)GetDlgItem(IDC_EDIT_3D_SPT_OPERATOR))->SetLimitText(10);
|
||
|
||
CChannel* pChannel = new CChannel;
|
||
pChannel->m_iChNumber = (int)VAL_ONE;
|
||
m_pNewScript->m_chaList.AddTail((void*)pChannel);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_NAME)->SetFocus();
|
||
m_strGridXSize = _T("0");
|
||
m_strGridYSize = _T("0");
|
||
|
||
m_fEditXPoleSpace.SetIntLimitLen(5);
|
||
m_fEditXPoleSpace.SetDecLimitLen(2);
|
||
m_fEditYPoleSpace.SetIntLimitLen(5);
|
||
m_fEditYPoleSpace.SetDecLimitLen(2);
|
||
m_fEditXPoleSpace.SetWindowText(_T("0"));
|
||
m_fEditYPoleSpace.SetWindowText(_T("0"));
|
||
m_fEditABSpace.SetIntLimitLen(5);
|
||
m_fEditABSpace.SetDecLimitLen(2);
|
||
m_fEditABSpace.SetWindowText("0");
|
||
m_fEditMinAMSpace.SetWindowText(_T("0"));
|
||
GetDlgItem(IDC_EDIT_3D_SPT_A_POS)->SetWindowText(_T("0,0"));
|
||
|
||
GetDlgItem(IDC_EDIT_3D_SPT_AB_DISTANCE)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_A_POS)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_STATIC_SPT_MIN_AB_SPACE)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_MIN_AM_SPACE)->ShowWindow(SW_HIDE);
|
||
|
||
m_strStacking = _T("1");
|
||
m_uiIterationNumber = 1;
|
||
|
||
m_fXPoleDistance = 0;
|
||
m_fYPoleDistance = 0;
|
||
m_iSplitSptNum = 1;
|
||
|
||
UpdateData(FALSE);
|
||
|
||
CRect rcDrawCtr;
|
||
GetDlgItem(IDC_STATIC_PICTURE)->GetClientRect(&rcDrawCtr);
|
||
//m_DrawingBoardDlg.Create(IDD_DIALOG_DRAWING_BOARD, this);
|
||
rcDrawCtr.left = rcDrawCtr.left + 1;
|
||
rcDrawCtr.right = rcDrawCtr.right - 1;
|
||
rcDrawCtr.top = rcDrawCtr.top + 1;
|
||
rcDrawCtr.bottom = rcDrawCtr.bottom - 1;
|
||
CDialog3DScriptDrawingBoard::GetInstance()->Create(IDD_DIALOG_3D_SCRIPT_DRAWING_BOARD, GetDlgItem(IDC_STATIC_PICTURE));
|
||
CDialog3DScriptDrawingBoard::GetInstance()->MoveWindow(&rcDrawCtr);
|
||
CDialog3DScriptDrawingBoard::GetInstance()->ShowWindow(SW_SHOW);
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void CDialCreateNew3DSpt::OnSelchangeCombo3dSptMeasureMethod()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
// if (m_iSptRunMethod != m_cmbSptRunMethod.GetCurSel())
|
||
// {
|
||
// m_iSptRunMethod = m_cmbSptRunMethod.GetCurSel();
|
||
// Invalidate();
|
||
// }
|
||
|
||
}
|
||
|
||
|
||
bool CDialCreateNew3DSpt::CheckValueValid()
|
||
{
|
||
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
|
||
if (!UpdateData(TRUE))
|
||
{
|
||
return false;
|
||
}
|
||
// CString strGridX = GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_SIZE)->GetWindowText()
|
||
|
||
// if (!bIsFloat(m_strXPoleSpace))
|
||
// {
|
||
// AfxMessageBox(_T("Please input an float value on X Pole Distance"));
|
||
// return false;
|
||
// }
|
||
//
|
||
// if (!bIsFloat(m_strYPoleSpace))
|
||
// {
|
||
// AfxMessageBox(_T("Please input an float value on Y Pole Distance"));
|
||
// return false;
|
||
// }
|
||
|
||
if (!bIsInteger(m_strGridXSize))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴网格大小须为正整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer on X Grid Size"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
if (!bIsInteger(m_strGridYSize))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴网格大小须为正整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer on Y Grid Size"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
if (!bIsInteger(m_strStacking))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("迭代次数须为正整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer on Stacking."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
CString strTmp = _T("");
|
||
m_fEditXPoleSpace.GetWindowText(strTmp);
|
||
m_fXPoleDistance = atof(strTmp);
|
||
|
||
strTmp.Empty();
|
||
m_fEditYPoleSpace.GetWindowText(strTmp);
|
||
m_fYPoleDistance = atof(strTmp);
|
||
|
||
|
||
m_uiXGridSize = atoi(m_strGridXSize);
|
||
m_uiYGridSize = atoi(m_strGridYSize);
|
||
m_uiIterationNumber = atoi(m_strStacking);
|
||
|
||
|
||
if (IsExistSpecialChar(m_strSptName))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("脚本名称中包含特殊字符,请重新命名."));
|
||
else
|
||
MessageBoxEx(NULL, _T("There are some special charcter in script name,please rename it."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
if (m_strSptName.IsEmpty())
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("请输入脚本名称."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input script name."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
|
||
if (m_uiXGridSize < 2 || m_uiXGridSize > MAX_GRID_SIZE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴网格大小须为2到100之间的整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer from 2 to 100 on X Grid Size."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
if( m_uiYGridSize < 2 || m_uiYGridSize > MAX_GRID_SIZE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴网格大小须为2到100之间的整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer from 2 to 100 on Y Grid Size."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if (m_fXPoleDistance <= 0 || m_fXPoleDistance > MAX_POLE_DISTANCE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴电极间距大于0小于等于100000."));
|
||
else
|
||
MessageBoxEx(NULL, _T("X-axis electrode spacing is greater than 0 and less than or equal to 100,000. "), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if(m_fYPoleDistance <= 0 || m_fYPoleDistance > MAX_POLE_DISTANCE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴电极间距最大不能超过100000."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input a positive number less than 100000 on Y Pole Distance."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if (m_uiIterationNumber < 1 ||m_uiIterationNumber > MAX_ITERATION_NUMBER)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("迭代数错误,请输入一个1到255的正数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Stacking number input error;please input an integer from 1 to 255."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if (-1 == m_cmdSptArray.GetCurSel() || -1 == m_cmbSptRunMethod.GetCurSel())
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("请选择脚本类型和测量方法."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please select script array and measurement method."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
if (-1 == m_comCableDirection.GetCurSel())
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("请选择电缆方向."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please select cable direction."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
//默认X方向,如果是Y方向需要把脚本
|
||
// if (m_comCableDirection.GetCurSel() == 0)
|
||
// {
|
||
//added by lsq 20161206
|
||
//根据印度现场,将电极间距的精度由小数点后1位调整为小数点后2位
|
||
m_strPoleDistance.Empty();
|
||
m_strPoleDistance.Format("%.2f,%.2f", m_fXPoleDistance, m_fYPoleDistance);
|
||
m_strPoleStep.Empty();
|
||
m_strPoleStep.Format("%d,%d", 1, 1);
|
||
m_strRect.Empty();
|
||
m_strRect.Format("%d,%d,%d,%d", 0, 0, m_uiXGridSize - 1, m_uiYGridSize - 1);
|
||
/*}
|
||
//Y方向
|
||
else if (m_comCableDirection.GetCurSel() == 1)
|
||
{
|
||
m_strPoleDistance.Empty();
|
||
m_strPoleDistance.Format("%.2f,%.2f", m_fYPoleDistance, m_fXPoleDistance);
|
||
m_strPoleStep.Empty();
|
||
m_strPoleStep.Format("%d,%d", 1, 1);
|
||
m_strRect.Empty();
|
||
m_strRect.Format("%d,%d,%d,%d", 0, 0, m_uiYGridSize - 1, m_uiXGridSize - 1);
|
||
//CDialog3DScriptDrawingBoard::GetInstance()->SetCableDirectionType(EN_CABLE_Y_DIRECTION);
|
||
}*/
|
||
|
||
m_strPoleStart.Empty();
|
||
m_strPoleStart.Format("%.1f,%.1f", 0, 0);
|
||
m_ctrlDateTime.GetTime(m_CreateDate);
|
||
int iAR = m_cmdSptArray.GetItemData(m_cmdSptArray.GetCurSel());
|
||
if (EN_3D_SPT_MID_GARDIENT == iAR)
|
||
{
|
||
|
||
// m_fEditMinAMSpace = 8;
|
||
|
||
CString strAB = _T("");
|
||
CString strACoordinate = _T("");
|
||
GetDlgItem(IDC_EDIT_3D_SPT_AB_DISTANCE)->GetWindowText(strAB);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_A_POS)->GetWindowText(strACoordinate);
|
||
m_fABSpace = atof(strAB);
|
||
if (m_fABSpace <= (m_uiXGridSize-1)*m_fXPoleDistance)
|
||
{
|
||
CString strErr = _T("");
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
strErr.Format(_T("AB间距需大于%.2f."), (m_uiXGridSize - 1)*m_fXPoleDistance);
|
||
AfxMessageBox(strErr);
|
||
}
|
||
else
|
||
{
|
||
strErr.Format(_T("AB Distance must bigger than %.2f."), (m_uiXGridSize - 1)*m_fXPoleDistance);
|
||
MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
return false;
|
||
}
|
||
if (strACoordinate.IsEmpty())
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("A点的坐标不能为空"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input value on A Coordinate"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
CStringArray strArrAPos;
|
||
strArrAPos.RemoveAll();
|
||
SplitterString(strArrAPos, strACoordinate, _T(","));
|
||
if (strArrAPos.GetSize() != 2)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("A点的坐标输入错误"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Input value error on A Coordinate"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
m_fAPosX = atof(strArrAPos.GetAt(0));
|
||
m_fAPosY = atof(strArrAPos.GetAt(1));
|
||
int iTestLineIndex = m_fAPosY/m_fYPoleDistance;
|
||
if (m_fAPosX < 0 || m_fAPosX >10000 || iTestLineIndex < 0 || (iTestLineIndex+1)>m_uiYGridSize)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("A点的坐标输入错误"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Input value error on A Coordinate"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
CString strMinAMSpace = _T("");
|
||
m_fEditMinAMSpace.GetWindowText(strMinAMSpace);
|
||
if (strMinAMSpace.IsEmpty())
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("AM的最短距离不能为空"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input value on Min AM Distance"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
float fMinAM = atof(strMinAMSpace);
|
||
if (fMinAM <= 0 || ((fMinAM + (m_uiXGridSize-1)*m_fXPoleDistance) >= m_fABSpace))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("AM的最短距离输入错误"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Input value error on Min AM Distance"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
//float的精度误差在1e-5;double精度误差在1e-15
|
||
//所以要判断一个单精度浮点数:则是if( fabs(f) <= 1e-5);
|
||
//要判断一个双精度浮点数:则是if( fabs(f) <= 1e-15 );
|
||
//若小于,为0,大于,不为0
|
||
//AM的最短距离必须是X轴电极间距的整数倍
|
||
int iTmp = (int)(fMinAM/m_fXPoleDistance);
|
||
if ((fabsf(fMinAM - iTmp*m_fXPoleDistance) > EPSINON) && (fabsf(fMinAM - (iTmp+1)*m_fXPoleDistance) > EPSINON))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("AM的最短距离必须是X轴电极间距的整数倍"));
|
||
else
|
||
MessageBoxEx(NULL, _T("The value of Min AM Distance must be an Integer multiple of X Pole Distance"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
iTmp = (int)(m_fABSpace/m_fXPoleDistance);
|
||
if ((fabsf(m_fABSpace - iTmp*m_fXPoleDistance) > EPSINON) && (fabsf(m_fABSpace- (iTmp+1)*m_fXPoleDistance) > EPSINON))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("AB的距离必须是X轴电极间距的整数倍"));
|
||
else
|
||
MessageBoxEx(NULL, _T("The value of AB Distance must be an Integer multiple of X Pole Distance"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
|
||
}
|
||
return true;
|
||
|
||
}
|
||
|
||
void CDialCreateNew3DSpt::OnSelchangeCombo3dSptArray()
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
int iCurSel = m_cmdSptArray.GetCurSel();
|
||
m_cmbSptRunMethod.ResetContent();
|
||
if (-1 == iCurSel)
|
||
{
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
DWORD dwItemData = m_cmdSptArray.GetItemData(m_cmdSptArray.GetCurSel());
|
||
//在这里只有单极-单极才有全测量模式
|
||
if ( dwItemData == EN_3D_SPT_POLE_POLE || dwItemData == EN_3D_SPT_MID_GARDIENT)
|
||
{
|
||
m_cmbSptRunMethod.SetItemData(m_cmbSptRunMethod.AddString("Full-Measurement"), EN_3D_SPT_FULL_MEASURE);
|
||
}
|
||
m_cmbSptRunMethod.SetItemData(m_cmbSptRunMethod.AddString("Cross-Diagonal"), EN_3D_SPT_CROSS_DIAGONAL);
|
||
m_cmbSptRunMethod.SetItemData(m_cmbSptRunMethod.AddString("Cross-Measurement"), EN_3D_SPT_CROSS_MEASURE);
|
||
|
||
if (dwItemData == EN_3D_SPT_MID_GARDIENT)
|
||
{
|
||
m_cmbSptRunMethod.SetCurSel(0);
|
||
m_cmbSptRunMethod.EnableWindow(FALSE);
|
||
GetDlgItem(IDC_STATIC_SPT_MIN_AB_SPACE)->ShowWindow(SW_SHOW);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_A_POS)->ShowWindow(SW_SHOW);
|
||
m_fEditABSpace.ShowWindow(SW_SHOW);
|
||
m_fEditMinAMSpace.ShowWindow(SW_SHOW);
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_OFFSET)->SetWindowText(_T("AB间距"));
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_OFFSET)->SetWindowText(_T("A点坐标"));
|
||
GetDlgItem(IDC_STATIC_SPT_MIN_AB_SPACE)->SetWindowText(_T("AM最短距离"));
|
||
}
|
||
else
|
||
{
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_OFFSET)->SetWindowText(_T("AB Distance"));
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_OFFSET)->SetWindowText(_T("A Coordinate"));
|
||
GetDlgItem(IDC_STATIC_SPT_MIN_AB_SPACE)->SetWindowText(_T("Min AM Distance"));
|
||
}
|
||
|
||
GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_OFFSET)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_OFFSET)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_Y_GRID_OFFSET)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_Y_GRID_OFFSET)->ShowWindow(SW_HIDE);
|
||
}
|
||
else
|
||
{
|
||
GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_OFFSET)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_X_GRID_OFFSET)->ShowWindow(SW_SHOW);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_Y_GRID_OFFSET)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_EDIT_3D_SPT_Y_GRID_OFFSET)->ShowWindow(SW_SHOW);
|
||
|
||
GetDlgItem(IDC_EDIT_3D_SPT_A_POS)->ShowWindow(SW_HIDE);
|
||
GetDlgItem(IDC_STATIC_SPT_MIN_AB_SPACE)->ShowWindow(SW_HIDE);
|
||
m_fEditABSpace.ShowWindow(SW_HIDE);
|
||
m_fEditMinAMSpace.ShowWindow(SW_HIDE);
|
||
|
||
m_cmbSptRunMethod.EnableWindow(TRUE);
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_OFFSET)->SetWindowText(_T("X轴网格偏移"));
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_OFFSET)->SetWindowText(_T("Y轴网格偏移"));
|
||
}
|
||
else
|
||
{
|
||
GetDlgItem(IDC_STATIC_SPT_X_GRID_OFFSET)->SetWindowText(_T("X Grid Offset"));
|
||
GetDlgItem(IDC_STATIC_SPT_Y_GRID_OFFSET)->SetWindowText(_T("Y Grid Offset"));
|
||
}
|
||
|
||
}
|
||
}
|
||
//Invalidate();
|
||
}
|
||
|
||
bool CDialCreateNew3DSpt::GetMeasureZone(int iRunMethod, DWORD dwArray, int &iEnableZoneCnt,int &iDisableZoneCnt)
|
||
{
|
||
iEnableZoneCnt = 0;
|
||
iDisableZoneCnt = 0;
|
||
memset(m_zone, 0, sizeof(m_zone));
|
||
memset(m_DisZone, 0, sizeof(m_DisZone));
|
||
|
||
switch (iRunMethod)
|
||
{
|
||
case EN_3D_SPT_FULL_MEASURE:
|
||
if ((EN_3D_SPT_POLE_POLE != dwArray) && (EN_3D_SPT_MID_GARDIENT != dwArray))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("全测量方法只是用于单极-单极和中梯扫描"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Full Measurement can be only used in pole-pole and mid-gardient-scan."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
m_zone[0] = 0;
|
||
m_zone[1] = 1;
|
||
m_zone[2] = 2;
|
||
m_zone[3] = 3;
|
||
iEnableZoneCnt = 4;
|
||
|
||
break;
|
||
|
||
case EN_3D_SPT_CROSS_DIAGONAL:
|
||
if (EN_3D_SPT_POLE_POLE == dwArray)
|
||
{
|
||
m_zone[0] = 0;
|
||
m_zone[1] = 1;
|
||
m_zone[2] = 2;
|
||
m_zone[3] = 3;
|
||
iEnableZoneCnt = 4;
|
||
}
|
||
else
|
||
{
|
||
m_zone[0] = 0;
|
||
m_zone[1] = 1;
|
||
m_zone[2] = 2;
|
||
m_zone[3] = 3;
|
||
m_zone[4] = 4;
|
||
m_zone[5] = 5;
|
||
m_zone[6] = 6;
|
||
m_zone[7] = 7;
|
||
iEnableZoneCnt = 8;
|
||
}
|
||
|
||
break;
|
||
|
||
case EN_3D_SPT_CROSS_MEASURE:
|
||
if (EN_3D_SPT_POLE_POLE == dwArray)
|
||
{
|
||
m_zone[0] = 0;
|
||
m_zone[1] = 2;
|
||
iEnableZoneCnt = 2;
|
||
}
|
||
else
|
||
{
|
||
m_zone[0] = 0;
|
||
m_zone[1] = 2;
|
||
m_zone[2] = 4;
|
||
m_zone[3] = 6;
|
||
iEnableZoneCnt = 4;
|
||
|
||
}
|
||
|
||
break;
|
||
|
||
default:
|
||
CString strErr = _T("");
|
||
strErr.Format(_T("Unknow measurement type = %d"),iRunMethod);
|
||
MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return false;
|
||
}
|
||
return true;
|
||
|
||
|
||
}
|
||
|
||
void CDialCreateNew3DSpt::OnOK()
|
||
{
|
||
// TODO: Add extra validation here
|
||
if (!CheckValueValid())
|
||
{
|
||
return;
|
||
}
|
||
|
||
|
||
CMedium3D *pMedium3D = NULL;
|
||
CSptRecord* pSptRecord = NULL;
|
||
|
||
DWORD dwMedHandle = (DWORD)VAL_ZERO;
|
||
|
||
int iAR = (int)VAL_ZERO;
|
||
iAR = m_cmdSptArray.GetItemData(m_cmdSptArray.GetCurSel());
|
||
int iZoneCnt = 0, iDisZoneCnt = 0;
|
||
DWORD dwMeasureMethod = m_cmbSptRunMethod.GetItemData(m_cmbSptRunMethod.GetCurSel());
|
||
if (!GetMeasureZone(dwMeasureMethod, iAR, iZoneCnt, iDisZoneCnt))
|
||
{
|
||
return;
|
||
}
|
||
|
||
|
||
//由于只有单通道,所以在这里直接获取数据链表中头部信息的位置
|
||
POSITION pos = m_pNewScript->m_chaList.GetHeadPosition();
|
||
CChannel* pChannel = (CChannel*)m_pNewScript->m_chaList.GetAt(pos);
|
||
if (NULL == pChannel)
|
||
{
|
||
MessageBoxEx(NULL, _T("Get channel information error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
dwMedHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF);
|
||
|
||
pChannel->m_pMedium = m_pMedLinkList->Find(dwMedHandle);
|
||
if (AR_LAND_FILL_ONE == iAR || AR_LAND_FILL_TWO == iAR)
|
||
{
|
||
pChannel->m_pMedium->m_iAR = iAR;
|
||
}
|
||
|
||
pMedium3D = (CMedium3D *)(pChannel->m_pMedium);
|
||
pMedium3D->SetStackNumber(m_uiIterationNumber);
|
||
|
||
|
||
|
||
//初始化3d脚本对象
|
||
pMedium3D->create();
|
||
|
||
//如果是全测量则需要测量区域内所有的点,如果不是,则只测量45度的对角线和边界上的点
|
||
if (EN_3D_SPT_CROSS_DIAGONAL == dwMeasureMethod)
|
||
pMedium3D->SetFlags(TRUE);
|
||
else
|
||
pMedium3D->SetFlags(FALSE);
|
||
|
||
|
||
int iTestLineDirection = m_comCableDirection.GetCurSel();
|
||
//Y方向电缆布线,此操作只用于控制生成脚本测点
|
||
if (0 == iTestLineDirection)
|
||
{
|
||
pMedium3D->SetRect(0, 0, m_uiXGridSize - 1, m_uiYGridSize - 1);
|
||
}
|
||
else
|
||
{
|
||
pMedium3D->SetRect(0, 0, m_uiYGridSize - 1, m_uiXGridSize - 1);
|
||
}
|
||
|
||
//设置电极步长
|
||
pMedium3D->SetPoleStep(m_uiStepX, m_uiStepY);
|
||
|
||
//设置电极间距
|
||
pMedium3D->SetPoleDistance(m_fXPoleDistance, m_fYPoleDistance);
|
||
|
||
//设置需要生成的测点区域
|
||
pMedium3D->setZone(true, iZoneCnt, m_zone);
|
||
STMidGarScanParam stMidGarScan;
|
||
if (EN_3D_SPT_MID_GARDIENT == iAR)
|
||
{
|
||
CString strMinAMSpace = _T("");
|
||
m_fEditMinAMSpace.GetWindowText(strMinAMSpace);
|
||
stMidGarScan.fABSpace = m_fABSpace;
|
||
stMidGarScan.fAPosY = m_fAPosY;
|
||
stMidGarScan.fMinAMSpace = atof(strMinAMSpace);
|
||
pMedium3D->SetParamVal(&stMidGarScan);
|
||
|
||
}
|
||
if (iDisZoneCnt > 0)
|
||
{
|
||
// pMedium3D->setZone(false, iDisZoneCnt, m_DisZone);
|
||
}
|
||
|
||
//执行脚本生成
|
||
if (!pMedium3D->generate())
|
||
{
|
||
// AfxMessageBox("error");
|
||
return;
|
||
}
|
||
|
||
//3d脚本不再使用该字段记录测点总数
|
||
m_pNewScript->m_iEAmount = pMedium3D->getPoleCount();
|
||
|
||
pChannel->ClearSptRecList();
|
||
|
||
pMedium3D->GenerateSptRecElecVal3D(m_iSplitSptNum, m_pNewScript, &(pChannel->m_iPtAmount), &(pChannel->m_sptRecArray));
|
||
|
||
if (theApp.m_ucIsMultiChannel > 0)
|
||
{
|
||
if ((21 < iAR && iAR < 25) || 29 == iAR || AR_LAND_FILL_ONE == iAR || AR_LAND_FILL_TWO == iAR)
|
||
{
|
||
pMedium3D->SortMulChannelSpt(&(pChannel->m_sptRecArray));
|
||
}
|
||
}
|
||
|
||
|
||
pMedium3D->Destroy();
|
||
|
||
//test
|
||
//////////////////////////////////////////////////////////////////////////
|
||
// m_CreateDate = CTime::GetCurrentTime();
|
||
//////////////////////////////////////////////////////////////////////////
|
||
if (EN_3D_SPT_MID_GARDIENT == iAR)
|
||
{
|
||
m_strPoleStep.Empty();
|
||
m_strPoleStep.Format(_T("%.2f,%.2f"), m_fABSpace,m_fAPosX);
|
||
//此时记录的是AB和MN在同一水平轴时交点的位置坐标
|
||
m_strPoleStart.Empty();
|
||
m_strPoleStart.Format(_T("%.2f,%.2f"), m_fAPosX+stMidGarScan.fMinAMSpace, m_fAPosY);
|
||
|
||
}
|
||
|
||
CDialog::OnOK();
|
||
}
|
||
|
||
int CDialCreateNew3DSpt::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||
{
|
||
if (CDialog::OnCreate(lpCreateStruct) == -1)
|
||
return -1;
|
||
|
||
// TODO: Add your specialized creation code here
|
||
|
||
return 0;
|
||
}
|
||
|
||
void CDialCreateNew3DSpt::OnCbnSelchangeCombo3dSptCableDirection()
|
||
{
|
||
if (!UpdateData(TRUE))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//先判断电极间距和电极个数效验
|
||
if (!bIsInteger(m_strGridXSize))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴网格大小须为正整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer on X Grid Size"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
if (!bIsInteger(m_strGridYSize))
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴网格大小须为正整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer on Y Grid Size"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
|
||
CString strTmp = _T("");
|
||
m_fEditXPoleSpace.GetWindowText(strTmp);
|
||
m_fXPoleDistance = atof(strTmp);
|
||
|
||
strTmp.Empty();
|
||
m_fEditYPoleSpace.GetWindowText(strTmp);
|
||
m_fYPoleDistance = atof(strTmp);
|
||
|
||
|
||
m_uiXGridSize = atoi(m_strGridXSize);
|
||
m_uiYGridSize = atoi(m_strGridYSize);
|
||
|
||
if (m_uiXGridSize < 2 || m_uiXGridSize > MAX_GRID_SIZE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴网格大小须为2到100之间的整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer from 2 to 100 on X Grid Size."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
if (m_uiYGridSize < 2 || m_uiYGridSize > MAX_GRID_SIZE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴网格大小须为2到100之间的整数."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input an integer from 2 to 100 on Y Grid Size."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
|
||
if (m_fXPoleDistance <= 0 || m_fXPoleDistance > MAX_POLE_DISTANCE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("X轴电极间距0-100000之间."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input a positive number between 0 and 100000 on X Pole Distance."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
|
||
if (m_fYPoleDistance <= 0 || m_fYPoleDistance > MAX_POLE_DISTANCE)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("Y轴电极间距0-100000之间."));
|
||
else
|
||
MessageBoxEx(NULL, _T("Please input a positive number between 0 and 100000 on Y Pole Distance."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
return;
|
||
}
|
||
|
||
//设置绘制排序方式
|
||
int iAR = m_cmdSptArray.GetItemData(m_cmdSptArray.GetCurSel());
|
||
if (EN_3D_SPT_LAND_FILL_ONE == iAR || EN_3D_SPT_LAND_FILL_TWO == iAR)
|
||
{
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetZOrderMethod(TRUE);
|
||
}
|
||
else
|
||
{
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetZOrderMethod(FALSE);
|
||
}
|
||
|
||
//X方向
|
||
if (m_comCableDirection.GetCurSel() == 0)
|
||
{
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetCableDirectionType(EN_CABLE_X_DIRECTION);
|
||
}
|
||
//Y方向
|
||
else if (m_comCableDirection.GetCurSel() == 1)
|
||
{
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetCableDirectionType(EN_CABLE_Y_DIRECTION);
|
||
}
|
||
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetXElectrodeNumber(m_uiXGridSize);
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetYElectrodeNumber(m_uiYGridSize);
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetXElectrodeDistance(m_fXPoleDistance);
|
||
CDialog3DScriptDrawingBoard::GetInstance()->SetYElectrodeDistance(m_fYPoleDistance);
|
||
CDialog3DScriptDrawingBoard::GetInstance()->RedrawWindow();
|
||
} |