162 lines
6.6 KiB
C++
162 lines
6.6 KiB
C++
#pragma once
|
||
#include "AecDbSymbWithText.h"
|
||
#include "ObjInfoUnit.h"
|
||
|
||
class AecXDbText;
|
||
class AecXDbSymbMultiLeader : public AecXDbSymbWithText
|
||
{
|
||
public:
|
||
ACRX_DECLARE_MEMBERS(AecXDbSymbMultiLeader);
|
||
private:
|
||
const static Adesk::UInt8 g_nVersion;
|
||
|
||
public:
|
||
// gjm add 为电气 kSortLine 类型
|
||
enum TArrowStyle { kNone = 0, kDote = 1, kArrow = 2, kCrossing = 3, kSortLine = 4, }; // 箭号型式
|
||
// sg add 090216
|
||
enum TSymbMLTextAlign { kAtStart = 1, kAtMiddle = 2, kAtEnd = 3, }; // 文字对齐方式
|
||
|
||
protected:
|
||
TArrowStyle m_arrow; // 箭头标记
|
||
TSymbMLTextAlign m_nTextAlign; // 文字对齐方式,sg add 090216
|
||
|
||
ADSGePoint3d m_ptLeader; // 引线端点
|
||
double m_nTextBaseLen; // 基线长度, >0右引, <0左引
|
||
ADSGePointList m_lstVertexes;
|
||
double m_nArrowSize;
|
||
|
||
// 文字参数
|
||
Adesk::UInt8 m_bSideText; // 是否为线端文字
|
||
TCString m_sText1;
|
||
TCString m_sText2;
|
||
|
||
double m_dText2BaseRatio; // TArch8,文字距基线系数,sg add 081111
|
||
double m_dPageWidth; // 页宽(不乘字高),0为单行文字,sg add 090216
|
||
|
||
// sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题
|
||
BOOL m_bSymbMultiLeader;
|
||
|
||
// TArch9.0
|
||
// 0x01引线平行
|
||
Adesk::UInt8 m_nLeaderFlag;
|
||
// 用于确定引线平行时的平行方向,不显示到图面上
|
||
ADSGePoint3d m_ptLeaderDirection;
|
||
|
||
// add by gjm 为 kSortLine 增加两个点
|
||
AcGePoint3d m_ptSortLineStart, m_ptSortLineEnd;
|
||
|
||
public:
|
||
AecXDbSymbMultiLeader();
|
||
~AecXDbSymbMultiLeader();
|
||
virtual BOOL IsValid() const;
|
||
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
|
||
|
||
//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 subGetGripPoints(AcDbGripDataPtrArray& grips,
|
||
const double curViewUnitSize,
|
||
const int gripSize,
|
||
const AcGeVector3d& curViewDir,
|
||
const int bitflags) const {
|
||
return Acad::eNotImplementedYet;
|
||
}
|
||
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const;
|
||
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
|
||
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
|
||
const AcGeVector3d& offset);
|
||
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
|
||
const AcGeVector3d& offset);
|
||
|
||
// drived from TDbEntity
|
||
virtual void GetTips(PtrList<ObjInfoUnit> &) const; // 取动态属性显示数据
|
||
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
|
||
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
|
||
virtual int ConvertText(TConvertTextPtr ptr, void *pData = NULL);
|
||
BOOL GetText(Adesk::UInt32 cookies, AecXDbText &text) const;
|
||
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
|
||
virtual TextPosition FindSubText(const TCHAR *sSubText, TextPosition &posStart, TextRange *pRange = NULL) const;
|
||
// 返回下一次查找的开始位置
|
||
virtual TextPosition ReplaceSubText(const TextPosition &posRep, const TCHAR *sRepText, TextRange *pRange = NULL);
|
||
virtual long GetSubTextNum()const { return 2; } // ok
|
||
virtual void SetSubText(long i, CString sText) { if (i == 0)SetText1(sText); else SetText2(sText); }//ok
|
||
virtual const TCHAR *GetDefaultLayer() const;
|
||
|
||
//virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
|
||
// BOOL *bErase); // sg add 090414
|
||
|
||
// sg add 110301,支持统一标高
|
||
virtual bool UnifyElevation(double dElevation = 0.0);
|
||
|
||
// Helper Method
|
||
// 返回值为绝对值
|
||
double GetMinTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
|
||
double GetDefaultTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
|
||
|
||
// Properties
|
||
const TCHAR *GetText1() const;
|
||
const TCHAR *GetText2() const;
|
||
ADSGePoint3d GetLeaderPoint() const;
|
||
ADSGePoint3d GetTextBasePoint() const;
|
||
double GetTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
|
||
void GetLeaderVertexes(ADSGePointList &lstPoints) const;
|
||
TArrowStyle GetArrow() const;
|
||
BOOL IsSideText() const;
|
||
double GetArrowSize(BOOL bAsPaperUnit = TRUE) const;
|
||
|
||
void SetText1(const TCHAR *pszText);
|
||
void SetText2(const TCHAR *pszText);
|
||
void SetLeaderPoint(ADSGePoint3d pt);
|
||
void SetTextBaseLen(double val, BOOL bAsPaperUnit = TRUE);
|
||
// sg modify 120104,新增加的参数用于判断是否要给m_ptLeaderDirection赋值,内部数据用于引线平行样式
|
||
// 默认为要,如果是先调用GetLeaderVertexes函数,获得了点链表后,在点链表中添加一些点,则传FALSE
|
||
// void SetLeaderVertexes(const ADSGePointList &lstPoints);
|
||
void SetLeaderVertexes(const ADSGePointList &lstPoints, BOOL bUpdateLeaderDirection = TRUE);
|
||
void SetArrow(TArrowStyle ar);
|
||
void SetSideText(BOOL bTrue);
|
||
void SetArrowSize(double nSize, BOOL bAsPaperUnit = TRUE);
|
||
|
||
// sg add 081111,bRealDist用来控制,返回“实际距离”(自动乘字高)或“系数”
|
||
double GetText2BaseRatio(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const;
|
||
void SetText2BaseRatio(double dVal, BOOL bAsPaperUnit = TRUE);
|
||
|
||
// sg add 090216
|
||
TSymbMLTextAlign GetTextAlign() const;
|
||
double GetPageWidth(BOOL bAsPaperUnit = TRUE) const;
|
||
void SetTextAlign(TSymbMLTextAlign align);
|
||
// 注:当设置的宽度为0时,表示单行显示,用默认最小的宽度
|
||
void SetPageWidth(double dVal = 0, BOOL bAsPaperUnit = TRUE);
|
||
|
||
// sg add 090410,线下文字页宽,动态数据
|
||
double GetPageWidth2(BOOL bAsPaperUnit = TRUE) const;
|
||
void SetPageWidth2(double dVal = 0, BOOL bAsPaperUnit = TRUE);
|
||
|
||
// sg add 090413,判断是否是单行文字
|
||
BOOL IsUpText() const; // 线上文字
|
||
BOOL IsDownText() const; // 线下文字
|
||
|
||
// sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题
|
||
void SetSymbMultiLeader(BOOL bSymbMultiLeader);
|
||
|
||
// TArch9
|
||
// 引线是否平行
|
||
void SetLeaderParalle(BOOL bParallel);
|
||
BOOL IsLeaderParall() const;
|
||
|
||
// 获得引线平行时的平行方向点
|
||
void SetLeaderDirection(ADSGePoint3d &pt);
|
||
ADSGePoint3d GetLeaderDirection() const;
|
||
|
||
// add by gjm for kSortLine type
|
||
void SetSortLinePt(const AcGePoint3d &ptS, const AcGePoint3d &ptE) { m_ptSortLineStart = ptS; m_ptSortLineEnd = ptE; }
|
||
void GetSortLinePt(AcGePoint3d &ptS, AcGePoint3d &ptE) { ptS = m_ptSortLineStart; ptE = m_ptSortLineEnd; }
|
||
protected:
|
||
ADSGePoint3d GetTextPt(BOOL bUseLayout = TRUE) const; // sg add 090413,分别计算两段文字位置点
|
||
ADSGePoint3d GetText2Pt(BOOL bUseLayout = TRUE) const;
|
||
};
|