 |
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.