#include "StdAfx.h" #include "CISODraftDlg.h" #include "CoreTools.h" IMPLEMENT_DYNAMIC(CISODraftDlg, CDialog) CISODraftDlg::CISODraftDlg(CWnd *pParent /*=NULL*/) : CDialog(CISODraftDlg::IDD, pParent) , m_sMaterial(_T("碳钢")) , m_dPipeW(0.15) , m_bElbowLine(TRUE) , m_sCurrSys(_T("污水")) , m_sScale(_T("1:100")) , m_dDotWD(0.45) { m_pDb = NULL; m_sODSn = _T("B"); m_dDn = 100.0; m_dOD = 114.0; m_dThk = 7.0; m_nView = 0; m_nAngle = 0; m_dRadio = 1.0; } CISODraftDlg::~CISODraftDlg() { } void CISODraftDlg::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_PIPELIST, m_wndPipeList); DDX_Control(pDX, IDC_COMBOMATERS, m_wndComboMaters); DDX_CBString(pDX, IDC_COMBOMATERS, m_sMaterial); DDX_Radio(pDX, IDC_RADIO1, m_nView); DDX_Radio(pDX, IDC_RADIO30, m_nAngle); DDX_Check(pDX, IDC_CHECKFITDIM2, m_bElbowLine); DDX_Text(pDX, IDC_EDITPIPEW, m_dPipeW); DDX_Control(pDX, IDC_COMBOSYSLAY, m_wndComboSys); DDX_CBString(pDX, IDC_COMBOSYSLAY, m_sCurrSys); DDX_CBString(pDX, IDC_COMBOSCALE, m_sScale); DDX_Text(pDX, IDC_EDITDOWD, m_dDotWD); } BEGIN_MESSAGE_MAP(CISODraftDlg, CDialog) ON_CBN_SELCHANGE(IDC_COMBOMATERS, &CISODraftDlg::OnCbnSelchangeCombomaters) ON_BN_CLICKED(IDOK, &CISODraftDlg::OnBnClickedOk) END_MESSAGE_MAP() BOOL CISODraftDlg::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); m_wndPipeList.InsertColumn(6, _T("执行标准"), LVCFMT_LEFT, 300 + nAdd); CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); m_pDb = new CUIISQLiteServer; if (!m_pDb->InitADOServer(dbPath)) { AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!")); delete m_pDb; return FALSE; } InitSys(); InitPipeList(50000, m_sODSn); InitPipeMaterCombox(); return TRUE; } void CISODraftDlg::InitSys() { CString sSQL, sStd(CoreTools::getCurrentPipeSysTblName()); sSQL.Format(_T("select distinct system from %s"), sStd); CStringArray arSyses; m_pDb->GetSelData(sSQL, arSyses); for (int i = 0; i < arSyses.GetSize(); i++) { m_wndComboSys.AddString(arSyses.GetAt(i)); } int nCur = m_wndComboSys.FindString(0, m_sCurrSys); if (nCur != -1) { m_wndComboSys.SetCurSel(nCur); } } void CISODraftDlg::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()) { sODAWhere = _T("([外径系列]='A' or [外径系列]='B' or [外径系列]='S')"); bMODSN = true; } else { sODAWhere.Format(_T("[外径系列]='%s'"), sODNo); } 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); } CUIIValueTable table; m_pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() == 0) { //按外径选 int nDN = nMaxDN; 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 CISODraftDlg::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); } } } BOOL CISODraftDlg::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 (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"); return TRUE; } } return FALSE; } BOOL CISODraftDlg::IsGSFMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("衬塑")) != -1 || m_sMaterial.Find(_T("HG/T 20538")) != -1) { sODNo = _T("GSF"); return TRUE; } return FALSE; } BOOL CISODraftDlg::IsSRPEMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("钢骨架")) != -1 || m_sMaterial.Find(_T("CJ/T 123")) != -1) { sODNo = _T("SRPE"); return TRUE; } return FALSE; } BOOL CISODraftDlg::IsRCPMaterial(CString &sODNo) { UpdateData(); //目前只能按照材质判断 if (m_sMaterial.Find(_T("混凝土")) != -1) { sODNo = _T("RCP"); return TRUE; } return FALSE; } //管道材质 void CISODraftDlg::OnCbnSelchangeCombomaters() { UpdateData(); 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)) { InitPipeList(50000, sODNo); } else if (IsGSFMaterial(sODNo))//衬塑 { InitPipeList(50000, sODNo); } else if (IsRCPMaterial(sODNo))//水泥管 { InitPipeList(50000, sODNo); } else if (IsSRPEMaterial(sODNo)) { InitPipeList(50000, sODNo); } else { sODNo = _T(""); InitPipeList(50000, sODNo); } UpdateData(FALSE); } void CISODraftDlg::OnBnClickedOk() { UpdateData(); //管子规格 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; } m_nRadioOn = TRUE;//按国标结构长度 m_dRadio = 1.0;//最小 EndDialog(IDOK); } void CISODraftDlg::GetISODrawCFG(ISODrawCfg &isodrcfg, WPipe::PipeParam& param) const { /* * typedef struct ISODrawCfg { TCHAR m_sODSn[17]; TCHAR m_sMaterial[256]; TCHAR m_sCurrSys[256]; TCHAR m_sScale[17]; double m_dDn; double m_dOD; double m_dThk; double m_dRadio; double m_dDotWD; int m_nView; int m_nAngle; double m_dPipeW; BOOL m_bElbowLine; }ISODRAWCFG; */ _tcscpy(isodrcfg.m_sODSn, (LPCTSTR)m_sODSn); _tcscpy(isodrcfg.m_sMaterial, (LPCTSTR)m_sMaterial); _tcscpy(isodrcfg.m_sCurrSys, (LPCTSTR)m_sCurrSys); _tcscpy(isodrcfg.m_sScale, (LPCTSTR)m_sScale); _tcscpy(isodrcfg.m_szShtNo, (LPCTSTR)m_szShtNo); _tcscpy(isodrcfg.m_sStd, (LPCTSTR)m_sStd); isodrcfg.m_dDn = m_dDn; isodrcfg.m_dOD = m_dOD; isodrcfg.m_dThk = m_dThk; isodrcfg.m_dRadio = m_dRadio; isodrcfg.m_nRadioOn = m_nRadioOn; isodrcfg.m_nView = m_nView; isodrcfg.m_nAngle = m_nAngle; isodrcfg.m_dPipeW = m_dPipeW; isodrcfg.m_dDotWD = m_dDotWD; isodrcfg.m_bElbowLine = m_bElbowLine; param.m_dDN = m_dDn; param.m_dOD = m_dOD; param.m_dThick = m_dThk; param.m_dRRatio = m_dRadio; param.m_nRadioOn = m_nRadioOn; param.m_nRadioOn = 1; param.m_nConnectType = 0; param.m_dPress = 1.0; _tcscpy(param.szODSn, (LPCTSTR)m_sODSn); _tcscpy(param.szMertial, (LPCTSTR)m_sMaterial); _tcscpy(param.szMertialFit, (LPCTSTR)m_sMaterial); _tcscpy(param.szSys, (LPCTSTR)m_sCurrSys); _tcscpy(param.szShtNo, (LPCTSTR)m_szShtNo); _tcscpy(param.szStdNo, (LPCTSTR)m_sStd); }