PK_CURVE_make_bcurve_2   

PK_ERROR_code_t                 PK_CURVE_make_bcurve_2
(
--- received arguments ---
PK_CURVE_t                      curve,         --- curve
PK_INTERVAL_t                   range,         --- curve interval
const PK_CURVE_make_bcurve_o_t *options,       --- option structure [PF]

--- returned arguments ---
PK_CURVE_make_bcurve_t   *const status,        --- status
PK_BCURVE_t              *const bcurve,        --- created BCURVE
double                   *const achieved_tol,  --- achieved tolerance
PK_achieved_cont_t       *const achieved_cont  --- achieved continuity
)


This function creates a B-curve which is coincident with the given parametric
'range' of the given 'curve'.

This function offers partial support for facet geometry [PF]


Specific Errors:

    PK_ERROR_cant_make_bspline     (MILD)  Failed to create geometry.
    PK_ERROR_zero_interval         (MILD)  Input 'range' has zero extent.
    PK_ERROR_bad_order             (MILD)  Input 'degree' is invalid.
    PK_ERROR_bad_combination       (MILD)  The supplied 'continuity' is
                                           incompatible with the 'degree'.
    PK_ERROR_facet_geometry        (MILD)  Input 'curve' is a polyline and
                                           unsupported 'have_degree' or
                                           'force_continuity' has been set in
                                           'options'.


The resulting 'bcurve' will be exactly coincident with the given 'curve' if
possible. Where this is not possible, the maximum distance between 'curve' and
'bcurve' will be limited by 'tolerance'. The function will usually achieve this
condition but this is not guaranteed.

If an exact result does not match the specified continuity, an approximation
will be used.

Finer control over the form of the resulting 'bcurve' can be provided through
the option structure.

The resulting 'bcurve' will be in the current partition.

  Notes for specific classes of 'curve'
  =====================================

             Line:  Unless the 'have_degree' option is set, 'bcurve' will be
                    linear (degree 1). The result will always be exact.

   Circle/Ellipse:  The result will be cubic by default, and exact unless the
                    'force_non_rational' option is set. The parameterisation
                    of the input 'curve' may not be preserved.

          B-curve:  Unless you specify the degree of the output 'bcurve', using
                    the 'have_degree' and 'degree' option fields, the output
                    'bcurve' will have the same degree as the input 'curve' if
                    the result is exact.

                    The result will be an approximation if and only if any of
                    the following are true:
                      o The degree is lowered (note that increasing the degree
                        can be done with an exact result).
                      o The input 'curve' is rational and the
                        'force_non_rational' option is true, except in the
                        special case when all the weights of the rational curve
                        are equal.
                      o Any discontinuities are eliminated (via the
                        'force_continuity' option).

  Intersection/SP:  The output will usually be approximate (and cubic by
                    default) unless the 'curve' coincides with a constant
                    parameter line of an underlying B-surface. In this case
                    the options will apply to the extracted B-curve and an
                    exact result will be possible in some cases.

         Polyline:  The output 'bcurve' will be piecewise linear (degree 1) and
                    the result will be exact. If either the 'have_degree'
                    option or 'force_continuity' option is set to an
                    unsupported value, then the function will fail with
                    PK_ERROR_facet_geometry.