#include "StdAfx.h" #include "DbGroupIdConfig.h" namespace { int GetVectorSize(std::vector > vec) { int nNum = 0; std::vector >::const_iterator it = vec.begin(); for (; it != vec.end(); it++) { if (it->second == 0) { continue; } nNum++; } return nNum; } } ACRX_DXF_DEFINE_MEMBERS(ATSGroupIdConfig, AcDbObject,AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,1, ATS_GROUPIDCONFIG,"ATS_GROUPIDCONFIG图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com"); Acad::ErrorStatus TDbGroupIdConfig::dwgInFields (AcDbDwgFiler *pFiler) { Acad::ErrorStatus es=Acad::eOk; es = AcDbObject::dwgInFields(pFiler); if(es != Acad::eOk) return es; Adesk::UInt16 nNum; pFiler->readItem(&nNum); m_vecIdGroup.clear(); for (int i = 0; i < nNum; i++) { IdGroup group; AcDbSoftPointerId id1, id2, id3; pFiler->readItem(&id1); pFiler->readItem(&id2); pFiler->readItem(&id3); group.idBlk1 = id1; group.idBlk2 = id2; group.idValve = id3; // cet 2014.7.31 add 下层遮挡 Adesk::UInt16 nSize = 0; pFiler->readItem(&nSize); AcDbSoftPointerId idTemp; for (int j = 0; j < nSize; ++j) { pFiler->readItem(&idTemp); group.vecNextId.push_back(idTemp); } m_vecIdGroup.push_back(std::make_pair(group, 1)); } return es; } Acad::ErrorStatus TDbGroupIdConfig::dwgOutFields (AcDbDwgFiler *pFiler) const { Acad::ErrorStatus es=Acad::eOk; es = AcDbObject::dwgOutFields(pFiler); if(es != Acad::eOk) return es; // cet 2015.9.10 modify 统计最终存储数据数量 // Adesk::UInt16 nNum = GetVectorSize(m_vecIdGroup); Adesk::UInt16 nNum = 0; std::vector >::const_iterator it = m_vecIdGroup.begin(); for (; it != m_vecIdGroup.end(); it++) { if (it->second == 0) { continue; } ++nNum; } pFiler->writeItem(nNum); it = m_vecIdGroup.begin(); for (; it != m_vecIdGroup.end(); it++) { if (it->second == 0) { continue; } pFiler->writeItem((AcDbSoftPointerId)it->first.idBlk1); pFiler->writeItem((AcDbSoftPointerId)it->first.idBlk2); pFiler->writeItem((AcDbSoftPointerId)it->first.idValve); // cet 2014.7.31 add 下层遮挡 nNum = it->first.vecNextId.size(); pFiler->writeItem(nNum); // cet 2015.9.10 modify 读写对应类型不一致,可能出错 for (int i = 0; i < nNum; ++i) { pFiler->writeItem((AcDbSoftPointerId)it->first.vecNextId[i]); } } return es; } void InitGroupIdConfig(BOOL bTrue) { if(bTrue) { TDbGroupIdConfig::rxInit(); } else { deleteAcRxClass(TDbGroupIdConfig::desc()); } }