#include "stdafx.h" #include "UniteLayer.h" #include "Resource.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // 获得层表管理器的记录,add xly 100617 void GetLayerDes(CStringArray &curLayerNameAry, CStringArray &layerCon); // 创建层名为csCurLayer的新图层 void CreateLayer(const CString &csCurLayer); // 判断图层是否被锁定 bool IsLockLayer(CString &csCurLayer); // add by xly on 101229 判断图层是本地图层和外部参照图层,识别“|”“$” bool IsExternalLayer(CString csLayerName); CUniteLayer::CUniteLayer(CWnd* pParent /*=NULL*/) : GlwCAcUiDialog(CUniteLayer::IDD, pParent) { //{{AFX_DATA_INIT(CUniteLayer) m_csCmbText = _T(""); //}}AFX_DATA_INIT } CUniteLayer::~CUniteLayer() { m_ssPickEnt.Free(); } void CUniteLayer::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CUniteLayer) DDX_Control(pDX, IDC_LIST_LAYER, m_wndLstLayer); DDX_Control(pDX, IDC_CMB_GOALLAYER, m_wndCmbGoal); DDX_CBString(pDX, IDC_CMB_GOALLAYER, m_csCmbText); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CUniteLayer, GlwCAcUiDialog) ON_BN_CLICKED(IDC_BUT_OBJUNITE, OnButtonUniteObj) ON_BN_CLICKED(IDC_BUT_OBJGOAL, OnButtonGoalObj) ON_BN_CLICKED(IDC_OK, OnOK) END_MESSAGE_MAP() // CUniteLayer message handlers BOOL CUniteLayer::OnInitDialog() { UpdateData(TRUE); CDialog::OnInitDialog(); // 图层列表初始化设置 CRect rect; m_wndLstLayer.GetClientRect(rect); // 获得图层管理器的图层名以及列表 GetAllLayer(); // 设置列表控件的checkbox模式 m_wndLstLayer.SetExtendedStyle(LVS_EX_CHECKBOXES); m_wndLstLayer.InsertColumn(0, _T("层名"), LVCFMT_LEFT, rect.Width()/2); m_wndLstLayer.InsertColumn(1, _T("描述"), LVCFMT_LEFT, rect.Width()*7/16); int nSize = m_csAryLayerAll.GetSize(), nSize1 = m_csAryLayerCon.GetSize(); for(int i = 0; i:")); int iRet = SelectEntities(csPromt, m_ssPickEnt, RBList()); if(iRet != RTNORM) { m_ssPickEnt.Free(); ShowDialog(true); return; } // 将选择到的图层在列表中标记 long l = 0; bool bIsLocked; long nSize = m_ssPickEnt.Length(); for(l = 0; llayer(); bIsLocked = IsLockLayer(csCurLayer); // 被选实体所在的图层在列表中被选 this->SetListSel(csCurLayer); if(bIsLocked)// 图层被锁定 { continue; } } OPENOBJ_END(); } if (bIsLocked) { acutPrintf(_T("\n锁定图层请解锁后再操作!")); } // modify by xly on 110331 解决操作过程中存在闪烁现象 // 更新显示 //acedCommand(RTSTR, _T("REGEN"), RTNONE); acedRedraw(NULL,1); ShowDialog(true); } // 图中选取目标图层的对象 void CUniteLayer::OnButtonGoalObj() { UpdateData(TRUE); // 设置对话框隐藏 ShowDialog(false); // 目标实体 TEntitySet ent; // 点取位置 TADSGePoint3d ptSel; if((SelectEntity1(_T("\n请选择目标图层的对象<返回>:"), ent, ptSel, RBList())) != RTNORM) { ShowDialog(true); return; } // 获得目标实体的图层 TCHAR szSelLay[256]; ent.GetData(8, szSelLay); // 设置对话框中的目标图层 this->SetGoalLayer(szSelLay); ShowDialog(true); } // 确定按钮实现 void CUniteLayer::OnOK() { UpdateData(TRUE); int iTaskCount = m_wndLstLayer.GetItemCount(); // 获得列表框中的列数 bool bFlagSel = false, // 标记是否有需合并的图层 bFlagGaol = false; // 标记目标图层是否是已有图层 // 遍历列表中的数据,查找被选中图层 CString csName; int i = 0; for (i = 0; i < iTaskCount; i++) { // 获得列表中的图层名 csName = m_wndLstLayer.GetItemText(i,0); if(csName == m_csCmbText) // 目标图层是否存在 { bFlagGaol = true; } if(m_wndLstLayer.GetCheck(i)) // 需合并图层是否存在 { bFlagSel = true; } } if(!bFlagSel) // 未设置需合并图层 { MessageBox(_T("未设置需合并图层!")); return; } if(m_csCmbText.IsEmpty()) // 未设置目标图层 { MessageBox(_T("未设置目标图层!")); return; } else // 已设置目标图层 { if(!bFlagGaol) // 目标图层不存在 { i = AfxMessageBox(_T("该图层不存在,是否创建?"), MB_YESNO); if(i != IDYES) // 创建图层 { return; } CreateLayer(m_csCmbText);// 创建图层函数 } // 合并到目标图层 SetLayer(m_csCmbText); m_ssPickEnt.Free(); CDialog::OnOK(); } } // 设置选中对象所在的图层被选择 void CUniteLayer::SetListSel(CString csName) { UpdateData(TRUE); // 遍历列表中的数据,查找被选中图层 int iTaskCount = m_wndLstLayer.GetItemCount(); CString csListName; for (int i = 0; i < iTaskCount; i++) { csListName = m_wndLstLayer.GetItemText(i, 0); // modify by xly on 110441 忽略大小写比较 //if(csListName == csName)// 选中对象的图层在列表中 if(csListName.CompareNoCase(csName)==0)// 选中对象的图层在列表中 { m_wndLstLayer.SetCheck(i, TRUE); } } } // 目标图层设置 void CUniteLayer::SetGoalLayer(CString csName) { UpdateData(TRUE); // 遍历下拉列表中的数据,查找目标图层 m_csCmbText = csName; UpdateData(FALSE); } // 获得图层管理器中的所有图层和图层描述 void CUniteLayer::GetAllLayer() { // 遍历图之中的层表去掉外部参照部分的层 XSymbolList lstLayer(_T("LAYER")); long l = 0; for(l = 0; l pushVar(g_bMonitorDbAction, FALSE); // 获得在csLayerSelName层中的所有对象存放在ss PickSet ss(SS_FREE); ss.Get(_T("X"), NULL, NULL, RBList(8, csLayerSelName, NULL)); for (long j=0; jlayer(); if (pEnt->upgradeOpen() == Acad::eOk) { pEnt->setLayer(csLayerName); // 设置目标图层 pEnt->downgradeOpen(); } } OPENOBJ_END(); } } } } } //根据bShow显示和隐藏对话框,true:显示对话框;false:隐藏对话框 void CUniteLayer::ShowDialog(bool bShow) { if (bShow)// 对话框显示 { this->ShowWindow(SW_SHOW); this->SetFocus(); } else // 对话框隐藏 { this->GetParent()->EnableWindow(true); this->GetParent()->SetFocus(); this->GetParent()->SetActiveWindow(); this->ShowWindow(SW_HIDE); } }