#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 #include #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 &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 &vecIds); //通过文字更新导线实体 void RenewWireByText(const std::vector &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 m_vecIds; //实体 版本1 std::vector m_vecText; //标注文字 版本2 std::vector m_vecBottomVt; //底部切线方向 版本2 }; #endif // !defined(AFX_TDBWIREDIMNEW_H__074705D3_6CDF_4AE0_804E_F455B5A6C41A__INCLUDED_)