Files
envi-code/SourceCode/Code2026/CoreCommand/AecAcDbDatabaseReactor.cpp
T
2026-09-28 15:28:50 +08:00

116 lines
2.9 KiB
C++

#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;
}