2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#include "KTAdsEntity.h"
|
|
|
|
|
#include "KTAdsPickSet.h"
|
|
|
|
|
#include "KTCadDebug.h"
|
|
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#undef THIS_FILE
|
|
|
|
|
static char THIS_FILE[]=__FILE__;
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#endif
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 默认构造函数
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::CKTAdsEntity()
|
|
|
|
|
: m_bHighlight(FALSE), m_bGriplight(FALSE)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
ZeroMemory(m_adsName, sizeof(ads_name));
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 构造函数,拷贝构造
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::CKTAdsEntity(const CKTAdsEntity& cEnt)
|
|
|
|
|
: m_bHighlight(FALSE), m_bGriplight(FALSE)
|
|
|
|
|
{
|
|
|
|
|
CopyMemory(m_adsName, cEnt.m_adsName, sizeof(ads_name));
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 构造函数,传入ID
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::CKTAdsEntity(const AcDbObjectId& idEnt)
|
|
|
|
|
: m_bHighlight(FALSE), m_bGriplight(FALSE)
|
|
|
|
|
{
|
|
|
|
|
acdbGetAdsName(m_adsName, idEnt);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 构造函数,传入handle
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::CKTAdsEntity(const AcDbHandle& handle)
|
|
|
|
|
: m_bHighlight(FALSE), m_bGriplight(FALSE)
|
|
|
|
|
{
|
|
|
|
|
TCHAR szHandle[10];
|
|
|
|
|
handle.getIntoAsciiBuffer(szHandle);
|
|
|
|
|
acdbHandEnt(szHandle, m_adsName);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 构造函数,传入ads_name
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::CKTAdsEntity(const ads_name adsName)
|
|
|
|
|
: m_bHighlight(FALSE), m_bGriplight(FALSE)
|
|
|
|
|
{
|
|
|
|
|
CopyMemory(m_adsName, adsName, sizeof(ads_name));
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 析构函数
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::~CKTAdsEntity()
|
|
|
|
|
{
|
|
|
|
|
if (m_bHighlight)
|
|
|
|
|
Highlight(FALSE);
|
|
|
|
|
if (m_bGriplight)
|
|
|
|
|
Griplight(FALSE);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 从旧的ID方式获得ads_name
|
2026-09-28 15:28:50 +08:00
|
|
|
#ifdef _WIN64
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::SetFromOldId(__int64 lOldId)
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
id.setFromOldId(lOldId);
|
|
|
|
|
acdbGetAdsName(m_adsName, id);
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::SetFromOldId(long lOldId)
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
id.setFromOldId(lOldId);
|
|
|
|
|
acdbGetAdsName(m_adsName, id);
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 从Handle字符串方式获得ads_name
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity& CKTAdsEntity::SetFromHandle(LPCTSTR pszHandle)
|
|
|
|
|
{
|
|
|
|
|
acdbHandEnt(pszHandle, m_adsName);
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 获取旧的ID值
|
2026-09-28 15:28:50 +08:00
|
|
|
Adesk::IntDbId CKTAdsEntity::AsOldId() const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.asOldId();
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 取得ads_name
|
2026-09-28 15:28:50 +08:00
|
|
|
void CKTAdsEntity::GetAdsName(ads_name adsName) const
|
|
|
|
|
{
|
|
|
|
|
CopyMemory(adsName, m_adsName, sizeof(ads_name));
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 取得AcDbObjectId
|
2026-09-28 15:28:50 +08:00
|
|
|
void CKTAdsEntity::GetObjectId(AcDbObjectId& idEnt) const
|
|
|
|
|
{
|
|
|
|
|
acdbGetObjectId(idEnt, m_adsName);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 获得与之关联的Handle
|
2026-09-28 15:28:50 +08:00
|
|
|
AcDbHandle CKTAdsEntity::Handle() const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.handle();
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 判断是否有效
|
2026-09-28 15:28:50 +08:00
|
|
|
bool CKTAdsEntity::IsValid() const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.isValid();
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 判断是否被删除
|
2026-09-28 15:28:50 +08:00
|
|
|
bool CKTAdsEntity::IsErased() const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.isErased();
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 设置高亮显示
|
2026-09-28 15:28:50 +08:00
|
|
|
void CKTAdsEntity::Highlight(BOOL bHighlight, BOOL bUpdate)
|
|
|
|
|
{
|
|
|
|
|
m_bHighlight = (bHighlight && bUpdate);
|
|
|
|
|
if (bUpdate)
|
|
|
|
|
{
|
|
|
|
|
acedRedraw(m_adsName, (bHighlight ? 3 : 4));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 设置夹点显示
|
2026-09-28 15:28:50 +08:00
|
|
|
void CKTAdsEntity::Griplight(BOOL bGriplight, BOOL bUpdate)
|
|
|
|
|
{
|
|
|
|
|
BOOL bNoCmd = (curDoc() != NULL && curDoc()->isQuiescent());
|
|
|
|
|
m_bGriplight = (bGriplight && bUpdate && bNoCmd);
|
|
|
|
|
if (bUpdate && bNoCmd)
|
|
|
|
|
{
|
|
|
|
|
struct resbuf* pRbGrip = NULL;
|
|
|
|
|
struct resbuf* pRbPick = NULL;
|
|
|
|
|
acedSSGetFirst(&pRbGrip, &pRbPick);
|
|
|
|
|
|
|
|
|
|
CKTAdsPickSet ssGrip, ssPick;
|
|
|
|
|
|
|
|
|
|
struct resbuf* pRb;
|
|
|
|
|
for (pRb = pRbGrip; pRb != NULL; pRb = pRb->rbnext)
|
|
|
|
|
{
|
|
|
|
|
if (pRb->restype == RTPICKS)
|
|
|
|
|
{
|
|
|
|
|
ssGrip += pRb->resval.rlname;
|
|
|
|
|
acedSSFree(pRb->resval.rlname);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
acutRelRb(pRbGrip);
|
|
|
|
|
//
|
|
|
|
|
for (pRb = pRbPick; pRb != NULL; pRb = pRb->rbnext)
|
|
|
|
|
{
|
|
|
|
|
if (pRb->restype == RTPICKS)
|
|
|
|
|
{
|
|
|
|
|
ssPick += pRb->resval.rlname;
|
|
|
|
|
acedSSFree(pRb->resval.rlname);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
acutRelRb(pRbPick);
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity adsEnt(m_adsName);
|
|
|
|
|
if (bGriplight)
|
|
|
|
|
{
|
|
|
|
|
ssGrip += adsEnt;
|
|
|
|
|
ssPick += adsEnt;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ssGrip -= adsEnt;
|
|
|
|
|
ssPick -= adsEnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
acedSSSetFirst((ssGrip.IsEmpty() ? NULL : ssGrip),
|
|
|
|
|
(ssPick.IsEmpty() ? NULL : ssPick));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 重载运算符号=
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity& CKTAdsEntity::operator=(const CKTAdsEntity& adsEnt)
|
|
|
|
|
{
|
|
|
|
|
CopyMemory(m_adsName, adsEnt.m_adsName, sizeof(ads_name));
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::operator=(const AcDbObjectId& idEnt)
|
|
|
|
|
{
|
|
|
|
|
acdbGetAdsName(m_adsName, idEnt);
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::operator=(const AcDbHandle& handle)
|
|
|
|
|
{
|
|
|
|
|
TCHAR szHandle[10];
|
|
|
|
|
handle.getIntoAsciiBuffer(szHandle);
|
|
|
|
|
acdbHandEnt(szHandle, m_adsName);
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::operator=(const ads_name adsName)
|
|
|
|
|
{
|
|
|
|
|
CopyMemory(m_adsName, adsName, sizeof(ads_name));
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity& CKTAdsEntity::operator=(int iNull)
|
|
|
|
|
{
|
|
|
|
|
KTASSERT(iNull == NULL);
|
|
|
|
|
ZeroMemory(m_adsName, sizeof(ads_name));
|
|
|
|
|
return (*this);
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 重载运算符号
|
2026-09-28 15:28:50 +08:00
|
|
|
CKTAdsEntity::operator AcDbObjectId()
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CKTAdsEntity::operator AcDbHandle()
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.handle();
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 重载运算符号==
|
2026-09-28 15:28:50 +08:00
|
|
|
bool CKTAdsEntity::operator==(const CKTAdsEntity& adsEnt) const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id1, id2;
|
|
|
|
|
acdbGetObjectId(id1, m_adsName);
|
|
|
|
|
acdbGetObjectId(id2, adsEnt.m_adsName);
|
|
|
|
|
return (id1 == id2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKTAdsEntity::operator==(const AcDbObjectId& idEnt) const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return (id == idEnt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKTAdsEntity::operator==(const AcDbHandle& handle) const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return (id.handle() == handle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKTAdsEntity::operator==(const ads_name adsName) const
|
|
|
|
|
{
|
|
|
|
|
AcDbObjectId id1, id2;
|
|
|
|
|
acdbGetObjectId(id1, m_adsName);
|
|
|
|
|
acdbGetObjectId(id2, adsName);
|
|
|
|
|
return (id1 == id2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CKTAdsEntity::operator==(int iNull) const
|
|
|
|
|
{
|
|
|
|
|
KTASSERT(iNull == NULL);
|
|
|
|
|
AcDbObjectId id;
|
|
|
|
|
acdbGetObjectId(id, m_adsName);
|
|
|
|
|
return id.isNull();
|
|
|
|
|
}
|