#include "stdafx.h" #include "FZGWDlg.h" #include "UITools.h" #include "caddpipedbdlg.h" #ifndef Plumbing_DB #define Plumbing_DB _T("\\Plumbing.db") #endif namespace { 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; } } static const Adesk::UInt16 kColorByBlock = 0; static const Adesk::UInt16 kRed = 1; static const Adesk::UInt16 kYellow = 2; static const Adesk::UInt16 kGreen = 3; static const Adesk::UInt16 kCyan = 4; static const Adesk::UInt16 kBlue = 5; static const Adesk::UInt16 kMagenta = 6; static const Adesk::UInt16 kWhite = 7; static const Adesk::UInt16 kColorByLayer = 256; static int g_nPipeNum = 0; IMPLEMENT_DYNAMIC(CFZGWDlg, CDialog) CFZGWDlg::CFZGWDlg(CWnd* pParent /*=NULL*/) : CDialog(CFZGWDlg::IDD, pParent) , m_bRemove(false) , m_linetypeID(AcDbObjectId::kNull) { g_nPipeNum++; m_data.m_nNo = g_nPipeNum; UIDataCache::Read(_T("%d%d%d%d%d%d%s%i%i%i%i") , _T("CFZGWDlg") , &m_data.m_dD , &m_data.m_dX , &m_data.m_dW , &m_data.m_dH , &m_data.m_dL , &m_data.m_dh , &m_data.m_sSpec , &m_data.m_nPos , &m_data.m_nKind , &m_data.m_nRows , &m_data.m_id3DEqu); } CFZGWDlg::~CFZGWDlg() { } void CFZGWDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT6, m_data.m_sSpec); DDX_Text(pDX, IDC_EDIT1, m_data.m_dD); DDX_Text(pDX, IDC_EDIT5, m_data.m_dX); DDX_Text(pDX, IDC_EDIT2, m_data.m_dW); DDX_Text(pDX, IDC_EDIT3, m_data.m_dH); DDX_Text(pDX, IDC_EDIT4, m_data.m_dL); DDX_Radio(pDX, IDC_RADIO2, m_data.m_nPos); DDX_Control(pDX, IDC_LIST1, m_wndPipeList); DDX_Control(pDX, IDC_LIST2, m_wndListBoxMaters); DDX_Control(pDX, IDC_LIST3, m_wndSysListBox); DDX_Control(pDX, IDC_COMBO_LTYPE, m_wndLineTypeBox); DDX_LBString(pDX, IDC_LIST2, m_data.m_sMertial); DDX_Text(pDX, IDC_EDIT7, m_data.m_nNo); DDX_Radio(pDX, IDC_RADIO1, m_data.m_nKind); DDX_Text(pDX, IDC_EDIT8, m_data.m_nRows); DDX_Text(pDX, IDC_EDIT9, m_data.m_dh); DDX_Control(pDX, IDC_EDIT8, m_wndRowEdit); DDX_Control(pDX, IDC_EDIT9, m_wndhEdit); } BEGIN_MESSAGE_MAP(CFZGWDlg, CDialog) ON_BN_CLICKED(IDOK, &CFZGWDlg::OnBnClickedOk) ON_BN_CLICKED(IDOK2, &CFZGWDlg::OnBnClickedOk2) ON_STN_CLICKED(IDC_STATIC_COLOR, &CFZGWDlg::OnStnClickedStaticColor) ON_WM_CTLCOLOR() ON_BN_CLICKED(IDC_RADIO1, &CFZGWDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO4, &CFZGWDlg::OnBnClickedRadio4) ON_BN_CLICKED(IDC_BUTTON_SEL, &CFZGWDlg::OnBnClickedButtonSel) ON_BN_CLICKED(IDC_BUTTON1, &CFZGWDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON4, &CFZGWDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON6, &CFZGWDlg::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON8, &CFZGWDlg::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9, &CFZGWDlg::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON10, &CFZGWDlg::OnBnClickedButton10) END_MESSAGE_MAP() BOOL CFZGWDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); #ifndef NDEBUG EquTools::subClassGsViewAndShow(&m_wndGs, this, IDC_STATIC_3D, m_data.m_id3DEqu); #else CWnd *pWnd = GetDlgItem(IDC_STATIC_GRP); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_BUTTON_SEL); if (pWnd) pWnd->ShowWindow(SW_HIDE); pWnd = GetDlgItem(IDC_STATIC_3D); if (pWnd) pWnd->ShowWindow(SW_HIDE); #endif // DEBUG ////////////////////////////////////////////////////////////////////////// m_wndPipeList.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_wndPipeList.InsertColumn(0, _T("公称直径(mm)"), LVCFMT_LEFT, 60); m_wndPipeList.InsertColumn(1, _T("外径(mm)"), LVCFMT_LEFT, 60); m_wndPipeList.InsertColumn(2, _T("壁厚(mm)"), LVCFMT_LEFT, 60); m_wndPipeList.InsertColumn(3, _T("重量(m/kg)"), LVCFMT_LEFT, 60); CString path = FilePath::GetSysDir() + Plumbing_DB; if (!m_dbSQLite.InitADOServer(path)) { AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + Plumbing_DB + _T("文件是否存在.")); return FALSE; } InitPipeList(); if (m_wndLineTypeBox.GetCount()) m_wndLineTypeBox.SetCurSel(0); if (m_data.m_nKind == 0) { m_wndRowEdit.EnableWindow(FALSE); m_wndhEdit.EnableWindow(FALSE); } return TRUE; } void CFZGWDlg::OnBnClickedOk() { UpdateData(); if (m_data.m_dD < 0.2) { AfxMessageBox(_T("靠侧距离过小!")); return; } if (m_data.m_dW < 0.2 || m_data.m_dH < 0.2 || m_data.m_dL < 0.2) { AfxMessageBox(_T("预留官位尺寸较小!")); return; } if (m_data.m_nKind > 0) { double dHH = m_data.m_nRows * m_data.m_dh; if (dHH - m_data.m_dH > 1.e-6) { AfxMessageBox(_T("角钢支架层数和间距总高大于支架高!清重新调整参数!")); return; } } ////////////////////////////////////////////////////////////////////////// int nItem = -1; POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition(); if (ps != NULL) { nItem = m_wndPipeList.GetNextSelectedItem(ps); } if (nItem == -1) { AfxMessageBox(_T("请选择管道规格!")); return; } m_data.m_dDn = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 0))); m_data.m_dPD = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 1))); m_data.m_dt = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 2))); m_data.m_dWeight = _ttof(m_wndPipeList.GetItemText(nItem, 3)); int nSel = m_wndListBoxMaters.GetCurSel(); if (nSel == -1) { AfxMessageBox(_T("请选择管道材质!")); return; } m_wndListBoxMaters.GetText(nSel, m_data.m_sMertial); int nSys = m_wndSysListBox.GetCurSel(); if (nSys == -1) { AfxMessageBox(_T("请选择管道用途系统!")); return; } m_wndSysListBox.GetText(nSys, m_data.m_sCurrSys); m_linetypeID = m_wndLineTypeBox.getOIDCurSel(); int idx = m_wndLineTypeBox.GetCurSel(); if (idx != -1) m_wndLineTypeBox.GetLBText(idx, m_data.m_linetypeString); ////////////////////////////////////////////////////////////////////////// UIDataCache::Write(_T("%d%d%d%d%d%d%s%i%i%i%i") , _T("CFZGWDlg") , &m_data.m_dD , &m_data.m_dX , &m_data.m_dW , &m_data.m_dH , &m_data.m_dL , &m_data.m_dh , &m_data.m_sSpec , &m_data.m_nPos , &m_data.m_nKind , &m_data.m_nRows , &m_data.m_id3DEqu); OnOK(); } CString CFZGWDlg::GetScript(CString& sScript,int nRoomIndex,CString& sOffsets) { sScript = m_data.toString(nRoomIndex, sOffsets); return TypeConvert::i2s(m_data.m_nNo); } void CFZGWDlg::OnBnClickedOk2() { m_bRemove = true; OnOK(); } void CFZGWDlg::InitPipeList() { InitPipeRule(); InitPipeMaterial(); InitPipeSystem(); } void CFZGWDlg::InitPipeRule() { m_wndPipeList.DeleteAllItems(); CString sSQL, sText; sSQL = _T("select [公称直径],[外径],[壁厚],[重量] from AecOD order by [公称直径]"); CUIIValueTable table; m_dbSQLite.GetSelData(sSQL, table); table.ShowToListCtrl(&m_wndPipeList); double dT = 0.0; CString sDnold; sDnold.Format(_T("%d"), (int)m_data.m_dDn); bool bFind = false; int nFindPos = 0; for (int i = 0; i < m_wndPipeList.GetItemCount(); i++) { sText = m_wndPipeList.GetItemText(i, 0); dT = _ttof(m_wndPipeList.GetItemText(i, 2)); if (sText.CompareNoCase(sDnold) == 0 && fabs(m_data.m_dt - dT) < 1.e-2) { m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); m_wndPipeList.EnsureVisible(i, TRUE); bFind = true; nFindPos = i; break; } } if (!bFind) { if (m_wndPipeList.GetItemCount() > 0) m_wndPipeList.SetItemState(nFindPos, LVIS_SELECTED, LVIS_SELECTED); } } void CFZGWDlg::InitPipeMaterial() { m_wndListBoxMaters.ResetContent(); CStringArray arVals; CString sSQL = _T("select [材质] from AecMaterial where [类型]='管道'"); m_dbSQLite.GetSelData(sSQL, arVals); int nCursel = 0; for (int i = 0; i < arVals.GetSize(); i++) { m_wndListBoxMaters.AddString(arVals.GetAt(i)); if (m_data.m_sMertial.CompareNoCase(arVals.GetAt(i)) == 0) { nCursel = i; } } m_wndListBoxMaters.SetCurSel(nCursel); } void CFZGWDlg::InitPipeSystem() { m_wndSysListBox.ResetContent(); CString sStd, sTemp; CString sSQL = _T("select tablename from wpipecfg where currstd=1"); m_dbSQLite.GetSelData(sSQL, sStd); sSQL.Format(_T("select distinct system from %s"), sStd); CStringArray arSyses; m_dbSQLite.GetSelData(sSQL, arSyses); int nCursel = 0; for (int i = 0; i < arSyses.GetSize(); i++) { sTemp = arSyses.GetAt(i); m_wndSysListBox.AddString(sTemp); if (m_data.m_sCurrSys.CompareNoCase(sTemp) == 0) { nCursel = i; } } m_wndSysListBox.SetCurSel(nCursel); } HBRUSH CFZGWDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR) { COLORREF crColor = RGB(255, 255, 255); if (m_data.m_nPipeColor == kColorByLayer) { crColor = RGB(255, 255, 255); } else { crColor = acedGetRGB(m_data.m_nPipeColor); } CRect rc; pWnd->GetClientRect(rc); pDC->FillSolidRect(rc, crColor); } } return hbr; } void CFZGWDlg::OnStnClickedStaticColor() { acedSetColorDialog(m_data.m_nPipeColor, Adesk::kFalse, m_data.m_nPipeColor); Invalidate(); } void CFZGWDlg::OnBnClickedRadio1()//凸台 { UpdateData(); m_data.m_dL = 500.0; if (m_data.m_nKind == 0) { m_wndRowEdit.EnableWindow(FALSE); m_wndhEdit.EnableWindow(FALSE); } UpdateData(FALSE); } void CFZGWDlg::OnBnClickedRadio4() { UpdateData(); m_data.m_dL = 100.0; if (m_data.m_nKind == 1) { m_wndRowEdit.EnableWindow(TRUE); m_wndhEdit.EnableWindow(TRUE); } UpdateData(FALSE); } void CFZGWDlg::OnBnClickedButtonSel() { EquTools::selectEquAndShow(&m_wndGs, m_data.m_id3DEqu); } void CFZGWDlg::OnBnClickedButton1() // 规格+ { CAddPipeDbDlg dlg(CAddPipeDbDlg::eRule); if (dlg.DoModal() != IDOK) return; int id = getMaxIDFromDB(_T("ID"), _T("AecOD"), &m_dbSQLite); if (id == -1) return; CString sSQL(_T("")), sText(_T("insert into AecOD ([ID],[公称直径],[外径],[壁厚],[重量]) values ('%d','%d','%d','%d','%d')")); sSQL.Format(sText, id, dlg.m_n1, dlg.m_n2, dlg.m_n3, dlg.m_n4); if (m_dbSQLite.ExecuteSQL(sSQL)) InitPipeRule(); } void CFZGWDlg::OnBnClickedButton4() // 规格- { int nItem = -1; POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition(); if (ps != NULL) { nItem = m_wndPipeList.GetNextSelectedItem(ps); } if (nItem == -1) { AfxMessageBox(_T("请选择管道规格!")); return; } CString s1(m_wndPipeList.GetItemText(nItem, 0)) , s2(m_wndPipeList.GetItemText(nItem, 1)) , s3(m_wndPipeList.GetItemText(nItem, 2)) , s4(m_wndPipeList.GetItemText(nItem, 3)); CString sSql; sSql.Format(_T("delete from AecOD where [公称直径]='%s' and [外径]='%s' and [壁厚]='%s' and [重量]='%s'") , s1, s2, s3, s4); if (m_dbSQLite.ExecuteSQL(sSql)) InitPipeRule(); } void CFZGWDlg::OnBnClickedButton6() // 材质+ { CAddPipeDbDlg dlg(CAddPipeDbDlg::eMaterial); if (dlg.DoModal() != IDOK) return; int id = getMaxIDFromDB(_T("ID"), _T("AecMaterial"), &m_dbSQLite); if (id == -1) return; CString sSQL(_T("")), sText(_T("insert into AecMaterial ([ID],[类型],[材质]) values ('%d','管道','%s')")); sSQL.Format(sText, id, dlg.m_s1); if (m_dbSQLite.ExecuteSQL(sSQL)) InitPipeMaterial(); } void CFZGWDlg::OnBnClickedButton8() // 材质- { int nSel = m_wndListBoxMaters.GetCurSel(); if (nSel == -1) { AfxMessageBox(_T("请选择管道材质!")); return; } CString str(_T("")); m_wndListBoxMaters.GetText(nSel, str); CString sSql; sSql.Format(_T("delete from AecMaterial where [类型]='管道' and [材质]='%s'"), str); if (m_dbSQLite.ExecuteSQL(sSql)) InitPipeMaterial(); } void CFZGWDlg::OnBnClickedButton9() // 系统+ { CAddPipeDbDlg dlg(CAddPipeDbDlg::eSystem); if (dlg.DoModal() != IDOK) return; int id = getMaxIDFromDB(_T("LAYKEY"), _T("WConfig_CN"), &m_dbSQLite); if (id == -1) return; CString sSQL(_T("")), sText(_T("insert into WConfig_CN ([LAYKEY],[SYSTEM]) values ('%d','%s')")); sSQL.Format(sText, id, dlg.m_s1); if (m_dbSQLite.ExecuteSQL(sSQL)) InitPipeSystem(); } void CFZGWDlg::OnBnClickedButton10() // 系统- { int nSys = m_wndSysListBox.GetCurSel(); if (nSys == -1) { AfxMessageBox(_T("请选择管道用途系统!")); return; } CString str(_T("")); m_wndSysListBox.GetText(nSys, str); CString sSql; sSql.Format(_T("delete from WConfig_CN where [SYSTEM]='%s'"), str); if (m_dbSQLite.ExecuteSQL(sSql)) InitPipeSystem(); }