236 lines
9.3 KiB
C++
236 lines
9.3 KiB
C++
#pragma once
|
||
#include "AecDbSymbWithText.h"
|
||
#include "ObjInfoUnit.h"
|
||
|
||
#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 // 填充
|
||
// sg add 090204
|
||
#define SEF_DOTE 0x40 // 室外标高圆点样式
|
||
#define SEF_STANDARD 0x80 // 规范样式
|
||
|
||
// 以下保存在 m_nFlag2 内,不要骂娘,也不知道是谁这么干的。无解。
|
||
#define SEF_PARENTHESES 0x01 // 传统方式是否增加括号
|
||
// sg add 090220
|
||
#define SEF_ATSIDE 0x02 // 文字齐线端
|
||
#define SEF_ARCHELEV 0x04 // 是否是建筑标高
|
||
// sg add 090301
|
||
#define SEF_UPDOWNTEXT 0x08 // 总图标高是否上下排列
|
||
|
||
// 以下保存在 m_nFlag3 内。
|
||
// sg add 120608
|
||
#define SEF_TRIANGLE 0x01 // 空心三角形标高符号
|
||
#define SEF_NEWELEV 0x02 // 新总图标高中的右上标注形式,只对三角形填充标高作用
|
||
|
||
// jsx add 160517
|
||
#define SEF_CROSS 0x04 // 十字样式标高
|
||
|
||
|
||
class AecXDbText;
|
||
class AecXDbSymbElevation : public AecXDbSymbWithText
|
||
{
|
||
public:
|
||
ACRX_DECLARE_MEMBERS(AecXDbSymbElevation);
|
||
private:
|
||
const static Adesk::UInt8 g_nVersion;
|
||
|
||
protected:
|
||
Adesk::UInt8 m_nFlag; // 控制标记
|
||
ADSGePoint3d m_ptLocation;
|
||
TCString m_sText; // 文字参数,多个的则分行
|
||
|
||
double m_nTextBaseLen, // 文字基线长度(图纸尺寸)
|
||
m_nLeaderLen, // 引线长度(图纸尺寸)
|
||
m_nBaseLen; // 基线长度(图纸尺寸)
|
||
|
||
// TArch8
|
||
double m_dText2BaseRatio; // 文字距基线系数,sg add 081111
|
||
ADSGePoint3d m_ptText; // 文字夹点位置点,sg add 090204
|
||
Adesk::UInt8 m_nFlag2; // 文字与基线的相对位置标记
|
||
TCString m_sLowText; // 预留以后在线下增加文字使用,sg add 090211
|
||
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
|
||
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);
|
||
virtual SubText* HitTestText(ADSGePoint3d pt)const;
|
||
virtual long GetSubTextNum()const { return 1; } // ok
|
||
// sg add 090326,处理右键在位编辑错误
|
||
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,
|
||
// BOOL *bErase); // sg add 090216,图形导出
|
||
|
||
// sg add 101116,支持统一标高
|
||
virtual bool UnifyElevation(double dElevation = 0.0);
|
||
|
||
public: // Helper Method
|
||
void GetVertexes(ADSGePoint3d ptArray[7]) const;
|
||
double GetDefaultTextBaseLen(BOOL bAsPaperUnit = TRUE) const;
|
||
|
||
// sg add 090318,将文字位置点,有WCS改为ECS,以下3个函数,用于转化
|
||
AcGePoint2d GetEcsOriginPt() const;
|
||
void GetEcsAxisVector(AcGeVector2d &xAxis, AcGeVector2d &yAxis) const;
|
||
ADSGePoint3d GetWcsTextPt(BOOL bLowText = FALSE) const;
|
||
|
||
// 从8.0的BETA2起,GetDefaultTextLocation、GetDefaultTextLocation2函数可不使用
|
||
ADSGePoint3d GetDefaultTextLocation() const; // sg add 090204
|
||
ADSGePoint3d GetDefaultTextLocation2() const; // sg add 090216
|
||
|
||
BOOL IsDigitEle(const TCString &sText) const; // sg add 090204,判断是否是数字标注
|
||
// sg add 090212,计算多行文字最小页宽
|
||
double GetMinTextBaseLen(TCStringList &lstTexts, BOOL bAsPaperUnit) const;
|
||
|
||
// ADSGePoint3d GetElev1DrawPt() const; // sg add 090216,获取各个多行文字的绘制点
|
||
// ADSGePoint3d GetElev2DrawPt() const;
|
||
// ADSGePoint3d GetFloorDrawPt() const;
|
||
// sg modify 110125,获取各个多行文字的绘制点,增加参数传递,减少循环次数
|
||
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;
|
||
|
||
// 获取基线下方文字,在X方向的宽度(相当于页宽)
|
||
double GetLowTextXExtents(BOOL bAsPaperUnit) const;
|
||
CString FormatLowText() const; // sg add 090223,对基线下方文字进行格式化
|
||
|
||
// 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;
|
||
bool GetElev1(double&res)const; // 取相对高程
|
||
bool GetElev2(double&res)const; // 取黄海高程
|
||
CString GetNoteString()const; // 括号中内容
|
||
void AddElev(double elev); // 高程变化
|
||
|
||
Adesk::UInt8 GetFlag() { return m_nFlag; }
|
||
Adesk::UInt8 GetFlag2() { return m_nFlag2; }
|
||
Adesk::UInt8 GetFlag3() { return m_nFlag3; }
|
||
|
||
public: // Set、Get
|
||
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;
|
||
}
|
||
|
||
// sg add 081111,bRealDist用来控制,返回“实际距离”(自动乘字高)或“系数”
|
||
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);
|
||
|
||
BOOL IsParentheses() const; // sg add 090212,传统样式时,楼层信息部分,是否增加括号
|
||
void SetParentheses(BOOL bTrue);
|
||
BOOL IsAtLineSide() const; // sg add 090220,设置文字是否齐线端
|
||
void SetAtLineSide(BOOL bTrue);
|
||
BOOL IsArchElev() const; // sg add 090223,设置标高类型,普通标高、总图标高
|
||
void SetArchElev(BOOL bTrue);
|
||
|
||
BOOL IsUpDownTextElev() const; // sg add 090301,总图标高是否上下排列
|
||
void SetUpDownTextElev(BOOL bTrue);
|
||
|
||
BOOL IsFloorsOnRightSide() const; // sg add 110125,多层标高符号中的楼层是否在标高值左侧
|
||
void SetFloorsOnRightSide(BOOL bTrue);
|
||
|
||
BOOL IsNewSitePlanElev() const; // sg add 120608,9.0新增加的总图右上侧标注的三角形填充标高
|
||
void SetNewSitePlanElev(BOOL bTrue);
|
||
|
||
BOOL IsHollowTriangle() const; // sg add 120608,9.0新增加的空心三角形总图标高
|
||
void SetHollowTriangle(BOOL bTrue);
|
||
|
||
BOOL HasKnowFloorsLoc() const; // sg add 110125,判断是否是需要知道楼层注释在左侧或右侧的特殊标高
|
||
|
||
private:
|
||
// sg add 091116,打开T7对象后,对标注内容进行检查,如果是类似"9(%%P0.00)",则将文字拆分成两部分
|
||
void CheckAndModifyT7String();
|
||
|
||
// sg add 120608,将T9格式标高内容与原来的标高格式内容相互转化
|
||
void Change2T9ElevText();
|
||
CString Change2OldElevText() const;
|
||
};
|