 |
PK_CURVE_intersect_curve |
|
PK_ERROR_code_t PK_CURVE_intersect_curve
(
--- received arguments ---
PK_CURVE_t curve_1, --- first curve
PK_INTERVAL_t interval_1, --- first interval
PK_CURVE_t curve_2, --- second curve
PK_INTERVAL_t interval_2, --- second interval
const PK_CURVE_intersect_curve_o_t *options, --- options structure
--- returned arguments ---
int *const n_vectors, --- number of intersections
PK_VECTOR_t **const vectors, --- positions of intersections
double **const ts_1, --- parameters on curve_1
double **const ts_2, --- parameters on curve_2
PK_intersect_vector_t **const types --- types of intersections
)
PK_CURVE_intersect_curve finds the intersections between specified regions of
two curves.
Specific Errors:
PK_ERROR_bad_parameter (MILD) bad parameter given
PK_ERROR_not_on_surface (MILD) curve does not lie on common surface
PK_ERROR_mixed_geometry (MILD) cannot intersect foreign curves with
polylines
PK_ERROR_cant_do_intersect (SERIOUS) intersection cannot be done
PK_CURVE_intersect_curve finds the intersections between specified regions of
two curves.
It returns an array of intersection vectors 'vectors', arrays of parameters
of the two input curves, and an array of tokens classifying the intersections.
The intersections are ordered along the first curve, 'curve_1', and are
classified according to the direction of this curve.
If there are no intersections of the curves within the bounds, 'n_vectors'
is returned as zero.
The parameters of 'curve_1' at the intersections are returned as an array
'ts_1' of length 'n_vectors' and the parameters of 'curve_2' in 'ts_2'.
The intersection types are returned in an array of length 'n_vectors'.
These can be one of:
PK_intersect_vector_simple_c: : A simple intersection not
adjoining a region of coincidence. For
PK_CURVE_intersect_curve, this includes
tangent intersections.
PK_intersect_vector_start_c: : An intersection at the start
of a region of coincidence.
PK_intersect_vector_end_c : An intersection at the end
of a region of coincidence.
PK_intersect_vector_tangent_c is not returned by PK_CURVE_intersect_curve.
Whether an intersection is at the start or end of a region of coincidence
is determined by the direction of the first curve, 'curve_1'.
Coincident intersections are returned for all points lying at the bounds of
regions of coincidence, including the ends of fully coincident curves
(or regions of curves). In the case where two closed curves are coincident,
but the bounds of 'curve_1' are not coincident with those of 'curve_2',
the intersections returned will be at the bounds of 'curve_1'.
The regions of the curves which are to be intersected are specified
by giving an interval for each curve. These are given in the
arguments 'interval_1' and 'interval_2'.
A surface may be supplied in the options structure which contains both the
curves, the function will work without this surface but it may
be more efficient to supply it.
'box' describes the box that contains the area of interest. All
intersections inside this box will be returned, but ones outside it may
not be. The box may be used for efficiency. The box must be of type
PK_BOX_t.
Any B-curve, B-surface or offset surface must be capable of passing the full
checks imposed by PK_GEOM_check.