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

221 lines
6.4 KiB
C++

#if !defined(__KTOBJLIFEMGR_H__)
#define __KTOBJLIFEMGR_H__
#ifdef EARTHWORM_EXPORT
#define DLLIMPEXP __declspec(dllexport)
#else
#define DLLIMPEXP __declspec(dllimport)
#endif
// Description:
// 类 CKTObjLifeMgr 用于临时管理AcDbObject数据指针,使用它可以简化一堆数据
// 指针,它析构时自动处理指针的删除或对象删除和关闭,一般在函数中使用
// 如: void CreateSomeEntityAndDrag()
// {
// CKTObjLifeMgr ObjLifeMgr;
// AcDbLine* pLine = new AcDbLine(...);
// ObjLifeMgr.Add(pLine);
// AcDbCircle* pCircle = new AcDbCircle(...);
// ObjLifeMgr.Add(pCircle);
// AcDbText* pText = new AcDbText(...);
// CKTCadUtility::AddToCurrentSpace(pText);
// ObjLifeMgr.Add(pText);
// CKTEntityDragMgr drag(AcGePoint3d::kOrigin, ObjLifeMgr, FALSE);
// if (!drag.DoDrag()) // 操作失败, 直接返回, 无需处理delete/erase/close
// return; // CKTObjLifeMgr自动管理,析构时删除所有数据
// ObjLifeMgr.AddToBlockTableRecord(); // 加入数据库并关闭, 清除管理指针
// }
// Company: Kingtouch Software Corporation. Copyright 2002-2005
// Author: WangYongguang
// Date: 2002.05.01
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class DLLIMPEXP CKTObjLifeMgr
{
public:
// 构造函数
CKTObjLifeMgr(BOOL bErase = TRUE);
CKTObjLifeMgr(AcDbObject* pObj, BOOL bErase = TRUE);
CKTObjLifeMgr(const AcDbVoidPtrArray& arpObj, BOOL bErase = TRUE);
CKTObjLifeMgr(AcDbObjectId idObj, BOOL bErase = FALSE);
CKTObjLifeMgr(const AcDbObjectIdArray& aridObj, BOOL bErase = FALSE);
virtual ~CKTObjLifeMgr();
// 在调用Release()时是否调用erase(对在数据库中的)
BOOL IsEraseAtRelease();
void SetEraseAtRelease(BOOL bEnable);
// 重载操作符
AcDbVoidPtrArray* operator&();
AcDbVoidPtrArray* operator->();
operator AcDbVoidPtrArray*();
// 判断是否数组为空
BOOL IsEmpty();
// 取得数组中实体的个数
int GetCount();
// 取得指定的实体
AcDbObject* Get(int iObj);
AcDbVoidPtrArray* GetAll();
int GetIndex(const AcDbObject* pObj);
int GetIndex(const AcDbObjectId& idObj);
// 添加数据
BOOL Add(AcDbObject* pObj);
BOOL Add(const AcDbVoidPtrArray& arpObj);
BOOL Add(const AcDbObjectId& idObj);
BOOL Add(const AcDbObjectIdArray& aridObj);
// 移除数据, 不处理
BOOL RemoveAt(int iObj);
BOOL Remove(const AcDbObject* pObj);
BOOL Remove(const AcDbVoidPtrArray& arpObj);
BOOL Remove(const AcDbObjectId& idObj);
BOOL Remove(const AcDbObjectIdArray& aridObj);
BOOL Remove();
// 添加数据
CKTObjLifeMgr& operator+=(AcDbObject* pObj);
CKTObjLifeMgr& operator+=(const AcDbVoidPtrArray& arpObj);
CKTObjLifeMgr& operator+=(const AcDbObjectId& idObj);
CKTObjLifeMgr& operator+=(const AcDbObjectIdArray& aridObj);
// 删除数据
CKTObjLifeMgr& operator-=(AcDbObject* pObj);
CKTObjLifeMgr& operator-=(const AcDbVoidPtrArray& arpObj);
CKTObjLifeMgr& operator-=(const AcDbObjectId& idObj);
CKTObjLifeMgr& operator-=(const AcDbObjectIdArray& aridObj);
// 移除数据, 处理, 是否调用erase(对在数据库中的)
BOOL ReleaseAt(int iObj, BOOL bErase);
BOOL Release(const AcDbObject*& pObj, BOOL bErase = FALSE);
BOOL Release(const AcDbVoidPtrArray& arpObj, BOOL bErase = FALSE);
BOOL Release(const AcDbObjectId& idObj, BOOL bErase = FALSE);
BOOL Release(const AcDbObjectIdArray& aridObj, BOOL bErase = FALSE);
BOOL Release(BOOL bErase = FALSE);
// 获取指针
AcDbObject* Find(const AcDbObject* pObj);
AcDbObject* Find(const AcDbObjectId& idObj);
// 加入块表记录, 关闭数据并移除, 返回剩余个数
int AddToBlockTableRecord(AcDbBlockTableRecord* pRec); // 块表记录
int AddToBlockTableRecord(AcDbObjectIdArray& arid, // 返回数据id数组
AcDbBlockTableRecord* pRec); // 块表记录
int AddToBlockTableRecord(LPCTSTR pszBlock = NULL, // 块名, 默认为模型空间
AcDbDatabase* pDb = NULL); // 数据库名, 默认为当前数据库
int AddToBlockTableRecord(AcDbObjectIdArray& arid, // 返回数据id数组
LPCTSTR pszBlock = NULL, // 块名, 默认为模型空间
AcDbDatabase* pDb = NULL); // 数据库名, 默认为当前数据库
// 加入到创建的块表记录,关闭数据并移除,返回块表记录id
AcDbObjectId AddToNewBlockTableRecord(const AcGePoint3d& ptOrigin, // 块表记录原点
LPCTSTR pszBlk = NULL, // 块名,默认为匿名块
AcDbDatabase* pDb = NULL); // 数据库名, 默认为当前数据库
protected:
// 添加,删除,移除消息
virtual void OnObjectAdded(const AcDbObject* pObj);
virtual void OnObjectRemoved(const AcDbObject* pObj);
virtual void OnObjectRelease(const AcDbObject* pObj, BOOL bErase);
// 在调用Release()时是否调用erase(对在数据库中的)
BOOL m_bEraseAtRelease;
AcDbVoidPtrArray m_arpObject;
};
// 在调用Release()时是否调用erase(对在数据库中的)
inline BOOL CKTObjLifeMgr::IsEraseAtRelease()
{
return m_bEraseAtRelease;
}
inline void CKTObjLifeMgr::SetEraseAtRelease(BOOL bEnable)
{
m_bEraseAtRelease = bEnable;
}
inline AcDbVoidPtrArray* CKTObjLifeMgr::operator&()
{
return &m_arpObject;
}
inline AcDbVoidPtrArray* CKTObjLifeMgr::operator->()
{
return &m_arpObject;
}
inline CKTObjLifeMgr::operator AcDbVoidPtrArray*()
{
return &m_arpObject;
}
// 添加数据
inline CKTObjLifeMgr& CKTObjLifeMgr::operator+=(AcDbObject* pObj)
{
Add(pObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator+=(const AcDbVoidPtrArray& arpObj)
{
Add(arpObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator+=(const AcDbObjectId& idObj)
{
Add(idObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator+=(const AcDbObjectIdArray& aridObj)
{
Add(aridObj);
return (*this);
}
// 删除数据
inline CKTObjLifeMgr& CKTObjLifeMgr::operator-=(AcDbObject* pObj)
{
Remove(pObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator-=(const AcDbVoidPtrArray& arpObj)
{
Remove(arpObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator-=(const AcDbObjectId& idObj)
{
Remove(idObj);
return (*this);
}
inline CKTObjLifeMgr& CKTObjLifeMgr::operator-=(const AcDbObjectIdArray& aridObj)
{
Remove(aridObj);
return (*this);
}
// 添加,删除,移除消息
inline void CKTObjLifeMgr::OnObjectAdded(const AcDbObject* pObj)
{
}
inline void CKTObjLifeMgr::OnObjectRemoved(const AcDbObject* pObj)
{
}
inline void CKTObjLifeMgr::OnObjectRelease(const AcDbObject* pObj, BOOL bErase)
{
}
#endif // !defined(__KTOBJLIFEMGR_H__)