#include "stdafx.h" #include "TJBJDlg.h" #include "AecDbEarthWorm.h" #include "KTCADUtilityEx.h" #include "AcDbX3dSolid.h" #include "AecDbX3dGroup.h" #include "UITools.h" #include "axlock.h" #include "AecDbEarthWormFitting.h" #include "AecDbEwFitting.h" #ifndef Plumbing_DB #define Plumbing_DB _T("\\Plumbing.db") #endif 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; extern CString IDCreate(); extern AecInterface* SelectLockInf(AcDbObjectId idEW,AecDbX3dGroup*& pGroupAt); extern AecInterface* SelectLockInf(AcDbObjectId idEW,AecDbObjXDataMap*& pGroupMap); extern AecInterface* SelectLockInfH(AcDbObjectId idHouse,AecDbObjXDataMap*& pGroupMap); IMPLEMENT_DYNAMIC(CTJBJDlg, CDialog) CTJBJDlg::CTJBJDlg(CWnd* pParent /*=NULL*/) : CDialog(CTJBJDlg::IDD, pParent) , m_dDn(100.0) , m_sMertial(_T("")) , m_sCurrSys(_T("")) , m_sInfDir1(_T("")) { m_vtEnter.set(0,0,0); m_ptStart.set(0,0,0); m_dRRato = 2.0; m_nPipeColor = kRed; m_sCurrSys = _T(""); m_sMertial = _T(""); m_dDn = 100.0; m_dOD = 107.0; m_dL = 300.0; m_dt = 14; m_idxRoom = -1; m_dEDn = 150.0; m_dL = 200.0; m_dTOD = 105.0; } CTJBJDlg::~CTJBJDlg() { } void CTJBJDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT3, m_dDn); DDX_Text(pDX, IDC_EDIT4, m_sMertial); DDX_Text(pDX, IDC_EDIT5, m_sCurrSys); DDX_Text(pDX, IDC_EDIT10, m_sInfDir1); DDX_Control(pDX, IDC_LIST2, m_wndListCtrl); } BEGIN_MESSAGE_MAP(CTJBJDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON4, &CTJBJDlg::OnBnClickedButton4) ON_BN_CLICKED(IDOK, &CTJBJDlg::OnBnClickedOk) END_MESSAGE_MAP() BOOL CTJBJDlg::OnInitDialog() { CDialog::OnInitDialog(); CString path = FilePath::GetSysDir() + Plumbing_DB; if (!m_dbSQLite.InitADOServer(path)) { AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + Plumbing_DB + _T("文件是否存在.")); return FALSE; } m_wndListCtrl.InsertColumn(0,_T("主管公称直径"),LVCFMT_LEFT,100); m_wndListCtrl.InsertColumn(1,_T("变径端公称直径"),LVCFMT_LEFT,100); m_wndListCtrl.InsertColumn(2,_T("长度"),LVCFMT_LEFT,60); m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); InitReducer(); return TRUE; } void CTJBJDlg::SetEWFittingId(AcDbObjectId& id) { m_idEWFit = id; } void CTJBJDlg::SetXXXHouseID(AcDbObjectId& id) { m_idHouse = id; } void CTJBJDlg::InitReducer() { m_wndListCtrl.DeleteAllItems(); CString sSQL; sSQL.Format(_T("select [公称直径L],[公称直径S],[长度] from AecReduceData") _T(" where [公称直径L]=%d and [长度] > 0 order by [公称直径S]"),(int)m_dDn); CUIIValueTable valTable; m_dbSQLite.GetSelData(sSQL,valTable); CString sDN1,sDN2,sL; CStringArray arVals; CStringList lstDn2s; int nSize = valTable.GetTableLogicSize(); for(int i = 0;i < nSize;i++) { arVals.RemoveAll(); valTable.GetValueRecord(i,arVals); if (arVals.GetSize() >= 3) { sDN1 = arVals.GetAt(0); sDN2 = arVals.GetAt(1); sL = arVals.GetAt(2); if (lstDn2s.Find(sDN2) == NULL) { int nItem = m_wndListCtrl.GetItemCount(); m_wndListCtrl.InsertItem(nItem,sDN1); m_wndListCtrl.SetItemText(nItem,1,sDN2); m_wndListCtrl.SetItemText(nItem,2,sL); lstDn2s.AddTail(sDN2); } } } valTable.RemoveAll(); sSQL.Format(_T("select [公称直径S],[公称直径L],[长度] from AecReduceData") _T(" where [公称直径S]=%d and [长度] > 0 order by [公称直径L]"),(int)m_dDn); m_dbSQLite.GetSelData(sSQL,valTable); nSize = valTable.GetTableLogicSize(); for(i = 0;i < nSize;i++) { arVals.RemoveAll(); valTable.GetValueRecord(i,arVals); if (arVals.GetSize() >= 3) { sDN1 = arVals.GetAt(0); sDN2 = arVals.GetAt(1); sL = arVals.GetAt(2); if (lstDn2s.Find(sDN2) == NULL) { lstDn2s.AddTail(sDN2); int nItem = m_wndListCtrl.GetItemCount(); m_wndListCtrl.InsertItem(nItem,sDN1); m_wndListCtrl.SetItemText(nItem,1,sDN2); m_wndListCtrl.SetItemText(nItem,2,sL); } } } m_wndListCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); } void CTJBJDlg::OnBnClickedButton4() { UpdateData(); AecDbObjXDataMap* pGroupNext = NULL; AecInterface* pInf = SelectLockInf(m_idEWFit,pGroupNext); double dDn = 0.0,dSpace = 0.0; if (pInf == NULL) { pInf = SelectLockInfH(m_idHouse,pGroupNext); //查外径 } if (pInf != NULL) { m_ptStart = pInf->ptPos; m_vtEnter = -pInf->vtDir; m_vtEnter.negate(); if ( !pGroupNext->GetAt(_T("m_dDn"),dDn) ) { pGroupNext->GetAt(_T("m_dDn2"),dDn); } if (dDn < 1.e-3) { pGroupNext->GetAt(PIPE_DN,dDn); dDn *= 1000.0; } m_dDn = dDn;//毫米 //复制pGroup的材料信息和管径 pGroupNext->GetAt(_T("m_idxRoom"),m_idxRoom); pGroupNext->GetAt(_T("m_sCurrSys"),m_sCurrSys); if (!pGroupNext->GetAt(_T("m_sMertial"),m_sMertial)) { pGroupNext->GetAt(PIPE_MATERIAL,m_sMertial); pGroupNext->GetAt(PIPE_SYS,m_sCurrSys); } pGroupNext->GetAt(PIPE_OD,m_dOD); m_dOD *= 1000.0;////毫米 if ( !pGroupNext->GetAt(_T("m_dt"),m_dt) ) { pGroupNext->GetAt(PIPE_THICK,m_dt); m_dt *= 1000.0;//转为毫米 } pGroupNext->GetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR pGroupNext->GetAt(_T("m_dRRato"),m_dRRato); pInf->vtDir.normalize(); m_sInfDir1.Format(_T("%g,%g,%g"),pInf->vtDir.x,pInf->vtDir.y,pInf->vtDir.z); //查询变径信息 InitReducer(); UpdateData(FALSE); } } void CTJBJDlg::OnBnClickedOk() { int nItem = -1; POSITION ps = m_wndListCtrl.GetFirstSelectedItemPosition(); if (ps != NULL) { nItem = m_wndListCtrl.GetNextSelectedItem(ps); } if (nItem == -1) { AfxMessageBox(_T("请选择变径系列!")); return; } CString sEDn = m_wndListCtrl.GetItemText(nItem,1); m_dEDn = _ttof(sEDn); CString sL = m_wndListCtrl.GetItemText(nItem,2); m_dL = _ttof(sL); if (m_vtEnter.isZeroLength()) { AfxMessageBox(_T("请选择锁定管线管件接口!")); return; } CString sSQL,sText; sSQL.Format(_T("select [外径] from AecOD order by [公称直径] where [公称直径]=%d and [壁厚]=%g"),(int)(m_dEDn + 0.5),m_dt); if ( m_dbSQLite.GetSelData(sSQL,sText) ) { m_dTOD = _ttof(sText); } OnOK(); } int CTJBJDlg::GetFitting(AecDbEwFitting*& pFit) { bool bIsModify = false; if (pFit == NULL) { pFit = new AecDbEwFitting; } else { bIsModify = true; } pFit->GetSpecialtyData()->SetAt(KEY_RUNTIME,eReduce); pFit->GetSpecialtyData()->SetAt(KEY_MAJBR, m_vtEnter); pFit->GetSpecialtyData()->SetAt(KEY_NORMAL, AcGeVector3d::kZAxis); AcGeVector3d vtOff(0,0,0); pFit->GetSpecialtyData()->SetAt(KEY_OFFSET, vtOff); pFit->GetSpecialtyData()->SetAt(KEY_START, m_ptStart); AcGeVector3d vtEnd = m_vtEnter; vtEnd.normalize(); AcGePoint3d ptEnd = m_ptStart + vtEnd * AS_MUNIT(m_dL); pFit->GetSpecialtyData()->SetAt(KEY_END, ptEnd); int nMod = 2; pFit->GetSpecialtyData()->SetAt(PIPE_DRAWDIR, WPipe::eDN); pFit->GetSpecialtyData()->SetAt(PIPE_DN, AS_MUNIT( m_dDn )); pFit->GetSpecialtyData()->SetAt(PIPE_OD, AS_MUNIT(m_dOD)); pFit->GetSpecialtyData()->SetAt(PIPE_EDN, AS_MUNIT(m_dEDn)); pFit->GetSpecialtyData()->SetAt(PIPE_EOD, AS_MUNIT(m_dTOD)); pFit->GetSpecialtyData()->SetAt(PIPE_THICK, m_dt); pFit->GetSpecialtyData()->SetAt(PIPE_RATIO,m_dRRato); int nCnType = 0; double dFL = 0.0, dFD = 0.0; pFit->GetSpecialtyData()->SetAt(PIPE_CONNECT, nCnType); // 接口类型 pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACEL, AS_MUNIT(m_dDn)); pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACED, AS_MUNIT(m_dDn)); double dFL2 = 0.0, dFD2 = 0.0; pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACEL2, AS_MUNIT(m_dEDn)); pFit->GetSpecialtyData()->SetAt(PIPE_INTERFACED2, AS_MUNIT(m_dEDn)); pFit->GetSpecialtyData()->SetAt(KEY_2DSTYLE, 1); pFit->GetSpecialtyData()->SetAt(PIPE_DN, AS_MUNIT(m_dDn)); pFit->GetSpecialtyData()->SetAt(PIPE_THICK, AS_MUNIT(m_dt)); pFit->GetSpecialtyData()->SetAt(PIPE_MATERIAL, m_sMertial); pFit->GetSpecialtyData()->SetAt(PIPE_SYS, m_sCurrSys); pFit->GetSpecialtyData()->SetAt(PIPE_RATIO,m_dRRato); pFit->GetSpecialtyData()->SetAt(_T("m_sCurrSys"),m_sCurrSys); pFit->GetSpecialtyData()->SetAt(_T("m_sMertial"),m_sMertial); pFit->GetSpecialtyData()->SetAt(_T("m_dDn"),m_dDn); pFit->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt); pFit->GetSpecialtyData()->SetAt(_T("m_vtEnter"),m_vtEnter); pFit->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pFit->GetSpecialtyData()->SetAt(_T("m_dOD"),m_dOD); CString sOutDir; sOutDir.Format(_T("%g,%g,%g"),m_vtEnter.x,m_vtEnter.y,m_vtEnter.z); pFit->GetSpecialtyData()->SetAt(_T("m_sOutDir"),sOutDir); pFit->GetSpecialtyData()->SetAt(_T("COLOR"),m_nPipeColor);//系统默认KEY COLOR pFit->GetSpecialtyData()->SetAt(_T("m_idxRoom"),m_idxRoom);//系统默认KEY COLOR return 0; }