For all issues regarding the Forums use, please, refer to the Forum Rules.

### Our Solutions

Need professional assistance?
Consider our:

Need to speed up your development?
Have a look at our:

Need some functionality extending standard OCCT capabilities?
Check out our:

# Ruled Surface

Forums:

Hi

I have a ruled surface which have four edges (three edge have one line each and one edge have an arc). I need to construct a face with this. The face is not a planar face. Can any one help me out this.

Thanks and regards,

Raj Kumar

### Hi Kurnar,

Hi Raj,

Do you have some example data of the edges?

Here is an example that makes a non-planer face of 4 edges: FaceFromEdges

​Or general face creation: MakeFaces

​Best regards, Guido

### Hi Guido,

Hi Guido,

Below are the sample code i used to make the face. And here while init the GeomFill_BSplineCurves, to use GeomFill_CoonsStyle to make ruled face, to make a ruled face i need NbUPoles and NbVPoles greater than 4 to construct the face, but i get 2 for NbVPoles. I have attached a text file which contains sample data.

TopExp_Explorer anExp(mw.Wire(), TopAbs_EDGE);
for (; anExp.More(); anExp.Next())
{
const TopoDS_Edge& edge = TopoDS::Edge(anExp.Current());
TopLoc_Location heloc; // this will be output
Handle(Geom_Curve) c_geom = BRep_Tool::Curve(edge, heloc, u1, u2); //The geometric curve
Handle(Geom_BSplineCurve) b_geom = Handle(Geom_BSplineCurve)::DownCast(c_geom); //Try to get BSpline curve

if (!b_geom.IsNull())
{
gp_Trsf transf = heloc.Transformation();
b_geom->Transform(transf); // apply original transformation to control points
//Store Underlying Geometry
crvs.push_back(b_geom);
}
else
{
// try to convert it into a b-spline
BRepBuilderAPI_NurbsConvert mkNurbs(edge);
TopoDS_Edge nurbs = TopoDS::Edge(mkNurbs.Shape());
// avoid copying
TopLoc_Location heloc2; // this will be output
Handle(Geom_Curve) c_geom2 = BRep_Tool::Curve(nurbs, heloc2, u1, u2); //The geometric curve
Handle(Geom_BSplineCurve) b_geom2 = Handle(Geom_BSplineCurve)::DownCast(c_geom2); //Try to get BSpline curve

if (!b_geom2.IsNull())
{
gp_Trsf transf = heloc2.Transformation();
b_geom2->Transform(transf); // apply original transformation to control points
//Store Underlying Geometry
crvs.push_back(b_geom2);
}
else
{
// BRepBuilderAPI_NurbsConvert failed, try ShapeConstruct_Curve now
ShapeConstruct_Curve scc;
Handle(Geom_BSplineCurve) spline = scc.ConvertToBSpline(c_geom, u1, u2, Precision::Confusion());
if (spline.IsNull())
Standard_Failure::Raise("A curve was not a b-spline and could not be converted into one.");
gp_Trsf transf = heloc2.Transformation();
spline->Transform(transf); // apply original transformation to control points
crvs.push_back(spline);
}
}
}

GeomFill_FillingStyle fstyle = GeomFill_FillingStyle::GeomFill_CoonsStyle; // getFillingStyle();
GeomFill_BSplineCurves aSurfBuilder; //Create Surface Builder

std::size_t edgeCount = crvs.size();
if (edgeCount == 2)
{
aSurfBuilder.Init(crvs[0], crvs[1], fstyle);
}
else if (edgeCount == 3)
{
aSurfBuilder.Init(crvs[0], crvs[1], crvs[2], fstyle);
}
else if (edgeCount == 4)
{
aSurfBuilder.Init(crvs[0], crvs[1], crvs[2], crvs[3], fstyle);
}

const Handle(Geom_BSplineSurface)& surf = aSurfBuilder.Surface();

BRepLib_MakeFace mf(surf, mw.Wire());
auto face = mf.Face();
auto edgeType = surAdapt.GetType();

Thanks and regards

Raj Kumar

Attachments:

### Hi Raj, I have put your data

Hi Raj, I have put your data (from Geometry.txt) in BRepFill_Filling and got following result:

Is this the shape you wanted?

### Hi Guido,

Hi Guido,

Yes this is the shape i need. Can you please share the code to make the face.

Regards,

Raj Kumar

### Hi Raj,

Hi Raj,

You can see the code in the "Script" tab next to the "View" tab.

See: FaceFromEdges2

​You can also change the code to do experiments, and recompile the script, or open other example scripts.

The scripts are in c#, to use them in c++ you have to modify them a little: remove OC prefix for OCC classes, and remove "new" keyword

​Best regards, Guido

### Hi Guido,

Hi Guido,

Thank you very much for your replay.

Thanks and regards,

Raj Kumar

### Hi,

Hi,

To create ruled face now I am using BRepFill_Filling method. It is working file, if the number of edges in a edge array is four. If the edge count exceeds then it connot build the ruled face. Is there any method to make it happen.

Thanks and Regards

Raj kumar