
Analysis Situs uses two geometric modeling kernels. The main kernel is OpenCascade. Another one is the inhouse NURBS modeling kernel developed following the classic monography by L. Piegl and W. Tiller, The NURBS Book. In this chapter, we present the basic NURBS modeling functionality available in Analysis Situs without emphasizing the difference between the two kernels.
The point inversion algorithm for Bsurface is based on Newton iterations following the approach presented in The NURBS Book. The input for this calculation is the coordinates of a 3D point. The output is the parametric (u,v) image which gives a point projected on a surface. Use invertpointsurf Tcl command for pointsurface inversion.
Bezier decomposition is one of the fundamental algorithms for manipulating NURBSbased geometry. It is known that any Bcurve can be represented as a tuple of Bezier curves without distortion. The curve splitting technique implemented in Analysis Situs follows the algorithm A5.6 from The NURBS Book. Use splitcurvebezier Tcl command to decompose a Bcurve into the equivalent collection of Bezier curves.
To exchange curvilinear U and V axes of a Bsurface, use exchangeuv Tcl command. The curvilinear axes are visualized with small red (U axis) and green (V axis) glyphs starting at the first pole. Exchanging U and V parameters does not change the surface shape but flips the axes.
After flipping:
Knot insertion into a Bspline curve is implemented following the algorithm A5.1 from The NURBS Book. To perform knot insertion, use insertknotcurve Tcl command.
Knot insertion into a Bspline surface is implemented following the algorithm A5.3 from The NURBS Book. To perform knot insertion, use insertknotsurfu and insertknotsurfv Tcl commands.
You can find the details on surface fairing in the dedicated page.
You can create a Bcurve or a Bsurface from its JSON representation using definegeom Tcl command. In the opened dialog, you will have to type the name of the geometric entity and its textual representation.
Here is an example of a valid Bsurface JSON representation (try copying and pasting it to the dialog opened with definegeom command):
{ entity: surface, type: bsurface, continuity: C0, domain: { U_min: 0, U_max: 1, V_min: 0, V_max: 1 }, flags: { is_U_rational: 0, is_V_rational: 0, is_U_periodic: 0, is_V_periodic: 0, is_U_closed: 0, is_V_closed: 0 }, properties: { U_degree: 1, V_degree: 1, U_knots: [0, 0, 0.5, 1, 1], V_knots: [0, 0, 0.5, 1, 1], num_poles_in_U_axis: 3, num_poles_in_V_axis: 3, poles: { u0: [[10, 10, 0], [10, 0, 0], [10, 10, 0]], u1: [[0, 10, 0], [0, 0, 10], [0, 10, 0]], u2: [[10, 10, 0], [10, 0, 0], [10, 10, 0]] } } }
In case you start from an existing CAD model, you can obtain a JSON dump by selecting the Bsurface of interest and using the context menu as shown in the following animation: