Project Curve to Surface (NURBS)
================================

Dependencies
------------

This node requires FreeCAD_ libraries installed to work.

.. _FreeCAD: https://www.freecadweb.org/

Functionality
-------------

This node calculates the projection of a given Curve onto given Surface. Several types of projections are available.

**NOTE**: This node can work with NURBS and NURBS-like curves and surfaces only. Output curves are always NURBS.

Inputs
------

This node has the following inputs:

* **Curve**. The curve to be projected. This input is mandatory.
* **Surface**. The surface to be projected. This input is mandatory.
* **Vector**. Parallel projection vector. This input is available only if
  **Projection** parameter is set to **Parallel**. The default value is ``(0,
  0, -1)`` (down along Z axis).
* **Point**. Perspective projection origin point. This input is available only
  if **Projection** parameter is set to **Perspective**. The default value is
  ``(0, 0, 0)`` (global origin).

Parameters
----------

This node has the following parameter:

* **Projection**. This defines what sort of projection will be used to
  calculate the trimming of the Surface. The available options are:

  * **Parallel**. Parallel projection along a provided Vector. This option is the default one.
  * **Perspective**. Perspective projection from a provided origin point.
  * **Orthogonal**. Orthogonal projection (along surface's normals).

Outputs
-------

This node has the following outputs:

* **Curves**. The projected curves (in 3D space).
* **TrimCurves**. Curves in U/V parameter space of the surface, which
  correspond to the projected curves. These can be used as trimming curves, for
  example, for "Tessellate & Trim" node.

Example of Usage
----------------

Project several Circles onto a Surface generated by lofting between three NURBS curves:

.. image:: https://user-images.githubusercontent.com/284644/92305855-6e27d280-efa4-11ea-8309-a78bb9c7e152.png

