116 lines
2.9 KiB
C++
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;
|
|
} |