#pragma once #include "aecDbText.h" #include "PipePrototype.h" // 文字样式应当有全局的设定 class CLabelStyle { private: const static Adesk::UInt8 g_nVersion; public: CLabelStyle(); protected: AcDbHardPointerId m_idTextStyle;// 文字样式 double m_dTextHeight; // 文字高度 double m_dTextRotation; // 旋转角度 public:// Properties AcDbObjectId GetTextStyleId() const { return m_idTextStyle; } double GetTextHeight() const { return m_dTextHeight; } void SetTextStyleId(AcDbObjectId id) { m_idTextStyle = id; } void SetTextHeight(double dHeight) { m_dTextHeight = dHeight; } void SetTextRotation(double dRot) { m_dTextRotation = dRot; } public: virtual double GetTextRotation() const { return m_dTextRotation; } virtual BOOL IsTextRotated() const { return (fabs(m_dTextRotation)>g_DimOption::instance()._angSnap); } public: virtual BOOL IsValid() const; virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag); 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); }; // 管线标注 class CDbPipeLabel : public CDbPipeAttachment , public CLabelStyle { public: ACRX_DECLARE_MEMBERS(CDbPipeLabel); private: static const Adesk::UInt8 g_nVersion; public: CDbPipeLabel(); // 管线标注类别: 0、普通管 1、风管 enum PipeType { kCommon=0, kDuct=1, kPipeDnDim, // cet 2014.6.3 add 管径标注 }; protected: PipeType m_typePipe; // 管线类别,默认kCommon XString m_sLeftText; // 文字左边内容 double m_dDistToPipe; // 距管线距离,左为正 double m_dPipeWidth; // 管的宽度或者直径 double m_dPipeHeight; // 管的高度 public: PipeType GetPipeType() const { return m_typePipe; } void SetPipeType(PipeType type) { assertWriteEnabled(); m_typePipe = type; } double GetDistToPipe() const { return m_dDistToPipe; } void SetDistToPipe(double dDist) { assertWriteEnabled(); m_dDistToPipe=dDist; } const TCHAR* GetLeftText() const { return (const TCHAR*)m_sLeftText; } void SetLeftText(const TCHAR* sText) { assertWriteEnabled(); m_sLeftText = sText; } double GetPipeDiameter() const { // 标注中的管径 return GetPipeWidth(); } void SetPipeDiameter(double dDiameter) { SetPipeWidth(dDiameter); } double GetPipeWidth() const { // 标注中的宽度(用于风管) return m_dPipeWidth; } void SetPipeWidth(double dWidth) { assertWriteEnabled(); m_dPipeWidth = dWidth; } double GetPipeHeight() const { // 标注中的高度(用于风管) return m_dPipeHeight; } void SetPipeHeight(double dHeight) { assertWriteEnabled(); m_dPipeHeight = dHeight; } double GetMinLabelTextLen() const; public: XPoint GetLabelLocation() const;// 文字的坐标 XString GetLabelText() const;//标注 public: virtual BOOL IsValid() const; virtual BOOL IsSureSingle() const { return FALSE; } //sr Modify to FALSE 1管可以多标注 virtual BOOL IsSingle(const CDbPipePrototype *pipe) const; virtual BOOL IsCheckSysType() const { return FALSE;} virtual double GetTextRotation() const; virtual long GetSubTextNum()const{return 1;} // cet 2014.6.3 add 支持双击修改 virtual void SetSubText(long i,CString sText); // cet 2014.6.3 add 支持双击修改 virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag); virtual void GetTips(DList &) const; //virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus GetExtents(XPoint &ptLow,XPoint &ptUp) const; virtual int GetFirstVersion()const{return 6;} public: // Override AcDbEntity Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& ptPick, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subClose(); 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 subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) 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); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); private: Acad::ErrorStatus MoveGSPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); }; // 管线文字 class CDbPipeText : public CDbPipeAttachment , public CLabelStyle { public: ACRX_DECLARE_MEMBERS(CDbPipeText); private: static const Adesk::UInt8 g_nVersion; public: CDbPipeText(); // cet 2014.6.3 add 标注文字类型 -1 未知 0 管径标注文字 1 管线文字 int DimTextType(); void DimTextType(Adesk::Int8 nDimTextType); protected: XString m_sText; //文字内容 public: const TCHAR* GetText() const { return (const TCHAR*)m_sText; } void SetText(const TCHAR* sText, bool bUpdatePipe = false) { assertWriteEnabled(); // cet 2014.7.7 add 更新管线中标注信息, 更新失败时不修改标注内容 if (bUpdatePipe && !UpdateLinkedPipe(sText)) { return; } m_sText = sText; } public: virtual BOOL IsValid() const; virtual BOOL IsCheckSysType() const { return FALSE;} virtual double GetTextRotation() const; virtual double GetWidth() const ; virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag); virtual void GetTips(DList &) const; //virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const; virtual long GetSubTextNum()const{return 1;}//ok virtual void SetSubText(long i,CString sText); virtual int GetFirstVersion()const{return 6;} public: // Override AcDbEntity virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; private: // cet 2014.7.7 add 更新管线关联的标注信息 bool UpdateLinkedPipe(const CString &sDimText); };