175 lines
7.2 KiB
C++
175 lines
7.2 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
|