#include "stdafx.h" #include "AecAcDbDatabaseReactor.h" #include "AecFloorViewDataRecord.h" #include "EarThwormDef.h" #include "AecDbEntityBase.h" #include "AecDbCurveBase.h" #include "KTSetting.h" #define FLOOR_XY_NAME _T("楼层平面") void AecAcDbDatabaseReactor::objectAppended(const AcDbDatabase *pDb, const AcDbObject *pObj) { AcDbEntity *pEnt = AcDbEntity::cast(pObj); if (pEnt == NULL) return; //楼层分层管理改为标高管理2024-11-27 return; //const TCHAR *pClassName = pObj->isA()->name(); //acutPrintf(_T("\n%s objectAppended!!!"), pClassName); //获取当前活动的层 Adesk::Int32 nActive = -1; CString sID; Adesk::Int16 nFocusOn = 0; FloorViewData vData; memset(&vData, 0, sizeof(FloorViewData)); AcDbObjectId idSpace = pDb->currentSpaceId(); AcDbObject *pObjSpace = NULL; Acad::ErrorStatus es; if (Acad::eOk == (es = acdbOpenObject(pObjSpace, idSpace, AcDb::kForRead))) { AcDbObjectId idDic = pObjSpace->extensionDictionary(); AcDbDictionary *pDic = NULL; es = acdbOpenObject(pDic, idDic, AcDb::kForRead); if (es == Acad::eOk) { //AcDbXFloorFrame handle //PRO_NAME- FloorEx Handle- FloorEx Handle- FloorEx Handle- FloorEx Handle... AcDbObject *pSubObj = NULL; if (Acad::eOk == (es = pDic->getAt(KEY_NAME, pSubObj, AcDb::kForWrite))) { AecFloorViewDataRecord *pRec = AecFloorViewDataRecord::cast(pSubObj); if (pRec != NULL) { nActive = pRec->GetActiveID(sID); pRec->GetFloorViewRecord(nActive,vData); nFocusOn = pRec->IsFocusOn(); } pSubObj->close(); } pDic->close(); } pObjSpace->close(); } //是楼层平面激活 if (nActive != -1 && _tcscmp(vData.m_szFloorView, FLOOR_XY_NAME) == 0 && nFocusOn == 1) { AddFloorLayerXData(pEnt, sID); } } bool AecAcDbDatabaseReactor::AddFloorLayerXData(AcDbEntity*pObj, LPCTSTR pszID) { AecDbEntityBase *pEntBase = AecDbEntityBase::cast(pObj); AecDbCurveBase *pCrvBase = AecDbCurveBase::cast(pObj); if (pEntBase == NULL && pCrvBase == NULL) { //判断是否是轴网 /*AcDbObjectId idLayer = KTSetting::InitLayer(_T("LAY_AXIS")); if (pObj->layerId() != idLayer) { //不是轴网 return false; }*/ } const TCHAR *pClassName = pObj->isA()->name(); Acad::ErrorStatus es; struct resbuf *pRb = NULL, *pTemp; pRb = pObj->xData(KEY_FLOOR); if (pRb != NULL) { // 存在清空 struct resbuf *pTmp = acutNewRb(AcDb::kDxfRegAppName); acutNewString(KEY_FLOOR, pTmp->resval.rstring); es = pObj->upgradeOpen(); pObj->setXData(pTmp); acutRelRb(pRb); acutRelRb(pTmp); } else { acdbRegApp(KEY_FLOOR); } pRb = acutNewRb(AcDb::kDxfRegAppName); pTemp = pRb; acutNewString(KEY_FLOOR, pTemp->resval.rstring); // Add user-specified string to the xdata. pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString); pTemp = pTemp->rbnext; acutNewString(pszID, pTemp->resval.rstring); pTemp->rbnext = NULL; es = pObj->upgradeOpen(); es = pObj->setXData(pRb); acutRelRb(pRb); return true; }