#pragma once #include "AecDbSymbWithText.h" #include "ObjInfoUnit.h" class AecXDbText; class AecXDbSymbMultiLeader : public AecXDbSymbWithText { public: ACRX_DECLARE_MEMBERS(AecXDbSymbMultiLeader); private: const static Adesk::UInt8 g_nVersion; public: // gjm add 为电气 kSortLine 类型 enum TArrowStyle { kNone = 0, kDote = 1, kArrow = 2, kCrossing = 3, kSortLine = 4, }; // 箭号型式 // sg add 090216 enum TSymbMLTextAlign { kAtStart = 1, kAtMiddle = 2, kAtEnd = 3, }; // 文字对齐方式 protected: TArrowStyle m_arrow; // 箭头标记 TSymbMLTextAlign m_nTextAlign; // 文字对齐方式,sg add 090216 ADSGePoint3d m_ptLeader; // 引线端点 double m_nTextBaseLen; // 基线长度, >0右引, <0左引 ADSGePointList m_lstVertexes; double m_nArrowSize; // 文字参数 Adesk::UInt8 m_bSideText; // 是否为线端文字 TCString m_sText1; TCString m_sText2; double m_dText2BaseRatio; // TArch8,文字距基线系数,sg add 081111 double m_dPageWidth; // 页宽(不乘字高),0为单行文字,sg add 090216 // sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题 BOOL m_bSymbMultiLeader; // TArch9.0 // 0x01引线平行 Adesk::UInt8 m_nLeaderFlag; // 用于确定引线平行时的平行方向,不显示到图面上 ADSGePoint3d m_ptLeaderDirection; // add by gjm 为 kSortLine 增加两个点 AcGePoint3d m_ptSortLineStart, m_ptSortLineEnd; public: AecXDbSymbMultiLeader(); ~AecXDbSymbMultiLeader(); virtual BOOL IsValid() const; virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); //virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; 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 subGetGripPoints(AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const { return Acad::eNotImplementedYet; } virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const; virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); // drived from TDbEntity virtual void GetTips(PtrList &) const; // 取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual int ConvertText(TConvertTextPtr ptr, void *pData = NULL); BOOL GetText(Adesk::UInt32 cookies, AecXDbText &text) const; // 返回发现的位置,同时posStart往前移动(以便继续找下一个使用), virtual TextPosition FindSubText(const TCHAR *sSubText, TextPosition &posStart, TextRange *pRange = NULL) const; // 返回下一次查找的开始位置 virtual TextPosition ReplaceSubText(const TextPosition &posRep, const TCHAR *sRepText, TextRange *pRange = NULL); virtual long GetSubTextNum()const { return 2; } // ok virtual void SetSubText(long i, CString sText) { if (i == 0)SetText1(sText); else SetText2(sText); }//ok virtual const TCHAR *GetDefaultLayer() const; //virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, // BOOL *bErase); // sg add 090414 // sg add 110301,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); // Helper Method // 返回值为绝对值 double GetMinTextBaseLen(BOOL bAsPaperUnit = TRUE) const; double GetDefaultTextBaseLen(BOOL bAsPaperUnit = TRUE) const; // Properties const TCHAR *GetText1() const; const TCHAR *GetText2() const; ADSGePoint3d GetLeaderPoint() const; ADSGePoint3d GetTextBasePoint() const; double GetTextBaseLen(BOOL bAsPaperUnit = TRUE) const; void GetLeaderVertexes(ADSGePointList &lstPoints) const; TArrowStyle GetArrow() const; BOOL IsSideText() const; double GetArrowSize(BOOL bAsPaperUnit = TRUE) const; void SetText1(const TCHAR *pszText); void SetText2(const TCHAR *pszText); void SetLeaderPoint(ADSGePoint3d pt); void SetTextBaseLen(double val, BOOL bAsPaperUnit = TRUE); // sg modify 120104,新增加的参数用于判断是否要给m_ptLeaderDirection赋值,内部数据用于引线平行样式 // 默认为要,如果是先调用GetLeaderVertexes函数,获得了点链表后,在点链表中添加一些点,则传FALSE // void SetLeaderVertexes(const ADSGePointList &lstPoints); void SetLeaderVertexes(const ADSGePointList &lstPoints, BOOL bUpdateLeaderDirection = TRUE); void SetArrow(TArrowStyle ar); void SetSideText(BOOL bTrue); void SetArrowSize(double nSize, BOOL bAsPaperUnit = TRUE); // sg add 081111,bRealDist用来控制,返回“实际距离”(自动乘字高)或“系数” double GetText2BaseRatio(BOOL bAsPaperUnit = TRUE, BOOL bRealDist = TRUE) const; void SetText2BaseRatio(double dVal, BOOL bAsPaperUnit = TRUE); // sg add 090216 TSymbMLTextAlign GetTextAlign() const; double GetPageWidth(BOOL bAsPaperUnit = TRUE) const; void SetTextAlign(TSymbMLTextAlign align); // 注:当设置的宽度为0时,表示单行显示,用默认最小的宽度 void SetPageWidth(double dVal = 0, BOOL bAsPaperUnit = TRUE); // sg add 090410,线下文字页宽,动态数据 double GetPageWidth2(BOOL bAsPaperUnit = TRUE) const; void SetPageWidth2(double dVal = 0, BOOL bAsPaperUnit = TRUE); // sg add 090413,判断是否是单行文字 BOOL IsUpText() const; // 线上文字 BOOL IsDownText() const; // 线下文字 // sg add 090720,8.0正式版增加的临时变量,不保存,处理坐标标注的绘制问题 void SetSymbMultiLeader(BOOL bSymbMultiLeader); // TArch9 // 引线是否平行 void SetLeaderParalle(BOOL bParallel); BOOL IsLeaderParall() const; // 获得引线平行时的平行方向点 void SetLeaderDirection(ADSGePoint3d &pt); ADSGePoint3d GetLeaderDirection() const; // add by gjm for kSortLine type void SetSortLinePt(const AcGePoint3d &ptS, const AcGePoint3d &ptE) { m_ptSortLineStart = ptS; m_ptSortLineEnd = ptE; } void GetSortLinePt(AcGePoint3d &ptS, AcGePoint3d &ptE) { ptS = m_ptSortLineStart; ptE = m_ptSortLineEnd; } protected: ADSGePoint3d GetTextPt(BOOL bUseLayout = TRUE) const; // sg add 090413,分别计算两段文字位置点 ADSGePoint3d GetText2Pt(BOOL bUseLayout = TRUE) const; };