Files
envi-code/SourceCode/Code2026/Dimension/AecDbSymbMultiLeader.h
T

161 lines
6.3 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#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;
};