jianbaoxia
CAD master
Hi Bros, it's me again. I seem to fail in simple problem again
I get make a offset with a BSpline face, then I get a Handle(Geom_Surface) with the face after offset.
And I try to transform it to TopoDS_Face through BRepBuilderAPI_MakeFace,
actually it also happen when a try to get a TopoDS_Edge from Geom_Curve through BRepBuilderAPI_MakeFEdge.
I must ignore something what I don't know, the continuous failure is frustrating
There is my demo:
I get make a offset with a BSpline face, then I get a Handle(Geom_Surface) with the face after offset.
And I try to transform it to TopoDS_Face through BRepBuilderAPI_MakeFace,
actually it also happen when a try to get a TopoDS_Edge from Geom_Curve through BRepBuilderAPI_MakeFEdge.
I must ignore something what I don't know, the continuous failure is frustrating
There is my demo:
Code:
#include <BRepTools.hxx>
//
#include <BRepPrimAPI_MakeCylinder.hxx>
#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
//
#include <GCE2d_MakeSegment.hxx>
//
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <BRepFeat_Gluer.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <BRepBuilderAPI_Sewing.hxx>
//
#include <gp_Pln.hxx>
//
#include <TopoDS.hxx>
#include <TopExp_Explorer.hxx>
//
#include <ShapeAnalysis.hxx>
#include <ShapeAnalysis_Surface.hxx>
//
#include <STEPControl_Writer.hxx>
#include <STEPControl_Reader.hxx>
#include <Interface_Static.hxx>
//
#include <BRepBndLib.hxx>
//
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_Transform.hxx>
//
#include <BRepAdaptor_Surface.hxx>
#include <BRepAdaptor_Curve.hxx>
//
#include <Geom_BSplineCurve.hxx>
#include <Geom_BSplineSurface.hxx>
#include <Geom2d_BSplineCurve.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <Geom_Line.hxx>
//
#include <GeomLProp_CLProps.hxx>
//
#include <Geom_BezierSurface.hxx>
#include <Geom_CylindricalSurface.hxx>
//
#include <TColGeom_Array2OfBezierSurface.hxx>
//
#include <GeomConvert_CompBezierSurfacesToBSplineSurface.hxx>
#include <GeomAPI_PointsToBSplineSurface.hxx>
#include <BRepClass_FaceExplorer.hxx>
//
#include <BRepExtrema_DistShapeShape.hxx>
//
#include <Geom_OffsetSurface.hxx>
// use for get a BSpline Surface
TopoDS_Face BSplinSurDemo(double xmin=0,double xmax= M_PI,double ymin=0,double ymax= M_PI)
{
std::string filePath = "C:/Users/14656/Desktop/Program/Open Cascade/Demo/";
int n = 100; //
//
double step_x = (xmax - xmin) / n;
double step_y = (ymax - ymin) / n;
std::vector<double> value_x;
std::vector<double> value_y;
for (int i = 0; i < n; i++)
{
value_x.push_back(xmin + i * step_x);
value_y.push_back(ymin + i * step_y);
}
//
TColgp_Array2OfPnt pointsList(1, value_x.size(), 1, value_y.size());
int row = 1;
for (int i = 0; i < value_x.size(); i++)
{
int colu = 1;
for (int j = 0; j < value_y.size(); j++)
{
const double& x = value_x[i];
const double& y = value_y[j];
double z = 5 * cos(x) * sin(x) * cos(y) * sin(y);
pointsList.SetValue(row, colu, gp_Pnt(x, y, z));
colu++;
}
row++;
}
//
Handle(Geom_Surface) aBSplineSur = GeomAPI_PointsToBSplineSurface(pointsList).Surface();
TopoDS_Face aBSplinFace = BRepBuilderAPI_MakeFace(aBSplineSur,Precision::Confusion());
/*BRepTools::Dump(aBSplinFace, std::cout);
WriteStepFile(aBSplinFace, filePath + "aBSplinFace.step");*/
return aBSplinFace;
}
int main()
{
TopoDS_Face aBSplineFace = BSplinSurDemo(); // basic face
// offset
Handle(Geom_BSplineSurface) aBSplineSur = BRepAdaptor_Surface(aBSplineFace).BSpline();
Standard_Real disOff = 23;
Handle(Geom_OffsetSurface) aOffset = new Geom_OffsetSurface(aBSplineSur, disOff);
Handle(Geom_Surface) aOffsetSur = aOffset->Surface();
Standard_Real blade_umin;
Standard_Real blade_umax;
Standard_Real blade_vmin;
Standard_Real blade_vmax;
BRepTools::UVBounds(aBSplineFace, blade_umin, blade_umax, blade_vmin, blade_vmax);
// both ways all fail
TopoDS_Face aOffsetFace = BRepBuilderAPI_MakeFace(aOffsetSur, Precision::Confusion());
// TopoDS_Face aOffsetFace = BRepBuilderAPI_MakeFace(aOffsetSur,blade_umin, blade_umax, blade_vmin, blade_vmax, Precision::Confusion());
return 0;
}