80 lines
2.6 KiB
C
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
|
||
|
};
|
||
|
|