# HM_ExtAPI::CreateCurveComposed()

Creates composed curve object.

## Syntax

```
bool CreateCurveComposed(
HM_EntityGeometryCurve& new_curve,
int num_segs,
const HM_EntityGeometryCurve* curve_segs,
const double* start_params,
const double* end_params,
const double* curve_params,
const bool* curve_dirs
);
```

## Type

HyperMesh Ext API Function

## Description

The function creates the curve object of the type HM_ExtAPI::COMPOSED_CURVE().

Use the function HM_ExtAPI::CurveComposedGetSize() to get number of segments in composed curve.

Composed curve geometry is defined by its curve segments. The parametric range of the composed curve is subdivided into parametric segment with each segment corresponding to one of the curve segments of the composed curve. Depending on the location of the composed curve parameter in one of the parametric segments corresponding curve segment is used to calculate the curve point for this parameter.

Subdivision of parametric range of the composed curve is defined by a set of parametric values {tα} with index α taking the values in the range 0 … N and N is the number of curve segments. For parametric value t such that

tα ≤ t ≤ tα+1

the point on the composed curve is calculated as

C(t) = Cα(τ)

where the "local" parameter τ is defined by segment parameterization and the direction flag fα that defines mutual orientation of the composed curve parameterization and the parameterization of the segment curve. The "local" parameter is obtained by mapping from global parameter t as

τ = τα, 0 + (τα, 1 - τα, 0) (t - tα) / (tα+1 - tα) if fα is true

τ = τα, 1 + (τα, 0 - τα, 1) (t - tα) / (tα+1 - tα) if fα is false

Parameters used by CreateCurveComposed | Composed Curve parameters |
---|---|

num_segs | N |

curve_segs | {Cα} |

start_params | {τα, 0} |

end_params | {τα, 1} |

curve_params | {tα} |

seg_dirs | {fα} |

The values of `start_params` and `end_params` parameters
must both be NULL or not NULL at the same time. If both of them are NULL then default
parameterization of segment curves is used (see
HM_ExtAPI::GeomCurveGetParameterBounds for more details).

In case if the value of `curve_params` parameter is NULL then composed
curve parameterization at joints between segments is calculated automatically.

In case if the value of `seg_dirs` parameter is NULL all values of fα are
assumed to be true.

If the function succeeds, the return value is true. If the function fails, the return value is false. To get extended value information, call HM_ExtAPI::GetLastErrorCode.

Requires including hm_extapi.h.

## Inputs

`new_curve`- [out] - Handle to new curve object.
`num_segs`- [in] - Number of curve segments used to create composed curve.
`curve_segs`- [in] - Points to array of curve segment handles. The number of entries in the array
must be
`num_segs`. `start_params`- [in] - If not NULL then points to array of segment start parameters. The number of
entries in the array in this case must be
`num_segs`. In case of NULL default parameterization of segment curves is used. `end_params`- [in] - If not NULL then points to array of segment end parameters. The number of
entries in the array in this case must be
`num_segs`. In case of NULL default parameterization of segment curves is used. `curve_params`- [in] - If not NULL then points to array of parameters of the created composed curve
corresponding to joints between segments. The number of entries in the array in this
case must be
`num_segs`+1. In case of NULL parameterization of the curve is calculated automatically. `seg_dirs`- [in] - If not NULL then points to array of flags that define curve segment directions
in the composed curve. The number of entries in the array in this case must be
`num_segs`. The value of true corresponds to the direction of the segment parameterization being the same as the composed curve parameterization. The value of false corresponds to opposite directions. In case if the value of`seg_dirs`is NULL the value of true is assumed for all segments.

## Errors

None.