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

175 lines
7.0 KiB
C++

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