317 lines
6.8 KiB
C++
317 lines
6.8 KiB
C++
#include "stdafx.h"
|
|
#include "CSBBMDlg.h"
|
|
#include "AecDbEntityBase.h"
|
|
#include "KTTempZoom.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
|
|
#ifndef DXF_EQU
|
|
#define DXF_EQU _T("AEC_DBWEQUIPMENT,AEC_DBXEQUIPMENT,AEC_DBPARAEQUI,INSERT")
|
|
#define DXF_PATH _T("LINE,LWPOLYLINE,AEC_ROADAXISLINE")
|
|
#define DXF_CABLEPATH _T("AEC_ROADAXISLINE")
|
|
#define DXF_ROUT_PATH _T("AEC_DBCABTRY,AEC_ROADAXISLINE")
|
|
#endif
|
|
|
|
#ifndef WM_INPLACEKILLFOCUS
|
|
#define WM_INPLACEKILLFOCUS (WM_USER+0x1234)
|
|
#endif
|
|
|
|
#ifndef WM_ITEMSELECTED
|
|
#define WM_ITEMSELECTED (WM_USER+0x1235)
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CSBBMDlg, CDialog)
|
|
|
|
CSBBMDlg::CSBBMDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(IDD_SBBM_DLG, pParent)
|
|
{
|
|
}
|
|
|
|
CSBBMDlg::~CSBBMDlg()
|
|
{
|
|
}
|
|
|
|
void CSBBMDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndListEqus);
|
|
DDX_Control(pDX, IDCANCEL, m_wndBt1);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSBBMDlg, CDialog)
|
|
ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CSBBMDlg::onAcadKeepFocus)
|
|
ON_MESSAGE(WM_INPLACEKILLFOCUS, &CSBBMDlg::OnEditKillFocus)
|
|
ON_MESSAGE(WM_ITEMSELECTED, &CSBBMDlg::OnItemSelected)
|
|
ON_WM_SIZE()
|
|
END_MESSAGE_MAP()
|
|
|
|
LONG_PTR CSBBMDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR)
|
|
{
|
|
POINT pt;
|
|
::GetCursorPos(&pt);
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
if (!(rect.PtInRect(pt)))
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CSBBMDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CBitmap bmp;
|
|
if (!bmp.LoadBitmap(IDB_BITMAPI))
|
|
{
|
|
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_wndListEqus.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
|
|
m_wndListEqus.SetImageList(&m_imageList, LVSIL_SMALL);
|
|
|
|
m_wndListEqus.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 120, 120);
|
|
m_wndListEqus.InsertColumn(1, _T("名称"), LVCFMT_LEFT, 200, 120);
|
|
m_wndListEqus.InsertColumn(2, _T("编码"), LVCFMT_LEFT, 200, 120);
|
|
m_wndListEqus.InsertColumn(3, _T("句柄"), LVCFMT_LEFT, 80, 120);
|
|
|
|
m_wndListEqus.SetColumnItemData(1, NULL, ET_Edit);
|
|
m_wndListEqus.SetColumnItemData(2, NULL, ET_Edit);
|
|
|
|
GetWindowRect(&m_rcMain);
|
|
m_wndBt1.GetWindowRect(&m_rcBt);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSBBMDlg::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if (cx < m_rcMain.Width() && cy < m_rcMain.Height())
|
|
return;
|
|
|
|
CDialog::OnSize(nType, cx, cy);
|
|
|
|
if (::IsWindow(m_wndListEqus.m_hWnd) &&
|
|
::IsWindow(m_wndBt1.m_hWnd) )
|
|
{
|
|
CRect rc;
|
|
GetClientRect(&rc);
|
|
|
|
rc.DeflateRect(12, 13, 10, m_rcBt.Height() + 10);
|
|
m_wndListEqus.MoveWindow(rc);
|
|
|
|
CRect rcBt;
|
|
rcBt.left = rc.left;
|
|
rcBt.right = rcBt.left + m_rcBt.Width();
|
|
rcBt.top = rc.bottom + 5;
|
|
rcBt.bottom = rcBt.top + m_rcBt.Height();
|
|
m_wndBt1.MoveWindow(rcBt);
|
|
}
|
|
}
|
|
|
|
static void HightEqu(AcDbObjectId& id)
|
|
{
|
|
AcAxDocLock lock;
|
|
{
|
|
//加入选择集
|
|
ads_name ssPick, ent;
|
|
acdbGetAdsName(ent, id);
|
|
acedSSAdd(ent, NULL, ssPick);
|
|
|
|
acedSSSetFirst(ssPick, ssPick);
|
|
acedSSFree(ssPick);
|
|
|
|
AcDbExtents ext;
|
|
AcDbEntity *pEnt = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead))
|
|
{
|
|
pEnt->getGeomExtents(ext);
|
|
pEnt->close();
|
|
}
|
|
|
|
KTTempZoom::arxZoom(asDblArray(ext.minPoint()), asDblArray(ext.maxPoint()));
|
|
|
|
acedUpdateDisplay();
|
|
acedPostCommand(_T("regen "));
|
|
}
|
|
}
|
|
|
|
LRESULT CSBBMDlg::OnItemSelected(WPARAM wp,LPARAM lp)
|
|
{
|
|
NMHDR *pNMHDR = (NMHDR *)lp;
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|
|
|
int nItem = pNMItemActivate->iItem;
|
|
int nSubItem = pNMItemActivate->iSubItem;
|
|
|
|
if (nItem != -1)
|
|
{
|
|
CString sHd = m_wndListEqus.GetItemText(nItem, 3);
|
|
|
|
AcDbHandle hd(sHd);
|
|
AcDbDatabase *pDb = acdbCurDwg();
|
|
if (pDb != NULL)
|
|
{
|
|
AcDbObjectId id;
|
|
if (Acad::eOk == pDb->getAcDbObjectId(id, false, hd))
|
|
{
|
|
HightEqu(id);
|
|
}
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
LRESULT CSBBMDlg::OnEditKillFocus(WPARAM wp, LPARAM lp)
|
|
{
|
|
int nCtrlID = (int)wp;
|
|
if (nCtrlID == m_wndListEqus.GetDlgCtrlID())
|
|
{
|
|
LV_DISPINFO *pDisp = (LV_DISPINFO *)lp;
|
|
|
|
CString sVal = pDisp->item.pszText;
|
|
int nItem = pDisp->item.iItem;
|
|
int nSubItem = pDisp->item.iSubItem;
|
|
|
|
if (nItem != -1)
|
|
{
|
|
CString sHd = m_wndListEqus.GetItemText(nItem, 3);
|
|
AcDbHandle hd(sHd);
|
|
|
|
AcDbDatabase *pDb = acdbCurDwg();
|
|
if (pDb != NULL)
|
|
{
|
|
AcDbObjectId id;
|
|
AcDbEntity *pEnt = NULL;
|
|
if (Acad::eOk == pDb->getAcDbObjectId(id, false, hd))
|
|
{
|
|
AcAxDocLock lock;
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite))
|
|
{
|
|
AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
if (nSubItem == 1)//名称
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->SetAt(KEY_NAME, sVal);
|
|
|
|
if (nSubItem == 2)//编码
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sVal);
|
|
}
|
|
|
|
AcDbBlockReference *pRef = AcDbBlockReference::cast(pEnt);
|
|
if (pEnt != NULL)
|
|
{
|
|
AecDbObjXDataMap xData;
|
|
xData.Read(pRef, KEY_APP);
|
|
|
|
if (nSubItem == 1)//名称
|
|
xData.SetAt(KEY_NAME, sVal);
|
|
|
|
if (nSubItem == 2)//编码
|
|
xData.SetAt(KEY_NO, sVal);
|
|
|
|
xData.Write(pRef, KEY_APP);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
void CSBBMDlg::ShowAllEqus()
|
|
{
|
|
m_wndListEqus.DeleteAllItems();
|
|
struct resbuf *pRb = acutBuildList(RTDXF0, DXF_EQU, 0);
|
|
|
|
ads_name ss, ent;
|
|
int nRes = acedSSGet(_T("X"), NULL, NULL, pRb, ss);
|
|
acutRelRb(pRb);
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
|
|
if (nRes == RTNORM)
|
|
{
|
|
acedSSLength(ss, &nLen);
|
|
|
|
AcAxDocLock lock;
|
|
TCHAR szHd[17];
|
|
AcDbObjectId id;
|
|
AecDbObjXDataMap xData;
|
|
CString sN,sNo, sTemp,sName;
|
|
int nNo = 1, nItem = -1;
|
|
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))
|
|
{
|
|
AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NAME, sName);
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
|
|
AcDbBlockReference *pRef = AcDbBlockReference::cast(pEnt);
|
|
if (pEnt != NULL)
|
|
{
|
|
AecDbObjXDataMap xData;
|
|
if (xData.Read(pRef, KEY_APP))
|
|
{
|
|
xData.GetAt(KEY_NAME, sName);
|
|
xData.GetAt(KEY_NO, sNo);
|
|
}
|
|
}
|
|
|
|
sN.Format(_T("%d"), nNo);
|
|
nItem = m_wndListEqus.InsertItem(nNo, sN, 0);
|
|
|
|
m_wndListEqus.SetItemText(nItem, 1, sName);
|
|
m_wndListEqus.SetItemText(nItem, 2, sNo);
|
|
|
|
id.handle().getIntoAsciiBuffer(szHd);
|
|
m_wndListEqus.SetItemText(nItem, 3, szHd);
|
|
|
|
nNo += 1;
|
|
|
|
pEnt->close();
|
|
}
|
|
}
|
|
acedSSFree(ss);
|
|
}
|
|
}
|
|
|
|
BOOL CSBBMDlg::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
WORD lWord = LOWORD(wParam);
|
|
switch (lWord)
|
|
{
|
|
case IDCLOSE:
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
return TRUE;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return CDialog::OnCommand(wParam, lParam);
|
|
} |