./features/NURBS modeling
Download Features Source code Terminology References

NURBS modeling

Analysis Situs uses two geometric modeling kernels. The main kernel is OpenCascade. Another one is the in-house 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.

Basic algorithms

Decompose B-curve into Bezier segments

Bezier decomposition is one of the fundamental algorithms for manipulating NURBS-based geometry. It is known that any B-curve 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 split-curve-bezier Tcl command to decompose a B-curve into the equivalent collection of Bezier curves.

Flip parameterization

To exchange curvilinear U and V axes of a B-surface, use exchange-uv 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:

Curve knot insertion

Knot insertion into a B-spline curve is implemented following the algorithm A5.1 from The NURBS Book. To perform knot insertion, use insert-knot-curve Tcl command.

Surface knot insertion

Knot insertion into a B-spline surface is implemented following the algorithm A5.3 from The NURBS Book. To perform knot insertion, use insert-knot-surf-u and insert-knot-surf-v Tcl commands.

Modeling operators

Surface fairing

Surface fairing is available for B-spline surfaces. This modeling operator is implemented following the paper by [Kallay, 1993]. The purpose of this operator is to move the control points of a B-surface attempting to minimize its bending energy. The boundary control points are usually constrained to be in a fixed position so that any deformation of a surface does not violate its boundaries (hence the faired surface is not a trivial plane for any values of the fairing coefficient).


Create primitive from JSON

You can create a B-curve or a B-surface from its JSON representation using define-geom 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 B-surface JSON representation (try copying and pasting it to the dialog opened with define-geom command):

  entity: surface,
  type: b-surface,
  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 B-surface of interest and using the context menu as shown in the following animation: