163 lines
6.5 KiB
C++
163 lines
6.5 KiB
C++
#pragma once
|
|
#include "AecDbEntityBaseEx.h"
|
|
#include "TextPosition.h"
|
|
#include "objinfounit.h"
|
|
#include "TextRange.h"
|
|
#include <vector>
|
|
|
|
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<double> m_lstSegment; //每一个尺寸区间, 不允许为0
|
|
PtrList<DimTextPos> m_lstTextPos;
|
|
AcDbSoftPointerId m_idBind;
|
|
|
|
Adesk::UInt16 m_nDimFlag; //控制标记
|
|
PtrList<DimTextContent> 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<ObjInfoUnit> &) 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);
|
|
};
|