243 lines
9.8 KiB
C++
243 lines
9.8 KiB
C++
// 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)
|