Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/DbAxisNo.h
T

305 lines
11 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#ifndef __DBAXISNO_H
2026-09-28 15:28:50 +08:00
#define __DBAXISNO_H
// #include "DbEntity.h"
class TDbDimension2;
2026-10-04 00:04:20 +08:00
#define FILT_RADIATE_LINE 0x01 //仅仅找径线
#define FILT_CIRARC_ONLY 0x02 //仅仅找圆周线
#define FILT_LINE_ONLY 0x04 //仅仅找平行直线
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 轴网选择集
2026-09-28 15:28:50 +08:00
class TARCH_EXP XAxisPickSet: public PickSet
{
protected:
XAxisPickSet *m_pOppsite;
public:
XAxisPickSet(int nCreateFlag):PickSet(nCreateFlag), m_pOppsite(NULL) {}
XAxisPickSet(const Entity &entFirst, int nFilterFlag=0);
~XAxisPickSet();
2026-10-04 00:04:20 +08:00
BOOL GetFromOppsite(const Entity &entFirst, int nFilterFlag=0); //由另一侧的轴线得到
BOOL GetFromOppsite(const XCurveSegment &entFirst, int nFilterFlag=0); //由另一侧的轴线得到
BOOL GetFromSameSide(const Entity &entFirst, int nFilterFlag=0); //由同侧轴线得到
2026-09-28 15:28:50 +08:00
BOOL GetFrom2Curve(const XCurveSegment &segStart, const XCurveSegment &segEnd);
2026-10-04 00:04:20 +08:00
// add by xly on 110314 设置交叉的轴网可以设置标注,segStart:起始轴线;segEnd:终止轴线;bIsCross轴线是否交叉
2026-09-28 15:28:50 +08:00
BOOL GetFrom2Curve(const XCurveSegment &segStart, const XCurveSegment &segEnd, bool bIsCross);
XAxisPickSet *GetOppsite()
{
return m_pOppsite;
}
BOOL IsArcAxis();
};
//#define AXISDIM_START_DIMENSION 0x01
//#define AXISDIM_DONOT_INSERT_LABEL 0x02
2026-10-04 00:04:20 +08:00
// 轴线排序
2026-09-28 15:28:50 +08:00
class TARCH_EXP XAxisDimSet: public DList<XCurveSegment>
{
public:
#ifdef I_AM_TCH_KERNAL
2026-10-04 00:04:20 +08:00
static XCurveSegment * pSortBase; // 起始点为关键点
2026-09-28 15:28:50 +08:00
static BOOL g_AntiClockWise;
2026-10-04 00:04:20 +08:00
static double g_nAngleBegin; //用于圆形轴网的开间标注, 起始轴线的角度
2026-09-28 15:28:50 +08:00
#else
2026-10-04 00:04:20 +08:00
TARCH_IMPEXP static XCurveSegment * pSortBase; // 起始点为关键点
2026-09-28 15:28:50 +08:00
TARCH_IMPEXP static BOOL g_AntiClockWise;
2026-10-04 00:04:20 +08:00
TARCH_IMPEXP static double g_nAngleBegin; //用于圆形轴网的开间标注, 起始轴线的角度
2026-09-28 15:28:50 +08:00
#endif
public:
XAxisDimSet() {}
XAxisDimSet(XCurveSegment *pLine)
{
assert(!pSortBase);
pSortBase=pLine;
}
~XAxisDimSet() { pSortBase=NULL; }
static int SortFunc(const XCurveSegment *cv1, const XCurveSegment *cv2);
};
2026-10-04 00:04:20 +08:00
#define AXF_ATTACH 0x01 //附加轴线
#define AXF_NOSIDE1 0x02 //首侧不标注
#define AXF_NOSIDE2 0x04 //末侧不标注
#define AXF_SIDE1_LEFT 0x08 //首端偏左
#define AXF_SIDE1_RIGHT 0x10 //首端偏右
#define AXF_SIDE2_LEFT 0x20 //末端偏左
#define AXF_SIDE2_RIGHT 0x40 //末端偏右
#define AXF_SIDE1_LEAD 0x80 //首端有独自引线
#define AXF_SIDE2_LEAD 0x100 //末端有独自引线
// sg add 100531,标记是否是在首个主轴号之前的附加轴号
2026-09-28 15:28:50 +08:00
#define AXF_PREFIRSE_ATTACH 0x200
2026-10-04 00:04:20 +08:00
// sg add 120214,增加首端、末端是否有独立默认位置
2026-09-28 15:28:50 +08:00
#define AXF_SIDE1_LEADPOS 0x400
#define AXF_SIDE2_LEADPOS 0x800
struct TARCH_EXP TAxisInfo
{
2026-10-04 00:04:20 +08:00
Adesk::UInt16 m_nFlag; // 是否为附加轴号
XString m_sText; // 轴号
double m_nPara2Next; // 距离或角度到下一根轴线
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
double m_nLeadLen1, m_nLeadLen2; // 引线长度
2026-09-28 15:28:50 +08:00
// TArch9 Data
2026-10-04 00:04:20 +08:00
double m_dLeadPos1; // 保存每个轴线端点位置距离默认点的距离
2026-09-28 15:28:50 +08:00
double m_dLeadPos2;
TAxisInfo() {
m_nFlag=0;
m_nPara2Next=0.0;
m_nLeadLen1=m_nLeadLen2=0.0;
2026-10-04 00:04:20 +08:00
// sg add 120214,增加每个轴线端点位置距离默认点的距离
2026-09-28 15:28:50 +08:00
m_dLeadPos1 = m_dLeadPos2 = 0.0;
}
};
2026-10-04 00:04:20 +08:00
#define ANF_CIRARC 0x01 //圆弧轴网
#define ANF_JOINPREV 0x02 //有前接轴网
#define ANF_HIDESIDE1 0x04 //标注起始侧
#define ANF_HIDESIDE2 0x08 //标注终止侧
#define ANF_CLOCKWISE 0x10 //顺时针方向(圆弧轴网)排序
#define ANF_CLOSE 0x20 //圆形轴网
#define ANF_PREVLINK 0x40 //前接轴网
#define ANF_NOSORT 0x80 //不自动排序
#define ANF_HIDE_AXISTEXT 0x01 // add by lgy 20120209,隐藏轴标文字
2026-09-28 15:28:50 +08:00
class TDbSymbDrawingIndex;
2026-10-04 00:04:20 +08:00
// 轴网标注
2026-09-28 15:28:50 +08:00
class TARCH_EXP TDbAxisLabelSet: public TDbEntity
{
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbAxisLabelSet);
private:
const static Adesk::UInt8 g_nVersion;
protected:
2026-10-04 00:04:20 +08:00
Adesk::UInt16 m_nFlag; //控制标记
XCurveSegment m_segFirst; //首根轴线
DList<TAxisInfo> m_lstAxis; //开间/进深列表
double m_nDist2Center; //m_segFirst的起点到圆心的距离(靠近圆心)
double m_nLeaderLen1, m_nLeaderLen2; //引线长度(P),起始和终止
double m_nCirRadius; //轴号圆圈半径
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 文字参数
AcDbHardPointerId m_idTextStyle; //文字样式
2026-09-28 15:28:50 +08:00
// TArch6 data
AcDbHardPointerId m_idTextLayer;
// TArch7 Data
2026-10-04 00:04:20 +08:00
Adesk::UInt16 m_colorText;//文字颜色
2026-09-28 15:28:50 +08:00
// TArch9 Data
2026-10-04 00:04:20 +08:00
Adesk::UInt16 m_nFlag2; // add by lgy 20120209,新增控制标记
2026-09-28 15:28:50 +08:00
public:
2026-10-04 00:04:20 +08:00
BOOL m_bShowHide;//是否显示隐藏轴号,不存盘
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// sg add 100518,增加用来区分Grip和Stretch点的变量,不存盘
2026-09-28 15:28:50 +08:00
bool m_bStretchPt;
protected:
2026-10-04 00:04:20 +08:00
// 另存Tch3用
2026-09-28 15:28:50 +08:00
AcDbBlockReference *AsAxisO(const TDbSymbDrawingIndex &axo, const TCHAR *pszText) const;
public:
TDbAxisLabelSet();
virtual BOOL IsValid() const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
virtual Acad::ErrorStatus audit(AcDbAuditInfo* pAuditInfo);
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 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);
virtual void modified(const AcDbObject* pDbObj);
public: // drived from TDbEntity
virtual DrawType GetDrawType() const;
2026-10-04 00:04:20 +08:00
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
virtual const TCHAR *GetDefaultLayer() const;
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual long GetSubTextNum()const;//ok
virtual TSubText* HitTestText(XPoint pt)const;
virtual TSubText* GetSubText(long iText)const;
virtual void SetSubText(long i,CString sText);
2026-10-04 00:04:20 +08:00
//add by xlc on 090608 添加文字查找替换功能
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
2026-09-28 15:28:50 +08:00
virtual TTextPosition FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange=NULL) const;
2026-10-04 00:04:20 +08:00
// 返回下一次查找的开始位置
2026-09-28 15:28:50 +08:00
virtual TTextPosition ReplaceSubText(const TTextPosition &posRep, const TCHAR *sRepText, TTextRange *pRange=NULL);
BOOL GetText(int i,TDbText&text)const;
virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
2026-10-04 00:04:20 +08:00
BOOL *bErase); // sg add 120214,根据9.0的新需求,修改轴号对象,支持导出
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// sg add 101116,支持统一标高
2026-09-28 15:28:50 +08:00
virtual bool UnifyElevation(double dElevation = 0.0);
virtual CString GetXml(const AcGeMatrix3d& mat) const;
2026-10-04 00:04:20 +08:00
// sg add 120214,支持夹点ctrl功能切换
2026-09-28 15:28:50 +08:00
virtual int GetCtrlToggleIndex()const { return 8; }
public: // Helper Methods
XCurveSegment GetAxis(int idx) const;
2026-10-04 00:04:20 +08:00
// 取得正交的曲线, nSide: 0-起始侧, 1-终止侧
2026-09-28 15:28:50 +08:00
XDirectionCurve GetOrthoCurve(int nSide, int bForceOpen=FALSE) const;
2026-10-04 00:04:20 +08:00
int OnWhichSide(XPoint pt) const; //0--起始端, 1--末端
2026-09-28 15:28:50 +08:00
void SortAxisLabel(const TCHAR *szFrom);
BOOL ConvertFrom(const XAxisDimSet &dimSet);
BOOL GetDimension(int nSide, TDbDimension2 &dim1, TDbDimension2 &dim2) const;
//void MoveGripPointAt(int idx, XPoint vtOffset);
2026-10-04 00:04:20 +08:00
int HitTestOnLabel0(XPoint ptPick,int *pSide=NULL)const;//add by whl on 041117,不忽略隐藏轴号
int HitTestOnLabel(XPoint ptPick, int *pSide=NULL)const;//忽略隐藏轴号
2026-09-28 15:28:50 +08:00
int HitTestOnAxis(XPoint ptPick, int *pSide=NULL) const;
int HitLabel(const XCurveSegment &seg, XString &sLab) const; // tol=_DIST_SNAP, return index; >=0, hit ok
2026-10-04 00:04:20 +08:00
// modify by lgy 20120208,增加是否自动重排序号的参数
2026-09-28 15:28:50 +08:00
// BOOL AddAxis(XCurveSegment seg, int nAxisFlag, const TCHAR *pszLab);
// BOOL AddLabel(XPoint ptAdd, int nAxisFlag, const TCHAR *pszLab);
BOOL AddAxis(XCurveSegment seg, int nAxisFlag, const TCHAR *pszLab, BOOL bSort = TRUE);
BOOL AddLabel(XPoint ptAdd, int nAxisFlag, const TCHAR *pszLab, BOOL bSort = TRUE);
BOOL RemoveLabel(int idx, BOOL bSortLabel=TRUE);
void SetFirstSegment(XCurveSegment seg);
void NegateParams();
Acad::ErrorStatus SetPrevLink(AcDbObjectId id);
2026-10-04 00:04:20 +08:00
// add by xly on 110314 支持交叉轴网可以标注
2026-09-28 15:28:50 +08:00
BOOL ConvertFrom(const XAxisDimSet &dimSet, bool bIsCross);
public: // Properties
AcDbObjectId GetTextStyleId() const;
AcDbObjectId GetTextLayerId() const;
double GetLeaderLen(int nSide, BOOL bAsPaperUnit) const;
//double GetAxisLeaderLen(int idx, int nSide, BOOL bAsPaperUnit) const;
double GetCirRadius(BOOL bAsPaperUnit=TRUE) const; //PS
2026-10-04 00:04:20 +08:00
BOOL IsArcAxisNet() const; //圆弧轴网的标注(包括径向和周向)
BOOL IsArcAxis() const; //是否标注弧轴线
2026-09-28 15:28:50 +08:00
BOOL IsSortAuto() const;
XPoint GetArcNetCenter() const;
XPoint GetLabelCenter(int iAxis, int nSide) const;
const TCHAR * GetLabel(int iAxis) const;
int GetAxisNum() const;
int GetVisSides() const;
int GetAxisVisSides(int idx) const;
void SetVisSides(int nSides);
void SetAxisVisSides(int idx, int nSides);
void SetTextStyleId(AcDbObjectId id);
void SetTextLayerId(AcDbObjectId id);
void SetLeaderLen(int nSide, double val, BOOL bAsPaperUnit);
void SetCirRadius(double val, BOOL bAsPaperUnit=TRUE);
void HideSide(int nSide, BOOL bTrue=TRUE);
void HideAxisLabel(int idx, int nSide, BOOL bTrue);
void SetLabel(int nIdx, const TCHAR *pszText, BOOL bSort,BOOL bReverse=FALSE);
void SetFirstAxis(XCurveSegment seg);
void SetSortAuto(BOOL bTrue);
void ReverseOrder();
void SetShowHide(bool bHide){assertWriteEnabled();m_bShowHide=bHide;}//ok
2026-10-04 00:04:20 +08:00
// sg add 090723,支持使用新、旧圆圈文字样式,动态数据
2026-09-28 15:28:50 +08:00
void SetCircleTextStyle(int nStyle);
int GetCircleTextStyle() const;
2026-10-04 00:04:20 +08:00
// sg add 100530,根据8.5需求,增加保存字母组合时的排序规则,是“变前项”,还是“变后项”的动态数据
2026-09-28 15:28:50 +08:00
void SetChangePreNum(BOOL bTrue);
BOOL IsChangePreNum() const;
2026-10-04 00:04:20 +08:00
// add by lgy 20120209,9.0添加轴号标注文字隐藏
2026-09-28 15:28:50 +08:00
void SetAllAxisTextHide(BOOL bTrue);
BOOL IsHideAllAxisText() const;
2026-10-04 00:04:20 +08:00
// add by xly on 110315 获得轴标被隐藏侧
2026-09-28 15:28:50 +08:00
int GetHideSide();
public:
2026-10-04 00:04:20 +08:00
// sg add 110607,专门提供给“一轴多号”命令使用,用于修改各个引线长度
2026-09-28 15:28:50 +08:00
void SetLeaderLenOneByOne(int nSide, double val, BOOL bAsPaperUnit);
void AddLeaderLenOneByOne(int nSide, double val, BOOL bAsPaperUnit);
2026-10-04 00:04:20 +08:00
// sg add 110614,设置某轴号为主轴号前的附加轴号
2026-09-28 15:28:50 +08:00
void SetPreFirstAttachLabel(int nIdx, BOOL bAttach);
};
/////////////////////////////////////////////
2026-10-04 00:04:20 +08:00
// 找离ptAxisEnd最近的轴线
2026-09-28 15:28:50 +08:00
BOOL TARCH_IMPEXP GetClosestAxis(PickSet &ssJs, const XPoint &ptAxisEnd, Entity &eAxis);
#endif