Files
envi-code/SourceCode/Code2026/tg_shs/inc/geo/TchGlobalCurveFunc.h
T
2026-09-28 15:28:50 +08:00

174 lines
7.6 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// 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<AcDbEntity> &entSet);
// 由二维曲线, 求最外边界轮廓线
GEOAPI int GetExternalBoundaryFromCurves(const TDPtrList<TGGeCurveSegment> &lstSegs, TGGePoly2D &polyOutline);
// 由二维曲线, 求最外边界轮廓线
GEOAPI int GetExternalBoundaryFromCurves(const TDPtrList<TGGeCurveSegment> &lstSegs, TDPtrList<TGGePoly2D> &lstPoly);
// 在交点处断开
// dPrec--自动交上的控制距离
GEOAPI void IntersectCurves(TDPtrList<TGGeCurveSegment> &lstCurves, double dPrec);
// 消除重线
GEOAPI void RemoveDupCurves(TDPtrList<TGGeCurveSegment> &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<TGGeCurveSegment> &lstResult);
// 由二维图块提取二维曲线段
GEOAPI int GetCurveFromInsert2D(TEntitySet &ent, TDPtrList<TGGeCurveSegment> &lstSegs);
// 从图块中寻找_HOLE图层上的PLINE
// 有若干线搜索区域
GEOAPI int SearchOutRegions(const TDPtrList<TGGeCurveSegment> &lstSeg1In, TDPtrList<TGGePoly2D> &lstDest);
// 把Poly2D分解为曲线
GEOAPI void ExplodePoly2D(const TGGePoly2D &poly, TDPtrList<TGGeCurveSegment> &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<TGGeCurveSegment>&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<TGGeCurveSegment> &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<TGGeCurveSegment> &ss, TGGePoly2D &poly,TDPtrList<TGGeCurveSegment> &ss1, TDPtrList<TGGeCurveSegment> &ss2);
GEOAPI int PolyClip(const TDPtrList<TGGeCurveSegment> &ss, const TGGePoly2D &poly1,TDPtrList<TGGeCurveSegment> &ss1, TDPtrList<TGGeCurveSegment> &ss2, TDPtrList<TGGeCurveSegment> &ssOnEdge);
// 把区域分解为逆时针排列的TGGePoly2D
GEOAPI void Region2TGGePoly2D(const AcDbRegion *pClone, TGGePoly2D &poly2D);
// 布尔运算,与PolyBoolOper函数接口不变,但使用AcDbRegion::booleanOper函数,内部计算时,将标高设置为0
GEOAPI void RegionBoolOper(const TGGePoly2D &poly1, const TGGePoly2D &poly2, TDPtrList<TGGePoly2D> &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<TGGePoly2D> & poly, AcDb::BoolOperType operation);
GEOAPI void Union(const TDPtrList<TGGePoly2D> &lstSourcePolies, const TDPtrList<TGGePoly2D> &lstClipPolies, TDPtrList<TGGePoly2D> &lstResultPolies);
GEOAPI void Subtract(const TDPtrList<TGGePoly2D> &lstSourcePolies, const TDPtrList<TGGePoly2D> &lstClipPolies, TDPtrList<TGGePoly2D> &lstResultPolies);
GEOAPI void Intersect(const TDPtrList<TGGePoly2D> &lstSourcePolies, const TDPtrList<TGGePoly2D> &lstClipPolies, TDPtrList<TGGePoly2D> &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<TGGeCurveSegment> &lstSeg1In, TDPtrList<TGGePoly2D> &lstDest);
};
extern GEOAPI void TdRemoveDupCurves(TDPtrList<TGGeCurveSegment> &lstCurves, BOOL bExactDup,BOOL bIntsect);
extern GEOAPI TSubText* HitTestOnText(TPickEntSet& ss,TADSGePoint3d pt);
using namespace TchExport2;
#endif