 |
PK_SURF_eval_handed |
|
PK_ERROR_code_t PK_SURF_eval_handed
(
--- received arguments ---
PK_SURF_t surf, --- surface
PK_UV_t uv, --- u and v parameter pair
int n_u_derivs, --- number of u derivatives [NF]
int n_v_derivs, --- number of v derivatives [NF]
PK_LOGICAL_t triangular, --- triangular derivative array required
PK_HAND_t u_hand_dir, --- evaluate u as limit from left or right
PK_HAND_t v_hand_dir, --- evaluate v as limit from left or right
--- returned arguments ---
PK_VECTOR_t p[] --- point and derivatives
)
This function behaves like PK_SURF_eval, but takes additional arguments
( 'u_hand_dir' and 'v_hand_dir' ) as input.
This function offers partial support for facet geometry [PF]
Specific Errors:
PK_ERROR_bad_parameter not permitted to evaluate outside of
range (MILD)
PK_ERROR_too_many_derivatives too many derivatives requested (MILD)
PK_ERROR_num_derivs_not_equal where triangular format was requested
(MILD)
PK_ERROR_eval_failure internal evaluator failure (MILD)
This is the handed version of PK_SURF_eval which evaluates a point and
derivatives at a parameter pair on a surface patch indicated by an additional
pair of direction arguments.
In the case of mesh surfaces (PK_CLASS_mesh),
no derivatives can be returned. 'n_u_derivs' and 'n_v_derivs' must be set to 0.
The 'u_hand_dir' and 'v_hand_dir' arguments allow evaluation from both the left
and right at patch boundaries. Usually these arguments should be set to
PK_HAND_right_c which results in evaluation approaching from the right. This
means that if the parameter t lies on a patch boundary then the derivatives
will be calculated using the next patch and the starting local parameter. If
the arguments are set to PK_HAND_left_c (evaluate from left) then the
derivatives will be calculated using the previous patch and the end local
parameter.
The following examples show how the direction arguments affect the evaluation
at the given parameter position (shown as *), where straight lines represent
surface patch boundaries:
^ U ^ U
| |
u_on_right | u_on_right u_on_right/left * u_on_right/left
v_on_left | v_on_right v_on_left | v_on_right
---------------*--------------> V -----------------+------------------> V
u_on_left | u_on_left |
v_on_left | v_on_right
The derivatives obtained from left and right evaluation may be different if
there is a discontinuity at the patch boundary.
If a parameter (u or v) is at the beginning / end of a global parameter
boundary and in non-periodic direction, PK_HAND_left_c / PK_HAND_right_c
means the evaluation will use the surface extended from the boundary.