Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/FindAndReplaceUtil.h
T
2026-09-28 15:28:50 +08:00

170 lines
5.8 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