170 lines
6.3 KiB
C++
170 lines
6.3 KiB
C++
#ifndef _FINDANDREPLACE_H_
|
|
#define _FINDANDREPLACE_H_
|
|
#include "StdAfx.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Zyu add on 101019,抽象类,定义不同类型对象对应的查找替换方法
|
|
class CFAREntity
|
|
{
|
|
public:
|
|
CFAREntity();
|
|
virtual ~CFAREntity();
|
|
|
|
// 搜索文字
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange) = 0;
|
|
// 替换文字
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText) = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 上华对象的查找替换类
|
|
class CFARTDbEntity : CFAREntity
|
|
{
|
|
public:
|
|
// 搜索文字
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
// 替换文字
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 块参照的查找替换类
|
|
class CFARInsert : CFAREntity
|
|
{
|
|
public:
|
|
CFARInsert();
|
|
|
|
// 查找文字
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
// 替换文字
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
|
|
// 设置实体数组
|
|
void SetEntityIds(const AcDbObjectIdArray& arObjId);
|
|
// 得到实体数组
|
|
const AcDbObjectIdArray& GetEntityIds() const;
|
|
|
|
// 设置搜索选项
|
|
void SetFindInsertOption(BOOL bFindAttrib, BOOL bFindContent, BOOL bFindXref, BOOL bNoHidden);
|
|
// 重新开始搜索
|
|
void ResetFind();
|
|
|
|
protected:
|
|
// 根据给出的矩阵关系,转换指示文本范围的线框位置
|
|
void TransformRange(TTextRange *& pRange, const AcGeMatrix3d &matrix) const;
|
|
|
|
// 得到块参照的所有属性ID
|
|
void GetAttribIds(AcDbBlockReference *pRef);
|
|
// 得到块表记录中所有属性定义的ID
|
|
void GetAttribDefIds(AcDbBlockTableRecord *pBlkRec);
|
|
|
|
// 调整迭代器指针,指向m_arObjId中的第一个id代表的实体
|
|
bool SeekBlockRecIter(AcDbBlockTableRecordIterator *pIter);
|
|
// 判断实体是否满足搜索选项要求,不满足返回false
|
|
bool ContinueFind(AcDbEntity *pEnt, bool bIsXref) const;
|
|
// 清空id数组
|
|
void ClearObjIdArray(AcDbObjectIdArray &arObjId);
|
|
|
|
private:
|
|
AcDbObjectIdArray m_arObjId; // 记录打开实体的顺序
|
|
AcDbObjectIdArray m_arAttribId; // 块参照的所有属性ID
|
|
AcDbObjectIdArray m_arAttribDefId; // 块表记录的所有属性定义的ID
|
|
|
|
BOOL m_bFindAttrib; // 搜索块属性
|
|
BOOL m_bFindContent; // 搜索块内容
|
|
BOOL m_bFindXref; // 搜索外部参照
|
|
BOOL m_bNoHidden; // 忽略不可见块属性
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 块属性的查找替换类
|
|
class CFARInsertAttrib : CFAREntity
|
|
{
|
|
public:
|
|
CFARInsertAttrib();
|
|
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
|
|
// 设置忽略隐藏项
|
|
void SetNoHidden(BOOL bNoHidden);
|
|
|
|
private:
|
|
BOOL m_bNoHidden; // 忽略不可见块属性
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 单行文字的查找替换类
|
|
class CFARText : CFAREntity
|
|
{
|
|
public:
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
|
|
// 得到单行文字内的字符串
|
|
virtual bool GetEntityStrings(AcDbEntity *pEnt, CStringArray &arString);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 多行文字的查找替换类
|
|
class CFARMText : CFAREntity
|
|
{
|
|
public:
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
|
|
// 得到多行文字内的字符串
|
|
bool GetEntityStrings(AcDbEntity *pEnt, CStringArray &arString);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 标注的查找替换类
|
|
class CFARDimension : CFAREntity
|
|
{
|
|
public:
|
|
virtual TTextPosition FindText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
virtual TTextPosition ReplaceText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
typedef CMap<CString, LPCTSTR, bool, bool> CMapLayer; // 图层名称和是否关闭或者冻结的关系映射类
|
|
// 查找替换工具集
|
|
class CFARUtil
|
|
{
|
|
public:
|
|
// 查找文字
|
|
TTextPosition FindEntText(TEntitySet ent, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
TTextPosition FindEntText(AcDbEntity *pEnt, const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange);
|
|
// 替换文字
|
|
TTextPosition ReplaceEntText(TEntitySet ent, TTextPosition posFind, const TCHAR *szRepText);
|
|
TTextPosition ReplaceEntText(AcDbEntity *pEnt, TTextPosition posFind, const TCHAR *szRepText);
|
|
|
|
// id数组的Set/Get函数
|
|
void SetEntityIds(const AcDbObjectIdArray &arObjId);
|
|
const AcDbObjectIdArray& GetEntityIds() const;
|
|
|
|
// 设置查找选项
|
|
void SetFindOption(BOOL bFindAttrib, BOOL bFindContent, BOOL bFindXref, BOOL bNoHidden);
|
|
// 重新开始搜索
|
|
void ResetFind();
|
|
|
|
protected:
|
|
// 判断实体是否是在关闭或者隐藏层上
|
|
bool IsHiddenEntity(AcDbEntity *&pEnt);
|
|
// 判断id对应的层是否是关闭或者隐藏层
|
|
bool IsHiddenLayer(const AcDbObjectId &objIdLayer) const;
|
|
|
|
private:
|
|
CFARTDbEntity m_TDbEntity; // 上华对象的查找替换方法
|
|
CFARInsertAttrib m_InsertAttrib; // 块属性的查找替换方法
|
|
CFARInsert m_Insert; // 块参照/外部参照的查找替换方法
|
|
CFARText m_Text; // 单行文字的查找替换方法
|
|
CFARMText m_MText; // 多行文字的查找替换方法
|
|
CFARDimension m_Dimension; // 标注的查找替换方法
|
|
|
|
BOOL m_bNoHidden; // 标记是否忽略隐藏项
|
|
CMapLayer m_mapLayer; // 记录图层的隐藏信息
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
#endif |