221 lines
6.4 KiB
C++
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__)
|