#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(lpszCols[i]); m_wndObjList.InsertColumn(i,&lvColumn); } CList 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 ")); }