#include "stdafx.h" #include "WPipeDrawConfigDlg.h" #include "KTModelLayoutXData.h" #include "./syslayercfg/WSysLayCfgDlg.h" #include "CoreTools.h" #include "GZCLDlg.h" #include "KTInsulateMainDlg.h" #include "PipelineTools.h" #include "CFLEndFGsDlg.h" #include "AecPipeSupport.h" #include "KTMediumDlg.h" extern void DLLIMPEXP PipeParamConvert2UnitMeters(WPipe::PipeParam* pParam); extern void DLLIMPEXP XDataMapToPipeParam(const AecDbObjXDataMap* pXDataMapSrc, WPipe::PipeParam* pParamL); extern void DLLIMPEXP PipeParamConvert2UnitMmeters(WPipe::PipeParam* pParam); #define _BYGB_ _T("按执行标准") double g_minRadio = 1.0; CWPipeDrawConfigDlg* CWPipeDrawConfigDlg::s_pwndLastData = NULL; IMPLEMENT_DYNAMIC(CWPipeDrawConfigDlg, CDialog) double CWPipeDrawConfigDlg::g_dMinRRadio = 1.0; CWPipeDrawConfigDlg::CWPipeDrawConfigDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_WPIPEDRAWCFGDLG, pParent) , m_nDDir(0) , m_nConnectType(0) , m_nRadioOn(1) , m_sFEGSInf(_T("")) , m_dFPLen(6000) , m_dEl(0) , m_nElSel(0) , m_sSerNo(_T("")) , m_sZoneNo(_T("")) , m_sUnitNo(_T("")) , m_sPipeNo(_T("")) , m_sCurrSys(_T("")) , m_sDescr(_T("")) ,m_sMaterial(_T("碳钢")) ,m_sMaterialFit(_T("碳钢")) ,m_sParamSetting(_T("")) , m_bFlangNoBom(FALSE) { m_sODSn = _T("B"); m_sProject = _T("工业"); m_nTrade = WPipe::eCivial; m_dDn = 100.0; m_dOD = 114.0; m_dThk = 7.0; m_dRRatio = 2.0; m_nOnlyDN = 0; m_bEleReadOnly = FALSE; m_bOnlyDn = FALSE; m_sCurrSys = _T(""); m_sSerNo = _T("1000"); m_dInterfaceL = 0.0;//法兰管的法兰厚 m_dInterfaceD = 0.0;//法兰管的法兰外径 m_sLevel = _T("L91A"); m_dPressure = 1.0; m_bLevelSel = TRUE; m_sProject = _T("工业"); m_nTrade = WPipe::eCivial; m_sFEGSInf = _T(""); m_szShtNo = _T(""); m_sUnitNo = _T("X"); m_sTraMtoInfo = _T(""); m_sTraDescr = _T(""); m_nRadioOn = 1;//强制为1查询不到计算 m_nColorIndex = 256; m_sEndF1 = _T(""); m_sEndF2 = _T(""); m_sGaskets = _T(""); m_nSglorDBL = 1; m_pDb = NULL; m_bLoadLast = FALSE; m_dInsThk = 20.0; m_nElSel = 0; UIHistory::readCache(FILE_NAME_INI , _T("CWPipeDrawConfigDlg2") //新 , _T("%d%d%d%d%d%f%f%f%f%f%f%f%f%f%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d") , &m_nDDir //%d , &m_nConnectType //%d , &m_nRadioOn //%d , &m_nSglorDBL //%d , &m_bFlangNoBom //%d , &m_dFPLen //%f , &m_dEl //%f , &m_dDn //%f , &m_dOD //%f , &m_dThk //%f , &m_dRRatio //%f , &m_dInterfaceL //%f , &m_dInterfaceD //%f , &m_dPressure //%f , &m_sSerNo //%s , &m_sZoneNo //%s , &m_sUnitNo //%s , &m_sPipeNo //%s , &m_sCurrSys //%s , &m_sDescr //%s , &m_sMaterial //%s , &m_sMaterialFit //%s , &m_sParamSetting //%s , &m_sODSn //%s , &m_sLevel //%s , &m_szShtNo //%s , &m_sTraMtoInfo //%s , &m_sTraDescr //%s , &m_sEndF1 //%s , &m_sEndF2 //%s , &m_sFEGSInf //%s , &m_sGaskets //%s , &m_nElSel ); // 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel // 这样,双击弹出后,保证标高数据和标高基准数据可以匹配 m_nRadioOn = 1;//强制为1查询不到计算 m_nRadSel = 0; } CWPipeDrawConfigDlg::~CWPipeDrawConfigDlg() { UIHistory::writeCache(FILE_NAME_INI , _T("CWPipeDrawConfigDlg2") //新 , _T("%d%d%d%d%d%f%f%f%f%f%f%f%f%f%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d") , m_nDDir //%d , m_nConnectType //%d , m_nRadioOn //%d , m_nSglorDBL //%d , m_bFlangNoBom //%d , m_dFPLen //%f , m_dEl //%f , m_dDn //%f , m_dOD //%f , m_dThk //%f , m_dRRatio //%f , m_dInterfaceL //%f , m_dInterfaceD //%f , m_dPressure //%f , m_sSerNo //%s , m_sZoneNo //%s , m_sUnitNo //%s , m_sPipeNo //%s , m_sCurrSys //%s , m_sDescr //%s , m_sMaterial //%s , m_sMaterialFit //%s , m_sParamSetting //%s , m_sODSn //%s , m_sLevel //%s , m_szShtNo //%s , m_sTraMtoInfo //%s , m_sTraDescr //%s , m_sEndF1 //%s , m_sEndF2 //%s , m_sFEGSInf //%s , m_sGaskets //%s , m_nElSel ); } void CWPipeDrawConfigDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_PIPELIST, m_wndPipeList); DDX_Control(pDX, IDC_LIST2, m_wndPressList); DDX_Control(pDX, IDC_LIST1, m_wndSpecList); DDX_Control(pDX, IDC_LISTELBOWRAD, m_wndElbowradList); DDX_LBIndex(pDX, IDC_LISTELBOWRAD, m_nRadSel); DDX_Radio(pDX, IDC_RADIODN, m_nDDir); DDX_Radio(pDX, IDC_RADIO1, m_nConnectType); DDX_Text(pDX, IDC_EDITFEGS, m_sFEGSInf); DDX_Text(pDX, IDC_EDIT1, m_dFPLen); DDX_Text(pDX, IDC_EDITEL, m_dEl); DDX_Radio(pDX, IDC_RADIOE0, m_nElSel); DDX_Text(pDX, IDC_EDITSERNO, m_sSerNo); DDX_Text(pDX, IDC_EDITZONE, m_sZoneNo); DDX_Text(pDX, IDC_EDITUNITNO, m_sUnitNo); DDX_Text(pDX, IDC_EDITPIPECODE, m_sPipeNo); DDX_Control(pDX, IDC_COMBOMATERS, m_wndComboMaters); DDX_Control(pDX, IDC_COMBOMATERSFIT, m_wndComboMatersFit); DDX_CBString(pDX, IDC_COMBOSYSLAY, m_sCurrSys); DDX_Text(pDX, IDC_EDITDESCR, m_sDescr); DDX_CBString(pDX, IDC_COMBOMATERS, m_sMaterial); DDX_CBString(pDX, IDC_COMBOMATERSFIT, m_sMaterialFit); DDX_Control(pDX, IDC_COMBOSYSLAY, m_wndComboSys); DDX_Control(pDX, IDC_EDITEL, m_wndEditEl); DDX_Control(pDX, IDC_BTPICKPIPE, m_wndBtPickpipe); DDX_Text(pDX, IDC_EDITSETTING, m_sParamSetting); DDX_Check(pDX, IDC_CHECKANG, m_bElbowAngleDraw); DDX_Check(pDX, IDC_CHECKWELDDOT, m_bDrawWeldDot); DDX_Check(pDX, IDC_CHECK2, m_bFlangNoBom); } BEGIN_MESSAGE_MAP(CWPipeDrawConfigDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON1, &CWPipeDrawConfigDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CWPipeDrawConfigDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BTADDMETI, &CWPipeDrawConfigDlg::OnBnClickedBtaddmeti) ON_BN_CLICKED(IDC_BTSYSSET, &CWPipeDrawConfigDlg::OnBnClickedBtsysset) ON_BN_CLICKED(IDC_BTPICKPIPE, &CWPipeDrawConfigDlg::OnBnClickedBtpickpipe) ON_BN_CLICKED(IDOK, &CWPipeDrawConfigDlg::OnBnClickedOk) ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO1, IDC_RADIO5, OnBnClickedRadioConnectType) ON_CBN_SELCHANGE(IDC_COMBOMATERS, &CWPipeDrawConfigDlg::OnCbnSelchangeCombomaters) ON_CBN_SELCHANGE(IDC_COMBOMATERSFIT, &CWPipeDrawConfigDlg::OnCbnSelchangeCombomatersfit) ON_CBN_SELCHANGE(IDC_COMBOSYSLAY, &CWPipeDrawConfigDlg::OnCbnSelchangeCombosyslay) ON_BN_CLICKED(IDC_BUTTON3, &CWPipeDrawConfigDlg::OnBnClickedButton3) END_MESSAGE_MAP() void CWPipeDrawConfigDlg::SetDbServer(CUIISQLiteServer* pDb) { m_pDb = pDb; } void CWPipeDrawConfigDlg::SetOnlyByDN(int nDN) { m_nOnlyDN = nDN; m_bOnlyDn = TRUE; if (nDN < 1) m_bOnlyDn = FALSE; m_dDn = m_nOnlyDN; } BOOL CWPipeDrawConfigDlg::OnInitDialog() { CDialog::OnInitDialog(); //4K int iWidth = GetSystemMetrics(SM_CXSCREEN); int iHeight = GetSystemMetrics(SM_CYSCREEN); int nAdd = 0; if (iWidth >= 3800 && iHeight >= 2400)//4K { nAdd = 45; } //LIST m_wndPipeList.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_wndPipeList.InsertColumn(0, _T("DN"), LVCFMT_LEFT, 70 + nAdd); m_wndPipeList.InsertColumn(1, _T("外径"), LVCFMT_LEFT, 70 + nAdd); m_wndPipeList.InsertColumn(2, _T("壁厚"), LVCFMT_LEFT, 60 + nAdd); m_wndPipeList.InsertColumn(3, _T("重量"), LVCFMT_LEFT, 65 + nAdd); m_wndPipeList.InsertColumn(4, _T("表号"), LVCFMT_LEFT, 65 + nAdd); m_wndPipeList.InsertColumn(5, _T("系列/代号"), LVCFMT_CENTER, 80 + nAdd); //EXT m_wndPipeList.InsertColumn(6, _T("执行标准"), LVCFMT_LEFT, 300+nAdd); //m_wndPipeList.InsertColumn(7, _T("物料描述"), LVCFMT_LEFT, 0); //m_wndPipeList.InsertColumn(8, _T("规格型号"), LVCFMT_LEFT, 0); if (m_bLoadLast) LoadLastData(); InitPipeList(50000, m_sODSn); InitElbowRadio(m_sODSn); InitPipeMaterCombox(); InitFittingMaterCombox(); InitPressSpecFromDb(); m_wndEditEl.SetReadOnly(m_bEleReadOnly); if (m_bOnlyDn) { m_wndBtPickpipe.EnableWindow(FALSE); } InitSys(); if (m_bEleReadOnly)//锁定标高 { GetDlgItem(IDC_EDITEL)->EnableWindow(FALSE); } CWnd *pWnd(GetDlgItem(IDC_EDIT1)); if (pWnd) { //法兰管分段 pWnd->EnableWindow(m_nConnectType == 3 || m_nConnectType == 5); } //根据上次材料认定 OnCbnSelchangeCombomaters(); UpdateData(FALSE); return TRUE; } void CWPipeDrawConfigDlg::InitPipeList(int nMaxDN, CString& sODNo) { if (m_pDb != NULL) { CString sSQL, sText, sODAWhere = _T(""); m_wndPipeList.DeleteAllItems(); //公称直径系列 bool bMODSN = false; if (sODNo.CompareNoCase(_T("A")) == 0 || sODNo.CompareNoCase(_T("B")) == 0 || sODNo.IsEmpty() ) { if (m_nConnectType == 1 || m_nConnectType == 2 || m_nConnectType == 4 ) { //S系列没有 承插 或 螺纹 卡箍 sODAWhere = _T("([外径系列]='A' or [外径系列]='B')"); } else { sODAWhere = _T("([外径系列]='A' or [外径系列]='B' or [外径系列]='S')"); } bMODSN = true; } else { sODAWhere.Format(_T("[外径系列]='%s'"), sODNo); } //承插 螺纹 最大值 CStringArray arDNs; if (m_nConnectType == 1)//承插 { sSQL.Format(_T("select [公称直径] from [AecElbowSData] where %s order by [公称直径] desc"), sODAWhere); m_pDb->GetSelData(sSQL, arDNs); if (!arDNs.IsEmpty()) { nMaxDN = _ttoi(arDNs.GetAt(0)); } } if (m_nConnectType == 2)//螺纹 { sSQL.Format(_T("select [公称直径] from [AecElbowTData] where %s order by [公称直径] desc"), sODAWhere); m_pDb->GetSelData(sSQL, arDNs); if (!arDNs.IsEmpty()) { nMaxDN = _ttoi(arDNs.GetAt(0)); } } CStringArray arRds; arRds.Add(_BYGB_); sSQL = _T("select distinct [弯头曲率] from AecElbowData order by [弯头曲率]"); m_pDb->GetSelData(sSQL, arRds); if (arRds.GetSize() > 0) { int nSel = 0; m_wndElbowradList.ResetContent(); for (int n = 0; n < arRds.GetSize(); n++) { m_wndElbowradList.AddString(arRds.GetAt(n)); if (fabs( _ttof(arRds.GetAt(n)) - m_dRRatio) < 1.e-3) { nSel = n; } } m_wndElbowradList.SetCurSel(nSel); } if (m_nOnlyDN == 0)//不限制DN { if (bMODSN) { sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]<=%d and %s order by [外径系列] desc"), nMaxDN, sODAWhere); } else { sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]<=%d and %s order by [外径系列],[公称直径],[壁厚]"), nMaxDN, sODAWhere); } } else//限制 { sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]=%d and %s order by [外径系列],[公称直径],[壁厚] desc"), m_nOnlyDN, sODAWhere);// } CUIIValueTable table; m_pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() == 0) { //按外径选 int nDN = (m_nOnlyDN == 0) ? nMaxDN : m_nOnlyDN; if (bMODSN) { sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [外径]<=%d and %s order by [外径系列]"), nDN, sODAWhere); } else { sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [外径]<=%d and %s order by [外径系列],[公称直径],[壁厚]"), nDN, sODAWhere); } m_pDb->GetSelData(sSQL, table); } table.ShowToListCtrl(&m_wndPipeList); CString sDnold, sThick, sODNo2; sDnold.Format(_T("%d"), (int)(m_dDn + 0.5)); if (sODNo.IsEmpty()) sODNo = m_sODSn; int iStart = -1; bool bFind = false; int nCount = m_wndPipeList.GetItemCount(); for (int i = 0; i < nCount; i++) { sText = m_wndPipeList.GetItemText(i, 0); sThick = m_wndPipeList.GetItemText(i, 2); sODNo2 = m_wndPipeList.GetItemText(i,5); if (sText.CompareNoCase(sDnold) == 0 && iStart == -1 && sODNo2.CompareNoCase(sODNo) == 0) iStart = i; if (sText.CompareNoCase(sDnold) == 0 && fabs(_ttof(sThick) - m_dThk) < 1.e-6 && sODNo2.CompareNoCase(sODNo) == 0) { iStart = i; m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); m_wndPipeList.EnsureVisible(i, TRUE); bFind = true; break; } } if (!bFind) { if (iStart == -1) iStart = 0; if (m_wndPipeList.GetItemCount() > 0) m_wndPipeList.SetItemState(iStart, LVIS_SELECTED, LVIS_SELECTED); m_wndPipeList.EnsureVisible(iStart, TRUE); } } } void CWPipeDrawConfigDlg::InitElbowRadio(CString& sODNo) { CString sSQL,sODAWhere; //曲率半径 sSQL = _T("select distinct [曲率半径] from AecElbowradius order by [曲率半径]"); m_wndElbowradList.ResetContent(); CString sRat; CStringArray arVals; arVals.Add(_BYGB_); m_pDb->GetSelData(sSQL, arVals); int nSel = -1; for (int i = 0; i < arVals.GetSize(); i++) { m_wndElbowradList.InsertString(i, arVals.GetAt(i)); sRat = arVals.GetAt(i); if (fabs(_ttof(sRat) - m_dRRatio) < 1.e-3 && nSel == -1) { nSel = i; if ( (m_dRRatio -g_minRadio) < 1.e-3) nSel = 0; } } if (nSel == -1) nSel = 0; m_wndElbowradList.SetCurSel(nSel); } void CWPipeDrawConfigDlg::InitPipeMaterCombox() { //材质 m_wndComboMaters.ResetContent(); CString sSQL,sMat; CStringArray arVals; sSQL = _T("select [材质] from AecMaterial where [类型]='管道'"); m_pDb->GetSelData(sSQL, arVals); for (int i = 0; i < arVals.GetSize(); i++) { sMat = arVals.GetAt(i); m_wndComboMaters.InsertString(i, sMat); if (m_sMaterial.CompareNoCase(sMat) == 0 || (m_sMaterial.Find(_T("衬塑")) != -1 && sMat.Find(_T("衬塑")) != -1)) { m_wndComboMaters.SetCurSel(i); } } } void CWPipeDrawConfigDlg::InitFittingMaterCombox() { CString sSQL,sMat; CStringArray arVals; //材质 m_wndComboMatersFit.ResetContent(); arVals.RemoveAll(); sSQL = _T("select [材质] from AecMaterial where [类型]='管件'"); m_pDb->GetSelData(sSQL, arVals); for (int i = 0; i < arVals.GetSize(); i++) { sMat = arVals.GetAt(i); m_wndComboMatersFit.InsertString(i, sMat); if (m_sMaterialFit.CompareNoCase(sMat) == 0 || (m_sMaterialFit.Find(_T("衬塑")) != -1 && sMat.Find(_T("衬塑")) != -1)) { m_wndComboMatersFit.SetCurSel(i); } } } void CWPipeDrawConfigDlg::InitPressSpecFromDb() { //获取项目名称 AecDbObjXDataMap xDataMap; xDataMap.SetAt(DOC_TRADE, WPipe::ePetro); //应用行业,石油 xDataMap.SetAt(DOC_SCALE, _T("1:50")); //出图比例 xDataMap.SetAt(DOC_PLOTWIDTH, 0.5); //最小打印线宽 xDataMap.SetAt(DOC_DPLOTWIDTH, 0.5); //双线打印线宽 xDataMap.SetAt(DOC_WELDDIA, 1.0); //焊点直径 xDataMap.SetAt(DOC_PIPEMINDIA, 65.0); //最小管道直径 xDataMap.SetAt(DOC_PIPEMAXDIA, 200.0); //最大管线直径 xDataMap.SetAt(DOC_PERELBOWDIA, 40.0); //垂直弯头直径 xDataMap.SetAt(DOC_BREAKSPACE, 2.0); //交叉断线间距 xDataMap.SetAt(DOC_UNIT, 0); //单位 xDataMap.SetAt(DOC_DIMTERM, 0); //标注端符 xDataMap.SetAt(DOC_DIMTXTH, 2.0); //标注文字高度 xDataMap.SetAt(DOC_DIMTXTF, 0.7); //标注文字宽度系数 xDataMap.SetAt(DOC_EQPTXTH, 2.0); //设备标注文字高度 xDataMap.SetAt(DOC_EQPTXTF, 1.0); //设备标注文字宽度系数 xDataMap.SetAt(DOC_STRTXTH, 2.0); //结构标注文字高度 xDataMap.SetAt(DOC_STRTXTF, 0.7); //结构标注文字宽度系数 xDataMap.SetAt(DOC_SCRIPTT, _T("{0}{-}{1}{-}{2}{-}{3}"));//上标脚本 xDataMap.SetAt(DOC_SCRIPTB, _T("{4}{-}{5}"));//下标脚本 xDataMap.SetAt(DOC_ELTYPE, 0); //标高设置 xDataMap.SetAt(DOC_ELDESCR, _T("--")); //标高文本 if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acedAlert(_T("\n系统未初始化!请执行设置带单下初始设置!")); return; } xDataMap.GetAt(DOC_PIDPROJECT, m_sProject); xDataMap.GetAt(DOC_TRADE, m_nTrade); if (m_nTrade = WPipe::eCivial && m_sProject.IsEmpty()) { m_sProject = _T("市政"); } else if (m_sProject.IsEmpty() || m_sProject.CompareNoCase(_T("SH")) == 0)//兼容旧SH { m_sProject = _T("工业"); } CString sSQL; sSQL.Format(_T("select distinct [等级名称] from AecSpecname where [项目名称]='%s' order by [等级名称]"), m_sProject); CStringArray arValues; m_pDb->GetSelData(sSQL, arValues); m_wndSpecList.ResetContent(); for (int i = 0; i < arValues.GetSize(); i++) { m_wndSpecList.InsertString(i, arValues.GetAt(i)); } int nIndex = m_wndSpecList.FindString(0, m_sLevel); if (nIndex != -1) { m_wndSpecList.SetCurSel(nIndex); } else { m_wndSpecList.SetCurSel(0); } //压力表 sSQL.Format(_T("select [压力] from aecpressure order by [压力]")); arValues.RemoveAll(); m_pDb->GetSelData(sSQL, arValues); m_wndPressList.ResetContent(); for (int i = 0; i < arValues.GetSize(); i++) { m_wndPressList.InsertString(i, arValues.GetAt(i)); if (_ttof(arValues.GetAt(i)) < 1.1 && _ttof(arValues.GetAt(i)) > 0.95) { m_wndPressList.SetCurSel(i); } } } void CWPipeDrawConfigDlg::InitSys() { //显示当前图层系统 CString sSQL, sStd(CoreTools::getCurrentPipeSysTblName()), sTemp; sSQL.Format(_T("select distinct system from %s"), sStd); CStringArray arSyses; m_pDb->GetSelData(sSQL, arSyses); int nCursel = 0; for (int i = 0; i < arSyses.GetSize(); i++) { sTemp = arSyses.GetAt(i); m_wndComboSys.AddString(sTemp); if (m_sCurrSys.CompareNoCase(sTemp) == 0) { nCursel = i; } } m_wndComboSys.SetCurSel(nCursel); } bool CWPipeDrawConfigDlg::IsPlasticsMat(int nPos, CString& sODNo) { UpdateData(); const CString sPlastic = _T("UPVC CPVC PVC-C PP-H (PE) PE100 HDPE"); CStringArray arTxts; CoreTools::SplitStrintToArray(sPlastic, arTxts, _T(' ')); for (int i = 0; i < arTxts.GetSize(); i++) { if (nPos == 0) { if (m_sMaterial.Find(arTxts.GetAt(i)) != -1) { sODNo = arTxts.GetAt(i); //以下 PVC-C PP-H PE100 的国标数据 替代 PVC if (sODNo.CompareNoCase(_T("PVC-C")) == 0) sODNo = _T("CPVC"); if (sODNo.CompareNoCase(_T("(PE)")) == 0) sODNo = _T("PE"); if (sODNo.CompareNoCase(_T("PE100")) == 0) sODNo = _T("PE"); m_nDDir = 1;//外径绘制 if (m_nConnectType > 2 || m_nConnectType < 1) m_nConnectType = 1;//设置为承插 return true; } } else { if (m_sMaterialFit.Find(arTxts.GetAt(i)) != -1) { sODNo = arTxts.GetAt(i); //以下 PVC-C PP-H PE100 的国标数据 替代 PVC if (sODNo.CompareNoCase(_T("PVC-C")) == 0) sODNo = _T("CPVC"); if (sODNo.CompareNoCase(_T("(PE)")) == 0) sODNo = _T("PE"); if (sODNo.CompareNoCase(_T("PE100")) == 0) sODNo = _T("PE"); m_nDDir = 1;//外径绘制 m_nRadioOn = 1;//必须按结构长度 if (m_nConnectType > 2 || m_nConnectType < 1) m_nConnectType = 1;//设置为承插 return true; } } } return false; } BOOL CWPipeDrawConfigDlg::IsGSFMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("衬塑")) != -1 || m_sMaterial.Find(_T("HG/T 20538")) != -1) { sODNo = _T("GSF"); m_nDDir = 0;//DN m_nConnectType = 3;//必须法兰 m_bFlangNoBom = 1; return TRUE; } return FALSE; } BOOL CWPipeDrawConfigDlg::IsSRPEMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("钢骨架")) != -1 || m_sMaterial.Find(_T("CJ/T 123")) != -1) { sODNo = _T("SRPE"); m_nDDir = 0;//DN if (m_nConnectType == 2) m_nConnectType = 1;//承插 m_bFlangNoBom = 0; return TRUE; } return FALSE; } BOOL CWPipeDrawConfigDlg::IsRCPMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("混凝土")) != -1) { sODNo = _T("RCP"); m_nDDir = 0;//DN if (m_nConnectType > 1) { m_nConnectType = 0; } return TRUE; } return FALSE; } //添加管道规格 static int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb) { if (!pszField || !pszTbl || !pDb) return -1; CString ss(_T("")), v(_T("")); ss.Format(_T("select max(%s) from %s"), pszField, pszTbl); if (!pDb->GetSelData(ss, v)) return -1; return _ttoi(v) + 1; } void CWPipeDrawConfigDlg::OnBnClickedButton1() { UpdateData(); /* m_wndPipeList.InsertColumn(0, _T("DN"), LVCFMT_LEFT, 70 + nAdd); m_wndPipeList.InsertColumn(1, _T("外径"), LVCFMT_LEFT, 70 + nAdd); m_wndPipeList.InsertColumn(2, _T("壁厚"), LVCFMT_LEFT, 60 + nAdd); m_wndPipeList.InsertColumn(3, _T("重量"), LVCFMT_LEFT, 65 + nAdd); m_wndPipeList.InsertColumn(4, _T("表号"), LVCFMT_LEFT, 65 + nAdd); m_wndPipeList.InsertColumn(5, _T("系列/代号"), LVCFMT_CENTER, 80 + nAdd); m_wndPipeList.InsertColumn(6, _T("执行标准"), LVCFMT_LEFT, 300+nAdd); */ POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition(); if (ps != NULL) { int nSel = m_wndPipeList.GetNextSelectedItem(ps); if (nSel != -1) { CGZCLDlg dlg; dlg.m_sMat = m_sMaterial; dlg.m_sSCode = m_wndPipeList.GetItemText(nSel,4); dlg.m_sODSN = m_wndPipeList.GetItemText(nSel,5); dlg.m_sStd = m_wndPipeList.GetItemText(nSel, 6); if (IDOK == dlg.DoModal()) { CString sSQL; sSQL.Format(_T("insert into AecOD ([公称直径],[外径],[表号],[壁厚],[重量],[外径系列],[标准]) values (%d,%d,'%s',%.1f,%.2f,'%s','%s')"), dlg.m_nDN, (int)dlg.m_dOD, dlg.m_sSCode, dlg.m_dt, dlg.m_dWe, dlg.m_sODSN, dlg.m_sStd); if (m_pDb->ExecuteSQL(sSQL)) { InitPipeList(50000, dlg.m_sODSN); } if (m_wndComboMaters.FindString(0,dlg.m_sMat) == -1) m_wndComboMaters.AddString(dlg.m_sMat); } } } } //保温伴热 void CWPipeDrawConfigDlg::OnBnClickedButton2() { UpdateData(); int nSel = m_wndSpecList.GetCurSel(); if (nSel != -1) m_wndSpecList.GetText(nSel, m_sLevel); CString sText; nSel = m_wndPressList.GetCurSel(); if (nSel != -1) { m_wndPressList.GetText(nSel, sText); m_dPressure = _ttof(sText); } nSel = m_wndComboSys.GetCurSel(); if (nSel != -1) m_wndComboSys.GetLBText(nSel, m_sCurrSys); nSel = m_wndElbowradList.GetCurSel(); if (nSel != -1) { m_wndElbowradList.GetText(nSel, sText); m_dRRatio = _ttof(sText); } KTInsulateMainDlg dlg; dlg.SetADOServer(m_pDb); WPipe::PipeParam param; GetPipeParam(¶m); dlg.SetPipeParam(¶m); if (IDOK == dlg.DoModal()) { m_sInsMtr = param.szInsMtr; m_dInsThk = param.m_dInsThk; m_nInsAndHead = param.m_nInsAndHead; m_sInsSpec = param.szInsSpec; m_sInsMaterial = param.szInsMateral; m_szInsTag = param.szInsTag; m_szInsDim = param.szInsDim; m_sTraMtoInfo, param.szTraMtoInfo; m_sTraDescr, param.szTraDescr; FormatParamSettingAndSpec(); } } void CWPipeDrawConfigDlg::FormatParamSettingAndSpec() { //介质压力 CString sZone, sDN, sPP, sNo, sGrade; CString sText; sText.Format(_T("%s"), m_szMedia); sPP = sText; m_sParamSetting = sText + _T("-"); //sText.Format(_T("%s"), m_sLevel); //sGrade = sText; //m_sParamSetting += sText + _T("-"); sText.Format(_T("%d"), (int)m_dDn); sDN = sText; m_sParamSetting += sText + _T("-"); sText.Format(_T("%.1f"), m_dRRatio); m_sParamSetting += sText + _T("-"); sText.Format(_T("%s"), m_sInsMtr); sText.TrimRight(_T('-')); if (!sText.IsEmpty()) { m_sParamSetting += sText + _T("-"); } sText.Format(_T("%.1f"), m_dInsThk); m_sParamSetting += sText; CString sAdd; if (_tcslen(m_sInsMtr) > 0) sAdd = _T("保温"); if (_tcslen(m_sTraMtoInfo) > 0) sAdd += _T("伴热"); //管线号= 区号-单元号-顺序号-DN-等级-保温伴热 m_sPipeNo.Format(_T("%s-%s-%s-%s-%s-%s"), m_sZoneNo, m_sUnitNo, m_sSerNo, sDN, sGrade, sAdd); m_sPipeNo.TrimRight(_T('-')); UpdateData(FALSE); } //添加材料 void CWPipeDrawConfigDlg::OnBnClickedBtaddmeti() { CStringArray arPipe, arFit; if (!PipelineTools::setPipelineMaterial(m_pDb, arPipe, arFit)) { return; } m_wndComboMaters.ResetContent(); for (int i = 0; i < arPipe.GetSize(); i++) { m_wndComboMaters.InsertString(i, arPipe.GetAt(i)); if (m_sMaterial.CompareNoCase(arPipe.GetAt(i)) == 0) m_wndComboMaters.SetCurSel(i); } m_wndComboMatersFit.ResetContent(); for (int i = 0; i < arFit.GetSize(); i++) { m_wndComboMatersFit.InsertString(i, arFit.GetAt(i)); if (m_sMaterialFit.CompareNoCase(arFit.GetAt(i)) == 0) m_wndComboMatersFit.SetCurSel(i); } } //分系统 void CWPipeDrawConfigDlg::OnBnClickedBtsysset() { CStringArray arSyses; if (!PipelineTools::setLayerSys(m_pDb, arSyses)) { return; } m_wndComboSys.ResetContent(); for (int i = 0; i < arSyses.GetSize(); i++) { m_wndComboSys.AddString(arSyses.GetAt(i)); } if (arSyses.GetSize() > 0) { m_wndComboSys.SetCurSel(0); m_wndComboSys.GetLBText(0, m_sCurrSys); } } //参数选择管线 void CWPipeDrawConfigDlg::OnBnClickedBtpickpipe() { //切换界面的当前活动 acedGetAcadFrame()->EnableWindow(TRUE); ShowWindow(SW_HIDE); acedGetAcadFrame()->SetFocus(); CString strLay(_T("")); AecDbObjXDataMap xmap; if (!PipelineTools::getPipelineParam(xmap, strLay)) { ShowWindow(SW_SHOW); SetFocus(); acedGetAcadFrame()->EnableWindow(FALSE); EnableWindow(TRUE); return; } SetsureLaySysByLayer(strLay); SetFromXDataMap(&xmap); xmap.GetAt(PIPE_EL, m_dEl); xmap.GetAt(PIPE_SYS, m_sCurrSys); PipelineTools::setCurrentLayerSys(m_sCurrSys); CString sSysTmp; for (int j = 0; j < m_wndComboSys.GetCount(); j++) { m_wndComboSys.GetLBText(j, sSysTmp); if (m_sCurrSys.CompareNoCase(sSysTmp) == 0) { m_wndComboSys.SetCurSel(j); } } m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys); UpdateData(FALSE); UpdatePipeList(); OnCbnSelchangeCombomaters(); ShowWindow(SW_SHOW); SetFocus(); acedGetAcadFrame()->EnableWindow(FALSE); EnableWindow(TRUE); } void CWPipeDrawConfigDlg::UpdatePipeList() { CString sDnold, sThick; sDnold.Format(_T("%d"), (int)(m_dDn + 0.5)); CString sText; for (int i = 0; i < m_wndPipeList.GetItemCount(); i++) { sText = m_wndPipeList.GetItemText(i, 0); sThick = m_wndPipeList.GetItemText(i, 2); if (sText.CompareNoCase(sDnold) == 0 && fabs(_ttof(sThick) - m_dThk) < 1.e-6) { m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); m_wndPipeList.EnsureVisible(i, TRUE); break; } } //曲率半径 CString sRat; for (i = 0; i < m_wndElbowradList.GetCount(); i++) { m_wndElbowradList.GetText(i, sRat); if (fabs(_ttof(sRat) - m_dRRatio) < 1.e-6) { m_wndElbowradList.SetCurSel(i); break; } } //材质 for (i = 0; i < m_wndComboMaters.GetCount(); i++) { m_wndComboMaters.GetLBText(i, sText); if (m_sMaterial.CompareNoCase(sText) == 0) { m_wndComboMaters.SetCurSel(i); break; } } //材质 for (i = 0; i < m_wndComboMatersFit.GetCount(); i++) { m_wndComboMatersFit.GetLBText(i, sText); if (m_sMaterialFit.CompareNoCase(sText) == 0) { m_wndComboMatersFit.SetCurSel(i); break; } } } void CWPipeDrawConfigDlg::SetsureLaySysByLayer(LPCTSTR pszLayer) { CString sys(_T("")); if (!PipelineTools::getSysByLayer(m_pDb, pszLayer, sys)) { acutPrintf(_T("\n查询当前图层系统失败!")); return; } CString sSysTmp; m_sCurrSys = sys; for (int j = 0; j < m_wndComboSys.GetCount(); j++) { m_wndComboSys.GetLBText(j, sSysTmp); if (m_sCurrSys.CompareNoCase(sSysTmp) == 0) { m_wndComboSys.SetCurSel(j); return; } } } void CWPipeDrawConfigDlg::OnBnClickedRadioConnectType(UINT idCtl) { UpdateData(); bool bInitList = false; CString sODNo = _T(""); //塑料管 if (IsPlasticsMat(0, sODNo)) { if (m_nConnectType < 1 || m_nConnectType > 2) AfxMessageBox(_T("当前是塑料管,只能选择承插或螺纹连接!")); InitPipeList(5000, sODNo); m_nConnectType = 1; bInitList = true; } //衬塑管 if (IsGSFMaterial(sODNo)) { m_bFlangNoBom = 1; if (m_nConnectType != 3) AfxMessageBox(_T("当前是衬塑管,只能选择法兰连接!")); InitPipeList(5000, sODNo); m_nConnectType = 3; bInitList = true; } if (IsSRPEMaterial(sODNo)) { m_bFlangNoBom = 0; InitPipeList(5000, sODNo); if (m_nConnectType == 2)//不可为螺纹 m_nConnectType = 1; bInitList = true; } //其他材质 if (!bInitList) { sODNo = _T(""); InitPipeList(5000, sODNo); } //如果是法兰管,设置垫片(如果没有) if (m_nConnectType == 3 || m_nConnectType == 5)//法兰 { SetFEGSInf(); } UpdateData(FALSE); } void CWPipeDrawConfigDlg::SetFEGSInf() { //弹出垫片设置 int nSel = m_wndPressList.GetCurSel(); if (nSel == -1) { nSel = 0; } //if (m_wndSpecList.GetCount() == 0) // return; //m_wndSpecList.GetText(nSel, m_sLevel); nSel = m_wndPressList.GetCurSel(); if (nSel == -1) { AfxMessageBox(_T("请选择项目设计压力!")); return; } CString sText,sLevel = _T("");//m_sLevel m_wndPressList.GetText(nSel, sText); m_dPressure = _ttof(sText); CFLEndFGsDlg flEdGsDlg; flEdGsDlg.SetProAndLevel(m_sProject, sLevel); flEdGsDlg.SetPrress(m_dPressure); flEdGsDlg.SetDN(m_dDn); flEdGsDlg.SetTrade(m_nTrade); if (IDOK == flEdGsDlg.DoModal()) { m_sGaskets = _T(""); m_sEndF1 = _T(""); m_sEndF2 = _T(""); flEdGsDlg.GetFLngEndFace(m_sEndF1, m_sEndF2); flEdGsDlg.GetGasketInf(m_sGaskets); m_sFEGSInf.Format(_T("法兰端面: %s:%s 垫片:%s"), m_sEndF1, m_sEndF2, m_sGaskets); UpdateData(FALSE); } CWnd *pWnd(GetDlgItem(IDC_EDIT1)); if (pWnd) pWnd->EnableWindow(TRUE); } //管道材质 void CWPipeDrawConfigDlg::OnCbnSelchangeCombomaters() { UpdateData(); m_sMaterialFit = m_sMaterial; CString sODNo = m_sODSn; UpdateData(FALSE); int nPos = m_sMaterial.Find(_T("@")); if (nPos != -1) { sODNo = m_sMaterial.Mid(nPos + 1); InitPipeList(50000, sODNo); return; } if (IsPlasticsMat(0, sODNo)) { m_nDDir = 1;//外径绘制 m_nRadSel = 0; UpdateData(FALSE); //塑料管承插或螺纹 if (m_nConnectType == 0 || m_nConnectType > 2) m_nConnectType = 1; InitPipeList(50000, sODNo); if (IsGSFMaterial(sODNo)) { m_bFlangNoBom = 1; m_nRadSel = 0; //法兰连接 if (m_nConnectType != 3) { m_nConnectType = 3; SetFEGSInf(); UpdateData(FALSE); } } } else if (IsGSFMaterial(sODNo))//衬塑 { InitPipeList(50000, sODNo); m_nRadSel = 0; //法兰连接 if (m_nConnectType != 3 || m_sGaskets.IsEmpty()) { m_nConnectType = 3; m_bFlangNoBom = 1; SetFEGSInf(); UpdateData(FALSE); } } else if (IsRCPMaterial(sODNo))//水泥管 { InitPipeList(50000, sODNo); //法兰连接 //m_nRadioOn = 1;//必须按结构长度 if (m_nConnectType > 1) m_nConnectType = 0; } else if (IsSRPEMaterial(sODNo)) { InitPipeList(50000, sODNo); //法兰连接 m_nConnectType = 0; } else { sODNo = _T(""); InitPipeList(50000,sODNo); } UpdateData(FALSE); } //管件材质 void CWPipeDrawConfigDlg::OnCbnSelchangeCombomatersfit() { UpdateData(); CString sODNo = m_sODSn; if (IsPlasticsMat(0, sODNo)) { if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0) { m_sMaterialFit = m_sMaterial; m_nDDir = 1;//外径绘制 } } else if(IsGSFMaterial(sODNo)) { if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0) { m_sMaterialFit = m_sMaterial; } } else if (IsRCPMaterial(sODNo))//水泥管 { if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0) { m_sMaterialFit = m_sMaterial; } } else if (IsSRPEMaterial(sODNo)) { if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0) { m_sMaterialFit = m_sMaterial; } } UpdateData(FALSE); } //系统 void CWPipeDrawConfigDlg::OnCbnSelchangeCombosyslay() { UpdateData(); FormatParamSettingAndSpec(); UpdateData(FALSE); } BOOL CWPipeDrawConfigDlg::CreateSysAllLayer(LPCTSTR pszCurrSys) { CoreTools::getLyByPipeSys(pszCurrSys, true); CoreTools::getLyByPipeSys(pszCurrSys, false); CoreTools::getLyForPipe(pszCurrSys); return TRUE; } BOOL CWPipeDrawConfigDlg::IsTDnValid(double dDn, LPCTSTR pszODNo, int& nMaxDN) { CString sSQL; sSQL.Format(_T("select [公称直径] from [AecElbowTData] where [外径系列]='%s' order by [公称直径] desc limit 1"), pszODNo); CStringArray arVals; m_pDb->GetSelData(sSQL, arVals); if (!arVals.IsEmpty()) { nMaxDN = _ttoi(arVals.GetAt(0)); int nDN = (int)(dDn + 0.5); if (nDN <= nMaxDN) return TRUE; } return FALSE; } BOOL CWPipeDrawConfigDlg::QueryFlangOnPipe() { double dWD, dWh, dThk, dN; if (TDbPipeSupport::QueryFlangData(m_pDb , m_dDn , m_dPressure , dWD , dWh , dThk , dN ))//不考虑等级和项目 { m_dInterfaceL = dWh; //法兰管的法兰厚 m_dInterfaceD = dWD; //法兰管的法兰外径 return TRUE; } CString sTip; sTip.Format(_T("没有查询到公称直径 %d 压力 %.1f 的法兰参数"),(int)(m_dDn+0.5),m_dPressure); AfxMessageBox(sTip); return FALSE; } void CWPipeDrawConfigDlg::OnBnClickedOk() { UpdateData(); m_nRadioOn = 0; //创建系统图层 int nCursel = m_wndComboSys.GetCurSel(); if (nCursel == -1) { return; } //确认创建图层 m_wndComboSys.GetLBText(nCursel, m_sCurrSys); CreateSysAllLayer(m_sCurrSys); PipelineTools::setCurrentLayerSys(m_sCurrSys); m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys); //获取分系统信息 //select layname,pipesys,color,linetype,linewidth //LAYKEY LAYNAME PIPESYS SYSTEM COLOR LINETYPE LINEWIDTH //11 废水管线中心线 管线中心线 废水 4 Continuous:________ 0 CStringArray arVals; PipelineTools::getPipeSysRecord(m_pDb, m_sCurrSys, arVals); if (arVals.GetSize() >= 5) { m_nColorIndex = _ttoi(arVals.GetAt(2)); } //管子规格 POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition(); if (ps != NULL) { int nItem = m_wndPipeList.GetNextSelectedItem(ps); m_dDn = _ttof(m_wndPipeList.GetItemText(nItem, 0)); m_dOD = _ttof(m_wndPipeList.GetItemText(nItem, 1)); m_dThk = _ttof(m_wndPipeList.GetItemText(nItem, 2)); m_szShtNo = m_wndPipeList.GetItemText(nItem, 4); m_sODSn = m_wndPipeList.GetItemText(nItem, 5); m_sStd = m_wndPipeList.GetItemText(nItem, 6); } else { AfxMessageBox(_T("请选择管子规格!")); return; } //螺纹验证 int nMaxDN = 0; if (m_nConnectType == 2 && !IsTDnValid(m_dDn, m_sODSn, nMaxDN)) { CString sTip; sTip.Format(_T("数据库中此材质最大螺纹管线公称直径 %d !"), nMaxDN); AfxMessageBox(sTip); return; } int nSel = m_wndElbowradList.GetCurSel(); if (nSel == -1 /* && m_nRadioOn == 0*/) { AfxMessageBox(_T("请选择管子弯头曲率半径!")); return; } //等级,不主要控 m_sLevel = _T(""); /*nSel = m_wndSpecList.GetCurSel(); if (nSel != -1) { m_wndSpecList.GetText(nSel, m_sLevel); }*/ //压力 nSel = m_wndPressList.GetCurSel(); if (nSel == -1) { AfxMessageBox(_T("请选择项目设计压力!")); return; } CString sText,sSQL; m_wndPressList.GetText(nSel, sText); m_dPressure = _ttof(sText); //曲率 nSel = m_wndElbowradList.GetCurSel(); if (nSel != -1) { m_wndElbowradList.GetText(nSel, sText); if (sText.CompareNoCase(_BYGB_) == 0) { m_nRadioOn = TRUE;//按国标结构长度 m_dRRatio = g_minRadio;//最小 //根据ODSN查询数据库 默认曲率 sSQL.Format(_T("select distinct [弯头曲率] from [AecElbowData] where [外径系列]='%s' order by [弯头曲率]"), m_sODSn); CStringArray arRad; m_pDb->GetSelData(sSQL, arRad); if (arRad.GetSize() > 0) { m_dRRatio = _ttof(arRad.GetAt(0)); } } else { m_dRRatio = _ttof(sText); } } //管材 CString sODNo = m_sODSn; if (IsPlasticsMat(0, sODNo)) { //确认 if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0) { AfxMessageBox(_T("塑料管 管件 管道 材质必须相同!")); return; } if (m_nDDir == 0 ) { m_nDDir = 1; } } //衬塑 if (IsGSFMaterial(sODNo)) { if (m_nConnectType == 3 || m_nConnectType == 5) { if (m_sGaskets.IsEmpty()) { AfxMessageBox(_T("垫片信息缺少,衬塑必须选择法兰或沟槽连接的垫片信息!")); return; } } else { AfxMessageBox(_T("衬塑必须选择法兰或沟槽连接!")); return; } } if (IsRCPMaterial(sODNo))//水泥管 { if (m_nConnectType > 1) m_nConnectType = 0; } if (IsSRPEMaterial(sODNo)) { if (m_nConnectType == 2) m_nConnectType = 1; } //标高参考 switch (m_nElSel) { case 0://中心线 { break; } case 1: //顶参考基准 { m_dEl -= m_dOD / 2.0; break; } case 2://底参考基准 { m_dEl += m_dOD / 2.0; break; } default: break; } // 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel // 这样,双击弹出后,保证标高数据和标高基准数据可以匹配 m_nElSel = 0; //法兰管 if (m_nConnectType == 3 || m_nConnectType == 5)//法兰管 { double dMinT = 100; struct resbuf rb; acedGetVar(_T("INSUNITS"), &rb); if (rb.resval.rint == AcDb::kUnitsMeters) { dMinT /= 1000.0; } if ((m_dFPLen - dMinT) < 1.e-6) { AfxMessageBox(_T(" 法兰管的标准分段长度不合理!")); return; } //查询法兰管的法兰数据 if (!QueryFlangOnPipe()) { return; } } SaveCurrentData(); EndDialog(IDOK); } void CWPipeDrawConfigDlg::SetFromXDataMap(AecDbObjXDataMap* pXDataMap) { if (pXDataMap != NULL) { pXDataMap->GetAt(PIPE_DRAWDIR, m_nDDir); //绘制类型 pXDataMap->GetAt(KEY_2DSTYLE, m_nSglorDBL); //单线 双线 //双线 单线1 双线 2 if (m_nSglorDBL == 2) m_nSglorDBL = 0; else m_nSglorDBL = 1; pXDataMap->GetAt(PIPE_RATIO, m_dRRatio); pXDataMap->GetAt(KEY_RadRatio, m_nRadioOn); m_nConnectType = 0; //pXDataMap->GetAt(KEY_SINGLE,m_nSglorDBL); pXDataMap->GetAt(PIPE_CONNECT, m_nConnectType); pXDataMap->GetAt(PIPE_DN, m_dDn); pXDataMap->GetAt(PIPE_OD, m_dOD); pXDataMap->GetAt(PIPE_THICK, m_dThk); pXDataMap->GetAt(PIPE_MATERIAL, m_sMaterial); pXDataMap->GetAt(PIPE_MATERIALFT, m_sMaterialFit); pXDataMap->GetAt(PIPE_ELBOWFLG, m_bElbowAngleDraw); pXDataMap->GetAt(PIPE_BWELDDOT, m_bDrawWeldDot); pXDataMap->GetAt(DOC_PLOTWIDTH, m_dSingleW); pXDataMap->GetAt(DOC_WELDDIA, m_dWeldDir); pXDataMap->GetAt(PIPE_ZONE, m_sZoneNo); pXDataMap->GetAt(PIPE_INSTHICK, m_dInsThk); pXDataMap->GetAt(PIPE_NO, m_sPipeNo); pXDataMap->GetAt(KEY_NO, m_sSerNo); pXDataMap->GetAt(DOC_INSMATER, m_sInsMtr); pXDataMap->GetAt(PIPE_DESCR, m_sDescr); pXDataMap->GetAt(PIPE_LEVEL, m_sLevel); pXDataMap->GetAt(PID_PIPE_DPRESS, m_dPressure); int ap; pXDataMap->GetAt(PIPE_EAPP, ap); m_app = (WPipe::EApp)ap; pXDataMap->GetAt(PIPE_ODSN, m_sODSn); CString sEndFs; pXDataMap->GetAt(PIPE_FLANGF, sEndFs); int nLen = sEndFs.GetLength(); if (nLen > 0) { m_sEndF1 = sEndFs.Mid(0, nLen / 2); m_sEndF2 = sEndFs.Mid(nLen / 2 - 1, nLen / 2); } pXDataMap->GetAt(PIPE_GASKET, m_sGaskets); pXDataMap->GetAt(PIPE_FLANGNOBOM, m_bFlangNoBom); WPipe::PipeParam param; memset(¶m, 0, sizeof(WPipe::PipeParam)); XDataMapToPipeParam(pXDataMap, ¶m); SetShowParam(¶m); } } void CWPipeDrawConfigDlg::GetPipeParam(WPipe::PipeParam* pParam) const { switch (m_nDDir) { case 0: { pParam->m_dD = m_dDn; pParam->m_eD = WPipe::eDN; break; } case 1: { pParam->m_dD = m_dOD; pParam->m_eD = WPipe::eOD; break; } case 2: { pParam->m_dD = m_dOD - 2.0 * m_dThk; pParam->m_eD = WPipe::eID; break; } default: break; } pParam->m_dDN = m_dDn; pParam->m_dOD = m_dOD; pParam->m_dThick = m_dThk; pParam->m_dEl = m_dEl; pParam->m_dRRatio = m_dRRatio; pParam->m_nRadioOn = m_nRadioOn; //m_nRadioOn = 1;//强制为1查询不到计算 pParam->nPIPCmd = 0; pParam->m_eRed = WPipe::eCen; pParam->m_vtECCen.set(0, 0, 0); pParam->m_eElBase = WPipe::kCen; pParam->m_dInsThk = m_dInsThk; pParam->m_nConnectType = m_nConnectType;//连接方式 pParam->m_nPipeColor = m_nColorIndex; double dFPLen = m_dFPLen; //衬塑 CString sODNo = m_sODSn; if (m_sMaterial.Find(_T("衬塑")) != -1 || m_sMaterial.Find(_T("HG/T 20538")) != -1) { CStringArray arGastInfs; CoreTools::SplitStrintToArray(m_sGaskets, arGastInfs, _T('/')); if (arGastInfs.GetSize() >= 3) { double dUnits = 1.0;//默认毫米 if (CoreTools::IsMetersUnit()) dUnits *= .001; dFPLen += _ttof(arGastInfs.GetAt(2)) * dUnits; } } if (m_nConnectType == 3 || m_nConnectType == 5) { pParam->m_dInterfaceL = m_dInterfaceL; pParam->m_dInterfaceD = m_dInterfaceD; pParam->m_dInterfaceL3 = dFPLen; } pParam->m_app = m_app; pParam->m_dPress = m_dPressure; _tcscpy(pParam->szPipeno, m_sPipeNo); _tcscpy(pParam->szMertial, m_sMaterial); _tcscpy(pParam->szMertialFit, m_sMaterialFit); _tcscpy(pParam->szZoneNo, m_sZoneNo); _tcscpy(pParam->szUnitNo, m_sUnitNo); _tcscpy(pParam->szNo, m_sSerNo); _tcscpy(pParam->szDescr, m_sDescr); _tcscpy(pParam->szSys, m_sCurrSys); _tcscpy(pParam->szLevel, m_sLevel); // CString sEndF = m_sEndF1 + m_sEndF2; _tcscpy(pParam->m_szEndF, sEndF); _tcscpy(pParam->m_szGastInf, m_sGaskets); pParam->m_nInsAndHead = m_nInsAndHead; pParam->m_dInsThk = m_dInsThk; _tcscpy(pParam->szInsSpec, m_sInsSpec); _tcscpy(pParam->szInsMtr, m_sInsMtr); _tcscpy(pParam->szInsMateral, m_sInsMaterial); _tcscpy(pParam->szInsTag, m_szInsTag); _tcscpy(pParam->szInsDim, m_szInsDim); _tcscpy(pParam->szMedia, m_szMedia); _tcscpy(pParam->szDescr, m_sDescr); _tcscpy(pParam->szTraMtoInfo, m_sTraMtoInfo); _tcscpy(pParam->szTraDescr, m_sTraDescr); CString sLineNo; sLineNo.Format(_T("%s-%s"), pParam->szMedia, pParam->szNo); _tcscpy(pParam->szLineNo, sLineNo); _tcscpy(pParam->szODSn, m_sODSn); _tcscpy(pParam->szShtNo, m_szShtNo); _tcscpy(pParam->szStdNo, m_sStd); pParam->m_bFlangNoBom = m_bFlangNoBom; //从数据库 //获取项目名称 CString sProject(CoreTools::GetCurrentProject()); /* [项目名称] CHAR(255), [等级名称] CHAR(250), [类别] CHAR(250), [类型] CHAR(250), [公称直径] INTEGER, [材质] CHAR(50), [表号] CHAR(250), [标准号] CHAR(250), [外径] FLOAT, [壁厚] FLOAT, [外径系列] CHAR(255), [描述] CHAR(255)); */ //如果非市政 CString sSQL; if (m_nTrade != WPipe::eCivial) { sSQL.Format(_T("select [项目名称],[等级名称],[类别],[类型],[公称直径],[材质],[表号],[标准号],[外径],[壁厚],[外径系列],[描述] from AecSpecPipe where [公称直径]=%d") _T(" and [等级名称]='%s' and [项目名称]='%s'"), (int)pParam->m_dDN, pParam->szLevel, sProject); CStringArray arValues; m_pDb->GetSelData(sSQL, arValues); CString sText, sTemp; if (arValues.GetSize() >= 12) { for (int i = 1; i < arValues.GetSize() - 1; i++) { sTemp = arValues.GetAt(i); if (i == 1) { sText = sTemp; } else { sText += _T("^") + sTemp; } } pParam->m_dOD = _ttof(arValues.GetAt(8)); _tcscpy(pParam->szMtoInfo, sText); //最后一个是描述, _tcscpy(pParam->szDescr, arValues.GetAt(arValues.GetSize() - 1)); //壁厚 外径系列 描述 double dThk = _ttof(arValues.GetAt(arValues.GetSize() - 3)); if (dThk > 1.e-2) pParam->m_dThick = dThk; } } //英制的记录 /*CString sInchDN = _T(""); sSQL.Format(_T("select [英制] from KTDn where [公制]=%d"), (int)(pParam->m_dDN+0.5) ); m_pDb->GetSelData(sSQL, sInchDN); if (!sInchDN.IsEmpty()) _tcscpy(pParam->szInchDN, sInchDN); */ //如果是米单位 PipeParamConvert2UnitMeters(pParam); } void CWPipeDrawConfigDlg::SetShowParam(WPipe::PipeParam* pParam) { if (pParam != NULL) { //转换为毫米单位 WPipe::PipeParam param; memset(¶m, 0, sizeof(WPipe::PipeParam)); memcpy(¶m, pParam, sizeof(WPipe::PipeParam)); PipeParamConvert2UnitMmeters(¶m); m_nOnlyDN = (int)(param.m_dDN + 0.5); switch (param.m_eD) { case WPipe::eDN: { m_nDDir = 0; break; } case WPipe::eOD: { m_nDDir = 1; break; } case WPipe::eID: { m_nDDir = 2; break; } default: break; } m_dDn = param.m_dDN; m_dOD = param.m_dOD; m_dThk = param.m_dThick; m_dEl = param.m_dEl; m_nElSel = 0;// // 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel // 这样,双击弹出后,保证标高数据和标高基准数据可以匹配 m_dRRatio = param.m_dRRatio; m_nRadioOn = param.m_nRadioOn; m_dInsThk = param.m_dInsThk; m_nConnectType = param.m_nConnectType; m_nColorIndex = param.m_nPipeColor; m_bFlangNoBom = param.m_bFlangNoBom; if (m_nConnectType == 3 || m_nConnectType == 5) { m_dInterfaceL = param.m_dInterfaceL; m_dInterfaceD = param.m_dInterfaceD; m_dFPLen = param.m_dInterfaceL3; } m_app = param.m_app; m_sPipeNo = param.szPipeno; m_sSerNo = param.szNo; m_sMaterial = param.szMertial; m_sMaterialFit = param.szMertialFit; m_sZoneNo = param.szZoneNo; m_sUnitNo = param.szUnitNo; m_sInsMtr = param.szInsMtr; m_sDescr = param.szDescr; m_sCurrSys = param.szSys; m_sLevel = param.szLevel; m_dPressure = param.m_dPress; m_sEndF1 = param.m_szEndF; m_sEndF2 = m_sEndF1; //端面 防止双击修改产生的重复叠加 if (m_pDb != NULL) { CStringArray arVals; CString sSQL = _T("select distinct [端面型式] from AecFace"); m_pDb->GetSelData(sSQL, arVals); CString sEF; for(int ii = 0;ii < arVals.GetSize();ii++) { sEF = arVals.GetAt(ii); if (m_sEndF1.Find(sEF) != -1) { m_sEndF1 = sEF; m_sEndF2 = m_sEndF1; break; } } } m_sGaskets = param.m_szGastInf; m_sInsMtr = param.szInsMtr; m_dInsThk = param.m_dInsThk; m_nInsAndHead = param.m_nInsAndHead; m_sInsSpec = param.szInsSpec; m_sInsMaterial = param.szInsMateral; m_szInsTag = param.szInsTag; m_szInsDim = param.szInsDim; m_szMedia = param.szMedia; m_sDescr = param.szDescr; m_sODSn = param.szODSn; //IsSRPEMaterial(m_sODSn);//Rsure m_sStd = param.szStdNo; } } void CWPipeDrawConfigDlg::LoadLastData() { if (s_pwndLastData != NULL) { m_nDDir = s_pwndLastData->m_nDDir; m_nRadioOn = s_pwndLastData->m_nRadioOn; m_sFEGSInf = s_pwndLastData->m_sFEGSInf; m_dFPLen = s_pwndLastData->m_dFPLen; m_dEl = s_pwndLastData->m_dEl; m_nElSel = s_pwndLastData->m_nElSel; m_sSerNo = s_pwndLastData->m_sSerNo; m_sZoneNo = s_pwndLastData->m_sZoneNo; m_sUnitNo = s_pwndLastData->m_sUnitNo; m_sPipeNo = s_pwndLastData->m_sPipeNo; m_sDescr = s_pwndLastData->m_sDescr; m_sMaterial = s_pwndLastData->m_sMaterial; m_sMaterialFit = s_pwndLastData->m_sMaterialFit; m_sODSn = s_pwndLastData->m_sODSn; m_dDn = s_pwndLastData->m_dDn; m_dOD = s_pwndLastData->m_dOD; m_dThk = s_pwndLastData->m_dThk; m_dRRatio = s_pwndLastData->m_dRRatio; m_sProject = s_pwndLastData->m_sProject; m_nTrade = s_pwndLastData->m_nTrade; m_sLevel = s_pwndLastData->m_sLevel; m_dPressure = s_pwndLastData->m_dPressure; m_dInterfaceL = s_pwndLastData->m_dInterfaceL; m_dInterfaceD = s_pwndLastData->m_dInterfaceD; m_bLevelSel = s_pwndLastData->m_bLevelSel; m_szShtNo = s_pwndLastData->m_szShtNo; m_sTraMtoInfo = s_pwndLastData->m_sTraMtoInfo; m_sTraDescr = s_pwndLastData->m_sTraDescr; m_sParamSetting = s_pwndLastData->m_sParamSetting; m_sEndF1 = s_pwndLastData->m_sEndF1; m_sEndF2 = s_pwndLastData->m_sEndF2; m_sGaskets = s_pwndLastData->m_sGaskets; m_nColorIndex = s_pwndLastData->m_nColorIndex; m_nSglorDBL = s_pwndLastData->m_nSglorDBL; m_bElbowAngleDraw = s_pwndLastData->m_bElbowAngleDraw; m_bDrawWeldDot = s_pwndLastData->m_bDrawWeldDot; m_dSingleW = s_pwndLastData->m_dSingleW; m_dWeldDir = s_pwndLastData->m_dWeldDir; m_sInsMtr = s_pwndLastData->m_sInsMtr; m_dInsThk = s_pwndLastData->m_dInsThk; m_nInsAndHead = s_pwndLastData->m_nInsAndHead; m_sInsSpec = s_pwndLastData->m_sInsSpec; m_szInsTag = s_pwndLastData->m_szInsTag; m_sInsMaterial = s_pwndLastData->m_sInsMaterial; m_szInsDim = s_pwndLastData->m_szInsDim; m_szMedia = s_pwndLastData->m_szMedia; m_idCurSys = s_pwndLastData->m_idCurSys; } } void CWPipeDrawConfigDlg::SaveCurrentData() { if (s_pwndLastData == NULL) { s_pwndLastData = new CWPipeDrawConfigDlg; } s_pwndLastData->m_nDDir = m_nDDir; s_pwndLastData->m_nRadioOn = m_nRadioOn; s_pwndLastData->m_sFEGSInf = m_sFEGSInf; s_pwndLastData->m_dFPLen = m_dFPLen; s_pwndLastData->m_dEl = m_dEl; s_pwndLastData->m_nElSel = m_nElSel; s_pwndLastData->m_sSerNo = m_sSerNo; s_pwndLastData->m_sZoneNo = m_sZoneNo; s_pwndLastData->m_sUnitNo = m_sUnitNo; s_pwndLastData->m_sPipeNo = m_sPipeNo; s_pwndLastData->m_sDescr = m_sDescr; s_pwndLastData->m_sMaterial = m_sMaterial; s_pwndLastData->m_sMaterialFit = m_sMaterialFit; s_pwndLastData->m_sODSn = m_sODSn; s_pwndLastData->m_dDn = m_dDn; s_pwndLastData->m_dOD = m_dOD; s_pwndLastData->m_dThk = m_dThk; s_pwndLastData->m_dRRatio = m_dRRatio; s_pwndLastData->m_sProject = m_sProject; s_pwndLastData->m_nTrade = m_nTrade; s_pwndLastData->m_sLevel = m_sLevel; s_pwndLastData->m_dPressure = m_dPressure; s_pwndLastData->m_dInterfaceL = m_dInterfaceL; s_pwndLastData->m_dInterfaceD = m_dInterfaceD; s_pwndLastData->m_bLevelSel = m_bLevelSel; s_pwndLastData->m_szShtNo = m_szShtNo; s_pwndLastData->m_sTraMtoInfo = m_sTraMtoInfo; s_pwndLastData->m_sTraDescr = m_sTraDescr; s_pwndLastData->m_sParamSetting = m_sParamSetting; s_pwndLastData->m_sEndF1 = m_sEndF1; s_pwndLastData->m_sEndF2 = m_sEndF2; s_pwndLastData->m_sGaskets = m_sGaskets; s_pwndLastData->m_nColorIndex = m_nColorIndex; s_pwndLastData->m_nSglorDBL = m_nSglorDBL; s_pwndLastData->m_bElbowAngleDraw = m_bElbowAngleDraw; s_pwndLastData->m_bDrawWeldDot = m_bDrawWeldDot; s_pwndLastData->m_dSingleW = m_dSingleW; s_pwndLastData->m_dWeldDir = m_dWeldDir; s_pwndLastData->m_sInsMtr = m_sInsMtr; s_pwndLastData->m_dInsThk = m_dInsThk; s_pwndLastData->m_nInsAndHead = m_nInsAndHead; s_pwndLastData->m_sInsSpec = m_sInsSpec; s_pwndLastData->m_szInsTag = m_szInsTag; s_pwndLastData->m_sInsMaterial = m_sInsMaterial; s_pwndLastData->m_szInsDim = m_szInsDim; s_pwndLastData->m_szMedia = m_szMedia; s_pwndLastData->m_idCurSys = m_idCurSys; } void CWPipeDrawConfigDlg::pipeSysSetting() { CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); CUIISQLiteServer ADOServer; if (!ADOServer.InitADOServer(dbPath)) { AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!")); return; } CStringArray arSyses; PipelineTools::setLayerSys(&ADOServer, arSyses); } //介质 void CWPipeDrawConfigDlg::OnBnClickedButton3() { UpdateData(); //int nSel = m_wndSpecList.GetCurSel(); //if (nSel != -1) // m_wndSpecList.GetText(nSel, m_sLevel); CString sText; int nSel = m_wndPressList.GetCurSel(); if (nSel != -1) { m_wndPressList.GetText(nSel, sText); m_dPressure = _ttof(sText); } nSel = m_wndComboSys.GetCurSel(); if (nSel != -1) m_wndComboSys.GetLBText(nSel, m_sCurrSys); nSel = m_wndElbowradList.GetCurSel(); if (nSel != -1) { m_wndElbowradList.GetText(nSel, sText); m_dRRatio = _ttof(sText); } KTMediumDlg dlg; dlg.SetADOServer(m_pDb); WPipe::PipeParam param; GetPipeParam(¶m); dlg.SetPipeParam(¶m); if (IDOK == dlg.DoModal()) { m_szMedia = param.szMedia; m_sLevel = param.szLevel; m_sDescr = param.szDescr; /* int nIndex = m_wndSpecList.FindString(0, m_sLevel); if (nIndex != -1) { m_wndSpecList.SetCurSel(nIndex); }*/ FormatParamSettingAndSpec(); UpdateData(FALSE); } }