Files
envi-code/SourceCode/Code2026/PipelineCmd/CXTCGDlg.cpp
T
2026-09-28 15:28:50 +08:00

949 lines
21 KiB
C++

#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<PipeHDSys>& vtPipeHdSys, std::vector<PipeHDsSys>& 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);
}
}