Support for BSpline surfaces in the Open Cascade CAD kernel
Hello, we are developing a turbomachinery blade parametrization tool in Python based on B-Splines. We are using Gmsh to mesh the geometry and, so far, we obtained very satisfactory meshes in two dimensions :)
Would it be possible to extend the functions exposed from the OpenCascade CAD kernel to include the construction of BSpline surfaces from the set of control point coordinates/weights, (p,q)-degrees and (U,V) knot vector values/multiplicities?
https://www.opencascade.com/doc/occt-7.0.0/refman/html/class_geom___b_spline_surface.html
In addition, would it be possible to include the OpenCascade function "GeomFill_BSplineCurves" to define a surface given by 2, 3, or 4 bounding curves (a Coons patch)?
https://www.opencascade.com/doc/occt-7.0.0/refman/html/class_geom_fill___b_spline_curves.html
If I am not mistaken, the difference between this method and the functionality already exposed by "gmsh/model/geo/addSurfaceFilling" is that:
- The addSurfaceFilling algorithm attempts to solve an optimization problem to find a surface that satisfies the given boundary. The resulting surface is a trimmed surface and it may have unexpected/odd shapes.
- The OCC GeomFill_BSplineCurves method is explicit and results in a B-Spline surface that is not trimmed. In my (limited) experience, the shapes resulting from this method are more intuitive/easy to control.
We would be very glad if any of these methods could be added to Gmsh in the future. In any case, we want to thank the Gmsh team for all the hard work that you guys did to build up this great meshing tool and for releasing it with an open source license!
P.S.: Perhaps it would be possible to use these functions directly in OpenCascade (C++) to do what we want and then export as a .step and .brep file but this would break down the work flow that we have in Python :/