#pragma once #include "BaseAlgo.h" #include "Geometry.h" enum DIR { DIR_X = 1, DIR_Y, DIR_Z }; class OCCCabin_Bool : public BaseAlgo { public: OCCCabin_Bool(TopoDS_Shape solid); //20170601 by czb TopoDS_Solid 或 TopoDS_Compound ~OCCCabin_Bool(void); public: //设置默认宽度 void SetWidth(double width); //设置默认高度 void SetHeight(double height); //设置生成体方向 void SetDir(DIR d); //执行舱室生成算法 void Perform(Space space); void Perform2(Space space); //20170601 by czb //对应点连接成特征面 TopoDS_Shell CreateSplitShell(vector pSet1, vector pSet2); //对应点连接成封闭面,允许特征端面存在相邻的重复点 TopoDS_Shell CreateShell(vector pSet1, vector pSet2); //20170601 by czb //将输入特征点转化为2维特征点 vector ConvertPoint2dSet(double* values, double width, double height); //将输入特征点转化为2维特征点 vector ConvertPoint2dSet2(double* values, double width, double height);//20170601 by czb //将2维特征点转化为3维特征点 vector CreatePointSet(vector p2dSet, double d); //通过特征点,连接成线,剪切所在平面 TopoDS_Face CutEndFace(TopoDS_Face face, TopoDS_Shape shell, vector pSet, bool isLeft); //返回结果 TopoDS_Shape GetResult(); //调整顺序 保证特殊点在首尾 vector Reorder(vector pSet, vector index); public: //原体体 TopoDS_Shape solid; //20170601 by czb TopoDS_Solid 或 TopoDS_Compound //默认宽度 double width; //默认高度 double height; //生成体方向 DIR dir; //船体坐标范围 double hullMinX; //20170601 by czb, 新增 //船体坐标范围 double hullMaxX; //船体坐标范围 double hullMinY; //船体坐标范围 double hullMaxY; //船体坐标范围 double hullMinZ; //船体坐标范围 double hullMaxZ; //结果 TopoDS_Shape result; public: // XUEFENG ADDED 20171010 // 以下3个函数用以根据特征点构造立方体然后与主船体进行布尔运算 Handle(Geom2d_Curve) getPCurve(Handle(Geom_Surface) surfaceIn, Handle(Geom_Curve) curve3dIn); TopoDS_Shape ConstructComplexBSplineShape(std::vector pSetFront,std::vector pSetBack); Handle(Geom_BSplineCurve) getBSplineCurveMultiPoints(gp_Pnt points[], int len); // TopoDS_Shape ConstructComplexBSplineShape630Original(std::vector pSetFront,std::vector pSetBack); // XUEFENG ADDED 202102 TopoDS_Shape ConstructComplexBSplineShape710(std::vector pSetFront,std::vector pSetBack); // XUEFENG ADDED 202102 };