3171 lines
76 KiB
C++
3171 lines
76 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "JSTZDlg.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "uiiado.h"
|
|
#include "Base64.h"
|
|
#include <string>
|
|
#include "LJCSDlg.h"
|
|
#include "AecDbEwFitting.h"
|
|
#include "AecDbEwPipeBase.h"
|
|
|
|
#ifndef ID_OBJLIST
|
|
#define ID_OBJLIST 341
|
|
#endif
|
|
|
|
#ifndef ID_TIMEQUERY
|
|
#define ID_TIMEQUERY 2368
|
|
#endif
|
|
|
|
#ifndef WM_ITEM_SEL
|
|
#define WM_ITEM_SEL (WM_USER+0x105)
|
|
#endif
|
|
|
|
#ifndef WM_REFCOBMSG
|
|
#define WM_REFCOBMSG (WM_USER+0x103)
|
|
#endif
|
|
|
|
static const Adesk::UInt16 kRed = 1;
|
|
static const Adesk::UInt16 kYellow = 2;
|
|
static const Adesk::UInt16 kGreen = 3;
|
|
|
|
extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt,AcDbDatabase* pDb = NULL,bool bClose = true);
|
|
|
|
IMPLEMENT_DYNAMIC(CJSTZDlg, CDialog)
|
|
|
|
CJSTZDlg::CJSTZDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CJSTZDlg::IDD, pParent)
|
|
, m_bZObj(FALSE)
|
|
, m_bTObj(FALSE)
|
|
{
|
|
m_pMySQLDb = NULL;
|
|
}
|
|
|
|
CJSTZDlg::~CJSTZDlg()
|
|
{
|
|
if (m_pMySQLDb != NULL)
|
|
delete m_pMySQLDb;
|
|
}
|
|
|
|
void CJSTZDlg::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, IDC_STATIC_OBJLIST2, m_wndProperSta);
|
|
DDX_Check(pDX, IDC_CHECK2, m_bZObj);
|
|
DDX_Check(pDX, IDC_CHECK3, m_bTObj);
|
|
DDX_Control(pDX, IDC_STATIC_SPLIT, m_wndStaicYSplit);
|
|
DDX_Control(pDX, IDOK, m_wndBtClose);
|
|
DDX_Control(pDX, IDC_BUTTON5, m_wndBt5);
|
|
DDX_Control(pDX, IDC_BUTTON6, m_wndBt6);
|
|
DDX_Control(pDX, IDC_BUTTON4, m_wndBt4);
|
|
DDX_Control(pDX, IDC_BUTTON3, m_wndBt3);
|
|
DDX_Control(pDX, IDC_STATIC_NEWT, m_wndStaNewT);
|
|
DDX_Control(pDX, IDC_STATIC_NEW, m_wndStaNew);
|
|
DDX_Control(pDX, IDC_STATIC_DIFT, m_wndStaDif);
|
|
DDX_Control(pDX, IDC_STATIC_DIFF, m_wndStaDifT);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CJSTZDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CJSTZDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CJSTZDlg::OnBnClickedButton2)
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CJSTZDlg::OnBnClickedButton3)
|
|
ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CJSTZDlg::onAcadKeepFocus )
|
|
ON_BN_CLICKED(IDC_BUTTON5, &CJSTZDlg::OnBnClickedButton5)
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CJSTZDlg::OnBnClickedButton4)
|
|
ON_BN_CLICKED(IDC_BUTTON6, &CJSTZDlg::OnBnClickedButton6)
|
|
ON_BN_CLICKED(IDC_BUTTON7, &CJSTZDlg::OnBnClickedButton7)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CJSTZDlg::OnBnClickedButton1)
|
|
ON_MESSAGE(WM_ITEM_SEL,&CJSTZDlg::OnItemSelected)
|
|
ON_MESSAGE(WM_REFCOBMSG,&CJSTZDlg::OnRefCobMsg)
|
|
ON_WM_DESTROY()
|
|
ON_WM_TIMER()
|
|
ON_BN_CLICKED(IDC_BUTTON8, &CJSTZDlg::OnBnClickedButton8)
|
|
ON_BN_CLICKED(IDC_CHECK2, &CJSTZDlg::OnBnClickedCheck2)
|
|
ON_BN_CLICKED(IDC_CHECK3, &CJSTZDlg::OnBnClickedCheck3)
|
|
ON_WM_CTLCOLOR()
|
|
ON_WM_SIZE()
|
|
ON_WM_SIZING()
|
|
END_MESSAGE_MAP()
|
|
|
|
LONG_PTR CJSTZDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR)
|
|
{
|
|
POINT pt;
|
|
::GetCursorPos(&pt);
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
if(!(rect.PtInRect(pt)))
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CJSTZDlg::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);
|
|
|
|
//obj list
|
|
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);
|
|
}
|
|
|
|
//proper
|
|
m_wndProperSta.GetWindowRect(rcFrameL);
|
|
ScreenToClient(rcFrameL);
|
|
m_wndProperSta.ShowWindow(SW_HIDE);
|
|
|
|
m_wndProperList.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP,CRect(0,0,0,0),this,ID_OBJLIST);
|
|
m_wndProperList.SetImageList(&m_imageList, LVSIL_SMALL);
|
|
m_wndProperList.SetImageSize(16,16);
|
|
m_wndProperList.SetDragStyle(FALSE);
|
|
m_wndProperList.SetEditStyle(FALSE);
|
|
m_wndProperList.SetExtendedStyle(0);
|
|
m_wndProperList.ModifyStyleEx(0,WS_EX_CLIENTEDGE);
|
|
m_wndProperList.SetExtendedStyle(LVS_EX_GRIDLINES);
|
|
if(m_wndProperList.GetSafeHwnd() != NULL)
|
|
{
|
|
m_wndProperList.MoveWindow(rcFrameL);
|
|
}
|
|
|
|
//
|
|
InitObjListColumn();
|
|
InitProperListColumn();
|
|
|
|
if ( !InitADOServer() )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
ShowMsgList();
|
|
|
|
//测试
|
|
ShowDXFList();
|
|
|
|
//1分钟查询一次
|
|
SetTimer(ID_TIMEQUERY,60000,NULL);
|
|
|
|
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 CJSTZDlg::OnRefCobMsg(WPARAM wp,LPARAM lp)
|
|
{
|
|
ShowMsgList();
|
|
|
|
return 0L;
|
|
}
|
|
|
|
BOOL CJSTZDlg::InitADOServer()
|
|
{
|
|
m_pMySQLDb = CLJCSDlg::GetSHEarthWormConnect();
|
|
return m_pMySQLDb != NULL ? TRUE : FALSE;
|
|
}
|
|
|
|
BOOL GetLocalIP(CStringArray& arsIPs)
|
|
{
|
|
WORD sockVersion = MAKEWORD(1,1);
|
|
WSADATA wsaData;
|
|
WSAStartup(sockVersion, &wsaData);
|
|
|
|
//先发送一个请求更新的本地ip
|
|
char szIpThis[65];
|
|
memset(szIpThis,0,65);
|
|
|
|
char szHost[64];
|
|
gethostname(szHost,64);
|
|
|
|
CString sAlias,sIP;
|
|
struct hostent *phe = gethostbyname(szHost);
|
|
if (phe != NULL)
|
|
{
|
|
if (phe->h_addrtype == AF_INET)
|
|
{
|
|
int i(0);
|
|
struct in_addr addr;
|
|
while (phe->h_addr_list[i] != 0)
|
|
{
|
|
addr.s_addr = *(u_long *)phe->h_addr_list[i++];
|
|
sIP = inet_ntoa(addr);
|
|
arsIPs.Add(sIP);
|
|
}
|
|
}
|
|
else if (phe->h_addrtype == AF_INET6)
|
|
acutPrintf(_T("\tRemotehost is an IPv6 address\n"));
|
|
}
|
|
WSACleanup();
|
|
return !arsIPs.IsEmpty();
|
|
}
|
|
|
|
void CJSTZDlg::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;
|
|
//NameFr,nProFr,IPFr,SendTo,ProTo,IPTo,MsgType,Rem,DwgFile,GUID,MsgTime
|
|
CString sSQL,sIP;
|
|
for (int i = 0;i < arsIP.GetSize();i++)
|
|
{
|
|
sIP = arsIP.GetAt(i);
|
|
sSQL.Format(_T("select NameFr from AEC_Co_Msg where IPTo='%s' order by msgtime DESC"),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 IPTo='%s' order by msgtime DESC"),sIP);
|
|
if (bHasMsg && 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));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL CJSTZDlg::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 CJSTZDlg::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"));
|
|
|
|
m_wndDXFList.InsertItem(6,_T("基础"),1);
|
|
m_wndDXFList.SetItemText(6,1,_T("AEC_X3DPART"));
|
|
}
|
|
|
|
void CJSTZDlg::OnBnClickedOk()
|
|
{
|
|
UnColorLightThisPick();
|
|
|
|
AcDbEntity* pEntT = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,m_idZObj,AcDb::kForWrite))
|
|
{
|
|
pEntT->erase();
|
|
pEntT->close();
|
|
}
|
|
ShowWindow(SW_HIDE);
|
|
}
|
|
|
|
void CJSTZDlg::InitObjListColumn()
|
|
{
|
|
LPCTSTR lpszCols[] = {_T("名称"),_T("编号"),_T("句柄"),_T("修改状态"),0};
|
|
int lnColumns[] = {120,100,0,80,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 CJSTZDlg::InitProperListColumn()
|
|
{
|
|
LPCTSTR lpszCols[] = {_T("构件"),_T("属性名"),_T("数值"),_T("属性名"),_T("数值"),0};
|
|
int lnColumns[] = {80,120,120,120,120,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_wndProperList.InsertColumn(i,&lvColumn);
|
|
}
|
|
|
|
CList<int,int> listReadOnly;
|
|
listReadOnly.AddHead(0);
|
|
listReadOnly.AddHead(1);
|
|
listReadOnly.AddHead(2);
|
|
listReadOnly.AddHead(3);
|
|
listReadOnly.AddHead(4);
|
|
m_wndProperList.SetReadOnlyList(listReadOnly);
|
|
}
|
|
|
|
//接收提资
|
|
void CJSTZDlg::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,6);
|
|
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;
|
|
|
|
Adesk::Int16 nVal1 = acdbCurDwg()->useri4();
|
|
pDb->setUseri4(KEY_NOPROTECT);
|
|
Adesk::Int16 nVal2 = acdbCurDwg()->useri4();
|
|
|
|
AcDbDatabase db(Adesk::kFalse);
|
|
db.setUseri4(KEY_NOPROTECT);
|
|
|
|
if ( Acad::eOk == (es = db.readDwgFile(sDwgFile)))
|
|
{
|
|
AcDbObjectId idRec;
|
|
idRec.setNull();
|
|
|
|
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.下载或更新协同区
|
|
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();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//走 wblockCloneObjects 路线
|
|
AcDbBlockTableRecord *pRec = new AcDbBlockTableRecord;
|
|
pRec->setName(pszRecName);
|
|
|
|
idRec.setNull();
|
|
AcDbBlockTable *pTbl = NULL;
|
|
if (Acad::eOk == (es = pDb->getBlockTable(pTbl, AcDb::kForWrite)))
|
|
{
|
|
pTbl->add(idRec, pRec);
|
|
pRec->close();
|
|
pTbl->close();
|
|
}
|
|
|
|
|
|
pTbl = NULL;
|
|
AcDbObjectIdArray arIdSrc;
|
|
if (Acad::eOk == (es = db.getBlockTable(pTbl, AcDb::kForRead)))
|
|
{
|
|
AcDbBlockTableRecord *pModRc = NULL;
|
|
if (Acad::eOk == (es = pTbl->getAt(ACDB_MODEL_SPACE, pModRc, AcDb::kForRead)))
|
|
{
|
|
AcDbBlockTableRecordIterator *pIter = NULL;
|
|
pModRc->newIterator(pIter);
|
|
|
|
AcDbObjectId objId;
|
|
for (pIter->start(); !pIter->done(); pIter->step())
|
|
{
|
|
pIter->getEntityId(objId);
|
|
arIdSrc.append(objId);
|
|
}
|
|
delete pIter;
|
|
}
|
|
pModRc->close();
|
|
pTbl->close();
|
|
}
|
|
|
|
if (idRec.isValid())
|
|
{
|
|
AcDbIdMapping idMap;
|
|
if (Acad::eOk == (es = db.wblockCloneObjects(arIdSrc, idRec, idMap, AcDb::kDrcIgnore)))
|
|
{
|
|
if (Acad::eOk == (es = 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))
|
|
{
|
|
#ifndef NDEBUG
|
|
::DeleteFile(sDwgFile);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::OnBnClickedButton1()
|
|
{
|
|
//从选择的数据库记录提取
|
|
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,6);
|
|
|
|
AcAxDocLock lock;
|
|
AcDbObjectId id;
|
|
AcDbObjectIdArray arIds;
|
|
|
|
//1.找协同区
|
|
AcDbDatabase* pDb = acdbCurDwg();
|
|
AcDbBlockTable* pTbl = NULL;
|
|
if ( Acad::eOk == pDb->getBlockTable(pTbl,AcDb::kForRead))
|
|
{
|
|
AcDbBlockTableIterator* pIt = NULL;
|
|
pTbl->newIterator(pIt);
|
|
|
|
bool bFind = false;
|
|
CString sName;
|
|
AcDbObjectId idRec;
|
|
AcDbBlockTableRecord* pRec = NULL;
|
|
|
|
if (pIt != NULL)
|
|
{
|
|
AecDbObjXDataMap xDataMap;
|
|
for (pIt->start();!pIt->done();pIt->step())
|
|
{
|
|
pIt->getRecordId(idRec);
|
|
|
|
if ( xDataMap.Read(idRec,_T("CO_SH")) )
|
|
{
|
|
xDataMap.GetAt(KEY_NAME,sName);
|
|
if (sName.CompareNoCase(pszBlockName) == 0)
|
|
{
|
|
bFind = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
delete pIt;
|
|
}
|
|
|
|
pTbl->close();
|
|
|
|
if (bFind)//发现协同区
|
|
{
|
|
if ( Acad::eOk == acdbOpenObject( (AcDbObject*&)pRec,idRec,AcDb::kForRead) )
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("没有发现协同区!"));
|
|
return;
|
|
}
|
|
}
|
|
|
|
Adesk::Int32 nLen = arIds.length();
|
|
if (nLen == 0)
|
|
{
|
|
AfxMessageBox(_T("协同区中没有构件!"));
|
|
return;
|
|
}
|
|
|
|
//2. 例如 _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("");
|
|
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);
|
|
|
|
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);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEnt);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo);
|
|
}
|
|
|
|
AecDbX3dPartEntity* pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
if (pPart != NULL)
|
|
{
|
|
sEntName = pPart->GetName();
|
|
}
|
|
|
|
id.handle().getIntoAsciiBuffer(szHanele);
|
|
|
|
AddObjectList(pszDXF,sNo,szHanele,sEntName);
|
|
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
int nScroll = 0;
|
|
m_wndObjList.ExpandAll(pRoot,nScroll);
|
|
m_sDxfNames.TrimRight(_T(","));
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
bool CJSTZDlg::GetChildIds(CTreeItem* pChild,AcDbObjectIdArray& arIds)
|
|
{
|
|
AcDbObjectId id;
|
|
CString sHandle;
|
|
POSITION ps = NULL;
|
|
int nCount = 0;
|
|
|
|
ps = m_wndObjList.GetHeadPosition(pChild);
|
|
|
|
CTreeItem* pEntItem = NULL;
|
|
while( ps != NULL)
|
|
{
|
|
pEntItem = m_wndObjList.GetNextChild(pChild,ps);
|
|
//墙体
|
|
//{_T("名称"),_T("编号"),_T("句柄"),0};
|
|
|
|
CItemInfo* pInf = m_wndObjList.GetData(pEntItem);
|
|
if (pInf != NULL)
|
|
{
|
|
sHandle = pInf->GetSubItem(1);
|
|
|
|
AcDbHandle hd((const TCHAR*)sHandle);
|
|
|
|
if ( Acad::eOk == acdbCurDwg()->getAcDbObjectId(id,false,hd) )
|
|
{
|
|
arIds.append(id);
|
|
nCount++;
|
|
}
|
|
}
|
|
}
|
|
return nCount > 0 ? true : false;
|
|
}
|
|
|
|
//全部添加到图中
|
|
void CJSTZDlg::OnBnClickedButton5()
|
|
{
|
|
int nRes = AfxMessageBox(_T("警告:确认是第一次全部添加,多次全部添加会导致叠加重复!\n确认要全部添加到图中吗?"),MB_YESNO);
|
|
if (nRes != IDYES)
|
|
return;
|
|
|
|
AcDbObjectIdArray arIds;
|
|
CTreeItem * pRoot = NULL;
|
|
m_mapNameToRoot.Lookup(_T("提资构件"),(void*&)pRoot);
|
|
|
|
if (pRoot == NULL)
|
|
return;
|
|
|
|
POSITION ps = m_wndObjList.GetHeadPosition(pRoot);
|
|
|
|
CTreeItem* pChild = NULL;
|
|
while( ps != NULL)
|
|
{
|
|
pChild = m_wndObjList.GetNextChild(pRoot,ps);
|
|
|
|
//获取墙体目录下的对象
|
|
GetChildIds(pChild,arIds);
|
|
}
|
|
|
|
AcAxDocLock lock;
|
|
|
|
//先清理上次比对的临时对象
|
|
Acad::ErrorStatus es;
|
|
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);
|
|
}
|
|
}
|
|
|
|
AcDbObjectId idMoelSpace;
|
|
AcDbBlockTable* pTable = NULL;
|
|
if ( Acad::eOk == acdbCurDwg()->getBlockTable(pTable,AcDb::kForRead) )
|
|
{
|
|
if (Acad::eOk == pTable->getAt(ACDB_MODEL_SPACE,idMoelSpace))
|
|
{
|
|
}
|
|
pTable->close();
|
|
}
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
AcDbIdMapping pIdMap;
|
|
Adesk::Int16 nVal = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);
|
|
|
|
if(Acad::eOk == acdbCurDwg()->deepCloneObjects(arIds,idMoelSpace,pIdMap))
|
|
{
|
|
//不需要删除已经添加的,保留
|
|
/*for (int i = 0;i < arIds.length();i++)
|
|
{
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,arIds.at(i),AcDb::kForWrite))
|
|
{
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
}
|
|
}
|
|
//m_wndObjList.DeleteAll();
|
|
//m_mapNoToItem.RemoveAll();*/
|
|
}
|
|
acdbCurDwg()->setUseri4(nVal);
|
|
|
|
//SHacedCommand(RTSTR, _T("ZOOM"), RTSTR, _T("E"), RTNONE);
|
|
acedPostCommand(_T("zoom e "));
|
|
}
|
|
|
|
int CJSTZDlg::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);
|
|
}
|
|
|
|
//门窗
|
|
AecDbXOpening *pOpening1 = AecDbXOpening::cast(pEnt);
|
|
AecDbXOpening *pOpening2 = AecDbXOpening::cast(pEntT);
|
|
if (pOpening1 != NULL && pOpening2 != NULL)
|
|
{
|
|
nEqu = pOpening1->ComparedTo(pOpening2);
|
|
}
|
|
|
|
//梁
|
|
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 CJSTZDlg::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 ( 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不同的构件在列表中以红色显示!"));
|
|
}
|
|
}
|
|
|
|
//替换图中构件
|
|
void CJSTZDlg::OnBnClickedButton4()
|
|
{
|
|
int nRes = AfxMessageBox(_T("确认要替换吗?"),MB_YESNO);
|
|
if (nRes == IDNO)
|
|
{
|
|
return;
|
|
}
|
|
bool bNeedCompare = false;
|
|
AcAxDocLock lock;
|
|
AcDbObjectId id;
|
|
CString sHandle;
|
|
CString sDxf,sNo,sNoT;
|
|
|
|
//先清理上次比对的临时对象
|
|
Acad::ErrorStatus es;
|
|
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);
|
|
AcDbObjectIdArray arAssIds;
|
|
|
|
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);
|
|
}
|
|
|
|
AecDbBDPipeBase *pBDP = AecDbBDPipeBase::cast(pEnt);
|
|
if (pBDP != NULL)
|
|
{
|
|
pBDP->GetAssocHandleObjs(arAssIds);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
|
|
//2.找到图中对应的
|
|
bool bFind = false;
|
|
AcDbEntity *pEntT = NULL;
|
|
AcDbObjectId idT;
|
|
|
|
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);
|
|
|
|
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 idMap;
|
|
idMap.setDestDb(acdbCurDwg());
|
|
Adesk::Int16 nVal = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);//NO编码保护唯一
|
|
|
|
if(Acad::eOk == acdbCurDwg()->deepCloneObjects(arIds,idMoelSpace, idMap))
|
|
{
|
|
bNeedCompare = true;
|
|
//3.1删除协同区的源对象 不用删除2023-6-1
|
|
bool bEraseCob = false;
|
|
/*if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite))
|
|
{
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
bEraseCob = true;
|
|
}*/
|
|
|
|
//2.2删除图中的目标
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEntT, idT, AcDb::kForWrite))
|
|
{
|
|
pEntT->erase();
|
|
pEntT->close();
|
|
}
|
|
|
|
//3.2删除协同区的列表记录
|
|
if (bEraseCob)
|
|
{
|
|
m_wndObjList.DeleteItemEx(pItem,nSel);
|
|
m_mapNoToItem.RemoveKey(sNo);
|
|
}
|
|
}
|
|
acdbCurDwg()->setUseri4(nVal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bNeedCompare)
|
|
{
|
|
OnBnClickedButton3();
|
|
}
|
|
}
|
|
|
|
//新增到图中
|
|
void CJSTZDlg::OnBnClickedButton6()
|
|
{
|
|
AcAxDocLock lock;
|
|
AcDbObjectId id;
|
|
CString sHandle;
|
|
|
|
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))
|
|
{
|
|
pEnt->close();
|
|
}
|
|
|
|
AcDbObjectId idMoelSpace;
|
|
AcDbBlockTable* pTable = NULL;
|
|
if ( Acad::eOk == acdbCurDwg()->getBlockTable(pTable,AcDb::kForRead) )
|
|
{
|
|
if (Acad::eOk == pTable->getAt(ACDB_MODEL_SPACE,idMoelSpace))
|
|
{
|
|
}
|
|
pTable->close();
|
|
}
|
|
|
|
AcDbObjectIdArray arIds;
|
|
arIds.append(id);
|
|
AcDbIdMapping pIdMap;
|
|
|
|
Adesk::Int16 nVal = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);
|
|
if(Acad::eOk == acdbCurDwg()->deepCloneObjects(arIds,idMoelSpace,pIdMap))
|
|
{
|
|
/*不需要删除协同区的新增
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForWrite))
|
|
{
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
}*/
|
|
//m_wndObjList.DeleteItemEx(pItem,nSel);
|
|
}
|
|
//添加后,新增颜色消除
|
|
pInf->SetSubItemText(2,_T("相同"),RGB(255,255,255));
|
|
|
|
m_wndObjList.Invalidate();
|
|
m_wndObjList.RedrawWindow();
|
|
|
|
acdbCurDwg()->setUseri4(nVal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//SHacedCommand(RTSTR, _T("ZOOM"), RTSTR, _T("E"), RTNONE);
|
|
acedPostCommand(_T("zoom e "));
|
|
}
|
|
|
|
void CJSTZDlg::OnBnClickedButton7()
|
|
{
|
|
POSITION ps = m_wndMsgList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
int nItem = m_wndMsgList.GetNextSelectedItem(ps);
|
|
if (nItem != -1)
|
|
{
|
|
CString sGUID = m_wndMsgList.GetItemText(nItem,8);
|
|
|
|
CString sSQL;
|
|
sSQL.Format(_T("delete from AEC_Co_Msg where guid='%s'"),sGUID);
|
|
|
|
if ( m_pMySQLDb != NULL)
|
|
{
|
|
if ( m_pMySQLDb->ExecuteSQL(sSQL) )
|
|
{
|
|
m_wndMsgList.DeleteItem(nItem);
|
|
|
|
nItem -= 1;
|
|
if (nItem < m_wndMsgList.GetItemCount())
|
|
{
|
|
m_wndMsgList.SetItemState(nItem,LVIS_SELECTED,LVIS_SELECTED);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
LRESULT CJSTZDlg::OnItemSelected(WPARAM wp,LPARAM lp)
|
|
{
|
|
HWND hWnd = (HWND)wp;
|
|
if (hWnd != m_wndObjList.m_hWnd)
|
|
return 0L;
|
|
|
|
CPoint* pptPos = (CPoint*)lp;
|
|
int nSel = (int)pptPos->x;
|
|
int nSubItem = (int)pptPos->y;
|
|
CString sHandle;
|
|
COLORREF crRed = RGB(255,0,0);
|
|
|
|
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;
|
|
}
|
|
|
|
COLORREF crColor = pInf->GetBkColor(2);
|
|
|
|
AcAxDocLock lock;
|
|
CString sNo,sDxf;
|
|
AcDbHandle hd((const TCHAR*)sHandle);
|
|
AcDbObjectId id;
|
|
Acad::ErrorStatus es;
|
|
|
|
Adesk::Int16 nVal1 = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);
|
|
Adesk::Int16 nVal2 = acdbCurDwg()->useri4();
|
|
|
|
if ( Acad::eOk == acdbCurDwg()->getAcDbObjectId(id,false,hd) )
|
|
{
|
|
//按照编号找到对应的实体,加亮选择
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == (es = 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);
|
|
}
|
|
|
|
AecDbX3dPartEntity* pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
if (pPart != NULL)
|
|
{
|
|
pPart->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);
|
|
}
|
|
|
|
AecDbX3dPartEntity* pPart = AecDbX3dPartEntity::cast(pEntT);
|
|
if (pPart != NULL)
|
|
{
|
|
pPart->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo2);
|
|
}
|
|
pEntT->close();
|
|
}
|
|
|
|
if (sNo2.CompareNoCase(sNo) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
acedSSFree(ss);
|
|
|
|
UnColorLightThisPick();
|
|
|
|
m_bZObj = FALSE;
|
|
m_bTObj = FALSE;
|
|
m_idZObjSrc.setNull();
|
|
|
|
if (bFind)
|
|
{
|
|
//加入选择集
|
|
ads_name ssPick;
|
|
acdbGetAdsName(ent, idT);
|
|
acedSSAdd(ent, NULL, ssPick);
|
|
|
|
acedSSSetFirst(ssPick, ssPick);
|
|
acedSSFree(ssPick);
|
|
|
|
//如果不同
|
|
//if (crColor == RGB(255,0,0))
|
|
{
|
|
//同时显示不同的构件
|
|
m_idZObjSrc = id;
|
|
}
|
|
|
|
m_arLastPick.append(idT);
|
|
ColorLightThisPick();
|
|
|
|
acedUpdateDisplay();
|
|
acedPostCommand(_T("regen "));
|
|
}
|
|
|
|
//TCHAR szT[17];
|
|
//idT.handle().getIntoAsciiBuffer(szT);
|
|
//acutPrintf(_T("\nThis%s Cob:%s"), szT,sHandle);
|
|
|
|
ShowCompareWnd(bFind,id,idT);
|
|
|
|
m_bZObj = FALSE;
|
|
m_bTObj = TRUE;
|
|
UpdateData(FALSE);
|
|
}
|
|
}
|
|
}
|
|
acdbCurDwg()->setUseri4(nVal1);
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
CString GetBeamShap(int nShape)
|
|
{
|
|
switch(nShape)
|
|
{
|
|
case 0://矩形
|
|
{
|
|
return _T("矩形");
|
|
break;
|
|
}
|
|
case 1://圆形
|
|
{
|
|
return _T("圆形");
|
|
break;
|
|
}
|
|
case 2://正六边形
|
|
{
|
|
return _T("正六边形");
|
|
break;
|
|
}
|
|
case 3://工字形
|
|
{
|
|
return _T("工字形");
|
|
break;
|
|
}
|
|
case 4://槽钢
|
|
{
|
|
return _T("槽钢");
|
|
break;
|
|
}
|
|
case 5://梯形
|
|
{
|
|
return _T("梯形");
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return _T("");
|
|
}
|
|
|
|
void CJSTZDlg::ShowCompareWnd(BOOL bFind,AcDbObjectId& idCob,AcDbObjectId& idDoc)
|
|
{
|
|
m_wndProperList.DeleteAll();
|
|
|
|
if (bFind)
|
|
{
|
|
AcDbEntity* pEntCob = NULL;
|
|
AcDbEntity* pEntDoc = NULL;
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEntCob,idCob,AcDb::kForRead))
|
|
{
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntDoc,idDoc,AcDb::kForRead))
|
|
{
|
|
AecDbXWall* pWallCob = AecDbXWall::cast(pEntCob);
|
|
AecDbXWall* pWallDoc = AecDbXWall::cast(pEntDoc);
|
|
|
|
//比较墙体
|
|
if (pWallCob != NULL && pWallDoc != NULL)
|
|
{
|
|
WallData dataCob,dataDoc;
|
|
pWallCob->GetWallData(dataCob);
|
|
pWallDoc->GetWallData(dataDoc);
|
|
|
|
AecDbObjXDataMap map1,map2;
|
|
map1.SetAt(_T("墙厚"),dataCob.dThick);
|
|
map2.SetAt(_T("墙厚"),dataDoc.dThick);
|
|
|
|
map1.SetAt(_T("墙高"),dataCob.dH);
|
|
map2.SetAt(_T("墙高"),dataDoc.dH);
|
|
|
|
map1.SetAt(_T("底标高"),dataCob.dBomEl);
|
|
map2.SetAt(_T("底标高"),dataDoc.dBomEl);
|
|
|
|
if (dataCob.nSecShape == eWw &&
|
|
dataDoc.nSecShape == eWw)
|
|
{
|
|
map1.SetAt(_T("墩墙厚"),dataCob.dThick2);
|
|
map2.SetAt(_T("墩墙厚"),dataDoc.dThick2);
|
|
|
|
map1.SetAt(_T("墩墙高"),dataCob.dH2);
|
|
map2.SetAt(_T("墩墙高"),dataDoc.dH2);
|
|
}
|
|
|
|
|
|
AcDbLine* pLn1 = AcDbLine::cast(pWallCob->GetNativeCurve());
|
|
AcDbLine* pLn2 = AcDbLine::cast(pWallDoc->GetNativeCurve());
|
|
if (pLn1 != NULL && pLn2 != NULL)
|
|
{
|
|
AcGePoint3d pt1,pt2;
|
|
pWallCob->getStartPoint(pt1);
|
|
pWallDoc->getStartPoint(pt2);
|
|
map1.SetAt(_T("起点"),pt1);
|
|
map2.SetAt(_T("起点"),pt2);
|
|
|
|
pWallCob->getEndPoint(pt1);
|
|
pWallDoc->getEndPoint(pt2);
|
|
map1.SetAt(_T("终点"),pt1);
|
|
map2.SetAt(_T("终点"),pt2);
|
|
}
|
|
|
|
AcDbArc* pArc1 = AcDbArc::cast(pWallCob->GetNativeCurve());
|
|
AcDbArc* pArc2 = AcDbArc::cast(pWallDoc->GetNativeCurve());
|
|
if (pArc1 != NULL && pArc2 != NULL)
|
|
{
|
|
AcGePoint3d pt1,pt2;
|
|
pt1 = pArc1->center();
|
|
pt2 = pArc2->center();
|
|
map1.SetAt(_T("圆心"),pt1);
|
|
map2.SetAt(_T("圆心"),pt2);
|
|
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
dVal1 = pArc1->radius();
|
|
dVal2 = pArc2->radius();
|
|
map1.SetAt(_T("半径"),dVal1);
|
|
map2.SetAt(_T("半径"),dVal2);
|
|
|
|
dVal1 = pArc1->startAngle();
|
|
dVal2 = pArc2->startAngle();
|
|
map1.SetAt(_T("起始角度"),dVal1);
|
|
map2.SetAt(_T("起始角度"),dVal2);
|
|
|
|
dVal1 = pArc1->endAngle();
|
|
dVal2 = pArc2->endAngle();
|
|
map1.SetAt(_T("终止角度"),dVal1);
|
|
map2.SetAt(_T("终止角度"),dVal2);
|
|
}
|
|
|
|
AcDbCircle* pCir1 = AcDbCircle::cast(pWallCob->GetNativeCurve());
|
|
AcDbCircle* pCir2 = AcDbCircle::cast(pWallDoc->GetNativeCurve());
|
|
if (pCir1 != NULL && pCir2 != NULL)
|
|
{
|
|
AcGePoint3d pt1,pt2;
|
|
pt1 = pCir1->center();
|
|
pt2 = pCir2->center();
|
|
map1.SetAt(_T("圆心"),pt1);
|
|
map2.SetAt(_T("圆心"),pt2);
|
|
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
dVal1 = pCir1->radius();
|
|
dVal2 = pCir2->radius();
|
|
map1.SetAt(_T("半径"),dVal1);
|
|
map2.SetAt(_T("半径"),dVal2);
|
|
}
|
|
|
|
AcDbPolyline* pPl1 = AcDbPolyline::cast(pWallCob->GetNativeCurve());
|
|
AcDbPolyline* pPl2 = AcDbPolyline::cast(pWallDoc->GetNativeCurve());
|
|
if (pPl1 != NULL && pPl2 != NULL)
|
|
{
|
|
//...
|
|
}
|
|
|
|
//长度
|
|
double dLen1 = pWallCob->GetLength();
|
|
double dLen2 = pWallDoc->GetLength();
|
|
map1.SetAt(_T("长度(米)"),dLen1/1000.0);
|
|
map2.SetAt(_T("长度(米)"),dLen2/1000.0);
|
|
|
|
//体积
|
|
//dLen1 = pWallCob->GetVolume();
|
|
//dLen2 = pWallDoc->GetVolume();
|
|
//map1.SetAt(_T("体积(cm3)"),dLen1 / 1.e6);
|
|
//map2.SetAt(_T("体积(cm3)"),dLen2 / 1.e6);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pWallCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pWallDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("墙体"),map1,map2);
|
|
}
|
|
|
|
|
|
AecDbXOpening *pOpenCob = AecDbXOpening::cast(pEntCob);
|
|
AecDbXOpening *pOpenDoc = AecDbXOpening::cast(pEntDoc);
|
|
if (pOpenCob != NULL && pOpenDoc != NULL)
|
|
{
|
|
OpeningData dataCo, dataDo;
|
|
pOpenCob->GetOpeningData(dataCo);
|
|
pOpenDoc->GetOpeningData(dataDo);
|
|
|
|
AecDbObjXDataMap map1, map2;
|
|
map1.SetAt(_T("门窗宽"), dataCo.dWidth);
|
|
map2.SetAt(_T("门窗宽"), dataDo.dWidth);
|
|
|
|
map1.SetAt(_T("门窗高"), dataCo.dHeight);
|
|
map2.SetAt(_T("门窗高"), dataDo.dHeight);
|
|
|
|
map1.SetAt(_T("门窗厚度"), dataCo.dThick);
|
|
map2.SetAt(_T("门窗厚度"), dataDo.dThick);
|
|
|
|
map1.SetAt(_T("相对标高"), dataCo.dBomEl);
|
|
map2.SetAt(_T("相对标高"), dataDo.dBomEl);
|
|
|
|
map1.SetAt(_T("二维图块"), dataCo.szBlockName2d);
|
|
map2.SetAt(_T("二维图块"), dataDo.szBlockName2d);
|
|
|
|
map1.SetAt(_T("三维选型"), dataCo.szBlockName3d);
|
|
map2.SetAt(_T("三维选型"), dataDo.szBlockName3d);
|
|
|
|
map1.SetAt(_T("名称"), dataCo.szName);
|
|
map2.SetAt(_T("名称"), dataDo.szName);
|
|
|
|
ShowToCompareList(_T("门窗"), map1, map2);
|
|
}
|
|
|
|
//比较梁
|
|
AecDbBeam* pBeamCob = AecDbBeam::cast(pEntCob);
|
|
AecDbBeam* pBeamDoc = AecDbBeam::cast(pEntDoc);
|
|
if (pBeamCob != NULL && pBeamDoc != NULL)
|
|
{
|
|
ColumnParam data1,data2;
|
|
pBeamCob->GetBeamData(data1);
|
|
pBeamDoc->GetBeamData(data2);
|
|
|
|
AecDbObjXDataMap map1,map2;
|
|
map1.SetAt(_T("长度"),data1.m_dH);
|
|
map2.SetAt(_T("长度"),data2.m_dH);
|
|
|
|
map1.SetAt(_T("底标高"),data1.m_dBomEl);
|
|
map2.SetAt(_T("底标高"),data2.m_dBomEl);
|
|
|
|
map1.SetAt(_T("偏心X"),data1.m_dXExtend);
|
|
map2.SetAt(_T("偏心X"),data2.m_dXExtend);
|
|
|
|
map1.SetAt(_T("偏心Y"),data1.m_dYExtend);
|
|
map2.SetAt(_T("偏心Y"),data2.m_dYExtend);
|
|
|
|
map1.SetAt(_T("形状"),GetBeamShap(data1.m_nShape));
|
|
map2.SetAt(_T("形状"),GetBeamShap(data2.m_nShape));
|
|
|
|
//认为shape相同
|
|
switch(data1.m_nShape)
|
|
{
|
|
case 0://矩形
|
|
{
|
|
map1.SetAt(_T("横向"),data1.m_dXScale);
|
|
map2.SetAt(_T("横向"),data2.m_dXScale);
|
|
map1.SetAt(_T("纵向"),data1.m_dYScale);
|
|
map2.SetAt(_T("纵向"),data2.m_dYScale);
|
|
break;
|
|
}
|
|
case 1://圆形
|
|
{
|
|
map1.SetAt(_T("直径"),data1.m_dXScale);
|
|
map2.SetAt(_T("直径"),data2.m_dXScale);
|
|
break;
|
|
}
|
|
case 2://正六边形
|
|
{
|
|
map1.SetAt(_T("边长"),data1.m_dXScale);
|
|
map2.SetAt(_T("边长"),data2.m_dXScale);
|
|
break;
|
|
}
|
|
case 3://工字形
|
|
{
|
|
map1.SetAt(_T("A"),data1.m_dSizes[0]);
|
|
map2.SetAt(_T("A"),data2.m_dSizes[0]);
|
|
|
|
map1.SetAt(_T("B"),data1.m_dSizes[1]);
|
|
map2.SetAt(_T("B"),data2.m_dSizes[1]);
|
|
|
|
map1.SetAt(_T("C"),data1.m_dSizes[2]);
|
|
map2.SetAt(_T("C"),data2.m_dSizes[2]);
|
|
|
|
map1.SetAt(_T("D"),data1.m_dSizes[3]);
|
|
map2.SetAt(_T("D"),data2.m_dSizes[3]);
|
|
|
|
break;
|
|
}
|
|
case 4://槽钢
|
|
{
|
|
map1.SetAt(_T("A"),data1.m_dSizes[0]);
|
|
map2.SetAt(_T("A"),data2.m_dSizes[0]);
|
|
|
|
map1.SetAt(_T("B"),data1.m_dSizes[1]);
|
|
map2.SetAt(_T("B"),data2.m_dSizes[1]);
|
|
|
|
map1.SetAt(_T("C"),data1.m_dSizes[2]);
|
|
map2.SetAt(_T("C"),data2.m_dSizes[2]);
|
|
|
|
map1.SetAt(_T("D"),data1.m_dSizes[3]);
|
|
map2.SetAt(_T("D"),data2.m_dSizes[3]);
|
|
break;
|
|
}
|
|
case 5://梯形
|
|
{
|
|
map1.SetAt(_T("顶宽"),data1.m_dXScale);
|
|
map2.SetAt(_T("顶宽"),data2.m_dXScale);
|
|
|
|
map1.SetAt(_T("底宽"),data1.m_dYScale);
|
|
map2.SetAt(_T("底宽"),data2.m_dYScale);
|
|
|
|
map1.SetAt(_T("高"),data1.m_dH);
|
|
map2.SetAt(_T("高"),data2.m_dH);
|
|
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
AcGePoint3d pt1,pt2;
|
|
pBeamCob->getStartPoint(pt1);
|
|
pBeamDoc->getStartPoint(pt2);
|
|
map1.SetAt(_T("起点"),pt1);
|
|
map2.SetAt(_T("起点"),pt2);
|
|
|
|
pBeamCob->getEndPoint(pt1);
|
|
pBeamDoc->getEndPoint(pt2);
|
|
map1.SetAt(_T("终点"),pt1);
|
|
map2.SetAt(_T("终点"),pt2);
|
|
|
|
//长度
|
|
double dLen1 = pBeamCob->GetLength();
|
|
double dLen2 = pBeamDoc->GetLength();
|
|
map1.SetAt(_T("长度(米)"),dLen1/1000.0);
|
|
map2.SetAt(_T("长度(米)"),dLen2/1000.0);
|
|
|
|
//体积
|
|
//dLen1 = pBeamCob->GetVolume();
|
|
//dLen2 = pBeamDoc->GetVolume();
|
|
//map1.SetAt(_T("体积(cm3)"),dLen1 / 1.e6);
|
|
//map2.SetAt(_T("体积(cm3)"),dLen2 / 1.e6);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pBeamCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pBeamDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("梁"),map1,map2);
|
|
}
|
|
|
|
//比较板
|
|
AecDbXSlab* pSlabCob = AecDbXSlab::cast(pEntCob);
|
|
AecDbXSlab* pSlabDoc = AecDbXSlab::cast(pEntDoc);
|
|
if (pSlabCob != NULL && pSlabDoc != NULL)
|
|
{
|
|
PoolData data1,data2;
|
|
pSlabCob->GetBasinSlabData(data1);
|
|
pSlabDoc->GetBasinSlabData(data2);
|
|
|
|
AecDbObjXDataMap map1,map2;
|
|
map1.SetAt(_T("厚度"),data1.m_dBomThick);
|
|
map2.SetAt(_T("厚度"),data2.m_dBomThick);
|
|
|
|
map1.SetAt(_T("底标高"),data1.m_dBomEl);
|
|
map2.SetAt(_T("底标高"),data2.m_dBomEl);
|
|
|
|
switch(data1.m_nShape)
|
|
{
|
|
case eRect:
|
|
{
|
|
map1.SetAt(_T("长度"),data1.m_dData[0]);
|
|
map2.SetAt(_T("长度"),data2.m_dData[0]);
|
|
|
|
map1.SetAt(_T("宽度"),data1.m_dData[1]);
|
|
map2.SetAt(_T("宽度"),data2.m_dData[1]);
|
|
|
|
break;
|
|
}
|
|
case eCircle:
|
|
{
|
|
map1.SetAt(_T("半径"),data1.m_dData[2]);
|
|
map2.SetAt(_T("半径"),data2.m_dData[2]);
|
|
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
//体积
|
|
//double dLen1 = pSlabCob->GetVolume();
|
|
//double dLen2 = pSlabDoc->GetVolume();
|
|
//map1.SetAt(_T("体积(cm3)"),dLen1 / 1.e6);
|
|
//map2.SetAt(_T("体积(cm3)"),dLen2 / 1.e6);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pSlabCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pSlabDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("板"),map1,map2);
|
|
}
|
|
|
|
//比较柱
|
|
AecDbColumn* pColCob = AecDbColumn::cast(pEntCob);
|
|
AecDbColumn* pColDoc = AecDbColumn::cast(pEntDoc);
|
|
if (pColCob != NULL && pColDoc != NULL)
|
|
{
|
|
ColumnParam data1,data2;
|
|
pColCob->GetColumnData(data1);
|
|
pColDoc->GetColumnData(data2);
|
|
|
|
AecDbObjXDataMap map1,map2;
|
|
map1.SetAt(_T("长度"),data1.m_dH);
|
|
map2.SetAt(_T("长度"),data2.m_dH);
|
|
|
|
map1.SetAt(_T("底标高"),data1.m_dBomEl);
|
|
map2.SetAt(_T("底标高"),data2.m_dBomEl);
|
|
|
|
map1.SetAt(_T("偏心X"),data1.m_dXExtend);
|
|
map2.SetAt(_T("偏心X"),data2.m_dXExtend);
|
|
|
|
map1.SetAt(_T("偏心Y"),data1.m_dYExtend);
|
|
map2.SetAt(_T("偏心Y"),data2.m_dYExtend);
|
|
|
|
map1.SetAt(_T("形状"),GetBeamShap(data1.m_nShape));
|
|
map2.SetAt(_T("形状"),GetBeamShap(data2.m_nShape));
|
|
|
|
//认为shape相同
|
|
switch(data1.m_nShape)
|
|
{
|
|
case 0://矩形
|
|
{
|
|
map1.SetAt(_T("横向"),data1.m_dXScale);
|
|
map2.SetAt(_T("横向"),data2.m_dXScale);
|
|
map1.SetAt(_T("纵向"),data1.m_dYScale);
|
|
map2.SetAt(_T("纵向"),data2.m_dYScale);
|
|
break;
|
|
}
|
|
case 1://圆形
|
|
{
|
|
map1.SetAt(_T("直径"),data1.m_dXScale);
|
|
map2.SetAt(_T("直径"),data2.m_dXScale);
|
|
break;
|
|
}
|
|
case 2://正六边形
|
|
{
|
|
map1.SetAt(_T("边长"),data1.m_dXScale);
|
|
map2.SetAt(_T("边长"),data2.m_dXScale);
|
|
break;
|
|
}
|
|
case 3://工字形
|
|
{
|
|
map1.SetAt(_T("A"),data1.m_dSizes[0]);
|
|
map2.SetAt(_T("A"),data2.m_dSizes[0]);
|
|
|
|
map1.SetAt(_T("B"),data1.m_dSizes[1]);
|
|
map2.SetAt(_T("B"),data2.m_dSizes[1]);
|
|
|
|
map1.SetAt(_T("C"),data1.m_dSizes[2]);
|
|
map2.SetAt(_T("C"),data2.m_dSizes[2]);
|
|
|
|
map1.SetAt(_T("D"),data1.m_dSizes[3]);
|
|
map2.SetAt(_T("D"),data2.m_dSizes[3]);
|
|
|
|
break;
|
|
}
|
|
case 4://槽钢
|
|
{
|
|
map1.SetAt(_T("A"),data1.m_dSizes[0]);
|
|
map2.SetAt(_T("A"),data2.m_dSizes[0]);
|
|
|
|
map1.SetAt(_T("B"),data1.m_dSizes[1]);
|
|
map2.SetAt(_T("B"),data2.m_dSizes[1]);
|
|
|
|
map1.SetAt(_T("C"),data1.m_dSizes[2]);
|
|
map2.SetAt(_T("C"),data2.m_dSizes[2]);
|
|
|
|
map1.SetAt(_T("D"),data1.m_dSizes[3]);
|
|
map2.SetAt(_T("D"),data2.m_dSizes[3]);
|
|
break;
|
|
}
|
|
case 5://梯形
|
|
{
|
|
map1.SetAt(_T("顶宽"),data1.m_dXScale);
|
|
map2.SetAt(_T("顶宽"),data2.m_dXScale);
|
|
|
|
map1.SetAt(_T("底宽"),data1.m_dYScale);
|
|
map2.SetAt(_T("底宽"),data2.m_dYScale);
|
|
|
|
map1.SetAt(_T("高"),data1.m_dH);
|
|
map2.SetAt(_T("高"),data2.m_dH);
|
|
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
AcGePoint3d pt1,pt2;
|
|
pColCob->getStartPoint(pt1);
|
|
pColDoc->getStartPoint(pt2);
|
|
map1.SetAt(_T("起点"),pt1);
|
|
map2.SetAt(_T("起点"),pt2);
|
|
|
|
pColCob->getEndPoint(pt1);
|
|
pColDoc->getEndPoint(pt2);
|
|
map1.SetAt(_T("终点"),pt1);
|
|
map2.SetAt(_T("终点"),pt2);
|
|
|
|
//长度
|
|
double dLen1 = pColCob->GetLength();
|
|
double dLen2 = pColDoc->GetLength();
|
|
map1.SetAt(_T("长度(米)"),dLen1/1000.0);
|
|
map2.SetAt(_T("长度(米)"),dLen2/1000.0);
|
|
//体积
|
|
//dLen1 = pColCob->GetVolume();
|
|
//dLen2 = pColDoc->GetVolume();
|
|
//map1.SetAt(_T("体积(cm3)"),dLen1 / 1.e6);
|
|
//map2.SetAt(_T("体积(cm3)"),dLen2 / 1.e6);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pColCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pColDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("柱"),map1,map2);
|
|
}
|
|
|
|
//比较洞
|
|
AecDbX3dPartEntity* pPartCob = AecDbX3dPartEntity::cast(pEntCob);
|
|
AecDbX3dPartEntity* pPartDoc = AecDbX3dPartEntity::cast(pEntDoc);
|
|
if (pPartCob != NULL && pPartDoc != NULL)
|
|
{
|
|
CString sName = pPartCob->GetName();
|
|
if (sName.CompareNoCase(_T("开洞")) == 0)
|
|
{
|
|
int nShpae1 = 0;
|
|
pPartCob->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("nShape"),nShpae1);
|
|
|
|
int nShpae2 = 0;
|
|
pPartDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("nShape"),nShpae2);
|
|
|
|
AecDbObjXDataMap map1,map2;
|
|
if (nShpae1 == eRect)
|
|
{
|
|
map1.SetAt(_T("形状"),_T("矩形"));
|
|
map2.SetAt(_T("形状"),_T("矩形"));
|
|
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
pPartCob->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("m_dL"),dVal1);
|
|
pPartDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("m_dL"),dVal2);
|
|
map1.SetAt(_T("长度"),dVal1);
|
|
map2.SetAt(_T("长度"),dVal2);
|
|
|
|
pPartCob->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("m_dW"),dVal1);
|
|
pPartDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("m_dW"),dVal2);
|
|
map1.SetAt(_T("宽度"),dVal1);
|
|
map2.SetAt(_T("宽度"),dVal2);
|
|
}
|
|
else if (nShpae1 == eCircle)
|
|
{
|
|
map1.SetAt(_T("形状"),_T("圆形"));
|
|
map2.SetAt(_T("形状"),_T("圆形"));
|
|
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
pPartCob->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dRad"),dVal1);
|
|
pPartDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dRad"),dVal2);
|
|
|
|
map1.SetAt(_T("半径"),dVal1);
|
|
map2.SetAt(_T("半径"),dVal2);
|
|
}
|
|
else
|
|
{
|
|
map1.SetAt(_T("形状"),_T("异形"));
|
|
map2.SetAt(_T("形状"),_T("异形"));
|
|
}
|
|
|
|
AcGePoint3d ptOrg1 = pPartCob->GetOrgPoint(true);
|
|
AcGePoint3d ptOrg2 = pPartDoc->GetOrgPoint(true);
|
|
|
|
map1.SetAt(_T("位置"),ptOrg1);
|
|
map2.SetAt(_T("位置"),ptOrg2);
|
|
|
|
ShowToCompareList(_T("洞口"),map1,map2);
|
|
}
|
|
}
|
|
|
|
//比较管线 其他专业
|
|
AecDbEwPipe* pPipeCob = AecDbEwPipe::cast(pEntCob);
|
|
AecDbEwPipe* pPipeDoc = AecDbEwPipe::cast(pEntDoc);
|
|
if (pPipeCob != NULL && pPipeDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
pPipeCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_DN,dVal1);
|
|
pPipeDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_DN,dVal2);
|
|
|
|
map1.SetAt(_T("公称直径"),dVal1);
|
|
map2.SetAt(_T("公称直径"),dVal2);
|
|
|
|
pPipeCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_OD,dVal1);
|
|
pPipeDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_OD,dVal2);
|
|
map1.SetAt(_T("外径"),dVal1);
|
|
map2.SetAt(_T("外径"),dVal2);
|
|
|
|
pPipeCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_THICK,dVal1);
|
|
pPipeDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_THICK,dVal2);
|
|
map1.SetAt(_T("壁厚"),dVal1);
|
|
map2.SetAt(_T("壁厚"),dVal2);
|
|
|
|
AcGePoint3d pt1,pt2;
|
|
pPipeCob->getStartPoint(pt1);
|
|
pPipeDoc->getStartPoint(pt2);
|
|
map1.SetAt(_T("起点"),pt1);
|
|
map2.SetAt(_T("起点"),pt2);
|
|
|
|
map1.SetAt(_T("起点标高"),pt1.z);
|
|
map2.SetAt(_T("起点标高"),pt2.z);
|
|
|
|
pPipeCob->getEndPoint(pt1);
|
|
pPipeDoc->getEndPoint(pt2);
|
|
map1.SetAt(_T("终点"),pt1);
|
|
map2.SetAt(_T("终点"),pt2);
|
|
|
|
map1.SetAt(_T("终点标高"),pt1.z);
|
|
map2.SetAt(_T("终点标高"),pt2.z);
|
|
|
|
dVal1 = pPipeCob->GetLength();
|
|
dVal2 = pPipeDoc->GetLength();
|
|
map1.SetAt(_T("长度(米)"),dVal1/1000.0);
|
|
map2.SetAt(_T("长度(米)"),dVal2/1000.0);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pPipeCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pPipeDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("管子"),map1,map2);
|
|
}
|
|
|
|
AecDbEwFitting* pEWFitCob = AecDbEwFitting::cast(pEntCob);
|
|
AecDbEwFitting* pEWFitDoc = AecDbEwFitting::cast(pEntDoc);
|
|
if (pEWFitCob != NULL && pEWFitDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
double dVal1 = 0.0,dVal2 = 0.0;
|
|
pEWFitCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_DN,dVal1);
|
|
pEWFitDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_DN,dVal2);
|
|
|
|
map1.SetAt(_T("公称直径"),dVal1);
|
|
map2.SetAt(_T("公称直径"),dVal2);
|
|
|
|
pEWFitCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_OD,dVal1);
|
|
pEWFitDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_OD,dVal2);
|
|
map1.SetAt(_T("外径"),dVal1);
|
|
map2.SetAt(_T("外径"),dVal2);
|
|
|
|
pEWFitCob->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_THICK,dVal1);
|
|
pEWFitDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_THICK,dVal2);
|
|
map1.SetAt(_T("壁厚"),dVal1);
|
|
map2.SetAt(_T("壁厚"),dVal2);
|
|
|
|
//材质
|
|
CString sMat1,sMat2;
|
|
pEWFitCob->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat1);
|
|
pEWFitDoc->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sMat2);
|
|
map1.SetAt(_T("材质"),sMat1);
|
|
map2.SetAt(_T("材质"),sMat2);
|
|
|
|
ShowToCompareList(_T("管件"),map1,map2);
|
|
}
|
|
|
|
//风管
|
|
AecDbHvacDuct* pHPipeCob = AecDbHvacDuct::cast(pEntCob);
|
|
AecDbHvacDuct* pHPipeDoc = AecDbHvacDuct::cast(pEntDoc);
|
|
if (pHPipeCob != NULL && pHPipeDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
|
|
AecHvac::DuctParam dp1;
|
|
pHPipeCob->GetDuctParam(dp1);
|
|
|
|
AecHvac::DuctParam dp2;
|
|
pHPipeCob->GetDuctParam(dp2);
|
|
|
|
map1.SetAt(_T("宽或直径"),dp1.dSize[0]);
|
|
map2.SetAt(_T("宽或直径"),dp2.dSize[0]);
|
|
|
|
map1.SetAt(_T("高或直径"),dp1.dSize[1]);
|
|
map2.SetAt(_T("高或直径"),dp2.dSize[1]);
|
|
|
|
map1.SetAt(_T("厚度"),dp1.dSize[2]);
|
|
map2.SetAt(_T("厚度"),dp2.dSize[2]);
|
|
|
|
map1.SetAt(_T("标高"),dp1.m_dEl);
|
|
map2.SetAt(_T("标高"),dp2.m_dEl);
|
|
|
|
ShowToCompareList(_T("风管"),map1,map2);
|
|
}
|
|
|
|
AecDbHvacFitting* pHFitCob = AecDbHvacFitting::cast(pEntCob);
|
|
AecDbHvacFitting* pHFitDoc = AecDbHvacFitting::cast(pEntDoc);
|
|
if (pHFitCob != NULL && pHFitDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
|
|
AecHvac::DuctParam dp1;
|
|
pHFitCob->GetDuctParam(dp1);
|
|
|
|
AecHvac::DuctParam dp2;
|
|
pHFitDoc->GetDuctParam(dp2);
|
|
|
|
map1.SetAt(_T("宽或直径"),dp1.dSize[0]);
|
|
map2.SetAt(_T("宽或直径"),dp2.dSize[0]);
|
|
|
|
map1.SetAt(_T("高或直径"),dp1.dSize[1]);
|
|
map2.SetAt(_T("高或直径"),dp2.dSize[1]);
|
|
|
|
map1.SetAt(_T("厚度"),dp1.dSize[2]);
|
|
map2.SetAt(_T("厚度"),dp2.dSize[2]);
|
|
|
|
map1.SetAt(_T("标高"),dp1.m_dEl);
|
|
map2.SetAt(_T("标高"),dp2.m_dEl);
|
|
|
|
ShowToCompareList(_T("风管件"),map1,map2);
|
|
}
|
|
|
|
//桥架
|
|
AecDbECableTray* pECCob = AecDbECableTray::cast(pEntCob);
|
|
AecDbECableTray* pECDoc = AecDbECableTray::cast(pEntDoc);
|
|
if (pECCob != NULL && pECDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
|
|
AecHvac::DuctParam dp1;
|
|
pECCob->GetDuctParam(dp1);
|
|
|
|
AecHvac::DuctParam dp2;
|
|
pECDoc->GetDuctParam(dp2);
|
|
|
|
map1.SetAt(_T("宽"),dp1.dSize[0]);
|
|
map2.SetAt(_T("宽"),dp2.dSize[0]);
|
|
|
|
map1.SetAt(_T("高"),dp1.dSize[1]);
|
|
map2.SetAt(_T("高"),dp2.dSize[1]);
|
|
|
|
map1.SetAt(_T("厚度"),dp1.dSize[2]);
|
|
map2.SetAt(_T("厚度"),dp2.dSize[2]);
|
|
|
|
map1.SetAt(_T("标高"),dp1.m_dEl);
|
|
map2.SetAt(_T("标高"),dp2.m_dEl);
|
|
|
|
ShowToCompareList(_T("桥架"),map1,map2);
|
|
}
|
|
|
|
AecDbEcFitting* pECFitCob = AecDbEcFitting::cast(pEntCob);
|
|
AecDbEcFitting* pECFitDoc = AecDbEcFitting::cast(pEntDoc);
|
|
if (pECFitCob != NULL && pECFitDoc != NULL)
|
|
{
|
|
AecDbObjXDataMap map1,map2;
|
|
|
|
AecHvac::DuctParam dp1;
|
|
pECFitCob->GetDuctParam(dp1);
|
|
|
|
AecHvac::DuctParam dp2;
|
|
pECFitDoc->GetDuctParam(dp2);
|
|
|
|
map1.SetAt(_T("宽"),dp1.dSize[0]);
|
|
map2.SetAt(_T("宽"),dp2.dSize[0]);
|
|
|
|
map1.SetAt(_T("高"),dp1.dSize[1]);
|
|
map2.SetAt(_T("高"),dp2.dSize[1]);
|
|
|
|
map1.SetAt(_T("厚度"),dp1.dSize[2]);
|
|
map2.SetAt(_T("厚度"),dp2.dSize[2]);
|
|
|
|
map1.SetAt(_T("标高"),dp1.m_dEl);
|
|
map2.SetAt(_T("标高"),dp2.m_dEl);
|
|
|
|
ShowToCompareList(_T("桥架件"),map1,map2);
|
|
}
|
|
|
|
//...
|
|
|
|
pEntDoc->close();
|
|
}
|
|
pEntCob->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::ShowToCompareList(LPCTSTR pszName,AecDbObjXDataMap& map1,AecDbObjXDataMap& map2)
|
|
{
|
|
m_mapPNameToRoot.RemoveAll();
|
|
m_wndProperList.DeleteAll();
|
|
|
|
CItemInfo* lpRoot = new CItemInfo();
|
|
lpRoot->SetImage(1);
|
|
lpRoot->SetItemText(pszName);
|
|
lpRoot->AddSubItemText("");
|
|
lpRoot->AddSubItemText("");
|
|
lpRoot->AddSubItemText("");
|
|
lpRoot->AddSubItemText("");
|
|
|
|
CTreeItem * pRoot = m_wndProperList.InsertRootItem(lpRoot);
|
|
m_mapPNameToRoot.SetAt(pszName,pRoot);
|
|
|
|
int nVt = 0;
|
|
CString sVal1,sVal2,sKey;
|
|
AecXData xdata1,xdata2;
|
|
for (AecDbObjXDataMap::It it = map1.Begin();it != map1.End(); )
|
|
{
|
|
LPCTSTR pszKey = (const TCHAR *)((*it).first);
|
|
|
|
if ( !map1.GetNext(it,sKey,xdata1) )
|
|
{
|
|
break;
|
|
}
|
|
|
|
map2.GetAt(pszKey,xdata2);
|
|
|
|
nVt = xdata1.nVt;
|
|
switch (nVt)
|
|
{
|
|
case VT_I4: // 整型
|
|
sVal1.Format(_T("%d"),(int)xdata1.nVal);
|
|
sVal2.Format(_T("%d"),(int)xdata2.nVal);
|
|
break;
|
|
case VT_UI4: //s id
|
|
#ifndef _WIN64
|
|
sVal1.Format(_T("%ld"),xdata1.nVal);
|
|
sVal2.Format(_T("%ld"),xdata2.nVal);
|
|
#else
|
|
sVal1.Format(_T("%d"),xdata1.nVal);
|
|
sVal2.Format(_T("%d"),xdata2.nVal);
|
|
#endif
|
|
break;
|
|
case VT_UI8: //h id
|
|
#ifndef _WIN64
|
|
sVal1.Format(_T("%ld"),xdata1.nVal);
|
|
sVal2.Format(_T("%ld"),xdata2.nVal);
|
|
#else
|
|
sVal1.Format(_T("%d"),xdata1.nVal);
|
|
sVal2.Format(_T("%d"),xdata2.nVal);
|
|
#endif
|
|
break;
|
|
case VT_R8: // 浮点
|
|
sVal1.Format(_T("%.3f"),xdata1.dVal[0]);
|
|
sVal2.Format(_T("%.3f"),xdata2.dVal[0]);
|
|
break;
|
|
case (VT_BYREF | VT_R8): // 点
|
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
|
break;
|
|
case (VT_BYREF | VT_R8 + 1): // cad变化点
|
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
|
break;
|
|
case (VT_BYREF | VT_R8 + 2): // 向量
|
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
|
break;
|
|
case (VT_BYREF | VT_R8 + 3): // 变化向量
|
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
|
break;
|
|
case (VT_BYREF | VT_R8 + 4): // 矩阵
|
|
sVal1.Format(_T("%s"),xdata1.pszVal);
|
|
sVal2.Format(_T("%s"),xdata2.pszVal);
|
|
break;
|
|
case (VT_BYREF | VT_R8 + 5): // binarydata
|
|
break;
|
|
case VT_BSTR: // 字符串
|
|
sVal1.Format(_T("%s"),xdata1.pszVal);
|
|
sVal2.Format(_T("%s"),xdata2.pszVal);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (pszKey != NULL)
|
|
{
|
|
COLORREF crColor = RGB(255,255,255);
|
|
if (sVal1.CompareNoCase(sVal2) != 0)
|
|
{
|
|
crColor = RGB(255,0,0);
|
|
}
|
|
|
|
CItemInfo* lpParent = new CItemInfo();
|
|
lpParent->SetItemText(_T(""));
|
|
lpParent->AddSubItemText(pszKey);
|
|
|
|
if (sVal1.CompareNoCase(sVal2) != 0)
|
|
{
|
|
lpParent->AddSubItemText(sVal1,crColor);
|
|
}
|
|
else
|
|
{
|
|
lpParent->AddSubItemText(sVal1);
|
|
}
|
|
|
|
lpParent->AddSubItemText(pszKey);
|
|
|
|
if (sVal1.CompareNoCase(sVal2) != 0)
|
|
{
|
|
lpParent->AddSubItemText(sVal2,crColor);
|
|
}
|
|
else
|
|
{
|
|
lpParent->AddSubItemText(sVal2);
|
|
}
|
|
|
|
CTreeItem * pParent = m_wndProperList.InsertItem(pRoot,lpParent);
|
|
}
|
|
}
|
|
|
|
int nScroll = 0;
|
|
m_wndProperList.ExpandAll(pRoot,nScroll);
|
|
}
|
|
|
|
void CJSTZDlg::UnColorLightThisPick()
|
|
{
|
|
AcDbObjectId idT;
|
|
AcDbEntity* pEntT = NULL;
|
|
for (int i = 0;i < m_arLastPick.length();i++)
|
|
{
|
|
idT = m_arLastPick.at(i);
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,idT,AcDb::kForWrite))
|
|
{
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEntT);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->SetActive(false);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEntT);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->SetActive(false);
|
|
}
|
|
pEntT->close();
|
|
}
|
|
}
|
|
|
|
m_idZObjSrc.setNull();
|
|
m_arLastPick.removeAll();
|
|
}
|
|
|
|
void CJSTZDlg::ColorLightThisPick()
|
|
{
|
|
AcDbObjectId idT;
|
|
AcDbEntity* pEntT = NULL;
|
|
for (int i = 0;i < m_arLastPick.length();i++)
|
|
{
|
|
idT = m_arLastPick.at(i);
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,idT,AcDb::kForWrite))
|
|
{
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEntT);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->SetActive(true);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEntT);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->SetActive(true);
|
|
}
|
|
pEntT->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::OnDestroy()
|
|
{
|
|
CDialog::OnDestroy();
|
|
}
|
|
|
|
void CJSTZDlg::OnTimer(UINT_PTR nIDEvent)
|
|
{
|
|
if (nIDEvent == ID_TIMEQUERY)
|
|
{
|
|
CStringArray arIPs,arVals;
|
|
GetLocalIP(arIPs);
|
|
|
|
CString sSQL,sIP,sRem,sMsg,sName;
|
|
for (int i = 0;i < arIPs.GetSize();i++)
|
|
{
|
|
sIP = arIPs.GetAt(i);
|
|
sSQL.Format(_T("select NameFr,IPTo,Rem from AEC_Co_Msg where pickup=0 and IPTo='%s'"),sIP);
|
|
|
|
if (m_pMySQLDb != NULL)
|
|
{
|
|
arVals.RemoveAll();
|
|
m_pMySQLDb->GetSelData(sSQL,arVals);
|
|
if (arVals.GetSize() >= 3)
|
|
{
|
|
sName = arVals.GetAt(0);
|
|
sRem = arVals.GetAt(2);
|
|
|
|
sMsg.Format(_T("您有新的[%s]发送的提资消息!\n提资说明:\n%s"),sName,sRem);
|
|
|
|
ShowWindow(SW_SHOW);
|
|
KillTimer(ID_TIMEQUERY);
|
|
|
|
AfxMessageBox(sMsg);
|
|
|
|
ShowMsgList();
|
|
|
|
//然后设置pickup状态
|
|
CString sSQL;
|
|
sSQL.Format(_T("update AEC_Co_Msg set pickup=1 where IPTo='%s'"),sIP);
|
|
m_pMySQLDb->ExecuteSQL(sSQL);
|
|
|
|
SetTimer(ID_TIMEQUERY,60000,NULL);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CDialog::OnTimer(nIDEvent);
|
|
}
|
|
|
|
void CJSTZDlg::OnBnClickedButton8()
|
|
{
|
|
ShowMsgList();
|
|
}
|
|
|
|
//区中构件
|
|
void CJSTZDlg::OnBnClickedCheck2()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
bool bRef = false;
|
|
AcAxDocLock lock;
|
|
AcDbEntity* pEntTCln = NULL;
|
|
AcDbEntity* pEntT = NULL;
|
|
Acad::ErrorStatus es;
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,m_idZObjSrc,AcDb::kForRead))
|
|
{
|
|
pEntTCln = (AcDbEntity*)pEntT->clone();
|
|
pEntT->close();
|
|
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEntTCln);
|
|
if (pEntBase != NULL)
|
|
{
|
|
pEntBase->SetActive(true);
|
|
pEntBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_NO,_T("*"));
|
|
pEntBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_ACTIVECR,kRed);
|
|
}
|
|
|
|
AecDbCurveBase* pCurBase = AecDbCurveBase::cast(pEntTCln);
|
|
if (pCurBase != NULL)
|
|
{
|
|
pCurBase->SetActive(true);
|
|
pCurBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_NO,_T("*"));
|
|
pCurBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_ACTIVECR,kRed);
|
|
}
|
|
|
|
if (m_bZObj)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
|
|
AddToModelSpace(pEntTCln,NULL,false);
|
|
m_idZObj = pEntTCln->objectId();
|
|
pEntTCln->close();
|
|
}
|
|
else
|
|
{
|
|
delete pEntTCln;
|
|
}
|
|
bRef = true;
|
|
}
|
|
|
|
if (!m_bZObj)
|
|
{
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,m_idZObj,AcDb::kForWrite))
|
|
{
|
|
pEntT->erase();
|
|
pEntT->close();
|
|
bRef = true;
|
|
m_idZObj.setNull();
|
|
}
|
|
}
|
|
|
|
if (bRef)
|
|
{
|
|
acedUpdateDisplay();
|
|
acedPostCommand(_T("regen "));
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::OnBnClickedCheck3()
|
|
{
|
|
UpdateData(TRUE);
|
|
bool bRef = false;
|
|
if (!m_arLastPick.isEmpty())
|
|
{
|
|
AcAxDocLock lock;
|
|
AcDbEntity* pEntT = NULL;
|
|
for (int i = 0;i < m_arLastPick.length();i++)
|
|
{
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntT,m_arLastPick.at(i),AcDb::kForWrite))
|
|
{
|
|
pEntT->setVisibility(m_bTObj ? AcDb::kVisible : AcDb::kInvisible);
|
|
pEntT->close();
|
|
bRef = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bRef)
|
|
{
|
|
acedUpdateDisplay();
|
|
acedPostCommand(_T("regen "));
|
|
}
|
|
}
|
|
|
|
HBRUSH CJSTZDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|
{
|
|
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
if (nCtlColor == CTLCOLOR_STATIC)
|
|
{
|
|
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_NEW)
|
|
{
|
|
CRect rc;
|
|
pWnd->GetClientRect(rc);
|
|
pDC->FillSolidRect(rc,RGB(0,255,0));
|
|
}
|
|
|
|
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_DIFF)
|
|
{
|
|
CRect rc;
|
|
pWnd->GetClientRect(rc);
|
|
pDC->FillSolidRect(rc,RGB(255,0,0));
|
|
}
|
|
}
|
|
return hbr;
|
|
}
|
|
|
|
void CJSTZDlg::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_wndStaicYSplit.m_hWnd))
|
|
{
|
|
m_wndStaicYSplit.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
rect.right = rc.right - m_nSpaceX;
|
|
m_wndStaicYSplit.MoveWindow(rect);
|
|
}
|
|
|
|
if (::IsWindow(m_wndProperList.m_hWnd))
|
|
{
|
|
m_wndProperList.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
rect.right = rc.right - m_nSpaceX;
|
|
rect.bottom = rc.bottom - m_nSpacePropY;
|
|
m_wndProperList.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_wndBt5.m_hWnd) &&
|
|
::IsWindow(m_wndBt6.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_wndBt5.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndBt5.MoveWindow(rect);
|
|
|
|
m_wndBt6.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndBt6.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);
|
|
}
|
|
|
|
if ( ::IsWindow(m_wndStaDif.m_hWnd) &&
|
|
::IsWindow(m_wndStaDifT.m_hWnd) &&
|
|
::IsWindow(m_wndStaNew.m_hWnd) &&
|
|
::IsWindow(m_wndStaNewT.m_hWnd) )
|
|
{
|
|
m_wndStaDif.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndStaDif.MoveWindow(rect);
|
|
|
|
m_wndStaDifT.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndStaDifT.MoveWindow(rect);
|
|
|
|
m_wndStaNew.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndStaNew.MoveWindow(rect);
|
|
|
|
m_wndStaNewT.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
|
|
rect.bottom = rc.bottom - m_nSpaceY;
|
|
rect.top = rect.bottom - nH;
|
|
m_wndStaNewT.MoveWindow(rect);
|
|
}
|
|
|
|
if (::IsWindow(m_wndStaicYSplit.m_hWnd))
|
|
{
|
|
m_wndStaicYSplit.GetWindowRect(&rect);
|
|
ScreenToClient(&rect);
|
|
nH = rect.Height();
|
|
nW = rect.Width();
|
|
|
|
rect.right = rc.right - m_nSpaceX;
|
|
rect.left = rect.right - nW;
|
|
rect.bottom = rc.bottom - m_nSpacePropY;
|
|
rect.top = rect.bottom - nH;
|
|
|
|
m_wndStaicYSplit.MoveWindow(rect);
|
|
}
|
|
}
|
|
|
|
void CJSTZDlg::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);
|
|
}
|