Files
envi-code/SourceCode/Code2026/Dimension/AecDbDimension.h
T
2026-09-28 15:28:50 +08:00

195 lines
7.8 KiB
C++

#pragma once
#include "AecDbEntityBaseEx.h"
#include "TextPosition.h"
#include "objinfounit.h"
#include "TextRange.h"
#include <vector>
class DimTextPos;
class DimTextContent;
class AecXDbDimension_Old;
class AecDbDimension : public AecXDbCurveBaseEx
{
DECLARE_EDITFUNC();
public:
ACRX_DECLARE_MEMBERS(AecDbDimension);
private:
const static Adesk::UInt8 g_nVersion;
protected:
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;
PtrList<double> m_lstOffset;//最大关联范围
// static BOOL g_bExplAcadDim;
public:
AecDbDimension();
~AecDbDimension();
virtual BOOL IsValid() const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
// Overriden function from AcDbEntity
//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;
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);
virtual Acad::ErrorStatus getSplitCurves(const AcGeDoubleArray& params, AcDbVoidPtrArray& curveSegments) const;
virtual Acad::ErrorStatus getSplitCurves(const AcGePoint3dArray& points, AcDbVoidPtrArray& curveSegments) const;
virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const;
// drived from TDbCurveEntity
virtual AcDbCurve* GetBaseCurve()const;
virtual Acad::ErrorStatus SetBaseCurve(AcDbCurve*);
//override TDbEntity
virtual void UnionScale(double nScale);
//virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase);
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 GetFirstVersion()const { return 7; }//ok
virtual int GetCtrlToggleIndex()const { return 1; }//ok
// sg add 101116,支持统一标高
virtual bool UnifyElevation(double dElevation = 0.0);
// 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 AecDbDimension *pDim);
BOOL ConvertFrom(const AcDbDimension *pDim);
BOOL ConvertFrom(const AecXDbDimension_Old *pDim);
BOOL AddSegment(ADSGePoint3d pt);
BOOL FindAndRemoveSegment(ADSGePoint3d pt);//pt节点分隔点,add by whl on 040810
BOOL FindPoint(ADSGePoint3d pt)const;
double GetMaxScope()const;
BOOL UpdateFrom(ADSGePoint3d ptNew0, ADSGePoint3d ptNew1, ADSGePoint3d ptOld0, ADSGePoint3d ptOld1, bool bErased);
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;
// add by xlc on 101220 解决图纸切换速度慢的问题
ADSGePoint3d GetTextPos(int nIndex, GePoly2D poly, BOOL *bIsDefault = NULL) const;
ADSGePoint3d GetDefaultTextPos(int nIndex, GePoly2D poly) const;
TCString GetText(int nIndex, GePoly2D poly, BOOL *bIsDefault = NULL) const;
TCString GetDefaultText(int nIndex, GePoly2D poly) const;
// sg add 120410,增加一个新的接口,代替基类中的NormalViewAngle函数,主要解决精确度是1度的问题
double ChangeToNormalViewAngle(double nAngWcs) const; //在布局时正常观察的WCS角度
int GetSegmentNum() const;
AcDbObjectId GetBindId() const;
BOOL IsTextMoved() const;
BOOL IsUseDefaultText() const;
BOOL IsBind() const;
BOOL IsUseDimStyleScale() const;
BOOL IsAssociate()const;
void SetAssociate(BOOL bTrue);
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);
};