174 lines
7.9 KiB
C++
174 lines
7.9 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 |