Analysis Situs ./features/NURBS modeling |

Download | Features | Source code | Terminology | References |

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.

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.

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:

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.

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.

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.

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: