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