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

176 lines
6.5 KiB
C++

#ifndef _TDBWIREDIMNEW_H__
#define _TDBWIREDIMNEW_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*============================================================================*
* Copyright(c), 1994-2008, Beijing Tangent Engineering Software Co.Ltd.
* 作 者: 谢真
* 创建时间: 2008-12-01
* 描 述: 导线标注
* 归属项目: 电气
=============================================================================*/
#include <vector>
#include <map>
#include "dbSymbolAnnotate.h"
//文字查找信息结构体
typedef struct _TextFindInfo_
{
CString sSubText; //要查找的字符串
int nTextPos; //查找到字符串的起始位置
}TextFindInfo;
class PS_EXP TDbWireDimNew : public TDbSymbWithText
{
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbWireDimNew);
public:
TDbWireDimNew();
virtual ~TDbWireDimNew();
public:
//初始化
void SetInitDims(const AcGePoint3d &ptS/*起点*/,const AcGePoint3d &ptTurn/*拐点*/,const AcGeVector3d &vtDir/*方向向量*/,BOOL bSample = FALSE);
//标注的方向
void SetDirVec(const AcGeVector3d &vt);
//设置文字起点
void SetStartPt(const AcGePoint3d &ptS);
//设置拐点
void SetTurnPt(const AcGePoint3d &ptTurn);
//需要标注的实体
void AddEnts(const AcDbSoftPointerId &id);
//得到标注的实体ID
void GetDimEnts(std::vector<AcDbObjectId> &vecIds);
//设置是否简标
void SetDimSample(BOOL bSample);
//设置是否显示线
void SetShowLine(BOOL bShow = TRUE);
//判断是否简标
BOOL IsDimSample();
//更新线长
void RenewLinLen();
//将实体的顺序颠倒
void ReverseEntitys();
//得到实体点信息
AcGePoint3d GetStartPt();
void GetStartPt(AcGePoint3dArray &arPts);
//设置标注起始点
void SetStartPt(const AcGePoint3dArray& arPts);
AcGePoint3d GetTurnPt();
AcGeVector3d GetDirVector();
//得到线的长度
double GetLineLen() const;
//通过实体更新导线文字
void RenewWireDimText(const std::vector<AcDbObjectId> &vecIds);
//通过文字更新导线实体
void RenewWireByText(const std::vector<AcDbObjectId> &vecIds);
//标注为回路编号标注时,设置回路编号
void SetWireName(LPCTSTR pszWireName);
//返回当前回路编号
CString getWireText();
//以下几个函数为T20使用 axc add 2014-07-01
//设置是否显示斜线(T20回路编号分两种样式FALSE时为另外一种标准样式-简谱样式)
void SetShowObliqueLine(BOOL bShow = TRUE);
BOOL GetShowObliqueLine() const;
//设置引出线的长度
void SetLeadLineLen(double dLen);
double GetLeadLineLen() const;
static void MergeText(CString& sMerge,const CString& csArea,const CString& csMode,const CString& csRadius,const CString& csPlace);
//从ENTITY派生
public:
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*);
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
//tangent 派生
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual int GetFirstVersion()const{return 8;}
virtual TSubText* HitTestText(XPoint pt)const {return NULL;};
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用), axc add 2015-05-13
virtual TTextPosition FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange=NULL) const;
// 返回下一次查找的开始位置
virtual TTextPosition ReplaceSubText(const TTextPosition &posRep, const TCHAR *sRepText, TTextRange *pRange=NULL);
virtual long GetSubTextNum()const{return m_vecText.size();} // ok
virtual void SetSubText(long i,CString sText);//ok
//计算文字插入点
XPoint GetTextPt(Adesk::UInt32 cookies,BOOL bUseLayout = TRUE) const;;
BOOL GetText(Adesk::UInt32 cookies, TDbText &text, TDbText &text2) const;//text2 保存未解密时文字的内容
//end
//返回弱电缆数
CString GetWeakLineNum();
private:
//版本控制
virtual Acad::ErrorStatus dwgInFieldsVer1 (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFieldsVer1(AcDbDwgFiler*) const;
virtual Acad::ErrorStatus dwgInFieldsVer2 (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFieldsVer2(AcDbDwgFiler*) const;
//绘制标注线
Acad::ErrorStatus ExplodeOrDraw2dLine(XExplodeDraw &dc) const;
//绘制标注文字
Acad::ErrorStatus ExplodeOrDraw2dText(XExplodeDraw &dc) const;
//得到文字长度
double GetTextLen() const;
//得到文字高度
double GetDimTextHeght() const;
//得到文字个数
int GetTextCount() const;
//得到需要的文字
void GetNeedDimStr(const AcDbObjectId &id, CString &sDimText, CString &csWeakWireNum) const;//modify by wx 2015-1-14 增加了弱电缆数的返回
void GetNeedShowDimStr(const AcDbObjectId &id, CString &sDimShowText, CString &csWeakWireNum) const; //add by wx 显示的情况
//得到交点
void GetInterPoints(const AcDbObjectId &id);
//得到实体方向向量
void GetEntVector(const AcDbObjectId &id,AcGeVector3d &vtDir) const;
//对文字加密
void EnCryptText(LPCTSTR lpSource,CString &sDestination);
//对文字解密
void DeCryptText(LPCTSTR lpSource,CString &sDestination) const;
//拆分文字
void ParseText(LPCTSTR lpSource,CString &csType,CString &csRadius,CString &csMode,
CString &csPlace,CString &csArea,CString &csNorm,CString &csName) const;
//绘制简谱样式回路编号
void DrawSimpleDimWire(XExplodeDraw &dc) const;
//绘制标准样式回路编号(固定转角角度时)
void DrawNormWireForFixRota(XExplodeDraw &dc) const;
private:
AcGePoint3d m_ptS; //起点坐标
AcGePoint3d m_ptTurn; //拐点位置
AcGeVector3d m_vtDir; //标注的方向
AcGePoint3dArray m_arPtS; //起点位置
BOOL m_bSample; //是否是简标(只标回路编号)
BOOL m_bShowLine; //是否显示线
CString m_csWeakWireNum; //add by wx 弱电缆数
double m_dLineBaseLen; //线最初长度
double m_dLeadLineLen;//简谱样式引出线的长度T20使用
const static Adesk::UInt8 g_nVersion; //版本控制
std::vector<AcDbSoftPointerId> m_vecIds; //实体 版本1
std::vector<CString> m_vecText; //标注文字 版本2
std::vector<AcGeVector3d> m_vecBottomVt; //底部切线方向 版本2
};
#endif // !defined(AFX_TDBWIREDIMNEW_H__074705D3_6CDF_4AE0_804E_F455B5A6C41A__INCLUDED_)