949 lines
21 KiB
C++
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);
|
|
}
|
|
} |