Files
envi-code/SourceCode/Code2026/tg_shs/inc/pipebase/tdbhvacdimension.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

244 lines
11 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.
// 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)