//-------------------------------------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : 导出全局函数头文件 // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: 全局函数的声明 // = Maintainers: // //-------------------------------------------------------------------------------------------------------+ #ifndef _XGLOBALCURVEFUNC_H_ #define _XGLOBALCURVEFUNC_H_ #ifndef _XPOLYDIST_H_ #include "XPolyDist.h" #endif #ifndef _XREGION2D_H_ #include "XRegion2D.h" #endif #ifndef _SQTABLE2_H_ #include "SqTable2.h" #endif #ifndef _XPOLY2D_H_ #include "XPoly2D.h" #endif #ifndef _XRECTANGLE_H_ #include "XRectAngle.h" #endif #ifndef _XARC_H_ #include "XArc.h" #endif #ifndef _XPOLYGONEX_H_ #include "XPolygonEx.h" #endif #ifndef _XPOLY2D_H_ #include "XPoly2D.h" #endif #ifndef _XMASTERPROPERTIES_H_ #include "XMasterProperties.h" #endif class AEntityBase; class SubText; namespace XExport2 { GEOAPI int GetRectAngleStatic(const XPoint &ptCorn1, double nAngle, XPoint &ptCorn2); GEOAPI int XGetCorner(const XPoint &ptCorn1, const TCHAR *pszMsg, XPoint &ptCorn2); // 返回对象,外部需要释放内存 GEOAPI XCell* GetShape(const Point& pickPt); GEOAPI Acad::ErrorStatus ExplodeBlockRef(AcDbBlockTableRecord &blockRec, ads_matrix matForInsert, DList &entSet); // 由二维曲线, 求最外边界轮廓线 GEOAPI int GetExternalBoundaryFromCurves(const DList &lstSegs, XPoly2D &polyOutline); // 由二维曲线, 求最外边界轮廓线 GEOAPI int GetExternalBoundaryFromCurves(const DList &lstSegs, DList &lstPoly); // 在交点处断开 // dPrec--自动交上的控制距离 GEOAPI void IntersectCurves(DList &lstCurves, double dPrec); // 消除重线 GEOAPI void RemoveDupCurves(DList &lstCurves); // 用区域裁剪实体 GEOAPI void ClipEntitiesByPoly(XPoly2D & polyOutline, PickSet &ssBack); GEOAPI int GetClipBoundary(XPoly2D &poly2d); // 从块表中取所有的曲线: 包括LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,以及在INSERT中的前述实体 GEOAPI void Get2DCurveFromBlock(AcDbBlockTableRecord &blockRec, ads_matrix matForInsert,DList &lstResult); // 由二维图块提取二维曲线段 GEOAPI int GetCurveFromInsert2D(Entity &ent, DList &lstSegs); // 从图块中寻找_HOLE图层上的PLINE // 有若干线搜索区域 GEOAPI int SearchOutRegions(const DList &lstSeg1In, DList &lstDest); // 把Poly2D分解为曲线 GEOAPI void ExplodePoly2D(const XPoly2D &poly, DList &lstSegs); //把XPoly2D转化为AcDbPolyline GEOAPI void PolyConvert(const XPoly2D &poly, AcDbPolyline &pline); //把AcDbPolyline转化为XPoly2D GEOAPI void PolyConvert(const AcDbPolyline &pline, XPoly2D &poly); GEOAPI AcDbRegion* AsRegion(const XPoly2D &poly); GEOAPI int FindNearestEdge(const XPoly2D &poly, const XPoint &ptEdge); GEOAPI AcDbHatch * NewHatchFromPoly2D(const XPoly2D &poly); GEOAPI AcDbHatch * NewHatchFromPoly2D(const XPoly2D &poly, const TCHAR *pszPattern, double nScl); GEOAPI AcDbHatch * NewHatchFromPoly2D(const XPoly2D &poly, const TCHAR *pszPattern, double nScl,double rotation); GEOAPI Acad::ErrorStatus WritePoly2D(AcDbDwgFiler *pFiler, const XPoly2D &poly); GEOAPI Acad::ErrorStatus ReadPoly2D(AcDbDwgFiler *pFiler, XPoly2D &poly); GEOAPI int _SplitPoly2D(const XPoly2D &poly, const XPoint &pt1, const XPoint &pt2, XPoly2D &res1, XPoly2D &res2); GEOAPI int SplitPoly2D(const XPoly2D &poly, const XPoint &pt1, const XPoint &pt2, XPoly2D &res1, XPoly2D &res2); GEOAPI void SplitPoly2D(const XPoly2D &poly, AcDbVoidPtrArray &entSet); // 把Region化为曲线段 GEOAPI void Region2Curves(const AcDbRegion *pClone, DList&lstSegs); GEOAPI int HandleCurveInters(PickSet &ss, double dPrec); GEOAPI int ConnectPolygon(const XPolygonEx &poly1, const XPolygonEx &poly2, XPolygonEx &res); GEOAPI int ConnectPolygon(const XPolygonEx &poly1, const XPolygonEx &poly2, const XPolyDist &polyDist, XPolygonEx &res); GEOAPI void _IntersectCurves(DList &lstCurves, double dPrec); GEOAPI int PolyClip(PickSet &ss, XPoly2D &poly, PickSet &ss1, PickSet &ss2); GEOAPI int PolyClip(PickSet &ss, XPoly2D &poly, PickSet &ss1, PickSet &ss2, PickSet &ss3); GEOAPI int PolyClip(const DList &ss, XPoly2D &poly,DList &ss1, DList &ss2); GEOAPI int PolyClip(const DList &ss, const XPoly2D &poly1,DList &ss1, DList &ss2, DList &ssOnEdge); // 把区域分解为逆时针排列的XPoly2D GEOAPI void Region2XPoly2D(const AcDbRegion *pClone, XPoly2D &poly2D); // 布尔运算,与PolyBoolOper函数接口不变,但使用AcDbRegion::booleanOper函数,内部计算时,将标高设置为0 GEOAPI void RegionBoolOper(const XPoly2D &poly1, const XPoly2D &poly2, DList &lstResult,AcDb::BoolOperType operation); // 自动处理封闭的XPoly2D,只处理外轮廓线 // 若某段长度不大于MIN_PL_DISTANCE,或者相临两段夹角不大于MIN_PL_ANGEL度,则自动减点 GEOAPI void AutoDelExPoly2DPt(XPoly2D &poly); GEOAPI void GetGripPoints(const XPoly2D &poly, AcGePoint3dArray &gripPoints); GEOAPI void GetGripPoints(const XPoly2D &poly,AcGeVector3d &normal,AcGePoint3dArray &gripPoints); GEOAPI Acad::ErrorStatus MoveGripPointsAt(XPoly2D &poly, const AcDbIntArray& indices, const AcGeVector3d& offset); GEOAPI Acad::ErrorStatus MoveGripPointsAt(XPoly2D &polyPath,AcGeVector3d &vtNormal, const AcDbIntArray& indices,const AcGeVector3d& offset); GEOAPI Acad::ErrorStatus GetGripText(const XPoly2D&poly,int idx,CString &cs); GEOAPI void CreateGrip(AEntityBase* pThis,XPoly2D& poly,int iFirst); GEOAPI Acad::ErrorStatus EntityToDim(AEntityBase* pThis,XPoly2D polyPath,long iGrip,long iDim,int iFirst); GEOAPI Acad::ErrorStatus DimToEntity(AEntityBase*pThis,XPoly2D &m_polyBase,long iGrip,long iDim,double newValue,const AcGeVector3d& offset,int iFirst); // 区域的布尔运算 GEOAPI Adesk::Boolean PolyBoolOper(const XPoly2D &poly1, const XPoly2D & poly2, DList & poly, AcDb::BoolOperType operation); GEOAPI void Union(const DList &lstSourcePolies, const DList &lstClipPolies, DList &lstResultPolies); GEOAPI void Subtract(const DList &lstSourcePolies, const DList &lstClipPolies, DList &lstResultPolies); GEOAPI void Intersect(const DList &lstSourcePolies, const DList &lstClipPolies, DList &lstResultPolies); GEOAPI void InitModel(const XMasterProperties &prop, const AcDbVoidPtrArray &entSet, AcGeMatrix3d *pMatTran, AcDbVoidPtrArray &entSet3dface); GEOAPI void InitModel(const XMasterProperties &prop, const AcDbEntity *pEntity, AcGeMatrix3d *pMatTran, AcDbVoidPtrArray &entSet3dface); // 更加曲线搜索所有的构成区域 GEOAPI int SearchRegions(const DList &lstSeg1In, DList &lstDest); }; extern GEOAPI void xdRemoveDupCurves(DList &lstCurves, BOOL bExactDup,BOOL bIntsect); extern GEOAPI SubText* HitTestOnText(PickSet& ss,XPoint pt); using namespace XExport2; #endif