1405 lines
30 KiB
C++
1405 lines
30 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "FSTZDlg.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "CoreTools.h"
|
|
#include "uiiado.h"
|
|
#include "NameDlg.h"
|
|
#include "LJCSDlg.h"
|
|
#include "AecDbEwFitting.h"
|
|
#include "AecDbEwPipeBase.h"
|
|
#include "AecDbX3dPartEntity.h"
|
|
#include "CZHZLDLG.h"
|
|
|
|
#ifndef ID_OBJLIST
|
|
#define ID_OBJLIST 341
|
|
#endif
|
|
|
|
#ifndef WM_ITEM_SEL
|
|
#define WM_ITEM_SEL (WM_USER+0x105)
|
|
#endif
|
|
|
|
extern DLLIMPEXP CString IDCreate();
|
|
extern BOOL GetLocalIP(CStringArray& arsIP);
|
|
|
|
IMPLEMENT_DYNAMIC(CFSTZDlg, CDialog)
|
|
|
|
CFSTZDlg::CFSTZDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CFSTZDlg::IDD, pParent)
|
|
, m_sRem(_T("提资给结构"))
|
|
, m_sSendTo(_T("何工"))
|
|
, m_sProName(_T("结构"))
|
|
, m_sNameFr(_T("李工"))
|
|
, m_sProNameFr(_T("工艺给排水"))
|
|
, m_sMeIP(_T(""))
|
|
{
|
|
memset(m_nField,0,sizeof(BYTE)*4);
|
|
m_nField[0] = 192;
|
|
m_nField[1] = 168;
|
|
m_nField[2] = 1;
|
|
m_nField[3] = 99;
|
|
m_pMySQLDb = NULL;
|
|
|
|
//UIDataCache::Read(_T("%s%s%s%i%i%i%i"), _T("CFSTZDlg")
|
|
// , &m_sProName , &m_sSendTo , &m_sRem
|
|
// , &m_nField[0],&m_nField[1],&m_nField[2],&m_nField[3]);
|
|
}
|
|
|
|
CFSTZDlg::~CFSTZDlg()
|
|
{
|
|
//UIDataCache::Write(_T("%s%s%s%i%i%i%i"), _T("CFSTZDlg")
|
|
// , &m_sProName , &m_sSendTo , &m_sRem
|
|
// , &m_nField[0],&m_nField[1],&m_nField[2],&m_nField[3]);
|
|
if (m_pMySQLDb != NULL)
|
|
delete m_pMySQLDb;
|
|
}
|
|
|
|
void CFSTZDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST3, m_wndDXFList);
|
|
DDX_Text(pDX, IDC_EDIT3, m_sRem);
|
|
DDX_Control(pDX, IDC_IPADDRESS1, m_wndIPCtrl);
|
|
DDX_Text(pDX, IDC_EDIT1, m_sSendTo);
|
|
DDX_CBString(pDX, IDC_COMBO1, m_sProName);
|
|
DDX_Control(pDX, IDC_STATIC_OBJLST, m_wndObjFrm);
|
|
DDX_Text(pDX, IDC_EDIT2, m_sNameFr);
|
|
DDX_CBString(pDX, IDC_COMBO2, m_sProNameFr);
|
|
DDX_Control(pDX, IDC_COMBO1, m_wndProCombox);
|
|
DDX_Control(pDX, IDC_COMBO3, m_wndThisIpCombox);
|
|
DDX_CBString(pDX, IDC_COMBO3, m_sMeIP);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CFSTZDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CFSTZDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CFSTZDlg::OnBnClickedButton2)
|
|
ON_BN_CLICKED(IDC_BUTTON5, &CFSTZDlg::OnBnClickedButton5)
|
|
ON_BN_CLICKED(IDC_BUTTON6, &CFSTZDlg::OnBnClickedButton6)
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CFSTZDlg::OnBnClickedButton3)
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CFSTZDlg::OnBnClickedButton4)
|
|
ON_BN_CLICKED(IDC_BUTTON8, &CFSTZDlg::OnBnClickedButton8)
|
|
ON_MESSAGE(WM_ITEM_SEL,&CFSTZDlg::OnItemSelected)
|
|
ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CFSTZDlg::onAcadKeepFocus )
|
|
ON_BN_CLICKED(IDCANCEL, &CFSTZDlg::OnBnClickedCancel)
|
|
ON_WM_DESTROY()
|
|
ON_CBN_SELCHANGE(IDC_COMBO1, &CFSTZDlg::OnCbnSelchangeCombo1)
|
|
ON_CBN_SELCHANGE(IDC_COMBO2, &CFSTZDlg::OnCbnSelchangeCombo2)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CFSTZDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON13, &CFSTZDlg::OnBnClickedButton13)
|
|
END_MESSAGE_MAP()
|
|
|
|
LONG_PTR CFSTZDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR)
|
|
{
|
|
POINT pt;
|
|
::GetCursorPos(&pt);
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
if(!(rect.PtInRect(pt)))
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CFSTZDlg::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);
|
|
|
|
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);
|
|
}
|
|
m_wndIPCtrl.SetAddress(m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
|
|
|
|
InitObjListColumn();
|
|
InitMeIPCombox();
|
|
|
|
if ( !InitADOServer() )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
LoadLocalData();
|
|
|
|
if (m_wndDXFList.GetItemCount() == 0)
|
|
{
|
|
ShowDXFList();
|
|
}
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CFSTZDlg::SaveLocalData()
|
|
{
|
|
CString sFileName;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.dat"),m_sProName);
|
|
|
|
CString sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CString sLn;
|
|
|
|
CStdioFile file;
|
|
if (file.Open(sLocalFile,CFile::modeCreate | CFile::modeWrite | CFile::typeText))
|
|
{
|
|
CString sLine;
|
|
file.WriteString(m_sRem);
|
|
file.WriteString(_T("\n"));
|
|
|
|
file.WriteString(m_sSendTo);
|
|
file.WriteString(_T("\n"));
|
|
|
|
file.WriteString(m_sProName);
|
|
file.WriteString(_T("\n"));
|
|
|
|
file.WriteString(m_sNameFr);
|
|
file.WriteString(_T("\n"));
|
|
|
|
file.WriteString(m_sProNameFr);
|
|
file.WriteString(_T("\n"));
|
|
|
|
//IPTo
|
|
for (int i = 0;i < 4;i++)
|
|
{
|
|
sLn.Format(_T("%d\n"),m_nField[i]);
|
|
file.WriteString(sLn);
|
|
}
|
|
file.Close();
|
|
}
|
|
|
|
//m_wndDXFList.InsertItem(0,_T("墙体"),1);
|
|
//m_wndDXFList.SetItemText(0,1,_T("AEC_DBWALL"));
|
|
|
|
CString sName,sDxf;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.lst"),m_sProName);
|
|
|
|
sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CStdioFile file2;
|
|
if (file2.Open(sLocalFile,CFile::modeCreate | CFile::modeWrite | CFile::typeText))
|
|
{
|
|
for (int i = 0;i < m_wndDXFList.GetItemCount();i++)
|
|
{
|
|
sName = m_wndDXFList.GetItemText(i,0);
|
|
sDxf = m_wndDXFList.GetItemText(i,1);
|
|
|
|
sLn.Format(_T("%s@%s\n"),sName,sDxf);
|
|
file2.WriteString(sLn);
|
|
}
|
|
file2.Close();
|
|
}
|
|
}
|
|
|
|
BOOL CFSTZDlg::LoadLocalData()
|
|
{
|
|
CString sFileName;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.dat"),m_sProName);
|
|
|
|
CString sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CString sLn,sTmp;
|
|
|
|
CStdioFile file;
|
|
if (file.Open(sLocalFile,CFile::modeRead | CFile::typeText))
|
|
{
|
|
file.ReadString(m_sRem);
|
|
m_sRem.TrimRight(_T('\n'));
|
|
|
|
file.ReadString(m_sSendTo);
|
|
m_sSendTo.TrimRight(_T('\n'));
|
|
|
|
file.ReadString(m_sProName);
|
|
m_sProName.TrimRight(_T('\n'));
|
|
|
|
file.ReadString(m_sNameFr);
|
|
m_sNameFr.TrimRight(_T('\n'));
|
|
|
|
file.ReadString(m_sProNameFr);
|
|
m_sProNameFr.TrimRight(_T('\n'));
|
|
|
|
for (int i = 0;i < 4;i++)
|
|
{
|
|
file.ReadString(sLn);
|
|
sLn.TrimRight(_T('\n'));
|
|
m_nField[i] = _ttoi(sLn);
|
|
}
|
|
m_wndIPCtrl.SetAddress(m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
|
|
file.Close();
|
|
}
|
|
|
|
m_wndDXFList.DeleteAllItems();
|
|
CString sName,sDxf;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.lst"),m_sProName);
|
|
sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CStdioFile file2;
|
|
if (file2.Open(sLocalFile,CFile::modeRead | CFile::typeText))
|
|
{
|
|
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();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CFSTZDlg::InitADOServer()
|
|
{
|
|
m_pMySQLDb = CLJCSDlg::GetSHEarthWormConnect();
|
|
return (m_pMySQLDb != NULL) ? TRUE : FALSE;
|
|
}
|
|
|
|
void CFSTZDlg::InitObjListColumn()
|
|
{
|
|
LPCTSTR lpszCols[] = {_T("名称"),_T("编号"),_T("句柄"),0};
|
|
int lnColumns[] = {140,140,0,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);
|
|
m_wndObjList.SetReadOnlyList(listReadOnly);
|
|
}
|
|
|
|
void CFSTZDlg::InitMeIPCombox()
|
|
{
|
|
CStringArray arIps;
|
|
GetLocalIP(arIps);
|
|
|
|
for (int i = 0;i < arIps.GetSize();i++)
|
|
{
|
|
m_wndThisIpCombox.AddString(arIps.GetAt(i));
|
|
}
|
|
if (arIps.GetSize() > 0)
|
|
{
|
|
m_wndThisIpCombox.SetCurSel(0);
|
|
m_sMeIP = arIps.GetAt(0);
|
|
}
|
|
}
|
|
|
|
void CFSTZDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if ( SendCobInfPackage() )
|
|
{
|
|
OnBnClickedButton6();
|
|
AfxMessageBox(_T("成功发送提资!"));
|
|
SaveLocalData();
|
|
EndDialog(IDOK);
|
|
}
|
|
}
|
|
|
|
void CFSTZDlg::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"));
|
|
}
|
|
|
|
//先检测是否有编号重复,或无编号设置,只限于AEC 实体
|
|
bool CFSTZDlg::CheckSnoValid(ads_name ss,Adesk::Int32 nLen)
|
|
{
|
|
ads_name ent;
|
|
AcDbObjectId id;
|
|
AcDbEntity* pEnt = NULL;
|
|
bool bRes = true;
|
|
|
|
CString sNo,sTip,sClass;
|
|
CStringList lstNos;
|
|
|
|
for(int ii = 0;ii < nLen;ii++)
|
|
{
|
|
acedSSName(ss,ii,ent);
|
|
acdbGetObjectId(id,ent);
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
sNo = _T("");
|
|
AecDbEntityBase* pEntBase = AecDbEntityBase::cast(pEnt);
|
|
if (pEntBase != NULL)
|
|
{
|
|
sNo = _T("");
|
|
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)
|
|
{
|
|
sNo = _T("");
|
|
pCurBase->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_NO,sNo);
|
|
if (sNo.IsEmpty())
|
|
{
|
|
AecDbEwPipeBase* pPipe = AecDbEwPipeBase::cast(pCurBase);
|
|
if (pPipe != NULL)
|
|
{
|
|
sNo = pPipe->GetGUID();
|
|
}
|
|
}
|
|
}
|
|
sClass = pEnt->isA()->name();
|
|
pEnt->close();
|
|
|
|
if (!sNo.IsEmpty())
|
|
{
|
|
if (lstNos.Find(sNo) != NULL)
|
|
{
|
|
//acutPrintf(_T("\n%s:%s"),sNo,sClass);
|
|
sTip = _T("\n发现有编号重复的构件!不可以发送提资!\n构件协同是按编号管理构件数据包!\n如果发送提资,请先执行编号唯一!");
|
|
AfxMessageBox(sTip);
|
|
bRes = false;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
lstNos.AddTail(sNo);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return bRes;
|
|
}
|
|
|
|
//提取构件
|
|
void CFSTZDlg::OnBnClickedButton2()
|
|
{
|
|
//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(','));
|
|
|
|
ShowWindow(SW_MINIMIZE);
|
|
|
|
AcAxDocLock lock;
|
|
struct resbuf* pRb = acutBuildList(RTDXF0, sClasDxf, 0);
|
|
ads_name ss,ent;
|
|
|
|
//LPCTSTR pszMsg[] = {_T("\n请选择要提提资的构件:"), _T("")};
|
|
int nRes = acedSSGet(NULL,NULL,NULL,pRb,ss);
|
|
acutRelRb(pRb);
|
|
|
|
if (nRes == RTNORM)
|
|
{
|
|
Adesk::Int32 nLen = 0;
|
|
acedSSLength(ss,&nLen);
|
|
|
|
//先检测是否有编号重复,或无编号设置,只限于AEC 实体
|
|
if (!CheckSnoValid(ss, nLen))
|
|
{
|
|
acedSSFree(ss);
|
|
ShowWindow(SW_NORMAL);
|
|
return;
|
|
}
|
|
|
|
//清空列表
|
|
OnBnClickedButton6();
|
|
|
|
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 < nLen;i++)
|
|
{
|
|
acedSSName(ss,i,ent);
|
|
acdbGetObjectId(id,ent);
|
|
|
|
sEntName = _T("");
|
|
sNo = _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);
|
|
}
|
|
acedSSFree(ss);
|
|
|
|
ShowWindow(SW_NORMAL);
|
|
}
|
|
|
|
void CFSTZDlg::AddObjectList(LPCTSTR pszDXF,LPCTSTR pszNo,LPCTSTR pszHanele,LPCTSTR pszEntName)
|
|
{
|
|
CTreeItem * pRoot = NULL;
|
|
if ( !m_mapNameToRoot.Lookup(_T("提资构件"),(void*&)pRoot) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
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(""));
|
|
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->SetImage(2);
|
|
|
|
m_wndObjList.InsertItem(pParent,lpItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
//移除构件
|
|
void CFSTZDlg::OnBnClickedButton5()
|
|
{
|
|
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);
|
|
if (sHandle.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("当前选择不是构件对象!移除失败!"));
|
|
return;
|
|
}
|
|
|
|
AcDbHandle hd((const TCHAR*)sHandle);
|
|
if ( Acad::eOk == acdbCurDwg()->getAcDbObjectId(id,false,hd) )
|
|
{
|
|
m_wndObjList.DeleteItemEx(pItem,nSel);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//清空列表
|
|
void CFSTZDlg::OnBnClickedButton6()
|
|
{
|
|
m_wndObjList.DeleteAll();
|
|
m_mapNameToRoot.RemoveAll();
|
|
m_arLastPick.removeAll();
|
|
}
|
|
|
|
//添加类型
|
|
void CFSTZDlg::OnBnClickedButton3()
|
|
{
|
|
ShowWindow(SW_HIDE);
|
|
|
|
AcAxDocLock lock;
|
|
|
|
CString sDxf = _T(""),sName;
|
|
//选择实体
|
|
ads_name ent;
|
|
ads_point pt;
|
|
int nRes = acedEntSel(_T("\n请选择实体:"),ent,pt);
|
|
if (nRes == RTNORM)
|
|
{
|
|
AcDbObjectId id;
|
|
acdbGetObjectId(id,ent);
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
sDxf = pEnt->isA()->dxfName();
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
if (!sDxf.IsEmpty())
|
|
{
|
|
CString sClasDxf = _T("");
|
|
for (int i = 0;i < m_wndDXFList.GetItemCount();i++)
|
|
{
|
|
sClasDxf = m_wndDXFList.GetItemText(i,1);
|
|
if (sClasDxf.CompareNoCase(sDxf) == 0)
|
|
{
|
|
AfxMessageBox(_T("选择的实体类型已经在列表中!"));
|
|
|
|
ShowWindow(SW_SHOW);
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
CAcModuleResourceOverride resOverride;
|
|
CNameDlg dlg;
|
|
if (IDOK == dlg.DoModal() )
|
|
{
|
|
sName = dlg.m_sName;
|
|
|
|
int nitem = m_wndDXFList.InsertItem(m_wndDXFList.GetItemCount(),sName);
|
|
m_wndDXFList.SetItemText(nitem,1,sDxf);
|
|
}
|
|
}
|
|
|
|
SaveDxfList();
|
|
|
|
ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
void CFSTZDlg::SaveDxfList()
|
|
{
|
|
CString sName,sDxf,sFileName,sLn,sLocalFile;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.lst"),m_sProName);
|
|
|
|
sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CStdioFile file2;
|
|
if (file2.Open(sLocalFile,CFile::modeCreate | CFile::modeWrite | CFile::typeText))
|
|
{
|
|
for (int i = 0;i < m_wndDXFList.GetItemCount();i++)
|
|
{
|
|
sName = m_wndDXFList.GetItemText(i,0);
|
|
sDxf = m_wndDXFList.GetItemText(i,1);
|
|
|
|
sLn.Format(_T("%s@%s\n"),sName,sDxf);
|
|
file2.WriteString(sLn);
|
|
}
|
|
file2.Close();
|
|
}
|
|
}
|
|
|
|
//移除类型
|
|
void CFSTZDlg::OnBnClickedButton4()
|
|
{
|
|
POSITION ps = m_wndDXFList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
int nItem = m_wndDXFList.GetNextSelectedItem(ps);
|
|
if (nItem != -1)
|
|
{
|
|
m_wndDXFList.DeleteItem(nItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
//例外添加
|
|
void CFSTZDlg::OnBnClickedButton8()
|
|
{
|
|
ShowWindow(SW_MINIMIZE);
|
|
|
|
AcAxDocLock lock;
|
|
|
|
CString sDxf = _T(""),sName,sNo = _T(""),sHandle,sEntName;
|
|
//选择实体
|
|
ads_name ent;
|
|
ads_point pt;
|
|
int nRes = acedEntSel(_T("\n请选择实体:"),ent,pt);
|
|
if (nRes == RTNORM)
|
|
{
|
|
AcDbObjectId id;
|
|
acdbGetObjectId(id,ent);
|
|
|
|
sEntName = _T("");
|
|
|
|
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);
|
|
}
|
|
|
|
AecDbX3dPartEntity* pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
if (pPart != NULL)
|
|
{
|
|
sEntName = pPart->GetName();
|
|
}
|
|
|
|
TCHAR szHanele[17];
|
|
id.handle().getIntoAsciiBuffer(szHanele);
|
|
sHandle = szHanele;
|
|
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
BOOL bFind = FALSE;
|
|
if (!sDxf.IsEmpty())
|
|
{
|
|
CString sClasDxf = _T("");
|
|
for (int i = 0;i < m_wndDXFList.GetItemCount();i++)
|
|
{
|
|
sClasDxf = m_wndDXFList.GetItemText(i,1);
|
|
if (sClasDxf.CompareNoCase(sDxf) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
}
|
|
}
|
|
|
|
if (!bFind)
|
|
{
|
|
CAcModuleResourceOverride resOverride;
|
|
CNameDlg dlg;
|
|
if (IDOK == dlg.DoModal() )
|
|
{
|
|
sName = dlg.m_sName;
|
|
int nitem = m_wndDXFList.InsertItem(m_wndDXFList.GetItemCount(),sName);
|
|
m_wndDXFList.SetItemText(nitem,1,sDxf);
|
|
}
|
|
else
|
|
{
|
|
ShowWindow(SW_NORMAL);
|
|
return;
|
|
}
|
|
}
|
|
|
|
//
|
|
if (sNo.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("选择的实体没有编号!不是基础构件!"));
|
|
ShowWindow(SW_SHOW);
|
|
return;
|
|
}
|
|
|
|
CTreeItem * pRoot = NULL;
|
|
m_mapNameToRoot.Lookup(_T("提资构件"),(void*&)pRoot);
|
|
m_wndObjList.SelectNode(pRoot);
|
|
|
|
int nScroll = 0;
|
|
m_wndObjList.Collapse(pRoot);
|
|
|
|
AddObjectList(sDxf,sNo,sHandle,sEntName);
|
|
|
|
m_wndObjList.ExpandAll(pRoot,nScroll);
|
|
}
|
|
|
|
ShowWindow(SW_NORMAL);
|
|
}
|
|
|
|
bool CFSTZDlg::GetChildIds(CTreeItem* pChild,AcDbObjectIdArray& arIds)
|
|
{
|
|
AcDbObjectId id;
|
|
CString sHandle,sName;
|
|
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) )
|
|
{
|
|
sName = pInf->GetItemText();
|
|
if (sName.CompareNoCase(_T("洞口")) == 0 ||
|
|
sName.CompareNoCase(_T("开洞")) == 0 ||
|
|
sName.CompareNoCase(_T("套管")) == 0)//
|
|
{
|
|
//洞口套管wblock随墙体连带处理,不用单独
|
|
}
|
|
else
|
|
{
|
|
arIds.append(id);
|
|
nCount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return nCount > 0 ? true : false;
|
|
}
|
|
|
|
bool CFSTZDlg::SendCobInfPackage()
|
|
{
|
|
AcDbObjectIdArray arIds;
|
|
|
|
CTreeItem * pRoot = NULL;
|
|
m_mapNameToRoot.Lookup(_T("提资构件"),(void*&)pRoot);
|
|
|
|
if (pRoot == NULL)
|
|
return false;
|
|
|
|
POSITION ps = m_wndObjList.GetHeadPosition(pRoot);
|
|
|
|
CTreeItem* pChild = NULL;
|
|
while( ps != NULL)
|
|
{
|
|
pChild = m_wndObjList.GetNextChild(pRoot,ps);
|
|
|
|
//获取墙体目录下的对象
|
|
GetChildIds(pChild,arIds);
|
|
}
|
|
|
|
AcAxDocLock lock;
|
|
|
|
//创建协同Rec
|
|
AcDbObjectId idRecCob;
|
|
AcDbBlockTableRecord* pRec = NULL;
|
|
AcDbBlockTable* pTable = NULL;
|
|
if ( Acad::eOk == acdbCurDwg()->getBlockTable(pTable,AcDb::kForWrite) )
|
|
{
|
|
if (Acad::eOk == pTable->getAt(m_sProName,idRecCob))
|
|
{
|
|
if ( Acad::eOk == acdbOpenObject((AcDbObject*&)pRec,idRecCob,AcDb::kForRead) )
|
|
{
|
|
//清空分区
|
|
AcDbBlockTableRecordIterator* pIt = NULL;
|
|
pRec->newIterator(pIt);
|
|
|
|
if (pIt != NULL)
|
|
{
|
|
AcDbEntity* pEnt = NULL;
|
|
for (pIt->start();!pIt->done();pIt->step())
|
|
{
|
|
if ( Acad::eOk == pIt->getEntity(pEnt,AcDb::kForWrite) )
|
|
{
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIt;
|
|
}
|
|
pRec->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pRec = new AcDbBlockTableRecord;
|
|
pRec->setName(m_sProName);
|
|
pRec->setOrigin(AcGePoint3d::kOrigin);
|
|
pTable->add(idRecCob,pRec);
|
|
pRec->close();
|
|
}
|
|
pTable->close();
|
|
}
|
|
|
|
CString sCobDwgFile = _T("");
|
|
CString sSysDir = FilePath::GetSysDir();
|
|
sSysDir.MakeLower();
|
|
sSysDir.Replace(_T("\\sys"),_T("\\temp"));
|
|
|
|
//写出成功
|
|
sSysDir += _T("\\");
|
|
sSysDir += m_sProName;
|
|
sSysDir += _T(".dwg");
|
|
|
|
if (idRecCob.isValid())
|
|
{
|
|
AcDbDatabase* pOutputDb = NULL;
|
|
//通过系统变量控制
|
|
|
|
Adesk::Int16 nVal = acdbCurDwg()->useri4();
|
|
acdbCurDwg()->setUseri4(KEY_NOPROTECT);
|
|
acdbCurDwg()->forceWblockDatabaseCopy();
|
|
|
|
if(Acad::eOk == acdbCurDwg()->wblock(pOutputDb,arIds,AcGePoint3d::kOrigin))
|
|
{
|
|
if ( Acad::eOk == pOutputDb->saveAs(sSysDir,true,AcDb::kDHL_1024) )
|
|
{
|
|
sCobDwgFile = sSysDir;
|
|
delete pOutputDb;
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("打包协同区失败!"));
|
|
delete pOutputDb;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/*
|
|
AcDbIdMapping pIdMap;
|
|
if(Acad::eOk == acdbCurDwg()->wblockCloneObjects(arIds,idRecCob,pIdMap))
|
|
{
|
|
AcDbDatabase* pCobDb = NULL;
|
|
if ( Acad::eOk == acdbCurDwg()->wblock(pCobDb,idRecCob) )
|
|
{
|
|
if ( Acad::eOk == pCobDb->saveAs(sSysDir,true,AcDb::kDHL_1024) )
|
|
{
|
|
sCobDwgFile = sSysDir;
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("打包协同区失败!"));
|
|
delete pCobDb;
|
|
return false;
|
|
}
|
|
delete pCobDb;
|
|
}
|
|
|
|
//删除协同区
|
|
if ( Acad::eOk == acdbOpenObject((AcDbObject*&)pRec,idRecCob,AcDb::kForWrite) )
|
|
{
|
|
pRec->erase();
|
|
pRec->close();
|
|
}
|
|
}*/
|
|
|
|
acdbCurDwg()->setUseri4(nVal);
|
|
}
|
|
|
|
if ( !UploadCobInf(sCobDwgFile) )
|
|
{
|
|
AfxMessageBox(_T("发送提资失败!请确认数据库是否连接!"));
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
BOOL CFSTZDlg::UploadCobInf(CString& sCobDwgFile)
|
|
{
|
|
if (sCobDwgFile.IsEmpty())
|
|
return FALSE;
|
|
|
|
CString sIpTo;
|
|
m_wndIPCtrl.GetAddress(m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
|
|
sIpTo.Format(_T("%d.%d.%d.%d"),m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
|
|
|
|
if (m_nField[0] == 0 && m_nField[1] == 0 &&
|
|
m_nField[2] == 0 && m_nField[3] == 0)
|
|
{
|
|
AfxMessageBox(_T("请填写发送地址!"));
|
|
return FALSE;
|
|
}
|
|
|
|
CString sIPMe,sGuid,sTime,sSQL;
|
|
|
|
if (m_sNameFr.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("请填写发送方名称!"));
|
|
return FALSE;
|
|
}
|
|
|
|
if (m_sProNameFr.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("请填写发送方专业!"));
|
|
return FALSE;
|
|
}
|
|
|
|
if (m_sSendTo.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("请填写接收方地址!"));
|
|
return FALSE;
|
|
}
|
|
if (m_sSendTo.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("请填写接收方专业!"));
|
|
return FALSE;
|
|
}
|
|
|
|
CTime tCur = CTime::GetCurrentTime();
|
|
sTime = tCur.Format(_T("%Y-%m-%d:%H-%M-%S"));
|
|
sGuid = IDCreate();
|
|
sIPMe = m_sMeIP;
|
|
|
|
/*acutPrintf(_T("\nNameFr=%s"),m_sNameFr);
|
|
acutPrintf(_T("\nProFr=%s"),m_sProNameFr);
|
|
|
|
acutPrintf(_T("\nIPFr=%s"),sIPMe);
|
|
|
|
acutPrintf(_T("\nSendTo = %s"),m_sSendTo);
|
|
acutPrintf(_T("\nProTo = %s"),m_sProName);
|
|
acutPrintf(_T("\nIPTo = %s"),sIpTo);
|
|
|
|
//类型
|
|
acutPrintf(_T("\nMsgType = %s"),_T("提资"));
|
|
acutPrintf(_T("\nRem = %s"),m_sRem);
|
|
acutPrintf(_T("\nDwgFile = %s"),sCobDwgFile);
|
|
acutPrintf(_T("\nGUID = %s"),sGuid);
|
|
acutPrintf(_T("\nMsgTime = %s"),sTime);
|
|
*/
|
|
|
|
//上传
|
|
BOOL bSuccess = FALSE;
|
|
sSQL.Format(_T("insert into AEC_Co_Msg (NameFr,ProFr,IPFr,SendTo,ProTo,IPTo,MsgType,Rem,GUID,pickup,DwgFile) values \
|
|
('%s','%s','%s','%s','%s','%s','%s','%s','%s',0,?)"),m_sNameFr,m_sProNameFr,sIPMe,m_sSendTo,m_sProName,
|
|
sIpTo,_T("提资"),m_sRem,sGuid);
|
|
|
|
if ( m_pMySQLDb->InsertBlob(sSQL,sCobDwgFile) > 0)
|
|
{
|
|
sSQL.Format(_T("update AEC_Co_Msg set DwgFile=? where GUID='%s'"),sGuid);
|
|
bSuccess = m_pMySQLDb->UpdateBlob(sSQL,sCobDwgFile);
|
|
if (bSuccess == 0)
|
|
bSuccess = TRUE;
|
|
}
|
|
|
|
CFileFind find;
|
|
if (find.FindFile(sCobDwgFile))
|
|
{
|
|
//::DeleteFile(sCobDwgFile);
|
|
}
|
|
return bSuccess;
|
|
}
|
|
|
|
LRESULT CFSTZDlg::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())
|
|
{
|
|
//AfxMessageBox(_T("当前选择不是构件对象!"));
|
|
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 ( 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);
|
|
|
|
UnColorLightThisPick();
|
|
|
|
if (bFind)
|
|
{
|
|
//加入选择集
|
|
ads_name ssPick;
|
|
acdbGetAdsName(ent, idT);
|
|
acedSSAdd(ent, NULL, ssPick);
|
|
|
|
acedSSSetFirst(ssPick, ssPick);
|
|
acedSSFree(ssPick);
|
|
|
|
m_arLastPick.append(idT);
|
|
ColorLightThisPick();
|
|
|
|
acedUpdateDisplay();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
void CFSTZDlg::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_arLastPick.removeAll();
|
|
}
|
|
|
|
void CFSTZDlg::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 CFSTZDlg::OnBnClickedCancel()
|
|
{
|
|
//清空列表
|
|
OnBnClickedButton6();
|
|
EndDialog(IDOK);
|
|
}
|
|
|
|
BOOL CFSTZDlg::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDCLOSE:
|
|
return TRUE;
|
|
default:
|
|
break;
|
|
}
|
|
return CDialog::OnCommand(wParam, lParam);
|
|
}
|
|
|
|
void CFSTZDlg::OnDestroy()
|
|
{
|
|
SaveLocalData();
|
|
|
|
m_wndObjList.DeleteAllItems();
|
|
|
|
CDialog::OnDestroy();
|
|
}
|
|
|
|
void CFSTZDlg::OnCbnSelchangeCombo1()
|
|
{
|
|
UpdateData();
|
|
LoadDxfFile();
|
|
}
|
|
|
|
void CFSTZDlg::OnCbnSelchangeCombo2()
|
|
{
|
|
|
|
}
|
|
|
|
void CFSTZDlg::LoadDxfFile()
|
|
{
|
|
int nPos = -1, nItem = -1;
|
|
CString sName, sDxf, sFileName, sLn, sLocalFile;
|
|
sFileName.Format(_T("\\CFSTZDlg_%s.lst"), m_sProName);
|
|
|
|
sLocalFile = FilePath::GetSysDir() + sFileName;
|
|
CStdioFile file2;
|
|
if (file2.Open(sLocalFile, CFile::modeRead | CFile::typeText))
|
|
{
|
|
m_wndDXFList.DeleteAllItems();
|
|
|
|
while (file2.ReadString(sLn))
|
|
{
|
|
sLn.TrimLeft();
|
|
sLn.TrimRight();
|
|
|
|
nPos = sLn.Find(_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();
|
|
}
|
|
}
|
|
|
|
void CFSTZDlg::OnBnClickedButton1()
|
|
{
|
|
CAcModuleResourceOverride myResources;
|
|
CZHZLDLG dlg;
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
UpdateData();
|
|
|
|
m_sSendTo = dlg.m_sName;
|
|
int nSel = m_wndProCombox.FindString(0,dlg.m_sPro);
|
|
if (nSel != -1)
|
|
{
|
|
m_wndProCombox.SetCurSel(nSel);
|
|
|
|
CStringArray arVls;
|
|
CoreTools::SplitStrintToArray(dlg.m_sIP, arVls, _T('.'));
|
|
|
|
if (arVls.GetSize() >= 4)
|
|
{
|
|
m_nField[0] = _ttoi(arVls.GetAt(0));
|
|
m_nField[1] = _ttoi(arVls.GetAt(1));
|
|
m_nField[2] = _ttoi(arVls.GetAt(2));
|
|
m_nField[3] = _ttoi(arVls.GetAt(3));
|
|
m_wndIPCtrl.SetAddress(m_nField[0], m_nField[1], m_nField[2], m_nField[3]);
|
|
}
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
}
|
|
|
|
void CFSTZDlg::OnBnClickedButton13()
|
|
{
|
|
acedPostCommand(_T("PL_BHCZ "));
|
|
} |