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

161 lines
6.6 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#pragma once
2026-09-28 15:28:50 +08:00
#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:
2026-10-04 00:04:20 +08:00
// gjm add 为电气 kSortLine 类型
enum TArrowStyle { kNone = 0, kDote = 1, kArrow = 2, kCrossing = 3, kSortLine = 4, }; // 箭号型式
2026-09-28 15:28:50 +08:00
// sg add 090216
2026-10-04 00:04:20 +08:00
enum TSymbMLTextAlign { kAtStart = 1, kAtMiddle = 2, kAtEnd = 3, }; // 文字对齐方式
2026-09-28 15:28:50 +08:00
protected:
2026-10-04 00:04:20 +08:00
TArrowStyle m_arrow; // 箭头标记
TSymbMLTextAlign m_nTextAlign; // 文字对齐方式,sg add 090216
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
ADSGePoint3d m_ptLeader; // 引线端点
double m_nTextBaseLen; // 基线长度, >0右引, <0左引
2026-09-28 15:28:50 +08:00
ADSGePointList m_lstVertexes;
double m_nArrowSize;
2026-10-04 00:04:20 +08:00
// 文字参数
Adesk::UInt8 m_bSideText; // 是否为线端文字
2026-09-28 15:28:50 +08:00
TCString m_sText1;
TCString m_sText2;
2026-10-04 00:04:20 +08:00
double m_dText2BaseRatio; // TArch8,文字距基线系数,sg add 081111
double m_dPageWidth; // 页宽(不乘字高),0为单行文字,sg add 090216
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题
2026-09-28 15:28:50 +08:00
BOOL m_bSymbMultiLeader;
// TArch9.0
2026-10-04 00:04:20 +08:00
// 0x01引线平行
2026-09-28 15:28:50 +08:00
Adesk::UInt8 m_nLeaderFlag;
2026-10-04 00:04:20 +08:00
// 用于确定引线平行时的平行方向,不显示到图面上
2026-09-28 15:28:50 +08:00
ADSGePoint3d m_ptLeaderDirection;
2026-10-04 00:04:20 +08:00
// add by gjm 为 kSortLine 增加两个点
2026-09-28 15:28:50 +08:00
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
2026-10-04 00:04:20 +08:00
virtual void GetTips(PtrList<ObjInfoUnit> &) const; // 取动态属性显示数据
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
2026-09-28 15:28:50 +08:00
virtual TextPosition FindSubText(const TCHAR *sSubText, TextPosition &posStart, TextRange *pRange = NULL) const;
2026-10-04 00:04:20 +08:00
// 返回下一次查找的开始位置
2026-09-28 15:28:50 +08:00
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
2026-10-04 00:04:20 +08:00
// sg add 110301,支持统一标高
2026-09-28 15:28:50 +08:00
virtual bool UnifyElevation(double dElevation = 0.0);
// Helper Method
2026-10-04 00:04:20 +08:00
// 返回值为绝对值
2026-09-28 15:28:50 +08:00
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);
2026-10-04 00:04:20 +08:00
// sg modify 120104,新增加的参数用于判断是否要给m_ptLeaderDirection赋值,内部数据用于引线平行样式
// 默认为要,如果是先调用GetLeaderVertexes函数,获得了点链表后,在点链表中添加一些点,则传FALSE
2026-09-28 15:28:50 +08:00
// 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);
2026-10-04 00:04:20 +08:00
// sg add 081111,bRealDist用来控制,返回“实际距离”(自动乘字高)或“系数”
2026-09-28 15:28:50 +08:00
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);
2026-10-04 00:04:20 +08:00
// 注:当设置的宽度为0时,表示单行显示,用默认最小的宽度
2026-09-28 15:28:50 +08:00
void SetPageWidth(double dVal = 0, BOOL bAsPaperUnit = TRUE);
2026-10-04 00:04:20 +08:00
// sg add 090410,线下文字页宽,动态数据
2026-09-28 15:28:50 +08:00
double GetPageWidth2(BOOL bAsPaperUnit = TRUE) const;
void SetPageWidth2(double dVal = 0, BOOL bAsPaperUnit = TRUE);
2026-10-04 00:04:20 +08:00
// sg add 090413,判断是否是单行文字
BOOL IsUpText() const; // 线上文字
BOOL IsDownText() const; // 线下文字
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题
2026-09-28 15:28:50 +08:00
void SetSymbMultiLeader(BOOL bSymbMultiLeader);
// TArch9
2026-10-04 00:04:20 +08:00
// 引线是否平行
2026-09-28 15:28:50 +08:00
void SetLeaderParalle(BOOL bParallel);
BOOL IsLeaderParall() const;
2026-10-04 00:04:20 +08:00
// 获得引线平行时的平行方向点
2026-09-28 15:28:50 +08:00
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:
2026-10-04 00:04:20 +08:00
ADSGePoint3d GetTextPt(BOOL bUseLayout = TRUE) const; // sg add 090413,分别计算两段文字位置点
2026-09-28 15:28:50 +08:00
ADSGePoint3d GetText2Pt(BOOL bUseLayout = TRUE) const;
};