// WinIDWDlg.cpp: 实现文件 // #include "pch.h" #include "framework.h" #include "WinIDW.h" #include "WinIDWDlg.h" #include "afxdialogex.h" #include #include #include #include #include #include //#include "IDWCalculation.h" //#include "IDWHelper.h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif // CWinIDWDlg 对话框 typedef void(*CPPCallback)(LPCTSTR eventName, int someParamers); extern "C" __declspec(dllimport) int CalculateByFile(LPCTSTR layerFile, LPCTSTR wellFile, LPCTSTR outFile, CPPCallback callBack, double factor = 2); extern "C" __declspec(dllimport) int CalculateByMesh(CMesh* pMesh, double* wellDataX, double* wellDataY, double* wellDataZ, int wellCount, LPCTSTR outFile, CPPCallback callBack, double factor = 2); CWinIDWDlg::CWinIDWDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_WINIDW_DIALOG, pParent) , txtLayerFile(_T("C:\\GeoIntelligent\\测试\\构造图.dfg")) , txtWellFile(_T("C:\\GeoIntelligent\\测试\\校正井1.csv")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CWinIDWDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_LAYER, txtLayerFile); DDX_Text(pDX, IDC_EDIT_WELL, txtWellFile); } BEGIN_MESSAGE_MAP(CWinIDWDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_PLAY, &CWinIDWDlg::OnBnClickedBtnPlay) END_MESSAGE_MAP() // CWinIDWDlg 消息处理程序 BOOL CWinIDWDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CWinIDWDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CWinIDWDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CWinIDWDlg::OnBnClickedBtnPlay() { CString strResult = txtLayerFile; strResult.Replace(".", "_idw."); //IDWHelper idw; //idw.Calculate(txtLayerFile, txtWellFile, strResult); CalculateByFile(txtLayerFile, txtWellFile, strResult, nullptr); AfxMessageBox("校正成功"); } void CWinIDWDlg::ReadInToMatrix(string FilePath, vector>& data) { ifstream in; in.open(FilePath, ios::in);//打开一个file if (!in.is_open()) { //cout << "Can not find " << FilePath << endl; system("pause"); } // 以‘,’为分隔符拆分字符串 char seps[] = " ,\t\n";; string buff; while (getline(in, buff)) { array nums = {0}; // string->char * char *s_input = (char *)buff.c_str(); char *token = strtok(s_input, seps); double a; int i = 0;//行数i while (token != NULL) { a = atof(token); nums[i]=a; i++; if (i > 2) break; token = strtok(NULL, seps); }//end while if (i < 2) continue; data.push_back(nums); }//end while in.close(); //cout << "get data" << endl; } BOOL CWinIDWDlg::OpenFile(LPCTSTR lpszFileName) { if (m_pXy != NULL) { m_pXy->Clear(); } if (m_pXy == NULL) m_pXy = new CXy; if (m_pXy->ReadOtherWithExtension(lpszFileName)) { return TRUE; } CFile file; if (file.Open(lpszFileName, CFile::modeRead)) { //m_FileName = lpszFileName; CArchive ar(&file, CArchive::load); Serialize(ar); ar.Close(); } file.Close(); return TRUE; } void CWinIDWDlg::Serialize(CArchive& ar) { if (ar.IsStoring()){ } else { if (m_pXy == NULL) m_pXy = new CXy; //BeginProgress(IDS_STRING_OpenFile); CString name = ar.GetFile()->GetFileName(); name.MakeLower(); CSplitPath sp(name); CString ext = sp.GetExtension(); //ar.m_pDocument = this; // set back-pointer in archive if (ext == _T(".dfb") || ext == _T(".dft")) { m_pXy->m_version = m_pXy->DFB_ReadVersion(ar); m_pXy->DFB_ReadEncrypt(ar, m_pXy->m_version); if (m_pXy->IsEncrypted()){ } m_pXy->DFB_Serialize(ar, m_pXy->m_version); } else if (ext == ".dml" || ext == ".xml") m_pXy->DML_Read2(*(ar.GetFile())); else if (ext == ".pcg") m_pXy->PCG_Read2(*(ar.GetFile())); else m_pXy->DFD_Read2(*(ar.GetFile())); } }