NURBS Loft ========== Dependencies ------------ This node can optionally use Geomdl_ library. .. _Geomdl: https://onurraufbingol.com/NURBS-Python/ Functionality ------------- This node generates a NURBS Surface object from several NURBS or NURBS-like Curves by applying so-called "skinning", or "lofting", operation. In a way, "lofting" is interpolation of several curves to make a surface. So, this node is somewhat similar to "Surface from Curves" node. Differences are: * "NURBS Loft" can work only with NURBS and NURBS-like curves, while "Surface from Curves" works with arbitrary (e.g. formula-specified) curves. * "NURBS Loft" node always generates a NURBS Surface; for such surface, some specific API methods can be applied; such surface can be saved in some file format, which understands only NURBS (at the moment, see "NURBS to JSON" node; later, nodes to save NURBS in some industry-used formats can appear). * "NURBS Loft" usually works a lot faster comparing to "Surface from Curves". At the moment, this node can effectively work with the following types of curves: * NURBS curves * Bezier curves * Cubic splines * Polylines * Circular arcs * Line segments Some nodes, that output complex curves composed from simple curves (for example, "Rounded rectangle"), have **NURBS output** parameter; when it is checked, such nodes output NURBS curves, so "NURBS Loft" can work with them. This node also has a restriction concerning degrees of input curves. In order for node to work, the input curves must: * Either all have the same degree; * Or, if some of curves have degree less than others, such smaller-degree curves must have number of control points equal to degree plus one. Inputs ------ This node has the following inputs: * **Curves**. Curves to make a loft from. This input can process data with nesting level up to 3 (list of lists of lists of curves), in order to use one value from **DegreeV** input per list of curves. This input is mandatory. * **DegreeV**. Degree of NURBS curves used to interpolate in V direction. As most of Sverchok numeric inputs, this input can process data with nesting level up to 2 (list of lists of numbers). Degree of 1 will make a "linear loft", i.e. a surface composed from several ruled surfaces; higher degrees will create more smooth surfaces. The default value is 3. Parameters ---------- This node has the following parameters: * **Implementation**. This defines the implementation of NURBS mathematics to be used. The available options are: * **Geomdl**. Use Geomdl_ library. This option is available only when Geomdl package is installed. * **Sverchok**. Use built-in Sverchok implementation. In general, built-in implementation should be faster; but Geomdl implementation is better tested. The default option is **Geomdl**, when it is available; otherwise, built-in implementation is used. * **U Knots**. This parameter is available in the N panel only. This defines how the node will modify input curves in order to make them use exactly the same knot vectors. Available options are: * **Unify**. Additional knots will be inserted for each curve in places where other curves have knots. * **Average**. Calculate knot vector by averaging knot vectors of the input curves. This can work only when input curves have the same number of control points. **Unify** option often generates a lot of additional control points for the resulting surface; it is more universal, and more precise in many cases. **Average** mode does not create additional control points, and so it works faster, and any following nodes working with the generated surface will work faster; but **Average** mode is less universal, and in many cases it gives less precise interpolations. The default value is **Unify**. * **Metric**. This parameter is available in the N panel only. Distance type used for interpolation along V direction. The available values are: * Manhattan * Euclidean * Points (just number of points from the beginning) * Chebyshev * Centripetal (square root of Euclidean distance). The default option is Euclidean. Outputs ------- This node has the following outputs: * **Surface**. The generated NURBS surface. * **UnifiedCurves**. Curves that were actually used to construct the surface. These are the same curves as ones in the **Curves** input, but unified to have the same degree and knot vector. * **VCurves**. Curves along V direction of the surface, which were used to calculate surface's control points during skinning process. Example of usage ---------------- Generate several interpolating NURBS curves and draw a skinned surface through them: .. image:: https://user-images.githubusercontent.com/284644/90965255-f5bf0d00-e4df-11ea-8498-dfbf3d26fd24.png