// OpenLayerDlg.cpp : implementation file // #include "stdafx.h" #include "tapi.h" #include "twtdef.h" #include "DbPsConfig.h" #include //#include "arxtools.h" #include "OpenLayerDlg.h" #include "ChangeLayDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern XStringList g_lstCloseLay; void SetEntityLayer(Entity ent, const TCHAR* szLayer) { AcDbObjectId eId; AcDbEntity *pEnt = NULL; acdbGetObjectId(eId, ent); acdbOpenObject(pEnt, eId, AcDb::kForWrite); if(pEnt){ pEnt->setLayer(szLayer); pEnt->close(); } } void SetTArchLayTag() { PickSet ss(SS_FREE); if(SelectEntities(_T("请选择要设置为建筑标识的图元 <退出>:"), ss, RBList()) != RTNORM) return; long sslen = ss.Length(); acedSetStatusBarProgressMeter(_T("设置中..."), 0, sslen); for(long j=0;j:"), ss, RBList()) != RTNORM) return; long sslen = ss.Length(); acedSetStatusBarProgressMeter(_T("清除中..."), 0, sslen); for(long j=0;j:"), ss, RBList()) != RTNORM) return; CAcModuleResourceOverride exm; CChangeLayDlg dlg; if(dlg.DoModal() != IDOK) return; long sslen = ss.Length(); if(dlg.m_csRet == "tg"){ //把图元打上建筑标记,不去修改图层 // XStringList lst; // lst.Append(tstrnew(_T("DOTE"))); // lst.Append(tstrnew(_T("BALCONY"))); // lst.Append(tstrnew(_T("TITLE"))); // lst.Append(tstrnew(_T("COLUMN"))); // lst.Append(tstrnew(_T("WINDOW"))); // lst.Append(tstrnew(_T("AXIS"))); // lst.Append(tstrnew(_T("GROUND"))); // lst.Append(tstrnew(_T("WALL"))); // lst.Append(tstrnew(_T("SURFACE"))); // lst.Append(tstrnew(_T("ROOF"))); // lst.Append(tstrnew(_T("STAIR"))); // lst.Append(tstrnew(_T("LVTRY"))); // lst.Append(tstrnew(_T("RAIL"))); // lst.Append(tstrnew(_T("HANDRAIL"))); // lst.Append(tstrnew(_T("SPACE"))); // lst.Append(tstrnew(_T("CAMERA"))); // lst.Append(tstrnew(_T("AXIS_TEXT"))); // lst.Append(tstrnew(_T("PUB_DIM"))); // lst.Append(tstrnew(_T("PUB_TEXT"))); // lst.Append(tstrnew(_T("PUB_WINDW"))); // lst.Append(tstrnew(_T("PUB_HATCH"))); // lst.Append(tstrnew(_T("PUB_TITLE"))); // lst.Append(tstrnew(_T("WINDOW_TEXT"))); // lst.Append(tstrnew(_T("S_WALL"))); // lst.Append(tstrnew(_T("S_WINDOW"))); // lst.Append(tstrnew(_T("S_BLOCK"))); // lst.Append(tstrnew(_T("S_STAIR"))); // lst.Append(tstrnew(_T("E_FLOOR"))); // lst.Append(tstrnew(_T("E_LINE"))); // lst.Append(tstrnew(_T("E_WINDOW"))); // lst.Append(tstrnew(_T("E_BLOCK"))); // lst.Append(tstrnew(_T("E_STAIR"))); // lst.Append(tstrnew(_T("BASE"))); // lst.Append(tstrnew(_T("WALL1"))); // lst.Append(tstrnew(_T("FLOOR"))); // lst.Append(tstrnew(_T("EAVES"))); // lst.Append(tstrnew(_T("DIM"))); // lst.Append(tstrnew(_T("TEXT"))); // lst.Append(tstrnew(_T("WINDW"))); // lst.Append(tstrnew(_T("HATCH"))); // lst.Append(tstrnew(_T("GLASS"))); // lst.Append(tstrnew(_T("OTHER"))); // lst.Append(tstrnew(_T("PUB_WALL"))); for(long j=0;j"), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask2); long len2 = ssAll.Length(); for(long i=0;i"), entFirst, RBList()) != RTNORM) return; TCHAR szLay1[256], szLay2[256]; entFirst.GetData(8, szLay1); if(SelectEntity(_T("\n请选择要合并到图层(目标)上的任意图元:<退出>"), entSecond, RBList()) != RTNORM) return; entSecond.GetData(8, szLay2); if(_tcsicmp(szLay1, szLay2) == 0){ adsout << _T("\n2个图层一致,无需合并"); return; } if(_tcsicmp(szLay1, _T("0")) == 0){ adsout << _T("\n无法删除0层"); return; } AcDbObjectId idLayer = GetLayerIdFromString(szLay1); OPENOBJ_BEGIN(idLayer, AcDb::kForRead, AcDbLayerTableRecord, pLayer); if(pLayer) { if(pLayer->isLocked()) { adsout << _T("\n 无法删除已经锁定的图层!"); return; } } OPENOBJ_END(); CString csPrompt; csPrompt.Format(_T("\n您确定要把%s图层合并到%s图层上吗? 且删除%s图层?"), szLay1, szLay2, szLay1); int nRes = AfxMessageBox(csPrompt, MB_YESNO | MB_ICONWARNING); if (nRes != IDYES) return; RBList rbMask(RTDXF0, _T("*"), 8, szLay1, NULL); PickSet ssAll(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;isetLayer(szLay2); } OPENOBJ_END(); } xg_getvar(_T("CLAYER"), szLay2); if(_tcsicmp(szLay1, szLay2) == 0) xg_setvar(_T("CLAYER"), _T("0")); AcDbObjectIdArray objIds; objIds.append(idLayer); Adesk::UInt32* count = new Adesk::UInt32[1]; count[0] = 0; AcDbDatabase *pCurDwg = acdbCurDwg(); Acad::ErrorStatus es = pCurDwg->countHardReferences(objIds, count); if (es != Acad::eOk || count[0] > 0) { delete [] count; adsout << _T("\n 图层存在引用.无法删除图层!"); return; } delete [] count; OPENOBJ_BEGIN(idLayer, AcDb::kForWrite, AcDbLayerTableRecord, pLayer); if(pLayer) { Acad::ErrorStatus es = pLayer->erase(); if(es != Acad::eOk) { adsout << _T("\n 无法删除图层记录!"); } } OPENOBJ_END(); } ///////////////////////////////////////////////////////////////////////////// // 图层转换 ///////////////////////////////////////////////////////////////////////////// void ConvertLayer() { Entity entFirst, entSecond; if(SelectEntity(_T("\n请选择要转换图层(源)上的任意图元:<转换成上华图层>"), entFirst, RBList()) != RTNORM){ if(g_nProductId==14){ acDocManager->sendStringToExecute(curDoc(), _T("ChangeLayer2Twt "), true, false, false); } return; } TCHAR szLay1[256], szLay2[256]; CString csLayDes; entFirst.GetData(8, szLay1); if(SelectEntity(_T("\n请选择要转换图层(目标)上的任意图元:<转换成上华相应图层>"), entSecond, RBList()) != RTNORM){ if(_tcsicmp(szLay1, _T("GJ")) == 0) csLayDes = LAY_EQUIP_PIPE; else if(_tcsicmp(szLay1, _T("GJ-阀门")) == 0) csLayDes = LAY_EQUIP_VALVE; else if(_tcsicmp(szLay1, _T("FL")) == 0) csLayDes = LAY_TWT_FLANGE; else if(_tcsicmp(szLay1, _T("EQ-喷淋")) == 0) csLayDes = LAY_EQUIP_SPRINKLE; else if(_tcsicmp(szLay1, _T("EQ-消防")) == 0) csLayDes = LAY_EQUIP_HYDRANT; else if(_tcsicmp(szLay1, _T("EQ-室外")) == 0) csLayDes = LAY_TWT_OUT; else if(_tcsicmp(szLay1, _T("SX")) == 0) csLayDes = LAY_TWT_WATERTANK; else if(_tcsicmp(szLay1, _T("SB")) == 0) csLayDes = LAY_TWT_PUMP; else if(g_nProductId==14){ RBList rbMask(RTDXF0, _T("*"), 8, szLay1, NULL); CAcModuleResourceOverride exm; CChangeLayDlg dlg; if(dlg.DoModal() != IDOK) return; InitLayer(dlg.m_csRet); PickSet ss(SS_FREE); ss.Get(_T("X"), NULL, NULL, rbMask); long len = ss.Length(); for(long i=0;i -1) continue; if(!IsLayerOn((const TCHAR *)csLay)){ m_listCtrl.InsertItem ( n, csLay, 0 ); for(int j=0;jm_csEName; if(csLay == csTmp){ csDesName = m_lstAllLayer[j]->m_csCName; break; } } m_listCtrl.SetItemText ( n, 1, csDesName); n++; } } n = 0; BOOL bHasBlk = FALSE; for(i=0;im_csEName; int idx = csLay.Find(_T("|")); CString csLayTmp = csLay.Right(csLay.GetLength() - idx - 1); if(csLayTmp == csTmp){ csDesName = m_lstAllLayer[j]->m_csCName; break; } } m_listBlk.SetItemText ( n, 1, csDesName); bHasBlk = TRUE; n++; } } //SR 2010-11-8 增加默认 int num = g_lstCloseLay.Length(); for(int m=0;mGetWindowRect(&rect); rect.right -= 300; this->MoveWindow(&rect); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COpenLayerDlg::OnCheckAll() { UpdateData(TRUE); int len = m_listCtrl.GetItemCount(); for(int i=0;iflushGraphics(); //acad 刷新 acedUpdateDisplay(); CDialog::OnOK(); } BOOL IsPipeLayer(const CString &sLayer) { if (sLayer.Compare(LAY_PIPE_FEED) == 0 || sLayer.Compare(LAY_PIPE_FEED2) == 0 || sLayer.Compare(LAY_PIPE_FEED3) == 0 || sLayer.Compare(LAY_VPIPE_FEED) == 0 || sLayer.Compare(LAY_VPIPE_FEED2) == 0 || sLayer.Compare(LAY_VPIPE_FEED3) == 0 || sLayer.Compare(LAY_PIPE_HEADFEED) == 0 || sLayer.Compare(LAY_PIPE_HEADFEED2) == 0 || sLayer.Compare(LAY_PIPE_HEADFEED3) == 0 || sLayer.Compare(LAY_VPIPE_HEADFEED) == 0 || sLayer.Compare(LAY_VPIPE_HEADFEED2) == 0 || sLayer.Compare(LAY_VPIPE_HEADFEED3) == 0 || sLayer.Compare(LAY_PIPE_HEADBACK) == 0 || sLayer.Compare(LAY_PIPE_HEADBACK2) == 0 || sLayer.Compare(LAY_PIPE_HEADBACK3) == 0 || sLayer.Compare(LAY_VPIPE_HEADBACK) == 0 || sLayer.Compare(LAY_VPIPE_HEADBACK2) == 0 || sLayer.Compare(LAY_VPIPE_HEADBACK3) == 0 || sLayer.Compare(LAY_PIPE_DIRT) == 0 || sLayer.Compare(LAY_VPIPE_DIRT) == 0 || sLayer.Compare(LAY_PIPE_USELESS) == 0 || sLayer.Compare(LAY_VPIPE_USELESS) == 0 || sLayer.Compare(LAY_PIPE_RAIN) == 0 || sLayer.Compare(LAY_VPIPE_RAIN) == 0 || sLayer.Compare(LAY_PIPE_USED) == 0 || sLayer.Compare(LAY_VPIPE_USED) == 0 || sLayer.Compare(LAY_PIPE_FIRE) == 0 || sLayer.Compare(LAY_PIPE_FIRE2) == 0 || sLayer.Compare(LAY_PIPE_FIRE3) == 0 || sLayer.Compare(LAY_PIPE_SPRINKLE) == 0 || sLayer.Compare(LAY_VPIPE_SPRINKLE) == 0 || sLayer.Compare(LAY_PIPE_COAGULATE) == 0 || sLayer.Compare(LAY_VPIPE_COAGULATE) == 0 || sLayer.Compare(LAY_PIPE_DRINK) == 0 || sLayer.Compare(LAY_VPIPE_DRINK) == 0 || sLayer.Compare(LAY_PIPE_PRESSDIRT) == 0 || sLayer.Compare(LAY_VPIPE_PRESSDIRT) == 0 || sLayer.Compare(LAY_PIPE_PRESSUSELESS) == 0 || sLayer.Compare(LAY_VPIPE_PRESSUSELESS) == 0 || sLayer.Compare(LAY_PIPE_PRESSRAIN) == 0 || sLayer.Compare(LAY_VPIPE_PRESSRAIN) == 0 || sLayer.Compare(LAY_PIPE_OTHER) == 0 || sLayer.Compare(LAY_VPIPE_OTHER) == 0 || sLayer.Compare(LAY_PIPE_USER1) == 0 || sLayer.Compare(LAY_PIPE_USER2) == 0 || sLayer.Compare(LAY_PIPE_USER3) == 0 || sLayer.Compare(LAY_PIPE_USER4) == 0 || sLayer.Compare(LAY_PIPE_USER5) == 0 || sLayer.Compare(LAY_PIPE_USER6) == 0 || sLayer.Compare(LAY_PIPE_USER7) == 0 || sLayer.Compare(LAY_PIPE_USER8) == 0 || sLayer.Compare(LAY_VPIPE_USER1) == 0 || sLayer.Compare(LAY_VPIPE_USER2) == 0 || sLayer.Compare(LAY_VPIPE_USER3) == 0 || sLayer.Compare(LAY_VPIPE_USER4) == 0 || sLayer.Compare(LAY_VPIPE_USER5) == 0 || sLayer.Compare(LAY_VPIPE_USER6) == 0 || sLayer.Compare(LAY_VPIPE_USER7) == 0 || sLayer.Compare(LAY_VPIPE_USER5) == 0) { return TRUE; } return FALSE; } void ShowEntity(const CString &sLayer, BOOL bOpen) { if (IsPipeLayer(sLayer)) { AcDbDatabase *dwg = acdbCurDwg(); AcAxDocLock docLock(dwg); TDbPsConfig *pConfig = GetDwgPsGlobal(AcDb::kForWrite); if (pConfig != NULL) { pConfig->ShowSystem(GetPipeSysByLayer(sLayer), bOpen); pConfig->close(); } } RBList rbMask(8, sLayer, NULL); PickSet ssAll(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); for (long i = 0; i < ssAll.Length(); i++) { OPENOBJ_BEGIN(ssAll[i], AcDb::kForRead, AcDbEntity, pEnt); if(pEnt != NULL) { if(pEnt->visibility() == AcDb::kInvisible){ if(pEnt->upgradeOpen()==Acad::eOk) { pEnt->setVisibility(AcDb::kVisible); pEnt->downgradeOpen(); } } } OPENOBJ_END(); } }