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

235 lines
9.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 "ObjInfoUnit.h"
2026-10-04 00:04:20 +08:00
#define SEF_DOWN 0x01 // 下标注
#define SEF_LEFT 0x02 // 左标注
#define SEF_BASELINE 0x04 // 有基线
#define SEF_LEADER 0x08 // 有引线
#define SEF_PREC2 0x10 // 2位精度
#define SEF_FILLED 0x20 // 填充
2026-09-28 15:28:50 +08:00
// sg add 090204
2026-10-04 00:04:20 +08:00
#define SEF_DOTE 0x40 // 室外标高圆点样式
#define SEF_STANDARD 0x80 // 规范样式
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 以下保存在 m_nFlag2 内,不要骂娘,也不知道是谁这么干的。无解。
#define SEF_PARENTHESES 0x01 // 传统方式是否增加括号
2026-09-28 15:28:50 +08:00
// sg add 090220
2026-10-04 00:04:20 +08:00
#define SEF_ATSIDE 0x02 // 文字齐线端
#define SEF_ARCHELEV 0x04 // 是否是建筑标高
2026-09-28 15:28:50 +08:00
// sg add 090301
2026-10-04 00:04:20 +08:00
#define SEF_UPDOWNTEXT 0x08 // 总图标高是否上下排列
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 以下保存在 m_nFlag3 内。
2026-09-28 15:28:50 +08:00
// sg add 120608
2026-10-04 00:04:20 +08:00
#define SEF_TRIANGLE 0x01 // 空心三角形标高符号
#define SEF_NEWELEV 0x02 // 新总图标高中的右上标注形式,只对三角形填充标高作用
2026-09-28 15:28:50 +08:00
// jsx add 160517
2026-10-04 00:04:20 +08:00
#define SEF_CROSS 0x04 // 十字样式标高
2026-09-28 15:28:50 +08:00
class AecXDbText;
class AecXDbSymbElevation : public AecXDbSymbWithText
{
public:
ACRX_DECLARE_MEMBERS(AecXDbSymbElevation);
private:
const static Adesk::UInt8 g_nVersion;
protected:
2026-10-04 00:04:20 +08:00
Adesk::UInt8 m_nFlag; // 控制标记
2026-09-28 15:28:50 +08:00
ADSGePoint3d m_ptLocation;
2026-10-04 00:04:20 +08:00
TCString m_sText; // 文字参数,多个的则分行
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
double m_nTextBaseLen, // 文字基线长度(图纸尺寸)
m_nLeaderLen, // 引线长度(图纸尺寸)
m_nBaseLen; // 基线长度(图纸尺寸)
2026-09-28 15:28:50 +08:00
// TArch8
2026-10-04 00:04:20 +08:00
double m_dText2BaseRatio; // 文字距基线系数,sg add 081111
ADSGePoint3d m_ptText; // 文字夹点位置点,sg add 090204
Adesk::UInt8 m_nFlag2; // 文字与基线的相对位置标记
TCString m_sLowText; // 预留以后在线下增加文字使用,sg add 090211
2026-09-28 15:28:50 +08:00
ADSGePoint3d m_ptLowText;
// TArch9
Adesk::UInt8 m_nFlag3;
public:
AecXDbSymbElevation();
~AecXDbSymbElevation();
virtual BOOL IsValid() const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
virtual Adesk::Boolean subCloneMeForDragging();
//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 subTransformBy(const AcGeMatrix3d& xform);
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);
// 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);
virtual SubText* HitTestText(ADSGePoint3d pt)const;
virtual long GetSubTextNum()const { return 1; } // ok
2026-10-04 00:04:20 +08:00
// sg add 090326,处理右键在位编辑错误
2026-09-28 15:28:50 +08:00
virtual SubText* GetSubText(long iText)const;
virtual void SetSubText(long i, CString sText) { SetText(sText); } // ok
virtual const TCHAR *GetDefaultLayer() const;
// sg add 090204
BOOL GetText(Adesk::UInt32 cookies, AecXDbText &text, double &dPageWidth) const;
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 Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
2026-10-04 00:04:20 +08:00
// BOOL *bErase); // sg add 090216,图形导出
2026-09-28 15:28:50 +08:00
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);
public: // Helper Method
void GetVertexes(ADSGePoint3d ptArray[7]) const;
double GetDefaultTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
2026-10-04 00:04:20 +08:00
// sg add 090318,将文字位置点,有WCS改为ECS,以下3个函数,用于转化
2026-09-28 15:28:50 +08:00
AcGePoint2d GetEcsOriginPt() const;
void GetEcsAxisVector(AcGeVector2d &xAxis, AcGeVector2d &yAxis) const;
ADSGePoint3d GetWcsTextPt(BOOL bLowText = FALSE) const;
2026-10-04 00:04:20 +08:00
// 从8.0的BETA2起,GetDefaultTextLocation、GetDefaultTextLocation2函数可不使用
2026-09-28 15:28:50 +08:00
ADSGePoint3d GetDefaultTextLocation() const; // sg add 090204
ADSGePoint3d GetDefaultTextLocation2() const; // sg add 090216
2026-10-04 00:04:20 +08:00
BOOL IsDigitEle(const TCString &sText) const; // sg add 090204,判断是否是数字标注
// sg add 090212,计算多行文字最小页宽
2026-09-28 15:28:50 +08:00
double GetMinTextBaseLen(TCStringList &lstTexts, BOOL bAsPaperUnit) const;
2026-10-04 00:04:20 +08:00
// ADSGePoint3d GetElev1DrawPt() const; // sg add 090216,获取各个多行文字的绘制点
2026-09-28 15:28:50 +08:00
// ADSGePoint3d GetElev2DrawPt() const;
// ADSGePoint3d GetFloorDrawPt() const;
2026-10-04 00:04:20 +08:00
// sg modify 110125,获取各个多行文字的绘制点,增加参数传递,减少循环次数
2026-09-28 15:28:50 +08:00
ADSGePoint3d GetElev1DrawPt(TCStringList &lstElevs1, TCStringList &lstElevs2) const;
ADSGePoint3d GetElev2DrawPt(const ADSGePoint3d &pt1, const double &dPage) const;
ADSGePoint3d GetFloorDrawPt(const ADSGePoint3d &pt1, TCStringList &lstElevs1, TCStringList &lstElevs2,
TCStringList &lstFloors, BOOL bHasPt1 = TRUE) const;
2026-10-04 00:04:20 +08:00
// 获取基线下方文字,在X方向的宽度(相当于页宽)
2026-09-28 15:28:50 +08:00
double GetLowTextXExtents(BOOL bAsPaperUnit) const;
2026-10-04 00:04:20 +08:00
CString FormatLowText() const; // sg add 090223,对基线下方文字进行格式化
2026-09-28 15:28:50 +08:00
// Properties
const TCHAR *GetText() const;
// add by whl on 040922
// void GetTexts(TCStringList &lstTexts)const; // sg modify 090211
void GetTexts(TCStringList &lstElevs1, TCStringList &lstElevs2,
TCStringList &lstFloors)const;
2026-10-04 00:04:20 +08:00
bool GetElev1(double&res)const; // 取相对高程
bool GetElev2(double&res)const; // 取黄海高程
CString GetNoteString()const; // 括号中内容
void AddElev(double elev); // 高程变化
2026-09-28 15:28:50 +08:00
Adesk::UInt8 GetFlag() { return m_nFlag; }
Adesk::UInt8 GetFlag2() { return m_nFlag2; }
Adesk::UInt8 GetFlag3() { return m_nFlag3; }
2026-10-04 00:04:20 +08:00
public: // Set、Get
2026-09-28 15:28:50 +08:00
ADSGePoint3d GetLocation() const;
double GetTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
double GetLeaderLen(BOOL bAsPaperUnit = TRUE) const;
double GetBaseLen(BOOL bAsPaperUnit = TRUE) const;
BOOL HasBaseLine() const;
BOOL HasLeader() const;
BOOL IsPrec2() const;
BOOL IsFilled() const {
return ((m_nFlag & SEF_FILLED) != 0);
}
void SetText(const TCHAR *pszText);
void SetLocation(ADSGePoint3d pt);
void SetTextBaseLen(double val, BOOL bAsPaperUnit = TRUE);
void SetBaseLen(double val, BOOL bAsPaperUnit = TRUE);
void SetLeaderLen(double val, BOOL bAsPaperUnit = TRUE);
void SetBaseLine(BOOL bTrue);
void SetLeader(BOOL bTrue);
void SetPrec2(BOOL bTrue);
void SetFilled(BOOL bTrue) {
assertWriteEnabled();
if (bTrue)
m_nFlag |= SEF_FILLED;
else
m_nFlag &= ~SEF_FILLED;
}
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 090204
ADSGePoint3d GetTextPoint(BOOL bEcsPoint = FALSE) const;
BOOL IsRightText() const;
BOOL IsDote() const;
BOOL IsStandard() const;
void SetTextPoint(ADSGePoint3d pt);
void SetDote(BOOL bTrue);
void SetStandard(BOOL bTrue);
void SetLowText(const TCHAR *pszText); // sg add 090211
void SetLowTextPt(ADSGePoint3d pt);
const TCHAR* GetLowText() const;
ADSGePoint3d GetLowTextPt(BOOL bEcsPoint = FALSE) const;
//jsx add 160517
BOOL IsCross() const;
void SetCross(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsParentheses() const; // sg add 090212,传统样式时,楼层信息部分,是否增加括号
2026-09-28 15:28:50 +08:00
void SetParentheses(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsAtLineSide() const; // sg add 090220,设置文字是否齐线端
2026-09-28 15:28:50 +08:00
void SetAtLineSide(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsArchElev() const; // sg add 090223,设置标高类型,普通标高、总图标高
2026-09-28 15:28:50 +08:00
void SetArchElev(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsUpDownTextElev() const; // sg add 090301,总图标高是否上下排列
2026-09-28 15:28:50 +08:00
void SetUpDownTextElev(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsFloorsOnRightSide() const; // sg add 110125,多层标高符号中的楼层是否在标高值左侧
2026-09-28 15:28:50 +08:00
void SetFloorsOnRightSide(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsNewSitePlanElev() const; // sg add 120608,9.0新增加的总图右上侧标注的三角形填充标高
2026-09-28 15:28:50 +08:00
void SetNewSitePlanElev(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL IsHollowTriangle() const; // sg add 120608,9.0新增加的空心三角形总图标高
2026-09-28 15:28:50 +08:00
void SetHollowTriangle(BOOL bTrue);
2026-10-04 00:04:20 +08:00
BOOL HasKnowFloorsLoc() const; // sg add 110125,判断是否是需要知道楼层注释在左侧或右侧的特殊标高
2026-09-28 15:28:50 +08:00
private:
2026-10-04 00:04:20 +08:00
// sg add 091116,打开T7对象后,对标注内容进行检查,如果是类似"9(%%P0.00)",则将文字拆分成两部分
2026-09-28 15:28:50 +08:00
void CheckAndModifyT7String();
2026-10-04 00:04:20 +08:00
// sg add 120608,将T9格式标高内容与原来的标高格式内容相互转化
2026-09-28 15:28:50 +08:00
void Change2T9ElevText();
CString Change2OldElevText() const;
};