73 lines
3.5 KiB
C
73 lines
3.5 KiB
C
|
#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<int, TopoDS_Edge>& mapEdge,vector<vector<int>>& edgeIndex);
|
||
|
//判断边是否重合
|
||
|
bool CheckTwoEdgeOverlapByLinePointProject(TopoDS_Edge& tedgeA,TopoDS_Edge& tedgeB);
|
||
|
//如果交线端点不在在所在面的边界上,则构造一条短边
|
||
|
bool GetConnectEdge(std::map<int, TopoDS_Edge>& mapEdge,std::vector<int> 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<int, TopoDS_Edge> mapEdge,std::vector<int> edgeIndex, std::vector<TopoDS_Edge>& 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<int, TopoDS_Face>& mapFace,TopoDS_Shape& InterSecLine);
|
||
|
//拆分topo成shell集合
|
||
|
vector<TopoDS_Shell> SplitShapeToShell(TopoDS_Shape S);
|
||
|
//判断点是否在线上
|
||
|
bool IsInCurve(TopoDS_Edge edge, TopoDS_Vertex vertex);
|
||
|
//通过连接关系构造相连的曲面集合
|
||
|
void GetFaceSet( vector<int> &resultSet, map<int,bool>& mapFaceSign, map<int,vector<int>>& mapConnectFace, vector<int>& tempFaceSet);
|
||
|
//将曲线转化成B样条曲线
|
||
|
Handle(Geom_BSplineCurve) GetBSplineCurve(const TopoDS_Shape& aS);
|
||
|
//判断两个topo的边界是否相连
|
||
|
bool IsConnect(TopoDS_Shape s1, TopoDS_Shape s2);
|
||
|
//将曲面集合缝合
|
||
|
TopoDS_Shell SewShell(vector<TopoDS_Shape> shapeSet, double tol = 1e-6);
|
||
|
//
|
||
|
void GetWireSingleEdges1(map<int, TopoDS_Edge>& mapEdge,vector<vector<int>>& edgeIndex);
|
||
|
//删除重复点
|
||
|
void DeleteSamePoint(vector<gp_Pnt>& pSet, double tol);
|
||
|
//
|
||
|
TopoDS_Solid RebuildSolid(TopoDS_Solid solid, double tol = 1e-6);
|
||
|
//
|
||
|
vector<TopoDS_Shape> SolidSurfaceClear(vector<TopoDS_Shape> shapeSet, vector<int> 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<gp_Pnt> GetPointSet(vector<TopoDS_Edge> 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;
|
||
|
};
|
||
|
|