// LoadTchDlg.cpp : implementation file // #include "stdafx.h" //#include "DocReactor.h" #include "dbhatch.h" #include "DbCornerWin.h" //#include "arxtools.h" #include "DbOpening.h" #include "LoadTchDlg.h" #include "TAPI.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif void ColumnBlk2Null(const TCHAR* szBlkName) { AcDbBlockTableRecord *pRecord = NULL; AcDbBlockTable* pBlockTable = NULL; acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead); if(!pBlockTable) return; if(Acad::eOk != pBlockTable->getAt(szBlkName, pRecord, AcDb::kForWrite)){ pBlockTable->close(); return; } pBlockTable->close(); if(!pRecord) return; AcDbBlockTableRecordIterator *pIterator; pRecord->newIterator(pIterator); AcDbObjectId objId1 = NULL; AcDbObjectId objId2 = NULL; AcDbObjectId objId3 = NULL; AcDbObjectId objId4 = NULL; if(!pIterator){ pRecord->close(); return; } for(pIterator->start(); !pIterator->done(); pIterator->step()){ AcDbEntity *pEnt = NULL; pIterator->getEntity(pEnt, AcDb::kForWrite); if(pEnt){ AcDbHatch *pHatch = NULL; //群亚柱子是HATCH, 直接删除 if(pHatch = AcDbHatch::cast(pEnt)) pHatch->erase(); //上华3方柱子是SOLID, 理正方柱子是SOLID+4根线 AcDbSolid *pSolid = NULL; if(_tcsicmp(szBlkName, _T("_FZH")) == 0){ if(pSolid = AcDbSolid::cast(pEnt)){ XPoint pt1, pt2, pt3, pt4; pSolid->getPointAt(0, pt1); pSolid->getPointAt(1, pt2); pSolid->getPointAt(2, pt3); pSolid->getPointAt(3, pt4); AcDbLine *pL1 = new AcDbLine(pt1, pt2); AcDbLine *pL2 = new AcDbLine(pt2, pt4); AcDbLine *pL3 = new AcDbLine(pt3, pt4); AcDbLine *pL4 = new AcDbLine(pt1, pt3); pRecord->appendAcDbEntity(objId1, pL1); pRecord->appendAcDbEntity(objId2, pL2); pRecord->appendAcDbEntity(objId3, pL3); pRecord->appendAcDbEntity(objId4, pL4); pL1->close(); pL2->close(); pL3->close(); pL4->close(); pSolid->erase(); pEnt->close(); break; } } //上华3圆柱子是PLINE, 理正圆柱子是图块"*U" else if(_tcsicmp(szBlkName, _T("_YZH")) == 0){ AcDbBlockReference *pRef = NULL; AcDbPolyline *pline = NULL; if(pRef = AcDbBlockReference::cast(pEnt)) pRef->erase(); if(pline = AcDbPolyline::cast(pEnt)){ XPoint ptCir = pRecord->origin(); AcDbCircle *pCir = new AcDbCircle(ptCir, AcGeVector3d::kZAxis, 0.5); pRecord->appendAcDbEntity(objId4, pCir); pCir->close(); pline->erase(); pEnt->close(); break; } } pEnt->close(); } } pRecord->close(); delete pIterator; } void Column2Null() { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ss(SS_FREE); ColumnBlk2Null(_T("_FZH")); ColumnBlk2Null(_T("_YZH")); DocSetIsSolidFill(FALSE); DocSetIsLineWeight(FALSE); ss.Get(_T("X"), NULL, NULL, rbMask); UpdateGraphic(ss); } void DelWindowText() { RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ss(SS_FREE); PickSet ssFm(SS_FREE); if(SelectEntities(_T("\n请选择需要删除编号的门窗:<退出>"), ss, rbMask) == RTNORM){ long len = ss.Length(); for(long i=0;iattributeIterator(); for(pIterator->start();!pIterator->done();pIterator->step()){ AcDbEntity *pEnt = NULL; AcDbAttribute *pAtt = NULL; AcDbObjectId att_id; att_id = pIterator->objectId(); acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite); pAtt = AcDbAttribute::cast(pEnt); if(pAtt){ TCHAR *szText = pAtt->textString(); CString csName = szText; delete szText; if(csName.Find(_T("FM")) < 0 && csName.Find(_T("FC")) < 0 && csName.Find(_T("FJL")) < 0) pAtt->setInvisible(!pAtt->isInvisible()); else ssFm += ent; } pEnt->close(); } delete pIterator; pBlockRef->close(); } else{ OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbOpening, pOpening); if(pOpening) { CString csName; csName = pOpening->GetLabel(); if(csName.Find(_T("FM")) < 0 && csName.Find(_T("FC")) < 0 && csName.Find(_T("FJL")) < 0) pOpening->SetLabelVisible(false); else ssFm += ent; } OPENOBJ_END(); OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbCornerWin, pOpening); if(pOpening) { CString csName; csName = pOpening->GetLabel(); if(csName.Find(_T("FC")) < 0) pOpening->SetHideLabel(TRUE); else ssFm += ent; } OPENOBJ_END(); } } long len2 = ssFm.Length(); if(len2 == 0) return; TCHAR chText[256]; ads_getstring(NULL, _T("\n发现有防火门窗,是否也同时删除门窗编号?: "), chText); if(_tcsicmp(chText, _T("Y")) == 0) { for(long i=0;iattributeIterator(); for(pIterator->start();!pIterator->done();pIterator->step()){ AcDbEntity *pEnt = NULL; AcDbAttribute *pAtt = NULL; AcDbObjectId att_id; att_id = pIterator->objectId(); acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite); pAtt = AcDbAttribute::cast(pEnt); if(pAtt){ pAtt->setInvisible(!pAtt->isInvisible()); } pEnt->close(); } delete pIterator; pBlockRef->close(); } else{ OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbOpening, pOpening); if(pOpening) { pOpening->SetLabelVisible(false); } OPENOBJ_END(); OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbCornerWin, pOpening); if(pOpening) { pOpening->SetHideLabel(TRUE); } OPENOBJ_END(); } } } } } ///////////////////////////////////////////////////////////////////////////// // CLoadTchDlg dialog void LoadTch() { CAcModuleResourceOverride vTemp; SetLayer0UnLocked(); CLoadTchDlg dlg; if(dlg.DoModal() != IDOK) return; PickSet ssAll(SS_FREE); if(SelectEntities(_T("\n请选择建筑图范围<整张图>"), ssAll, RBList()) != RTNORM) ssAll.Get(_T("X"), NULL, NULL, NULL); UNDOB; PickSet sswall(SS_FREE), ssReserve(SS_FREE), ssThick(SS_FREE); long sslen = ssAll.Length(); for(long m=0;massociative()){ if(pEnt->upgradeOpen()==Acad::eOk) { pEnt->setAssociative(false); pEnt->downgradeOpen(); } } pEnt->close(); } } TCHAR szLayer[256]; entTmp.GetData(8, szLayer); if(_tcsicmp(szLayer, LAY_TEXT) == 0) ssReserve += entTmp; else if(_tcsicmp(szLayer, _T("TCH_保留")) == 0 || _tcsicmp(szLayer, LAY_BALCONY) == 0) ssReserve += entTmp; if(_tcsicmp(szLayer, _T("PUB_WALL")) == 0){ ssThick += entTmp; } if(dlg.m_bColumn){ if(_tcsicmp(szLayer, LAY_COLU) == 0){ ssReserve += entTmp; sswall += entTmp; continue; } } if(dlg.m_bDote){ if(_tcsicmp(szLayer, LAY_AXIS) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bLvtry){ if(_tcsicmp(szLayer, LAY_SANIWARE) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bPubTitle){ if(_tcsicmp(szLayer, _T("PUB_TITLE")) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bSpace){ if(_tcsicmp(szLayer, LAY_SPACE) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bStair){ if(_tcsicmp(szLayer, LAY_STAIR) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bWall){ if(_tcsicmp(szLayer, LAY_WALL) == 0){ ssReserve += entTmp; sswall += entTmp; continue; } } if(dlg.m_bWindow){ if(_tcsicmp(szLayer, LAY_WIN) == 0){ ssReserve += entTmp; if(entTmp.Is(_T("INSERT"))) SetBlkAttrText(entTmp, _T(""), _T("A"), 0.0, FALSE); continue; } } if(dlg.m_bAxis){ if(_tcsicmp(szLayer, LAY_DIMAX) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bText){ if(_tcsicmp(szLayer, _T("PUB_TEXT")) == 0){ ssReserve += entTmp; continue; } } if(dlg.m_bDim){//要PUB_DIM层的图元 if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0){ ssReserve += entTmp; continue; } } // else{ //不要PUB_DIM层的图元, 删除所有尺寸标注, 保留符号标注 // if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0 && !entTmp.Is(_T("DIMENSION")) && !entTmp.Is(_T("ATS_DIMENSION"))){ // ssReserve += entTmp; // continue; // } // } //保留其它图层 if(dlg.m_iMode == 1){ BOOL bOther = TRUE; for(int j=0;jEnableWindow(TRUE); GetParent()->SetFocus(); GetParent()->SetActiveWindow(); ShowWindow(SW_HIDE); } else { GetParent()->EnableWindow(FALSE); EnableWindow(TRUE); SetActiveWindow(); ShowWindow(SW_SHOW); } } extern void ChangeColor(PickSet &ss, int iCol); extern int GetLayerColorByDwg(const TCHAR*szLayer); void CLoadTchDlg::OnButtonWall() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); Entity entSel; PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); PickSet ss(SS_FREE); if(ret != RTNORM) continue; if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(LAY_WALL); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonOpening() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); if(ret != RTNORM) continue; PickSet ss(SS_FREE); if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(InitLayer(LAY_WIN)); // cet 2017.8.8 modify 门窗图层没有创建时,转换失败 pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonColumn() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); if(ret != RTNORM) continue; PickSet ss(SS_FREE); if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(LAY_COLU); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonAxis() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); if(ret != RTNORM) continue; PickSet ss(SS_FREE); if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(_T("AXIS")); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonText() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); if(ret != RTNORM) continue; PickSet ss(SS_FREE); if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(_T("PUB_TEXT")); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonTchReserve() //建筑保留 { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask(RTDXF0, _T("*"), 8, _T("TCH_保留"), NULL); PickSet sswall(SS_FREE), ssNewWall(SS_FREE); sswall.Get(_T("X"), NULL, NULL, rbMask); sswall.Redraw(3); Entity entSel; int ret = RTNORM; while(ret == RTNORM){ ret = SelectEntity(_T("\n请选择需要保留的图元(上华建筑保留图元已被虚显, ESC取消已修改操作):<确定>"), entSel, RBList()); if(ret != RTNORM) continue; sswall += entSel; ssNewWall += entSel; entSel.Redraw(3); } if(ret != RTCAN){ InitLayer(_T("TCH_保留")); long sslen = ssNewWall.Length(); for(long j=0;jsetLayer(_T("TCH_保留")); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonStair() { UpdateData(TRUE); HideDialog(TRUE); RBList rbMask = ads_buildlist( -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T(""), -4, _T("or>"), NULL); PickSet ssAll(SS_FREE), sswall(SS_FREE), ssNewWall(SS_FREE); ssAll.Get(_T("X"), NULL, NULL, rbMask); long len = ssAll.Length(); for(long i=0;i"), entSel, rbMask); if(ret != RTNORM) continue; PickSet ss(SS_FREE); if(m_bAll){ TCHAR szSelLayer[256]; entSel.GetData(8, szSelLayer); for(long i=0;isetLayer(_T("STAIR")); pEnt->close(); } } } sswall.Redraw(4); HideDialog(FALSE); } void CLoadTchDlg::OnButtonPreview() { UpdateData(TRUE); UpdaeDelLayers(); HideDialog(TRUE); PickSet ssAll(SS_FREE); if(SelectEntities(_T("\n请选择建筑图范围<整张图>"), ssAll, RBList()) != RTNORM) ssAll.Get(_T("X"), NULL, NULL, NULL); PickSet sswall(SS_FREE), ssReserve(SS_FREE), ssThick(SS_FREE); long sslen = ssAll.Length(); for(long m=0;massociative()){ pEnt->setAssociative(false); } pEnt->close(); } } TCHAR szLayer[256]; entTmp.GetData(8, szLayer); if(_tcsicmp(szLayer, LAY_TEXT) == 0) ssReserve += entTmp; else if(_tcsicmp(szLayer, _T("TCH_保留")) == 0 || _tcsicmp(szLayer, LAY_BALCONY) == 0) ssReserve += entTmp; if(_tcsicmp(szLayer, _T("PUB_WALL")) == 0) ssThick += entTmp; if(m_bColumn){ if(_tcsicmp(szLayer, LAY_COLU) == 0){ ssReserve += entTmp; sswall += entTmp; } } if(m_bDote){ if(_tcsicmp(szLayer, LAY_AXIS) == 0) ssReserve += entTmp; } if(m_bLvtry){ if(_tcsicmp(szLayer, LAY_SANIWARE) == 0) ssReserve += entTmp; } if(m_bPubTitle){ if(_tcsicmp(szLayer, _T("PUB_TITLE")) == 0) ssReserve += entTmp; } if(m_bSpace){ if(_tcsicmp(szLayer, LAY_SPACE) == 0) ssReserve += entTmp; } if(m_bStair){ if(_tcsicmp(szLayer, LAY_STAIR) == 0) ssReserve += entTmp; } if(m_bWall){ if(_tcsicmp(szLayer, LAY_WALL) == 0) ssReserve += entTmp; } if(m_bWindow){ if(_tcsicmp(szLayer, LAY_WIN) == 0) ssReserve += entTmp; } if(m_bAxis){ if(_tcsicmp(szLayer, LAY_DIMAX) == 0) ssReserve += entTmp; } if(m_bText){ if(_tcsicmp(szLayer, _T("PUB_TEXT")) == 0) ssReserve += entTmp; } if(m_bDim){//要PUB_DIM层的图元 if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0) ssReserve += entTmp; } // else{ //不要PUB_DIM层的图元, 删除所有尺寸标注, 保留符号标注 // if(_tcsicmp(szLayer, _T("PUB_DIM")) == 0 && !entTmp.Is(_T("DIMENSION")) && !entTmp.Is(_T("ATS_DIMENSION"))) // ssReserve += entTmp; // } //保留其它图层 if(m_iMode == 1){ BOOL bOther = TRUE; for(int j=0;j