Files
envi-code/SourceCode/Code2026/Dimension/AecDbSymbMultiLeader.h
T
2026-09-28 15:28:50 +08:00

162 lines
6.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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;
};