2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#include "stdarx.h"
|
|
|
|
|
#include "AecEwEndDeepCloneAssocMake.h"
|
|
|
|
|
#include "coretools.h"
|
|
|
|
|
|
|
|
|
|
AecEwEndDeepCloneAssocMake::AecEwEndDeepCloneAssocMake(AcDbObjectIdArray& arIdEndDeepCloned)
|
|
|
|
|
{
|
|
|
|
|
m_arIdEndDeepCloned.removeAll();
|
|
|
|
|
m_arIdEndDeepCloned.append(arIdEndDeepCloned);
|
|
|
|
|
MakeEndDeepCloneAssoc();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AecEwEndDeepCloneAssocMake::~AecEwEndDeepCloneAssocMake(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AecEwEndDeepCloneAssocMake::FindWallHere(const OpeningData& data,AcDbObjectId& idWall)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptPos = data.ptPos;
|
|
|
|
|
double dW = data.dWidth * 1.05;
|
|
|
|
|
|
|
|
|
|
ads_point pt2;
|
|
|
|
|
acdbWcs2Ucs(asDblArray(ptPos),pt2,false);
|
|
|
|
|
|
|
|
|
|
ads_point ptLT,ptRB;
|
|
|
|
|
ads_point_set(pt2,ptLT);
|
|
|
|
|
ads_point_set(pt2,ptRB);
|
|
|
|
|
|
|
|
|
|
ptLT[X] -= (0.5 * dW + 0.5);
|
|
|
|
|
ptLT[Y] += (0.5 * dW + 0.5);
|
|
|
|
|
|
|
|
|
|
ptRB[X] += (0.5 * dW + 0.5);
|
|
|
|
|
ptRB[Y] -= (0.5 * dW + 0.5);
|
|
|
|
|
|
|
|
|
|
struct resbuf* pRb = acutBuildList(RTDXF0,_T("AEC_DBWALL"),0);
|
|
|
|
|
|
|
|
|
|
ads_name ss;
|
|
|
|
|
acedSSGet(_T("A"),NULL,NULL,pRb,ss);
|
|
|
|
|
|
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
|
|
|
acedSSLength(ss,&nLen);
|
|
|
|
|
|
|
|
|
|
ads_point ptLTw,ptRBw;
|
|
|
|
|
acdbUcs2Wcs(ptLT,ptLTw,false);
|
|
|
|
|
acdbUcs2Wcs(ptRB,ptRBw,false);
|
|
|
|
|
|
|
|
|
|
AcDbLine ln(asPnt3d(ptLTw),asPnt3d(ptRBw));
|
|
|
|
|
|
|
|
|
|
if (nLen > 0)
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//根据标高过滤墙体
|
2026-09-28 15:28:50 +08:00
|
|
|
ads_name ent;
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
|
AcDbCurve* pBCurve = NULL;
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i < nLen;i++)
|
|
|
|
|
{
|
|
|
|
|
acedSSName(ss,i,ent);
|
|
|
|
|
acdbGetObjectId(id,ent);
|
|
|
|
|
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEnt);
|
2026-10-04 00:04:20 +08:00
|
|
|
if (pWall != NULL && pWall->visibility() == AcDb::kVisible)//并且
|
2026-09-28 15:28:50 +08:00
|
|
|
{
|
|
|
|
|
WallData wdata;
|
|
|
|
|
pWall->GetWallData(wdata);
|
|
|
|
|
|
|
|
|
|
pBCurve = pWall->GetNativeCurve();
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//标高范围落在墙内
|
2026-09-28 15:28:50 +08:00
|
|
|
if ( (data.ptPos.z - wdata.dBomEl) > -1.e-3 &&
|
|
|
|
|
(data.ptPos.z - (wdata.dBomEl + wdata.dH ) ) <1.e-6 )
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//和基线在XY面相交
|
2026-09-28 15:28:50 +08:00
|
|
|
AcGePoint3dArray arPts;
|
|
|
|
|
ln.intersectWith(pBCurve,AcDb::kOnBothOperands,AcGePlane::kXYPlane,arPts);
|
|
|
|
|
|
|
|
|
|
if (!arPts.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
idWall = id;
|
|
|
|
|
pEnt->close();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEnt->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
acedSSFree(ss);
|
|
|
|
|
acutRelRb(pRb);
|
|
|
|
|
|
|
|
|
|
return idWall.isValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AecEwEndDeepCloneAssocMake::FindSlabOrWallHere(const OpeningData& data,AcDbObjectId& idHit)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptPos = data.ptPos;
|
|
|
|
|
double dW = data.dWidth * 1.05;
|
|
|
|
|
|
|
|
|
|
ads_point pt2;
|
|
|
|
|
acdbWcs2Ucs(asDblArray(ptPos),pt2,false);
|
|
|
|
|
|
|
|
|
|
ads_point ptLT,ptRB;
|
|
|
|
|
ads_point_set(pt2,ptLT);
|
|
|
|
|
ads_point_set(pt2,ptRB);
|
|
|
|
|
|
|
|
|
|
ptLT[X] -= (0.5 * dW + 0.5);
|
|
|
|
|
ptLT[Y] += (0.5 * dW + 0.5);
|
|
|
|
|
|
|
|
|
|
ptRB[X] += (0.5 * dW + 0.5);
|
|
|
|
|
ptRB[Y] -= (0.5 * dW + 0.5);
|
|
|
|
|
|
|
|
|
|
struct resbuf* pRb = acutBuildList(RTDXF0,_T("AEC_DBWALL,AEC_DBSLAB"),0);
|
|
|
|
|
|
|
|
|
|
ads_name ss;
|
|
|
|
|
acedSSGet(_T("A"),NULL,NULL,pRb,ss);
|
|
|
|
|
|
|
|
|
|
Adesk::Int32 nLen = 0;
|
|
|
|
|
acedSSLength(ss,&nLen);
|
|
|
|
|
|
|
|
|
|
ads_point ptLTw,ptRBw;
|
|
|
|
|
acdbUcs2Wcs(ptLT,ptLTw,false);
|
|
|
|
|
acdbUcs2Wcs(ptRB,ptRBw,false);
|
|
|
|
|
|
|
|
|
|
AcDbLine ln(asPnt3d(ptLTw),asPnt3d(ptRBw));
|
|
|
|
|
|
|
|
|
|
if (nLen > 0)
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//根据标高过滤墙体
|
2026-09-28 15:28:50 +08:00
|
|
|
ads_name ent;
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
|
AcDbCurve* pBCurve = NULL;
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i < nLen;i++)
|
|
|
|
|
{
|
|
|
|
|
acedSSName(ss,i,ent);
|
|
|
|
|
acdbGetObjectId(id,ent);
|
|
|
|
|
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEnt);
|
2026-10-04 00:04:20 +08:00
|
|
|
if (pWall != NULL && pWall->visibility() == AcDb::kVisible)//并且
|
2026-09-28 15:28:50 +08:00
|
|
|
{
|
|
|
|
|
WallData wdata;
|
|
|
|
|
pWall->GetWallData(wdata);
|
|
|
|
|
|
|
|
|
|
pBCurve = pWall->GetNativeCurve();
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//标高范围落在墙内
|
2026-09-28 15:28:50 +08:00
|
|
|
if ( (data.ptPos.z - wdata.dBomEl) > -1.e-3 &&
|
|
|
|
|
(data.ptPos.z - (wdata.dBomEl + wdata.dH ) ) <1.e-3 )
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//和基线在XY面相交
|
2026-09-28 15:28:50 +08:00
|
|
|
AcGePoint3dArray arPts;
|
|
|
|
|
ln.intersectWith(pBCurve,AcDb::kOnBothOperands,AcGePlane::kXYPlane,arPts);
|
|
|
|
|
|
|
|
|
|
if (!arPts.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
idHit = id;
|
|
|
|
|
pEnt->close();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
|
|
|
|
|
if (pSlab != NULL)
|
|
|
|
|
{
|
|
|
|
|
double dBomEl = pSlab->GetElBom();
|
|
|
|
|
double dThick = pSlab->GetThick();
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//标高范围落在墙内
|
2026-09-28 15:28:50 +08:00
|
|
|
if ( (data.ptPos.z - dBomEl) > -1.e-3 &&
|
|
|
|
|
(data.ptPos.z - (dBomEl + dThick ) ) <1.e-3 )
|
|
|
|
|
{
|
|
|
|
|
AcDbCurve* pShap = pSlab->GetBasinShapeCurve();
|
|
|
|
|
if (pShap != NULL)
|
|
|
|
|
{
|
|
|
|
|
AcDbPolyline* pPlShape = AcDbPolyline::cast(pShap);
|
|
|
|
|
if (pPlShape != NULL)
|
|
|
|
|
{
|
2026-10-04 00:04:20 +08:00
|
|
|
//二维方向
|
2026-09-28 15:28:50 +08:00
|
|
|
if ( CoreTools::IsPointInPoly(data.ptPos,*pPlShape) > 0 )
|
|
|
|
|
{
|
|
|
|
|
idHit = id;
|
|
|
|
|
pEnt->close();
|
|
|
|
|
delete pShap;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AcDbCircle* pCir = AcDbCircle::cast(pShap);
|
|
|
|
|
if (pCir != NULL)
|
|
|
|
|
{
|
|
|
|
|
AcGePoint3d ptCen = pCir->center();
|
|
|
|
|
ptCen.z = data.ptPos.z;
|
|
|
|
|
|
|
|
|
|
if (ptCen.distanceTo(data.ptPos) - pCir->radius() < 1.e-3)
|
|
|
|
|
{
|
|
|
|
|
idHit = id;
|
|
|
|
|
pEnt->close();
|
|
|
|
|
delete pShap;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEnt->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
acedSSFree(ss);
|
|
|
|
|
acutRelRb(pRb);
|
|
|
|
|
|
|
|
|
|
return idHit.isValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AecEwEndDeepCloneAssocMake::MakeEndDeepCloneAssoc()
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId idVal,idWall;
|
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i < m_arIdEndDeepCloned.length();i++)
|
|
|
|
|
{
|
|
|
|
|
idVal = m_arIdEndDeepCloned.at(i);
|
|
|
|
|
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,idVal,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbXOpening* pOpen = AecDbXOpening::cast(pEnt);
|
|
|
|
|
if (pOpen != NULL)
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId idWall2;
|
2026-10-04 00:04:20 +08:00
|
|
|
// 如果KEY_IDCNT1存在,说明此门窗是和其关联墙体一起copy出来的,不需要再关联了
|
2026-09-28 15:28:50 +08:00
|
|
|
if (pOpen->GetSpecialtyData()->GetAt(KEY_IDCNT1, idWall2) && idWall2.isValid())
|
|
|
|
|
{
|
|
|
|
|
pEnt->close();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//找此位置的墙体
|
2026-09-28 15:28:50 +08:00
|
|
|
OpeningData data;
|
|
|
|
|
pOpen->GetOpeningData(data);
|
|
|
|
|
|
|
|
|
|
if ( FindWallHere(data,idWall) )
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (idWall2 == idWall)
|
|
|
|
|
{
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pEnt->close();
|
|
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pOpen->upgradeOpen();
|
|
|
|
|
|
|
|
|
|
bool bIsSameOwner = false;
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForRead))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
//AcGePoint3d pt = pWall->StartPoint();
|
|
|
|
|
//acutPrintf(_T("\nSta=%g,%g,%g"),pt.x,pt.y,pt.z);
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
bIsSameOwner = true;
|
|
|
|
|
}
|
|
|
|
|
WallData wData;
|
|
|
|
|
pWall->GetWallData(wData);
|
|
|
|
|
data.dBomEl += wData.dBomEl;
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (bIsSameOwner)
|
|
|
|
|
{
|
|
|
|
|
pOpen->SetOpeningData(data,idWall);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pOpen->downgradeOpen();
|
|
|
|
|
pEnt->close();
|
|
|
|
|
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL && bIsSameOwner)
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
//洞口
|
2026-09-28 15:28:50 +08:00
|
|
|
AecDbX3dPartEntity* pPart = AecDbX3dPartEntity::cast(pEnt);
|
|
|
|
|
if (pPart != NULL)
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId idWall2;
|
|
|
|
|
if (pPart->GetAt(KEY_ASSOIC, idWall2) && idWall2.isValid())
|
|
|
|
|
{
|
|
|
|
|
pPart->close();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
CString sName = pPart->GetName();
|
2026-10-04 00:04:20 +08:00
|
|
|
if (sName.CompareNoCase(_T("开洞")) == 0)
|
2026-09-28 15:28:50 +08:00
|
|
|
{
|
|
|
|
|
OpeningData data;
|
|
|
|
|
data.ptPos = pPart->GetOrgPoint(true);
|
|
|
|
|
pPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("m_dT"),data.dWidth);
|
|
|
|
|
|
|
|
|
|
if ( FindSlabOrWallHere(data,idWall) )
|
|
|
|
|
{
|
|
|
|
|
pPart->GetSpecialtyData()->GetAt(KEY_ASSOIC,idWall2);
|
|
|
|
|
|
|
|
|
|
if (idWall2 == idWall)
|
|
|
|
|
{
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEntWall);
|
|
|
|
|
if (pSlab != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pSlab->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pSlab->AppendAssocPart(idVal);
|
|
|
|
|
pSlab->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pEnt->close();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPart->upgradeOpen();
|
|
|
|
|
pPart->GetSpecialtyData()->SetAt(KEY_ASSOIC,idWall);
|
|
|
|
|
pPart->addPersistentReactor(idWall);
|
|
|
|
|
pPart->downgradeOpen();
|
|
|
|
|
pEnt->close();
|
|
|
|
|
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEntWall);
|
|
|
|
|
if (pSlab != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pSlab->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pSlab->AppendAssocPart(idVal);
|
|
|
|
|
pSlab->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-10-04 00:04:20 +08:00
|
|
|
else if(sName.CompareNoCase(_T("套管")) == 0)
|
2026-09-28 15:28:50 +08:00
|
|
|
{
|
|
|
|
|
OpeningData data;
|
|
|
|
|
data.ptPos = pPart->GetOrgPoint(true);
|
|
|
|
|
pPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dL"),data.dWidth);
|
|
|
|
|
pPart->GetSpecialtyData(AcDb::kForRead)->GetAt(_T("dD"),data.dWidth);
|
|
|
|
|
|
|
|
|
|
if ( FindSlabOrWallHere(data,idWall) )
|
|
|
|
|
{
|
|
|
|
|
pPart->GetSpecialtyData()->GetAt(KEY_ASSOIC,idWall2);
|
|
|
|
|
|
|
|
|
|
if (idWall2 == idWall)
|
|
|
|
|
{
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEntWall);
|
|
|
|
|
if (pSlab != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pSlab->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pSlab->AppendAssocPart(idVal);
|
|
|
|
|
pSlab->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pEnt->close();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPart->upgradeOpen();
|
|
|
|
|
pPart->GetSpecialtyData()->SetAt(KEY_ASSOIC,idWall);
|
|
|
|
|
pPart->addPersistentReactor(idWall);
|
|
|
|
|
pPart->downgradeOpen();
|
|
|
|
|
pEnt->close();
|
|
|
|
|
|
|
|
|
|
AcDbEntity* pEntWall = NULL;
|
|
|
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEntWall,idWall,AcDb::kForWrite))
|
|
|
|
|
{
|
|
|
|
|
AecDbXWall* pWall = AecDbXWall::cast(pEntWall);
|
|
|
|
|
if (pWall != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pWall->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pWall->AppendAssocPart(idVal);
|
|
|
|
|
pWall->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEntWall);
|
|
|
|
|
if (pSlab != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (pSlab->ownerId() == pEnt->ownerId())
|
|
|
|
|
{
|
|
|
|
|
pSlab->AppendAssocPart(idVal);
|
|
|
|
|
pSlab->ReCreateDraw3d();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEntWall->close();
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pEnt->close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|