#include "stdafx.h" #include "KTCadUtility.h" #include "uihistory.h" #include "filepath.h" #include "AecDbHolder.h" #include "PSDLDlg.h" #include "XSXL_TJXLDlg.h" #include "LayPosDlg.h" 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; #define DB_PATH _T("\\Plumbing.db") IMPLEMENT_DYNAMIC(CPSDLDlg, CDialog) CPSDLDlg::CPSDLDlg(CWnd* pParent /*=NULL*/) : CDialog(CPSDLDlg::IDD, pParent) , m_dBomEl(0) , m_nLines(1) , m_dSpace(20) { m_ptFrPos.set(0,0,0); m_vtL.set(0,0,0); GET_CACHE(CPSDLDlg , %f%d%f , &m_dBomEl , &m_nLines , &m_dSpace ); m_data.m_nClr = kColorByLayer; m_data.m_linetype = _T("Continuous"); m_data.m_sModel = _T("KVVR 控制软电缆"); m_data.m_dD = 30; m_data.m_dDn = 12.0; m_data.m_sFactory = _T("江苏思科电缆有限公司"); } CPSDLDlg::~CPSDLDlg() { } void CPSDLDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dBomEl); DDX_Text(pDX, IDC_EDIT3, m_nLines); DDX_Text(pDX, IDC_EDIT4, m_dSpace); DDX_Control(pDX, IDC_LIST1, m_wndList); DDX_Control(pDX, IDC_COMBO1, m_wndLineTypeBox); DDX_CBString(pDX, IDC_COMBO1, m_data.m_linetype); } BEGIN_MESSAGE_MAP(CPSDLDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON1, &CPSDLDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON4, &CPSDLDlg::OnBnClickedButton4) ON_STN_CLICKED(IDC_STATIC_COLOR, &CPSDLDlg::OnStnClickedStaticColor) ON_WM_CTLCOLOR() ON_BN_CLICKED(IDOK, &CPSDLDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON2, &CPSDLDlg::OnBnClickedButton2) END_MESSAGE_MAP() BOOL CPSDLDlg::OnInitDialog() { CDialog::OnInitDialog(); CString path = FilePath::GetSysDir() + DB_PATH; if (!m_dbSQLite.InitADOServer(path)) { AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + DB_PATH + _T("文件是否存在.")); return FALSE; } if (m_wndLineTypeBox.GetCount() > 0) { int nSel = m_wndLineTypeBox.FindString(0,m_data.m_linetype); if (nSel == -1) nSel = 0; m_wndLineTypeBox.SetCurSel(nSel); } initList(); return TRUE; } void CPSDLDlg::initList() { m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_wndList.InsertColumn(0, _T("型号"), LVCFMT_LEFT, 240); m_wndList.InsertColumn(1, _T("外径(mm)"), LVCFMT_LEFT, 100); m_wndList.InsertColumn(2, _T("弯曲半径与外径比值(mm)"), LVCFMT_LEFT, 100); m_wndList.InsertColumn(3, _T("厂家"), LVCFMT_LEFT, 240); refreshList(); } void CPSDLDlg::refreshList() { m_wndList.DeleteAllItems(); CString sSQL, sText; sSQL = _T("select [型号],[外径],[弯曲半径与外径比值],[厂家] from AecCable order by [型号]"); CUIIValueTable table; m_dbSQLite.GetSelData(sSQL, table); table.ShowToListCtrl(&m_wndList); CString sModel, sFactory; double dD = 0, dDn = 0; for (int i = 0;i < m_wndList.GetItemCount();i++) { sModel = m_wndList.GetItemText(i, 0); dD = _ttof(m_wndList.GetItemText(i, 1)); dDn = _ttof(m_wndList.GetItemText(i, 2)); sFactory = m_wndList.GetItemText(i, 3); if (m_data.m_sModel.CompareNoCase(sModel) == 0 && fabs(m_data.m_dD - dD) < 1.e-2 && fabs(m_data.m_dDn - dDn) < 1.e-2) { m_wndList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); break; } } } void CPSDLDlg::OnBnClickedButton1() { //add CString sModel(_T("")), sFactory(_T("")); double dDn(.0), dRatio(.0); int nItem = -1; POSITION ps = m_wndList.GetFirstSelectedItemPosition(); if (ps != NULL) nItem = m_wndList.GetNextSelectedItem(ps); if (nItem != -1) { sModel = m_wndList.GetItemText(nItem, 0); dDn = _ttof(m_wndList.GetItemText(nItem, 1)); dRatio = _ttof(m_wndList.GetItemText(nItem, 2)); sFactory = m_wndList.GetItemText(nItem, 3); } CXSXL_TJXLDlg dlg(sModel, sFactory, dDn, dRatio); if (dlg.DoModal() != IDOK) return; sModel = dlg.m_sModel; sFactory = dlg.m_sFactory; dDn = dlg.m_dDn; dRatio = dlg.m_dRatio; CString sql(_T("")); sql.Format(_T("insert into [aeccable] values ('%s', '%d', '%d', '%s')") , sModel, (int)(dDn+0.5), (int)(dRatio+0.5), sFactory); m_dbSQLite.ExecuteSQL(sql); refreshList(); } void CPSDLDlg::OnBnClickedButton4() { //del CString sModel(_T("")); int nItem = -1; POSITION ps = m_wndList.GetFirstSelectedItemPosition(); if (ps != NULL) nItem = m_wndList.GetNextSelectedItem(ps); if (nItem == -1) { AfxMessageBox(_T("请选择一行数据。")); return; } sModel = m_wndList.GetItemText(nItem, 0); CString sql(_T("")); sql.Format(_T("delete from [aeccable] where [型号]='%s'"), sModel); m_dbSQLite.ExecuteSQL(sql); refreshList(); } void CPSDLDlg::OnStnClickedStaticColor() { acedSetColorDialog(m_data.m_nClr, Adesk::kFalse, m_data.m_nClr); Invalidate(); } HBRUSH CPSDLDlg::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_nClr == kColorByLayer) crColor = RGB(255, 255, 255); else crColor = acedGetRGB(m_data.m_nClr); CRect rc; pWnd->GetClientRect(rc); pDC->FillSolidRect(rc, crColor); } } return hbr; } void CPSDLDlg::OnBnClickedOk() { UpdateData(); m_data.m_dBomEl = m_dBomEl; m_data.m_nCount = m_nLines; m_data.m_dSpace = m_dSpace; int nSel = m_wndLineTypeBox.GetCurSel(); if (nSel == -1) { AfxMessageBox(_T("请选择线缆线型!")); return; } m_wndLineTypeBox.GetLBString(nSel, m_data.m_linetype); int nItem = -1; POSITION ps = m_wndList.GetFirstSelectedItemPosition(); if (ps != NULL) nItem = m_wndList.GetNextSelectedItem(ps); if (nItem != -1) { m_data.m_sModel = m_wndList.GetItemText(nItem, 0); m_data.m_dD = _ttof(m_wndList.GetItemText(nItem, 1)); m_data.m_dDn = _ttof(m_wndList.GetItemText(nItem, 2)); m_data.m_sFactory = m_wndList.GetItemText(nItem, 3); } else { AfxMessageBox(_T("请选择一行数据。")); return; } SET_CACHE(CPSDLDlg , %f%d%f , m_dBomEl , m_nLines , m_dSpace); CDialog::OnOK(); OnOK(); } void CPSDLDlg::OnBnClickedButton2() { UpdateData(TRUE); acedGetAcadFrame()->EnableWindow(TRUE); ShowWindow(SW_HIDE); acedGetAcadFrame()->SetFocus(); ads_name ent; struct resbuf* pRb = acutBuildList(RTDXF0, _T("AEC_DBHOLDER"), 0); int nRes = CKTCadUtility::SelectEntity(_T("\n请选择支架:"), ent, pRb); acutRelRb(pRb); if (nRes == RTNORM) { AcDbObjectId id; acdbGetObjectId(id,ent); AcDbEntity* pEnt = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead)) { AecDbHolder* pHolder = AecDbHolder::cast(pEnt); if (pHolder != NULL) { XHolder holder; pHolder->GetHolder(holder); AcGePoint3d ptPos = pHolder->GetPosition(m_vtL); CLayPosDlg layPosDlg; layPosDlg.m_nLays = holder.N; if ( IDOK == layPosDlg.DoModal() ) { m_dBomEl = ptPos.z + (layPosDlg.m_nLayPos - 1) * (holder.V + holder.t); m_ptFrPos.set(ptPos.x,ptPos.y,m_dBomEl); } } pEnt->close(); } } ShowWindow(SW_SHOW); SetFocus(); acedGetAcadFrame()->EnableWindow(FALSE); EnableWindow(TRUE); UpdateData(FALSE); }