#pragma once #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif namespace Geometry { typedef std::vector GePoint2dArray; typedef std::vector GePoint3dArray; typedef std::vector GePolyArray3d; // 多边形 struct GePolygon2d { GePoint2dArray vertexs; }; typedef std::vector GePolygon2dList; // 多边形带泂 polygon with holes struct GePwh2d { GePolygon2d outer_boundary; GePolygon2dList inner_holes; }; typedef std::vector GePwh2dList; enum Bounded_side { eOutside = -1, eIsPoint, eOnside, eInside, SIDE_ERROR, }; // 对pts做delaunary三角化,并保存成GePolyFaceMesh结构 DLLIMPEXP void delaunayTriangulationMesh(const GePoint3dArray &arPts , AcGePoint3dArray &vertexArray , AcArray &faceArray); DLLIMPEXP void delaunayTriangulationMeshWithHolds(const GePoint3dArray &arPts , const GePolyArray3d &holds , AcGePoint3dArray &vertexArray , AcArray &faceArray); // 计算一堆点的凸包曲线 // 传出是一个point数组,按顺序组成一条polygon DLLIMPEXP void calcConvexHull2D(const GePoint2dArray &arPts, GePoint2dArray &poly); DLLIMPEXP void calcConvexHull2D(const GePoint3dArray &arPts, GePoint2dArray &poly); DLLIMPEXP void calcConvexHull2D(const GePoint3dArray &arPts, GePoint3dArray &poly); DLLIMPEXP Bounded_side boundary_check(const AcGePoint2d &pt, const GePwh2d &gepoly); DLLIMPEXP bool is_vaild_polygon(const GePwh2d &P); DLLIMPEXP bool is_vaild_polygon(const GePolygon2d &P); DLLIMPEXP bool is_counterclockwise(const GePwh2d &P); DLLIMPEXP bool is_counterclockwise(const AcGePoint2d &ptS , const AcGePoint2d &ptM , const AcGePoint2d &ptE); DLLIMPEXP bool is_intersect(const GePwh2d &p1, const GePwh2d &p2); DLLIMPEXP void intersect(const GePwh2d &P , const GePwh2d &Q , GePwh2dList &gepwhlst); DLLIMPEXP bool join(const GePwh2d &P , const GePwh2d &Q , GePwh2d &gepwh); DLLIMPEXP void difference(const GePwh2d &P , const GePwh2d &Q , GePwh2dList &gepwhlst); DLLIMPEXP void symmetric_difference(const GePwh2d &P , const GePwh2d &Q , GePwh2dList &gepwhlst); DLLIMPEXP void convexHull2d(const AcGePoint2dArray &input, AcGePoint2dArray &output); }