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

130 lines
5.3 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 "GePoly2D.h"
#include "objinfounit.h"
class AecXDbText;
class AecXDbSymbArrow : public AecXDbSymbWithText
{
public:
ACRX_DECLARE_MEMBERS(AecXDbSymbArrow);
private:
const static Adesk::UInt8 g_nVersion;
public:
enum TArTextAlign { kAtSide = 1, kAlignMid = 2, kAlignEnd = 3, };
2026-10-04 00:04:20 +08:00
// enum TArrowType {kArrow=0, kHalfArrow=1}; // sg modify 081231,8.0增加了箭号型式
2026-09-28 15:28:50 +08:00
enum TArrowType { kArrow = 0, kHalfArrow = 1, kDote = 2, kCrossing = 3, kNone = 4, };
protected:
2026-10-04 00:04:20 +08:00
TArTextAlign m_nFlag; // 控制标记
2026-09-28 15:28:50 +08:00
GePoly2D m_poly;
2026-10-04 00:04:20 +08:00
// 文字参数
2026-09-28 15:28:50 +08:00
TCString m_sText;
2026-10-04 00:04:20 +08:00
ADSGePoint3d m_ptText; // 文字位置
2026-09-28 15:28:50 +08:00
double m_nArrowSize;
// void GetText(AecXDbText &text) const; // sg modify 090106
BOOL GetText(AecXDbText &text, Adesk::UInt32 cookies) const;
2026-10-04 00:04:20 +08:00
TArrowType m_nType; // TArch7 箭头样式
double m_dText2BaseRatio; // TArch8,文字距基线系数,sg add 081111
BOOL m_bShowText2; // 是否显示文字2,sg add 090106
TCString m_sText2; // 文字2
ADSGePoint3d m_ptText2; // 文字2位置,对在线端文字不起作用
2026-09-28 15:28:50 +08:00
public:
AecXDbSymbArrow();
~AecXDbSymbArrow();
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;
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);
//virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
// BOOL *bErase); // sg add 090107
// 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);
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 1; } // ok
// virtual void SetSubText(long i,CString sText) {assertWriteEnabled(); m_sText=sText;} // ok
2026-10-04 00:04:20 +08:00
// sg modify 090106,将该函数的实现放到了CPP中
2026-09-28 15:28:50 +08:00
virtual void SetSubText(long i, CString sText);
2026-10-04 00:04:20 +08:00
// sg add 101116,支持统一标高
2026-09-28 15:28:50 +08:00
virtual bool UnifyElevation(double dElevation = 0.0);
// Properties
const TCHAR *GetText() const;
2026-10-04 00:04:20 +08:00
// sg modify 120104,既可返回ECS点,又可以返回WCS点
2026-09-28 15:28:50 +08:00
// ADSGePoint3d GetTextLocation() const;
ADSGePoint3d GetTextLocation(BOOL bEcsPoint = FALSE) const;
void GetPoly2D(GePoly2D &poly) const;
TArTextAlign GetTextAlign() const;
ADSGePoint3d GetDefaultTextLocation();
AcGiDraw::TextAlignment GetTextAlignment() const;
double GetTextBaseDir() const;
double GetArrowSize(BOOL bAsPaperUnit = TRUE) const;
void SetTextLocation(ADSGePoint3d ptLoc);
void SetText(const TCHAR *pszText);
void SetPoly2D(const GePoly2D &poly);
void SetTextAlign(TArTextAlign align);
void SetArrowSize(double nSize, BOOL bAsPaperUnit = TRUE);
TArrowType GetArrowType()const { assertReadEnabled(); return m_nType; } // ok
void SetArrowType(TArrowType type) { assertWriteEnabled(); m_nType = type; } // ok
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);
2026-10-04 00:04:20 +08:00
// sg add 090106,处理文字2使用
2026-09-28 15:28:50 +08:00
BOOL GetShowText2() const;
const TCHAR *GetText2() const;
2026-10-04 00:04:20 +08:00
// sg modify 120104,既可返回ECS点,又可以返回WCS点
2026-09-28 15:28:50 +08:00
// ADSGePoint3d GetText2Location() const;
ADSGePoint3d GetText2Location(BOOL bEcsPoint = FALSE) const;
void SetShowText2(BOOL bShow);
void SetText2Location(ADSGePoint3d ptLoc);
void SetText2(const TCHAR *pszText);
ADSGePoint3d GetDefaultText2Location(); // sg add 090106
AcGiDraw::TextAlignment GetText2Alignment() const;
// sg add 090623
double GetDimAngle(double dAngle) const;
public:
2026-10-04 00:04:20 +08:00
// add by lgy 111227,将文字基点由世界坐标系转换为实体坐标系
// 获取ECS原点,文字位置参考点
2026-09-28 15:28:50 +08:00
AcGePoint2d GetEcsOriginPt(BOOL bUp) const;
void GetEcsAxisVector(AcGeVector2d &xAxis, AcGeVector2d &yAxis) const;
2026-10-04 00:04:20 +08:00
// 通过bUp来控制获得上下文字的wcs坐标 true为上或者在线端
2026-09-28 15:28:50 +08:00
ADSGePoint3d GetWcsTextPt(BOOL bUp) const;
};