#ifndef _KTGEUTILITY_H__ #define _KTGEUTILITY_H__ #if _MSC_VER > 1000 #pragma once #endif class KTGeUtility { public: KTGeUtility(); virtual ~KTGeUtility(); //中点 static AcGePoint3d Mid(const AcGePoint3d& ptGe1,const AcGePoint3d& ptGe2); //中点 static AcGePoint3d Mid(AcDbCurve* pCurve); static AcGePoint2d ucsToDcs(const AcGePoint3d& pt); //点投影到plane面上,作为XY2d面上的点使用 static BOOL ToPlaneInWcs2D(AcGePoint3d& ptGe,const AcGePlane& plane); //向量投影到plane面上,作为XY2d面上的向量使用 static BOOL ToPlaneInWcs2D(AcGeVector3d& vt,const AcGePlane& plane); //点在曲线上排序 static void SortPoints(AcGePoint3dArray& points,AcDbCurve* pLine); //判断两条平行直线投影到其中一条上,是否有共同部分 static BOOL ParallelLinesHasCommon(AcDbLine* pLine1,AcDbLine* pLine2); //根据ptGeNear投影到id上的点向两边偏移,然后打断中间的段[三通用] static BOOL BreakLine(AcDbObjectId& id,AcGePoint3d& ptGeNearCen,double dHalfWidth); //根据ptGeNear投影到id上的点向两边偏移,然后打断中间的段[三通用] static BOOL BreakLine(AcDbEntity* pEnt,AcGePoint3d& ptGeNearCen,double dHalfWidth); //以ptGeOn为中点向两边打断 static BOOL MidBreakLine(AcDbEntity* pEnt,AcGePoint3d& ptGeOn,double dHalfWidth); //找距离pLineCen 最近的平行线 static BOOL FindClosestLineParallelTo(AcDbObjectIdArray& arIds,AcDbLine* pLineCen,int& nIndex); static BOOL PickDir(LPCTSTR pszTip,const AcGePoint3d& ptGeBase,AcGeVector3d& vtDir); //找组中的hit的元素,id是组中一个实体 static BOOL FindHitEnt(AcDbObjectIdArray& ids,AcGePoint3d& ptGe,AcDbObjectId& idHit); //设备新增函数 static AcGePoint2d P3d_to_P2d(AcGePoint3d pt); //获取对应样式的文字高度,宽度,角度 static void KTGetTextstyle(CString sStyle,double& dHeight,double& dWidth,double& dAngle); static void MisicellaElbow(AcGePoint3d ptBase,AcGeVector3d vM,AcGeVector3d vS,double dA,double dB,double dC,double dD); //新增的批量断线函数 static void BatchBreak(AcDbObjectId idDraw,AcDbObjectId idOld,int nNo,AcGePoint3d ptStart,AcGePoint3d ptEnd,double dBreakDis,int nDraw,int nCross); static bool LineBreak(ads_name ename,ads_name adsLine,ads_name ssResult,double dBreakDis,int nDraw,int nCross); static double AngleToXAxis(AcGePoint3d pt1,AcGePoint3d pt2); }; #endif //_KTGEUTILITY_H__