#include "stdafx.h" #include "CXTCGDlg.h" #include "AecDbEwPipe.h" #include "AecDbHvacDuct.h" #include "AecDbECableTray.h" #include "KTCadUtility.h" #include "AecDbEwFitting.h" #include "AecDbHvacFitting.h" #include "AecDbEcFitting.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif #define FOLDER_ROOT 0 #define FOLDER_IMG 1 #define SYSENT_IMG 2 #define DXF_PIPE_SYS_ONLY _T("AEC_EWPIPE,AEC_DBDUCT,AEC_DBCABTRY") #ifndef G_PSZMINFDXFNAMES #define G_PSZMINFDXFNAMES _T("AEC_EWPIPE,AEC_DBEWFIT,AEC_DBWEQUIPMENT,AEC_DBCABTRY,AEC_DBECFIT,AEC_DBDUCT,AEC_DBHVACFIT") #endif #define DXF_FITTING_SYS_ONLY _T("AEC_DBEWFIT,AEC_DBECFIT,AEC_DBHVACFIT") extern bool DLLIMPEXP GetPipeNetNodes(const AcDbObjectId &id1, AcDbObjectIdArray &arNetIds, AcDbObjectIdArray &arIdSrc, BOOL bTeeStop, BOOL bCrossStop); IMPLEMENT_DYNAMIC(CXTCGDlg, CDialog) CXTCGDlg::CXTCGDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_XTCG_DLG, pParent) { m_sFind = _T(""); } CXTCGDlg::~CXTCGDlg() { } void CXTCGDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_wndSysTree); DDX_Control(pDX, IDC_BUTTON6, m_wndBt6); DDX_Control(pDX, IDC_BUTTON3, m_wndBt3); DDX_Control(pDX, IDC_BUTTON4, m_wndBt4); DDX_Control(pDX, IDC_BUTTON5, m_wndBt5); DDX_Text(pDX,IDC_EDIT1, m_sFind); } BEGIN_MESSAGE_MAP(CXTCGDlg, CDialog) ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CXTCGDlg::onAcadKeepFocus) ON_BN_CLICKED(IDOK, &CXTCGDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CXTCGDlg::OnBnClickedCancel) ON_WM_CLOSE() ON_NOTIFY(NM_TVSTATEIMAGECHANGING, IDC_TREE1, &CXTCGDlg::OnNMTrsItemGeChang) ON_BN_CLICKED(IDC_BUTTON1, &CXTCGDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON3, &CXTCGDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &CXTCGDlg::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON5, &CXTCGDlg::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON6, &CXTCGDlg::OnBnClickedButton6) END_MESSAGE_MAP() LONG_PTR CXTCGDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if (!(rect.PtInRect(pt))) { return FALSE; } return TRUE; } void CXTCGDlg::SetAllPipeHDsSys(std::vector< PipeHDsSys> &vtPipeHDsSys) { for (int k = 0; k < m_vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = m_vtPipeHDsSys.at(k); if (phdss.parIds != NULL) { delete phdss.parIds; } } m_vtPipeHDsSys.clear(); m_vtPipeHDsSys.assign(vtPipeHDsSys.begin(),vtPipeHDsSys.end()); } BOOL CXTCGDlg::OnInitDialog() { CDialog::OnInitDialog(); CBitmap bmp; if (!bmp.LoadBitmap(IDB_BITMAPDIR)) { AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPI); ASSERT(FALSE); return FALSE; } BITMAP bmpObj; bmp.GetBitmap(&bmpObj); UINT nFlags = ILC_COLOR24 | ILC_MASK; m_imageList.Create(16, bmpObj.bmHeight, nFlags, 0, 0); m_imageList.Add(&bmp, RGB(255, 0, 0)); m_wndSysTree.SetImageList(&m_imageList, TVSIL_NORMAL); m_wndSysTree.InsertItem(_T("系统分类"), FOLDER_ROOT, FOLDER_ROOT); CBitmap bmp24; if (!bmp24.LoadBitmap(IDB_BITMAP_XMLC)) { AfxMessageBox(_T("Can't load bitmap: IDB_BITMAP32")); ASSERT(FALSE); return FALSE; } BITMAP bmpObj24; bmp24.GetBitmap(&bmpObj24); m_Imagelist24.Create(24, bmpObj24.bmHeight, nFlags, 0, 0); m_Imagelist24.Add(&bmp24, RGB(255, 0, 0)); m_wndBt3.SetIcon(m_Imagelist24.ExtractIcon(3)); m_wndBt4.SetIcon(m_Imagelist24.ExtractIcon(4)); m_wndBt5.SetIcon(m_Imagelist24.ExtractIcon(5)); m_wndBt6.SetIcon(m_Imagelist24.ExtractIcon(8)); ShowPipeSysList(); return TRUE; } void CXTCGDlg::ShowPipeSysList() { m_arPipeHDsSys2.removeAll(); m_wndSysTree.DeleteAllItems(); m_wndSysTree.InsertItem(_T("系统分类"), FOLDER_ROOT, FOLDER_ROOT); AcAxDocLock lock; //全部接口标识 struct resbuf *pRb = acutBuildList(RTDXF0, G_PSZMINFDXFNAMES, 0); ads_name ss, ent; acedSSGet(_T("A"), NULL, NULL, pRb, ss); acutRelRb(pRb); AcDbObjectId idT; Adesk::Int32 lLen = 0; acedSSLength(ss, &lLen); AcDbObjectIdArray arIdSrc; for (int n = 0;n < lLen;n++) { acedSSName(ss, n, ent); acdbGetObjectId(idT, ent); arIdSrc.append(idT); } acedSSFree(ss); HTREEITEM hRoot = m_wndSysTree.GetRootItem(); for (int i = 0;i < m_vtPipeHdSys.size();i++) { PipeHDSys &phdsys = m_vtPipeHdSys.at(i); HTREEITEM hItem = m_wndSysTree.InsertItem(phdsys.szSys, FOLDER_IMG, FOLDER_IMG,hRoot); m_wndSysTree.SetItemData(hItem, (DWORD_PTR)i); //分系统 for(int ii = 0;ii < m_vtPipeHDsSys.size();ii++) { PipeHDsSys &phdssys = m_vtPipeHDsSys.at(ii); if (_tcscmp(phdsys.szSys, phdssys.szSys) == 0) { AcDbObjectIdArray arIds, arNetIds; arIds.append(*phdssys.parIds); while (!arIds.isEmpty()) { arNetIds.removeAll(); GetPipeNetNodes(arIds.first(), arNetIds, arIdSrc,FALSE, FALSE); for (int iii = 0; iii < arNetIds.length(); iii++) { arIds.remove(arNetIds.at(iii)); } //新建分系统 if (!arNetIds.isEmpty()) { PipeHDsSys phdsys2; _tcscpy(phdsys2.szSys, phdsys.szSys); phdsys2.eApp = phdsys.eApp; phdsys2.parIds = new AcDbObjectIdArray(arNetIds); int nPos = m_arPipeHDsSys2.append(phdsys2); HTREEITEM hSubItem = m_wndSysTree.InsertItem(phdsys.szSys, SYSENT_IMG, SYSENT_IMG, hItem); m_wndSysTree.SetItemData(hSubItem, (DWORD_PTR)nPos); } else { arNetIds.append(arIds.first()); PipeHDsSys phdsys2; _tcscpy(phdsys2.szSys, phdsys.szSys); phdsys2.eApp = phdsys.eApp; phdsys2.parIds = new AcDbObjectIdArray(arNetIds); int nPos = m_arPipeHDsSys2.append(phdsys2); HTREEITEM hSubItem = m_wndSysTree.InsertItem(phdsys.szSys, SYSENT_IMG, SYSENT_IMG, hItem); m_wndSysTree.SetItemData(hSubItem, (DWORD_PTR)nPos); } } break; } } } m_wndSysTree.SelectItem(hRoot); m_wndSysTree.Expand(hRoot, TVE_EXPAND); } void CXTCGDlg::OnNMTrsItemGeChang(NMHDR *pNMHDR, LRESULT *pResult) { CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt); MapWindowPoints((CWnd *)&m_wndSysTree, &pt, 1); UINT flag = TVHT_ONITEM; HTREEITEM hCurrentItem = m_wndSysTree.HitTest(pt, &flag); if (hCurrentItem) { m_wndSysTree.SelectItem(hCurrentItem); if (flag & (TVHT_ONITEMSTATEICON)) { int nImg = 0, nSelImg = 0; m_wndSysTree.GetItemImage(hCurrentItem, nImg, nSelImg); if (nImg == SYSENT_IMG)//系统单个 { BOOL bCheck = m_wndSysTree.GetCheck(hCurrentItem); if (!bCheck)//即将勾上 { m_wndSysTree.SetCheck(hCurrentItem); //如果本级都勾上 HTREEITEM hSys = m_wndSysTree.GetParentItem(hCurrentItem); BOOL bAllChk = TRUE; HTREEITEM hChild = m_wndSysTree.GetChildItem(hSys); while (hChild != NULL) { if (!m_wndSysTree.GetCheck(hChild)) { bAllChk = FALSE; break; } hChild = m_wndSysTree.GetNextSiblingItem(hChild); } m_wndSysTree.SetCheck(hSys,bAllChk); } else//去除勾上 { m_wndSysTree.SetCheck(hCurrentItem, FALSE); //如果本级都没有勾上 或 有没有勾上, HTREEITEM hSys = m_wndSysTree.GetParentItem(hCurrentItem); BOOL bAllChkNo = TRUE; HTREEITEM hChild = m_wndSysTree.GetChildItem(hSys); while (hChild != NULL) { if (m_wndSysTree.GetCheck(hChild)) { bAllChkNo = FALSE; break; } hChild = m_wndSysTree.GetNextSiblingItem(hChild); } m_wndSysTree.SetCheck(hSys, !bAllChkNo); } } else if (nImg == FOLDER_IMG)//系统节点 { BOOL bCheck = m_wndSysTree.GetCheck(hCurrentItem); if (!bCheck)//即将勾上 { HTREEITEM hChild = m_wndSysTree.GetChildItem(hCurrentItem); while (hChild != NULL) { m_wndSysTree.SetCheck(hChild); hChild = m_wndSysTree.GetNextSiblingItem(hChild); } } else//即将去掉 { acedSSSetFirst(NULL, NULL); HTREEITEM hChild = m_wndSysTree.GetChildItem(hCurrentItem); while (hChild != NULL) { m_wndSysTree.SetCheck(hChild, FALSE); hChild = m_wndSysTree.GetNextSiblingItem(hChild); } } } } } Highlight(); *pResult = 0; } void CXTCGDlg::Highlight() { AcAxDocLock lock; //高亮选择 CString sSys; ads_name ssPick; acedSSAdd(NULL, NULL, ssPick); HTREEITEM hRoot = m_wndSysTree.GetRootItem(); if (hRoot != NULL) { //系统 HTREEITEM hSys = m_wndSysTree.GetChildItem(hRoot); while (hSys != NULL) { HTREEITEM hItem = m_wndSysTree.GetChildItem(hSys); while (hItem != NULL) { if (m_wndSysTree.GetCheck(hItem)) { DWORD_PTR nData = m_wndSysTree.GetItemData(hItem); int i = (int)nData; PipeHDsSys &phdsys = m_arPipeHDsSys2.at(i); sSys = phdsys.szSys; //系统下所有实体 AcDbObjectIdArray arNetIds; arNetIds.append(*phdsys.parIds); ads_name ent; AcDbObjectId id; for (int i = 0; i < arNetIds.length(); i++) { id = arNetIds.at(i); acdbGetAdsName(ent, id); acedSSAdd(ent, ssPick, ssPick); } } hItem = m_wndSysTree.GetNextSiblingItem(hItem); } hSys = m_wndSysTree.GetNextSiblingItem(hSys); } //加入选择集 acedSSSetFirst(ssPick, ssPick); acedSSFree(ssPick); acedUpdateDisplay(); acedPostCommand(_T("regen ")); } } void CXTCGDlg::ShowSys(BOOL bShow) { AcAxDocLock lock; //高亮选择 CString sSys; AcDbObjectIdArray arIds; HTREEITEM hRoot = m_wndSysTree.GetRootItem(); if (hRoot != NULL) { //系统 HTREEITEM hSys = m_wndSysTree.GetChildItem(hRoot); while (hSys != NULL) { HTREEITEM hItem = m_wndSysTree.GetChildItem(hSys); while (hItem != NULL) { if (m_wndSysTree.GetCheck(hItem)) { DWORD_PTR nData = m_wndSysTree.GetItemData(hItem); int i = (int)nData; PipeHDsSys &phdsys = m_arPipeHDsSys2.at(i); sSys = phdsys.szSys; //系统下所有实体 arIds.append(*phdsys.parIds); } hItem = m_wndSysTree.GetNextSiblingItem(hItem); } hSys = m_wndSysTree.GetNextSiblingItem(hSys); } } AcDbEntity *pEnt = NULL; for (int i = 0;i < arIds.length();i++) { if (Acad::eOk == acdbOpenAcDbEntity(pEnt, arIds.at(i), AcDb::kForWrite)) { pEnt->setVisibility(bShow ? AcDb::kVisible : kInvisible); pEnt->close(); } } acedUpdateDisplay(); acedPostCommand(_T("regen ")); } void CXTCGDlg::DeepItemGetCheck(HTREEITEM hParent, CMapStringToPtr& mapSys2Array) { if (hParent != NULL) { HTREEITEM hChild = m_wndSysTree.GetChildItem(hParent); while (hChild != NULL) { if (m_wndSysTree.GetCheck(hChild)) { int nImg = 0, nSelImg = 0; m_wndSysTree.GetItemImage(hChild, nImg, nSelImg); if (nImg == SYSENT_IMG) { DWORD_PTR nData = m_wndSysTree.GetItemData(hChild); int i = (int)nData; if (i > -1 && i < m_arPipeHDsSys2.length()) { PipeHDsSys &phdsys = m_arPipeHDsSys2.at(i); AcDbObjectIdArray *pArray = NULL; if (mapSys2Array.Lookup(phdsys.szSys, (void *&)pArray)) { pArray->append(*phdsys.parIds); } else { pArray = new AcDbObjectIdArray; pArray->append(*phdsys.parIds); mapSys2Array.SetAt(phdsys.szSys, pArray); } } } } DeepItemGetCheck(hChild, mapSys2Array); hChild = m_wndSysTree.GetNextSiblingItem(hChild); } } } //二维系统图 extern void PL_wISO2D(LPCTSTR pszSys,AcDbObjectIdArray& arPipeIds); void CXTCGDlg::OnBnClickedOk() { ShowWindow(SW_MINIMIZE); CMapStringToPtr mapSys2Array; HTREEITEM hRoot = m_wndSysTree.GetRootItem(); if (hRoot != NULL) { DeepItemGetCheck(hRoot, mapSys2Array); } //出图 AcAxDocLock lock; CString sSys; AcDbObjectIdArray *pArray = NULL; for (POSITION ps = mapSys2Array.GetStartPosition();ps != NULL;) { pArray = NULL; mapSys2Array.GetNextAssoc(ps, sSys, (void*&)pArray); PL_wISO2D(sSys, *pArray); } acedUpdateDisplay(); acedPostCommand(_T("regen ")); ShowWindow(SW_NORMAL); } //三维系统图 extern void PL_wISO3D(LPCTSTR pszSys, AcDbObjectIdArray &arPipeIds); void CXTCGDlg::OnBnClickedCancel() { ShowWindow(SW_MINIMIZE); CMapStringToPtr mapSys2Array; HTREEITEM hRoot = m_wndSysTree.GetRootItem(); if (hRoot != NULL) { DeepItemGetCheck(hRoot, mapSys2Array); } //出图 AcAxDocLock lock; CString sSys; AcDbObjectIdArray *pArray = NULL; for (POSITION ps = mapSys2Array.GetStartPosition(); ps != NULL;) { pArray = NULL; mapSys2Array.GetNextAssoc(ps, sSys, (void *&)pArray); PL_wISO3D(sSys, *pArray); } acedUpdateDisplay(); acedPostCommand(_T("regen ")); ShowWindow(SW_NORMAL); } void CXTCGDlg::OnClose() { for (int k = 0; k < m_vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = m_vtPipeHDsSys.at(k); if (phdss.parIds != NULL) { delete phdss.parIds; } } m_vtPipeHDsSys.clear(); for (int i = 0; i < m_arPipeHDsSys2.length(); i++) { PipeHDsSys &phdss = m_arPipeHDsSys2.at(i); if (phdss.parIds != NULL) { delete phdss.parIds; } } m_arPipeHDsSys2.removeAll(); EndDialog(IDOK); } //刷新 void CXTCGDlg::OnBnClickedButton3() { std::vector< PipeHDSys > vtPipeHdSys; std::vector< PipeHDsSys> vtPipeHDsSys; CXTCGDlg::GetPipeHdSys(vtPipeHdSys, vtPipeHDsSys); SetShowSys(vtPipeHdSys); SetAllPipeHDsSys(vtPipeHDsSys); ShowPipeSysList(); } void CXTCGDlg::OnBnClickedButton1() { UpdateData(); if (!m_sFind.IsEmpty()) { m_sFind.TrimRight(); CString sSys; HTREEITEM hRoot = m_wndSysTree.GetRootItem(); if (hRoot != NULL) { //系统 HTREEITEM hSys = m_wndSysTree.GetChildItem(hRoot); while (hSys != NULL) { sSys = m_wndSysTree.GetItemText(hSys); sSys.TrimRight(); if (sSys.CompareNoCase(m_sFind) == 0) { m_wndSysTree.SelectItem(hSys); m_wndSysTree.EnsureVisible(hSys); break; } hSys = m_wndSysTree.GetNextSiblingItem(hSys); } } } } //显示 void CXTCGDlg::OnBnClickedButton4() { ShowSys(TRUE); } //隐藏 void CXTCGDlg::OnBnClickedButton5() { ShowSys(FALSE); } void CXTCGDlg::OnBnClickedButton6() { ShowWindow(SW_HIDE); AcAxDocLock lock; ads_name ent; struct resbuf *pRb = acutBuildList(RTDXF0, DXF_PIPE_SYS_ONLY, 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)) { AecDbEwPipeBase *pP = AecDbEwPipeBase::cast(pEnt); if (pP != NULL) { pP->GetAt(PIPE_SYS, m_sFind); } pEnt->close(); } } ShowWindow(SW_NORMAL); UpdateData(FALSE); } void CXTCGDlg::GetPipeHdSys(std::vector& vtPipeHdSys, std::vector& vtPipeHDsSys) { struct resbuf *pRb = acutBuildList(RTDXF0, DXF_PIPE_SYS_ONLY, 0); PipeHDSys phdsys; PipeHDsSys phdssys; AcDbObjectId id; ads_name ss, ent; int nRes = acedSSGet(_T("A"), NULL, NULL, pRb, ss); acutRelRb(pRb); Adesk::Int32 nLen = 0; CStringList lstSys; if (nRes == RTNORM) { acedSSLength(ss, &nLen); CString sSys; AcDbEntity *pEnt = NULL; for (int i = 0; i < nLen; i++) { acedSSName(ss, i, ent); acdbGetObjectId(id, ent); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead)) { AecDbEwPipe *pPipe = AecDbEwPipe::cast(pEnt); if (pPipe != NULL) { sSys = _T(""); pPipe->GetAt(PIPE_SYS, sSys); if (lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); int nApp = 0; pPipe->GetAt(PIPE_EAPP, nApp); phdsys.eApp = (WPipe::EApp)nApp; vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = (WPipe::EApp)nApp; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } AecDbECableTray *pTray = AecDbECableTray::cast(pEnt); if (pTray != NULL) { sSys = _T(""); pTray->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS, sSys); if (!sSys.IsEmpty() && lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); int nApp = 7; pTray->GetAt(KEY_APP, nApp); phdsys.eApp = (WPipe::EApp)nApp; id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = (WPipe::EApp)nApp; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } AecDbHvacDuct *pDuct = AecDbHvacDuct::cast(pEnt); if (pDuct != NULL) { sSys = _T(""); pDuct->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS, sSys); if (sSys.IsEmpty()) { pDuct->GetAt(HVAC_System, sSys); } if (!sSys.IsEmpty() && lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); phdsys.eApp = WPipe::eDuct; id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = WPipe::eDuct; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } pEnt->close(); } } acedSSFree(ss); } //FIT pRb = acutBuildList(RTDXF0, DXF_FITTING_SYS_ONLY, 0); nRes = acedSSGet(_T("A"), NULL, NULL, pRb, ss); acutRelRb(pRb); if (nRes == RTNORM) { acedSSLength(ss, &nLen); CString sSys; AcDbEntity *pEnt = NULL; for (int i = 0; i < nLen; i++) { acedSSName(ss, i, ent); acdbGetObjectId(id, ent); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead)) { AecDbEwFitting *pFit = AecDbEwFitting::cast(pEnt); if (pFit != NULL) { sSys = _T(""); pFit->GetAt(PIPE_SYS, sSys); if (lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); int nApp = 0; pFit->GetAt(PIPE_EAPP, nApp); phdsys.eApp = (WPipe::EApp)nApp; vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = (WPipe::EApp)nApp; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } AecDbEcFitting *pEFit = AecDbEcFitting::cast(pEnt); if (pEFit != NULL) { sSys = _T(""); pEFit->GetAt(PIPE_SYS, sSys); if (!sSys.IsEmpty() && lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); int nApp = 7; pEFit->GetAt(KEY_APP, nApp); phdsys.eApp = (WPipe::EApp)nApp; id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = (WPipe::EApp)nApp; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } AecDbHvacFitting *pHFit = AecDbHvacFitting::cast(pEnt); if (pHFit != NULL) { sSys = _T(""); pHFit->GetAt(PIPE_SYS, sSys); if (sSys.IsEmpty()) { pHFit->GetAt(HVAC_System, sSys); } if (!sSys.IsEmpty() && lstSys.Find(sSys) == NULL) { lstSys.AddTail(sSys); phdsys.eApp = WPipe::eDuct; id.handle().getIntoAsciiBuffer(phdsys.szHd); _tcscpy(phdsys.szSys, (LPCTSTR)sSys); vtPipeHdSys.push_back(phdsys); _tcscpy(phdssys.szSys, sSys); phdssys.parIds = new AcDbObjectIdArray; phdssys.parIds->append(id); phdssys.eApp = WPipe::eDuct; vtPipeHDsSys.push_back(phdssys); } else { for (int k = 0; k < vtPipeHDsSys.size(); k++) { PipeHDsSys &phdss = vtPipeHDsSys.at(k); if (sSys.CompareNoCase(phdss.szSys) == 0) { phdss.parIds->append(id); break; } } } } pEnt->close(); } } acedSSFree(ss); } }