#pragma once class BaseAlgo { public: BaseAlgo(void); ~BaseAlgo(void); public: //获取边的端点 void GetEdgeStartEndPoint(const TopoDS_Edge& edge, gp_Pnt& sp, gp_Pnt& ep); //判断两条边是否重合 bool isOnEdge(TopoDS_Edge& edge1, TopoDS_Edge& edge2); //判断两条边是否有公共部分 bool hasCommenPart(TopoDS_Edge& edge1, TopoDS_Edge& edge2); // Bnd_Box getFaceBox(TopoDS_Face face); //从边集合中分离出独立的边集合,其中不含有重复边 void GetWireSingleEdges(map& mapEdge,vector>& edgeIndex); //判断边是否重合 bool CheckTwoEdgeOverlapByLinePointProject(TopoDS_Edge& tedgeA,TopoDS_Edge& tedgeB); //如果交线端点不在在所在面的边界上,则构造一条短边 bool GetConnectEdge(std::map& mapEdge,std::vector edgeIndex, TopoDS_Face &face, TopoDS_Edge& edge1, TopoDS_Edge& edge2, bool& isEdge1, bool& isEdge2); //如果两条边的端点不重合,则构造一条短边 bool GetConnectEdge(TopoDS_Face& face, TopoDS_Edge& edge1, TopoDS_Edge& edge2, TopoDS_Edge& newEdge1, TopoDS_Edge& newEdge2, bool& hasNewEdge1, bool& hasNewEdge2); //重新构造交线 void RebuildConnectLines(TopoDS_Face& face, std::map mapEdge,std::vector edgeIndex, std::vector& newEdges); //获取点在线上的投影点,并返回最短距离 Standard_Real Project(const TopoDS_Vertex& V, const TopoDS_Edge& theEdge, gp_Pnt& p); //建立边在面上的关系 void PutPCurve(const TopoDS_Edge& Edg, const TopoDS_Face& Fac); //根据交线将面集合进行拆分 TopoDS_Shape GetCutResult(map& mapFace,TopoDS_Shape& InterSecLine); //拆分topo成shell集合 vector SplitShapeToShell(TopoDS_Shape S); //判断点是否在线上 bool IsInCurve(TopoDS_Edge edge, TopoDS_Vertex vertex); //通过连接关系构造相连的曲面集合 void GetFaceSet( vector &resultSet, map& mapFaceSign, map>& mapConnectFace, vector& tempFaceSet); //将曲线转化成B样条曲线 Handle(Geom_BSplineCurve) GetBSplineCurve(const TopoDS_Shape& aS); //判断两个topo的边界是否相连 bool IsConnect(TopoDS_Shape s1, TopoDS_Shape s2); //将曲面集合缝合 TopoDS_Shell SewShell(vector shapeSet, double tol = 1e-6); // void GetWireSingleEdges1(map& mapEdge,vector>& edgeIndex); //删除重复点 void DeleteSamePoint(vector& pSet, double tol); // TopoDS_Solid RebuildSolid(TopoDS_Solid solid, double tol = 1e-6); // vector SolidSurfaceClear(vector shapeSet, vector onID); //判断两条边是否平行 bool IsParallel( TopoDS_Edge e1, TopoDS_Edge e2); //判断体的方向是否向外 bool IsReversed(TopoDS_Shape solid, gp_Pnt p = gp_Pnt(2000,2000,2000)); //判断点是否在线上 bool IsPointOnEdge( const TopoDS_Edge& edge,const gp_Pnt& pt1); //通过线上两点来截取曲线 bool TrimEdgeBy2Points( const TopoDS_Edge& edge,const gp_Pnt& pt1,const gp_Pnt& pt2,TopoDS_Edge& newEdge ); //按顺序获取边集合的端点集合 vector GetPointSet(vector edgeSet); //获取点在线上投影点坐标 gp_Pnt ProjectPointOnCurvePoint(TopoDS_Edge edge, gp_Pnt p); //获取点在线上投影点参数 double ProjectPointOnCurvePara(TopoDS_Edge edge, gp_Pnt p); //获取点在线上投影点距离 double ProjectPointOnCurveDis(TopoDS_Edge edge, gp_Pnt p); public: int flag; };