// FaultAmplitudeDlg.cpp : 实现文件 // #include "stdafx.h" #include "FaultAmplitude.h" #include "FaultAmplitudeDlg.h" #include "afxdialogex.h" #include "../FaultAmplitudeLib/FaultAmplitudeCreator.h" #include "../BaseLib/GDfdMap.h" #include "../DrawerIO/DrawerIO.h" #include using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CFaultAmplitudeDlg 对话框 CFaultAmplitudeDlg::CFaultAmplitudeDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_FAULTAMPLITUDE_DIALOG, pParent) , m_strInputFltSurvey(_T("")) , m_strInputDfg(_T("")) , m_strFltNameFile(_T("")) , m_fStep(100) , m_fClrThresholds(10) , m_fPillarWidth(20) , m_fTextHeight(5) , m_fPillarHeightRatio(10.0) , m_strOutFigure(_T("")) , m_strOutData(_T("")) , m_iCalcOption(0) , m_bLocalDirect(FALSE) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //m_fmc = new CFaultAmplitudeCreator(); } CFaultAmplitudeDlg::~CFaultAmplitudeDlg() { //delete m_fmc; } void CFaultAmplitudeDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_INPUT_FLT_SURVEY, m_strInputFltSurvey); DDX_Text(pDX, IDC_EDIT_INPUT_DFG, m_strInputDfg); DDX_Control(pDX, IDC_COMBO_FAULT_LAYERS, m_controlFltLayer); DDX_Text(pDX, IDC_EDIT_FAULT_NAME_FILE, m_strFltNameFile); DDX_Control(pDX, IDC_COMBO_SURVEY_LAYERS, m_comboSurveyLayer); DDX_Text(pDX, IDC_EDIT_STEP, m_fStep); DDX_Text(pDX, IDC_EDIT_THRESHOLDS, m_fClrThresholds); DDX_Text(pDX, IDC_EDIT_PILLAR_WIDTH, m_fPillarWidth); DDX_Text(pDX, IDC_EDIT_TEXT_LENGTH, m_fTextHeight); DDX_Text(pDX, IDC_EDIT_PILLAR_HEIGHT_RATIO, m_fPillarHeightRatio); DDX_Text(pDX, IDC_EDIT_OUTPUT_FIGURE, m_strOutFigure); DDX_Text(pDX, IDC_EDIT_OUTPUT_DATA, m_strOutData); DDX_Radio(pDX, IDC_RADIO3, m_iCalcOption); DDX_Control(pDX, IDC_MFCCOLORBUTTON1, m_cbtnLow); DDX_Control(pDX, IDC_MFCCOLORBUTTON2, m_cbtnHigh); DDX_Check(pDX, IDC_CHECK_LOCAL_DIRECT, m_bLocalDirect); } BEGIN_MESSAGE_MAP(CFaultAmplitudeDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //ON_BN_CLICKED(IDC_BUTTON_INPUT_FLT, &CFaultAmplitudeDlg::OnBnClickedButtonInputFlt) ON_BN_CLICKED(IDC_BUTTON_INPUT_FLT_SURVEY, &CFaultAmplitudeDlg::OnBnClickedButtonInputFltSurvey) ON_BN_CLICKED(IDC_BUTTON_INPUT_DFG, &CFaultAmplitudeDlg::OnBnClickedButtonInputDfg) ON_BN_CLICKED(IDC_BUTTON_INPUT_FAULT_NAME_FILE, &CFaultAmplitudeDlg::OnBnClickedButtonInputFaultNameFile) ON_BN_CLICKED(IDC_BUTTON_OUTPUT_FIGURE, &CFaultAmplitudeDlg::OnBnClickedButtonOutputFigure) ON_BN_CLICKED(IDC_BUTTON_OUTPUT_DATA, &CFaultAmplitudeDlg::OnBnClickedButtonOutputData) ON_BN_CLICKED(IDC_RADIO3, &CFaultAmplitudeDlg::OnBnClickedRadio3) ON_BN_CLICKED(IDC_RADIO4, &CFaultAmplitudeDlg::OnBnClickedRadio4) ON_BN_CLICKED(IDOK, &CFaultAmplitudeDlg::OnBnClickedOk) END_MESSAGE_MAP() // CFaultAmplitudeDlg 消息处理程序 BOOL CFaultAmplitudeDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 FillLayerCombos(); m_cbtnLow.SetColor(RGB(0, 0, 255)); m_cbtnHigh.SetColor(RGB(255, 0, 0)); switch (m_iCalcOption) { case 0: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(TRUE); break; case 1: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); break; default: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); break; } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CFaultAmplitudeDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CFaultAmplitudeDlg::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 { CDialog::OnPaint(); } } COLORREF CFaultAmplitudeDlg::GetLowColor(void) { if (!this->GetSafeHwnd()) return RGB(255, 255, 255); return m_cbtnLow.GetColor(); } COLORREF CFaultAmplitudeDlg::GetHighColor(void) { if (!this->GetSafeHwnd()) return RGB(255, 255, 255); return m_cbtnHigh.GetColor(); } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CFaultAmplitudeDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CFaultAmplitudeDlg::FillLayerCombos(void) { m_comboSurveyLayer.Clear(); m_controlFltLayer.Clear(); m_comboSurveyLayer.ResetContent(); m_controlFltLayer.ResetContent(); //if (!m_fmc->GetDfd()) // return; //GDfdMap* pdfd = m_fmc->GetDfd(); // //pdfd->GetLayers(m_layers); //if (m_layers.empty()) // return; // //for (int i = 0; i < m_layers.size(); i++) //{ // m_comboSurveyLayer.AddString((LPCTSTR)(m_layers[i].c_str())); // m_controlFltLayer.AddString((LPCTSTR)(m_layers[i].c_str())); //} // //if (m_layers.size() > 0) //{ // m_comboSurveyLayer.SetCurSel(0); // m_controlFltLayer.SetCurSel(0); //} } bool CFaultAmplitudeDlg::ReadDfd(void) { //if (m_fmc->ReadDfdMap(m_strInputFltSurvey.GetBuffer())) // return true; return false; } bool CFaultAmplitudeDlg::ReadDfg(void) { //if (m_fmc->ReadDfg(m_strInputDfg.GetBuffer())) // return true; return false; } void CFaultAmplitudeDlg::OnBnClickedButtonInputFltSurvey() { UpdateData(TRUE); CString filter; filter = "DFD文件(*.dfd)|*.dfd|所有文件(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal() == IDOK) { m_strInputFltSurvey = dlg.GetPathName(); } else m_strInputFltSurvey = ""; BeginWaitCursor(); if(ReadDfd()) FillLayerCombos(); EndWaitCursor(); this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedButtonInputDfg() { UpdateData(TRUE); CString filter; filter = "DFG文件(*.dfg)|*.dfg|所有文件(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal() == IDOK) { m_strInputDfg = dlg.GetPathName(); } else m_strInputDfg = ""; this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedButtonInputFaultNameFile() { UpdateData(TRUE); CString filter; filter = "Text文件(*.txt)|*.txt|所有文件(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal() == IDOK) { m_strFltNameFile = dlg.GetPathName(); } else m_strFltNameFile = ""; this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedButtonOutputFigure() { UpdateData(TRUE); CString filter; filter = "DFD文件(*.dfd)|*.dfd|所有文件(*.*)|*.*||"; CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal() == IDOK) { m_strOutFigure = dlg.GetPathName(); } else m_strOutFigure = ""; this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedButtonOutputData() { UpdateData(TRUE); CString filter; filter = "CSV文件(*.csv)|*.csv|所有文件(*.*)|*.*||"; CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, filter); if (dlg.DoModal() == IDOK) { m_strOutData = dlg.GetPathName(); } else m_strOutData = ""; this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedRadio3() { this->UpdateData(TRUE); switch (m_iCalcOption) { case 0: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(TRUE); break; case 1: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(FALSE); break; default: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(FALSE); break; } this->UpdateData(FALSE); } void CFaultAmplitudeDlg::OnBnClickedRadio4() { this->UpdateData(TRUE); switch (m_iCalcOption) { case 0: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(TRUE); break; case 1: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(FALSE); break; default: GetDlgItem(IDC_COMBO_SURVEY_LAYERS)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_STEP)->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_LOCAL_DIRECT)->EnableWindow(FALSE); break; } this->UpdateData(FALSE); } void CFaultAmplitudeDlg::ReadParameters(void) { //m_fmc->SetOutPaths(m_strOutFigure, m_strOutData); //m_controlFltLayer.GetLBText(m_controlFltLayer.GetCurSel(), m_fmc->m_strFltLayer); //m_comboSurveyLayer.GetLBText(m_comboSurveyLayer.GetCurSel(), m_fmc->m_strSurveyLayer); // //m_fmc->m_strFltNameFile = m_strFltNameFile; //m_fmc->m_iCalcMethod = m_iCalcOption; // 0= //m_fmc->m_pillarStep= m_fStep; // //m_fmc->m_thresholdValue= m_fClrThresholds; // //m_fmc->m_clrLow= GetLowColor(); //小 //m_fmc->m_clrHigh= GetHighColor(); //大 //m_fmc->m_PillarWidth= m_fPillarWidth; //柱 //m_fmc->m_PillarHeightRatio= m_fPillarHeightRatio; //m_fmc->m_TextHeight= m_fTextHeight; //文字 //m_fmc->m_bLocalFltDirect = m_bLocalDirect; //柱子方向 } void CFaultAmplitudeDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //CDialog::OnOK(); this->UpdateData(TRUE); //BeginWaitCursor(); //this->ReadDfg(); //ReadParameters(); //CString inputFile("C:\\GeoIntelligent\\Test\\太平屯工区4\\FaultAnalyze\\FaultAmplitude\\Stratum\\P.dfd"); //CString resultFile("C:\\GeoIntelligent\\Test\\太平屯工区4\\FaultAnalyze\\FaultAmplitude\\Stratum\\P_Amp.kev"); //CString statisticFile("C:\\GeoIntelligent\\Test\\太平屯工区4\\FaultAnalyze\\FaultAmplitude\\Stratum\\P_Stat.csv"); CString inputFile("C:\\temp\\7月28日培训项目\\FaultAnalyze\\FaultAmplitude\\Stratum\\松辽盆地北部T1构造图-.dfd"); CString resultFile("C:\\temp\\7月28日培训项目\\FaultAnalyze\\FaultAmplitude\\Stratum\\K1_Amp.kev"); CString statisticFile("C:\\temp\\7月28日培训项目\\FaultAnalyze\\FaultAmplitude\\Stratum\\K1_Stat.csv"); CString faultLayer("断层\\T1-断层"); bool calByStep = true; double calStep = 100; double divideValue = 10; double pillarWidth = 20; double pillarScale = 5; double textHeight = 5; int heighColor = 255; int lowColor = 16711680; bool bLocalFltDirect = false; //bool bWithIncline = true; //double inclineScale = 20; bool bWithIncline = false; double inclineScale = 10; int inclineColor = 16711680; CString surveyLayer("测线"); CString faultNames(""); CFaultAmplitudeCreator faCreator; //MessageBox(nullptr, inputFile, "openFile", 0); if (faCreator.ReadDfdMap(inputFile) == false) { return; } //MessageBox(nullptr, "Opened", "openFile", 0); // 打开输入文件 CDrawerIO drawerIo; CXy* pXy = new CXy; pXy->m_bRealTimeDraw = false; if (drawerIo.OpenFile(inputFile, pXy) == false) { delete pXy; return; } //MessageBox(nullptr, "drawerIo.OpenFile", "openFile", 0); CPtrList* pDataAll = pXy->GetValueList(); POSITION pos = pDataAll->GetHeadPosition(); int nEleType = 0; COne *pOne; CMesh* pMesh = nullptr; bool bSuccess = false; while (pos) { pOne = (COne *)(pDataAll->GetNext(pos)); nEleType = pOne->GetType(); // 网格 if (nEleType == DOUBLEFOX_MESH) { pMesh = (CMesh*)pOne->value; CGrid* pGrid = pMesh->GetMesh(); faCreator.CreateDfg(pGrid->xnum(), pGrid->ynum(), pGrid->xmin(), pGrid->ymin(), pGrid->dx(), pGrid->dy() , ((CDimension2D*)pGrid)->u); faCreator.SetZRange(pGrid->range[0], pGrid->range[1]); bSuccess = true; break; } } delete pXy; faCreator.SetOutPaths(resultFile, statisticFile); faCreator.m_strFltLayer = faultLayer; faCreator.m_strSurveyLayer = surveyLayer; //faCreator.m_strFltNameFile = m_strFltNameFile; // 断层名称文件 faCreator.m_iCalcMethod = calByStep ? 0 : 1; // 0= faCreator.m_pillarStep = (float)calStep; // faCreator.m_thresholdValue = divideValue; // faCreator.m_clrLow = lowColor; //小 faCreator.m_clrHigh = heighColor; // 大 faCreator.m_PillarWidth = pillarWidth; // 柱 faCreator.m_PillarHeightRatio = pillarScale; faCreator.m_TextHeight = textHeight; // 文字 faCreator.m_strFltNames = faultNames; // 断层名称 faCreator.m_bLocalFltDirect = bLocalFltDirect; //柱子方向 faCreator.m_bWithIncline = bWithIncline; // faCreator.m_inclineScale = inclineScale; faCreator.m_clrIncline = inclineColor; if (faCreator.Execute()) AfxMessageBox("Complete"); else AfxMessageBox("Failed"); //EndWaitCursor(); }