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

164 lines
6.8 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"
#include "globalDefine.h"
class AecXDbText;
class AecXDbSymbComposing : public AecXDbSymbWithText
{
public:
ACRX_DECLARE_MEMBERS(AecXDbSymbComposing);
private:
const static Adesk::UInt8 g_nVersion;
public:
//axc add 2015-07-20 add arrow style for telec
enum TArrowStyle { eNone = 0, eDot = 1, eSortLine = 2 };
protected:
Adesk::UInt8 m_bSideText; // 文字在基线边上, 还是在基线上方
ADSGePoint3d m_ptStart, m_ptTurn;
TCString m_sText; // 由回车符隔开
double m_nTextBaseLen; // 左右由正负控制(不乘字高)
// sg add 080904,8.0新需求
double m_dLineSpace; // 行距系数(需要乘字高)
double m_dParagraphSpace; // 段距系数(需要乘字高)
double m_dPageWidth; // 页宽(不乘字高),注:左右由正负控制,0为单行文字
double m_dDist2Line; // 文字距离基线(在线端)或引线(在线上)的距离(需要乘字高)
// 左右由正负控制
TArrowStyle m_arrowStyle; //箭头标记 axc add 2015--7-20
// sg add 081023,8.0新需求2
double m_dText2BaseRatio; // 文字距基线系数(需要乘字高)
AcGiDraw::TextAlignment m_nAlignment; // 文字对齐方式
bool m_bIsStretch; // add by xly on 101228 标记夹点操作是否是拉伸操作
public:
AecXDbSymbComposing();
~AecXDbSymbComposing();
TArrowStyle GetArrowStyle() const;
void SetArrowStyle(TArrowStyle arrowStyle);
virtual BOOL IsValid() const;
void SetArrowSize(double dArrowSize = 3.5, BOOL bAsPaperUni = TRUE);
double GetArrowSize(BOOL bAsPaperUnit = TRUE) const;
//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 subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
// 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 Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
//BOOL *bErase); // sg add 080910
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 { TCStringList sList; GetTexts(sList); return sList.Length(); }//ok
virtual SubText* GetSubText(long iText)const;
virtual SubText* HitTestText(ADSGePoint3d pt)const;
virtual void SetSubText(long i, CString sText);
// sg add 101221,支持夹点ctrl功能切换
virtual int GetCtrlToggleIndex()const { return 7; }
// sg add 110211,支持统一标高
virtual bool UnifyElevation(double dElevation = 0.0);
// Helper Method
double GetDefaultTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
double GetMinTextBaseLen(BOOL bAsPaperUnit) const;
// Properties
const TCHAR *GetText() const;
ADSGePoint3d GetStartPoint() const;
ADSGePoint3d GetTurnPoint() const;
ADSGePoint3d GetEndPoint() const;
double GetTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
BOOL IsSideText() const;
void GetTexts(TCStringList &lstTexts) const;
void SetText(const TCHAR *pszText);
void SetStartPoint(ADSGePoint3d pt);
void SetTurnPoint(ADSGePoint3d pt);
void SetTextBaseLen(double nVal, BOOL bAsPaperUnit = TRUE);
void SetSideText(BOOL bTrue);
// sg add 080904,sg modify 081023
// bRealDist用来控制,需要返回的是“实际距离”(自动乘过字高)或“系数”
double GetParagraphSpace(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const;
double GetLineSpace(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const;
double GetText2BaseRatio(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const;
double GetDist2Line(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const;
double GetPageWidth(BOOL bAsPaperUnit = TRUE) const;
AcGiDraw::TextAlignment GetAlignment() const;
void SetParagraphSpace(double dVal, BOOL bAsPaperUnit = TRUE);
void SetLineSpace(double dVal, BOOL bAsPaperUnit = TRUE);
void SetText2BaseRatio(double dVal, BOOL bAsPaperUnit = TRUE);
void SetDist2Line(double dVal, BOOL bAsPaperUnit = TRUE);
// 注:当设置的宽度为0时,表示单行显示,用默认最小的宽度
void SetPageWidth(double dVal = 0, BOOL bAsPaperUnit = TRUE);
void SetAlignment(AcGiDraw::TextAlignment nAlign);
BOOL IsText() const; // 是否是单行文字
// sg add 081104,根据线长的正负符号,获得其他距离的正负符号、单行文字的默认对齐方式
double GetDistSymbol() const;
void SetAlignBySymbol();
// add by xly on 100928 动态数据的写入
bool HasOtherPoint() const; // 判断是否有其他标注点
void AddDotLoc(const AcGePoint3d &ptLoc); // 向动态数据中添加一点
void GetAllDots(AcGePoint3dArray &lstPts) const; // 获得动态数据
bool SetDotLoc(long lIndex, const AcGePoint3d &ptLoc); // 设置数组索引为lIndex的数据
bool DelDotLoc(long lIndex); // 删除数组索引为lIndex的数据
void SetAllDots(const AcGePoint3dArray &aryPts); // 一次行修改全部动态数据
void SetCirPointSize(double dVal); // 设置圆点的大小
double GetCirPointSize()const; // 获得圆点的大小
// sg add 101221,增加“圆点标注数量”的动态数据,加快夹点操作速度
void PlusDotsNum(Adesk::UInt16 nPlusNum = 1); // 自增
void SetDotsNum(Adesk::UInt16 nNum); // 设置
Adesk::UInt16 GetDotsNum() const; // 获取
protected:
// add by xly 100920 当端点和拐点移动时,其他夹点的联动,bIsTurn=1以转折点为定位点,否则以端头点为定位点
void MoveOtherGrip(AcGePoint3d ptStartBefor, bool bIsTurn = true);
int FindAryData(AcGeIntArray aryInt, int nData);// add by xly on 110309 查找数组中的元素,返回位置值
// add by xly on 110310 拉伸时移动没有框选到的其他夹点 aryInt存放拉伸的夹点的索引
void MoveOtherPoint(AcGeIntArray aryInt, bool bTurnPtBase);
void SortAyry(AcGeIntArray &aryInt);// add by xly on 110310为数组中的元素排序
};