Files
envi-code/SourceCode/Code2026/tg_shs/inc/pipebase/tdbhvacdimension.h
T

243 lines
9.8 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
// TDbHvacDimension.h: interface for the TDbHvacDimension class.
// 暖通标注类,不同类型的标注可适用于风管、设备等不同类型实体
//////////////////////////////////////////////////////////////////////
/*
三种标注类型示意图
┏━━━━━━━━━┓
1: Lable①Text 2: Lable┃Lable 3: ┃ Lable1 ┃Lable2 ┃
②━━━━━③ ②━━━━━━━━━③
/ Lable┃ /┃ Lable3 ┃Lable4 ┃
/ / ┗━━━━━━━━━┛
① ①
夹点说明:
①:标注位置点
②:引线位置点
③:引线方向点
*/
// 标注各参数:
// 标注类型
// enum HvacDimType
// {
// eDimOnlyLine = 1, // 仅仅一行文字
// eDimLeadLine = 2, // 带引线标注(一行)
// eDimLeadBound = 3, // 带引线和边框标注(两行,四部分)
// };
//
// #define HDIM_DimType KEY_I10 // 标注样式:enum HvacDimType
// #define HDIM_DimBasePos KEY_Pt10 // 标注位置点
// #define HDIM_DimLeadPos KEY_Pt11 // 引线位置点
// #define HDIM_DimString KEY_S0 // 标注文本内容
// #define HDIM_DimTextHeigh KEY_R0 // 标注文本高度
// #define HDIM_DimTextAngle KEY_R1 // 标注文本角度(弧度)
#if !defined(ARX__TDBHVACDIMENSION_H__20081229_131800)
#define ARX__TDBHVACDIMENSION_H__20081229_131800
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
using namespace TDb;
class TDbText;
// 标注字符格式化字符说明
// 采用常规字符加特定宏字符(标识变量,不能重复)的方式,
// 所有字符串用三个 '|' 分为4部分(必须为3个)
// 如过变量为浮点型,宏后面加一为数字表示精度(必须要有)
// 例如:DV_WIDTH0×DV_WIDTH0 V=DV_VELOCITY2m/s||T=DV_ELEVATION3m|, 实际标注出为:
/*
┏━━━━━━━━━━┓
┃ 300×200 V=2.3m/s ┃
┃━━━━━━━━━━┃
┃ T=2.999m ┃
┗━━━━━━━━━━┛
*/
// 各标注变量宏定义, 在thvac.h定义
// #define DV_LENGTH _T("DV_LENGTH") // 长度
// #define DV_WIDTH _T("DV_WIDTH") // 宽度
// #define DV_HEIGH _T("DV_HEIGH") // 高度
// #define DV_DIAMETER _T("DV_DIAMETER") // 直径
// #define DV_ELEVATION _T("DV_ELEVATION") // 标高
// #define DV_AIRVOL _T("DV_AIRVOL") // 风量
// #define DV_WAYRESIS _T("DV_WAYRESIS") // 沿程阻力
// #define DV_VELOCITY _T("DV_VELOCITY") // 风速
// #define DV_MATERIAL _T("DV_MATERIAL") // 材料
// #define DV_THICK _T("DV_THICK") // 厚度 add by hh 2011-10-11
// 风管厚度仅圆形风管使用, 后缀0~3 分别代表圆形风管标注的四种样式
#define GRIDDATANUM 3
class DLLIMPEXP TDbHvacDimension : public TDbEntity
{
public:
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbHvacDimension);
TDbHvacDimension();
virtual ~TDbHvacDimension();
//{{AFX_ARX_METHODS(TDbPipeBase)
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const;
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
#if (ADS > 15)
virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips,
const double viewSize,
const int gripSize,
const AcGeVector3d& curViewDir,
const int bitflags) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& gripAppData,
const AcGeVector3d& offset,
const int bitflags);
#endif
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
virtual int GetFirstVersion() const;
virtual void SetSubText(long i,CString sText);
//文字查找替换支持
//返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
virtual TTextPosition FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange = NULL) const;
//返回下一次查找的开始位置
virtual TTextPosition ReplaceSubText(const TTextPosition &posRep, const TCHAR *sRepText, TTextRange *pRange = NULL);
// AcDbObject Persistent Reactor Notification Functions
//virtual void modified(const AcDbObject* dbObj);
virtual void erased(const AcDbObject* dbObj, Adesk::Boolean pErasing = true);
//}}AFX_ARX_METHODS
// // 数据存取
// virtual BOOL SetAt(LPCTSTR pszKey,TXData& XData);
// virtual BOOL GetAt(LPCTSTR pszKey,TXData& XData) const;
// 根据参数名称获得实体的OPM信息,pszName:参数名称(XMap key值)
virtual BOOL OPMInfo(LPCTSTR pszName, TDb::OPMInfo* pInfo);
// // 专业数据[可读写]
// virtual TDbXDataMap* GetSpecialtyData();
// // 读的方式获取专业数据
// virtual TDbXDataMap* GetSpecialtyDataReadOnly() const;
// Get 函数
virtual AcGePoint3d GetBasePoint() const; // 标注基点
virtual AcGePoint3d GetLeadPoint() const; // 标注引线点
virtual HvacDimType GetType() const; // 标注类型
virtual CString GetText() const; // 标注内容
virtual CString GetFormatStr() const; // 标注格式字符
virtual AcDbObjectId GetTextStyle() const; // 文字样式
virtual double GetTextHeigh() const; // 文字高度
virtual double GetTextAngle() const; // 文字角度
virtual double GetArrowLen() const; // 基点箭头长度
virtual int GetArrowStyle() const; // 基点样式,0:无, 1:箭头, 2:十字, 3:圆点
virtual int GetEleType() const; // 标高类型 0:顶, 1:中, 2:底
// Set 函数
virtual void SetBasePoint(AcGePoint3d ptBase); // 标注基点
virtual void SetLeadPoint(AcGePoint3d ptLead); // 标注引线点
virtual void SetType(HvacDimType eType); // 标注类型
virtual void SetText(CString csText); // 标注内容
virtual void SetFormatStr(CString csText); // 标注格式字符
virtual void SetTextStyle(AcDbObjectId idText); // 文字样式
virtual void SetTextHeigh(double dHeigh); // 文字高度
virtual void SetTextAngle(double dRotAngle); // 文字角度
virtual void SetArrowLen(double dArrowLen); // 基点箭头长度
virtual void SetArrowStyle(int nStyle); // 基点样式,0:无, 1:箭头, 2:十字
virtual void SetEleType(int nStyle); // 标高类型 0:顶, 1:中, 2:底
virtual void ResetDimLoct(); // 复位标注位置
virtual double GetTextLen( TDbText* pText ) const; // 返回文字长度
virtual BOOL InitDuctXData(); // 从反应器初始化标注风管的XData数据
virtual void UpdateDataMap(TDbXDataMap* pDataMap); // 直接更新风管数据
protected:
virtual AcGePoint3d GetDirectPoint() const; // 通过文字长度,计算引线方向点
// 得到分隔用|隔开的字符
virtual BOOL GetEachStr(const CString &csText, CStringArray &arrText ) const;
virtual BOOL TransTextToResult(); // 转换各部分格式字符串到实际结果
virtual void TranslateDimText(CString &csText) const; // 转换格式字符为实际标注内容
// 根据变量名具体替换每个相应变量宏字符
virtual void ChangeTextIdByValue(CString &csText, const CString &csTextid) const;
BOOL GetText(Adesk::UInt32 nIndex, TDbText &text) const; // 按标注区域返回文字
// 返回绘制的实体,用完负责删除
virtual void MakeEntity(AcDbVoidPtrArray &entityArr) const;
// 创建箭头
virtual void MakeArrow( AcDbVoidPtrArray &entityArr ) const;
// 创建引线及边框
virtual void MakeLeadAndFrame(AcGePoint3dArray &ptArr, AcDbVoidPtrArray &entityArr) const;
// 创建文字
virtual TDbText* CrteatText(const CString &csText, const AcDbObjectId &idLayer, const AcDbObjectId &idTextStyle, const double &dHeigh, const AcGePoint3d &ptBase, const double &dAngle) const;
// 求关键点
virtual void GetKeyPoint(TDbText* pText1, TDbText* pText2, TDbText* pText3, TDbText* pText4, AcGePoint3dArray &arrPoint) const;
// 求风管相关参数
virtual double GetDuctWidth() const; // 宽度 mm
virtual double GetDuctHeigh() const;
virtual double GetDuctLength() const; // 长度 m
virtual double GetDuctEle() const; // 标高 m
virtual double GetDuctAirVol() const; // 风量 m3/h
virtual double GetDuctWayResis() const; // 沿程阻力 pa
virtual double GetDuctVelocity() const; // 风度 m/s
virtual CString GetDuctMaterial() const; // 材料
virtual double GetDuctSectArea() const; // 截面面积(m2)
// 返回弧管上距点取点的最近点
virtual BOOL GetArcDuctClosePt(const AcGePoint3d& ptGive, AcGePoint3d &ptGet);
// 得到弧风管中心点
virtual AcGePoint3d GetArcDuctCenter() const;
// 得到风管对应弧
virtual void GetDuctArc(AcDbArc &arc);
// 获取各部分文字基点
AcGePoint3d GetTextBasePt(Adesk::UInt32 nIndex) const;
//风管拉伸命令如果选中标注进行拉伸,则标注会执行一次拉伸命令和一次tranformby导致拉伸后的位置不正确
//执行拉伸命令时,判断选择集中是否有风管ID,如果有则不在进行S命令
BOOL AllowMoveGirp();
protected:
// TDbXDataMap m_xDataMap; // 存取成员变量数据类
TDbXDataMap* m_pDuctXDataMap; // 所在风管临时数据map
static TDb::GripAppData s_gripHvacAppData[GRIDDATANUM]; // >=R16高版本夹点数据数组
public:
static double m_dDensity;
static double m_dMoveVis;
};
#endif // !defined(ARX__TDBHVACDIMENSION_H__20081229_131800)