// 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)