// PipeChangeMatDlg.cpp : implementation file // #include "stdafx.h" #include "PipeChangeMatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //*************************************************************************************************** // 变更管材 //*************************************************************************************************** void ChangePipeMatCmd() { CTemporaryResourceOverride vTemp; CPipeChangeMatDlg dlg; if(dlg.DoModal() != IDOK) return; RBList rbMask(RTDXF0, _T("ATS_PIPE"),NULL); PickSet ss(SS_FREE); PickSet ssErr(SS_FREE); if(SelectEntities(_T("\n请选择要变更的范围:<整张图>"), ss, rbMask) != RTNORM) ss.Get(_T("X"), NULL, NULL, rbMask); ss.Redraw(3); TCHAR szTmp[32]; ads_getstring(0, _T("\n所有要修改管材的管线已经亮显。是否确认变更它们的管材?:"), szTmp); ss.Redraw(4); if(_tcsicmp(szTmp, _T("Y")) != 0) return; long len = ss.Length(); for(long i=0;iGetMaterial(); CString csMat = GetPipeMaterialByIdx(iMat); if(iMat == dlg.m_iMatOld){ if(pPipe->upgradeOpen()==Acad::eOk) { pPipe->SetMaterial(dlg.m_iMatNew); if(dlg.m_bDn){ // 同时修改管径标注 CString csLable = pPipe->GetLabel(); double dDn = pPipe->GetDnDiameter(); CString csDim; csDim.Format(_T("%s%.0f"), csLable, dDn); if(csLable == dlg.m_csDnOld){ CString csVal; if(!dlg.m_map.Lookup(csDim, csVal)) { if(!dlg.m_map2.Lookup(csDim, csVal)) { ssErr += ent; continue; } } XString xsText; int num, numWith; StringAnalysis((const TCHAR*)csVal, xsText, &num, &numWith); CString csLable2 = (const TCHAR*)xsText; if(csLable2 == dlg.m_csDnNew){ pPipe->SetLabel((const TCHAR*)xsText); pPipe->SetDnDiameter(num); continue; } } } pPipe->downgradeOpen(); ssErr += ent; } } } OPENOBJ_END(); } len = ssErr.Length(); if(len > 0) { adsout << _T("还有一些管线由于没有对应管径,无法修改其标注。已选中"); ads_sssetfirst(ssErr, ssErr); } } ///////////////////////////////////////////////////////////////////////////// // CPipeChangeMatDlg dialog CPipeChangeMatDlg::CPipeChangeMatDlg(CWnd* pParent /*=NULL*/) : CDialog(CPipeChangeMatDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPipeChangeMatDlg) m_bDn = FALSE; m_csDnNew = _T("DN"); m_csDnOld = _T("De"); m_iMatNew = -1; m_iMatOld = -1; //}}AFX_DATA_INIT } void CPipeChangeMatDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPipeChangeMatDlg) DDX_Control(pDX, IDC_COMBO_OLD, m_comboMatOld); DDX_Control(pDX, IDC_COMBO_NEW, m_comboMatNew); DDX_Check(pDX, IDC_CHECK_DN, m_bDn); DDX_CBString(pDX, IDC_COMBO_DN_NEW, m_csDnNew); DDX_CBString(pDX, IDC_COMBO_DN_OLD, m_csDnOld); DDX_CBIndex(pDX, IDC_COMBO_NEW, m_iMatNew); DDX_CBIndex(pDX, IDC_COMBO_OLD, m_iMatOld); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPipeChangeMatDlg, CDialog) //{{AFX_MSG_MAP(CPipeChangeMatDlg) ON_BN_CLICKED(IDC_CHECK_DN, OnCheckDn) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPipeChangeMatDlg message handlers BOOL CPipeChangeMatDlg::OnInitDialog() { CDialog::OnInitDialog(); XStringList lstMat; GetPipeMaterialList(lstMat); for(int i=0;iEnableWindow(TRUE); pWnd2->EnableWindow(TRUE); pWnd3->EnableWindow(TRUE); } else{ pWnd1->EnableWindow(FALSE); pWnd2->EnableWindow(FALSE); pWnd3->EnableWindow(FALSE); } } void CPipeChangeMatDlg::OnOK() { UpdateData(TRUE); if(m_iMatOld == m_iMatNew){ MessageBox(_T("原管材和新管材一致,无需变更!")); return; } if(m_bDn){ for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csDn1 = (*pRow)[0].GetText().cs(); CString csDn2 = (*pRow)[1].GetText().cs(); if(csDn1 == _T("") || csDn2 == _T("")) continue; m_map.SetAt(csDn1, csDn2); m_map2.SetAt(csDn2, csDn1); } } CDialog::OnOK(); }