//-------------------------------------------------------------------------------------------------------+ // Copyright (C), 1998-2012, swer Software Co. Ltd. // = FileName : // = Version : ver2.0 // = Author : // = CreateDate : // = Description: 设备造型单元,基点 0,0,0点 + 原点位置的 x,y,z轴的旋转 + X,Y,Z 方向的偏移 // = Maintainers: // //-------------------------------------------------------------------------------------------------------+ #pragma once #include "AecDbEntityBase.h" #include #include "define_class_xdata_key.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif struct AecGripData; class DLLIMPEXP AecDbEwPipeDim : public AecDbEntityBase { public: ACRX_DECLARE_MEMBERS(AecDbEwPipeDim); public: AecDbEwPipeDim(void); ~AecDbEwPipeDim(void); void AddAecDbWEntity(const AcDbObjectId& idObj); AcDbObjectId GetAecDbWEntity(int nIndex); int GetAecDbWEntityCount(); void SetDimStyle(short nStyle); short GetDimStyle(); void SetDimDir(short nDir); short GetDimDir(); void SetDimTextUporDownFlag(short nDimText); short GetDimTextUporDownnFlag(); void SetISODim(short nIsISO); short IsISODim(); void SetTextStyleId(AcDbObjectId& idStyle); AcDbObjectId GetTextStyleId(); void SetTextLayerId(AcDbObjectId id); AcDbObjectId GetTextLayerId(); //序号标注的圆圈 判断是否重叠 bool GetSNDimCircle(AcDbCircle& cir) const; bool IsSNOverlapping(const AecDbEwPipeDim* pDim) const; // 如果标注了标高,则修改标高, dDelta 是标高的变化量 void ModifyElevation(const double &dDelta_M); bool HasElevation(); // dEle为mm单位 bool GetElevation(double &dEle_mm); //nPos -1 down,1up void RemoveAt(int nPos,int nIndex); void RemoveAll(int nPos); void AddDimText(LPCTSTR pszUp,LPCTSTR pszDown = NULL); void GetDimText(int nIndex,CString& sUp,CString& sDown); void SetDimupScript(LPCTSTR pszUpScr); void GetDimupScript(CString& sUpScr); void SetDimdownScript(LPCTSTR pszDownScr); void GetDimdownScript(CString& sDownScr); double GetTextHeight(); void SetTextHeight(double dH); double GetTextWidthScale(); void SetTextWidthScale(double dScale); void AppendPoint(AcGePoint3d& pt); void AppendNoPoint(AcGePoint3d& pt); void SetDimupdownSpace(double dD); void UpdateFromParam(); void SetPScale(double dScale); double GetPScale() const; virtual void saveAs(AcGiWorldDraw *pWd, AcDb::SaveType saveType); virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus subGetGripPoints (AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData,const AcGeVector3d& offset,const int bitflags); virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) 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 const AecDbObjXDataMap *GetSpecialtyData() const; virtual AecDbObjXDataMap *GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); protected: Acad::ErrorStatus DrawLeaderDim(AcGiDraw &dc) const; Acad::ErrorStatus DrawMBoxLineLdDim(AcGiDraw &dc) const; Acad::ErrorStatus DrawOnlineDim(AcGiDraw &dc) const; Acad::ErrorStatus DrawPolylineDim(AcGiDraw &dc) const; Acad::ErrorStatus DrawSNo(AcGiDraw &dc) const; Acad::ErrorStatus DrawText(AcGiDraw &dc,AcGePoint3d ptFr,AcGePoint3d ptTo,LPCTSTR pszDimup,LPCTSTR pszDimDown,const AcGeVector3d& vtDimType,BOOL bHasUnderline = FALSE) const; Acad::ErrorStatus DrawText(AcGiDraw &dc,LPCTSTR pszText,AcGePoint3d& ptFr,double dAngle) const; Acad::ErrorStatus DrawText2(AcGiDraw &dc,LPCTSTR pszText,AcGePoint3d& ptFr,double dAngle) const; Acad::ErrorStatus DrawEl(AcGiDraw &dc,AcGePoint3d& ptFr,double dAngle,short nElType,double dH, int nUpOrDwn = 1) const; Acad::ErrorStatus ParseDownString(LPCTSTR psz , short &elType , CString &sLeft , CString &sRight ) const; Acad::ErrorStatus TextEx(AcGiDraw &dc , const AcGiDraw::TextAlignment &ta , const AcGePoint3d &ptPos , const AcGeVector3d &vtDir , LPCTSTR pszDimup , double &len , int nUpOrDwn = 1) const;//1 -1 Acad::ErrorStatus MakeWDot(AcGiDraw &dc, AcGePoint3d &pt) const; double UnderLineLength(LPCTSTR pszDimup) const; AcGePoint2d DimTextExtent(LPCTSTR pszDimup) const; protected: short m_nStyle; //0: 引出标注 1: 在线标注 //2: 批量标注 short m_nDir; //0: 水平标注 1: 垂直标注 short m_nDimText; //0: 只标上标 1: 上下标 short m_nIsISO; //0: 非iso 标注 30: iso 30度标注 45:iso 45度标注 其他按30 CStringArray m_arsUps; //上标 CString m_sUpScr; //上标脚本 CStringArray m_arsDowns; //下标 CString m_sDownScr; //下标脚本 double m_dTextH; //打印纸面字高度 2.5 double m_dWScale; //打印纸面字宽度 1 double m_dD; //上下标的间隙,在线标注用到 double m_dPScale; //出图比例,由调用方传入 AcDbObjectId m_idTextSty; //文字样式 AcDbObjectId m_idTextLayer; //文字图层 AcGePoint3dArray m_arPoints; //系列点,末点是文字底线开始点 AcGePoint3dArray m_arNoPoints; //批量标注的和管子的交点 AcDbObjectIdArray m_aridAttachs;//附着对象 AecDbObjXDataMap m_mapSpecXData; // 序号标注 圆圈半径相关 private: static const CString _Custom_No_R_; public: bool SetCustomNoR(const double &v); double GetCustomNoR() const; //不序列化 protected: AecGripData* m_pGripAppData; };