1277 lines
30 KiB
C++
1277 lines
30 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "TZJLDlg.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "uiiado.h"
|
|
#include "Base64.h"
|
|
#include <string>
|
|
#include "LJCSDlg.h"
|
|
|
|
#ifndef ID_OBJLIST
|
|
#define ID_OBJLIST 341
|
|
#endif
|
|
|
|
#ifndef WM_ITEM_SEL
|
|
#define WM_ITEM_SEL (WM_USER+0x105)
|
|
#endif
|
|
|
|
#ifndef WM_REFCOBMSG
|
|
#define WM_REFCOBMSG (WM_USER+0x103)
|
|
#endif
|
|
|
|
extern BOOL GetLocalIP(CStringArray& arsIP);
|
|
|
|
IMPLEMENT_DYNAMIC(CTZJLDlg, CDialog)
|
|
|
|
CTZJLDlg::CTZJLDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CTZJLDlg::IDD, pParent)
|
|
{
|
|
m_pMySQLDb = NULL;
|
|
}
|
|
|
|
CTZJLDlg::~CTZJLDlg()
|
|
{
|
|
if (m_pMySQLDb != NULL)
|
|
delete m_pMySQLDb;
|
|
}
|
|
|
|
void CTZJLDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndMsgList);
|
|
DDX_Control(pDX, IDC_STATIC_OBJLIST, m_wndObjFrm);
|
|
DDX_Control(pDX, IDC_LIST2, m_wndDXFList);
|
|
DDX_Control(pDX, IDOK, m_wndBtClose);
|
|
DDX_Control(pDX, IDC_BUTTON3, m_wndBt3);
|
|
DDX_Control(pDX, IDC_BUTTON4, m_wndBt4);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CTZJLDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CTZJLDlg::OnBnClickedButton2)
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CTZJLDlg::OnBnClickedButton3)
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CTZJLDlg::OnBnClickedButton4)
|
|
ON_BN_CLICKED(IDOK, &CTZJLDlg::OnBnClickedOk)
|
|
ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CTZJLDlg::onAcadKeepFocus )
|
|
ON_MESSAGE(WM_ITEM_SEL,&CTZJLDlg::OnItemSelected)
|
|
ON_MESSAGE(WM_REFCOBMSG,&CTZJLDlg::OnRefCobMsg)
|
|
ON_WM_SIZE()
|
|
ON_WM_SIZING()
|
|
END_MESSAGE_MAP()
|
|
|
|
LONG_PTR CTZJLDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR)
|
|
{
|
|
POINT pt;
|
|
::GetCursorPos(&pt);
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
if(!(rect.PtInRect(pt)))
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CTZJLDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CBitmap bmp;
|
|
if (!bmp.LoadBitmap (IDB_BITMAPPRIV))
|
|
{
|
|
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPPRIV);
|
|
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_wndDXFList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
|
|
m_wndDXFList.InsertColumn(0,_T("名称"),LVCFMT_LEFT,120);
|
|
m_wndDXFList.InsertColumn(1,_T("DXF"),LVCFMT_LEFT,160);
|
|
m_wndDXFList.SetImageList(&m_imageList,LVSIL_SMALL);
|
|
|
|
m_wndMsgList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
|
|
m_wndMsgList.InsertColumn(0,_T("发送方"),LVCFMT_LEFT,80);
|
|
m_wndMsgList.InsertColumn(1,_T("发送方地址"),LVCFMT_LEFT,120);
|
|
m_wndMsgList.InsertColumn(2,_T("发送方专业"),LVCFMT_LEFT,80);
|
|
|
|
m_wndMsgList.InsertColumn(3,_T("类型"),LVCFMT_LEFT,80);
|
|
|
|
m_wndMsgList.InsertColumn(4,_T("接收方"),LVCFMT_LEFT,80);
|
|
m_wndMsgList.InsertColumn(5,_T("接收方地址"),LVCFMT_LEFT,120);
|
|
m_wndMsgList.InsertColumn(6,_T("接收方专业"),LVCFMT_LEFT,80);
|
|
|
|
m_wndMsgList.InsertColumn(7,_T("说明"),LVCFMT_LEFT,120);
|
|
m_wndMsgList.InsertColumn(8,_T("GUID"),LVCFMT_LEFT,0);
|
|
m_wndMsgList.InsertColumn(9,_T("时间"),LVCFMT_LEFT,160);
|
|
|
|
m_wndMsgList.SetImageList(&m_imageList,LVSIL_SMALL);
|
|
|
|
CRect rcFrameL;
|
|
m_wndObjFrm.GetWindowRect(rcFrameL);
|
|
ScreenToClient(rcFrameL);
|
|
m_wndObjFrm.ShowWindow(SW_HIDE);
|
|
|
|
m_wndObjList.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP,CRect(0,0,0,0),this,ID_OBJLIST);
|
|
m_wndObjList.SetImageList(&m_imageList, LVSIL_SMALL);
|
|
m_wndObjList.SetImageSize(16,16);
|
|
m_wndObjList.SetDragStyle(FALSE);
|
|
m_wndObjList.SetEditStyle(FALSE);
|
|
m_wndObjList.SetExtendedStyle(0);
|
|
m_wndObjList.ModifyStyleEx(0,WS_EX_CLIENTEDGE);
|
|
m_wndObjList.SetExtendedStyle(LVS_EX_GRIDLINES);
|
|
if(m_wndObjList.GetSafeHwnd() != NULL)
|
|
{
|
|
m_wndObjList.MoveWindow(rcFrameL);
|
|
}
|
|
|
|
InitObjListColumn();
|
|
|
|
if ( !InitADOServer() )
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
ShowMsgList();
|
|
|
|
//测试
|
|
ShowDXFList();
|
|
|
|
GetClientRect(&m_rcMain);
|
|
|
|
CRect rcBt;
|
|
m_wndBtClose.GetWindowRect(&rcBt);
|
|
ScreenToClient(&rcBt);
|
|
|
|
m_nSpaceX = m_rcMain.right - rcBt.right;
|
|
m_nSpaceY = m_rcMain.bottom - rcBt.bottom;
|
|
m_nSpacePropY = m_rcMain.bottom - rcFrameL.bottom;
|
|
|
|
CRect rc;
|
|
GetWindowRect(rc);
|
|
m_szDlgWin.cx = rc.Width();
|
|
m_szDlgWin.cy = rc.Height();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
LRESULT CTZJLDlg::OnRefCobMsg(WPARAM wp,LPARAM lp)
|
|
{
|
|
ShowMsgList();
|
|
return 0L;
|
|
}
|
|
|
|
BOOL CTZJLDlg::InitADOServer()
|
|
{
|
|
m_pMySQLDb = CLJCSDlg::GetSHEarthWormConnect();
|
|
return m_pMySQLDb != NULL ? TRUE : FALSE;
|
|
}
|
|
|
|
void CTZJLDlg::ShowMsgList()
|
|
{
|
|
//NameFr,ProFr,IPFr,SendTo,ProTo,IPTo,MsgType,Rem,DwgFile,GUID,MsgTime
|
|
/*m_wndMsgList.InsertItem(0,_T("张工"));
|
|
m_wndMsgList.SetItemText(0,1,_T("192.168.100.11"));
|
|
m_wndMsgList.SetItemText(0,2,_T("给排水工艺"));
|
|
|
|
m_wndMsgList.SetItemText(0,3,_T("提资"));
|
|
|
|
m_wndMsgList.SetItemText(0,4,_T("何工"));
|
|
m_wndMsgList.SetItemText(0,5,_T("192.168.100.12"));
|
|
m_wndMsgList.SetItemText(0,6,_T("结构"));
|
|
|
|
m_wndMsgList.SetItemText(0,7,_T("备注"));
|
|
m_wndMsgList.SetItemText(0,8,_T("GUID"));
|
|
m_wndMsgList.SetItemText(0,9,_T("2019-11-11 13:25:45"));
|
|
*/
|
|
|
|
m_wndMsgList.DeleteAllItems();
|
|
|
|
CStringArray arsIP;
|
|
GetLocalIP(arsIP);
|
|
|
|
BOOL bHasMsg = FALSE;
|
|
CString sIP;
|
|
|
|
//NameFr,ProFr,IPFr,SendTo,ProTo,IPTo,MsgType,Rem,DwgFile,GUID,MsgTime
|
|
CString sSQL;
|
|
|
|
for (int i = 0;i < arsIP.GetSize();i++)
|
|
{
|
|
sIP = arsIP.GetAt(i);
|
|
sSQL.Format(_T("select NameFr from AEC_Co_Msg where IPFr='%s'"),sIP);
|
|
|
|
if (m_pMySQLDb != NULL)
|
|
{
|
|
bHasMsg = FALSE;
|
|
if (!m_pMySQLDb->IsSelEmpty(sSQL))
|
|
{
|
|
bHasMsg = TRUE;
|
|
|
|
sSQL.Format(_T("select NameFr,IPFr,ProFr,MsgType,SendTo,IPTo,ProTo,Rem,GUID,MsgTime from AEC_Co_Msg where IPFr='%s'"),sIP);
|
|
if (m_pMySQLDb != NULL)
|
|
{
|
|
CUIIValueTable table;
|
|
m_pMySQLDb->GetSelData(sSQL,table);
|
|
|
|
CStringArray arVals;
|
|
for (int j = 0;j < table.GetTableLogicSize();j++)
|
|
{
|
|
arVals.RemoveAll();
|
|
table.GetValueRecord(j,arVals);
|
|
|
|
if (arVals.GetSize() >= 10)
|
|
{
|
|
int nItem = m_wndMsgList.GetItemCount();
|
|
|
|
nItem = m_wndMsgList.InsertItem(nItem,arVals.GetAt(0));
|
|
for (int ii = 1;ii < 10;ii++)
|
|
{
|
|
m_wndMsgList.SetItemText(nItem,ii,arVals.GetAt(ii));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CTZJLDlg::ShowDXFList()
|
|
{
|
|
//例
|
|
m_wndDXFList.InsertItem(0,_T("墙体"),1);
|
|
m_wndDXFList.SetItemText(0,1,_T("AEC_DBWALL"));
|
|
|
|
m_wndDXFList.InsertItem(1,_T("板"),1);
|
|
m_wndDXFList.SetItemText(1,1,_T("AEC_DBSLAB"));
|
|
|
|
m_wndDXFList.InsertItem(2,_T("柱"),1);
|
|
m_wndDXFList.SetItemText(2,1,_T("AEC_DBCOLMN"));
|
|
|
|
m_wndDXFList.InsertItem(3,_T("梁"),1);
|
|
m_wndDXFList.SetItemText(3,1,_T("AEC_DBBEAM"));
|
|
|
|
m_wndDXFList.InsertItem(4,_T("洞口"),1);
|
|
m_wndDXFList.SetItemText(4,1,_T("AEC_X3DPART"));
|
|
|
|
m_wndDXFList.InsertItem(5,_T("基础"),1);
|
|
m_wndDXFList.SetItemText(5,1,_T("AEC_X3DPART"));
|
|
}
|
|
|
|
void CTZJLDlg::InitObjListColumn()
|
|
{
|
|
LPCTSTR lpszCols[] = {_T("名称"),_T("编号"),_T("句柄"),_T("修改"),0};
|
|
int lnColumns[] = {140,140,0,140,0};
|
|
|
|
LV_COLUMN lvColumn;
|
|
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
|
lvColumn.fmt = LVCFMT_LEFT;
|
|
lvColumn.cx = 120;
|
|
|
|
for(int i = 0; lpszCols[i] != NULL;i++)
|
|
{
|
|
lvColumn.cx = lnColumns[i];
|
|
lvColumn.pszText = const_cast<LPTSTR>(lpszCols[i]);
|
|
m_wndObjList.InsertColumn(i,&lvColumn);
|
|
}
|
|
|
|
CList<int,int> listReadOnly;
|
|
listReadOnly.AddHead(0);
|
|
listReadOnly.AddHead(1);
|
|
listReadOnly.AddHead(2);
|
|
listReadOnly.AddHead(3);
|
|
m_wndObjList.SetReadOnlyList(listReadOnly);
|
|
}
|
|
|
|
//下载提资
|
|
void CTZJLDlg::OnBnClickedButton2()
|
|
{
|
|
//从选择的数据库记录提取
|
|
CString sDwgFile;
|
|
LPCTSTR pszBlockName = _T("结构");
|
|
|
|
int nMsg = -1;
|
|
POSITION ps = m_wndMsgList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
nMsg = m_wndMsgList.GetNextSelectedItem(ps);
|
|
}
|
|
if (nMsg == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择一条消息记录下载提资!"));
|
|
return;
|
|
}
|
|
|
|
//专业
|
|
CString sProName = m_wndMsgList.GetItemText(nMsg, 2);
|
|
pszBlockName = (LPCTSTR)sProName;
|
|
|
|
CString sName, sDxf, sFileName, sLocalFile, sLn;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.lst"), sProName);
|
|
sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CStdioFile file2;
|
|
if (file2.Open(sLocalFile, CFile::modeRead | CFile::typeText))
|
|
{
|
|
m_wndDXFList.DeleteAllItems();
|
|
|
|
int nPos = -1, nItem = -1;
|
|
while (file2.ReadString(sLn))
|
|
{
|
|
sLn.TrimRight(_T('\n'));
|
|
nPos = sLn.ReverseFind(_T('@'));
|
|
if (nPos != -1)
|
|
{
|
|
sName = sLn.Mid(0, nPos);
|
|
sDxf = sLn.Mid(nPos + 1);
|
|
|
|
nItem = m_wndDXFList.InsertItem(m_wndDXFList.GetItemCount(), sName);
|
|
m_wndDXFList.SetItemText(nItem, 1, sDxf);
|
|
}
|
|
}
|
|
file2.Close();
|
|
}
|
|
|
|
|
|
//文件名 GUID作为文件名
|
|
CString sDwgFileName = m_wndMsgList.GetItemText(nMsg, 8);
|
|
CString sGUID = sDwgFileName;
|
|
|
|
//下载文件到临时目录
|
|
sDwgFile = FilePath::GetSysDir();
|
|
sDwgFile.MakeLower();
|
|
sDwgFile.Replace(_T("\\sys"), _T("\\temp"));
|
|
sDwgFile += _T("\\");
|
|
sDwgFile += sDwgFileName;
|
|
|
|
//下载文件
|
|
if (!DownLoadDwgFile(nMsg, sDwgFile))
|
|
{
|
|
CString sTip;
|
|
sTip.Format(_T("下载 %s 协同区失败!"), sProName);
|
|
AfxMessageBox(sTip);
|
|
return;
|
|
}
|
|
|
|
//
|
|
CString sBlockName;
|
|
AcDbObjectId id;
|
|
AcDbObjectIdArray arIds;
|
|
Acad::ErrorStatus es;
|
|
AcDbDatabase *pDb = acdbCurDwg();
|
|
AcAxDocLock lock;
|
|
AcDbDatabase db(Adesk::kFalse);
|
|
if (Acad::eOk == (es = db.readDwgFile(sDwgFile)))
|
|
{
|
|
AcDbObjectId idRec;
|
|
AecDbObjXDataMap xDataMap;
|
|
const TCHAR *pszRecName = _T("*U");
|
|
|
|
//1.先找到是否有此协同区
|
|
AcDbBlockTable *pTbl = NULL;
|
|
AcDbBlockTableRecord *pRec = NULL;
|
|
if (Acad::eOk == pDb->getBlockTable(pTbl, AcDb::kForRead))
|
|
{
|
|
BOOL bFind = FALSE;
|
|
AcDbBlockTableIterator *pBIt = NULL;
|
|
pTbl->newIterator(pBIt);
|
|
if (pBIt != NULL)
|
|
{
|
|
for (pBIt->start(); !pBIt->done(); pBIt->step())
|
|
{
|
|
pBIt->getRecordId(idRec);
|
|
if (xDataMap.Read(idRec, _T("COB_SH")))
|
|
{
|
|
xDataMap.GetAt(KEY_NAME, sBlockName);
|
|
if (sBlockName.CompareNoCase(pszBlockName) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
if (Acad::eOk == acdbOpenObject((AcDbObject *&)pRec, idRec, AcDb::kForRead))
|
|
{
|
|
pRec->getName(pszRecName);
|
|
pRec->close();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
delete pBIt;
|
|
}
|
|
pTbl->close();
|
|
}
|
|
|
|
//2.下载或更新协同区
|
|
Adesk::Int16 nVal1 = acdbCurDwg()->useri4();
|
|
pDb->setUseri4(KEY_NOPROTECT);
|
|
|
|
Adesk::Int16 nVal2 = acdbCurDwg()->useri4();
|
|
db.setUseri4(KEY_NOPROTECT);
|
|
|
|
if (Acad::eOk == (es = pDb->insert(idRec, pszRecName, &db)))
|
|
{
|
|
if (Acad::eOk == acdbOpenObject((AcDbObject *&)pRec, idRec, AcDb::kForWrite))
|
|
{
|
|
xDataMap.SetAt(KEY_NAME, pszBlockName);
|
|
xDataMap.Write(pRec, _T("COB_SH"));//上华协同
|
|
|
|
AcDbBlockTableRecordIterator *pIt = NULL;
|
|
pRec->newIterator(pIt);
|
|
|
|
if (pIt != NULL)
|
|
{
|
|
for (pIt->start(); !pIt->done(); pIt->step())
|
|
{
|
|
pIt->getEntityId(id);
|
|
arIds.append(id);
|
|
}
|
|
delete pIt;
|
|
}
|
|
pRec->close();
|
|
}
|
|
}
|
|
|
|
pDb->setUseri4(nVal1);
|
|
db.setUseri4(nVal2);
|
|
}
|
|
|
|
//3.显示协同区内容到列表
|
|
Adesk::Int32 nLen = arIds.length();
|
|
|
|
//fe _T("AEC_EWFIT,AEC_XXXDOGHS")
|
|
CString sText, sClasDxf = _T("");
|
|
for (int i = 0; i < m_wndDXFList.GetItemCount(); i++)
|
|
{
|
|
sText = m_wndDXFList.GetItemText(i, 1);
|
|
sClasDxf += sText;
|
|
sClasDxf += _T(",");
|
|
}
|
|
sClasDxf.TrimRight(_T(','));
|
|
|
|
if (!arIds.isEmpty())
|
|
{
|
|
m_mapNameToRoot.RemoveAll();
|
|
m_mapNoToItem.RemoveAll();
|
|
m_wndObjList.DeleteAll();
|
|
//m_arLastPick.removeAll();
|
|
|
|
m_sDxfNames = _T("");
|
|
|
|
CTreeItem *pRoot = NULL;
|
|
if (nLen > 0)
|
|
{
|
|
CItemInfo *lpRoot = new CItemInfo();
|
|
lpRoot->SetImage(4);
|
|
lpRoot->SetItemText(_T("提资构件"));
|
|
lpRoot->AddSubItemText("");
|
|
lpRoot->AddSubItemText("");
|
|
lpRoot->AddSubItemText("");
|
|
pRoot = m_wndObjList.InsertRootItem(lpRoot);
|
|
m_mapNameToRoot.SetAt(_T("提资构件"), pRoot);
|
|
}
|
|
|
|
AcDbObjectId id;
|
|
AcDbEntity *pEnt = NULL;
|
|
LPCTSTR pszDXF = NULL;
|
|
TCHAR szHanele[33];
|
|
CString sNo, sEntName;
|
|
memset(szHanele, 0, sizeof(TCHAR) * 33);
|
|
|
|
for (int i = 0; i < arIds.length(); i++)
|
|
{
|
|
id = arIds.at(i);
|
|
sNo = _T("");
|
|
sEntName = _T("");
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead))
|
|
{
|
|
pszDXF = pEnt->isA()->dxfName();
|
|
|
|
AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
|
|
if (sNo.IsEmpty())
|
|
{
|
|
AecDbEwFitting *pFit = AecDbEwFitting::cast(pEntBase);
|
|
if (pFit != NULL)
|
|
{
|
|
sNo = pFit->GetGUID();
|
|
}
|
|
}
|
|
}
|
|
|
|
AecDbCurveBase *pCurBase = AecDbCurveBase::cast(pEnt);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
|
|
if (sNo.IsEmpty())
|
|
{
|
|
AecDbEwPipeBase *pPipe = AecDbEwPipeBase::cast(pCurBase);
|
|
if (pPipe != NULL)
|
|
{
|
|
sNo = pPipe->GetGUID();
|
|
}
|
|
}
|
|
}
|
|
|
|
AecDbX3dPartEntity *pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
if (pPart != NULL)
|
|
{
|
|
sEntName = pPart->GetName();
|
|
}
|
|
|
|
id.handle().getIntoAsciiBuffer(szHanele);
|
|
|
|
if (sNo.IsEmpty()) sNo = szHanele;
|
|
AddObjectList(pszDXF, sNo, szHanele, sEntName);
|
|
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
int nScroll = 0;
|
|
m_wndObjList.ExpandAll(pRoot, nScroll);
|
|
m_sDxfNames.TrimRight(_T(","));
|
|
}
|
|
|
|
//然后设置pickup状态
|
|
//CString sSQL;
|
|
//sSQL.Format(_T("update AEC_Co_Msg set pickup=1 where GUID='%s'"), sGUID);
|
|
//if (m_pMySQLDb != NULL)
|
|
//{
|
|
// m_pMySQLDb->ExecuteSQL(sSQL);
|
|
//}
|
|
|
|
CFileFind find;
|
|
if (find.FindFile(sDwgFile))
|
|
{
|
|
::DeleteFile(sDwgFile);
|
|
}
|
|
}
|
|
|
|
void CTZJLDlg::AddObjectList(LPCTSTR pszDXF, LPCTSTR pszNo, LPCTSTR pszHanele, LPCTSTR pszEntName)
|
|
{
|
|
CTreeItem *pRoot = NULL;
|
|
m_mapNameToRoot.Lookup(_T("提资构件"), (void *&)pRoot);
|
|
|
|
CString sDxf, sName = _T("");
|
|
for (int i = 0; i < m_wndDXFList.GetItemCount(); i++)
|
|
{
|
|
sDxf = m_wndDXFList.GetItemText(i, 1);
|
|
if (sDxf.CompareNoCase(pszDXF) == 0)
|
|
{
|
|
sName = m_wndDXFList.GetItemText(i, 0);
|
|
if (pszEntName != NULL && _tcslen(pszEntName) > 0)
|
|
{
|
|
sName = pszEntName;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (sName.IsEmpty()) //找到
|
|
{
|
|
sName = pszDXF;
|
|
}
|
|
|
|
if (!sName.IsEmpty()) //找到
|
|
{
|
|
BOOL bFind = false;
|
|
CItemInfo *lpItem = NULL;
|
|
CItemInfo *lpParent = NULL;
|
|
CTreeItem *pParent = NULL;
|
|
|
|
//墙体目录
|
|
bFind = m_mapNameToRoot.Lookup(sName, (void *&)pParent);
|
|
if (!bFind)
|
|
{
|
|
lpParent = new CItemInfo();
|
|
lpParent->SetItemText(sName);
|
|
lpParent->SetImage(1);
|
|
lpParent->AddSubItemText(_T(""));
|
|
lpParent->AddSubItemText(_T(""));
|
|
lpParent->AddSubItemText(_T(""));
|
|
pParent = m_wndObjList.InsertItem(pRoot, lpParent);
|
|
m_mapNameToRoot.SetAt(sName, pParent);
|
|
}
|
|
|
|
//墙体实体
|
|
if (pParent != NULL)
|
|
{
|
|
lpItem = new CItemInfo();
|
|
lpItem->SetItemText(sName);
|
|
lpItem->AddSubItemText(pszNo);
|
|
lpItem->AddSubItemText(pszHanele);
|
|
lpItem->AddSubItemText(_T(""));
|
|
lpItem->SetImage(2);
|
|
|
|
CTreeItem *pItem = m_wndObjList.InsertItem(pParent, lpItem);
|
|
m_mapNoToItem.SetAt(pszNo, pItem);
|
|
|
|
if (m_sDxfNames.Find(sDxf) == -1)
|
|
{
|
|
m_sDxfNames += _T(",");
|
|
m_sDxfNames += sDxf;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//对比
|
|
void CTZJLDlg::OnBnClickedButton3()
|
|
{
|
|
AcAxDocLock lock;
|
|
//从当前库中比对
|
|
|
|
int nRes = 0, nDiff = 0;
|
|
COLORREF crRed = RGB(255, 0, 0);
|
|
COLORREF crGreen = RGB(0, 255, 0);
|
|
|
|
CString sNo;
|
|
ads_name ss, ent;
|
|
struct resbuf *pRb = acutBuildList(RTDXF0, (const TCHAR *)m_sDxfNames, 0);
|
|
if (pRb != NULL)
|
|
{
|
|
acedSSGet(_T("A"), NULL, NULL, pRb, ss);
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
acedSSLength(ss, &nLen);
|
|
|
|
acedSetStatusBarProgressMeter(_T("正在比较,请稍后..."), 0, nLen);
|
|
|
|
AcDbObjectId id;
|
|
AcDbObjectIdArray arThis;
|
|
AcDbObjectIdArray arStandIn;//替身
|
|
CStringList lstStandInNo;
|
|
|
|
AcDbEntity *pEnt = NULL;
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
acedSetStatusBarProgressMeterPos(i);
|
|
|
|
acedSSName(ss, i, ent);
|
|
acdbGetObjectId(id, ent);
|
|
arThis.append(id);
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead))
|
|
{
|
|
sNo = _T("");
|
|
AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
|
|
AecDbCurveBase *pCurBase = AecDbCurveBase::cast(pEnt);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
|
|
AecDbX3dPartEntity *pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
if (pPart != NULL)
|
|
{
|
|
pPart->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
|
|
if (!sNo.IsEmpty())
|
|
{
|
|
CTreeItem *pItem = NULL;
|
|
m_mapNoToItem.Lookup(sNo, (void *&)pItem);
|
|
|
|
if (pItem != NULL)
|
|
{
|
|
AcDbObjectId idOther;
|
|
CItemInfo *pInf = m_wndObjList.GetData(pItem);
|
|
if (pInf != NULL && pInf->GetItemCount() > 1)
|
|
{
|
|
CString sHandle = pInf->GetSubItem(1);
|
|
AcDbHandle hd((const TCHAR *)sHandle);
|
|
if (sHandle.CompareNoCase(_T("3528")) == 0)
|
|
{
|
|
int nnn = 0;
|
|
}
|
|
if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(idOther, false, hd))
|
|
{
|
|
if (idOther == id)
|
|
{
|
|
pEnt->close();
|
|
continue;
|
|
}
|
|
|
|
arStandIn.append(idOther);
|
|
lstStandInNo.AddTail(sNo);
|
|
|
|
//打开对象比较
|
|
AcDbEntity *pEntT = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEntT, idOther, AcDb::kForRead))
|
|
{
|
|
nRes = CompareEnt(pEnt, pEntT);
|
|
|
|
if (nRes == 0)//相同
|
|
{
|
|
pInf->SetSubItemText(2, _T("相同"), RGB(255, 255, 255));
|
|
}
|
|
else if (nRes > 0)
|
|
{
|
|
pInf->SetSubItemText(2, _T("不同"), crRed);
|
|
nDiff += 1;
|
|
}
|
|
else
|
|
{
|
|
pInf->SetSubItemText(2, _T(""));
|
|
}
|
|
pEntT->close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
acedSSFree(ss);
|
|
acutRelRb(pRb);
|
|
acedRestoreStatusBar();
|
|
|
|
//新增加的设置为绿色
|
|
AcDbObjectId idTmp;
|
|
CTreeItem *pItem = NULL;
|
|
CMapStringToPtr mapNoToItem;
|
|
for (POSITION ps = m_mapNoToItem.GetStartPosition(); ps != NULL;)
|
|
{
|
|
m_mapNoToItem.GetNextAssoc(ps, sNo, (void *&)pItem);
|
|
if (lstStandInNo.Find(sNo) == NULL)//没有找到,为新加入的
|
|
{
|
|
CItemInfo *pInf = m_wndObjList.GetData(pItem);
|
|
if (pInf != NULL && pInf->GetItemCount() > 1)
|
|
{
|
|
//并且是Aec实体
|
|
CString sHandle = pInf->GetSubItem(1);
|
|
AcDbHandle hd((const TCHAR *)sHandle);
|
|
|
|
if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(idTmp, false, hd))
|
|
{
|
|
AcDbEntity *pEntT = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEntT, idTmp, AcDb::kForRead))
|
|
{
|
|
AecDbEntityBase *pAecEnt = AecDbEntityBase::cast(pEntT);
|
|
AecDbCurveBase *pAecCrv = AecDbCurveBase::cast(pEntT);
|
|
|
|
if (pAecEnt != NULL || pAecCrv != NULL)
|
|
{
|
|
pInf->SetSubItemText(2, _T("新增"), crGreen);
|
|
}
|
|
pEntT->close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
m_wndObjList.Invalidate();
|
|
m_wndObjList.RedrawWindow();
|
|
|
|
if (nDiff > 0)
|
|
{
|
|
acutPrintf(_T("\n比对完毕!共发现 %d 个构件模型不同!"));
|
|
acutPrintf(_T("\n不同的构件在列表中以红色显示!"));
|
|
}
|
|
}
|
|
|
|
int CTZJLDlg::CompareEnt(AcDbEntity* pEnt,AcDbEntity* pEntT)
|
|
{
|
|
int nEqu = -1;
|
|
if (pEnt != NULL && pEntT != NULL)
|
|
{
|
|
if ( _tcscmp( pEnt->isA()->dxfName(),pEntT->isA()->dxfName()) == 0)
|
|
{
|
|
//详细比较
|
|
|
|
//墙
|
|
AecDbXWall *pWallThis = AecDbXWall::cast(pEnt);
|
|
AecDbXWall *pWallThat = AecDbXWall::cast(pEntT);
|
|
if (pWallThis != NULL && pWallThat != NULL)
|
|
{
|
|
nEqu = pWallThis->ComparedTo(pWallThat);
|
|
}
|
|
|
|
//梁
|
|
AecDbBeam *pBeamThis = AecDbBeam::cast(pEnt);
|
|
AecDbBeam *pBeamThat = AecDbBeam::cast(pEntT);
|
|
if (pBeamThis != NULL && pBeamThat != NULL)
|
|
{
|
|
nEqu = pBeamThis->ComparedTo(pBeamThat);
|
|
}
|
|
|
|
//板
|
|
AecDbXSlab *pSlabThis = AecDbXSlab::cast(pEnt);
|
|
AecDbXSlab *pSlabThat = AecDbXSlab::cast(pEntT);
|
|
if (pSlabThis != NULL && pSlabThat != NULL)
|
|
{
|
|
nEqu = pSlabThis->ComparedTo(pSlabThat);
|
|
}
|
|
|
|
//柱子
|
|
AecDbColumn *pColThis = AecDbColumn::cast(pEnt);
|
|
AecDbColumn *pColThat = AecDbColumn::cast(pEntT);
|
|
if (pColThis != NULL && pColThat != NULL)
|
|
{
|
|
nEqu = pColThis->ComparedTo(pColThat);
|
|
}
|
|
|
|
//洞口
|
|
AecDbX3dPartEntity *pPartThis = AecDbX3dPartEntity::cast(pEnt);
|
|
AecDbX3dPartEntity *pPartThat = AecDbX3dPartEntity::cast(pEntT);
|
|
if (pPartThis != NULL && pPartThat != NULL)
|
|
{
|
|
nEqu = pPartThis->ComparedTo(pPartThat);
|
|
}
|
|
|
|
//管线对管线
|
|
AecDbEwPipe *pPipeThis = AecDbEwPipe::cast(pEnt);
|
|
AecDbEwPipe *pPipeThat = AecDbEwPipe::cast(pEntT);
|
|
if (pPipeThis != NULL && pPipeThat != NULL)
|
|
{
|
|
nEqu = pPipeThis->ComparedTo(pPipeThat);
|
|
}
|
|
|
|
AecDbEwFitting *pEFitThis = AecDbEwFitting::cast(pEnt);
|
|
AecDbEwFitting *pEFitThat = AecDbEwFitting::cast(pEntT);
|
|
if (pEFitThis != NULL && pEFitThat != NULL)
|
|
{
|
|
nEqu = pEFitThis->ComparedTo(pEFitThat);
|
|
}
|
|
|
|
AecDbEwEquipment *pEEquThis = AecDbEwEquipment::cast(pEnt);
|
|
AecDbEwEquipment *pEEquThat = AecDbEwEquipment::cast(pEntT);
|
|
if (pEEquThis != NULL && pEEquThat != NULL)
|
|
{
|
|
nEqu = pEEquThis->ComparedTo(pEEquThat);
|
|
}
|
|
|
|
//风管对风管
|
|
AecDbHvacDuct *pHPipeThis = AecDbHvacDuct::cast(pEnt);
|
|
AecDbHvacDuct *pHPipeThat = AecDbHvacDuct::cast(pEntT);
|
|
if (pHPipeThis != NULL && pHPipeThat != NULL)
|
|
{
|
|
nEqu = pHPipeThis->ComparedTo(pHPipeThat);
|
|
}
|
|
|
|
AecDbHvacFitting *pHFithis = AecDbHvacFitting::cast(pEnt);
|
|
AecDbHvacFitting *pHFiThat = AecDbHvacFitting::cast(pEntT);
|
|
if (pHFithis != NULL && pHFiThat != NULL)
|
|
{
|
|
nEqu = pHFithis->ComparedTo(pHFiThat);
|
|
}
|
|
|
|
//桥架对桥架
|
|
AecDbECableTray *pECPipeThis = AecDbECableTray::cast(pEnt);
|
|
AecDbECableTray *pECPipeThat = AecDbECableTray::cast(pEntT);
|
|
if (pECPipeThis != NULL && pECPipeThat != NULL)
|
|
{
|
|
nEqu = pECPipeThis->ComparedTo(pECPipeThat);
|
|
}
|
|
|
|
AecDbEcFitting *pECFithis = AecDbEcFitting::cast(pEnt);
|
|
AecDbEcFitting *pECFiThat = AecDbEcFitting::cast(pEntT);
|
|
if (pECFithis != NULL && pECFiThat != NULL)
|
|
{
|
|
nEqu = pECFithis->ComparedTo(pECFiThat);
|
|
}
|
|
|
|
//素砼??
|
|
}
|
|
}
|
|
return nEqu;
|
|
}
|
|
|
|
//替换
|
|
void CTZJLDlg::OnBnClickedButton4()
|
|
{
|
|
int nRes = AfxMessageBox(_T("确认要替换吗?"), MB_YESNO);
|
|
if (nRes == IDNO)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcAxDocLock lock;
|
|
AcDbObjectId id;
|
|
CString sHandle;
|
|
CString sDxf, sNo, sNoT;
|
|
|
|
//先清理上次比对的临时对象
|
|
AcDbEntity *pEntLast = NULL;
|
|
/*if (m_idZObj != AcDbObjectId::kNull)
|
|
{
|
|
if (Acad::eOk == (es = acdbOpenAcDbEntity(pEntLast, m_idZObj, AcDb::kForWrite)))
|
|
{
|
|
pEntLast->erase();
|
|
pEntLast->close();
|
|
m_idZObj.setNull();
|
|
}
|
|
else
|
|
{
|
|
acutPrintf(_T("\nes = %d"), es);
|
|
}
|
|
}*/
|
|
|
|
//1.提取协同区id
|
|
int nSel = m_wndObjList.GetSelectedItem();
|
|
if (nSel != -1)
|
|
{
|
|
CTreeItem *pItem = m_wndObjList.GetTreeItem(nSel);
|
|
if (pItem != NULL)
|
|
{
|
|
CItemInfo *pInf = m_wndObjList.GetData(pItem);
|
|
if (pInf != NULL)
|
|
{
|
|
sHandle = pInf->GetSubItem(1);
|
|
|
|
AcDbHandle hd((const TCHAR *)sHandle);
|
|
if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd))
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForRead))
|
|
{
|
|
sDxf = pEnt->isA()->dxfName();
|
|
|
|
AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
|
|
AecDbCurveBase *pCurBase = AecDbCurveBase::cast(pEnt);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNo);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
|
|
//2.找到图中对应的
|
|
bool bFind = false;
|
|
ads_name ss, ent;
|
|
struct resbuf *pRb = acutBuildList(RTDXF0, (const TCHAR *)sDxf, 0);
|
|
if (pRb != NULL)
|
|
{
|
|
nRes = acedSSGet(_T("A"), NULL, NULL, pRb, ss);//
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
acedSSLength(ss, &nLen);
|
|
|
|
AcDbEntity *pEntT = NULL;
|
|
|
|
AcDbObjectId idT;
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
acedSSName(ss, i, ent);
|
|
acdbGetObjectId(idT, ent);
|
|
|
|
if (idT == id)//2.1排除协同区的
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEntT, idT, AcDb::kForRead))
|
|
{
|
|
AecDbEntityBase *pEntBaseT = AecDbEntityBase::cast(pEntT);
|
|
if (pEntBaseT != NULL)
|
|
{
|
|
pEntBaseT->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNoT);
|
|
}
|
|
|
|
AecDbCurveBase *pCurBaseT = AecDbCurveBase::cast(pEntT);
|
|
if (pCurBaseT != NULL)
|
|
{
|
|
pCurBaseT->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO, sNoT);
|
|
}
|
|
|
|
if (sNo.CompareNoCase(sNoT) == 0)//找到
|
|
{
|
|
//2.2删除图中的目标
|
|
pEntT->upgradeOpen();
|
|
pEntT->erase();
|
|
pEntT->downgradeOpen();
|
|
bFind = true;
|
|
}
|
|
pEntT->close();
|
|
|
|
if (bFind)
|
|
break;
|
|
}
|
|
}
|
|
acedSSFree(ss);
|
|
}
|
|
|
|
//3.添加协同区的对象
|
|
AcDbObjectId idMoelSpace;
|
|
AcDbBlockTable *pTable = NULL;
|
|
if (Acad::eOk == acdbCurDwg()->getBlockTable(pTable, AcDb::kForRead))
|
|
{
|
|
if (Acad::eOk == pTable->getAt(ACDB_MODEL_SPACE, idMoelSpace))
|
|
{
|
|
}
|
|
pTable->close();
|
|
}
|
|
|
|
if (bFind)
|
|
{
|
|
AcDbObjectIdArray arIds;
|
|
arIds.append(id);
|
|
AcDbIdMapping pIdMap;
|
|
|
|
Adesk::Int16 nVal = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);
|
|
|
|
if (Acad::eOk == acdbCurDwg()->deepCloneObjects(arIds, idMoelSpace, pIdMap))
|
|
{
|
|
//3.1删除协同区的源对象
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite))
|
|
{
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
}
|
|
|
|
//3.2删除协同区的列表记录
|
|
m_wndObjList.DeleteItemEx(pItem, nSel);
|
|
m_mapNoToItem.RemoveKey(sNo);
|
|
}
|
|
|
|
acdbCurDwg()->setUseri4(nVal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CTZJLDlg::OnBnClickedOk()
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
}
|
|
|
|
LRESULT CTZJLDlg::OnItemSelected(WPARAM wp,LPARAM lp)
|
|
{
|
|
CPoint* pptPos = (CPoint*)lp;
|
|
int nSel = (int)pptPos->x;
|
|
int nSubItem = (int)pptPos->y;
|
|
CString sHandle;
|
|
|
|
CTreeItem* pItem = m_wndObjList.GetTreeItem(nSel);
|
|
if (pItem != NULL)
|
|
{
|
|
CItemInfo* pInf = m_wndObjList.GetData(pItem);
|
|
if (pInf != NULL)
|
|
{
|
|
sHandle = pInf->GetSubItem(1);
|
|
if (sHandle.IsEmpty())
|
|
{
|
|
return 0L;
|
|
}
|
|
|
|
AcAxDocLock lock;
|
|
CString sNo,sDxf;
|
|
AcDbHandle hd((const TCHAR*)sHandle);
|
|
AcDbObjectId id;
|
|
|
|
if ( Acad::eOk == acdbCurDwg()->getAcDbObjectId(id,false,hd) )
|
|
{
|
|
//按照编号找到对应的实体,加亮选择
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
sDxf = pEnt->isA()->dxfName();
|
|
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEnt);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo);
|
|
}
|
|
|
|
pEnt->close();
|
|
}
|
|
|
|
//选择当前
|
|
if ( !sNo.IsEmpty() && !sDxf.IsEmpty() )
|
|
{
|
|
ads_name ss,ent;
|
|
struct resbuf* pRb = acutBuildList(RTDXF0, sDxf, 0);
|
|
if (pRb != NULL)
|
|
{
|
|
acedSSGet(_T("A"),NULL,NULL,pRb,ss);
|
|
acutRelRb(pRb);
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
acedSSLength(ss,&nLen);
|
|
|
|
CString sNo2;
|
|
AcDbObjectId idT;
|
|
AcDbEntity* pEntT = NULL;
|
|
BOOL bFind = FALSE;
|
|
|
|
for (int i = 0;i < nLen;i++)
|
|
{
|
|
acedSSName(ss,i,ent);
|
|
acdbGetObjectId(idT,ent);
|
|
|
|
if (idT == id)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,idT,AcDb::kForRead))
|
|
{
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEntT);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo2);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEntT);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo2);
|
|
}
|
|
pEntT->close();
|
|
}
|
|
|
|
if (sNo2.CompareNoCase(sNo) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
acedSSFree(ss);
|
|
|
|
if (bFind)
|
|
{
|
|
//加亮
|
|
ads_name ssPick;
|
|
acdbGetAdsName(ent, idT);
|
|
acedSSAdd(ent, NULL, ssPick);
|
|
|
|
acedSSSetFirst(ssPick, ssPick);
|
|
acedSSFree(ssPick);
|
|
|
|
acedUpdateDisplay();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
|
|
BOOL CTZJLDlg::DownLoadDwgFile(int nItem,CString& sDwgFile)
|
|
{
|
|
CString sGUID = m_wndMsgList.GetItemText(nItem,8);
|
|
CString sSQL;
|
|
|
|
sSQL.Format(_T("select DwgFile from AEC_Co_Msg where GUID='%s'"),sGUID);
|
|
if ( m_pMySQLDb->GetSelBlob(sSQL,sDwgFile) > 0)
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void CTZJLDlg::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if (cx < m_rcMain.Width() || cy < m_rcMain.Height())
|
|
return;
|
|
|
|
CDialog::OnSize(nType, cx, cy);
|
|
if (nType == -1) return;
|
|
|
|
CRect rc;
|
|
GetClientRect(&rc);
|
|
|
|
int nH = 0,nW = 0;
|
|
CRect rect;
|
|
|
|
if (::IsWindow(m_wndMsgList.m_hWnd))
|
|
{
|
|
m_wndMsgList.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
rect.right = rc.right - m_nSpaceX;
|
|
m_wndMsgList.MoveWindow(rect);
|
|
}
|
|
|
|
if (::IsWindow(m_wndObjList.m_hWnd))
|
|
{
|
|
m_wndObjList.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
rect.right = rc.right - m_nSpaceX;
|
|
rect.bottom = rc.bottom - m_nSpacePropY;
|
|
m_wndObjList.MoveWindow(rect);
|
|
}
|
|
|
|
if (::IsWindow(m_wndBt3.m_hWnd) &&
|
|
::IsWindow(m_wndBt4.m_hWnd) &&
|
|
::IsWindow(m_wndBtClose.m_hWnd) )
|
|
{
|
|
m_wndBt3.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndBt3.MoveWindow(rect);
|
|
|
|
m_wndBt4.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndBt4.MoveWindow(rect);
|
|
|
|
m_wndBtClose.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
nW = rect.Width();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
rect.right = rc.right - m_nSpaceX;
|
|
rect.left = rect.right - nW;
|
|
m_wndBtClose.MoveWindow(rect);
|
|
}
|
|
}
|
|
|
|
void CTZJLDlg::OnSizing(UINT fwSide, LPRECT pRect)
|
|
{
|
|
int nWidth = pRect->right - pRect->left;
|
|
int nHeight= pRect->bottom- pRect->top;
|
|
|
|
if(nWidth < m_rcMain.Width())
|
|
{
|
|
pRect->right = pRect->left + m_szDlgWin.cx;
|
|
}
|
|
|
|
if(nHeight < m_rcMain.Height())
|
|
{
|
|
pRect->bottom = pRect->top + m_szDlgWin.cy;
|
|
}
|
|
CDialog::OnSizing(fwSide, pRect);
|
|
}
|