#pragma once #include "AecDbEntityBaseEx.h" #include "TextPosition.h" #include "objinfounit.h" #include "TextRange.h" #include class SubText; class AecXDbText; class DimTextPos; class DimTextContent; //class AecDbDimension; class AecXDbDimension_Old : public AecXDbEntityBaseEx { public: ACRX_DECLARE_MEMBERS(AecXDbDimension_Old); private: const static Adesk::UInt8 g_nVersion; protected: friend class AecDbDimension; ADSGePoint3d m_ptLocation; //定位点--即不动点 double m_nRotation; //旋转角度 double m_nDist2DimLine; //定位点到尺寸线的距离, 可以为负值, 图纸单位 // m_nDimRadius要改作,标注点位置的半径 double m_nDimRadius, m_nObjRadius; //尺寸线的弧半径, 所标注的弧的半径 AcDbHardPointerId m_idDimStyle; //尺寸标注类型 PtrList m_lstSegment; //每一个尺寸区间, 不允许为0 PtrList m_lstTextPos; AcDbSoftPointerId m_idBind; Adesk::UInt16 m_nDimFlag; //控制标记 PtrList m_lstTextContent; // static BOOL g_bExplAcadDim; public: AecXDbDimension_Old(); ~AecXDbDimension_Old(); virtual BOOL IsValid() const; virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); // Overriden function from AcDbEntity 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; 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); Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual Adesk::UInt32 subSetAttributes(AcGiDrawableTraits * traits); // drived from TDbEntity virtual void GetTips(PtrList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual DrawModeType GetDrawType() const; virtual const TCHAR *GetDefaultLayer() const; virtual Acad::ErrorStatus GetExtents2d(ADSGePoint3d &ptLow, ADSGePoint3d &ptUp) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual int ConvertText(TConvertTextPtr ptr, void *pData = NULL); // 返回发现的位置,同时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 GeSubTextNum()const { return m_lstSegment.Length(); }//ok virtual SubText* HitTestText(ADSGePoint3d pt)const; virtual SubText* GetSubText(long iText)const; virtual void SetSubText(long iText, CString sText) { SetTextContent(iText, sText); }//ok virtual int GetCtrlToggleIndex()const { return 1; }//ok // Helper method //尺寸文字位置的自动调整 // 返回最后一个的调整结果 0--缺省, 1--上调, 2--下调, 3--外调 // nFrom--开始调整的状态, bAllowExt--是否允许外调 int AdjustDim(BOOL bFromUp, BOOL bAllowExt = TRUE, BOOL bAutoRest = TRUE); BOOL SetDimLinePos(ADSGePoint3d pt); //设置尺寸线位置 BOOL SetFixLinePos(ADSGePoint3d pt); //设置标注固定线位置 GeCurveSegment GetDimCurve() const; //取得尺寸线 void GetPolySegOnDimLine(GePoly2D &poly) const; void RemoveZeroSegment(); Acad::ErrorStatus MoveGripPointsAt1( const AcDbIntArray& indices, const AcGeVector3d& offset); BOOL MergeDim(const AecXDbDimension_Old *pDim); BOOL ConvertFrom(const AcDbDimension *pDim); BOOL AddSegment(ADSGePoint3d pt); BOOL FindAndRemoveSegment(ADSGePoint3d pt);//pt节点分隔点,add by whl on 040810 void AutoSetFlag(); int HitTestOnDimSeg(ADSGePoint3d pt) const; int HitTestOnText(ADSGePoint3d pt) const; int HitTestOnPoint(ADSGePoint3d&pt)const;//add by whl on 041020 //返回节点索引,输入为近似节点,输出为准确节点,以系统拾取框大小为距离精度。 BOOL IsValidSegment(double nVal, BOOL bDist = TRUE) const; void SwitchDimChord(); // Properties double GetTotalSegValue() const; double GetSegment(int n, BOOL bDist = TRUE) const; ADSGePoint3d GetLocation() const; double GetRotation() const; double GetDist2DimLine(BOOL bAsPaperUnit = TRUE) const; AcDbObjectId GetStyleId() const; ADSGePoint3d GetTextPos(int nIndex, BOOL *bIsDefault = NULL) const; ADSGePoint3d GetDefaultTextPos(int nIndex) const; TCString GetText(int nIndex, BOOL *bIsDefault = NULL) const; TCString GetDefaultText(int nIndex) const; int GetSegmentNum() const; AcDbObjectId GetBindId() const; BOOL IsTextMoved() const; BOOL IsUseDefaultText() const; BOOL IsBind() const; BOOL IsUseDimStyleScale() const; BOOL IsDimArcLen() const; BOOL IsDimChord() const; double GetObjRadius() const; BOOL IsAngular() const; double GetDimRadius() const; void SetLocation(ADSGePoint3d pt); void SetRotation(double nAng); void SetDist2DimLine(double nVal, BOOL bAsPaperUnit = TRUE); //Paper dist void SetStyleId(AcDbObjectId idStyle); void AppendSegment(double nVal, BOOL bDist = TRUE); void RemoveSegment(int iSeg); void InsertSegmentAt(int n, double nVal, BOOL bDist = TRUE); void SetSegment(int n, double nVal, BOOL bDist = TRUE); void SetTextPos(int nIndex, ADSGePoint3d ptPos); void SetTextContent(int n, const TCHAR *pszChar); void SetBindId(AcDbObjectId id); void ResetTextPos(); void ResetTextContent(); void UseDimStyleScale(BOOL bTrue); // Angular void SetAngular(BOOL bTrue); void SetDimChord(BOOL bTrue); void SetDimArcLen(BOOL bTrue); void SetObjRadius(double nVal); void SetDimRadius(double nAng); static void BegUserCommand(const TCHAR *, BOOL bIsArxCommand); static void EndUserCommand(const TCHAR *, BOOL bIsArxCommand); };