COMPASSi/trunk/code/inc/OCC/OCCLib/OCCCabin_Bool.h

80 lines
2.6 KiB
C++

#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<gp_Pnt> pSet1, vector<gp_Pnt> pSet2);
//对应点连接成封闭面,允许特征端面存在相邻的重复点
TopoDS_Shell CreateShell(vector<gp_Pnt> pSet1, vector<gp_Pnt> pSet2); //20170601 by czb
//将输入特征点转化为2维特征点
vector<gp_Pnt2d> ConvertPoint2dSet(double* values, double width, double height);
//将输入特征点转化为2维特征点
vector<gp_Pnt2d> ConvertPoint2dSet2(double* values, double width, double height);//20170601 by czb
//将2维特征点转化为3维特征点
vector<gp_Pnt> CreatePointSet(vector<gp_Pnt2d> p2dSet, double d);
//通过特征点,连接成线,剪切所在平面
TopoDS_Face CutEndFace(TopoDS_Face face, TopoDS_Shape shell, vector<gp_Pnt> pSet, bool isLeft);
//返回结果
TopoDS_Shape GetResult();
//调整顺序 保证特殊点在首尾
vector<gp_Pnt2d> Reorder(vector<gp_Pnt2d> pSet, vector<int> 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<gp_Pnt> pSetFront,std::vector<gp_Pnt> pSetBack);
Handle(Geom_BSplineCurve) getBSplineCurveMultiPoints(gp_Pnt points[], int len);
//
TopoDS_Shape ConstructComplexBSplineShape630Original(std::vector<gp_Pnt> pSetFront,std::vector<gp_Pnt> pSetBack); // XUEFENG ADDED 202102
TopoDS_Shape ConstructComplexBSplineShape710(std::vector<gp_Pnt> pSetFront,std::vector<gp_Pnt> pSetBack); // XUEFENG ADDED 202102
};