Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/DbAxisNo.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

305 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __DBAXISNO_H
#define __DBAXISNO_H
// #include "DbEntity.h"
class TDbDimension2;
#define FILT_RADIATE_LINE 0x01 //仅仅找径线
#define FILT_CIRARC_ONLY 0x02 //仅仅找圆周线
#define FILT_LINE_ONLY 0x04 //仅仅找平行直线
// 轴网选择集
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();
BOOL GetFromOppsite(const Entity &entFirst, int nFilterFlag=0); //由另一侧的轴线得到
BOOL GetFromOppsite(const XCurveSegment &entFirst, int nFilterFlag=0); //由另一侧的轴线得到
BOOL GetFromSameSide(const Entity &entFirst, int nFilterFlag=0); //由同侧轴线得到
BOOL GetFrom2Curve(const XCurveSegment &segStart, const XCurveSegment &segEnd);
// add by xly on 110314 设置交叉的轴网可以设置标注,segStart:起始轴线;segEnd:终止轴线;bIsCross轴线是否交叉
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
// 轴线排序
class TARCH_EXP XAxisDimSet: public DList<XCurveSegment>
{
public:
#ifdef I_AM_TCH_KERNAL
static XCurveSegment * pSortBase; // 起始点为关键点
static BOOL g_AntiClockWise;
static double g_nAngleBegin; //用于圆形轴网的开间标注, 起始轴线的角度
#else
TARCH_IMPEXP static XCurveSegment * pSortBase; // 起始点为关键点
TARCH_IMPEXP static BOOL g_AntiClockWise;
TARCH_IMPEXP static double g_nAngleBegin; //用于圆形轴网的开间标注, 起始轴线的角度
#endif
public:
XAxisDimSet() {}
XAxisDimSet(XCurveSegment *pLine)
{
assert(!pSortBase);
pSortBase=pLine;
}
~XAxisDimSet() { pSortBase=NULL; }
static int SortFunc(const XCurveSegment *cv1, const XCurveSegment *cv2);
};
#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,标记是否是在首个主轴号之前的附加轴号
#define AXF_PREFIRSE_ATTACH 0x200
// sg add 120214,增加首端、末端是否有独立默认位置
#define AXF_SIDE1_LEADPOS 0x400
#define AXF_SIDE2_LEADPOS 0x800
struct TARCH_EXP TAxisInfo
{
Adesk::UInt16 m_nFlag; // 是否为附加轴号
XString m_sText; // 轴号
double m_nPara2Next; // 距离或角度到下一根轴线
double m_nLeadLen1, m_nLeadLen2; // 引线长度
// TArch9 Data
double m_dLeadPos1; // 保存每个轴线端点位置距离默认点的距离
double m_dLeadPos2;
TAxisInfo() {
m_nFlag=0;
m_nPara2Next=0.0;
m_nLeadLen1=m_nLeadLen2=0.0;
// sg add 120214,增加每个轴线端点位置距离默认点的距离
m_dLeadPos1 = m_dLeadPos2 = 0.0;
}
};
#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,隐藏轴标文字
class TDbSymbDrawingIndex;
// 轴网标注
class TARCH_EXP TDbAxisLabelSet: public TDbEntity
{
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbAxisLabelSet);
private:
const static Adesk::UInt8 g_nVersion;
protected:
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; //轴号圆圈半径
// 文字参数
AcDbHardPointerId m_idTextStyle; //文字样式
// TArch6 data
AcDbHardPointerId m_idTextLayer;
// TArch7 Data
Adesk::UInt16 m_colorText;//文字颜色
// TArch9 Data
Adesk::UInt16 m_nFlag2; // add by lgy 20120209,新增控制标记
public:
BOOL m_bShowHide;//是否显示隐藏轴号,不存盘
// sg add 100518,增加用来区分Grip和Stretch点的变量,不存盘
bool m_bStretchPt;
protected:
// 另存Tch3用
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;
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
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);
//add by xlc on 090608 添加文字查找替换功能
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
virtual TTextPosition FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange=NULL) const;
// 返回下一次查找的开始位置
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,
BOOL *bErase); // sg add 120214,根据9.0的新需求,修改轴号对象,支持导出
// sg add 101116,支持统一标高
virtual bool UnifyElevation(double dElevation = 0.0);
virtual CString GetXml(const AcGeMatrix3d& mat) const;
// sg add 120214,支持夹点ctrl功能切换
virtual int GetCtrlToggleIndex()const { return 8; }
public: // Helper Methods
XCurveSegment GetAxis(int idx) const;
// 取得正交的曲线, nSide: 0-起始侧, 1-终止侧
XDirectionCurve GetOrthoCurve(int nSide, int bForceOpen=FALSE) const;
int OnWhichSide(XPoint pt) const; //0--起始端, 1--末端
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);
int HitTestOnLabel0(XPoint ptPick,int *pSide=NULL)const;//add by whl on 041117,不忽略隐藏轴号
int HitTestOnLabel(XPoint ptPick, int *pSide=NULL)const;//忽略隐藏轴号
int HitTestOnAxis(XPoint ptPick, int *pSide=NULL) const;
int HitLabel(const XCurveSegment &seg, XString &sLab) const; // tol=_DIST_SNAP, return index; >=0, hit ok
// modify by lgy 20120208,增加是否自动重排序号的参数
// 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);
// add by xly on 110314 支持交叉轴网可以标注
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
BOOL IsArcAxisNet() const; //圆弧轴网的标注(包括径向和周向)
BOOL IsArcAxis() const; //是否标注弧轴线
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
// sg add 090723,支持使用新、旧圆圈文字样式,动态数据
void SetCircleTextStyle(int nStyle);
int GetCircleTextStyle() const;
// sg add 100530,根据8.5需求,增加保存字母组合时的排序规则,是“变前项”,还是“变后项”的动态数据
void SetChangePreNum(BOOL bTrue);
BOOL IsChangePreNum() const;
// add by lgy 20120209,9.0添加轴号标注文字隐藏
void SetAllAxisTextHide(BOOL bTrue);
BOOL IsHideAllAxisText() const;
// add by xly on 110315 获得轴标被隐藏侧
int GetHideSide();
public:
// sg add 110607,专门提供给“一轴多号”命令使用,用于修改各个引线长度
void SetLeaderLenOneByOne(int nSide, double val, BOOL bAsPaperUnit);
void AddLeaderLenOneByOne(int nSide, double val, BOOL bAsPaperUnit);
// sg add 110614,设置某轴号为主轴号前的附加轴号
void SetPreFirstAttachLabel(int nIdx, BOOL bAttach);
};
/////////////////////////////////////////////
// 找离ptAxisEnd最近的轴线
BOOL TARCH_IMPEXP GetClosestAxis(PickSet &ssJs, const XPoint &ptAxisEnd, Entity &eAxis);
#endif