Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

804 lines
23 KiB
C++

#include "stdafx.h"
#include "TInterfaceTransformByManager.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
TInterfaceTransformByManager::TInterfaceTransformByManager()
{
}
TInterfaceTransformByManager::~TInterfaceTransformByManager()
{
}
void TInterfaceTransformByManager::TranslateTransformByMsg(const TInterfaceModifyMsg& msg,AcDbObjectIdArray& idOperOns)
{
AcDbObjectId idOn = msg.GetMsgOperateOn();
AcDbEntity* pEnt = NULL;
CString sIsAssoc = _T("0");;
GetGlobalContext(KEY_MOVEASS,sIsAssoc);
// 1. 移动桥架关联拉伸 没有设置
if (sIsAssoc.CompareNoCase(_T("0")) == 0)
{
TranslateMoveOperationMsg(msg);
return;
}
// 2. 移动桥架关联拉伸,但新位置寻求可能新关系建立
TInterfaceModifyMsg msgT;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,idOn,AcDb::kForRead,true))
{
TDbInterfacesObj* pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
AcDbObjectId idCon,idCon2,idOwner;
TInterface pipeInterface,pipeInterfaceOther;
int nCount = pIObj->GetInterfaceCount();
for (int i = 0;i < nCount;i++)
{
pipeInterface.Reset();
if ( pIObj->GetInterface(i,pipeInterface) )
{
idCon = pipeInterface.GetConnectObject();
idOwner = pipeInterface.GetOwnerId();
if (idCon.isNull())
{
TranslateMoveOperationMsg(pIObj,pipeInterface);
continue;
}
int nFoundAt = -1;
if (idOperOns.find(idCon,nFoundAt) ) //不处理
{
}
else
{
//变换前的对方的接口,调整关系方向
pipeInterfaceOther = pipeInterface;
pipeInterfaceOther.OtherBeforeTransformBy(msg);
if (Find(pipeInterfaceOther))//确认两接口在变换前吻合
{
// 定义消息,设置消息作用点,作用对象
msgT = msg;
// 找到本对象的接口,[注该接口已经在其transform调用更改了]
// 而连接对象的接口点没有更改,调整消息作用点到原来连接点
// 以便消息准确的按消息作用点传递
AcGeMatrix3d xform = msg.GetTransform();
xform.invert();
AcGePoint3d pTe = pipeInterface.GetPosition();
pTe.transformBy(xform);
msgT.SetMsgPoint(pTe);
msgT.SetMsgOperateOn(pipeInterfaceOther.GetOwnerId());
NotifyInterfaceToModify(msgT,idOperOns);
}
else //判断是否有 T 型的可能性,或新位置建立关系
{
TranslateMoveOperationMsg(pIObj,pipeInterface);
}
}
}
}
}
pEnt->close();
}
}
void TInterfaceTransformByManager::TranslateMoveOperationMsg(const TInterfaceModifyMsg& msg)
{
AcDbObjectId idOn = msg.GetMsgOperateOn();
AcDbEntity* pEnt = NULL;
if (idOn.isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,idOn,AcDb::kForRead))
{
TDbInterfacesObj* pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
TInterface pipeInterface;
int nCount = pIObj->GetInterfaceCount();
for (int i = 0;i < nCount;i++)
{
pipeInterface.Reset();
if ( pIObj->GetInterface(i,pipeInterface) )
{
TranslateMoveOperationMsg(pIObj,pipeInterface);
}
}
}
pEnt->close();
}
}
void TInterfaceTransformByManager::TranslateMoveOperationMsg(TDbInterfacesObj* pIObj,const TInterfaceModifyMsg& msg)
{
TInterface pipeInterface;
pIObj->GetInterface(0,pipeInterface);
//1.判断新位置是否有新的接口吻合连接
AcDbObjectId idFind1,idFind2;
BOOL bSuccess = Find(pipeInterface.GetPosition(),pipeInterface.GetOutDir(),idFind1,idFind2,pIObj->objectId());
if (bSuccess)
{
if (idFind1.isValid())//一个接口
{
//建立idOwner,idFind1 的一对接口关系
TInterface pipeInterface;
pIObj->GetInterface(0,pipeInterface);
//建立关联关系
if (pIObj->isWriteEnabled())
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),idFind1);
}
else if (Acad::eOk == pIObj->upgradeOpen())
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),idFind1);
pIObj->downgradeOpen();
}
//更新接口关系
pipeInterface.SetOwnerId(pIObj->objectId());
pipeInterface.SetConnectObject(idFind1);
Update(pipeInterface);
TInterface pipeInterfaceOther;
pipeInterfaceOther.SetOwnerId(idFind1);
pipeInterfaceOther.SetPosition(pipeInterface.GetPosition());
pipeInterfaceOther.SetOutDir(-pipeInterface.GetOutDir());
pipeInterfaceOther.SetConnectObject(pIObj->objectId());
SetInterfaceRelation(acdbCurDwg(),pipeInterfaceOther);
}
}
else //该位置没有接口; 判断是否有 T 型的可能性,断开对方三通连接
{
TInterface pipeInterface;
pIObj->GetInterface(0,pipeInterface);
pipeInterface.SetConnectObject(AcDbObjectId::kNull);
Update2(pipeInterface,AcDbObjectId::kNull,AcDbObjectId::kNull);
AcGeMatrix3d xform = msg.GetTransform();
AcGePoint3d ptPos = pipeInterface.GetPosition();
AcGeVector3d vtDir = pipeInterface.GetOutDir();
xform.invert();
ptPos.transformBy(xform);
vtDir.transformBy(xform);
BOOL bSuccess1 = Find(ptPos,vtDir,idFind1,pIObj->objectId());
BOOL bSuccess2 = Find(ptPos,vtDir,idFind2,idFind1);
if (bSuccess1 && bSuccess2)
{
//iRecord 中建立 idFind1-idFind2关联关系
//更新接口关系
TInterface pipeInterface;
pipeInterface.SetPosition(ptPos);
pipeInterface.SetOutDir(vtDir);
pipeInterface.SetOwnerId(idFind1);
pipeInterface.SetConnectObject(idFind2);
SetInterfaceRelation(acdbCurDwg(),pipeInterface);
//更新接口关系
pipeInterface.SetPosition(ptPos);
pipeInterface.SetOutDir(vtDir);
pipeInterface.SetOwnerId(idFind2);
pipeInterface.SetConnectObject(idFind1);
SetInterfaceRelation(acdbCurDwg(),pipeInterface);
}
else
{
//主要是寻找管子对象
//TryGetPerpPipeToTeeConnect(pIObj,pipeInterface);
}
}
}
void TInterfaceTransformByManager::TranslateMoveOperationMsg(TDbInterfacesObj* pIObj,TInterface& pipeInterface)
{
AcDbObjectId idOwner = pipeInterface.GetOwnerId();
AcDbObjectId idFind1,idCon1;
//1.判断新位置是否有新的接口吻合连接
BOOL nSuccess = Find(pipeInterface.GetPosition(),pipeInterface.GetOutDir(),idFind1,idOwner);
if (nSuccess)
{
//建立关联关系
Adesk::Boolean bWrite = TRUE;
if (pIObj->isWriteEnabled())
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),idFind1);
}
else if (Acad::eOk == pIObj->upgradeOpen())
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),idFind1);
pIObj->downgradeOpen();
}
//更新接口关系
pipeInterface.SetOwnerId(pIObj->objectId());
pipeInterface.SetConnectObject(idFind1);
Update(pipeInterface);
TInterface pipeInterfaceOther;
pipeInterfaceOther.SetOwnerId(idFind1);
pipeInterfaceOther.SetPosition(pipeInterface.GetPosition());
pipeInterfaceOther.SetOutDir(-pipeInterface.GetOutDir());
pipeInterfaceOther.SetConnectObject(pipeInterface.GetOwnerId());
SetInterfaceRelation(acdbCurDwg(),pipeInterfaceOther);
}
else //该位置没有接口; 判断是否有 T 型的可能性,断开对方三通连接
{
//主要是寻找管子对象
TryGetPerpPipeToTeeConnect(pIObj,pipeInterface);
}
}
void TInterfaceTransformByManager::TryGetPerpPipeToTeeConnect(TDbInterfacesObj* pIObj,TInterface& pipeInterface)
{
}
void TInterfaceTransformByManager::NotifyInterfaceToModify(TInterfaceModifyMsg& msg,AcDbObjectIdArray& idOperOns)
{
int nFoundAt = 0;
if (!idOperOns.find(msg.GetMsgOperateOn(),nFoundAt))
{
TInterfaceModifyMsgs idModiNewMsgs;
TDbInterfacesObj* pIObj2 = NULL;
AcDbEntity* pEnt2 = NULL;
if (msg.GetMsgOperateOn().isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt2,msg.GetMsgOperateOn(),AcDb::kForWrite))
{
pIObj2 = TDbInterfacesObj::cast(pEnt2);
if (pIObj2 != NULL)
{
pIObj2->NotifyInterfaceToModify(msg,idModiNewMsgs);
idOperOns.append(msg.GetMsgOperateOn());
}
pEnt2->close();
}
//继续传递更改消息,当新的消息对象已经处理过时(在idOperOns内),不传递
TInterfaceModifyMsg msgT;
for (int i = 0;i < idModiNewMsgs.length();i++)
{
msgT = idModiNewMsgs.at(i);
if (!idOperOns.find(msgT.GetMsgOperateOn(),nFoundAt))
{
NotifyInterfaceToModify(msgT,idOperOns);
idOperOns.append(msgT.GetMsgOperateOn());
}
}
}
}
BOOL TInterfaceTransformByManager::Find(const TInterface& pipeInterface)
{
//到命名对象字典中找;
BOOL bSuccess = FALSE;
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
AcGePoint3d ptCon = pipeInterface.GetPosition();
AcGeVector3d vtDir = pipeInterface.GetOutDir();
AcDbObjectId idCon = pipeInterface.GetConnectObject();
AcDbObjectId idOwner = pipeInterface.GetOwnerId();
TInterface pipeInterface2;
bSuccess = pIntfRec->Find(ptCon,vtDir,idOwner,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idCon && !idCon.isNull())
{
}
else
bSuccess = FALSE;
pIntfRec->close();
return bSuccess;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForRead))
{
pDict->close();
AcGePoint3d ptCon = pipeInterface.GetPosition();
AcGeVector3d vtDir = pipeInterface.GetOutDir();
AcDbObjectId idCon = pipeInterface.GetConnectObject();
AcDbObjectId idOwner = pipeInterface.GetOwnerId();
TInterface pipeInterface2;
bSuccess = pInterfaceRec->Find(ptCon,vtDir,idOwner,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idCon && !idCon.isNull())
{
}
else
{
bSuccess = FALSE;
}
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return bSuccess;
}
BOOL TInterfaceTransformByManager::Find(const AcGePoint3d& ptCon,const AcGeVector3d& vtDir,
AcDbObjectId& idFind,const AcDbObjectId& idOwnerNotMe)
{
//到命名对象字典中找;
BOOL bSuccess = FALSE;
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
TInterface pipeInterface2;
bSuccess = pIntfRec->FindOtherSide(ptCon,vtDir,pipeInterface2,idOwnerNotMe);
if (bSuccess)
{
idFind = pipeInterface2.GetOwnerId();
AcDbObjectId idCon = pipeInterface2.GetConnectObject();
if (!idCon.isNull())
{
//反过来以 connect 为 owner 找,验证 idCon,idFind是有效关联关系
bSuccess = pIntfRec->Find(ptCon,vtDir,idCon,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idFind &&
!idFind.isNull() && idFind != idOwnerNotMe)
{
//是有效关系:ptCon,vtDir位置没有空余接口找到
bSuccess = FALSE;
}
idFind = idCon;
}
}
pIntfRec->close();
return bSuccess;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForRead))
{
pDict->close();
TInterface pipeInterface2;
bSuccess = pInterfaceRec->FindOtherSide(ptCon,vtDir,pipeInterface2,idOwnerNotMe);
if (bSuccess)
{
idFind = pipeInterface2.GetOwnerId();
AcDbObjectId idCon = pipeInterface2.GetConnectObject();
if (!idCon.isNull())
{
//反过来以 connect 为 owner 找,验证 idCon,idFind是有效关联关系
bSuccess = pInterfaceRec->Find(ptCon,vtDir,idCon,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idFind &&
!idFind.isNull() && idFind != idOwnerNotMe)
{
//是有效关系:ptCon,vtDir位置没有空余接口找到
bSuccess = FALSE;
}
idFind = idCon;
}
}
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return bSuccess;
}
int TInterfaceTransformByManager::Find( const AcGePoint3d& ptCon,const AcGeVector3d& vtDir,
AcDbObjectId& idFind1,AcDbObjectId& idFind2,
const AcDbObjectId& idOwnerNotMe)
{
int bSuccess = 0;
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
TInterface pipeInterface1,pipeInterface2;
bSuccess = pIntfRec->FindOtherSide(ptCon,vtDir,pipeInterface1,pipeInterface2,idOwnerNotMe);
if (bSuccess)
{
idFind1 = pipeInterface1.GetOwnerId();
idFind2 = pipeInterface2.GetOwnerId();
AcDbObjectId idCon1 = pipeInterface1.GetConnectObject();
AcDbObjectId idCon2 = pipeInterface2.GetConnectObject();
bSuccess = FALSE;
BOOL bSuccess1 = FALSE,bSuccess2 = NULL;
if (idFind1.isValid() && idFind2.isValid()) //初步发现ptCon,vtDir 有一对接口连接了
{
//对对方逐一进行反方向验证是否可以建立关系
AcDbEntity* pEnt = NULL;
TDbInterfacesObj* pIObj = NULL;
if (idCon1.isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,idCon1,AcDb::kForRead))
{
pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
bSuccess1 = pIObj->HasInterface(ptCon,vtDir);
}
pEnt->close();
}
//验证2是否建立关系
if (idCon2.isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,idCon2,AcDb::kForRead))
{
pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
bSuccess2 = pIObj->HasInterface(ptCon,vtDir);
}
pEnt->close();
}
if (bSuccess1 && bSuccess2)
{
bSuccess = 2;
idFind1 = idCon1;
idFind2 = idCon2;
}
}
else
{
if (idFind1.isValid())
pipeInterface2 = pipeInterface1;
else
idFind1 = pipeInterface2.GetOwnerId();
AcDbObjectId idCon = pipeInterface2.GetConnectObject();
if (!idCon.isNull())
{
//反过来以 connect 为 owner 找,验证 idCon,idFind是有效关联关系
bSuccess = pIntfRec->Find(ptCon,vtDir,idCon,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idFind1 &&
!idFind1.isNull() && idFind1 != idOwnerNotMe)
{
//是有效关系:ptCon,vtDir位置没有空余接口找到
bSuccess = 0;
}
idFind1 = idCon;
}
}
}
pIntfRec->close();
return bSuccess;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForRead))
{
pDict->close();
TInterface pipeInterface1,pipeInterface2;
bSuccess = pInterfaceRec->FindOtherSide(ptCon,vtDir,pipeInterface1,pipeInterface2,idOwnerNotMe);
if (bSuccess)
{
idFind1 = pipeInterface1.GetOwnerId();
idFind2 = pipeInterface2.GetOwnerId();
AcDbObjectId idCon1 = pipeInterface1.GetConnectObject();
AcDbObjectId idCon2 = pipeInterface2.GetConnectObject();
bSuccess = FALSE;
BOOL bSuccess1 = FALSE,bSuccess2 = NULL;
if (idFind1.isValid() && idFind2.isValid()) //初步发现ptCon,vtDir 有一对接口连接了
{
//对对方逐一进行反方向验证是否可以建立关系
AcDbEntity* pEnt = NULL;
TDbInterfacesObj* pIObj = NULL;
if (idCon1.isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,idCon1,AcDb::kForRead))
{
pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
bSuccess1 = pIObj->HasInterface(ptCon,vtDir);
}
pEnt->close();
}
//验证2是否建立关系
if (idCon2.isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,idCon2,AcDb::kForRead))
{
pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
bSuccess2 = pIObj->HasInterface(ptCon,vtDir);
}
pEnt->close();
}
if (bSuccess1 && bSuccess2)
{
bSuccess = 2;
idFind1 = idCon1;
idFind2 = idCon2;
}
}
else
{
if (idFind1.isValid())
{
pipeInterface2 = pipeInterface1;
}
else
{
idFind1 = pipeInterface2.GetOwnerId();
}
AcDbObjectId idCon = pipeInterface2.GetConnectObject();
if (!idCon.isNull())
{
//反过来以 connect 为 owner 找,验证 idCon,idFind是有效关联关系
bSuccess = pInterfaceRec->Find(ptCon,vtDir,idCon,pipeInterface2);
if (bSuccess && pipeInterface2.GetConnectObject() == idFind1 &&
!idFind1.isNull() && idFind1 != idOwnerNotMe)
{
//是有效关系:ptCon,vtDir位置没有空余接口找到
bSuccess = 0;
}
idFind1 = idCon;
}
}
}
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return bSuccess;
}
BOOL TInterfaceTransformByManager::SetInterfaceRelation(const AcDbDatabase* pDb,const TInterface& pipeInterface,AcDbObjectId idCon2)
{
AcDbEntity* pEnt = NULL;
if (pipeInterface.GetOwnerId().isValid() && Acad::eOk == acdbOpenAcDbEntity(pEnt,pipeInterface.GetOwnerId(),AcDb::kForWrite))
{
TDbInterfacesObj* pIObj = TDbInterfacesObj::cast(pEnt);
if (pIObj != NULL)
{
if (idCon2.isNull())
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),pipeInterface.GetConnectObject());
}
else
{
pIObj->SetInterfaceRelation(pipeInterface.GetPosition(),pipeInterface.GetConnectObject(),idCon2);
}
}
pEnt->close();
}
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
if(Acad::eOk == pIntfRec->upgradeOpen())
{
if (idCon2.isNull())
pIntfRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject());
else
pIntfRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject(),idCon2);
pIntfRec->downgradeOpen();
}
pIntfRec->close();
return TRUE;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == ((AcDbDatabase*)pDb)->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForWrite))
{
pDict->close();
if (idCon2.isNull())
pInterfaceRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject());
else
pInterfaceRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject(),idCon2);
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return TRUE;
}
BOOL TInterfaceTransformByManager::Update(const TInterface& pipeInterface)
{
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
if(Acad::eOk == pIntfRec->upgradeOpen())
{
pIntfRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject());
pIntfRec->downgradeOpen();
}
pIntfRec->close();
return TRUE;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForWrite))
{
pDict->close();
pInterfaceRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject());
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return TRUE;
}
BOOL TInterfaceTransformByManager::Update2(const TInterface& pipeInterface,const AcDbObjectId& idCon1,const AcDbObjectId& idCon2)
{
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
if(Acad::eOk == pIntfRec->upgradeOpen())
{
pIntfRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),idCon1,idCon2);
pIntfRec->downgradeOpen();
}
pIntfRec->close();
return TRUE;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForWrite))
{
pDict->close();
pInterfaceRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),idCon1,idCon2);
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return TRUE;
}
BOOL TInterfaceTransformByManager::Update(const TInterface& pipeInterface,const AcDbObjectId& idConnectAlso)
{
// add by hh 2011-08-09 接口记录从字典移动到数据库中
TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB();
if(NULL != pIntfRec)
{
if(Acad::eOk == pIntfRec->upgradeOpen())
{
pIntfRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject(),idConnectAlso);
pIntfRec->downgradeOpen();
}
pIntfRec->close();
return TRUE;
}
// add end
AcDbDictionary* pNamedDict = NULL;
if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead))
{
AcDbDictionary* pDict = NULL;
if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead))
{
pNamedDict->close();
TDbInterfaceRecord* pInterfaceRec = NULL;
if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForWrite))
{
pDict->close();
pInterfaceRec->Update(pipeInterface.GetOwnerId(),pipeInterface.GetPosition(),pipeInterface.GetConnectObject(),idConnectAlso);
pInterfaceRec->close();
}
else
{
pDict->close();
}
}
else
{
pNamedDict->close();
}
}
return TRUE;
}