176 lines
6.5 KiB
C++
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_)
|