#include "stdafx.h" #include "twt_pump.h" #include "DoubleLinePipeReducerEditDlg.h" #include "SelectBlkDlg.h" #include "DbDoubleLinePipeReducer.h" #include "DbDoubleLinePipe.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //#ifdef _WIN64 #include "TGAs.h" //#endif // 编辑大小接头 int EditDoubleLineReducer(AcDbObjectId id) { TDbDoubleLinePipeReducer *pDLPipeReducer = NULL; acdbOpenObject(pDLPipeReducer, id, AcDb::kForWrite); if (pDLPipeReducer != NULL) { AcDbObjectId id1, id2; id1 = pDLPipeReducer->GetIPipe(0); // 大小接头起点处接口 id2 = pDLPipeReducer->GetIPipe(1); // 大小接头终点处接口 if ((id1.isValid() && id2.isValid()&&!id1.isErased()&&!id2.isErased())) // 两个接口都连接着管子 { acutPrintf(_T("\n无法编辑大小接头,请删除后重新绘制!")); } else if ((id1.isValid() && !id1.isErased()) || (id2.isValid() && !id2.isErased()) ) { double dPipeDia1 = 0.0, dPipeDia2 = 0.0; double dPressure = 1.0; double dFlangeThick1 = 0.0, dFlangeThick2 = 0.0; double dFlangeDia1 = 0.0, dFlangeDia2 = 0.0; int nType = 0, nLinkType = 0; dPipeDia1 = pDLPipeReducer->GetSPipeDiameter(); dPipeDia2 = pDLPipeReducer->GetEPipeDiameter(); dFlangeDia1 = pDLPipeReducer->GetSFlangeDiameter(); dFlangeDia2 = pDLPipeReducer->GetEFlangeDiameter(); dFlangeThick1 = pDLPipeReducer->GetSFlangeThick(); dFlangeThick2 = pDLPipeReducer->GetEFlangeThick(); nType = pDLPipeReducer->GetType(); nLinkType = pDLPipeReducer->GetLinkType(); CTemporaryResourceOverride vTemp; CDoubleLinePipeReducerEditDlg dlg; // 根据那个接口连接着管子确定大小接头的起点位置 if (id1.isValid() && !id1.isErased()) { ads_name ent; acdbGetAdsName(ent, id1); CString csPn = ReadXdata(ent, _T("TG-PIPE-FLANGE-PN")); // cet 2010.5.19 add if (csPn.IsEmpty()) { csPn = _T("1.0MPa"); } csPn.TrimRight(_T("MPa")); dPressure = _tstof(csPn); dlg.SetOldPipeDiameter(dPipeDia1); dlg.SetNewPipeDiameter(dPipeDia2); dlg.SetOldPipePressure(dPressure); dlg.SetNewPipePressure(dPressure); dlg.SetOldFlangeDiameter(dFlangeDia1); dlg.SetNewFlangeDiameter(dFlangeDia2); dlg.SetOldFlangeThick(dFlangeThick1); dlg.SetNewFlangeThick(dFlangeThick2); dlg.SetPipeType(nType); dlg.SetLinkType(nLinkType); if (dlg.DoModal() == IDOK) { pDLPipeReducer->SetEPipeDiameter(dlg.GetNewPipeDiameter()); pDLPipeReducer->SetEFlangeDiameter(dlg.GetNewFlangeDiameter()); pDLPipeReducer->SetEFlangeThick(dlg.GetNewFlangeThick()); pDLPipeReducer->SetType(dlg.GetPipeType()); pDLPipeReducer->SetSPipeFlangeDist(dlg.GetH1()); pDLPipeReducer->SetEPipeFlangeDist(dlg.GetH2()); pDLPipeReducer->SetLenght(dlg.GetL()); } } else { ads_name ent; acdbGetAdsName(ent, id2); CString csPn = ReadXdata(ent, _T("TG-PIPE-FLANGE-PN")); csPn.TrimRight(_T("MPa")); dPressure = _tstof(csPn); dlg.SetOldPipeDiameter(dPipeDia2); dlg.SetNewPipeDiameter(dPipeDia1); dlg.SetOldPipePressure(dPressure); dlg.SetNewPipePressure(dPressure); dlg.SetOldFlangeDiameter(dFlangeDia2); dlg.SetNewFlangeDiameter(dFlangeDia1); dlg.SetOldFlangeThick(dFlangeThick2); dlg.SetNewFlangeThick(dFlangeThick1); dlg.SetPipeType(nType); dlg.SetLinkType(nLinkType); if (dlg.DoModal() == IDOK) { pDLPipeReducer->SetSPipeDiameter(dlg.GetNewPipeDiameter()); pDLPipeReducer->SetSFlangeDiameter(dlg.GetNewFlangeDiameter()); pDLPipeReducer->SetSFlangeThick(dlg.GetNewFlangeThick()); pDLPipeReducer->SetType(dlg.GetPipeType()); pDLPipeReducer->SetSPipeFlangeDist(dlg.GetH1()); pDLPipeReducer->SetEPipeFlangeDist(dlg.GetH2()); pDLPipeReducer->SetLenght(dlg.GetL()); } } } else // 两个接口都没有连接管子 { acutPrintf(_T("\n无法编辑大小接头,请删除后重新绘制!")); } pDLPipeReducer->Close(); } return 0; } CDoubleLinePipeReducerEditDlg::CDoubleLinePipeReducerEditDlg(CWnd* pParent /*=NULL*/) : CDialog(CDoubleLinePipeReducerEditDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDoubleLinePipeReducerEditDlg) m_dWndEdtOldPipeDia = 0.0; m_nWndRadPipeType = 0; m_dWndEdtOldFlangeThick = 0.0; m_dWndEdtOldFlangeDia = 0.0; m_dWndEdtOldPressure = 0.0; m_dWndEdtNewFlangeThick = 0.0; m_dWndEdtNewFlangeDia = 0.0; //}}AFX_DATA_INIT m_nLinkType = 0; m_dNewPipeDiameter = 0.0; m_dNewPipePressure = 0.0; m_dH1 = 0.0; m_dH2 = 0.0; m_dL = 0.0; } void CDoubleLinePipeReducerEditDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDoubleLinePipeReducerEditDlg) DDX_Control(pDX, IDC_CMB_NEWPIPEDIAMETER, m_wndCmbPipeDiameter); DDX_Control(pDX, IDC_CMB_NEWPRESSURE, m_wndCmbPipePressure); DDX_Text(pDX, IDC_EDT_OLDFLANGEDIAMETER, m_dWndEdtOldFlangeDia); DDX_Radio(pDX, IDC_RADIO1, m_nWndRadPipeType); DDX_Text(pDX, IDC_EDT_OLDFLANGETHICK, m_dWndEdtOldFlangeThick); DDX_Text(pDX, IDC_EDT_OLDPIPEDIAMETER, m_dWndEdtOldPipeDia); // DDX_Text(pDX, IDC_EDT_OLDPRESSURE, m_dWndEdtOldPressure); DDX_Text(pDX, IDC_EDT_NEWFLANGETHICK, m_dWndEdtNewFlangeThick); DDX_Text(pDX, IDC_EDT_NEWFALNGEDIAMETER, m_dWndEdtNewFlangeDia); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDoubleLinePipeReducerEditDlg, CDialog) //{{AFX_MSG_MAP(CDoubleLinePipeReducerEditDlg) ON_WM_PAINT() ON_CBN_SELCHANGE(IDC_CMB_NEWPRESSURE, OnSelchangeCmbNewpressure) ON_CBN_SELCHANGE(IDC_CMB_NEWPIPEDIAMETER, OnSelchangeCmbNewpipediameter) ON_BN_CLICKED(IDC_RADIO1, OnRadio1) ON_BN_CLICKED(IDC_RADIO2, OnRadio1) ON_BN_CLICKED(IDC_RADIO3, OnRadio1) //}}AFX_MSG_MAP END_MESSAGE_MAP() double CDoubleLinePipeReducerEditDlg::GetNewPipePressure() { double dVal = 0.0; int nIndex = m_wndCmbPipePressure.GetCurSel(); if (nIndex != -1) { CString strTemp; m_wndCmbPipePressure.GetLBText(nIndex, strTemp); dVal = _tstof(strTemp); } return dVal; } void CDoubleLinePipeReducerEditDlg::SetNewPipePressure(double dPipePressure) { CString strTemp; strTemp.Format(_T("%f"), dPipePressure); strTemp.TrimRight(_T("0")); strTemp.TrimRight(_T(".")); m_strPressure = strTemp; } double CDoubleLinePipeReducerEditDlg::GetNewPipeDiameter() { return m_dNewPipeDiameter; } void CDoubleLinePipeReducerEditDlg::SetNewPipeDiameter(double dPipeDiameter) { m_dNewPipeDiameter = dPipeDiameter; } void CDoubleLinePipeReducerEditDlg::OpenSlide() { UpdateData(TRUE); //比较两管径大小 CString strTmp; int nIndex = m_wndCmbPipeDiameter.GetCurSel(); m_wndCmbPipeDiameter.GetLBText(nIndex, strTmp); double dNewPipeDia = _tstof(strTmp); bool bVal = m_dWndEdtOldPipeDia >= dNewPipeDia; // 判断需显示的幻灯片 CString strSlb; if (m_nLinkType == eJointing) // 焊接 { if (m_nWndRadPipeType == 0) // 同心 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER1)"); } else { strSlb = _T("TWT(PIPEREDUCER2)"); } } else if (m_nWndRadPipeType == 1) // 偏心顶平 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER3)"); } else { strSlb = _T("TWT(PIPEREDUCER4)"); } } else if (m_nWndRadPipeType == 2) // 偏心底平 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER5)"); } else { strSlb = _T("TWT(PIPEREDUCER6)"); } } } else // 法兰链接 { if (m_nWndRadPipeType == 0) // 同心 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER7)"); } else { strSlb = _T("TWT(PIPEREDUCER8)"); } } else if (m_nWndRadPipeType == 1) // 偏心顶平 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER9)"); } else { strSlb = _T("TWT(PIPEREDUCER10)"); } } else if (m_nWndRadPipeType == 2) // 偏心底平 { if (bVal) { strSlb = _T("TWT(PIPEREDUCER11)"); } else { strSlb = _T("TWT(PIPEREDUCER12)"); } } } // 显示幻灯片 CWnd *pImageBox = GetDlgItem(IDC_STC_PREVIEW); if (pImageBox != NULL) { DrawSlide((const TCHAR*)strSlb, pImageBox); } } void CDoubleLinePipeReducerEditDlg::OnPaint() { CPaintDC dc(this); OpenSlide(); } void CDoubleLinePipeReducerEditDlg::Init() { FLANGEDATA data1[] = { {50, 140, 12}, {65, 160, 14}, {80, 190, 14}, {100, 210, 14}, {125, 240, 14}, {150, 265, 16}, {200, 320, 18}, {250, 375, 22}, {300, 440, 22}, {350, 490, 22}, {400, 540, 22}, {450, 595, 24}, {500, 645, 24}, {600, 755, 24}, {700, 860, 26}, {800, 975, 26}, {900, 1075, 28}, {1000, 1175, 30}, {1200, 1375, 30}, {1400, 1575, 32}, {1600, 1790, 32}, {1800, 1990, 34}, {2000, 2190, 34}, }; std::vector vec1(data1, data1 + 23); m_mapFlangeData.insert(std::make_pair(CString(_T("0.25")), vec1)); FLANGEDATA data2[] = { {50, 140, 16}, {65, 160, 16}, {80, 190, 18}, {100, 210, 18}, {125, 240, 20}, {150, 265, 20}, {200, 320, 22}, {250, 375, 24}, {300, 440, 24}, {350, 490, 26}, {400, 540, 28}, {450, 595, 28}, {500, 645, 30}, {600, 755, 30}, {700, 860, 32}, {800, 975, 32}, {900, 1075, 34}, {1000, 1175, 36}, {1200, 1405, 38}, {1400, 1630, 44}, {1600, 1830, 46}, {1800, 2045, 52}, {2000, 2265, 54}, }; std::vector vec2(data2, data2 + 23); m_mapFlangeData.insert(std::make_pair(CString(_T("0.6")), vec2)); FLANGEDATA data3[] = { {50, 165, 18}, {65, 185, 20}, {80, 200, 20}, {100, 220, 22}, {125, 250, 24}, {150, 285, 24}, {200, 340, 24}, {250, 395, 26}, {300, 445, 28}, {350, 505, 28}, {400, 565, 30}, {450, 615, 30}, {500, 670, 32}, {600, 780, 36}, {700, 895, 36}, {800, 1015, 38}, {900, 1115, 42}, {1000, 1230, 44}, {1200, 1455, 48}, {1400, 1675, 54}, {1600, 1915, 62}, {1800, 2115, 66}, {2000, 2325, 72}, }; std::vector vec3(data3, data3 + 23); m_mapFlangeData.insert(std::make_pair(CString(_T("1.0")), vec3)); FLANGEDATA data4[] = { {50, 165, 22}, {65, 185, 24}, {80, 200, 24}, {100, 220, 26}, {125, 250, 28}, {150, 285, 28}, {200, 340, 30}, {250, 405, 32}, {300, 460, 32}, {350, 520, 34}, {400, 580, 38}, {450, 640, 42}, {500, 715, 48}, {600, 840, 50}, }; std::vector vec4(data4, data4 + 23); m_mapFlangeData.insert(std::make_pair(CString(_T("1.6")), vec4)); CWnd *pWnd = NULL; m_wndCmbPipePressure.EnableWindow(FALSE); pWnd = NULL; pWnd = GetDlgItem(IDC_EDT_NEWFALNGEDIAMETER); if (pWnd != NULL) { pWnd->EnableWindow(FALSE); } pWnd = NULL; pWnd = GetDlgItem(IDC_EDT_NEWFLANGETHICK); if (pWnd != NULL) { pWnd->EnableWindow(FALSE); } // 为异径管管径添加数据 CodeBase db; XString fullFile; if(!FindFile(_T("PipeReducer.dbf"), fullFile)) { Callme(_T("对不起,没有发现PipeReducer.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(!pTable) { Callme(_T("PipeReducer.dbf文件出错!")); return; } int nType = 0; double dDn1 = 0.0, dDn2 = 0.0; std::set setData; double dPipeDia = GetNewPipeDiameter(); pTable->MoveFirst(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("Type"), nType); if (m_nWndRadPipeType == 0) { if (nType == 0) //同心 { GET_FIELD(pTable, _T("Dn1"), dDn1); GET_FIELD(pTable, _T("Dn2"), dDn2); if (fabs(m_dWndEdtOldPipeDia - dDn1) < 1e-3) { setData.insert(dDn2); } else if (fabs(m_dWndEdtOldPipeDia - dDn2) < 1e-3) { setData.insert(dDn1); } } } else if (m_nWndRadPipeType == 1 || m_nWndRadPipeType == 2) { if (nType == 1) //偏心 { GET_FIELD(pTable, _T("Dn1"), dDn1); GET_FIELD(pTable, _T("Dn2"), dDn2); if (fabs(m_dWndEdtOldPipeDia - dDn1) < 1e-3) { setData.insert(dDn2); } else if (fabs(m_dWndEdtOldPipeDia - dDn2) < 1e-3) { setData.insert(dDn1); } } } pTable->MoveNext(); } std::set::iterator it; CString strTmp; m_wndCmbPipeDiameter.Clear(); for (it = setData.begin(); it != setData.end(); it++) { strTmp.Format(_T("%f"), *it); strTmp.TrimRight(_T("0")); strTmp.TrimRight(_T(".")); m_wndCmbPipeDiameter.AddString(strTmp); } // 设置压力值 int i = m_wndCmbPipePressure.FindString(0, m_strPressure); if (i != -1) { m_wndCmbPipePressure.SetCurSel(i); } pWnd = GetDlgItem(IDC_EDT_OLDPRESSURE); if (pWnd != NULL) { if (fabs(m_dWndEdtOldPressure - 1.0) < 1e-3) { pWnd->SetWindowText(_T("1.0")); } else if (fabs(m_dWndEdtOldPressure - 0.6) < 1e-3) { pWnd->SetWindowText(_T("0.6")); } else if (fabs(m_dWndEdtOldPressure - 0.25) < 1e-3) { pWnd->SetWindowText(_T("0.25")); } else if (fabs(m_dWndEdtOldPressure - 1.6) < 1e-3) { pWnd->SetWindowText(_T("1.6")); } } // 设置管子直径 strTmp.Format(_T("%.0f"), m_dNewPipeDiameter); i = m_wndCmbPipeDiameter.FindString(0, strTmp); if (i != -1) { m_wndCmbPipeDiameter.SetCurSel(i); } else { m_wndCmbPipeDiameter.SetCurSel(0); } } BOOL CDoubleLinePipeReducerEditDlg::OnInitDialog() { CDialog::OnInitDialog(); Init(); if (m_nLinkType == eFlangeLInk) { OnSelchangeCmbNewpressure(); } return TRUE; } void CDoubleLinePipeReducerEditDlg::OnSelchangeCmbNewpressure() { if (m_nLinkType == eJointing) { m_dWndEdtNewFlangeDia = 0.0; m_dWndEdtNewFlangeThick = 0.0; return; } int nIndex1 = m_wndCmbPipePressure.GetCurSel(); int nIndex2 = m_wndCmbPipeDiameter.GetCurSel(); if (nIndex1 != -1 && nIndex2 != -1) { CString strTemp; m_wndCmbPipePressure.GetLBText(nIndex1, strTemp); std::map >::iterator iter; iter = m_mapFlangeData.find(strTemp); if (iter != m_mapFlangeData.end()) { double dDia = 0.0; m_wndCmbPipeDiameter.GetLBText(nIndex2, strTemp); dDia = _tstof(strTemp); std::vector::iterator it; for (it = (*iter).second.begin(); it != (*iter).second.end(); it++) { if (fabs((*it).dPipeDiameter - dDia) < 1e-3) { m_dWndEdtNewFlangeDia = (*it).dFlangeDiameter; m_dWndEdtNewFlangeThick = (*it).dFlangeThick; UpdateData(FALSE); break; } } } } } void CDoubleLinePipeReducerEditDlg::OnOK() { CWnd *pWnd = NULL; pWnd = GetDlgItem(IDC_CMB_NEWPIPEDIAMETER); if (pWnd != NULL) { CString strTemp; pWnd->GetWindowText(strTemp); m_dNewPipeDiameter = _tstof(strTemp); } QueryData(); CDialog::OnOK(); } void CDoubleLinePipeReducerEditDlg::OnSelchangeCmbNewpipediameter() { CWnd *pWnd = NULL; pWnd = GetDlgItem(IDC_CMB_NEWPIPEDIAMETER); if (pWnd != NULL) { CString strTemp; pWnd->GetWindowText(strTemp); m_dNewPipeDiameter = _tstof(strTemp); } OnSelchangeCmbNewpressure(); // 调整法兰参数 OpenSlide(); // 更改幻灯片 } void CDoubleLinePipeReducerEditDlg::OnRadio1() { OpenSlide(); // 更改幻灯片 } void CDoubleLinePipeReducerEditDlg::QueryData() { CodeBase db; XString fullFile; if(!FindFile(_T("PipeReducer.dbf"), fullFile)) { Callme(_T("对不起,没有发现PipeReducer.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(!pTable) { Callme(_T("PipeReducer.dbf文件出错!")); return; } pTable->MoveFirst(); int nType = 0; double dDn1 = 0.0, dDn2 = 0.0; UpdateData(TRUE); double dPipeDia = GetNewPipeDiameter(); while(!pTable->IsEOF()) { GET_FIELD(pTable, _T("Type"), nType); if (m_nWndRadPipeType == 0) { if (nType == 0) //同心 { GET_FIELD(pTable, _T("Dn1"), dDn1); GET_FIELD(pTable, _T("Dn2"), dDn2); if (fabs(m_dWndEdtOldPipeDia - dDn1) < 1e-3 && fabs(dPipeDia - dDn2) < 1e-3) { GET_FIELD(pTable, _T("H1"), m_dH1); GET_FIELD(pTable, _T("H2"), m_dH2); GET_FIELD(pTable, _T("L"), m_dL); break; } else if (fabs(m_dWndEdtOldPipeDia - dDn2) < 1e-3 && fabs(dPipeDia - dDn1) < 1e-3) { GET_FIELD(pTable, _T("H1"), m_dH2); GET_FIELD(pTable, _T("H2"), m_dH1); GET_FIELD(pTable, _T("L"), m_dL); break; } } } else if (m_nWndRadPipeType == 1 || m_nWndRadPipeType == 2) { if (nType == 1) //偏心 { GET_FIELD(pTable, _T("Dn1"), dDn1); GET_FIELD(pTable, _T("Dn2"), dDn2); if (fabs(m_dWndEdtOldPipeDia - dDn1) < 1e-3 && fabs(dPipeDia - dDn2) < 1e-3) { GET_FIELD(pTable, _T("H1"), m_dH1); GET_FIELD(pTable, _T("H2"), m_dH2); GET_FIELD(pTable, _T("L"), m_dL); break; } else if (fabs(m_dWndEdtOldPipeDia - dDn2) < 1e-3 && fabs(dPipeDia - dDn1) < 1e-3) { GET_FIELD(pTable, _T("H1"), m_dH2); GET_FIELD(pTable, _T("H2"), m_dH1); GET_FIELD(pTable, _T("L"), m_dL); break; } } } pTable->MoveNext(); } if (m_nLinkType == eJointing) { m_dH1 = 0.0; m_dH2 = 0.0; } }