#include "stdafx.h" #include "OpeningValidation.h" #include "Resource.h" #include "OpeningValidateDlg.h" #include "OpeningLabelData.h" TOpeningValidation::TOpeningValidation() { m_nFlag=0; m_nWidth=0; m_nHeight=0; } BOOL TOpeningValidation::ValidateLabel(const TDbOpening *pOpening) { if (m_nFlag) return FALSE; // sg modify 110228,根据8.5需求,将类别改成类型 // if (_tcsicmp(m_sKind, pOpening->GetKindString())!=0) if (_tcsicmp(m_sKind, pOpening->GetSubKind())!=0) return FALSE; if (fabs(m_nWidth-pOpening->GetWidth())>_DIST_SNAP || fabs(m_nHeight-pOpening->GetHeight())>_DIST_SNAP) return FALSE; XString sDwb2d, sDwg2d, sDwb3d, sDwg3d; pOpening->GetStyle2dName(sDwb2d, sDwg2d); pOpening->GetStyle3dName(sDwb3d, sDwg3d); XString sStyle2d, sStyle3d; if (!sDwb2d || !sDwg2d) sStyle2d=_T(""); else sStyle2d = XString(_T("%s(%s)"), (const TCHAR *)sDwb2d, (const TCHAR *)sDwg2d); if (!sDwb3d || !sDwg3d) sStyle3d=_T(""); else sStyle3d = XString(_T("%s(%s)"), (const TCHAR *)sDwb3d, (const TCHAR *)sDwg3d); if (_tcsicmp(m_sStyle2d, sStyle2d)!=0 || _tcsicmp(m_sStyle3d, sStyle3d)!=0) return FALSE; return TRUE; } // 必须是驻留DWG void TOpeningValidation::Validate(const TDbOpening *pOpening) { AcDbObjectId id = pOpening->objectId(); if (!id) return; if (m_idArray.isEmpty()) { m_nFlag=0; m_sLabel=pOpening->GetLabel(); // sg modify 110228,根据8.5需求,将类别改成类型 // m_sKind=pOpening->GetKindString(); m_sKind=pOpening->GetSubKind(); m_opKind=pOpening->GetKind(); m_nWidth=pOpening->GetWidth(); m_nHeight=pOpening->GetHeight(); XString sDwb2d, sDwg2d, sDwb3d, sDwg3d; pOpening->GetStyle2dName(sDwb2d, sDwg2d); pOpening->GetStyle3dName(sDwb3d, sDwg3d); if (!sDwb2d || !sDwg2d) m_sStyle2d=_T(""); else m_sStyle2d = XString(_T("%s(%s)"), (const TCHAR *)sDwb2d, (const TCHAR *)sDwg2d); if (!sDwb3d || !sDwg3d) m_sStyle3d=_T(""); else m_sStyle3d = XString(_T("%s(%s)"), (const TCHAR *)sDwb3d, (const TCHAR *)sDwg3d); } else { if (_tcsicmp(m_sLabel, pOpening->GetLabel())!=0) return; // sg modify 110228,根据8.5需求,将类别改成类型 //if (_tcsicmp(m_sKind, pOpening->GetKindString())!=0) { if (_tcsicmp(m_sKind, pOpening->GetSubKind())!=0) { m_nFlag |= OVF_KIND; m_sKind=_T("<冲突>"); } if (fabs(m_nWidth-pOpening->GetWidth())>_DIST_SNAP) m_nFlag |= OVF_WIDTH; if (fabs(m_nHeight-pOpening->GetHeight())>_DIST_SNAP) m_nFlag |= OVF_HEIGHT; XString sDwb2d, sDwg2d, sDwb3d, sDwg3d; pOpening->GetStyle2dName(sDwb2d, sDwg2d); pOpening->GetStyle3dName(sDwb3d, sDwg3d); XString sStyle2d, sStyle3d; if (!sDwb2d || !sDwg2d) sStyle2d=_T(""); else sStyle2d = XString(_T("%s(%s)"), (const TCHAR *)sDwb2d, (const TCHAR *)sDwg2d); if (!sDwb3d || !sDwg3d) sStyle3d=_T(""); else sStyle3d = XString(_T("%s(%s)"), (const TCHAR *)sDwb3d, (const TCHAR *)sDwg3d); if (_tcsicmp(m_sStyle2d, sStyle2d)!=0) { m_nFlag |= OVF_STYLE2D; m_sStyle2d=_T("<冲突>"); } if (_tcsicmp(m_sStyle3d, sStyle3d)!=0) { m_nFlag |= OVF_STYLE3D; m_sStyle3d=_T("<冲突>"); } } m_idArray.append(id); } int TOpeningValidation::CompareForFindByCode(const TOpeningValidation *p1, const void *pv2) { const TCHAR *p2=(const TCHAR *)pv2; return _tcsicmp(p1->m_sLabel, p2); } static const TCHAR *g_szOpKind[]={_T("子母门"), _T("门"), _T("门连窗"), _T("弧窗"), _T("转角窗"), _T("窗")};//modified by fxj 090622 门联窗-》门连窗 // 从OpeningLabel.ini文件中,得到所有门窗的标注,并按顺序返回 static void GetAllOpeningLabelInIniFile(CStringArray &arLabels) { TOpeningLabelData data; CString csSection; CStringArray arSectionName, arTempLabels; data.GetLabelArray(arSectionName); // 获得所有标签名 int nSize = arSectionName.GetSize(), nLabelSize = 0; for (int i=0; im_sKind); int nSeqCode2=GetSeqCode(p2->m_sKind); if (nSeqCode1>nSeqCode2) return -1; else if (nSeqCode1m_sLabel, p2->m_sLabel); } void TOpeningValidateTable::GetValidLabels(TOpeningData::OpeningKind opKind, XStringList &lstLabels) const { lstLabels.Reset(); int nLen=Length(); for(int i=0; iGetLabel(); TOpeningValidation *pEntry=FindNode(pszLabel, TOpeningValidation::CompareForFindByCode); if (!pEntry) { pEntry=new TOpeningValidation; Append(pEntry); } pEntry->Validate(pOpening); } BOOL TOpeningValidateTable::ValidateLabel(const TDbOpening *pOpening) { const TCHAR *pszLabel=pOpening->GetLabel(); TOpeningValidation *pEntry=FindNode(pszLabel, TOpeningValidation::CompareForFindByCode); if (!pEntry) { return TRUE; } if (pEntry->m_nFlag) return FALSE; return pEntry->ValidateLabel(pOpening); } extern void GetOpeningIdList(DList &dbList, DList &idList) ; // sg delete 110224,8.5起改用新命令,命令函数体移植到OpeningCheck.cpp中 ////忽略转角窗,电梯门,隔断门 //void ValidateOpening() //{ // /* // PickSet ss(SS_FREE); // RBList mask(RTDXF0, _T("TCH_OPENING"), NULL); // if (ss.Get(_T("X"), NULL, NULL, mask)!=RTNORM) // return; // */ // DList dbList; // DList ss; // GetOpeningIdList(dbList, ss); // if (!ss) // return; // // TOpeningValidateTable opTable; // int lCount=ss.Length(); // for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && // //pOpening->GetKind()!=TOpeningData::OP_HOLE && // !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY)) // opTable.Validate(pOpening); // OPENOBJ_END(); // } // opTable.QuickSort(TOpeningValidation::CompareForSort); // // //modify by xlc on 080918 // //COpeningValidateDlg dlg(&opTable, acedGetAcadFrame()); // COpeningValidateNewDlg dlg(&opTable, acedGetAcadFrame()); // { // CAcModuleResourceOverride vTemp; // dlg.DoModal(); // } //} //批量改名 void BatNameOpening() { Entity ent; if (SelectEntity(_T("\n选择已经编号的参考门窗<退出>:"),ent,RBList(RTDXF0,_T("TCH_OPENING"),NULL))!=RTNORM) return; DList dbList; DList ss; GetOpeningIdList(dbList, ss); if (!ss) return; TOpeningValidation group; XString sLabel; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbOpening, pOpening); if (pOpening!=NULL) { group.Validate(pOpening); sLabel=pOpening->GetLabel(); } OPENOBJ_END(); int lCount=ss.Length(); int count=0; for(int i=0; iassertWriteEnabled(); if (sLabel!=pOpening->GetLabel()) { count++; pOpening->SetLabel(sLabel); } } OPENOBJ_END(); } if (count>0) adsout<<_T("共有")< dbList; DList ss; GetOpeningIdList(dbList, ss); if (!ss) return TRUE; TOpeningValidateTable opTable; int lCount=ss.Length(); for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && //pOpening->GetKind()!=TOpeningData::OP_HOLE && // !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY)) if (pOpening) opTable.Validate(pOpening); OPENOBJ_END(); } return opTable.ValidateLabel(&op); } BOOL ValidateLabelInCurDwg(TDbOpening &op) { const TCHAR *szLabel=op.GetLabel(); if (!szLabel || !szLabel[0]) return TRUE; DList ss; GetEntFromBlockByDxf(ss, _T("TCH_OPENING")); TOpeningValidateTable opTable; int lCount=ss.Length(); for(int i=0; iGetKind()!=TOpeningData::OP_CORNWIN && //pOpening->GetKind()!=TOpeningData::OP_HOLE && // !(pOpening->m_nOpStyle&OPS_LIFTDOOR) && !(pOpening->m_nOpStyle&OPS_LVTRY)) if (pOpening) opTable.Validate(pOpening); OPENOBJ_END(); } return opTable.ValidateLabel(&op); }